no message

main
HUOJIN\92525 2026-03-05 11:55:50 +08:00
parent 30130f5111
commit a83e1dc23e
6 changed files with 343 additions and 47 deletions

View File

@ -12,6 +12,7 @@ enum Api {
deleteBatch = '/base/point/deleteBatch', deleteBatch = '/base/point/deleteBatch',
importExcel = '/base/point/importExcel', importExcel = '/base/point/importExcel',
exportXls = '/base/point/exportXls', exportXls = '/base/point/exportXls',
queryOutWorkStation='/base/point/queryOutWorkStation',
} }
/** /**
@ -78,3 +79,9 @@ export const saveOrUpdate = (params, isUpdate) => {
const url = isUpdate ? Api.edit : Api.save; const url = isUpdate ? Api.edit : Api.save;
return defHttp.post({ url: url, params }, { isTransformResponse: false }); return defHttp.post({ url: url, params }, { isTransformResponse: false });
} }
export const queryOutWorkStation = (params) => defHttp.get(
{ url: Api.queryOutWorkStation, params },
{isTransformResponse: false,}
);

View File

@ -1,5 +1,5 @@
import { defHttp } from '/@/utils/http/axios'; import { defHttp } from '/@/utils/http/axios';
import { useMessage } from "/@/hooks/web/useMessage"; import { useMessage } from '/@/hooks/web/useMessage';
const { createConfirm } = useMessage(); const { createConfirm } = useMessage();
@ -13,7 +13,9 @@ enum Api {
exportXls = '/count/countPlan/exportXls', exportXls = '/count/countPlan/exportXls',
queryDataById = '/count/countPlan/queryById', queryDataById = '/count/countPlan/queryById',
countDetailList = '/count/countPlan/queryCountDetailByMainId', countDetailList = '/count/countPlan/queryCountDetailByMainId',
countIssueTask = '/count/countPlan/countIssueTask',
} }
/** /**
* api * api
* @param params * @param params
@ -28,15 +30,18 @@ export const getImportUrl = Api.importExcel;
* *
* @param params * @param params
*/ */
export const queryCountDetailListByMainId = (id) => defHttp.get({url: Api.countDetailList, params:{ id }}); export const queryCountDetailListByMainId = (id) =>
defHttp.get({
url: Api.countDetailList,
params: { id },
});
export const queryDataById = (id) => defHttp.get({ url: Api.queryDataById, params: { id } }); export const queryDataById = (id) => defHttp.get({ url: Api.queryDataById, params: { id } });
/** /**
* *
* @param params * @param params
*/ */
export const list = (params) => export const list = (params) => defHttp.get({ url: Api.list, params });
defHttp.get({url: Api.list, params});
/** /**
* *
@ -45,7 +50,7 @@ export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({ url: Api.deleteOne, params }, { joinParamsToUrl: true }).then(() => { return defHttp.delete({ url: Api.deleteOne, params }, { joinParamsToUrl: true }).then(() => {
handleSuccess(); handleSuccess();
}); });
} };
/** /**
* *
* @param params * @param params
@ -58,12 +63,20 @@ export const batchDelete = (params, handleSuccess) => {
okText: '确认', okText: '确认',
cancelText: '取消', cancelText: '取消',
onOk: () => { onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { return defHttp
.delete(
{
url: Api.deleteBatch,
data: params,
},
{ joinParamsToUrl: true }
)
.then(() => {
handleSuccess(); handleSuccess();
}); });
} },
}); });
} };
/** /**
* *
* @param params * @param params
@ -71,4 +84,19 @@ export const batchDelete = (params, handleSuccess) => {
export const saveOrUpdate = (params, isUpdate) => { export const saveOrUpdate = (params, isUpdate) => {
const url = isUpdate ? Api.edit : Api.save; const url = isUpdate ? Api.edit : Api.save;
return defHttp.post({ url: url, params }); return defHttp.post({ url: url, params });
};
/**
*
* @param workStations
*/
export const countIssueTask = (workStations) =>
defHttp.get(
{
url: Api.countIssueTask,
params: { workStations },
},
{
isTransformResponse: false,
} }
);

