休假报备、出差报备:增加 修改、删除按钮,已核定的禁止修改、删除

This commit is contained in:
lSun 2025-02-13 10:57:26 +08:00
parent 65944b86cb
commit c4e5eafcf0
5 changed files with 657 additions and 592 deletions

View File

@ -538,17 +538,25 @@ export default {
//
startPickerOptions: {
disabledDate: (v) => {
const today = new Date()
today.setHours(0, 0, 0, 0)
if (this.form.leaveEndDate) {
return v.getTime() > new Date(this.form.leaveEndDate).getTime()
const end = new Date(this.form.leaveEndDate);
end.setHours(0, 0, 0, 0);
return v.getTime() > end.getTime() || v.getTime() < today.getTime();
}
return v.getTime() < today.getTime()
},
},
//
endPickerOptions: {
disabledDate: (v) => {
const today = new Date()
today.setHours(0, 0, 0, 0)
if (this.form.leaveStartDate) {
return v.getTime() < new Date(this.form.leaveStartDate).getTime() - 86400000; // - 86400000
}
return v.getTime() < today.getTime()
},
},
daysNumber:"",

View File

@ -491,17 +491,25 @@ export default {
//
startPickerOptions: {
disabledDate: (v) => {
const today = new Date()
today.setHours(0, 0, 0, 0)
if (this.form.leaveEndDate) {
return v.getTime() > new Date(this.form.leaveEndDate).getTime()
const end = new Date(this.form.leaveEndDate);
end.setHours(0, 0, 0, 0);
return v.getTime() > end.getTime() || v.getTime() < today.getTime();
}
return v.getTime() < today.getTime()
},
},
//
endPickerOptions: {
disabledDate: (v) => {
const today = new Date()
today.setHours(0, 0, 0, 0)
if (this.form.leaveStartDate) {
return v.getTime() < new Date(this.form.leaveStartDate).getTime() - 86400000; // - 86400000
}
return v.getTime() < today.getTime()
},
},
daysNumber:"",

View File

@ -398,17 +398,27 @@ export default {
//
startPickerOptions: {
disabledDate: (v) => {
const today = new Date()
today.setHours(0, 0, 0, 0)
if (this.form.leaveEndDate) {
return v.getTime() > new Date(this.form.leaveEndDate).getTime()
const end = new Date(this.form.leaveEndDate);
end.setHours(0, 0, 0, 0);
return v.getTime() > end.getTime() || v.getTime() < today.getTime();
}
return v.getTime() < today.getTime()
},
},
//
endPickerOptions: {
disabledDate: (v) => {
const today = new Date()
today.setHours(0, 0, 0, 0)
if (this.form.leaveStartDate) {
return v.getTime() < new Date(this.form.leaveStartDate).getTime() - 86400000; // - 86400000
}
return v.getTime() < today.getTime()
},
},
daysNumber: "",

View File

@ -5,13 +5,15 @@
<el-date-picker
v-model="queryParams.leaveDate" :clearable="false"
type="date" value-format="yyyy-MM-dd" style="width: 95%"
placeholder="选择申请时间">
placeholder="选择申请时间"
>
</el-date-picker>
</el-form-item>
<el-form-item label="审批状态" prop="examineStatus">
<el-select
v-model="queryParams.examineStatus"
placeholder="审批状态" style="width: 95%">
placeholder="审批状态" style="width: 95%"
>
<el-option
v-for="dict in dict.type.apply_status"
:key="dict.value"
@ -35,7 +37,8 @@
size="mini"
@click="handleAdd"
v-hasPermi="['flow:holiday:add']"
>新增</el-button>
>新增
</el-button>
</el-col>
<el-col :span="1.5">
@ -45,7 +48,8 @@
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button>
>导出
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@ -62,7 +66,9 @@
<el-table-column label="所属部门" align="center" prop="orgName" :show-overflow-tooltip="true" width="240">
</el-table-column>
<el-table-column label="申请时间" align="center" prop="createTime" :show-overflow-tooltip="true" width="180"/>
<el-table-column label="轮休开始时间" align="center" prop="leaveStartDate" :show-overflow-tooltip="true" width="180">
<el-table-column label="轮休开始时间" align="center" prop="leaveStartDate" :show-overflow-tooltip="true"
width="180"
>
<template slot-scope="scope">
<div>{{ scope.row.leaveStartDate }}
<span v-show="scope.row.leaveStartInterval=='1'">上午</span>
@ -70,7 +76,9 @@
</div>
</template>
</el-table-column>
<el-table-column label="轮休结束时间" align="center" prop="leaveEndDate" :show-overflow-tooltip="true" width="180">
<el-table-column label="轮休结束时间" align="center" prop="leaveEndDate" :show-overflow-tooltip="true"
width="180"
>
<template slot-scope="scope">
<div>{{ scope.row.leaveEndDate }}
<span v-show="scope.row.leaveEndInterval=='1'">上午</span>
@ -78,7 +86,9 @@
</div>
</template>
</el-table-column>
<el-table-column label="轮休时长(天)" align="center" prop="leaveDuration" :show-overflow-tooltip="true" width="180"/>
<el-table-column label="轮休时长(天)" align="center" prop="leaveDuration" :show-overflow-tooltip="true"
width="180"
/>
<el-table-column label="审批状态" align="center" prop="examineStatus" :show-overflow-tooltip="true" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.apply_status" :value="scope.row.examineStatus"/>
@ -92,26 +102,30 @@
v-if="scope.row.examineStatus==3"
@click="handleUpdate(scope.row)"
v-hasPermi="['flow:holiday:edit']"
>编辑</el-button>
>编辑
</el-button>
<el-button
size="mini"
v-hasPermi="['flow:holiday:query']"
@click="handleView(scope.row)"
>详情</el-button>
>详情
</el-button>
<el-button
size="mini"
type="primary"
v-hasPermi="['flow:holiday:edit']"
v-if="scope.row.examineStatus==0"
@click="handleBack(scope.row)"
>撤回</el-button>
>撤回
</el-button>
<el-button
size="mini"
type="danger"
v-hasPermi="['flow:holiday:remove']"
v-if="scope.row.examineStatus==2||scope.row.examineStatus==3"
@click="handleDelete(scope.row)"
>删除</el-button>
>删除
</el-button>
</template>
</el-table-column>
</el-table>
@ -160,7 +174,8 @@
<el-date-picker
v-model="form.leaveStartDate" :clearable="false" :disabled="isView"
type="date" value-format="yyyy-MM-dd" style="width: 100%;" @change="handleDateChange"
placeholder="轮休开始时间" :pickerOptions="startPickerOptions">
placeholder="轮休开始时间" :pickerOptions="startPickerOptions"
>
</el-date-picker>
</el-form-item>
</el-col>
@ -183,7 +198,8 @@
<el-date-picker
v-model="form.leaveEndDate" :clearable="false" :disabled="isView"
type="date" value-format="yyyy-MM-dd" style="width: 100%;" @change="handleDateChange"
placeholder="轮休结束时间" :pickerOptions="endPickerOptions">
placeholder="轮休结束时间" :pickerOptions="endPickerOptions"
>
</el-date-picker>
</el-form-item>
</el-col>
@ -221,7 +237,8 @@
v-for="item in isAgreeList"
:key="item.id"
:label="item.id"
>{{item.name}}</el-radio>
>{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@ -229,7 +246,9 @@
<el-row>
<el-col :span="12">
<el-form-item label="代理主持工作人员:" prop="hostUserId">
<el-select v-model="form.hostUserId" multiple placeholder="请选择" filterable clearable style="width: 100%;">
<el-select v-model="form.hostUserId" multiple placeholder="请选择" filterable clearable
style="width: 100%;"
>
<el-option
v-for="item in userList"
:key="item.userId"
@ -243,7 +262,8 @@
<el-row>
<el-col :span="24">
<el-form-item label="备注:">
<el-input type="textarea" placeholder="输入内容" v-model="form.remark" maxlength="100" :readonly="isView"></el-input>
<el-input type="textarea" placeholder="输入内容" v-model="form.remark" maxlength="100" :readonly="isView"
></el-input>
</el-form-item>
</el-col>
</el-row>
@ -264,13 +284,16 @@
</template>
<script>
import { listHoliday,getHoliday,delHoliday,addHoliday,updateHoliday,changeHolidayStatus,exportHoliday,getPostName,
getUserList, } from "@/api/process/rest";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import {getDaysDate} from "@/api/process/leaveReporting";
import {
listHoliday, getHoliday, delHoliday, addHoliday, updateHoliday, changeHolidayStatus, exportHoliday, getPostName,
getUserList
} from '@/api/process/rest'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import { getDaysDate } from '@/api/process/leaveReporting'
export default {
name: "RestApply",
name: 'RestApply',
dicts: ['apply_status'],
components: { Treeselect },
data() {
@ -292,60 +315,63 @@
//
tableList: [],
//
title: "",
title: '',
//
open: false,
isEdit: false,
isView: false,
userList: [],
isAgreeList: [{ id: '0', name: '否' }, { id: '1', name: '是' }],
timeStatusList:[{id:'1',name:"上午"},{id:'2',name:"下午"}],
timeStatusList: [{ id: '1', name: '上午' }, { id: '2', name: '下午' }],
//
dateRange: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
leaveType:"轮休",
leaveType: '轮休',
leaveDate: undefined,
examineStatus: undefined
},
personOptions: [],
typeList: [{ value: '1', label: '固定班制' }, { value: '2', label: '自由工时' }],
attDayList:[{id:0,label:'周一'},{id:1,label:'周二'},{id:2,label:'周三'},{id:3,label:'周四'},{id:4,label:'周五'},{id:5,label:'周六'},{id:6,label:'周日'}],
attDayList: [{ id: 0, label: '周一' }, { id: 1, label: '周二' }, { id: 2, label: '周三' }, {
id: 3,
label: '周四'
}, { id: 4, label: '周五' }, { id: 5, label: '周六' }, { id: 6, label: '周日' }],
//
form: {},
//
rules: {
userName: [
{required: true, message: "申请人不能为空", trigger: "blur" }
{ required: true, message: '申请人不能为空', trigger: 'blur' }
],
postName: [
{required: true, message: "职务不能为空", trigger: "blur" }
{ required: true, message: '职务不能为空', trigger: 'blur' }
],
orgId: [
{ required: true, message: "所属部门不能为空", trigger: "blur" }
{ required: true, message: '所属部门不能为空', trigger: 'blur' }
],
leaveStartDate: [
{ required: true, message: "轮休开始时间不能为空", trigger: "blur" }
{ required: true, message: '轮休开始时间不能为空', trigger: 'blur' }
],
leaveStartInterval: [
{ required: true, message: "不能为空", trigger: "change" }
{ required: true, message: '不能为空', trigger: 'change' }
],
leaveEndDate: [
{ required: true, message: "轮休结束时间不能为空", trigger: "blur" }
{ required: true, message: '轮休结束时间不能为空', trigger: 'blur' }
],
leaveEndInterval: [
{ required: true, message: "不能为空", trigger: "change" }
{ required: true, message: '不能为空', trigger: 'change' }
],
leaveDuration: [
{ required: true, message: "轮休时长不能为空", trigger: "blur" }
{ required: true, message: '轮休时长不能为空', trigger: 'blur' }
],
isAgree: [
{ required: true, message: "是否请示领导不能为空", trigger: "blur" }
{ required: true, message: '是否请示领导不能为空', trigger: 'blur' }
],
hostUserId: [
{ required: true, message: "代理主持工作人员不能为空", trigger: "blur" }
{ required: true, message: '代理主持工作人员不能为空', trigger: 'blur' }
]
// ,
// leaveReason: [
@ -355,25 +381,33 @@
//
startPickerOptions: {
disabledDate: (v) => {
const today = new Date()
today.setHours(0, 0, 0, 0) // 0
if (this.form.leaveEndDate) {
return v.getTime() > new Date(this.form.leaveEndDate).getTime()
const end = new Date(this.form.leaveEndDate);
end.setHours(0, 0, 0, 0);
return v.getTime() > end.getTime() || v.getTime() < today.getTime(); //
}
return v.getTime() < today.getTime()
}
},
},
//
endPickerOptions: {
disabledDate: (v) => {
const today = new Date()
today.setHours(0, 0, 0, 0) // 0
if (this.form.leaveStartDate) {
return v.getTime() < new Date(this.form.leaveStartDate).getTime() - 86400000; // - 86400000
return v.getTime() < new Date(this.form.leaveStartDate).getTime() - 86400000 // - 86400000
}
return v.getTime() < today.getTime()
}
},
},
daysNumber:"",
};
daysNumber: ''
}
},
created() {
this.getList();
this.getUserLists();
this.getList()
this.getUserLists()
},
methods: {
async handleDateChange() {
@ -389,34 +423,34 @@
},
async daysBetween(date1, date2) {
var data = {
"leaveStartDate":date1,
"leaveEndDate":date2,
'leaveStartDate': date1,
'leaveEndDate': date2
}
await getDaysDate(data).then(response => {
this.daysNumber = response.data.date;
});
this.daysNumber = response.data.date
})
},
/** 查询列表 */
getList() {
this.loading = true;
this.loading = true
listHoliday(this.queryParams).then(response => {
this.tableList = response.rows;
this.total = response.total;
this.loading = false;
this.tableList = response.rows
this.total = response.total
this.loading = false
}
);
)
},
getUserLists() {
const Id = this.$store.state.user.id;
const Id = this.$store.state.user.id
getUserList(Id).then(response => {
this.userList = response.data.data;
console.log("userList",this.userList)
});
this.userList = response.data.data
console.log('userList', this.userList)
})
},
//
cancel() {
this.open = false;
this.reset();
this.open = false
this.reset()
},
//
reset() {
@ -429,37 +463,37 @@
leaveEndDate: undefined,
leaveEndInterval: undefined,
leaveDuration: undefined,
leaveType:"轮休",
examineStatus:"0",
isAgree: "0",
leaveType: '轮休',
examineStatus: '0',
isAgree: '0',
hostUserId: [],
leaveReason:undefined,
};
this.resetForm("form");
leaveReason: undefined
}
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.dateRange = [];
this.resetForm("queryForm");
this.handleQuery();
this.dateRange = []
this.resetForm('queryForm')
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd() {
console.log(this.userInfo)
console.log(this.orgList)
this.reset();
const Id = this.$store.state.user.id;
this.reset()
const Id = this.$store.state.user.id
getPostName(Id).then(response => {
this.form.postName = response.data.postName;
this.open = true;
this.isView = false;
this.title = "新增";
});
this.form.postName = response.data.postName
this.open = true
this.isView = false
this.title = '新增'
})
},
//
handleSelectionChange(selection) {
@ -469,60 +503,60 @@
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.reset()
const Id = row.id
const userId = this.$store.state.user.id;
let postName;
const userId = this.$store.state.user.id
let postName
getPostName(userId).then(response => {
postName = response.data.postName;
return getHoliday(Id);
postName = response.data.postName
return getHoliday(Id)
}).then(holidayResponse => {
// holiday
this.form = holidayResponse.data;
console.log(this.form);
this.form = holidayResponse.data
console.log(this.form)
// hostUserId
if (this.form.hostUserId == null) {
this.$set(this.form, "hostUserId", 0);
this.$set(this.form, 'hostUserId', 0)
} else {
let numArr = this.form.hostUserId.split(",");
let num = numArr.map(item => parseInt(item)); // 使 map
this.$set(this.form, "hostUserId", num);
let numArr = this.form.hostUserId.split(',')
let num = numArr.map(item => parseInt(item)) // 使 map
this.$set(this.form, 'hostUserId', num)
}
this.$set(this.form,"postName",postName)
this.$set(this.form, 'postName', postName)
//
this.open = true;
this.isView = false;
this.title = "编辑";
});
this.open = true
this.isView = false
this.title = '编辑'
})
},
handleView(row) {
this.reset();
this.reset()
const Id = row.id
const userId = this.$store.state.user.id;
let postName;
const userId = this.$store.state.user.id
let postName
getPostName(userId).then(response => {
postName = response.data.postName;
return getHoliday(Id);
postName = response.data.postName
return getHoliday(Id)
}).then(holidayResponse => {
// holiday
this.form = holidayResponse.data;
console.log(this.form);
this.form = holidayResponse.data
console.log(this.form)
// hostUserId
if (this.form.hostUserId == null) {
this.$set(this.form, "hostUserId", 0);
this.$set(this.form, 'hostUserId', 0)
} else {
let numArr = this.form.hostUserId.split(",");
let num = numArr.map(item => parseInt(item)); // 使 map
this.$set(this.form, "hostUserId", num);
let numArr = this.form.hostUserId.split(',')
let num = numArr.map(item => parseInt(item)) // 使 map
this.$set(this.form, 'hostUserId', num)
}
this.$set(this.form,"postName",postName)
this.$set(this.form, 'postName', postName)
//
this.open = true;
this.isView = true;
this.title = "查看";
});
this.open = true
this.isView = true
this.title = '查看'
})
},
//
changDept(e) {
@ -536,70 +570,75 @@
/** 提交按钮 */
submitForm: function() {
console.log(this.form)
this.$refs["form"].validate(valid => {
this.$refs['form'].validate(valid => {
if (valid) {
console.log(this.form)
var list = this.form.hostUserId.join(",");
var list = this.form.hostUserId.join(',')
//
const userIdArray = list.split(',');
const userIdArray = list.split(',')
// 00
const containsZero = userIdArray.includes('0');
const containsOtherValues = userIdArray.some(id => id !== '0');
const containsZero = userIdArray.includes('0')
const containsOtherValues = userIdArray.some(id => id !== '0')
if (containsZero && containsOtherValues) {
this.$modal.msgError("选择’/‘后不能在选择其他人员");
return ;
this.$modal.msgError('选择’/‘后不能在选择其他人员')
return
}
this.form.hostUserId = list;
this.form.hostUserId = list
if (this.form.id != undefined) {
this.form.examineStatus = 0
updateHoliday(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
this.$modal.msgSuccess('修改成功')
this.open = false
this.getList()
})
} else {
addHoliday(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
this.$modal.msgSuccess('新增成功')
this.open = false
this.getList()
})
}
}
});
})
},
handleBack(row) {
var that = this;
var that = this
this.$modal.confirm('是否确认撤回该申请?').then(function() {
let param = {
id: row.id,
examineStatus:'3',
examineStatus: '3'
}
changeHolidayStatus(param).then(response => {
that.getList();
this.$modal.msgSuccess("撤回成功");
});
that.getList()
this.$modal.msgSuccess('撤回成功')
})
})
},
/** 删除按钮操作 */
handleDelete(row) {
const Ids = row.id;
const Ids = row.id
this.$modal.confirm('是否确认删除该申请?').then(function() {
return delHoliday(Ids);
return delHoliday(Ids)
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
this.getList()
this.$modal.msgSuccess('删除成功')
}).catch(() => {
})
},
/** 导出按钮操作 */
handleExport() {
this.queryParams.exportType="查询";
this.queryParams.exportType = '查询'
exportHoliday(this.queryParams).then(res => {
this.downloadFile({ fileName: `轮休_${new Date().getTime()}.xlsx`, fileData: res, fileType: 'application/vnd.ms-excel;charset=utf-8' })
this.downloadFile({
fileName: `轮休_${new Date().getTime()}.xlsx`,
fileData: res,
fileType: 'application/vnd.ms-excel;charset=utf-8'
})
},
})
}
}
};
}
</script>

View File

@ -56,7 +56,7 @@
</el-table-column>
<el-table-column label="出差人数" align="center" width="180">
<template slot-scope="scope">
<span class="clickable" @click="handleClick('出差报备',scope.row)" style="color: blue; cursor: pointer;">
<span class="clickable" @click="handleClick('出差',scope.row)" style="color: blue; cursor: pointer;">
{{ scope.row.businessTripNum }}
</span>
</template>
@ -588,7 +588,7 @@ export default {
this.title = "轮休人员";
} else if (type==='临时外出'){
this.title = "临时外出人员";
} else if (type==='出差报备'){
} else if (type==='出差'){
this.title = "出差人员";
} else if (type==='请假'){
this.title = "请假人数";
@ -619,7 +619,7 @@ export default {
});
},
handleRowClick(row) {
if (this.searchConditions.type==='出差报备'){
if (this.searchConditions.type==='出差'){
getEvection(row.uuId).then(response => {
this.form = response.data;
let num = [];