Compare commits
	
		
			5 Commits
		
	
	
		
			d4e536e8ee
			...
			62309940c4
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | 62309940c4 | |
|  | 059ac66d7a | |
|  | 18de970ffc | |
|  | 528b63a0d2 | |
|  | 055d757581 | 
|  | @ -17,7 +17,7 @@ | |||
|     created() { | ||||
|     }, | ||||
|     mounted() { | ||||
|       let beforeUrl = sessionStorage.getItem('router-path') | ||||
|       let beforeUrl = localStorage.getItem('router-path') | ||||
|       if(beforeUrl === undefined || beforeUrl === ''){ | ||||
|         //this.$router.push("/workPanel") | ||||
|       }else { | ||||
|  |  | |||
|  | @ -6,12 +6,11 @@ import { Notification, MessageBox, Message } from "element-ui"; | |||
| // 第三方插件
 | ||||
| import "element-ui/lib/theme-chalk/index.css"; | ||||
| 
 | ||||
| Vue.prototype.$axios = axios; | ||||
| // 字体图标
 | ||||
| 
 | ||||
| export function getBaseUrl(){ | ||||
| 	return "http://gateway.mytwins.top" | ||||
| 	// return "http://192.168.101.8:8000"
 | ||||
| 	// return "http://gateway.mytwins.top"
 | ||||
| 	return "http://192.168.101.8:8000" | ||||
| 	// return "http://localhost:8000"
 | ||||
| } | ||||
| 
 | ||||
|  | @ -39,6 +38,7 @@ service.interceptors.response.use( | |||
| 		let data = rsp.data | ||||
| 		if (data.code === 401){ | ||||
| 			localStorage.clear() | ||||
| 			window.location.href = "/" | ||||
| 		} | ||||
| 		if (data.code === 1000){ | ||||
| 			return data | ||||
|  |  | |||
|  | @ -59,7 +59,7 @@ export default { | |||
|   computed:{ | ||||
|     _value :{ | ||||
|       get(){ | ||||
|         return this.value; | ||||
|         return this.value || ""; | ||||
|       }, | ||||
|       set(val){ | ||||
|         this.value = val; | ||||
|  | @ -72,7 +72,7 @@ export default { | |||
|     }) | ||||
|     this.$refs.codeEdit.codemirror.on("change", (cm) => { | ||||
|       this._value = cm.getValue() | ||||
|       this.$emit("input",this._value) | ||||
|       this.$emit("input",cm.getValue()) | ||||
|     }) | ||||
|   }, | ||||
|   methods:{ | ||||
|  |  | |||
|  | @ -18,19 +18,6 @@ import WDialog from '@/components/common/WDialog' | |||
| import Tip from '@/components/common/Tip' | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| Vue.use(ElementUI); | ||||
| Vue.use(AvatarEllipsis); | ||||
| Vue.use(Ellipsis); | ||||
|  |  | |||
|  | @ -77,7 +77,7 @@ router.beforeEach((to, from, next) => { | |||
|     head[0].appendChild(meta) | ||||
|   } | ||||
|   next(); | ||||
|   sessionStorage.setItem('router-path', to.path) | ||||
|   localStorage.setItem('router-path', to.path) | ||||
| }) | ||||
| 
 | ||||
| export default router; | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ | |||
|       <div class="user"> | ||||
|         <el-button type="primary" round size="small" @click="showRolePicker()" icon="el-icon-user">选择本次登录者</el-button> | ||||
|         <div v-if="token !== '' && token !== null"> | ||||
|           <el-avatar size="large" :src="loginUser.avatar"></el-avatar> | ||||
|           <span>{{ loginUser.name }}</span> | ||||
|         </div> | ||||
|       </div> | ||||
|  | @ -45,17 +46,11 @@ export default { | |||
|     return { | ||||
|       token: localStorage.getItem("token"), | ||||
|       select: [], | ||||
|       loginUser: { | ||||
|         id: 381496, | ||||
|         name: "clay", | ||||
|         selected: false, | ||||
|         sex: null, | ||||
|         type: "user" | ||||
|       } | ||||
|       loginUser: {} | ||||
|     } | ||||
|   }, | ||||
|   mounted() { | ||||
|     let user = sessionStorage.getItem("user") | ||||
|     let user = localStorage.getItem("userInfo") | ||||
|     if (user !== null && user !== '') { | ||||
|       this.loginUser = JSON.parse(user) | ||||
|       this.select.push(this.loginUser) | ||||
|  | @ -74,7 +69,7 @@ export default { | |||
|             uuid: "string" | ||||
|           } | ||||
|       ).then(res => { | ||||
|         console.log(res) | ||||
|         localStorage.setItem("userInfo",JSON.stringify(this.loginUser)) | ||||
|         this.token = res.data.data | ||||
|         localStorage.setItem("token", this.token) | ||||
|       }) | ||||
|  |  | |||
|  | @ -1,113 +1,114 @@ | |||
| //审批节点默认属性
 | ||||
| export const APPROVAL_PROPS = { | ||||
|   assignedType: "ASSIGN_USER", | ||||
|   mode: "AND", | ||||
|   sign: false, | ||||
|   headerBgc: '#ff943e', | ||||
|   nobody: { | ||||
|     handler: "TO_PASS", | ||||
|     assignedUser:[] | ||||
|   }, | ||||
|   timeLimit:{ | ||||
|     timeout:{ | ||||
|       unit: "H", | ||||
|       value: 0 | ||||
|     assignedType: "ASSIGN_USER", //审批类型
 | ||||
|     mode: "AND", //会签模式
 | ||||
|     sign: false, //是否签字
 | ||||
|     headerBgc: '#ff943e', //节点背景颜色
 | ||||
|     nobody: { //没有审批的的时候需要的操作
 | ||||
|         handler: "TO_PASS", //操作
 | ||||
|         assignedUser: [] //审批人列表
 | ||||
|     }, | ||||
|     handler:{ | ||||
|       type: "REFUSE", | ||||
|       notify:{ | ||||
|         once: true, | ||||
|         hour: 1 | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   assignedUser:[], | ||||
|   formPerms:[], | ||||
|   selfSelect: { | ||||
|     multiple: false | ||||
|   }, | ||||
|   leaderTop: { | ||||
|     endCondition: "TOP", | ||||
|     endLevel: 1, | ||||
|   }, | ||||
|   leader:{ | ||||
|     level: 1 | ||||
|   }, | ||||
|   roleList:[], | ||||
|   refuse: { | ||||
|     type: 'TO_END', //驳回规则 TO_END  TO_NODE  TO_BEFORE
 | ||||
|     target: '' //驳回到指定ID的节点
 | ||||
|   }, | ||||
|   formUser: '' | ||||
|     timeLimit: { //边界事件
 | ||||
|         timeout: { //超时提醒时间
 | ||||
|             unit: "H", | ||||
|             value: 0 | ||||
|         }, | ||||
|         handler: { //超时提醒触发时候的操作
 | ||||
|             type: "REFUSE", //操作
 | ||||
|             notify: { | ||||
|                 once: true, //是否循环
 | ||||
|                 hour: 1 | ||||
|             } | ||||
|         } | ||||
|     }, | ||||
|     assignedUser: [], // 审批人列表
 | ||||
|     formPerms: [], //表单权限
 | ||||
|     selfSelect: { //用户自选
 | ||||
|         multiple: false //用户自选时是否是多选
 | ||||
|     }, | ||||
|     leaderTop: { //领导
 | ||||
|         endCondition: "TOP", | ||||
|         endLevel: 1, | ||||
|     }, | ||||
|     leader: { //第几级领导
 | ||||
|         level: 1 | ||||
|     }, | ||||
|     roleList: [], //角色列表
 | ||||
|     refuse: { //拒绝的操作
 | ||||
|         type: 'TO_END', //驳回规则 TO_END  TO_NODE  TO_BEFORE
 | ||||
|         target: '' //驳回到指定ID的节点
 | ||||
|     }, | ||||
|     formUser: '' //表单用户
 | ||||
| } | ||||
| 
 | ||||
| //根节点默认属性
 | ||||
| export const ROOT_PROPS = { | ||||
|   assignedUser: [], | ||||
|   formPerms:[] | ||||
|     assignedUser: [], //审批人
 | ||||
|     formPerms: [] //表单权限
 | ||||
| } | ||||
| 
 | ||||
| //条件节点默认属性
 | ||||
| export const CONDITION_PROPS = { | ||||
|   groupsType:"OR", //条件组逻辑关系 OR、AND
 | ||||
|   groups:[ | ||||
|     { | ||||
|       groupType:"AND", //条件组内条件关系 OR、AND
 | ||||
|       cids:[], //条件ID集合
 | ||||
|       conditions:[] //组内子条件
 | ||||
|     } | ||||
|   ], | ||||
|   expression: "" //自定义表达式,灵活构建逻辑关系
 | ||||
|     groupsType: "OR", //条件组逻辑关系 OR、AND
 | ||||
|     groups: [ | ||||
|         { | ||||
|             groupType: "AND", //条件组内条件关系 OR、AND
 | ||||
|             cids: [], //条件ID集合
 | ||||
|             conditions: [] //组内子条件
 | ||||
|         } | ||||
|     ], | ||||
|     expression: "" //自定义表达式,灵活构建逻辑关系
 | ||||
| } | ||||
| 
 | ||||
| //抄送节点默认属性
 | ||||
| export const CC_PROPS = { | ||||
|   shouldAdd: false, | ||||
|   assignedUser: [], | ||||
|   formPerms:[] | ||||
|     shouldAdd: false, | ||||
|     assignedUser: [], | ||||
|     formPerms: [] | ||||
| } | ||||
| 
 | ||||
| //触发器节点默认属性
 | ||||
| export const TRIGGER_PROPS = { | ||||
|   type: 'WEBHOOK', | ||||
|   http:{ | ||||
|     method: 'GET', //请求方法 支持GET/POST
 | ||||
|     url: '', //URL地址,可以直接带参数
 | ||||
|     headers: [ //http header
 | ||||
|       { | ||||
|         name: '', | ||||
|         isField: true, | ||||
|         value: '' //支持表达式 ${xxx} xxx为表单字段名称
 | ||||
|       } | ||||
|     ], | ||||
|     contentType: 'FORM', //请求参数类型
 | ||||
|     params:[ //请求参数
 | ||||
|       { | ||||
|         name: '', | ||||
|         isField: true, //是表单字段还是自定义
 | ||||
|         value: '' //支持表达式 ${xxx} xxx为表单字段名称
 | ||||
|       } | ||||
|     ], | ||||
|     retry: 1, | ||||
|     handlerByScript: false, | ||||
|     success: 'function handlerOk(res) {\n  return true;\n}', | ||||
|     fail: 'function handlerFail(res) {\n  return true;\n}' | ||||
|   }, | ||||
|   email:{ | ||||
|     subject: '', | ||||
|     to: [], | ||||
|     content: '' | ||||
|   } | ||||
|     type: 'WEBHOOK', | ||||
|     http: { | ||||
|         method: 'GET', //请求方法 支持GET/POST
 | ||||
|         url: '', //URL地址,可以直接带参数
 | ||||
|         headers: [ //http header
 | ||||
|             { | ||||
|                 name: '', | ||||
|                 isField: true, | ||||
|                 value: '' //支持表达式 ${xxx} xxx为表单字段id
 | ||||
|             } | ||||
|         ], | ||||
|         contentType: 'FORM', //请求参数类型
 | ||||
|         params: [ //请求参数
 | ||||
|             { | ||||
|                 name: '', | ||||
|                 isField: true, //是表单字段还是自定义
 | ||||
|                 value: '' //支持表达式 ${xxx} xxx为表单字段id
 | ||||
|             } | ||||
|         ], | ||||
|         retry: 1, | ||||
|         handlerByScript: false, | ||||
|         success: 'function handlerSuccess(res) {\n  return {\n    state: true, \n    msg: "请求成功!" \n  };\n}', | ||||
|         fail: 'function handlerFail(res) {\n  return {\n    state: true, \n    msg: "请求失败!" \n  };\n}' | ||||
|     }, | ||||
|     email: { | ||||
|         subject: '', | ||||
|         to: [], | ||||
|         cc: [], | ||||
|         content: '' | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| //延时节点默认属性
 | ||||
| export const DELAY_PROPS = { | ||||
|   type: "FIXED", //延时类型 FIXED:到达当前节点后延时固定时长 、AUTO:延时到 dateTime设置的时间
 | ||||
|   time: 0, //延时时间
 | ||||
|   unit: "M", //时间单位 D天 H小时 M分钟
 | ||||
|   dateTime: "" //如果当天没有超过设置的此时间点,就延时到这个指定的时间,到了就直接跳过不延时
 | ||||
|     type: "FIXED", //延时类型 FIXED:到达当前节点后延时固定时长 、AUTO:延时到 dateTime设置的时间
 | ||||
|     time: 0, //延时时间
 | ||||
|     unit: "M", //时间单位 D天 H小时 M分钟
 | ||||
|     dateTime: "" //如果当天没有超过设置的此时间点,就延时到这个指定的时间,到了就直接跳过不延时
 | ||||
| } | ||||
| 
 | ||||
| export default { | ||||
|   APPROVAL_PROPS, CC_PROPS, DELAY_PROPS, CONDITION_PROPS, ROOT_PROPS, TRIGGER_PROPS | ||||
|     APPROVAL_PROPS, CC_PROPS, DELAY_PROPS, CONDITION_PROPS, ROOT_PROPS, TRIGGER_PROPS | ||||
| } | ||||
|  |  | |||
|  | @ -6,8 +6,9 @@ | |||
|           <el-radio v-for="item in approvalTypes" :label="item.type" :key="item.type">{{ item.name }}</el-radio> | ||||
|         </el-radio-group> | ||||
|         <div v-if="nodeProps.assignedType === 'ASSIGN_USER'"> | ||||
|           <el-button size="mini" icon="el-icon-plus" type="primary" @click="selectUser" round>选择人员</el-button> | ||||
|           <avatar-ellipsis :row="3" :user-info="nodeProps.assignedUser"/> | ||||
|           <el-button size="mini" icon="el-icon-plus" type="primary" @click="$refs.userPicker.showUserPicker()" round>选择人员</el-button> | ||||
|           <user-picker title="请选择系统角色" :multiple="false" ref="userPicker" :v-model="assignedUser" @ok="selectedUser"/> | ||||
|           <avatar-ellipsis :row="3" :user-info="assignedUser"/> | ||||
|         </div> | ||||
|         <div v-else-if="nodeProps.assignedType === 'SELF_SELECT'"> | ||||
|           <el-radio-group size="mini" v-model="nodeProps.selfSelect.multiple"> | ||||
|  | @ -40,7 +41,8 @@ | |||
|           </el-form-item> | ||||
|         </div> | ||||
|         <div v-else-if="nodeProps.assignedType === 'ROLE'"> | ||||
|           <el-button size="mini" icon="el-icon-plus" type="primary" @click="selectRole" round>选择系统角色</el-button> | ||||
|           <el-button size="mini" icon="el-icon-plus" type="primary" @click="$refs.rolePicker.showRolePicker()" round>选择系统角色</el-button> | ||||
|           <role-picker title="请选择人员" :multiple="false" ref="rolePicker" :v-model="roleList" @ok="selectedRole"/> | ||||
|           <role-items v-model="nodeProps.roleList"/> | ||||
|         </div> | ||||
|         <div v-else-if="nodeProps.assignedType === 'FORM_USER'"> | ||||
|  | @ -64,12 +66,11 @@ | |||
|           <el-radio label="TO_ADMIN">转交审批管理员</el-radio> | ||||
|           <el-radio label="TO_USER">转交到指定人员</el-radio> | ||||
|         </el-radio-group> | ||||
| 
 | ||||
|         <div style="margin-top: 10px" v-if="nodeProps.nobody.handler === 'TO_USER'"> | ||||
|           <el-button size="mini" icon="el-icon-plus" type="primary" @click="selectNoSetUser" round>选择人员</el-button> | ||||
|           <org-items v-model="nodeProps.assignedUser"/> | ||||
|           <el-button size="mini" icon="el-icon-plus" type="primary" @click="$refs.toUserPicker.showUserPicker()" round>选择人员</el-button> | ||||
|           <user-picker title="请指定用户" :multiple="false" ref="toUserPicker" :v-model="nobodyAssignedUser" @ok="selectNoSetUser"/> | ||||
|           <avatar-ellipsis :row="3" :user-info="nobodyAssignedUser"/> | ||||
|         </div> | ||||
| 
 | ||||
|       </el-form-item> | ||||
| 
 | ||||
|       <div v-if="showMode"> | ||||
|  | @ -118,23 +119,22 @@ | |||
|       </el-form-item> | ||||
|       <el-form-item label="🙅 如果审批被驳回 👇"> | ||||
|         <el-radio-group v-model="nodeProps.refuse.type"> | ||||
|           <el-radio label="TO_INITIAL">直接结束流程</el-radio> | ||||
|           <el-radio label="TO_INITIAL">重新开始流程</el-radio> | ||||
|           <el-radio label="TO_BEFORE">驳回到上级审批节点</el-radio> | ||||
|           <!--          <el-radio label="TO_NODE">驳回到指定节点</el-radio>--> | ||||
|           <el-radio label="TO_NODE">驳回到指定节点</el-radio> | ||||
|         </el-radio-group> | ||||
|         <div v-if="nodeProps.refuse.type === 'TO_NODE'"> | ||||
|           <span>指定节点:</span> | ||||
|           <el-select style="margin-left: 10px; width: 150px;" placeholder="选择跳转步骤" size="small" | ||||
|                      v-model="nodeProps.refuse.target"> | ||||
|             <el-option v-for="(node, i) in nodeOptions" :key="i" :label="node.name" :value="node.id"></el-option> | ||||
|             <el-option v-for="(node, index) in nodeOptions" :key="index" :label="node.name" | ||||
|                        :value="node.id"></el-option> | ||||
|           </el-select> | ||||
|         </div> | ||||
| 
 | ||||
|       </el-form-item> | ||||
|     </el-form> | ||||
| 
 | ||||
|     <role-picker title="请选择人员" multiple ref="rolePicker" :v-model="roleList" @ok="selectedRole"/> | ||||
|     <user-picker title="请选择系统角色" multiple ref="userPicker" :v-model="assignedUser" @ok="selectedUser"/> | ||||
| 
 | ||||
|   </div> | ||||
| </template> | ||||
|  | @ -143,12 +143,11 @@ | |||
| import RolePicker from "@/components/common/RolePicker"; | ||||
| import UserPicker from "@/components/common/UserPicker"; | ||||
| import RoleItems from "../RoleItems"; | ||||
| import OrgItems from "../OrgItems"; | ||||
| 
 | ||||
| 
 | ||||
| export default { | ||||
|   name: "ApprovalNodeConfig", | ||||
|   components: {RoleItems, OrgItems, RolePicker, UserPicker}, | ||||
|   components: {RoleItems, RolePicker, UserPicker}, | ||||
|   props: { | ||||
|     config: { | ||||
|       type: Object, | ||||
|  | @ -184,7 +183,15 @@ export default { | |||
|         this.config.assignedUser = val | ||||
|       } | ||||
|     }, | ||||
|     roleList:{ | ||||
|     nobodyAssignedUser: { | ||||
|       get() { | ||||
|         return this.config.nobody.assignedUser || []; | ||||
|       }, | ||||
|       set(val) { | ||||
|         this.config.nobody.assignedUser = val | ||||
|       } | ||||
|     }, | ||||
|     roleList: { | ||||
|       get() { | ||||
|         return this.config.roleList || []; | ||||
|       }, | ||||
|  | @ -199,7 +206,7 @@ export default { | |||
|     }, | ||||
|     nodeOptions() { | ||||
|       let values = []; | ||||
|       const excType = ["ROOT", "EMPTY", "CONDITION", "CONDITIONS", "CONCURRENT", "CONCURRENTS"]; | ||||
|       const excType = ["ROOT", "EMPTY", "CONDITION", "CONDITIONS", "CONCURRENT", "CONCURRENTS", "CC", "END", "TRIGGER"]; | ||||
|       this.$store.state.nodeMap.forEach((v) => { | ||||
|         if (excType.indexOf(v.type) === -1) { | ||||
|           values.push({id: v.id, name: v.name}); | ||||
|  | @ -216,7 +223,6 @@ export default { | |||
|         case "LEADER_TOP": | ||||
|           return this.nodeProps.formUser !== ""; | ||||
|         case "FORM_USER": | ||||
|           return true; | ||||
|         case "ROLE": | ||||
|           return true; | ||||
|         default: | ||||
|  | @ -225,15 +231,17 @@ export default { | |||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     selectUser() { | ||||
|       this.$refs.userPicker.showUserPicker() | ||||
|     }, | ||||
|     selectNoSetUser() { | ||||
| 
 | ||||
|     }, | ||||
|     //弹出角色选择器,选择系统角色 | ||||
|     selectRole() { | ||||
|       this.$refs.rolePicker.showRolePicker(); | ||||
|     selectNoSetUser(select) { | ||||
|       let userInfoList = [] | ||||
|       for (let val of select) { | ||||
|         let userInfo = { | ||||
|           id: val.id, | ||||
|           name: val.name, | ||||
|           avatar: val.avatar, | ||||
|         } | ||||
|         userInfoList.push(userInfo) | ||||
|       } | ||||
|       this.nobodyAssignedUser = userInfoList | ||||
|     }, | ||||
|     selectedRole(select) { | ||||
|       this.roleList = select | ||||
|  |  | |||
|  | @ -30,7 +30,6 @@ export default { | |||
|         return this.config.shouldAdd || false | ||||
|       }, | ||||
|       set(val){ | ||||
|         console.log("asdjhajdhasjdhasdhasjdad") | ||||
|         this.config.shouldAdd = val | ||||
|       } | ||||
|     }, | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ | |||
|       </el-form-item> | ||||
|       <div v-if="config.type === 'WEBHOOK'"> | ||||
|         <el-form-item label="请求地址" prop="text"> | ||||
|           <el-input placeholder="请输入URL地址" size="medium" v-model="config.http.url" > | ||||
|           <el-input placeholder="请输入URL地址" size="medium" v-model="config.http.url"> | ||||
|             <el-select v-model="config.http.method" style="width: 85px;" slot="prepend" placeholder="URL"> | ||||
|               <el-option label="GET" value="GET"></el-option> | ||||
|               <el-option label="POST" value="POST"></el-option> | ||||
|  | @ -23,84 +23,103 @@ | |||
|             <span style="margin-right: 10px">Header请求头</span> | ||||
|             <el-button type="text" @click="addItem(config.http.headers)"> + 添加</el-button> | ||||
|           </div> | ||||
|           <div v-for="(header, index) in config.http.headers" :key="header.name"> | ||||
|             - <el-input placeholder="参数名" size="small" style="width: 100px;" v-model="header.name" /> | ||||
|           <div v-for="(header, index) in config.http.headers" :key="index"> | ||||
|             - | ||||
|             <el-input placeholder="参数名" size="small" style="width: 100px;" v-model="header.name"/> | ||||
|             <el-radio-group size="small" style="margin: 0 5px;" v-model="header.isField"> | ||||
|               <el-radio-button :label="true">表单</el-radio-button> | ||||
|               <el-radio-button :label="false">固定</el-radio-button> | ||||
|             </el-radio-group> | ||||
|             <el-select v-if="header.isField" style="width: 180px;" v-model="header.value" size="small" placeholder="请选择表单字段"> | ||||
|             <el-select v-if="header.isField" style="width: 180px;" v-model="header.value" size="small" | ||||
|                        placeholder="请选择表单字段"> | ||||
|               <el-option v-for="form in forms" :key="form.id" :label="form.title" :value="form.title"></el-option> | ||||
|             </el-select> | ||||
|             <el-input v-else placeholder="请设置字段值" size="small" v-model="header.value" style="width: 180px;"/> | ||||
|             <el-icon class="el-icon-delete" @click="delItem(config.http.headers, index)" style="margin-left: 5px; color: #c75450; cursor: pointer"/> | ||||
|             <el-icon class="el-icon-delete" @click="delItem(config.http.headers, index)" | ||||
|                      style="margin-left: 5px; color: #c75450; cursor: pointer"/> | ||||
|           </div> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="Header请求参数" prop="text"> | ||||
|           <div slot="label"> | ||||
|             <span style="margin-right: 10px">Header请求参数   </span> | ||||
|             <el-button style="margin-right: 20px" type="text" @click="addItem(config.http.params)">  + 添加</el-button> | ||||
|             <span style="margin-right: 10px">请求参数   </span> | ||||
|             <el-button style="margin-right: 20px" type="text" @click="addItem(config.http.params)"> + 添加</el-button> | ||||
|             <span>参数类型 - </span> | ||||
|             <el-radio-group size="mini" style="margin: 0 5px;" v-model="config.http.contentType"> | ||||
|               <el-radio-button label="JSON">json</el-radio-button> | ||||
|               <el-radio-button label="FORM">form</el-radio-button> | ||||
|             </el-radio-group> | ||||
|           </div> | ||||
|           <div v-for="(param, index) in config.http.params" :key="param.name"> | ||||
|             - <el-input placeholder="参数名" size="small" style="width: 100px;" v-model="param.name" /> | ||||
|           <div v-for="(param, index) in config.http.params" :key="index"> | ||||
|             - | ||||
|             <el-input placeholder="参数名" size="small" style="width: 100px;" v-model="param.name"/> | ||||
|             <el-radio-group size="small" style="margin: 0 5px;" v-model="param.isField"> | ||||
|               <el-radio-button :label="true">表单</el-radio-button> | ||||
|               <el-radio-button :label="false">固定</el-radio-button> | ||||
|             </el-radio-group> | ||||
|             <el-select v-if="param.isField" style="width: 180px;" v-model="param.value" size="small" placeholder="请选择表单字段"> | ||||
|               <el-option v-for="form in forms" :key="form.id" :label="form.title" :value="form.title"></el-option> | ||||
|             <el-select v-if="param.isField" style="width: 180px;" v-model="param.value" size="small" | ||||
|                        placeholder="请选择表单字段"> | ||||
|               <el-option v-for="form in forms" :key="form.id" :label="form.title" :value="form.id"></el-option> | ||||
|             </el-select> | ||||
|             <el-input v-else placeholder="请设置字段值" size="small" v-model="param.value" style="width: 180px;"/> | ||||
|             <el-icon class="el-icon-delete" @click="delItem(config.http.params, index)" style="margin-left: 5px; color: #c75450; cursor: pointer"/> | ||||
|             <el-icon class="el-icon-delete" @click="delItem(config.http.params, index)" | ||||
|                      style="margin-left: 5px; color: #c75450; cursor: pointer"/> | ||||
|           </div> | ||||
|           <div> | ||||
| 
 | ||||
|           </div> | ||||
|         </el-form-item> | ||||
| <!--        <el-form-item label="请求结果处理" prop="text">--> | ||||
|           <div slot="label"> | ||||
|             <span>请求结果处理</span> | ||||
|             <span style="margin-left: 20px">自定义脚本: </span> | ||||
|             <el-switch v-model="config.http.handlerByScript"></el-switch> | ||||
|           </div> | ||||
|           <span class="item-desc" v-if="config.http.handlerByScript"> | ||||
|           👉 返回值为 ture 则流程通过,为 false 则流程将被驳回 | ||||
|           <div>支持函数 | ||||
|             <span style="color: dodgerblue">setFormByName( | ||||
|               <span style="color: #939494">'表单字段名', '表单字段值'</span> | ||||
|               )</span> | ||||
|             可改表单数据 | ||||
|           </div> | ||||
|         <!--        <el-form-item label="请求结果处理" prop="text">--> | ||||
|         <div slot="label"> | ||||
|           <span>请求结果处理</span> | ||||
|           <span style="margin-left: 20px">自定义脚本: </span> | ||||
|           <el-switch v-model="config.http.handlerByScript"></el-switch> | ||||
|         </div> | ||||
|         <span class="item-desc" v-if="config.http.handlerByScript"> | ||||
|           <p>👉 返回值为 ture 则流程通过,为 false 则流程将被驳回</p> | ||||
|           <p>👉 (上线注意)占不支持ES高级语法</p> | ||||
|           <p>👉 (上线注意)不支持浏览器的内置函数</p> | ||||
|           <!--          <div>支持函数--> | ||||
|           <!--            <span style="color: dodgerblue">setFormByName(--> | ||||
|           <!--              <span style="color: #939494">'表单字段名', '表单字段值'</span>--> | ||||
|           <!--              )</span>--> | ||||
|           <!--            可改表单数据--> | ||||
|           <!--          </div>--> | ||||
|         </span> | ||||
|           <span class="item-desc" v-else>👉 无论请求结果如何,均通过</span> | ||||
|           <div v-if="config.http.handlerByScript"> | ||||
|             <div> | ||||
|               <span>请求成功😀:</span> | ||||
|               <code-edit v-model="config.http.success"/> | ||||
|             </div> | ||||
|             <div> | ||||
|               <span>请求失败😥:</span> | ||||
|               <code-edit v-model="config.http.fail"/> | ||||
|             </div> | ||||
|         <span class="item-desc" v-else>👉 无论请求结果如何,均通过</span> | ||||
|         <div v-if="config.http.handlerByScript"> | ||||
|           <div> | ||||
|             <el-button @click="testHander">测试</el-button> | ||||
|           </div> | ||||
| <!--        </el-form-item>--> | ||||
|           <div> | ||||
|             <span>请求成功😀:</span> | ||||
|             <code-edit v-model="config.http.success"/> | ||||
|           </div> | ||||
|           <div> | ||||
|             <span>请求失败😥:</span> | ||||
|             <code-edit v-model="config.http.fail"/> | ||||
|           </div> | ||||
|         </div> | ||||
|         <!--        </el-form-item>--> | ||||
|       </div> | ||||
|       <div v-else-if="config.type === 'EMAIL'"> | ||||
|         <el-form-item label="邮件主题" prop="text"> | ||||
|           <el-input placeholder="请输入邮件主题" size="medium" v-model="config.email.subject" /> | ||||
|           <el-input placeholder="请输入邮件主题" size="medium" v-model="config.email.subject"/> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="收件方" prop="text"> | ||||
|           <el-select size="small" style="width: 100%;" v-model="config.email.to" filterable multiple allow-create default-first-option placeholder="请输入收件人"> | ||||
|             <el-option v-for="item in config.email.to" :key="item" :label="item" :value="item"></el-option> | ||||
|           <el-select size="small" style="width: 100%;" v-model="config.email.to" filterable multiple allow-create | ||||
|                      default-first-option placeholder="请输入收件人"> | ||||
|             <el-option v-for="sender in config.email.to" :key="sender" :label="sender" :value="sender"></el-option> | ||||
|           </el-select> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="抄送方" prop="text"> | ||||
|           <el-select size="small" style="width: 100%;" v-model="config.email.cc" filterable multiple allow-create | ||||
|                      default-first-option placeholder="请输入收件人"> | ||||
|             <el-option v-for="item in config.email.cc" :key="item" :label="item" :value="item"></el-option> | ||||
|           </el-select> | ||||
|         </el-form-item> | ||||
|         <el-form-item label="邮件正文" prop="text"> | ||||
|           <el-input type="textarea" v-model="config.email.content" :rows="4" placeholder="邮件内容,支持变量提取表单数据 ${表单字段名} "></el-input> | ||||
|           <el-input type="textarea" v-model="config.email.content" :rows="4" | ||||
|                     placeholder="邮件内容,支持变量提取表单数据 ${表单字段名} "></el-input> | ||||
|         </el-form-item> | ||||
|       </div> | ||||
|     </el-form> | ||||
|  | @ -109,44 +128,87 @@ | |||
| 
 | ||||
| <script> | ||||
| import CodeEdit from "@/components/common/CodeEdit"; | ||||
| import axios from "axios"; | ||||
| 
 | ||||
| export default { | ||||
|   name: "TriggerNodeConfig", | ||||
|   components: {CodeEdit}, | ||||
|   props:{ | ||||
|     config:{ | ||||
|   props: { | ||||
|     config: { | ||||
|       type: Object, | ||||
|       default: ()=>{ | ||||
|       default: () => { | ||||
|         return {} | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   computed:{ | ||||
|     forms(){ | ||||
|   computed: { | ||||
|     forms() { | ||||
|       return this.$store.state.design.formItems || [] | ||||
|     } | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
|     } | ||||
|     return {} | ||||
|   }, | ||||
|   methods: { | ||||
|     addItem(items){ | ||||
|     addItem(items) { | ||||
|       if (items.length > 0 && (items[items.length - 1].name.trim() === '' | ||||
|           || items[items.length - 1].value.trim() === '')){ | ||||
|           || items[items.length - 1].value.trim() === '')) { | ||||
|         this.$message.warning("请完善之前项后在添加") | ||||
|         return; | ||||
|       } | ||||
|       items.push({name: '', value: '', isField: true}) | ||||
|     }, | ||||
|     delItem(items, index){ | ||||
|     delItem(items, index) { | ||||
|       items.splice(index, 1) | ||||
|     }, | ||||
|     testHander() { | ||||
|       let http = this.config.http; | ||||
|       if (http.url == null || http.url === '') { | ||||
|         this.$message.error("请填写请求路径!") | ||||
|         return | ||||
|       } | ||||
|       let headers = {} | ||||
|       for (let header of http.headers) { | ||||
|         if (header.isField) { | ||||
|           this.$message.error("测试只支持固定参数") | ||||
|           return | ||||
|         } | ||||
|         if (header.name !== "" && header.value !== "") { | ||||
|           this.$set(headers, header.name, header.value); | ||||
|         } | ||||
|       } | ||||
|       if (http.contentType === "FORM") { | ||||
|         this.$set(headers, "Content-Type", "multipart/form-data") | ||||
|       } else { | ||||
|         this.$set(headers, "Content-Type", "application/json") | ||||
|       } | ||||
|       console.log("==================[测试打印内容]==================") | ||||
|       axios.request({ | ||||
|         method: http.method, | ||||
|         url: http.url, | ||||
|         headers: headers | ||||
|       }).then(res => { | ||||
|         console.log(res) | ||||
|         if (res.status === 200) { | ||||
|           let data = res.data | ||||
|           let successFun = eval("(false ||" + http.success + ")"); | ||||
|           let result = successFun(data); | ||||
|           console.log(result, "成功函数执行的返回结果") | ||||
|         } else { | ||||
|           let failFun = eval("(false ||" + http.fail + ")"); | ||||
|           let result = failFun(res); | ||||
|           console.log(result, "失败函数执行的返回结果") | ||||
|         } | ||||
|       }).finally(() => { | ||||
|         console.log("==================[测试打印结束]==================") | ||||
|       }) | ||||
|     }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <style lang="less" scoped> | ||||
| .item-desc{ | ||||
| .item-desc { | ||||
|   color: #939494; | ||||
| } | ||||
| </style> | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ export default { | |||
|   computed: { | ||||
|     selectUser() { | ||||
|       return { | ||||
|         show: this.config.props.assignedType !== 'ASSIGN_USER', | ||||
|         show: this.config.props.assignedType !== 'ASSIGN_USER' && this.config.props.shouldAdd, | ||||
|         multiple: true | ||||
|       }; | ||||
|     }, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue