工资表导出新增 河北伊特汇总表, 部门人数表

餐饮管理系统 增加详情信息维护
考勤系统增加, 超过3天未打卡 异常提醒
新增餐厅费用维护模块, 用于维护 招待费, 福利费  餐券  水电费, 燃气费等
This commit is contained in:
andy 2025-11-28 09:26:22 +08:00
parent a8a18c4072
commit ad4d847cc3
7 changed files with 561 additions and 7 deletions

View File

@ -17,3 +17,10 @@ export function getFlushDatas() {
})
}
export function addDetail(data){
return request({
url: '/api/v2/save',
method: 'post',
data: data
})
}

View File

@ -0,0 +1,36 @@
import request from '@/utils/request'
// 请假列表
export function list(query) {
return request({
url: '/meal/expenses/list',
method: 'get',
params: query
})
}
// 查询请假详细
export function getInfo(id) {
return request({
url: '/meal/expenses/' + id,
method: 'get'
})
}
// 修改
export function update(data) {
return request({
url: '/meal/expenses/edit',
method: 'put',
data: data
})
}
export function exportStatistics(query) {
return request({
url: '/meal/expenses/export',
method: 'post',
params: query
})
}

View File

@ -0,0 +1,29 @@
import request from '@/utils/request'
// 查询请假管理详情列表
export function listDetail(query) {
return request({
url: '/meal/expenses/detail/list',
method: 'get',
params: query
})
}
// 新增请假管理详情
export function addDetail(data) {
return request({
url: '/meal/expenses/detail',
method: 'post',
data: data
})
}
// 删除请假管理详情
export function delDetail(id) {
return request({
url: '/meal/expenses/detail/' + id,
method: 'delete'
})
}

View File

@ -18,7 +18,7 @@
</el-date-picker>
</el-form-item>
<el-form-item label="部门:" prop="deptId">
<treeselect v-model="form.deptId" :options="deptOptions" style="width: 240px" :show-count="true" placeholder="请选择归属部门" />
<treeselect v-model="queryParams.deptId" :options="deptOptions" style="width: 240px" :show-count="true" placeholder="请选择归属部门" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>

View File

@ -41,6 +41,16 @@
v-hasPermi="['system:detail:export']"
>导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['api:v2:add']"
>新增</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
@ -67,11 +77,59 @@
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog title="新增餐饮信息" :visible.sync="open" width="450px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="98px">
<el-row>
<el-col :span="24">
<el-form-item label="用户昵称:" prop="staffId">
<el-select v-model="form.staffId" filterable placeholder="请选择员工" >
<el-option
v-for="item in staffList"
:key="item.userId"
:label="item.name"
:value="item.userId"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="日期:" prop="date">
<el-date-picker clearable
v-model="form.date"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择日期">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="类型:" prop="sign">
<el-select v-model="form.sign" placeholder="请选择早餐,午餐,晚餐" clearable>
<el-option label="早餐" value="早餐" />
<el-option label="午餐" value="午餐" />
<el-option label="晚餐" value="晚餐" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listDetail} from "@/api/restaurant/detail";
import { listStaffAll } from '@/api/system/staff';
import { listDetail, addDetail} from "@/api/restaurant/detail";
export default {
name: "RestaurantDetail",
@ -100,9 +158,24 @@ export default {
sign: null,
},
//
form: {},
form: {
staffId: undefined,
date: undefined,
sign: undefined,
},
//
staffList: [],
//
rules: {
staffId: [
{ required: true, message: "请选择员工", trigger: "blur" },
],
date: [
{ required: true, message: "请选择吃饭时间", trigger: "blur" }
],
sign: [
{ required: true, message: "请选择餐饮类型", trigger: "blur" },
],
}
};
},
@ -111,8 +184,15 @@ export default {
this.queryParams.staffId = param.staffId;
this.queryParams.month = param.month;
this.getList();
this.getStaffList();
},
methods: {
/** 查询员工信息 */
getStaffList(){
listStaffAll().then(response => {
this.staffList = response;
});
},
/** 查询餐饮详情列表 */
getList() {
this.loading = true;
@ -137,7 +217,39 @@ export default {
this.download('api/v2/export', {
...this.queryParams
}, `detail_${new Date().getTime()}.xlsx`)
}
},
reset() {
this.form = {
staffId: undefined,
date: undefined,
sign: undefined,
};
this.resetForm("form");
},
/** 新增 */
handleAdd(){
this.reset();
this.open = true;
},
//
cancel() {
this.open = false;
this.reset();
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
addDetail(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
});
},
}
};
</script>

