You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

341 lines
13 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="100px">
<!-- <el-form-item label="月份编码" prop="monthCode">
<el-input v-model="queryParams.monthCode" placeholder="选择月份后自动填充" clearable @keyup.enter="handleQuery" />
</el-form-item> -->
<el-form-item label="月份" prop="monthLabel">
<el-date-picker
v-model="queryParams.monthLabel"
type="month"
value-format="YYYY年M月"
placeholder="请选择月份"
clearable
@change="handleQuery"
/>
</el-form-item>
<el-form-item label="起始日期" prop="startDate">
<el-date-picker clearable v-model="queryParams.startDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择起始日期" />
</el-form-item>
<el-form-item label="截止日期" prop="endDate">
<el-date-picker clearable v-model="queryParams.endDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择截止日期" />
</el-form-item>
<!-- <el-form-item label="月标准工时天数(如21.0、21.5)" prop="standardDays">-->
<!-- <el-input v-model="queryParams.standardDays" placeholder="请输入月标准工时天数(如21.0、21.5)" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['oa/erp:timesheetStandardMonth:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['oa/erp:timesheetStandardMonth:edit']"
>修改</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-hasPermi="['oa/erp:timesheetStandardMonth:remove']"
>删除</el-button
>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['oa/erp:timesheetStandardMonth:export']"
>导出</el-button
>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" border :data="timesheetStandardMonthList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="月标准工时ID" align="center" prop="standardMonthId" v-if="columns[0].visible" />
<el-table-column label="月份编码" align="center" prop="monthCode" v-if="columns[2].visible" />
<el-table-column label="月份" align="center" prop="monthLabel" v-if="columns[3].visible" />
<el-table-column label="起始日期" align="center" prop="startDate" width="180" v-if="columns[4].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.startDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="截止日期" align="center" prop="endDate" width="180" v-if="columns[5].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.endDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="月标准工时" align="center" prop="standardDays" v-if="columns[6].visible" />
<el-table-column label="备注" align="center" prop="remark" v-if="columns[7].visible" />
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button
link
type="primary"
icon="Edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['oa/erp:timesheetStandardMonth:edit']"
></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['oa/erp:timesheetStandardMonth:remove']"
></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改月标准工时信息对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="timesheetStandardMonthFormRef" :model="form" :rules="rules" label-width="120px">
<!-- <el-form-item label="月份编码" prop="monthCode">
<el-input v-model="form.monthCode" placeholder="选择月份后自动填充" />
</el-form-item> -->
<el-form-item label="月份" prop="monthLabel">
<el-date-picker
v-model="form.monthLabel"
type="month"
value-format="YYYY年M月"
placeholder="请选择月份"
style="width: 100%"
@change="handleMonthChange"
/>
</el-form-item>
<el-form-item label="起始日期" prop="startDate">
<el-date-picker clearable v-model="form.startDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择起始日期" style="width: 100%" />
</el-form-item>
<el-form-item label="截止日期" prop="endDate">
<el-date-picker clearable v-model="form.endDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择截止日期" style="width: 100%" />
</el-form-item>
<el-form-item label="月标准工时天数" prop="standardDays">
<el-input v-model="form.standardDays" placeholder="请输入月标准工时天数" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="TimesheetStandardMonth" lang="ts">
import {
listTimesheetStandardMonth,
getTimesheetStandardMonth,
delTimesheetStandardMonth,
addTimesheetStandardMonth,
updateTimesheetStandardMonth
} from '@/api/oa/erp/timesheetStandardMonth';
import { TimesheetStandardMonthVO, TimesheetStandardMonthQuery, TimesheetStandardMonthForm } from '@/api/oa/erp/timesheetStandardMonth/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const timesheetStandardMonthList = ref<TimesheetStandardMonthVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const timesheetStandardMonthFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
// 列显隐信息
const columns = ref<FieldOption[]>([
{ key: 0, label: `月标准工时ID`, visible: false },
{ key: 1, label: `租户编号`, visible: true },
{ key: 2, label: `月份编码(YYYYMM如202604)`, visible: true },
{ key: 3, label: `月份显示名(如2026年4月)`, visible: true },
{ key: 4, label: `起始日期`, visible: true },
{ key: 5, label: `截止日期`, visible: true },
{ key: 6, label: `月标准工时天数(如21.0、21.5)`, visible: true },
{ key: 7, label: `备注`, visible: true },
{ key: 8, label: `删除标志(0存在 1删除)`, visible: true },
{ key: 9, label: `创建部门`, visible: true },
{ key: 10, label: `创建者`, visible: true },
{ key: 11, label: `创建时间`, visible: true },
{ key: 12, label: `更新者`, visible: true },
{ key: 13, label: `更新时间`, visible: true }
]);
const initFormData: TimesheetStandardMonthForm = {
standardMonthId: undefined,
monthCode: undefined,
monthLabel: undefined,
startDate: undefined,
endDate: undefined,
standardDays: undefined,
remark: undefined
};
const data = reactive<PageData<TimesheetStandardMonthForm, TimesheetStandardMonthQuery>>({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
monthCode: undefined,
monthLabel: undefined,
startDate: undefined,
endDate: undefined,
standardDays: undefined,
params: {}
},
rules: {
standardMonthId: [{ required: true, message: '月标准工时ID不能为空', trigger: 'blur' }],
monthCode: [{ required: true, message: '月份编码(YYYYMM如202604)不能为空', trigger: 'blur' }],
startDate: [{ required: true, message: '起始日期不能为空', trigger: 'blur' }],
endDate: [{ required: true, message: '截止日期不能为空', trigger: 'blur' }],
standardDays: [{ required: true, message: '截止日期不能为空', trigger: 'blur' }]
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询月标准工时信息列表 */
const getList = async () => {
loading.value = true;
const res = await listTimesheetStandardMonth(queryParams.value);
timesheetStandardMonthList.value = res.rows;
total.value = res.total;
loading.value = false;
};
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
timesheetStandardMonthFormRef.value?.resetFields();
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
/** 月份选择变更逻辑 */
const handleMonthChange = (val: string) => {
if (!val) return;
// 解析 YYYY年M月
const match = val.match(/(\d{4})年(\d{1,2})月/);
if (match) {
const year = parseInt(match[1]);
const month = parseInt(match[2]);
// 自动设置月份编码 YYYYMM
form.value.monthCode = `${year}${month.toString().padStart(2, '0')}`;
}
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: TimesheetStandardMonthVO[]) => {
ids.value = selection.map((item) => item.standardMonthId);
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = '添加月标准工时信息';
};
/** 修改按钮操作 */
const handleUpdate = async (row?: TimesheetStandardMonthVO) => {
reset();
const _standardMonthId = row?.standardMonthId || ids.value[0];
const res = await getTimesheetStandardMonth(_standardMonthId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = '修改月标准工时信息';
};
/** 提交按钮 */
const submitForm = () => {
timesheetStandardMonthFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.standardMonthId) {
await updateTimesheetStandardMonth(form.value).finally(() => (buttonLoading.value = false));
} else {
await addTimesheetStandardMonth(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */
const handleDelete = async (row?: TimesheetStandardMonthVO) => {
const _standardMonthIds = row?.standardMonthId || ids.value;
await proxy?.$modal.confirm('是否确认删除月标准工时信息编号为"' + _standardMonthIds + '"的数据项?').finally(() => (loading.value = false));
await delTimesheetStandardMonth(_standardMonthIds);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'oa/erp/timesheetStandardMonth/export',
{
...queryParams.value
},
`timesheetStandardMonth_${new Date().getTime()}.xlsx`
);
};
onMounted(() => {
getList();
});
</script>