一个二级审批流程的具体实现(3)
栏目: JavaScript · 发布时间: 5年前
内容简介:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kmyhy/article/details/87864679
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kmyhy/article/details/87864679
前端的具体实现。主要有两个 vue 页面。一个登录页面(Login.vue),一个主页面(Main.vue)。主页面中包含一个表单(用于新建请假申请),一个 table(用于显示待办列表),一个 Drawer (用于重新提交被驳回的申请),一个 Modal 对话框(用户办理或审批待办事项)。
1. 登录页面
<template> <div> <h1 align="center">登录</h1> <Select v-model="model1" style="width:200px"> <Option v-for="item in users" :value="item.value" :key="item.value">{{ item.label }}</Option> </Select> <br> <br> <Button @click="login()" align="center" type="default">登录</Button> </div> </template> <script> import { _login } from "@/api/data"; export default { data() { return { users: [ { value: "张三", label: "张三" }, { value: "李四", label: "李四" }, { value: "王五", label: "王五" }, { value: "赵六", label: "赵六" } ], model1: "" }; }, methods: { login() { // alert(this.model1); _login({"username":this.model1}).then(res=>{ console.log(res); if(res.data.success==true){ this.$Message.success("登录成功"); this.$store.state.username = res.data.data; this.$router.push({name:"main"}); }else{ this.$Message.error("登录失败"); } }) } } }; </script>
页面很简单,只有一个 Select 和一个登录按钮。用户可以登录 4 个测试账号:张三、李四、王五、赵六,分别演示 4 种不同角色:请假人、leader、总监和 HR,用这 4 个角色刚好能够完成流程图中的一个完整流程。
如果用户登录成功,跳转到 main 路由,即 Main.vue。
login() 方法是登录方法。登录成功后,用户名保存到 vuex 的 store 中。在 main.js 中,引入了 vuex:
import store from './store' ...... new Vue({ router, store, render: h => h(App) }).$mount('#app')
2. 网络调用
网络调用封装在 data.js,每个方法都很类似,分别用于调用服务器的登录、查询待办、新建请假条、leader 审批、总监审批、人资备案、重新提交等接口:
import axios from 'axios' // 登录 export const _login = (params) => { console.log(params) return axios.post('http://localhost:8080/login', params ) } // 查询待办 export const _todoList = (params) => { return axios.post('http://localhost:8080/todoList', params ) } // 新建请假条 export const _newLeave = (params) => { return axios.post('http://localhost:8080/newLeave', params ) } // leader 审批 export const _leaderApprove = (params) => { return axios.post('http://localhost:8080/leaderApprove', params ) } // director 审批 export const _directorApprove = (params) => { return axios.post('http://localhost:8080/directorApprove', params ) } // hr 备案 export const _hrRecord = (params) => { return axios.post('http://localhost:8080/hrRecord', params ) } // 申请人重新提交 export const _submitApplication = (params) => { return axios.post('http://localhost:8080/submitApplication', params ) }
3. 主页面
登录成功后就进入主页面(main.vue):
页面上半部分是一个表单,允许用户新建请假申请。下半部分是待办列表,允许用户对待办任务进行处理。
新建请假申请
首先编写表单:
<h1>我要请假</h1> <Row style="margin-bottom:1%;border-top:1px solid #ccc;padding-top:2%"> <Col span="12" style="font-size:16px">请假事由</Col> <Col span="12"> <i-input v-model="reason" placeholder="请假的原因" style="width:200px;outline:none"></i-input> </Col> </Row> <Row style="margin-bottom:1%"> <Col span="12" style="font-size:16px">开始日期</Col> <Col span="12"> <DatePicker type="date" v-model="date" placeholder="从哪天开始请假" format="yyyy-MM-dd" style="width: 200px" ></DatePicker> </Col> </Row> <Row style="margin-bottom:1%;"> <Col span="12" style="font-size:16px">请假天数</Col> <Col span="12"> <i-input v-model="days" placeholder="0" style="width:200px;outline:none"></i-input> </Col> </Row> <Row style="margin-bottom:1%;border-top:1px solid #ccc;padding-top:2%"> <Col span="24"> <i-button type="default" @click="newLeave()">提交</i-button> </Col> </Row>
“提交”按钮绑定了 newLeave() 方法:
newLeave() { let params = {}; if (this.isLogin() == false) { // 如果未登录 return; } else { params.username = this.$store.state.username; } if (this.reason != null) { params.reason = this.reason; } if (this.date == null || this.date === "") { this.$Message.error({ content: "请填写开始日期", duration: 4, closable: true }); return; } else { params.date = this.date; } if (this.days == null || this.days === "" || parseInt(this.days) == 0) { this.$Message.error({ content: "请填写正确的请假天数", duration: 4, closable: true }); } else { params.days = parseInt(this.days); } // 硬编码的上级和总监 params.leader = "李四"; params.director = "王五"; params.hr = "赵六"; _newLeave(params).then(res => { console.log(res); if (res.data.success == true) { this.reason = ""; this.date = ""; this.days = 0; this.$Message.success("请假申请提交成功"); } else { this.$Message.error({ content: res.data.message, duration: 10, closable: true }); } }); }
待办列表
首先是模板代码:
<h1>我的待办</h1> <Table :columns="columns" :data="data" stripe></Table>
Table 的数据源绑定了 columns 和 data 变量:
export default { data() { return { columns: [ { title: "任务", key: "title" }, { title: "请假日期", key: "date" }, { title: "请假天数", key: "days" }, { title: "请假理由", key: "reason" }, { title: "操作", key: "action", render: (h, params) => { return h("div", [ h( "Button", { props: { type: "default", size: "small" }, on: { click: () => { this.handle(params.row); } } }, "办理" ) ]); } } ], data: [] }; } }
然后是获取待办数据。首先引入 data.js 的所有方法:
import { _todoList, _newLeave, _leaderApprove, _directorApprove, _hrRecord } from "@/api/data";
然后在 methods 中声明一个方法 todoList:
todoList() { _todoList({ username: this.$store.state.username }).then(res => { if (res.data.success == true) { this.data = res.data.data; for (var i = 0; i < this.data.length; i++) { let obj = this.data[i]; obj.title = obj.applicant + "有一条请假申请待您处理"; } } else { _this.$Message.error({ content: res.data.message, duration: 10, closable: true }); } }); },
然后在 mounted 中调用这个方法:
mounted() { this.todoList(); }
这样就列出了用户的所有待办。注意当前登录用户从 vuex 的 store 中获取。
待办列表的“操作”列中有一个“办理”按钮,点击这个按钮,允许用户对待办任务进行处理。这是在 handle 方法中进行处理的。在 handle 方法中,判断用户的身份,如果用户是申请人,那么显示一个 Drawer ,在 Drawer 中让用户编辑表单后重新提交申请。如果用户是上级或总监,则显示审批对话框,让用户进行审批/驳回操作。如果用户是 hr,则显示备案对话框,让用户进行备案操作:
handle(task) { let username = this.$store.state.username; if (this.isLogin() == false) { // 如果未登录 return; } if (username == task.applicant) { // 驳回后重新提交 this.showEdit(task); } else { let title = "审批"; let content = `<p>你同意${task.applicant}的请假申请吗?</p> <p>请假人:${task.applicant}<p> <p>请假日期:${task.date}</p><p>请假天数:${task.days}</p> <p>请假事由:${task.reason}</p>`; let cancelText = "驳回"; let okText = "同意"; let onOk = () => { this.approve(task, username, 1); }; let onCancel = () => { this.approve(task, username, 0); }; if (username == task.hr) { title = "备案"; content = `<p>是否对${task.applicant}的请假申请进行备案?</p> <p>请假人:${task.applicant}<p> <p>请假日期:${task.date}</p><p>请假天数:${task.days}</p> <p>请假事由:${task.reason}</p>`; cancelText = ""; okText = "备案"; onOk = () => { } } this.$Modal.confirm({ title: title, content: content, closable: true, cancelText: cancelText, okText: okText, onOk: onOk, onCancel: onCancel }); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Spring StateMachine(1) 二级审批流程
- 高效的流程审批对企业发展的作用在哪里?
- 三类器械审批要点出炉!医疗AI们准备好了吗?
- 简云 Saas ERP平台 1.4.3 版本发布,增加移动端审批功能
- 微信模块 Oejia_wx v0.5.7 发布,增加卡片及审批流消息支持
- 微信模块 Oejia_wx v0.5.8 发布,审批流支持及素材图文增强
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
游戏开发的数学和物理
[ 日] 加藤洁 / 徐 谦 / 人民邮电出版社 / 59.00元
本书严格选取了游戏开发中最常用的数学和物理学知识,通过游戏开发实例,配上丰富的插图,以从易到难的顺序进行讲解。第1章到第5章分别讲解了物体的运动、卷动、碰撞检测、光线的制作、画面切换的细分处理。这五章将2D游戏必需的知识一网打尽,同时还严格挑选了少量3D游戏编程的基础内容以供参考。第6章系统梳理了游戏开发的数学和物理学理论,帮助读者更好地理解前五章的内容。 本书适合网络和手机游戏开发者阅读。一起来看看 《游戏开发的数学和物理》 这本书的介绍吧!