View File

@ -0,0 +1,370 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="88px">
<el-form-item label="统计月份" prop="yearMonthTime">
<el-date-picker clearable
v-model="queryParams.yearMonthTime"
type="month"
value-format="yyyy-MM"
placeholder="请选择请假月份">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['meal:expenses:export']">导出</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="mealList">
<el-table-column label="月份" align="center" prop="yearMonthTime" >
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-info"
@click="detailOpen(scope.row)"
>{{scope.row.yearMonthTime}}</el-button>
</template>
</el-table-column>
<el-table-column label="水费" align="center" prop="waterFee" />
<el-table-column label="电费" align="center" prop="electricityFee" />
<el-table-column label="招待费" align="center" prop="hospitalityFee" />
<el-table-column label="加班福利餐" align="center" prop="overtimeBenefits" />
<el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width" >
<template slot-scope="scope" v-if="scope.row.userId !== 1">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['meal:expenses:edit']">修改</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改请假管理对话框 -->
<el-dialog v-dialog-drag :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" label-width="128px">
<el-row>
<el-container>
<el-row>
<el-row>
<el-col :span="12">
<el-form-item label="水费用量:" prop="waterDosage">
<el-input v-model="form.waterDosage" placeholder="请输入水费用量" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电费用量:" prop="electricityDosage">
<el-input v-model="form.electricityDosage" placeholder="请输入电费用量" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="水费单价:" prop="waterUnitPrice">
<el-input v-model="form.waterUnitPrice" placeholder="请输入水费单价" >
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电费单价:" prop="electricityUnitPrice">
<el-input v-model="form.electricityUnitPrice" placeholder="请输入电费单价" >
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="水费总价:" prop="waterFee">
<el-input v-model="form.waterFee" placeholder="请输入水费总价" >
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电费总价:" prop="electricityFee">
<el-input v-model="form.electricityFee" placeholder="请输入电费总价" >
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-row>
</el-container>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<el-drawer :title="detail.leaveTitle" :visible.sync="detail.leaveDrawer" direction="rtl" size="50%" :before-close="detailClose">
<el-row :gutter="10" class="mb8">
<el-col :span="2">
<el-button
type="primary"
plain
style="margin-left: 25%;"
icon="el-icon-plus"
size="mini"
@click="handleAddDetail"
v-hasPermi="['personnelMatters:leaveDetail:add']"
>新增</el-button>
</el-col>
</el-row>
<el-table :data="detail.detailList">
<el-table-column label="类型" align="center" prop="type">
<template slot-scope="scope">
<span v-if="scope.row.type ==1">招待</span>
<span v-if="scope.row.type ==2">加班福利</span>
<span v-if="scope.row.type ==3">餐券</span>
</template>
</el-table-column>
<el-table-column label="所属公司" align="center" prop="companyName">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_company" :value="scope.row.companyName"/>
</template>
</el-table-column>
<el-table-column label="餐券类型" align="center" prop="mealVoucherType"/>
<el-table-column label="单价" align="center" prop="unitPrice" />
<el-table-column label="次数or人数" align="center" prop="num" />
<el-table-column label="总价" align="center" prop="totalPrice" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDeleteDetail(scope.row)"
v-hasPermi="['personnelMatters:leaveDetail:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
</el-drawer>
<el-dialog :title="title" v-dialog-drag :visible.sync="detail.detailOpen" width="390px" append-to-body>
<el-form ref="detailForm" :model="detail.form" label-width="128px">
<el-form-item label="所属公司:" prop="companyName">
<el-select v-model="detail.form.companyName" placeholder="请选择公司">
<el-option
v-for="dict in dict.type.sys_company"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="类型:" prop="type">
<el-select v-model="detail.form.type" placeholder="请选择类型" clearable >
<el-option label="招待" value="1"/>
<el-option label="加班福利" value="2"/>
<el-option label="餐券" value="3"/>
</el-select>
</el-form-item>
<el-form-item label="餐券类型:" prop="mealVoucherType">
<el-select v-model="detail.form.mealVoucherType" placeholder="请选择餐券类型" clearable >
<el-option label="早餐" value="早餐"/>
<el-option label="午餐" value="午餐"/>
<el-option label="晚餐" value="晚餐"/>
</el-select>
</el-form-item>
<el-form-item label="单价:" prop="unitPrice">
<el-input v-model="detail.form.unitPrice" placeholder="单价" >
<template slot="append"></template>
</el-input>
</el-form-item>
<el-form-item label="次数or人数" prop="num">
<el-input v-model="detail.form.num" placeholder="次数or人数" />
</el-form-item>
<el-form-item label="总价:" prop="totalPrice">
<el-input v-model="detail.form.totalPrice" placeholder="总价" >
<template slot="append"></template>
</el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitDetailForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { list, getInfo, update, exportStatistics} from "@/api/restaurant/meal";
import { listDetail, addDetail, delDetail } from "@/api/restaurant/mealDetail";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "meal",
dicts: ['sys_company'],
data() {
return {
title:"",
//
showSearch: true,
//
total: 0,
//
loading: true,
//
mealList: [],
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
yearMonthTime: null,
},
//
form: {},
detail:{
row:{},
autoTypeList:[],
autoCalculation: true,
leaveTitle:"请假详情",
leaveDrawer:false,
holidaysType:[],
//
detailList: [],
detailOpen:false,
form:{},
//
rules: {
}
},
};
},
created() {
this.getList();
},
methods: {
/** 查询请假管理列表 */
getList() {
this.loading = true;
list(this.queryParams).then(response => {
this.mealList = response.rows;
this.total = response.total;
this.loading = false;
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 导出员工 */
handleExport() {
if(!this.queryParams.yearMonthTime){
this.$modal.msgError("请选择导出月份");
return;
}
exportStatistics(this.queryParams).then(response => {
this.downloadExcel(response.msg);
})
},
handleUpdate(row) {
this.reset();
getInfo(row.id).then(response => {
this.form = response.data;
this.open = true;
this.title = "维护餐厅费用";
});
},
reset() {
this.form = {
id: null,
yearMonthTime:null,
waterUnitPrice:null,
waterFee:null,
waterDosage:null,
electricityUnitPrice:null,
electricityFee:null,
electricityDosage:null,
};
this.resetForm("form");
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
update(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
}
});
},
detailOpen(row) {
this.detail.leaveTitle = row.yearMonthTime+" "
this.detail.row = row;
listDetail({expensesId:row.id}).then(response => {
this.detail.detailList = response.rows;
this.detail.leaveDrawer = true;
});
},
//
detailClose(done) {
done();
this.handleQuery();
},
handleAddDetail() {
this.detail.form={};
this.detail.detailOpen = true;
this.detail.autoCalculation = true;
this.title = "添加费用信息";
},
handleDeleteDetail(row){
delDetail(row.id).then(response => {
this.$modal.msgSuccess("删除成功");
this.detail.detailOpen = false;
this.detailOpen(this.detail.row);
});
},
submitDetailForm() {
this.detail.form.expensesId = this.detail.row.id;
this.$refs["detailForm"].validate(valid => {
if (valid) {
addDetail(this.detail.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.detail.detailOpen = false;
this.detailOpen(this.detail.row);
});
}
});
},
//
cancel() {
this.open = false;
this.detail.detailOpen = false;
this.reset();
},
}
};
</script>