View File

@ -1,7 +1,13 @@
import { BasicColumn } from '/@/components/Table'; import { BasicColumn } from '/@/components/Table';
import { JVxeTypes, JVxeColumn } from '/@/components/jeecg/JVxeTable/types'; import { JVxeTypes, JVxeColumn } from '/@/components/jeecg/JVxeTable/types';
import { render } from '@/utils/common/renderUtils';
//列表数据 //列表数据
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
{
title: '库区',
align: 'center',
dataIndex: 'areaId_dictText',
},
{ {
title: '盘点单号', title: '盘点单号',
align: 'center', align: 'center',
@ -16,11 +22,18 @@ export const columns: BasicColumn[] = [
title: '状态', title: '状态',
align: 'center', align: 'center',
dataIndex: 'status_dictText', dataIndex: 'status_dictText',
customRender: ({ text }) => {
//盘点状态:1.已创建;2.已审核;3.盘点中;4.盘点完成;5.已取消;6.已关闭;
const statusColorMap = {
: 'orange',
: 'blue',
: 'green',
: 'green',
: 'red',
};
const color = statusColorMap[text] || 'red';
return render.renderTag(text, color);
}, },
{
title: '审核人',
align: 'center',
dataIndex: 'auditor',
}, },
{ {
title: '创建时间', title: '创建时间',

View File

@ -5,21 +5,29 @@
<a-form ref="formRef" @keyup.enter.native="reload" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol"> <a-form ref="formRef" @keyup.enter.native="reload" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :lg="6"> <a-col :lg="6">
<a-form-item name="no"> <a-form-item name="orderNo">
<template #label><span title="任务号">任务</span></template> <template #label><span title="盘点单号">盘点单</span></template>
<JInput v-model:value="queryParam.no" :placeholder="'请输入任务号'" :type="JInputTypeEnum.JINPUT_RIGHT_LIKE" /> <JInput v-model:value="queryParam.orderNo" :placeholder="'请输入盘点单号'" :type="JInputTypeEnum.JINPUT_RIGHT_LIKE" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :lg="6"> <a-col :lg="6">
<a-form-item name="orderType"> <a-form-item name="countType">
<template #label><span title="单据类型">单据类型</span></template> <template #label><span title="盘点类型">盘点类型</span></template>
<JDictSelectTag v-model:value="queryParam.orderType" placeholder="请选择" dictCode="asn_order_type" allowClear /> <JDictSelectTag v-model:value="queryParam.countType" placeholder="请选择" dictCode="count_type" allowClear />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :lg="12">
<a-form-item name="status_MultiString" :labelCol="{ span: 2 }" :wrapperCol="{ span: 20 }">
<template #label><span title="状态">状态</span></template>
<JSelectMultiple v-model:value="queryParam.status_MultiString" dictCode="count_status" />
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :lg="6"> <a-col :lg="6">
<a-form-item name="orderDate"> <a-form-item name="createTime">
<template #label><span title="订单日期">订单日期</span></template> <template #label><span title="订单日期">创建日期</span></template>
<JRangeDate v-model:value="queryParam.orderDate" /> <JRangeDate v-model:value="queryParam.createTime" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-col :xl="6" :lg="7" :md="8" :sm="24">
@ -35,14 +43,6 @@
</span> </span>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="24">
<!-- <a-col :lg="6">
<a-form-item name="status">
<template #label><span title="状态">状态</span></template>
<JDictSelectTag v-model:value="queryParam.status" placeholder="请选择" dictCode="asn_status" allowClear />
</a-form-item>
</a-col>-->
</a-row>
</a-form> </a-form>
</div> </div>
<!--引用表格--> <!--引用表格-->
@ -85,6 +85,7 @@
</BasicTable> </BasicTable>
<!-- 表单区域 --> <!-- 表单区域 -->
<CountPlanModal @register="registerModal" @success="handleSuccess"></CountPlanModal> <CountPlanModal @register="registerModal" @success="handleSuccess"></CountPlanModal>
<IssueTaskModal ref="registerIssueTaskModal" @success="handleSuccess"></IssueTaskModal>
</div> </div>
</template> </template>
@ -100,10 +101,15 @@
import { JInputTypeEnum } from '@/enums/cpteEnum'; import { JInputTypeEnum } from '@/enums/cpteEnum';
import { JInput, JDictSelectTag } from '@/components/Form'; import { JInput, JDictSelectTag } from '@/components/Form';
import JRangeDate from '@/components/Form/src/jeecg/components/JRangeDate.vue'; import JRangeDate from '@/components/Form/src/jeecg/components/JRangeDate.vue';
import JSelectMultiple from '../../components/Form/src/jeecg/components/JSelectMultiple.vue';
import ScanTrayModal from '@/views/receive/asn/components/scanTray/ScanTrayModal.vue';
import IssueTaskModal from '@/views/count/components/issueTask/IssueTaskModal.vue';
const fieldPickers = reactive({}); const fieldPickers = reactive({});
const formRef = ref(); const formRef = ref();
const queryParam = reactive<any>({}); const queryParam = reactive<any>({
status_MultiString: '1,3,4', //
});
//model //model
const [registerModal, { openModal }] = useModal(); const [registerModal, { openModal }] = useModal();
//table //table
@ -123,12 +129,12 @@
const newQueryParam = { ...queryParam }; const newQueryParam = { ...queryParam };
// //
if (newQueryParam.orderDate) { if (newQueryParam.createTime) {
try { try {
const [begin, end] = newQueryParam.orderDate.split(','); const [begin, end] = newQueryParam.createTime.split(',');
if (begin !== undefined) newQueryParam.orderDate_begin = begin; if (begin !== undefined) newQueryParam.createTime_begin = begin;
if (end !== undefined) newQueryParam.orderDate_end = end; if (end !== undefined) newQueryParam.createTime_end = end;
delete newQueryParam.orderDate; delete newQueryParam.createTime;
} catch (error) { } catch (error) {
console.error('日期范围处理错误:', error); console.error('日期范围处理错误:', error);
} }
@ -190,6 +196,16 @@
}); });
} }
/**
* 下发
*/
const registerIssueTaskModal = ref();
function handleIssueTask(record) {
registerIssueTaskModal.value.disableSubmit = false;
registerIssueTaskModal.value.edit(record);
}
/** /**
* 删除事件 * 删除事件
*/ */
@ -229,9 +245,14 @@
*/ */
function getDropDownAction(record) { function getDropDownAction(record) {
return [ return [
{ /*{
label: '详情', label: '详情',
onClick: handleDetail.bind(null, record), onClick: handleDetail.bind(null, record),
},*/
{
label: '下发',
onClick: handleIssueTask.bind(null, record),
auth: 'count:data_count_plan:countIssueTask',
}, },
{ {
label: '删除', label: '删除',

View File

@ -0,0 +1,153 @@
<template>
<a-spin :spinning="confirmLoading">
<JFormContainer :disabled="disabled">
<template #detail>
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" name="IssueTaskForm">
<a-row>
<a-col :span="24">
<a-form-item
label="工作站"
v-bind="validateInfos.workStation"
id="IssueTaskForm-workStation"
name="workStation"
:labelCol="{ span: 3 }"
:wrapperCol="{ span: 24 }"
>
<a-checkbox-group v-model:value="formData.workStation" style="width: 100%">
<a-row>
<a-col v-for="item in checkboxOptions" :key="item.value" :span="8">
<a-checkbox :value="item.value">{{ item.label }}</a-checkbox>
</a-col>
</a-row>
</a-checkbox-group>
</a-form-item>
</a-col>
</a-row>
</a-form>
</template>
</JFormContainer>
</a-spin>
</template>
<script lang="ts" setup>
import { ref, reactive, defineExpose, nextTick, defineProps, computed } from 'vue';
import { useMessage } from '/@/hooks/web/useMessage';
import { Form } from 'ant-design-vue';
import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
import { queryOutWorkStation } from '/@/views/base/point/Point.api';
import { countIssueTask } from '/@/views/count/CountPlan.api';
const props = defineProps({
formDisabled: { type: Boolean, default: false },
formData: { type: Object, default: () => ({}) },
formBpm: { type: Boolean, default: true },
});
const formRef = ref();
const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']);
const formData = reactive<Record<string, any>>({
workStation: [],
areaId_dictText: '',
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const confirmLoading = ref<boolean>(false);
//
const validatorRules = reactive({});
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
/**
* 获取出库工作站
*/
const checkboxOptions = ref([]);
async function getWorkStation() {
try {
const res = await queryOutWorkStation({ areaId_dictText: formData.areaId_dictText });
if (res && res.code === 200) {
checkboxOptions.value = res.result.map((item: any) => ({
label: item,
value: item,
}));
}
} catch (error) {
console.error('加载工作站失败:', error);
checkboxOptions.value = [];
}
}
//
const disabled = computed(() => {
if (props.formBpm === true) {
if (props.formData.disabled === false) {
return false;
} else {
return true;
}
}
return props.formDisabled;
});
/**
* 新增
*/
function add() {
edit({});
}
/**
* 编辑
*/
function edit(record) {
nextTick(() => {
resetFields();
const tmpData = {};
Object.keys(formData).forEach((key) => {
if (record.hasOwnProperty(key)) {
tmpData[key] = record[key];
}
});
//
Object.assign(formData, tmpData);
//
getWorkStation();
});
}
/**
* 提交数据
*/
async function submitForm() {
confirmLoading.value = true;
try {
console.log('checkboxOptions.value', formData.workStation);
if (formData.workStation.length <= 0) {
return createMessage.error('请选择工作站');
}
const res = await countIssueTask(formData.workStation);
if (res && res.code === 200) {
createMessage.success('操作成功');
emit('ok');
} else {
createMessage.error(res.message || '处理失败');
}
} catch (error) {
createMessage.error('请求异常: ' + error);
} finally {
confirmLoading.value = false;
}
}
defineExpose({
add,
edit,
submitForm,
});
</script>
<style lang="less" scoped>
.antd-modal-form {
padding: 14px 20px;
}
</style>

View File

@ -0,0 +1,74 @@
<template>
<j-modal :title="title" :maxHeight="500" :width="600" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
<IssueTaskForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></IssueTaskForm>
<template #footer>
<a-button @click="handleCancel"></a-button>
<a-button :class="{ 'jee-hidden': disableSubmit }" type="primary" @click="handleOk"></a-button>
</template>
</j-modal>
</template>
<script lang="ts" setup>
import { ref, nextTick, defineExpose } from 'vue';
import IssueTaskForm from './IssueTaskForm.vue'
import JModal from '/@/components/Modal/src/JModal/JModal.vue';
const title = ref<string>('');
const visible = ref<boolean>(false);
const disableSubmit = ref<boolean>(false);
const registerForm = ref();
const emit = defineEmits(['register', 'success']);
/**
* 托盘扫描
*/
function add() {
title.value = '任务下发';
visible.value = true;
nextTick(() => {
registerForm.value.add();
});
}
function edit(record) {
title.value = '任务下发';
visible.value = true;
nextTick(() => {
registerForm.value.edit(record);
});
}
/**
* 确定按钮点击事件
*/
function handleOk() {
registerForm.value.submitForm();
}
/**
* form保存回调事件
*/
function submitCallback() {
handleCancel();
emit('success');
}
/**
* 取消按钮回调事件
*/
function handleCancel() {
visible.value = false;
}
defineExpose({
add,
edit,
disableSubmit,
});
</script>
<style lang="less">
/**隐藏样式-modal确定按钮 */
.jee-hidden {
display: none !important;
}
</style>
<style lang="less" scoped></style>