版本规整V4

This commit is contained in:
xiaocp2009 2025-09-01 14:59:14 +08:00
parent 053e9b9299
commit 4793fda2a2
14 changed files with 325 additions and 20 deletions

View File

@ -0,0 +1,62 @@
<script setup lang="ts">
import { useBoolean } from '@sa/hooks';
defineOptions({
name: 'BatchStatusSwitch'
});
interface Props {
disabled?: boolean;
info?: string;
}
const props = withDefaults(defineProps<Props>(), {
disabled: false,
info: ''
});
const value = defineModel<Api.Common.EnableStatus>('value', { default: '0' });
interface Emits {
(e: 'submitted', value: Api.Common.EnableStatus, callback: (flag: boolean) => void): void;
}
const emit = defineEmits<Emits>();
/** 状态切换过程的 loading 状态 */
const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean();
const handleUpdateValue = (val: Api.Common.EnableStatus) => {
value.value = val === '0' ? '1' : '0';
//,
window.$dialog?.warning({
title: '温馨提示',
content: `您确定外围数据` + ((value.value === '0')? `已经`:``) + `导入完成吗?`,
positiveText: '确定',
negativeText: '取消',
onPositiveClick: () => {
startLoading();
emit('submitted', val, flag => {
if (flag) value.value = val;
endLoading();
});
},
onNegativeClick: () => {}
});
};
</script>
<template>
<NSwitch
v-model:value="value"
:loading="loading"
:rubber-band="false"
checked-value="1"
unchecked-value="0"
:disabled="props.disabled"
@update:value="handleUpdateValue"
/>
</template>
<style scoped></style>

View File

@ -19,3 +19,13 @@ export function fetchUpdateBatch (data: Api.Mps.BatchOperateParams) {
});
}
/** 切换导入状态 */
export function switchImportDataStatus (data: Api.Mps.BatchOperateParams) {
return request<boolean>({
url: '/mps/batch/switchImportDataStatus',
method: 'put',
data
});
}

View File