View File

@ -718,7 +718,7 @@
</el-form-item>
</el-col>
<el-col :span="4">
<el-tooltip :disabled="allowAdjustment" content="当前月考勤计算还未开始或已经结束" placement="top" effect="light">
<el-tooltip placement="top" effect="light">
<el-form-item label="其他补助" prop="otherSubsidies">
<el-input v-model="infoForm.otherSubsidies" :disabled="!allowAdjustment" placeholder="其他补助" >
<template slot="append"></template>
@ -728,7 +728,7 @@
</el-col>
<el-col :span="4">
<el-tooltip :disabled="allowAdjustment" content="当前月考勤计算还未开始或已经结束" placement="top" effect="light">
<el-tooltip placement="top" effect="light">
<el-form-item label="固定补助" prop="fixedAllowance">
<el-input v-model="infoForm.fixedAllowance" :disabled="!allowAdjustment" placeholder="固定补助" >
<template slot="append"></template>
@ -737,7 +737,7 @@
</el-tooltip>
</el-col>
<el-col :span="4">
<el-tooltip :disabled="allowAdjustment" content="当前月考勤计算还未开始或已经结束" placement="top" effect="light">
<el-tooltip placement="top" effect="light">
<el-form-item label="其他扣款" prop="deductions">
<el-input v-model="infoForm.deductions" :disabled="!allowAdjustment" placeholder="其他扣款" >
<template slot="append"></template>