From 466c0af0fcdc10d99062e8c1f4b973cc54e317bb Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Wed, 20 Dec 2023 09:50:00 +0800
Subject: [PATCH] 请假功能
---
src/views/check/leave.vue | 528 ++++++++++++++++++++++++++++++++++++++++++++++++++++
src/api/check/leave.js | 57 +++++
2 files changed, 585 insertions(+), 0 deletions(-)
diff --git a/src/api/check/leave.js b/src/api/check/leave.js
new file mode 100644
index 0000000..579eb55
--- /dev/null
+++ b/src/api/check/leave.js
@@ -0,0 +1,57 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+ return request({
+ url: '/api/leave/page',
+ method: 'get',
+ params: {
+ ...params,
+ current,
+ size,
+ }
+ })
+}
+
+export const audit = (row) => {
+ return request({
+ url: '/api/leave/audit',
+ method: 'post',
+ data: row
+ })
+}
+
+export const add = (row) => {
+ return request({
+ url: '/api/leave/save',
+ method: 'post',
+ data: row
+ })
+}
+
+export const update = (row) => {
+ return request({
+ url: '/api/leave/update',
+ method: 'post',
+ data: row
+ })
+}
+
+export const remove = (ids) => {
+ return request({
+ url: '/api/leave/remove',
+ method: 'post',
+ params: {
+ ids,
+ }
+ })
+}
+
+export const getDetail = (params) => {
+ return request({
+ url: '/api/leave/detail',
+ method: 'get',
+ params: {
+ ...params
+ }
+ })
+}
diff --git a/src/views/check/leave.vue b/src/views/check/leave.vue
new file mode 100644
index 0000000..d6bbe58
--- /dev/null
+++ b/src/views/check/leave.vue
@@ -0,0 +1,528 @@
+<template>
+ <basic-container :class="[
+ 'securityUnit',
+ $store.state.control.screenSize == 1366 ? 'smallSize' : 'normalSize',
+ $store.state.control.windowWidth >= 1024 ? 'tooRowSearch1' : ''
+ ]">
+ <avue-crud class="tablesss" :option="option" v-model="form" :data="data" :page.sync="page" ref="crud" :permission="permissionList"
+ :search.sync="questionBankSearch" @on-load="onLoad" :table-loading="loading" @row-save="rowSave"
+ @search-change="searchChange" @search-reset="searchReset" @row-update="rowUpdate" @row-del="rowDel" :before-open="beforeOpen"
+ @selection-change="selectionChange" @refresh-change="refreshChange">
+ <template slot-scope="{ type, size, row }" slot="menu">
+ <el-button
+ :type="type"
+ :size="size"
+ v-if="permission.leave_audit"
+ icon="el-icon-folder-checked"
+ @click="handleAudit(row)"
+ >审核
+ </el-button>
+ </template>
+ </avue-crud>
+
+ <el-dialog
+ title="请假申请审核"
+ :visible.sync="dialogFormVisible"
+ modal-append-to-body="false"
+ append-to-body="true"
+ :close-on-click-model="true"
+ >
+ <avue-form
+ ref="formAudit"
+ v-model="Audit"
+ :option="optionAudit"
+ @reset-change="emptytChange"
+ @submit="submit"
+ ></avue-form>
+ </el-dialog>
+
+ </basic-container>
+</template>
+
+<script>
+import {
+ getList,
+ add,
+ update,
+ remove,
+ getDetail,audit
+} from "@/api/check/leave";
+import { mapGetters } from "vuex";
+import { getToken } from "@/util/auth";
+export default {
+ data() {
+ return {
+ loading: true,
+ selectionList: [],
+ page: {
+ pageSize: 10,
+ currentPage: 1,
+ total: 0,
+ ...this.$store.state.control.changePageSize
+ },
+ form:{},
+ query: {},
+ questionBankSearch: {},
+ data: [],
+ option: {
+ index: true,
+ tip: false,
+ searchSize: "mini",
+ height: 583,
+ menuWidth: 280,
+ border: true,
+ align: "center",
+ selection: true,
+ header:true,
+ editBtn:false,
+ delBtn:false,
+ viewBtn: false,
+
+ column: [
+ {
+ label: "申请时间",
+ prop: "releaseTimeRange",
+ type: "date",
+ format: "yyyy-MM-dd",
+ valueFormat: "yyyy-MM-dd",
+ searchRange: true,
+ hide: true,
+ display:false,
+ search: true,
+ },
+ {
+ label: "请假人",
+ prop: "applyName",
+ span: 24,
+ },
+ {
+ label: "请假原因",
+ prop: "reason",
+ span: 24,
+ },
+ {
+ label: "图片",
+ prop: "urls",
+ type: "img",
+ dataType: 'string',
+ // listType: "picture-img",
+ span: 24,
+ },
+ {
+ label: "请假开始时间",
+ prop: "startTime",
+ type: "date",
+ format: "yyyy-MM-dd hh:mm:ss",
+ valueFormat: "yyyy-MM-dd hh:mm:ss",
+ span: 24,
+ },
+ {
+ label: "请假结束时间",
+ prop: "endTime",
+ type: "date",
+ format: "yyyy-MM-dd hh:mm:ss",
+ valueFormat: "yyyy-MM-dd hh:mm:ss",
+ span: 24,
+ },
+ {
+ label: "申请时间",
+ prop: "createTime",
+ type: "date",
+ format: "yyyy-MM-dd hh:mm:ss",
+ valueFormat: "yyyy-MM-dd hh:mm:ss",
+ span: 24,
+ },
+ {
+ label: "审核状态",
+ prop: "auditStatus",
+ type: "select",
+ search: true,
+ dicData: [
+ {
+ label: "全部",
+ value: ""
+ },
+ {
+ label: "待审核",
+ value: "10"
+ },
+ {
+ label: "审核通过",
+ value: "1"
+ },
+ {
+ label: "审核不通过",
+ value: "2"
+ }
+ ],
+ span: 24,
+ },
+
+
+ ],
+ ...this.$store.state.control.clearOtherBut
+ },
+ optionAudit: {
+ height: "auto",
+ calcHeight: 30,
+ dialogWidth: 1000,
+ tip: false,
+ searchShow: true,
+ searchMenuSpan: 6,
+ border: true, //liu
+ index: true,
+ stripe: true,
+ viewBtn: false,
+ addBtn: false,
+ editBtn: false,
+ selection: true,
+ excelBtn: false,
+ menuWidth: 230,
+ dialogClickModal: false,
+ ...this.$store.state.control.clearOtherBut,
+ column: [
+ {
+ label: "审核状态",
+ search: true,
+ searchSpan:4,
+ span: 24,
+ prop: "auditStatus",
+ slot: true,
+ editDisplay: false,
+ addDisplay: false,
+ type: "select",
+ rules: [
+ {
+ required: true,
+ message: "请选择审核类型",
+ trigger: "blur"
+ }
+ ],
+ dicData: [
+ {
+ label: "待审核",
+ value: "10"
+ },
+ {
+ label: "审核通过",
+ value: "1"
+ },
+ {
+ label: "审核不通过",
+ value: "2"
+ }
+ ]
+ },
+ {
+ label: "审核明细",
+ span: 24,
+ type: "textarea",
+ prop: "auditDetail"
+ }
+ ]
+ },
+
+ Audit: {},
+ dialogFormVisible: false,
+ };
+ },
+ created() {
+ },
+ computed: {
+ ...mapGetters(["userInfo", "permission"]),
+ permissionList() {
+ return {
+ addBtn: this.vaildData(this.permission.postFiling_add, true),
+ viewBtn: this.vaildData(this.permission.postFiling_view, true),
+ delBtn: this.vaildData(this.permission.postFiling_delete, true),
+ editBtn: this.vaildData(this.permission.postFiling_edit, true),
+ leave_audit:this.vaildData(this.permission.leave_audit,true),
+ };
+ },
+ ids() {
+ let ids = [];
+ this.selectionList.forEach(ele => {
+ ids.push(ele.id);
+ });
+ return ids.join(",");
+ },
+ },
+ mounted() {
+ this.$store.commit("setWindowSizeHeightAdd");
+ },
+ methods: {
+
+ //审核
+ submit(row, done, loading) {
+ const data = {
+ id: row.id,
+ auditStatus: row.auditStatus,
+ auditDetail: row.auditDetail,
+ auditUser: this.userInfo.Id
+ };
+ audit(data).then(
+ () => {
+ this.dialogFormVisible = false;
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ },
+ error => {
+ window.console.log(error);
+ loading();
+ }
+ );
+ },
+
+ //审核
+ handleAudit(row) {
+ this.dialogFormVisible = true;
+ this.Audit = row;
+ },
+
+ beforeOpen(done, type) {
+ if (["edit", "view"].includes(type)) {
+ getDetail({id:this.form.id}).then(res => {
+ this.form = res.data.data;
+ });
+ }
+ done();
+ },
+
+ sizeChange(val) {
+ this.page1.currentPage = 1;
+ this.page1.pageSize = val;
+ this.onLoad(this.page, this.query);
+ },
+ currentChange(val) {
+ this.page1.currentPage = val;
+ // this.getData();
+ this.onLoad(this.page, this.query);
+ },
+ rowSave(form, done, loading) {
+
+ add(form).then(res => {
+ if (res.data.success) {
+ this.$message({
+ message: "操作成功",
+ type: "success"
+ });
+ this.refreshChange();
+ done();
+ } else {
+ this.$message({
+ message: "操作失败",
+ type: "warning"
+ });
+ done();
+ }
+ });
+ },
+ searchChange(params, done) {
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ done();
+ },
+ searchReset() {
+ this.query = {};
+ this.onLoad(this.page);
+ },
+ rowUpdate(row, index, done, loading) {
+ update(row).then(
+ () => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ },
+ error => {
+ window.console.log(error);
+ loading();
+ }
+ );
+ },
+ rowDel(row) {
+ this.$confirm(
+ "确定删除当前合同信息数据?",
+ {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ }
+ )
+ .then(() => {
+ console.log(row);
+ return remove(row.id);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ });
+ },
+ selectionChange(list) {
+ this.selectionList = list;
+ },
+ handleDelete() {
+ if (this.selectionList.length === 0) {
+ this.$message.warning("请选择至少一条数据");
+ return;
+ }
+ this.$confirm("确定批量将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(this.ids).then(res => {
+ this.refreshChange();
+ });
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ this.$refs.crudrec.toggleSelection();
+ })
+ .catch(res => { });
+ },
+ refreshChange() {
+ this.onLoad(this.page, this.query);
+ },
+ //保安员证信息导出
+ handleExport() {
+ this.$confirm("是否导出考勤打卡信息数据?", "提示", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ }).then(() => {
+ //获取查询条件
+ const { releaseTimeRange } = this.questionBankSearch;
+ if (releaseTimeRange) {
+ this.questionBankSearch["beginTime"] = releaseTimeRange[0];
+ this.questionBankSearch["endTime"] = releaseTimeRange[1];
+ }
+ var data = {
+ clockType: this.questionBankSearch.clockType,
+ attendanceType: this.questionBankSearch.attendanceType,
+ realName: this.questionBankSearch.realName,
+ beginTime: this.questionBankSearch.beginTime,
+ endTime: this.questionBankSearch.endTime
+ };
+ //导出
+ if (this.userInfo.role_name == "保安公司管理员") {
+ //如果是保安公司管理员
+ data["deptId"] = this.userInfo.dept_id;
+ }
+ //序列号url形式,用&拼接
+ data = Qs.stringify(data);
+ window.open(
+ `/api/attendance/export-Attendance?${this.website.tokenHeader
+ }=${getToken()}&` + data
+ );
+ });
+ },
+ onLoad(page, params = {}) {
+
+ const { releaseTimeRange } = this.query;
+ let values = {
+ ...params
+ };
+ if (releaseTimeRange) {
+ values = {
+ ...params,
+ applyStartTime: releaseTimeRange[0],
+ applyEndTime: releaseTimeRange[1],
+ ...this.query,
+ };
+ values.releaseTimeRange = null;
+ }
+ this.loading = true;
+ //固定岗
+ getList(
+ page.currentPage,
+ page.pageSize,
+ Object.assign(values, this.query)
+ ).then(res => {
+ const data = res.data.data;
+ this.page.total = data.total;
+ this.data = data.records;
+ this.loading = false;
+ });
+ }
+ },
+};
+</script>
+
+<style lang="scss">
+.securityUnit {
+ width: 100%;
+ height: 100%;
+ // border: 1px solid #000;
+ box-sizing: border-box;
+}
+
+// .el-card__body {
+// padding-bottom: 5px !important;
+// }
+// .avue-crud__tip,
+// .el-tag,
+// .el-tag--light {
+// padding: 0 !important;
+// }
+
+.lod {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba($color: #000000, $alpha: 0.5);
+ padding: 100px 0 0 0;
+ z-index: 1500 !important;
+ display: flex;
+ // align-items: center;
+ justify-content: center;
+
+ .trees {
+ z-index: 501 !important;
+ position: absolute;
+ width: 15%;
+ top: 100px;
+ left: 0;
+ // display: none;
+ }
+
+ .lod-in {
+ width: 70%;
+ height: auto;
+ background-color: transparent;
+
+ // padding: 10px 0 0 0;
+ }
+
+ .el-collapse-item {
+ padding-top: 15px !important;
+ }
+}
+
+.el-collapse {
+ border-top: 1px solid transparent !important;
+}
+
+.rowClickSelf {
+ &:hover {
+ cursor: pointer;
+ }
+}
+</style>
--
Gitblit v1.9.3