no message

main
HUOJIN\92525 2025-12-05 18:02:05 +08:00
parent 63224c8786
commit 7b46c2a0a7
9 changed files with 333 additions and 86 deletions

View File

@ -16,8 +16,9 @@ VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
VITE_GLOB_API_URL=/cpte-wms VITE_GLOB_API_URL=/cpte-wms
#后台接口全路径地址(必填) #后台接口全路径地址(必填)
VITE_GLOB_DOMAIN_URL=http://10.180.9.60:8000/cpte-wms #VITE_GLOB_DOMAIN_URL=http://10.180.9.60:8000/cpte-wms
#VITE_GLOB_DOMAIN_URL=http://47.117.45.79:8000/cpte-wms
VITE_GLOB_DOMAIN_URL=http://10.254.27.192:8000/cpte-wms
# 接口父路径前缀 # 接口父路径前缀
VITE_GLOB_API_URL_PREFIX= VITE_GLOB_API_URL_PREFIX=

View File

@ -13,8 +13,10 @@ enum Api {
exportXls = '/agvTask/exportXls', exportXls = '/agvTask/exportXls',
taskReporter = '/api/robot/reporter/task', taskReporter = '/api/robot/reporter/task',
callBackTask = '/tes/apiv2/callBackTask', callBackTask = '/tes/apiv2/callBackTask',
cancelTask = '/tes/apiv2/cancelTask', cancelTes = '/tes/apiv2/cancelTes',
resendTesTask = '/tes/apiv2/resendTesTask', cancelAgv = '/api/robot/cancelAgv',
resendTes = '/tes/apiv2/resendTes',
resendAgv = '/api/robot/resendAgv',
} }
/** /**
@ -79,7 +81,7 @@ export const batchDelete = (params, handleSuccess) => {
* @param isUpdate * @param isUpdate
*/ */
export const saveOrUpdate = (params, isUpdate) => { export const saveOrUpdate = (params, isUpdate) => {
let 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 });
}; };
@ -110,12 +112,12 @@ export const callBackTask = (params) => {
}; };
/** /**
* * TES
* @param params * @param params
*/ */
export const cancelTask = (params) => { export const cancelTes = (params) => {
return defHttp.post( return defHttp.post(
{ url: Api.cancelTask, params }, { url: Api.cancelTes, params },
{ {
isTransformResponse: false, isTransformResponse: false,
} }
@ -123,11 +125,40 @@ export const cancelTask = (params) => {
}; };
/** /**
* * AGV
* @param params * @param params
*/ */
export const resendTesTask = (params) => { export const cancelAgv = (params) => {
return defHttp.post({ url: Api.resendTesTask, params },{ return defHttp.post(
{ url: Api.cancelAgv, params },
{
isTransformResponse: false, isTransformResponse: false,
}); }
);
};
/**
* TES
* @param params
*/
export const resendTes = (params) => {
return defHttp.post(
{ url: Api.resendTes, params },
{
isTransformResponse: false,
}
);
};
/**
* AGV
* @param params
*/
export const resendAgv = (params) => {
return defHttp.post(
{ url: Api.resendAgv, params },
{
isTransformResponse: false,
}
);
}; };

View File

@ -45,19 +45,20 @@
</BasicTable> </BasicTable>
<!-- 表单区域 --> <!-- 表单区域 -->
<HikAgvModal ref="registerModal" @success="handleSuccess"></HikAgvModal> <HikAgvModal ref="registerModal" @success="handleSuccess"></HikAgvModal>
<ResendAgvModal ref="registerResendModal" @success="handleSuccess"></ResendAgvModal>
</div> </div>
</template> </template>
<script lang="ts" name="agvTask" setup> <script lang="ts" setup>
import { ref, reactive } from 'vue'; import { ref, reactive } from 'vue';
import { BasicTable, TableAction } from '/@/components/Table'; import { BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage'; import { useListPage } from '/@/hooks/system/useListPage';
import { columns } from './HikAgv.data'; import { columns } from './HikAgv.data';
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl, taskReporter } from './AgvTask.api'; import { list, deleteOne, batchDelete, getImportUrl, getExportUrl, taskReporter, cancelAgv } from './AgvTask.api';
import HikAgvModal from './components/HikAgvModal.vue'; import HikAgvModal from './components/HikAgvModal.vue';
import { useUserStore } from '/@/store/modules/user';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';
import { getDateByPicker } from '/@/utils'; import { getDateByPicker } from '/@/utils';
import ResendAgvModal from '@/views/agvTask/components/ResendAgvModal.vue';
const fieldPickers = reactive({}); const fieldPickers = reactive({});
@ -65,12 +66,11 @@
const queryParam = reactive<any>({ const queryParam = reactive<any>({
agvVendor: 'HIK', agvVendor: 'HIK',
}); });
const toggleSearchStatus = ref<boolean>(false);
const registerModal = ref(); const registerModal = ref();
const userStore = useUserStore(); const registerResendModal = ref();
const { createMessage } = useMessage(); const { createMessage } = useMessage();
//table //table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({ const { tableContext, onExportXls, onImportXls } = useListPage({
tableProps: { tableProps: {
title: 'AGV任务表', title: 'AGV任务表',
api: list, api: list,
@ -100,8 +100,7 @@
success: handleSuccess, success: handleSuccess,
}, },
}); });
const [registerTable, { reload, collapseAll, updateTableDataRecord, findTableDataRecord, getDataSource }, { rowSelection, selectedRowKeys }] = const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
tableContext;
const labelCol = reactive({ const labelCol = reactive({
xs: 24, xs: 24,
sm: 4, sm: 4,
@ -132,10 +131,10 @@
/** /**
* 详情 * 详情
*/ */
function handleDetail(record: Recordable) { /* function handleDetail(record: Recordable) {
registerModal.value.disableSubmit = true; registerModal.value.disableSubmit = true;
registerModal.value.edit(record); registerModal.value.edit(record);
} }*/
/** /**
* 删除事件 * 删除事件
@ -144,6 +143,13 @@
await deleteOne({ id: record.id }, handleSuccess); await deleteOne({ id: record.id }, handleSuccess);
} }
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
}
/** /**
* 任务完成事件 * 任务完成事件
*/ */
@ -174,10 +180,31 @@
} }
/** /**
* 批量删除事件 * 任务取消事件
*/ */
async function batchHandleDelete() { async function hanndleCancel(record) {
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess); const params = {
robotTaskCode: record.id,
};
try {
const res = await cancelAgv(params);
if (res && res.code === 'SUCCESS') {
createMessage.success('操作成功');
handleSuccess();
} else {
createMessage.error(res.message || '任务处理失败');
}
} catch (error) {
createMessage.error('请求异常: ' + error.message);
}
}
/**
* 任务重发
*/
function hanndleResend(record) {
registerResendModal.value.disableSubmit = false;
registerResendModal.value.resend(record);
} }
/** /**
@ -205,10 +232,10 @@
*/ */
function getDropDownAction(record) { function getDropDownAction(record) {
return [ return [
{ /* {
label: '任务详情', label: '任务详情',
onClick: handleDetail.bind(null, record), onClick: handleDetail.bind(null, record),
}, },*/
{ {
label: '任务完成', label: '任务完成',
popConfirm: { popConfirm: {
@ -217,7 +244,23 @@
placement: 'topLeft', placement: 'topLeft',
}, },
auth: 'agvTask:data_agv_task:edit', auth: 'agvTask:data_agv_task:edit',
disabled: record.status === 4 || record.status === 1 disabled: record.status === 4 || record.status === 1 || record.status === 5,
},
{
label: '任务取消',
popConfirm: {
title: '是否确认取消?',
confirm: hanndleCancel.bind(null, record),
placement: 'topLeft',
},
auth: 'agvTask:data_agv_task:edit',
disabled: record.status != 2,
},
{
label: '任务重送',
onClick: hanndleResend.bind(null, record),
auth: 'agvTask:data_agv_task:edit',
disabled: record.status != 5,
}, },
{ {
label: '任务删除', label: '任务删除',
@ -227,7 +270,7 @@
placement: 'topLeft', placement: 'topLeft',
}, },
auth: 'agvTask:data_agv_task:delete', auth: 'agvTask:data_agv_task:delete',
disabled: record.status != 1 disabled: record.status != 1,
}, },
]; ];
} }

View File

@ -45,7 +45,7 @@
</BasicTable> </BasicTable>
<!-- 表单区域 --> <!-- 表单区域 -->
<TesAgvModal ref="registerModal" @success="handleSuccess"></TesAgvModal> <TesAgvModal ref="registerModal" @success="handleSuccess"></TesAgvModal>
<ResendTesAgvModal ref="registerResendModal" @success="handleSuccess"></ResendTesAgvModal> <ResendAgvModal ref="registerResendModal" @success="handleSuccess"></ResendAgvModal>
</div> </div>
</template> </template>
@ -54,9 +54,9 @@
import { BasicTable, TableAction } from '/@/components/Table'; import { BasicTable, TableAction } from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage'; import { useListPage } from '/@/hooks/system/useListPage';
import { columns } from './TesAgv.data'; import { columns } from './TesAgv.data';
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl, callBackTask, cancelTask } from './AgvTask.api'; import { list, deleteOne, batchDelete, getImportUrl, getExportUrl, callBackTask, cancelTes } from './AgvTask.api';
import TesAgvModal from './components/TesAgvModal.vue'; import TesAgvModal from './components/TesAgvModal.vue';
import ResendTesAgvModal from './components/ResendTesAgvModal.vue'; import ResendAgvModal from './components/ResendAgvModal.vue';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';
import { getDateByPicker } from '/@/utils'; import { getDateByPicker } from '/@/utils';
@ -131,10 +131,10 @@
/** /**
* 详情 * 详情
*/ */
function handleDetail(record: Recordable) { /* function handleDetail(record: Recordable) {
registerModal.value.disableSubmit = true; registerModal.value.disableSubmit = true;
registerModal.value.edit(record); registerModal.value.edit(record);
} }*/
/** /**
* 删除事件 * 删除事件
@ -167,13 +167,12 @@
const res = await callBackTask(params); const res = await callBackTask(params);
if (res && res.returnCode === 0) { if (res && res.returnCode === 0) {
createMessage.success('操作成功'); createMessage.success('操作成功');
handleSuccess();
} else { } else {
createMessage.error(res.returnMsg || '任务处理失败'); createMessage.error(res.returnMsg || '任务处理失败');
} }
} catch (error) { } catch (error) {
createMessage.error('请求异常: ' + error.message); createMessage.error('请求异常: ' + error.message);
} finally {
handleSuccess();
} }
} }
@ -185,16 +184,15 @@
taskID: record.id, taskID: record.id,
}; };
try { try {
const res = await cancelTask(params); const res = await cancelTes(params);
if (res && res.returnCode === 0) { if (res && res.returnCode === 0) {
createMessage.success('操作成功'); createMessage.success('操作成功');
handleSuccess();
} else { } else {
createMessage.error(res.returnMsg || '任务处理失败'); createMessage.error(res.returnMsg || '任务处理失败');
} }
} catch (error) { } catch (error) {
createMessage.error('请求异常: ' + error.message); createMessage.error('请求异常: ' + error.message);
} finally {
handleSuccess();
} }
} }
@ -231,10 +229,10 @@
*/ */
function getDropDownAction(record) { function getDropDownAction(record) {
return [ return [
{ /* {
label: '任务详情', label: '任务详情',
onClick: handleDetail.bind(null, record), onClick: handleDetail.bind(null, record),
}, },*/
{ {
label: '任务完成', label: '任务完成',
popConfirm: { popConfirm: {

View File

@ -63,7 +63,7 @@
import { ref, reactive, defineExpose, nextTick } from 'vue'; import { ref, reactive, defineExpose, nextTick } from 'vue';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';
import { getTenantId } from '@/utils/auth'; import { getTenantId } from '@/utils/auth';
import { cancelTask, resendTesTask } from '../AgvTask.api'; import { resendTes, resendAgv } from '../AgvTask.api';
import { Form } from 'ant-design-vue'; import { Form } from 'ant-design-vue';
import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue'; import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
import { JSearchSelect, JDictSelectTag } from '@/components/Form'; import { JSearchSelect, JDictSelectTag } from '@/components/Form';
@ -76,14 +76,14 @@
const formData = reactive<Record<string, any>>({ const formData = reactive<Record<string, any>>({
id: '', id: '',
carrierCode: '', carrierCode: '',
carrierType: 'TRAY', carrierType: '',
taskType: '', taskType: '',
type: '', type: '',
status: 'CREATED', status: '',
priority: 3, priority: '',
startCode: '', startCode: '',
endCode: '', endCode: '',
agvVendor: 'TES', agvVendor: '',
tenantId: tenantId, tenantId: tenantId,
}); });
const { createMessage } = useMessage(); const { createMessage } = useMessage();
@ -128,8 +128,16 @@
console.error(error); console.error(error);
} }
confirmLoading.value = true; confirmLoading.value = true;
if (formData.agvVendor === 'TES') {
await responseTes(formData);
} else {
await responseAgv(formData);
}
}
async function responseTes(formData) {
try { try {
const res = await resendTesTask(formData); const res = await resendTes(formData);
if (res && res.returnCode === 0) { if (res && res.returnCode === 0) {
createMessage.success('操作成功'); createMessage.success('操作成功');
emit('ok'); emit('ok');
@ -137,7 +145,23 @@
createMessage.error(res.returnMsg || '任务处理失败'); createMessage.error(res.returnMsg || '任务处理失败');
} }
} catch (error) { } catch (error) {
createMessage.error('请求异常: ' + error.message); createMessage.error('请求异常: ' + error);
} finally {
confirmLoading.value = false;
}
}
async function responseAgv(formData) {
try {
const res = await resendAgv(formData);
if (res && res.code === 'SUCCESS') {
createMessage.success('操作成功');
emit('ok');
} else {
createMessage.error(res.message || '任务处理失败');
}
} catch (error) {
createMessage.error('请求异常: ' + error);
} finally { } finally {
confirmLoading.value = false; confirmLoading.value = false;
} }

View File

@ -9,7 +9,7 @@
@cancel="handleCancel" @cancel="handleCancel"
cancelText="关闭" cancelText="关闭"
> >
<ResendTesAgvForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></ResendTesAgvForm> <ResendAgvForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></ResendAgvForm>
<template #footer> <template #footer>
<a-button @click="handleCancel"></a-button> <a-button @click="handleCancel"></a-button>
<a-button :class="{ 'jee-hidden': disableSubmit }" type="primary" @click="handleOk"> </a-button> <a-button :class="{ 'jee-hidden': disableSubmit }" type="primary" @click="handleOk"> </a-button>
@ -20,7 +20,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { ref, nextTick, defineExpose } from 'vue'; import { ref, nextTick, defineExpose } from 'vue';
import JModal from '/@/components/Modal/src/JModal/JModal.vue'; import JModal from '/@/components/Modal/src/JModal/JModal.vue';
import ResendTesAgvForm from '@/views/agvTask/components/ResendTesAgvForm.vue'; import ResendAgvForm from '@/views/agvTask/components/ResendAgvForm.vue';
const title = ref<string>(''); const title = ref<string>('');
const visible = ref<boolean>(false); const visible = ref<boolean>(false);
@ -32,7 +32,7 @@
* 重送 * 重送
*/ */
function resend(record) { function resend(record) {
title.value = 'TES任务重送'; record.agvVendor === 'TES' ? (title.value = 'TES任务重送') : (title.value = 'AGV任务重送');
visible.value = true; visible.value = true;
nextTick(() => { nextTick(() => {
registerForm.value.edit(record); registerForm.value.edit(record);

View File

@ -23,12 +23,7 @@ export const columns: BasicColumn[] = [
}, },
}, },
{ {
title: '排', title: '巷道编码',
align: 'center',
dataIndex: 'rowNum',
},
{
title: '列',
align: 'center', align: 'center',
dataIndex: 'colNum', dataIndex: 'colNum',
}, },
@ -37,6 +32,11 @@ export const columns: BasicColumn[] = [
align: 'center', align: 'center',
dataIndex: 'layerNum', dataIndex: 'layerNum',
}, },
{
title: '深位',
align: 'center',
dataIndex: 'rowNum',
},
{ {
title: '是否启用', title: '是否启用',
align: 'center', align: 'center',

View File

@ -4,23 +4,24 @@
<template #detail> <template #detail>
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" name="PointForm"> <a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" name="PointForm">
<a-row> <a-row>
<a-col :span="24"> <a-col :span="12">
<a-form-item label="库区" v-bind="validateInfos.areaId" id="PointForm-areaId" name="areaId"> <a-form-item label="库区" v-bind="validateInfos.areaId" id="PointForm-areaId" name="areaId">
<JSearchSelect <JSearchSelect
v-model:value="formData.areaId" v-model:value="formData.areaId"
placeholder="请选择库区" placeholder="请选择库区"
dict="base_area where iz_active=1 and del_flag=0,area_name,id" dict="base_area where iz_active=1 and del_flag=0,area_name,id"
allowClear allowClear
@change="onAreaChange"
/> />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="12">
<a-form-item label="编码" v-bind="validateInfos.pointCode" id="PointForm-pointCode" name="pointCode"> <a-form-item label="编码" v-bind="validateInfos.pointCode" id="PointForm-pointCode" name="pointCode">
<a-input v-model:value="formData.pointCode" placeholder="请输入库位编码" allow-clear></a-input> <a-input v-model:value="formData.pointCode" placeholder="请输入库位编码" :disabled="isAutoGenerateCode" allow-clear></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="12">
<a-form-item label="状态" v-bind="validateInfos.status" id="PointForm-status" name="status"> <a-form-item label="状态" v-bind="validateInfos.status" id="PointForm-status" name="status">
<JDictSelectTag <JDictSelectTag
v-model:value="formData.status" v-model:value="formData.status"
@ -32,28 +33,89 @@
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="12" v-if="showSpecialFields">
<a-form-item label="排" v-bind="validateInfos.rowNum" id="PointForm-rowNum" name="rowNum"> <a-form-item label="巷道编码" v-bind="validateInfos.colNum" id="PointForm-colNum" name="colNum">
<a-input v-model:value="formData.rowNum" placeholder="请输入排" allow-clear></a-input> <a-input v-model:value="formData.colNum" placeholder="巷道编码" allow-clear @change="generatePointCode"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="24">
<a-form-item label="列" v-bind="validateInfos.colNum" id="PointForm-colNum" name="colNum"> <a-col :span="12" v-if="showSpecialFields">
<a-input v-model:value="formData.colNum" placeholder="请输入列" allow-clear></a-input>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="层" v-bind="validateInfos.layerNum" id="PointForm-layerNum" name="layerNum"> <a-form-item label="层" v-bind="validateInfos.layerNum" id="PointForm-layerNum" name="layerNum">
<a-input v-model:value="formData.layerNum" placeholder="请输入层" allow-clear></a-input> <a-input-number
v-model:value="formData.layerNum"
:min="1"
:max="2"
placeholder="请输入层"
allow-clear
@change="generatePointCode"
style="width: 220px"
></a-input-number>
</a-form-item>
</a-col>
<a-col :span="12" v-if="showSpecialFields">
<a-form-item label="深度" v-bind="validateInfos.rowNum" id="PointForm-rowNum" name="rowNum">
<a-input-number
v-model:value="formData.rowNum"
placeholder="请输入深度"
:min="1"
:max="7"
allow-clear
@change="generatePointCode"
style="width: 220px"
></a-input-number>
</a-form-item>
</a-col>
<a-col :span="12" v-if="showCoordinateFields">
<a-form-item label="坐标X" v-bind="validateInfos.positionX" id="PointForm-positionX" name="positionX">
<a-input-number v-model:value="formData.positionX" placeholder="请输入坐标X" allow-clear style="width: 220px"></a-input-number>
</a-form-item>
</a-col>
<a-col :span="12" v-if="showCoordinateFields">
<a-form-item label="坐标Y" v-bind="validateInfos.positionY" id="PointForm-positionY" name="positionY">
<a-input-number v-model:value="formData.positionY" placeholder="请输入坐标Y" allow-clear style="width: 220px"></a-input-number>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-item label="描述" v-bind="validateInfos.description" id="PointForm-description" name="description"> <a-form-item
label="描述"
v-bind="validateInfos.description"
id="AsnForm-description"
name="description"
:labelCol="{ span: 3 }"
:wrapperCol="{ span: 20 }"
>
<a-textarea v-model:value="formData.description" :rows="4" placeholder="请输入描述" /> <a-textarea v-model:value="formData.description" :rows="4" placeholder="请输入描述" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="12" v-if="showSpecialFields">
<a-form-item label="是否启用" v-bind="validateInfos.izActive" id="PointForm-izActive" name="izActive"> <a-form-item
:labelCol="{ span: 6 }"
:wrapperCol="{ span: 12 }"
label="巷道"
v-bind="validateInfos.izDoubleLane"
id="PointForm-izDoubleLane"
name="izDoubleLane"
>
<JSwitch
v-model:value="formData.izDoubleLane"
:checked-children="'双通道'"
:un-checked-children="'单通道'"
:options="['1', '0']"
></JSwitch>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item
:labelCol="{ span: 6 }"
:wrapperCol="{ span: 12 }"
label="是否启用"
v-bind="validateInfos.izActive"
id="PointForm-izActive"
name="izActive"
>
<JSwitch v-model:value="formData.izActive" :options="['1', '0']"></JSwitch> <JSwitch v-model:value="formData.izActive" :options="['1', '0']"></JSwitch>
</a-form-item> </a-form-item>
</a-col> </a-col>
@ -90,26 +152,31 @@
areaId: '', areaId: '',
pointCode: '', pointCode: '',
status: 0, status: 0,
rowNum: '00', colNum: '',
colNum: '00', layerNum: '',
layerNum: '00', rowNum: '',
positionX: 0,
positionY: 0,
izDoubleLane: 1,
description: '', description: '',
delFlag: 0, delFlag: 0,
izActive: 1, izActive: 1,
tenantId: tenantId, tenantId: tenantId,
}); });
const { createMessage } = useMessage(); const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } }); const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 6 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } }); const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const confirmLoading = ref<boolean>(false); const confirmLoading = ref<boolean>(false);
// //
const validatorRules = reactive({ const validatorRules = reactive({
areaId: [{ required: true, message: '请选择库区!' }], areaId: [{ required: true, message: '请选择库区!' }],
pointCode: [{ required: true, message: '请输入库位编码!' }], pointCode: [], //
rowNum: [{ required: true, message: '请输入排!' }],
colNum: [{ required: true, message: '请输入列!' }],
layerNum: [{ required: true, message: '请输入层!' }],
status: [{ required: true, message: '请选择状态!' }], status: [{ required: true, message: '请选择状态!' }],
colNum: [], //
rowNum: [], //
layerNum: [], //
positionX: [], //
positionY: [], //
}); });
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false }); const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
// //
@ -127,6 +194,84 @@
return props.formDisabled; return props.formDisabled;
}); });
//
const isAutoGenerateCode = ref<boolean>(false); //
const showSpecialFields = ref<boolean>(false); //
const showCoordinateFields = ref<boolean>(false); //
// ID
const CP_MJ_AREA_IDS = new Set(['1988794761598668802', '1988795017837088770']);
//
const CP_MJ_RK_CK_AREA_IDS = new Set([
'1988794761598668802',
'1988795017837088770',
'1986328561044119554',
'1986337742572707841'
]);
/**
* 库区选择变化事件
*/
function onAreaChange(option: string | undefined) {
//
if (!option) return;
const isSpecialArea = CP_MJ_AREA_IDS.has(option);
const isCoordinateArea = CP_MJ_RK_CK_AREA_IDS.has(option);
//
isAutoGenerateCode.value = isSpecialArea;
showSpecialFields.value = isSpecialArea;
showCoordinateFields.value = isCoordinateArea;
//
validatorRules.pointCode.splice(0);
validatorRules.colNum.splice(0);
validatorRules.rowNum.splice(0);
validatorRules.layerNum.splice(0);
validatorRules.positionX.splice(0);
validatorRules.positionY.splice(0);
//
if (isSpecialArea) {
// pointCode
validatorRules.colNum.push({ required: true, message: '请输入巷道编码!' });
validatorRules.rowNum.push({ required: true, message: '请输入深度!' });
validatorRules.layerNum.push({ required: true, message: '请输入层!' });
} else {
// pointCode
validatorRules.pointCode.push({ required: true, message: '请输入编码!' });
}
if (isCoordinateArea) {
validatorRules.positionX.push({ required: true, message: '请输入坐标X!' });
validatorRules.positionY.push({ required: true, message: '请输入坐标Y!' });
}
//
if (isSpecialArea || isCoordinateArea) {
generatePointCode();
}
}
/**
* 自动生成库位编码
*/
function generatePointCode() {
if (isAutoGenerateCode.value) {
// : --
const colNum = formData.colNum || '';
const layerNum = formData.layerNum || '';
const rowNum = formData.rowNum || '';
if (colNum && layerNum && rowNum) {
formData.pointCode = `${colNum}-${layerNum}-${rowNum}`;
} else {
formData.pointCode = '';
}
}
}
/** /**
* 新增 * 新增
*/ */
@ -148,6 +293,11 @@
}); });
// //
Object.assign(formData, tmpData); Object.assign(formData, tmpData);
// areaId onAreaChange
if (record.areaId) {
onAreaChange(record.areaId);
}
}); });
} }

View File

@ -1,5 +1,5 @@
<template> <template>
<j-modal :title="title" :maxHeight="500" :width="600" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭"> <j-modal :title="title" :maxHeight="500" :width="700" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
<PointForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></PointForm> <PointForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></PointForm>
<template #footer> <template #footer>
<a-button @click="handleCancel"></a-button> <a-button @click="handleCancel"></a-button>