下料报工代码

This commit is contained in:
zxy 2026-01-08 11:13:27 +08:00
parent e1f3685791
commit b004bb5a9a
10 changed files with 661 additions and 98 deletions

View File

@ -53,6 +53,14 @@ public class TaskInReportController {
return success(true);
}
// 返工
@PostMapping("/rework")
@Operation(summary = "返工")
@PreAuthorize("@ss.hasPermission('heli:task-in-report:update')")
public CommonResult<Boolean> rework(@Valid @RequestBody TaskReworkReqVO reworkReqVO) {
taskInReportService.rework(reworkReqVO.getId(), reworkReqVO.getRemark());
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除下料报工")
@Parameter(name = "id", description = "编号", required = true)

View File

@ -30,7 +30,7 @@ public class TaskInReportSaveReqVO {
@Schema(description = "报工日期")
private LocalDateTime reportTime;
@Schema(description = "长度(径)")
@Schema(description = "长度(径)")
private BigDecimal length;
@Schema(description = "是否已报工 0 默认否 1 是", requiredMode = Schema.RequiredMode.REQUIRED)

View File

@ -0,0 +1,10 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.taskinreport.vo;
import lombok.Data;
@Data
public class TaskReworkReqVO {
private Long id;
private String remark;
}

View File

@ -104,6 +104,10 @@ public class TaskDispatchDetailDO extends BaseDO {
private Long projectMaterialPlanDetailId;
private Integer planStatus;
private Integer isReport;
private Integer inReportProcess;
private String returnRemark;
/**
* 工序状态 默认 已提交 已完成 0 1 2
*/

View File

@ -1,55 +1,62 @@
package com.chanko.yunxi.mes.module.heli.service.taskinreport;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskinreport.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskinreport.TaskInReportDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* 下料报工 Service 接口
*
* @author 管理员
*/
public interface TaskInReportService {
/**
* 创建下料报工
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createTaskInReport(@Valid TaskInReportSaveReqVO createReqVO);
/**
* 更新下料报工
*
* @param updateReqVO 更新信息
*/
void updateTaskInReport(@Valid TaskInReportSaveReqVO updateReqVO);
/**
* 删除下料报工
*
* @param id 编号
*/
void deleteTaskInReport(Long id);
/**
* 获得下料报工
*
* @param id 编号
* @return 下料报工
*/
TaskInReportDO getTaskInReport(Long id);
/**
* 获得下料报工分页
*
* @param pageReqVO 分页查询
* @return 下料报工分页
*/
PageResult<TaskInReportDO> getTaskInReportPage(TaskInReportPageReqVO pageReqVO);
}
package com.chanko.yunxi.mes.module.heli.service.taskinreport;
import java.util.*;
import javax.validation.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskinreport.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskinreport.TaskInReportDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
/**
* 下料报工 Service 接口
*
* @author 管理员
*/
public interface TaskInReportService {
/**
* 创建下料报工
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createTaskInReport(@Valid TaskInReportSaveReqVO createReqVO);
/**
* 更新下料报工
*
* @param updateReqVO 更新信息
*/
void updateTaskInReport(@Valid TaskInReportSaveReqVO updateReqVO);
/**
* 返工
*
* @param id 编号
*/
void rework(Long id, String remark);
/**
* 删除下料报工
*
* @param id 编号
*/
void deleteTaskInReport(Long id);
/**
* 获得下料报工
*
* @param id 编号
* @return 下料报工
*/
TaskInReportDO getTaskInReport(Long id);
/**
* 获得下料报工分页
*
* @param pageReqVO 分页查询
* @return 下料报工分页
*/
PageResult<TaskInReportDO> getTaskInReportPage(TaskInReportPageReqVO pageReqVO);
}

View File

@ -1,7 +1,12 @@
package com.chanko.yunxi.mes.module.heli.service.taskinreport;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskinreport.vo.*;
@ -11,6 +16,8 @@ import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskinreport.TaskInReportMapper;
import java.util.List;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
@ -26,6 +33,9 @@ public class TaskInReportServiceImpl implements TaskInReportService {
@Resource
private TaskInReportMapper taskInReportMapper;
@Resource
private TaskDispatchDetailMapper taskDispatchDetailMapper;
@Override
public Long createTaskInReport(TaskInReportSaveReqVO createReqVO) {
// 插入
@ -45,9 +55,32 @@ public class TaskInReportServiceImpl implements TaskInReportService {
}
@Override
public void rework(Long id, String remark) {
TaskInReportDO taskInReportDO = taskInReportMapper.selectById(id);
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(taskInReportDO.getDispatchDetailId());
if (taskDispatchDetailDO != null) {
if (taskDispatchDetailDO.getInReportProcess() != 2) {
throw new RuntimeException("当前报工状态不允许重新报工");
}
taskDispatchDetailDO.setInReportProcess(1);
taskDispatchDetailDO.setReturnRemark(remark);
taskDispatchDetailMapper.updateById(taskDispatchDetailDO);
}
}
@Override
@Transactional
public void deleteTaskInReport(Long id) {
// 校验存在
validateTaskInReportExists(id);
TaskInReportDO taskInReportDO = taskInReportMapper.selectById(id);
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectById(taskInReportDO.getDispatchDetailId());
if (taskDispatchDetailDO != null) {
if (taskDispatchDetailDO.getInReportProcess() != 2) {
throw new RuntimeException("当前报工状态不允许删除");
} else {
taskDispatchDetailDO.setInReportProcess(0);
}
}
// 删除
taskInReportMapper.deleteById(id);
}
@ -60,7 +93,9 @@ public class TaskInReportServiceImpl implements TaskInReportService {
@Override
public TaskInReportDO getTaskInReport(Long id) {
return taskInReportMapper.selectById(id);
TaskInReportDO taskInReportDO = taskInReportMapper.selectById(id);
return taskInReportDO;
}
@Override

View File

@ -0,0 +1,104 @@
import request from '@/config/axios'
export interface TaskInReportVO {
id: number
dispatchDetailId: number
owner: number
amount: number
reportTime: Date
length: number
hasReport: boolean
status: boolean
workType: string
remark: string
widht: number
hight: number
density: number
weight: number
price: number
reportPrice: number
matType: string
formalId: number
calFormal: string
}
// 查询下料报工分页
export const getTaskInReportPage = async (params) => {
return await request.get({ url: `/heli/task-in-report/page`, params })
}
// 查询下料报工详情
export const getTaskInReport = async (id: number) => {
return await request.get({ url: `/heli/task-in-report/get?id=` + id })
}
// 新增下料报工
export const createTaskInReport = async (data: TaskInReportVO) => {
return await request.post({ url: `/heli/task-in-report/create`, data })
}
// 修改下料报工
export const updateTaskInReport = async (data: TaskInReportVO) => {
return await request.put({ url: `/heli/task-in-report/update`, data })
}
// 返工
export const rework = async (data: TaskInReportVO) => {
return await request.post({url: `/heli/task-in-report/rework`, data})
}
// 删除下料报工
export const deleteTaskInReport = async (id: number) => {
return await request.delete({ url: `/heli/task-in-report/delete?id=` + id })
}
// 导出下料报工 Excel
export const exportTaskInReport = async (params) => {
return await request.download({ url: `/heli/task-in-report/export-excel`, params })
}
// 物料类型选项
export const matTypeOptions = [
{value: "1", label: "块料"},
{value: "2", label: "棒料"},
{value: "3", label: "方料"}
];
/** 获取下料类型 */
export const getMatType = ({value}: { value: any }) => {
// 从选项数组中查找对应的标签
const option = matTypeOptions.find(item => item.value === value);
return option ? option.label : "未知类型";
};
// 报工状态配置
const reportStatusConfig = {
0: { label: "未报工", color: "#909399" },
1: { label: "已报工", color: "#E6A23C" },
2: { label: "报工完成", color: "#67C23A" }
};
/** 获取报工状态 */
export const getReportStatus = ({value}: { value: any }) => {
// 处理各种可能的数据类型和空值情况
if (value === null || value === undefined) {
return "未知状态";
}
// 转换为数字进行比较
const numValue = Number(value);
const status = reportStatusConfig[numValue];
return status ? status.label : `未知状态(${value})`;
};
/** 获取报工状态颜色 */
export const getReportStatusColor = (value: any) => {
if (value === null || value === undefined) {
return '#909399'; // 灰色
}
const numValue = Number(value);
const status = reportStatusConfig[numValue];
return status ? status.color : '#909399';
};

View File

@ -7,14 +7,14 @@ export const fenToYuanFormat = (_, __, cellValue: any, ___) => {
}
/** 数字格式化为两位小数 */
const formatNumber = (row: any, column: any, cellValue: any) => {
if (cellValue === null || cellValue === undefined) {
return '-'
}
// 确保是数字类型后再格式化
// 格式化金额:保留两位小数,加千分位逗号
export const formatAmount = (row, column, cellValue) => {
if (cellValue == null || cellValue === '') return ''
// 转为数字
const num = Number(cellValue)
if (isNaN(num)) {
return cellValue
}
return num.toFixed(2)
if (isNaN(num)) return cellValue
// 使用 toFixed(2) 保证两位小数,再用 toLocaleString 加千分位
return num.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',')
}

View File

@ -3,17 +3,24 @@
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="140px"
v-loading="formLoading"
class="custom-table"
ref="formRef"
:model="formData"
:rules="formRules"
label-width="140px"
v-loading="formLoading"
class="custom-table"
>
<el-row>
<el-col :span="8">
<el-form-item label="物料类型" prop="matType">
<el-select v-model="formData.matType" class="!w-260px" disabled/>
<el-select v-model="formData.matType" class="!w-260px" disabled>
<el-option
v-for="item in TaskInReportApi.matTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
@ -34,26 +41,41 @@
<el-row>
<el-col :span="8">
<el-form-item label="长(直径)(mm)" prop="length">
<el-input-number v-model="formData.length" min="0" :precision="2"
<el-input-number v-model="formData.length" min="0.01" :precision="2"
placeholder="请输入密度"
@change="handleDimensionChange"
@change="handleChange"
class="!w-260px"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="高度(mm)" prop="hight">
<el-input-number v-model="formData.hight" min="0" :precision="2"
<el-input-number v-model="formData.hight" min="0.01" :precision="2"
placeholder="请输入高度"
@change="handleDimensionChange"
@change="handleChange"
class="!w-260px"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="宽度(mm)" prop="widht">
<el-input-number v-model="formData.widht" min="0" :precision="2"
placeholder="请输入单价"
@change="handleDimensionChange"
class="!w-260px"/>
<el-form-item
:label="formData.matType === '1' || formData.matType === '3' ? '宽度(mm)*' : '宽度(mm)'"
prop="widht"
:required="formData.matType === '1' || formData.matType === '3'"
>
<el-input-number
v-if="formData.matType === '1' || formData.matType === '3'"
v-model="formData.widht"
min="0"
:precision="2"
placeholder="请输入宽度"
@change="handleChange"
class="!w-260px"/>
<el-input-number
v-else
v-model="formData.widht"
:disabled="true"
min="0"
:precision="2"
class="!w-260px"/>
</el-form-item>
</el-col>
</el-row>
@ -103,6 +125,7 @@ import * as TaskInReportApi from '@/api/heli/taskinreport'
const {t} = useI18n() //
const message = useMessage() //
import {formatAmount} from '@/utils/formatter'
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
@ -132,7 +155,6 @@ const formData = ref({
const formRules = reactive({
length: [{required: true, message: '长(直径)不能为空', trigger: 'blur'}],
hight: [{required: true, message: '高度不能为空', trigger: 'blur'}],
widht: [{required: true, message: '宽度是不能为空', trigger: 'blur'}],
weight: [{required: true, message: '重量不能为空', trigger: 'blur'}],
reportPrice: [{required: true, message: '总价不能为空', trigger: 'blur'}],
})
@ -161,6 +183,16 @@ const emit = defineEmits(['success']) // 定义 success 事件,用于操作成
const submitForm = async () => {
//
await formRef.value.validate()
if (formData.value.matType === '1' || formData.value.matType === '3') {
if (formData.value.widht == 0) {
message.error('宽度不能为0');
return;
}
}
if (formData.value.reportPrice === 0) {
//0
await message.confirm('本次下料总价为0是否继续')
}
//
formLoading.value = true
try {
@ -180,6 +212,11 @@ const submitForm = async () => {
}
}
const handleChange = () => {
handleDimensionChange();
handleReportPriceChange();
};
const handleReportPriceChange = () => {
if (formData.value.weight) {
formData.value.reportPrice = Number((formData.value.weight * formData.value.price).toFixed(2));
@ -192,37 +229,31 @@ const handleDimensionChange = () => {
const calculateWeight = () => {
if (!validateNumericValue(formData.value.length) ||
!validateNumericValue(formData.value.hight) ||
!validateNumericValue(formData.value.density)) {
!validateNumericValue(formData.value.hight) ||
!validateNumericValue(formData.value.density)) {
return 0;
}
let totalWeight = 0;
if (formData.value.matType === "1" || formData.value.matType === "3") {
if (!validateNumericValue(formData.value.widht)) {
message.error('宽度不能为0');
return 0;
}
totalWeight = Number(
(formData.value.length * formData.value.widht * formData.value.hight * formData.value.density) /
1000000 * 100
(formData.value.length * formData.value.widht * formData.value.hight * formData.value.density) /
1000000
).toFixed(2);
}
if (formData.value.matType === "2") {
totalWeight = Number(
(3.14 * Math.pow(formData.value.length / 2, 2) * formData.value.hight * formData.value.density) /
1000000
(3.14 * Math.pow(formData.value.length / 2, 2) * formData.value.hight * formData.value.density) /
1000000
).toFixed(2);
}
return totalWeight;
};
formData.value.weight = calculateWeight();
if (validateNumericValue(formData.value.weight) && validateNumericValue(formData.value.price)) {
formData.value.reportPrice = Number(formData.value.weight * formData.value.price).toFixed(2);
} else {
formData.value.reportPrice = 0;
}
};

View File

@ -0,0 +1,364 @@
<template>
<el-card class="hl-card">
<template #header>
<span>下料报工记录</span>
</template>
<ContentWrap class="fixed-search">
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="110px"
>
<el-form-item label="报工日期" prop="endTime">
<el-date-picker
v-model="queryParams.endTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
class="!w-280px"
:clearable="false"
/>
</el-form-item>
<el-form-item label="项目编号" prop="projectCode">
<el-input
v-model="queryParams.projectCode"
placeholder="请输入项目编号"
clearable
@keyup.enter="handleQuery"
class="!w-280px"
/>
</el-form-item>
<el-form-item label="项目名称" prop="projectName">
<el-input
v-model="queryParams.projectName"
placeholder="请输入项目名称"
clearable
@keyup.enter="handleQuery"
class="!w-280px"
/>
</el-form-item>
<el-form-item label="子项目名称" prop="projectSubName">
<el-input
v-model="queryParams.projectSubName"
placeholder="请输入子项目名称"
clearable
@keyup.enter="handleQuery"
class="!w-280px"
/>
</el-form-item>
<el-form-item label="零件名称" prop="materialName">
<el-input
v-model="queryParams.materialName"
placeholder="请输入零件名称"
clearable
@keyup.enter="handleQuery"
class="!w-280px"
/>
</el-form-item>
<el-form-item label="报工人" prop="OwnerName">
<el-input
v-model="queryParams.ownerName"
placeholder="请输入报工人名称"
clearable
@keyup.enter="handleQuery"
class="!w-280px"
/>
</el-form-item>
<el-form-item style="margin-left: 20px">
<el-button @click="handleQuery" type="primary">
<Icon icon="ep:search" class="mr-5px"/>
搜索
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px"/>
重置
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['heli:project-order:export']"
>
<Icon icon="ep:download" class="mr-5px"/>
导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap class="table-container">
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table"
height="500px">
<el-table-column fixed type="index" width="100" label="序号" align="center"/>
<el-table-column fixed label="项目编号" align="center" prop="projectCode" width="200"/>
<el-table-column fixed label="项目名称" align="center" prop="projectName" width="160"/>
<el-table-column fixed label="子项目名称" align="center" prop="projectSubName" width="160"/>
<!-- <el-table-column label="子项目编号" align="center" prop="projectSubCode" width="260" />-->
<!-- <el-table-column label="派工单号" align="center" prop="dispatchCode" width="180" />-->
<el-table-column label="零件名称" align="center" prop="materialName" width="180"/>
<!-- <el-table-column label="规格型号" align="center" prop="spec" width="160" />-->
<el-table-column label="报工人" align="center" prop="ownerName" width="100"/>
<el-table-column label="报工状态" align="center" prop="reportProcess" width="100">
<template #default="scope">
<span :style="{
color: getReportStatusColor(scope.row.reportProcess),
fontWeight: 'bold'
}"
>
{{ getReportStatus({value: scope.row.reportProcess}) }}
</span>
</template>
</el-table-column>
<el-table-column label="报工工序" align="center" prop="procedureName" width="160"/>
<el-table-column label="下料类型" align="center" prop="matType" width="100">
<template #default="scope">
<span>{{ getMatType({value: scope.row.matType}) }}</span>
</template>
</el-table-column>
<el-table-column label="长(直径)(mm)" align="center" prop="length" :formatter="formatAmount" width="220"/>
<el-table-column label="宽(mm)" align="center" prop="widht" :formatter="formatAmount" width="160"/>
<el-table-column label="高(mm)" align="center" prop="hight" :formatter="formatAmount" width="160"/>
<el-table-column label="密度(mm)" align="center" prop="density" :formatter="formatAmount" width="160"/>
<el-table-column label="总价(元)" align="center" prop="reportPrice" :formatter="formatAmount" width="160"/>
<el-table-column label="报工日期" align="center" prop="reportTime" :formatter="dateFormatter2" width="120"/>
<el-table-column label="修改人" align="center" prop="updaterName" width="160"/>
<el-table-column label="修改时间" align="center" prop="updateTime" :formatter="dateFormatter2" width="120"/>
<el-table-column label="修改原因" align="center" prop="remark" width="160"/>
<el-table-column fixed="right" label="操作" align="center" width="140">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['heli:task-in-report:update']"
>
编辑
</el-button>
<el-button
v-if="scope.row.reportProcess == 2"
link
type="primary"
@click="handleRework(scope.row.id, scope.row.reportProcess)"
>
返工
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
</el-card>
<!-- 表单弹窗添加/修改 -->
<TaskInReportForm ref="formRef" @success="getList"/>
</template>
<script setup lang="ts">
import {getIntDictOptions, DICT_TYPE} from '@/utils/dict'
import {dateFormatter2} from '@/utils/formatTime'
import {formatAmount} from '@/utils/formatter'
import download from '@/utils/download'
import * as TaskInReportApi from '@/api/heli/taskinreport'
import TaskInReportForm from './TaskInReportForm.vue'
import dayjs from "dayjs";
import {Setting} from "@element-plus/icons-vue";
import ElTooltip from "element-plus/es/components/tooltip";
import {method} from "lodash-es";
defineOptions({name: 'TaskReport'})
const message = useMessage() //
const {t} = useI18n() //
const loading = ref(true) //
const list = ref([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
projectCode: undefined,
projectName: undefined,
projectSubName: undefined,
materialName: undefined,
dispatchDetailId: undefined,
owner: undefined,
amount: undefined,
startTime: [],
endTime: [],
reportTime: [],
hasReport: undefined,
status: undefined,
createTime: [],
ownerName: undefined,
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
const formData = ref({
id: undefined,
dispatchDetailId: undefined,
owner: undefined,
amount: undefined,
reportTime: undefined,
length: undefined,
hasReport: undefined,
status: undefined,
workType: undefined,
remark: undefined,
widht: undefined as number | undefined,
hight: undefined as number | undefined,
density: undefined as number | undefined,
weight: undefined as number | undefined,
price: undefined as number | undefined,
reportPrice: undefined as number | undefined,
matType: undefined,
formalId: undefined,
calFormal: undefined,
})
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await TaskInReportApi.getTaskInReportPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
setDefaultDate();
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
//
const handleRework = async (id: number, status?: number) => {
if (status != "2") {
message.error('该报工没有完成,不允许返工');
return;
}
try {
const {value} = await message.prompt('请输入返工原因');
//
const updateData = {
id: id,
remark: value,
} as TaskInReportApi.TaskInReportVO;
//
await TaskInReportApi.rework(updateData);
message.success('返工操作成功');
//
await getList();
} catch (error) {
//
if (error !== 'cancel' && error !== 'closed') {
console.error('返工操作失败:', error);
message.error('返工操作失败,请重试');
}
}
};
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await TaskInReportApi.deleteTaskInReport(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {
}
}
//
const setDefaultDate = () => {
queryParams.endTime = [
dayjs().startOf('day').format('YYYY-MM-DD HH:mm:ss'),
dayjs().endOf('day').format('YYYY-MM-DD HH:mm:ss')
]
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
if (!list.value || list.value.length == 0) {
message.warning(t('common.selectText'))
return
}
let idList = [];
list.value.forEach(p => {
idList.push(p.id)
})
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await TaskInReportApi.exportTaskInReport({"idList": idList})
download.excel(data, '每日报工记录.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
setDefaultDate()
getList()
})
</script>
<style scoped>
/* 固定搜索栏样式 */
.fixed-search {
position: sticky;
top: 0;
z-index: 1000;
background: white;
padding: 16px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
}
/* 表格容器预留顶部空间 */
.table-container {
margin-top: 20px;
}
/* 可选:调整搜索表单间距 */
.el-form-item {
margin-bottom: 16px;
}
</style>