@ -15,21 +15,27 @@ declare namespace Api {
/** batch */
type Batch = Common.CommonRecord<{
/** 批次月份 */
batchMonth: string;
batchMonth: string;
/** 批量代码 */
batchCode: string;
/** 批量名称 */
batchName: string;
/** 数据导入状态 */
importStatus: string;
/** 预批量时间 */
preBatchDate: string;
preBatchDate: string;
/** 预批量状态0初始 1成功 9失败 */
preBatchStatus: string;
preBatchStatus: string;
/** 正式批量时间 */
afterBatchDate: string;
afterBatchDate: string;
/** 正式批量状态0初始 1成功 9失败 */
afterBatchStatus: string;
afterBatchStatus: string;
/** 核对状态0未核对 1已核对 */
checkStatus: string;
checkStatus: string;
/** 核对人 */
checkBy: number;
checkBy: number;
/** 核对备注 */
checkRemark: string;
checkRemark: string;
}>;
/** batch search params */
@ -47,6 +53,9 @@ declare namespace Api {
Pick<
Api.Mps.Batch,
| 'batchMonth'
| 'batchCode'
| 'batchName'
| 'importStatus'
| 'preBatchDate'
| 'preBatchStatus'
| 'afterBatchDate'

View File

@ -1,6 +1,5 @@
<script setup lang="tsx">
import { NDivider } from 'naive-ui';
import { fetchGetBatchList } from '@/service/api/mps/batch';
import {fetchGetBatchList, switchImportDataStatus} from '@/service/api/mps/batch';
import { useAppStore } from '@/store/modules/app';
import { useAuth } from '@/hooks/business/auth';
import { useTable, useTableOperate } from '@/hooks/common/table';
@ -12,10 +11,33 @@ import {ref, watch} from "vue";
import {useBoolean} from "~/packages/hooks";
import {useDict} from "@/hooks/business/dict";
import DictTag from '@/components/custom/dict-tag.vue';
import BatchStatusSwitch from '@/components/custom/batch-status-switch.vue';
defineOptions({
name: 'BatchList'
});
/** 处理状态切换 */
async function handleStatusChange(
row: Api.Mps.Batch,
value: Api.Common.EnableStatus,
callback: (flag: boolean) => void
) {
const { error } = await switchImportDataStatus({
batchMonth: row.batchMonth,
batchCode: row.batchCode,
importStatus: value
});
callback(!error);
if (!error) {
window.$message?.success('数据导入状态修改成功');
await getData();
}
}
useDict('data_import_status');
useDict('after_batch_status');
useDict('mps_check_status');
useDict('pre_batch_status');
@ -66,6 +88,41 @@ const {
ellipsis: true,
resizable: true
},
{
key: 'batchCode',
title: '批量代码',
align: 'center',
minWidth: 120,
ellipsis: true,
resizable: true
},
{
key: 'batchName',
title: '批量名称',
align: 'center',
minWidth: 120,
ellipsis: true,
resizable: true
},
{
key: 'importStatus',
title: '数据导入状态',
align: 'center',
minWidth: 120,
ellipsis: true,
resizable: true,
render(row) {
/*return <DictTag size="small" value={row.importStatus} dictCode="data_import_status" />;*/
return (
<BatchStatusSwitch
v-model:value={row.importStatus}
disabled={row.preBatchStatus != 0 && row.afterBatchStatus != '0' && row.checkStatus != '0'}
/*info={row.batchName}*/
onSubmitted={(value, callback) => handleStatusChange(row, value, callback)}
/>
);
}
},
{
key: 'preBatchDate',
title: '预批量时间',

View File

@ -27,6 +27,7 @@ const visible = defineModel<boolean>('visible', {
default: false
});
const { options: dataImportStatusOptions } = useDict('data_import_status');
const { options: preBatchStatusOptions } = useDict('pre_batch_status');
const { options: afterBatchStatusOptions } = useDict('after_batch_status');
const { options: mpsCheckStatusOptions } = useDict('mps_check_status');
@ -49,6 +50,9 @@ const model: Model = reactive(createDefaultModel());
function createDefaultModel(): Model {
return {
batchMonth: '',
batchCode: '',
batchName: '',
importStatus: '',
preBatchDate: undefined,
preBatchStatus: '',
afterBatchDate: undefined,
@ -61,12 +65,7 @@ function createDefaultModel(): Model {
type RuleKey = Extract<
keyof Model,
| 'preBatchDate'
| 'preBatchStatus'
| 'afterBatchDate'
| 'afterBatchStatus'
| 'checkStatus'
| 'checkBy'
>;
const rules: Record<RuleKey, App.Global.FormRule> = {
@ -125,6 +124,22 @@ watch(visible, () => {
label-align="left"
:show-label="true"
:label-width="140">
<NFormItem label="批量代码" path="batchCode">
<NInput v-model:value="model.batchCode" :disabled="true" placeholder="请输入批量代码" />
</NFormItem>
<NFormItem label="批量名称" path="batchName">
<NInput v-model:value="model.batchName" :disabled="true" placeholder="请输入批量名称" />
</NFormItem>
<NFormItem label="数据导入状态" path="importStatus">
<!-- <NInput v-model:value="model.importStatus" placeholder="请输入文件导入状态" />-->
<NSelect
:disabled="true"
v-model:value="model.importStatus"
placeholder="请选择数据导入状态"
:options="dataImportStatusOptions"
clearable
/>
</NFormItem>
<NFormItem label="预批量时间" path="preBatchDate">
<NDatePicker style="width: 100%"
:disabled="true"

View File

@ -19,10 +19,6 @@ const { formRef, validate, restoreValidation } = useNaiveForm();
const model = defineModel<Api.Mps.BatchSearchParams>('model', { required: true });
const { options: preBatchStatusOptions } = useDict('pre_batch_status');
const { options: afterBatchStatusOptions } = useDict('after_batch_status');
const { options: mpsCheckStatusOptions } = useDict('mps_check_status');
async function reset() {
Object.assign(model.value.params!, {});
await restoreValidation();

View File

@ -3,6 +3,7 @@ package org.dromara.mps.controller;
import lombok.RequiredArgsConstructor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.mps.domain.bo.MpsBatchImprtBo;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -44,11 +45,22 @@ public class MpsBatchController extends BaseController {
* 修改批量状态
*/
@SaCheckPermission("mps:batch:edit")
@Log(title = "批量状态", businessType = BusinessType.UPDATE)
@Log(title = "修改数据核对状态", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody MpsBatchBo bo) {
return toAjax(mpsBatchService.updateByBo(bo));
}
/**
* 修改批量状态
*/
@SaCheckPermission("mps:batch:edit")
@Log(title = "切换数据导入状态", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/switchImportDataStatus")
public R<Void> switchImportDataStatus(@Validated(EditGroup.class) @RequestBody MpsBatchImprtBo bo) {
return toAjax(mpsBatchService.updateByBo1(bo));
}
}

View File

@ -30,6 +30,21 @@ public class MpsBatch extends BaseEntity {
@TableId(value = "batch_month")
private String batchMonth;
/**
*批量代码
*/
private String batchCode;
/**
*批量名称
*/
private String batchName;
/**
*文件导入状态0-初始 1-已导入
*/
private String importStatus;
/**
* 预批量时间
*/

View File

@ -28,6 +28,21 @@ public class MpsBatchBo extends BaseEntity {
*/
private String batchMonth;
/**
*批量代码
*/
private String batchCode;
/**
*批量名称
*/
private String batchName;
/**
*文件导入状态0-初始 1-已导入
*/
private String importStatus;
/**
* 预批量时间
*/

View File

@ -0,0 +1,82 @@
package org.dromara.mps.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.mps.domain.MpsBatch;
import java.util.Date;
/**
* 批量状态业务对象 mps_batch
*
* @author gtop
* @date 2025-08-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = MpsBatch.class, reverseConvertGenerate = false)
public class MpsBatchImprtBo extends BaseEntity {
/**
* 批次月份
*/
private String batchMonth;
/**
*批量代码
*/
private String batchCode;
/**
*批量名称
*/
private String batchName;
/**
*数据导入状态0-初始 1-已导入
*/
@NotBlank(message = "数据导入状态不能为空", groups = { AddGroup.class, EditGroup.class })
private String importStatus;
/**
* 预批量时间
*/
private Date preBatchDate;
/**
* 预批量状态0初始 1成功 9失败
*/
private String preBatchStatus;
/**
* 正式批量时间
*/
private Date afterBatchDate;
/**
* 正式批量状态0初始 1成功 9失败
*/
private String afterBatchStatus;
/**
* 核对状态0未核对 1已核对
*/
private String checkStatus;
/**
* 核对人
*/
private Long checkBy;
/**
* 核对备注
*/
private String checkRemark;
}

View File

@ -36,6 +36,21 @@ public class MpsBatchVo implements Serializable {
*/
private String batchMonth;
/**
*批量代码
*/
private String batchCode;
/**
*批量名称
*/
private String batchName;
/**
*文件导入状态0-初始 1-已导入
*/
private String importStatus;
/**
* 预批量时间
*/

View File

@ -1,6 +1,7 @@
package org.dromara.mps.service;
import org.dromara.mps.domain.MpsBatch;
import org.dromara.mps.domain.bo.MpsBatchImprtBo;
import org.dromara.mps.domain.vo.MpsBatchVo;
import org.dromara.mps.domain.bo.MpsBatchBo;
import org.springframework.transaction.annotation.Transactional;
@ -36,5 +37,6 @@ public interface IMpsBatchService {
* @return 是否修改成功
*/
Boolean updateByBo(MpsBatchBo bo);
Boolean updateByBo1(MpsBatchImprtBo bo);
}

View File

@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.mps.domain.bo.MpsBatchImprtBo;
import org.springframework.stereotype.Service;
import org.dromara.mps.domain.bo.MpsBatchBo;
import org.dromara.mps.domain.vo.MpsBatchVo;
@ -70,6 +71,14 @@ public class MpsBatchServiceImpl implements IMpsBatchService {
return baseMapper.updateById(update) > 0;
}
@Override
public Boolean updateByBo1(MpsBatchImprtBo bo) {
bo.setCheckBy(LoginHelper.getUserId());
MpsBatch update = MapstructUtils.convert(bo, MpsBatch.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/

View File

@ -5,6 +5,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<mapper namespace="org.dromara.mps.mapper.MpsBatchMapper">
<resultMap id="batchResultMap" type="org.dromara.mps.domain.vo.MpsBatchVo">
<id column="batch_month" property="batchMonth"/>
<id column="batch_code" property="batchCode"/>
<result column="batch_name" property="batchName"/>
<result column="import_status" property="importStatus"/>
<result column="pre_batch_date" property="preBatchDate"/>
<result column="pre_batch_status" property="preBatchStatus"/>
<result column="after_batch_date" property="afterBatchDate"/>
@ -16,6 +19,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectBatchPage" resultMap="batchResultMap">
SELECT
a.batch_month,
a.batch_code,
a.batch_name,
a.import_status,
a.pre_batch_date,
a.pre_batch_status,
a.after_batch_date,