diff --git a/orange-demo-flowable/orange-demo-flowable-web/.eslintignore b/orange-demo-flowable/orange-demo-flowable-web/.eslintignore index 9c420b5a..53395bc7 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/.eslintignore +++ b/orange-demo-flowable/orange-demo-flowable-web/.eslintignore @@ -1 +1,2 @@ -/src/views/workflow/package/* \ No newline at end of file +/src/views/workflow/package/* +/src/components/Verifition/* \ No newline at end of file diff --git a/orange-demo-flowable/orange-demo-flowable-web/package.json b/orange-demo-flowable/orange-demo-flowable-web/package.json index db304a7c..316b3cd0 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/package.json +++ b/orange-demo-flowable/orange-demo-flowable-web/package.json @@ -32,7 +32,8 @@ "vuedraggable": "^2.24.3", "xml-js": "^1.6.11", "highlight.js": "^10.5.0", - "bpmn-js-token-simulation": "^0.10.0" + "bpmn-js-token-simulation": "^0.10.0", + "crypto-js": "^4.1.1" }, "devDependencies": { "@vue/cli-plugin-babel": "~4.2.0", diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SystemController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SystemController.js index 75a4fd01..6904672c 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SystemController.js +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/Controller/SystemController.js @@ -249,4 +249,8 @@ export default class SystemController { static deleteSysLoginUser (sender, params, axiosOption, httpOption) { return sender.doUrl('admin/upms/loginUser/delete', 'post', params, axiosOption, httpOption); } + // 上传用户头像URL + static changeHeadImageUrl () { + return 'admin/upms/login/changeHeadImage'; + } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowOperationController.js b/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowOperationController.js index 7743c19f..d10bfa88 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowOperationController.js +++ b/orange-demo-flowable/orange-demo-flowable-web/src/api/FlowController/FlowOperationController.js @@ -107,8 +107,28 @@ export default class FlowOperationController { static rejectRuntimeTask (sender, params, axiosOption, httpOption) { return sender.doUrl('/admin/flow/flowOperation/rejectRuntimeTask', 'post', params, axiosOption, httpOption); } + // 驳回到起点 + static rejectToStartUserTask (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/rejectToStartUserTask', 'post', params, axiosOption, httpOption); + } // 撤销 static revokeHistoricTask (sender, params, axiosOption, httpOption) { return sender.doUrl('/admin/flow/flowOperation/revokeHistoricTask', 'post', params, axiosOption, httpOption); } + // 抄送消息列表 + static listCopyMessage (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowMessage/listCopyMessage', 'post', params, axiosOption, httpOption); + } + // 消息个数 + static getMessageCount (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowMessage/getMessageCount', 'get', params, axiosOption, httpOption); + } + // 在线表单流程抄送消息数据 + static viewOnlineCopyBusinessData (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOnlineOperation/viewCopyBusinessData', 'get', params, axiosOption, httpOption); + } + // 静态表单流程抄送消息数据 + static viewCopyBusinessData (sender, params, axiosOption, httpOption) { + return sender.doUrl('/admin/flow/flowOperation/viewCopyBusinessData', 'get', params, axiosOption, httpOption); + } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/default.jpg b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/default.jpg new file mode 100644 index 00000000..aa0237bb Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/default.jpg differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/orange-group2.png b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/orange-group2.png new file mode 100644 index 00000000..218e76ec Binary files /dev/null and b/orange-demo-flowable/orange-demo-flowable-web/src/assets/img/orange-group2.png differ diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/base.scss b/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/base.scss index 76177f49..8d939c44 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/base.scss +++ b/orange-demo-flowable/orange-demo-flowable-web/src/assets/style/base.scss @@ -130,6 +130,10 @@ body .layer-advance-dialog .layui-layer-content { } } + .el-button + .btn-import { + margin-left: 10px!important; + } + /** * 过滤组件样式 **/ @@ -230,6 +234,22 @@ body .layer-advance-dialog .layui-layer-content { } } + .el-form-item.el-form-item--mini { + min-height: 29px; + } + + .el-form-item.el-form-item--small { + min-height: 32px; + } + + .el-form-item.el-form-item--medium { + min-height: 36px; + } + + .el-form-item.el-form-item--default { + min-height: 40px; + } + .el-aside { overflow: visible; } @@ -472,6 +492,12 @@ body .layer-advance-dialog .layui-layer-content { .user-dropdown-item { font-size: 12px; color: $--color-text-primary; + + .el-badge { + margin-top: -8px; + margin-left: 10px; + height: 20px; + } } .hamburger-container { diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/InputNumberRange/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/components/InputNumberRange/index.vue index 94f59ba4..44105416 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/components/InputNumberRange/index.vue +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/InputNumberRange/index.vue @@ -212,6 +212,7 @@ export default { watch: { value: { handler: function (val, oldVal) { + this.userInput = val; if (!this.valueEquals(val, oldVal) && this.validateEvent) { this.dispatch('ElFormItem', 'el.form.change', val); } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/Verify.vue b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/Verify.vue new file mode 100644 index 00000000..3983d771 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/Verify.vue @@ -0,0 +1,494 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/Verify/VerifyPoints.vue b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/Verify/VerifyPoints.vue new file mode 100644 index 00000000..71cecd38 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/Verify/VerifyPoints.vue @@ -0,0 +1,268 @@ + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/Verify/VerifySlide.vue b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/Verify/VerifySlide.vue new file mode 100644 index 00000000..2b1a14ee --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/Verify/VerifySlide.vue @@ -0,0 +1,381 @@ + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/api/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/api/index.js new file mode 100644 index 00000000..7b650f8a --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/api/index.js @@ -0,0 +1,25 @@ +/** + * 此处可直接引用自己项目封装好的 axios 配合后端联调 + */ + +import request from './../utils/axios' // 组件内部封装的axios +// import request from "@/api/axios.js" //调用项目封装的axios + +// 获取验证图片 以及token +export function reqGet(data) { + return request({ + url: '/captcha/get', + method: 'post', + data + }) +} + +// 滑动或者点选验证 +export function reqCheck(data) { + return request({ + url: '/captcha/check', + method: 'post', + data + }) +} + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/utils/ase.js b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/utils/ase.js new file mode 100644 index 00000000..71f07e0f --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/utils/ase.js @@ -0,0 +1,11 @@ +import CryptoJS from 'crypto-js' +/** + * @word 要加密的内容 + * @keyWord String 服务器随机返回的关键字 + * */ +export function aesEncrypt(word, keyWord = 'XwKsGlMcdPMEhR1B') { + var key = CryptoJS.enc.Utf8.parse(keyWord) + var srcs = CryptoJS.enc.Utf8.parse(word) + var encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) + return encrypted.toString() +} diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/utils/axios.js b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/utils/axios.js new file mode 100644 index 00000000..6c633247 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/utils/axios.js @@ -0,0 +1,31 @@ +import axios from 'axios' +import projectConfig from '@/core/config'; + +axios.defaults.baseURL = projectConfig.baseUrl + +const service = axios.create({ + timeout: 40000, + headers: { + 'X-Requested-With': 'XMLHttpRequest', + 'Content-Type': 'application/json; charset=UTF-8' + }, +}) +service.interceptors.request.use( + config => { + return config + }, + error => { + Promise.reject(error) + } +) + +// response interceptor +service.interceptors.response.use( + response => { + const res = response.data + return res + }, + error => { + } +) +export default service diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/utils/util.js b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/utils/util.js new file mode 100644 index 00000000..8f26e736 --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/components/Verifition/utils/util.js @@ -0,0 +1,36 @@ +export function resetSize(vm) { + var img_width, img_height, bar_width, bar_height // 图片的宽度、高度,移动条的宽度、高度 + + var parentWidth = vm.$el.parentNode.offsetWidth || window.offsetWidth + var parentHeight = vm.$el.parentNode.offsetHeight || window.offsetHeight + + if (vm.imgSize.width.indexOf('%') != -1) { + img_width = parseInt(this.imgSize.width) / 100 * parentWidth + 'px' + } else { + img_width = this.imgSize.width + } + + if (vm.imgSize.height.indexOf('%') != -1) { + img_height = parseInt(this.imgSize.height) / 100 * parentHeight + 'px' + } else { + img_height = this.imgSize.height + } + + if (vm.barSize.width.indexOf('%') != -1) { + bar_width = parseInt(this.barSize.width) / 100 * parentWidth + 'px' + } else { + bar_width = this.barSize.width + } + + if (vm.barSize.height.indexOf('%') != -1) { + bar_height = parseInt(this.barSize.height) / 100 * parentHeight + 'px' + } else { + bar_height = this.barSize.height + } + + return { imgWidth: img_width, imgHeight: img_height, barWidth: bar_width, barHeight: bar_height } +} + +export const _code_chars = [1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] +export const _code_color1 = ['#fffff0', '#f0ffff', '#f0fff0', '#fff0f0'] +export const _code_color2 = ['#FF0033', '#006699', '#993366', '#FF9900', '#66CC66', '#FF33CC'] diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/core/http/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/core/http/index.js index 3dba6663..e3f27df3 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/core/http/index.js +++ b/orange-demo-flowable/orange-demo-flowable-web/src/core/http/index.js @@ -119,7 +119,47 @@ const fetchDownload = function (url, params, fileName) { }); }); } - +/** + * 上传文件 + * @param {*} url 请求的url + * @param {*} params 请求参数 + */ +const fetchUpload = function (url, params) { + return new Promise((resolve, reject) => { + request({ + url: requestUrl(url), + method: 'post', + data: params, + headers: { + 'Content-Type': 'multipart/form-data' + }, + transformRequest: [ + function (data) { + let formData = new FormData(); + Object.keys(data).map(key => { + formData.append(key, data[key]); + }); + return formData; + } + ] + }).then(res => { + if (res.data && res.data.success) { + resolve(res.data); + } else { + Message.error({ + showClose: true, + message: res.data.errorMessage ? res.data.errorMessage : '数据请求失败' + }); + } + }).catch(e => { + Message.error({ + showClose: true, + message: e.errorMessage ? e.errorMessage : '网络请求错误' + }); + reject(e); + }); + }); +} // url调用节流Set const ajaxThrottleSet = new Set(); /** @@ -191,6 +231,7 @@ const doUrl = function (url, type, params, axiosOption, options) { } }; +Vue.prototype.upload = fetchUpload; Vue.prototype.download = fetchDownload; Vue.prototype.doUrl = doUrl; Vue.prototype.loadingManager = loadingManager; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/global.js b/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/global.js index 7c78fa4b..e29544d6 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/global.js +++ b/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/global.js @@ -100,6 +100,9 @@ const globalMixin = { ...mapMutations(['setLoadingStatus']) }, computed: { + defaultFormItemSize () { + return 'mini'; + }, ...mapGetters(['getUserInfo']) }, watch: { diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/index.js index 43cffa1e..c7d1a6b9 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/index.js +++ b/orange-demo-flowable/orange-demo-flowable-web/src/core/mixins/index.js @@ -191,6 +191,7 @@ const statsDateRangeMixin = { */ formatDateByStatsType (date, statsType = 'day', format = 'yyyy-MM-dd') { if (date == null) return undefined; + if (statsType == null) return date; statsType = allowStatsType.indexOf(statsType) === -1 ? 'day' : statsType; if (statsType === 'datetime') format = 'yyyy-MM-dd HH:mm:ss'; diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/router/systemRouters.js b/orange-demo-flowable/orange-demo-flowable-web/src/router/systemRouters.js index 02000a2b..b594a4d1 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/router/systemRouters.js +++ b/orange-demo-flowable/orange-demo-flowable-web/src/router/systemRouters.js @@ -44,7 +44,7 @@ const routers = [ {path: 'formOnlinePage', component: _import('onlineForm/formOnlinePage/index'), name: 'formOnlinePage', props: getProps, meta: {title: '在线表单管理'}}, {path: 'onlineForm', component: _import('onlineForm/index'), name: 'onlineForm', props: getProps, meta: {title: '在线表单'}}, // 工作流模块路由配置 - {path: 'formMessage', component: _import('workflow/formMessage/index'), name: 'formMessage', meta: {title: '催办消息'}}, + {path: 'formMessage', component: _import('workflow/formMessage/index'), name: 'formMessage', props: getProps, meta: {title: '催办消息'}}, {path: 'formFlowCategory', component: _import('workflow/flowCategory/formFlowCategory'), name: 'formFlowCategory', props: getProps, meta: {title: '流程分类管理'}}, {path: 'formFlowEntry', component: _import('workflow/flowEntry/formFlowEntry'), name: 'formFlowEntry', props: getProps, meta: {title: '流程设计'}}, {path: 'formAllInstance', component: _import('workflow/taskManager/formAllInstance'), name: 'formAllInstance', props: getProps, meta: {title: '流程实例'}}, diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/staticDict/flowStaticDict.js b/orange-demo-flowable/orange-demo-flowable-web/src/staticDict/flowStaticDict.js index b73f2121..f3286393 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/staticDict/flowStaticDict.js +++ b/orange-demo-flowable/orange-demo-flowable-web/src/staticDict/flowStaticDict.js @@ -67,6 +67,11 @@ const SysFlowTaskOperationType = new DictionaryBase('任务操作类型', [ name: '驳回', symbol: 'REJECT' }, + { + id: 'rejectToStart', + name: '驳回到起点', + symbol: 'REJECT_TO_START' + }, { id: 'revoke', name: '撤销', @@ -182,6 +187,55 @@ const SysFlowWorkOrderStatus = new DictionaryBase('工单状态', [ ]); Vue.prototype.SysFlowWorkOrderStatus = SysFlowWorkOrderStatus; +const SysFlowCopyForType = new DictionaryBase('抄送类型', [ + { + id: 'user', + name: '抄送人', + symbol: 'USER' + }, + { + id: 'dept', + name: '抄送部门', + symbol: 'DEPT' + }, + { + id: 'role', + name: '抄送角色', + symbol: 'ROLE' + }, + { + id: 'deptPostLeader', + name: '审批人部门领导', + symbol: 'SELF_DEPT_LEADER' + }, + { + id: 'upDeptPostLeader', + name: '审批人上级部门领导', + symbol: 'UP_DEPT_LEADER' + }, + { + id: 'allDeptPost', + name: '抄送岗位', + symbol: 'POST' + }, + { + id: 'selfDeptPost', + name: '审批人部门岗位', + symbol: 'SELF_DEPT_POST' + }, + { + id: 'upDeptPost', + name: '审批人上级部门岗位', + symbol: 'UP_DEPT_POST' + }, + { + id: 'deptPost', + name: '指定部门岗位', + symbol: 'DEPT_POST' + } +]); +Vue.prototype.SysFlowCopyForType = SysFlowCopyForType; + export { SysFlowEntryPublishedStatus, SysFlowEntryBindFormType, @@ -189,5 +243,6 @@ export { SysFlowTaskOperationType, SysFlowTaskType, SysFlowVariableType, - SysFlowWorkOrderStatus + SysFlowWorkOrderStatus, + SysFlowCopyForType } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/store/actions.js b/orange-demo-flowable/orange-demo-flowable-web/src/store/actions.js index 673be87a..3b33b68b 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/store/actions.js +++ b/orange-demo-flowable/orange-demo-flowable-web/src/store/actions.js @@ -1,23 +1,15 @@ import { FlowOperationController } from '@/api/flowController.js'; -// 催办消息下拉个数 -const MESSAGE_SHOW_COUNT = 10; // 催办消息轮询间隔 -const MESSAGE_TIMER_INTERVAL = 10000; +const MESSAGE_TIMER_INTERVAL = 1000 * 60 * 5; // 获得消息列表数据 function loadMessage (context, owner) { - let params = { - pageParam: { - pageSize: MESSAGE_SHOW_COUNT, - pageNum: 1 - } - } - FlowOperationController.listRemindingTask(owner, params, null, { + FlowOperationController.getMessageCount(owner, {}, null, { showMask: false, showError: false }).then(res => { - context.commit('setMessageList', res.data); + context.commit('setMessageCount', res.data); }).catch(e => { console.error(e); }); diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/store/getters.js b/orange-demo-flowable/orange-demo-flowable-web/src/store/getters.js index 53de2d99..14abfa84 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/store/getters.js +++ b/orange-demo-flowable/orange-demo-flowable-web/src/store/getters.js @@ -83,7 +83,7 @@ export default { getCurrentColumnId: (state) => { return state.currentColumnId; }, - getMessageList: (state) => { - return state.messageList; + getMessageCount: (state) => { + return state.messageCount; } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/store/mutations.js b/orange-demo-flowable/orange-demo-flowable-web/src/store/mutations.js index c6acfc97..5c5cecc6 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/store/mutations.js +++ b/orange-demo-flowable/orange-demo-flowable-web/src/store/mutations.js @@ -158,10 +158,14 @@ export default { if (setObjectToSessionStorage('currentColumnId', columnId)) state.currentColumnId = columnId; if (setObjectToSessionStorage('currentMenuId', null)) state.currentMenuId = null; }, + setHeadImage: (state, imageHeaderUrl) => { + if (state.userInfo) state.userInfo.headImageUrl = imageHeaderUrl; + }, setMessageTimer: (state, timerHandler) => { state.messageTimer = timerHandler; }, - setMessageList: (state, messageList) => { - state.messageList = messageList; + setMessageCount: (state, messageCount) => { + if (messageCount) messageCount.totalCount = messageCount.copyMessageCount + messageCount.remindingMessageCount; + state.messageCount = messageCount; } } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/store/state.js b/orange-demo-flowable/orange-demo-flowable-web/src/store/state.js index c495e2c2..b44ecc57 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/store/state.js +++ b/orange-demo-flowable/orange-demo-flowable-web/src/store/state.js @@ -28,5 +28,5 @@ export default { currentColumnId: getObjectFromSessionStorage('currentColumnId', undefined), // 消息列表 messageTimeer: null, - messageList: [] + messageCount: [] } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/store/utils/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/store/utils/index.js index ec129435..59ddd469 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/store/utils/index.js +++ b/orange-demo-flowable/orange-demo-flowable-web/src/store/utils/index.js @@ -27,6 +27,22 @@ function initUserInfo (userInfo) { userInfo.permCodeSet = new Set(userInfo.permCodeList); } + if (userInfo != null && userInfo.headImageUrl != null && userInfo.headImageUrl !== '') { + try { + userInfo.headImageUrl = JSON.parse(userInfo.headImageUrl); + if (Array.isArray(userInfo.headImageUrl)) { + userInfo.headImageUrl = userInfo.headImageUrl[0]; + } else { + userInfo.headImageUrl = null; + } + } catch (e) { + console.error('解析头像数据失败!', e); + userInfo.headImageUrl = null; + } + } else { + if (userInfo) userInfo.headImageUrl = null; + } + return userInfo; } diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/utils/index.js b/orange-demo-flowable/orange-demo-flowable-web/src/utils/index.js index c622c222..2691c431 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/utils/index.js +++ b/orange-demo-flowable/orange-demo-flowable-web/src/utils/index.js @@ -83,7 +83,7 @@ export function nameTranslate (name, type) { * @param {String} childKey 子节点字段名 */ function findNode (node, id, list, idKey = 'id', childKey = 'children') { - if (Array.isArray(list)) list.push(node[idKey]); + if (Array.isArray(list)) list.push(node); if (node[idKey] === id) { return node; } @@ -104,7 +104,7 @@ function findNode (node, id, list, idKey = 'id', childKey = 'children') { * @param {*} idKey 主键字段名 * @param {*} childKey 子节点字段名 */ -export function findTreeNodePath (treeRoot, id, idKey = 'id', childKey = 'children') { +export function findTreeNodeObjectPath (treeRoot, id, idKey = 'id', childKey = 'children') { let tempList = []; for (let i = 0; i < treeRoot.length; i++) { if (findNode(treeRoot[i], id, tempList, idKey, childKey)) { @@ -114,6 +114,11 @@ export function findTreeNodePath (treeRoot, id, idKey = 'id', childKey = 'childr return []; } + +export function findTreeNodePath (treeRoot, id, idKey = 'id', childKey = 'children') { + return (this.findTreeNodeObjectPath(treeRoot, id, idKey, childKey) || []).map(item => item[idKey]); +} + /** * 通过id从树中查找节点 * @param {Array} treeRoot 根节点数组 diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/formModifyHeadImage/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/formModifyHeadImage/index.vue new file mode 100644 index 00000000..9bd134ef --- /dev/null +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/formModifyHeadImage/index.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/formModifyPassword/index.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/formModifyPassword/index.vue index 42ba14b2..65ecdec7 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/formModifyPassword/index.vue +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/layout/components/formModifyPassword/index.vue @@ -1,7 +1,7 @@ @@ -32,8 +39,12 @@ import { SystemController } from '@/api'; import { mapMutations } from 'vuex'; import projectConfig from '@/core/config'; import { encrypt, setToken } from '@/utils'; +import Verify from '@/components/Verifition/Verify.vue'; export default { + components: { + Verify + }, data () { return { bkImg: require('@/assets/img/login.png'), @@ -57,23 +68,30 @@ export default { dataFormSubmit () { this.$refs['dataForm'].validate(valid => { if (valid) { - let params = { - loginName: this.dataForm.mobilePhone, - password: encrypt(this.dataForm.password) - }; - - SystemController.login(this, params, null, {showMask: false}).then(data => { - this.setMenuList(data.data.menuList); - delete data.data.menuList; - - this.setUserInfo(data.data); - setToken(data.data.tokenData); - this.setCurrentMenuId(null); - this.$router.replace({ name: 'main' }); - }).catch(e => {}); + this.$refs.verify.show(); } }); }, + login (verifyParams) { + let params = { + loginName: this.dataForm.mobilePhone, + password: encrypt(this.dataForm.password), + captchaVerification: (verifyParams || {}).captchaVerification + }; + + SystemController.login(this, params, null, {showMask: false}).then(data => { + this.setMenuList(data.data.menuList); + delete data.data.menuList; + + this.setUserInfo(data.data); + setToken(data.data.tokenData); + this.setCurrentMenuId(null); + this.$router.replace({ name: 'main' }); + }).catch(e => {}); + }, + onVerifySuccess (verifyParams) { + this.login(verifyParams); + }, ...mapMutations(['setUserInfo', 'setMenuList', 'setCurrentMenuId']) }, mounted () { diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customFilterWidget.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customFilterWidget.vue index 39988cb0..809ba202 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customFilterWidget.vue +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customFilterWidget.vue @@ -1,5 +1,5 @@ - + {{operation.name}} - 详情 - 办理 - 催办 - 撤销 diff --git a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customUpload.vue b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customUpload.vue index 9cc5184f..a857d9ba 100644 --- a/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customUpload.vue +++ b/orange-demo-flowable/orange-demo-flowable-web/src/views/onlineForm/components/customUpload.vue @@ -31,7 +31,7 @@