|
|
@ -5,6 +5,19 @@ |
|
|
|
@register="registerModal" |
|
|
|
@register="registerModal" |
|
|
|
@ok="handleSubmit" |
|
|
|
@ok="handleSubmit" |
|
|
|
> |
|
|
|
> |
|
|
|
|
|
|
|
<AForm ref="formElRef" |
|
|
|
|
|
|
|
:labelCol="{ style: { width: '80px' } }" |
|
|
|
|
|
|
|
:wrapperCol="{ style: { width: '100%', 'margin-right': '10px' } }" |
|
|
|
|
|
|
|
:model="state.modelRef" |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
<AFormItem label="医检" name="destinationPresetId" :rules="{ required: true, whitespace: true, message: '医检不能为空', validateTrigger: 'blur' }"> |
|
|
|
|
|
|
|
<ASelect v-model:value="state.modelRef.destinationPresetId" |
|
|
|
|
|
|
|
:options="state.orgList" |
|
|
|
|
|
|
|
:style="{ width:'30%' }" |
|
|
|
|
|
|
|
allowClear |
|
|
|
|
|
|
|
/> |
|
|
|
|
|
|
|
</AFormItem> |
|
|
|
|
|
|
|
</AForm> |
|
|
|
<BasicTable @register="registerTable"> |
|
|
|
<BasicTable @register="registerTable"> |
|
|
|
<template #toolbar> |
|
|
|
<template #toolbar> |
|
|
|
<a-button type="primary" |
|
|
|
<a-button type="primary" |
|
|
@ -26,7 +39,8 @@ |
|
|
|
</BasicModal> |
|
|
|
</BasicModal> |
|
|
|
</template> |
|
|
|
</template> |
|
|
|
<script lang="ts" setup> |
|
|
|
<script lang="ts" setup> |
|
|
|
import { reactive, toRaw } from 'vue'; |
|
|
|
import { reactive, ref, toRaw } from 'vue'; |
|
|
|
|
|
|
|
import { Form, Select } from 'ant-design-vue'; |
|
|
|
import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal'; |
|
|
|
import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal'; |
|
|
|
import { BasicTable, useTable, EditRecordRow, BasicColumn, ActionItem, TableAction } from '/@/components/Table'; |
|
|
|
import { BasicTable, useTable, EditRecordRow, BasicColumn, ActionItem, TableAction } from '/@/components/Table'; |
|
|
|
import { taskPresetChildColumns } from '../amap.data'; |
|
|
|
import { taskPresetChildColumns } from '../amap.data'; |
|
|
@ -34,24 +48,40 @@ |
|
|
|
import { buildUUID } from '/@/utils/uuid'; |
|
|
|
import { buildUUID } from '/@/utils/uuid'; |
|
|
|
import { useMessage } from '/@/hooks/web/useMessage'; |
|
|
|
import { useMessage } from '/@/hooks/web/useMessage'; |
|
|
|
import { cloneDeep } from 'lodash-es'; |
|
|
|
import { cloneDeep } from 'lodash-es'; |
|
|
|
|
|
|
|
import { ApiSelect } from '/@/components/Form'; |
|
|
|
|
|
|
|
import { listOrg } from '/@/api/platform/common/controller/org'; |
|
|
|
|
|
|
|
|
|
|
|
/** 类型规范统一声明定义区域 */ |
|
|
|
/** 类型规范统一声明定义区域 */ |
|
|
|
interface WindowState { |
|
|
|
interface WindowState { |
|
|
|
currentEditKeyRef: string; |
|
|
|
currentEditKeyRef: string; |
|
|
|
taskPresetRow: Recordable; |
|
|
|
taskPresetRow: Recordable; |
|
|
|
courierUserId: string; |
|
|
|
courierUserId: string; |
|
|
|
|
|
|
|
modelRef: Recordable; |
|
|
|
|
|
|
|
orgList: Recordable[]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** 通用变量统一声明区域 */ |
|
|
|
/** 通用变量统一声明区域 */ |
|
|
|
const state = reactive<WindowState>({ |
|
|
|
const state = reactive<WindowState>({ |
|
|
|
currentEditKeyRef: '', |
|
|
|
currentEditKeyRef: '', |
|
|
|
taskPresetRow: {}, |
|
|
|
taskPresetRow: {}, |
|
|
|
courierUserId: '' |
|
|
|
courierUserId: '', |
|
|
|
|
|
|
|
orgList: [], |
|
|
|
|
|
|
|
modelRef: { |
|
|
|
|
|
|
|
destinationPresetId: '' |
|
|
|
|
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const AForm = Form; |
|
|
|
|
|
|
|
const AFormItem = Form.Item; |
|
|
|
|
|
|
|
const ASelect = Select; |
|
|
|
|
|
|
|
const formElRef = ref(); |
|
|
|
const emit = defineEmits(['success', 'register']); |
|
|
|
const emit = defineEmits(['success', 'register']); |
|
|
|
const { createMessage } = useMessage(); |
|
|
|
const { createMessage } = useMessage(); |
|
|
|
const [registerModal, { setModalProps, closeModal }] = useModalInner(async data => { |
|
|
|
const [registerModal, { setModalProps, closeModal }] = useModalInner(async data => { |
|
|
|
|
|
|
|
// 处理清除脏数据 |
|
|
|
|
|
|
|
formElRef.value.resetFields(); |
|
|
|
|
|
|
|
formElRef.value.clearValidate(); |
|
|
|
|
|
|
|
// 处理设置数据 |
|
|
|
state.taskPresetRow = data.row; |
|
|
|
state.taskPresetRow = data.row; |
|
|
|
state.courierUserId = data.courierUserId; |
|
|
|
state.courierUserId = data.courierUserId; |
|
|
|
const props: Partial<ModalProps> = { confirmLoading: false }; |
|
|
|
const props: Partial<ModalProps> = { confirmLoading: false }; |
|
|
@ -61,7 +91,11 @@ |
|
|
|
title: '收样员', |
|
|
|
title: '收样员', |
|
|
|
dataIndex: 'courierUserId', |
|
|
|
dataIndex: 'courierUserId', |
|
|
|
editRow: true, |
|
|
|
editRow: true, |
|
|
|
editRule: true, |
|
|
|
editRule: (text: string, record: Recordable) => { |
|
|
|
|
|
|
|
if (!text) return Promise.resolve('收样员必填!'); |
|
|
|
|
|
|
|
if (getDataSource().some(item => item.courierUserId == text)) return Promise.resolve('收样员不能重复!'); |
|
|
|
|
|
|
|
return Promise.resolve(''); |
|
|
|
|
|
|
|
}, |
|
|
|
editComponent: 'Select', |
|
|
|
editComponent: 'Select', |
|
|
|
editComponentProps: { |
|
|
|
editComponentProps: { |
|
|
|
style: { width:'100%' }, |
|
|
|
style: { width:'100%' }, |
|
|
@ -69,6 +103,15 @@ |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
]; |
|
|
|
]; |
|
|
|
|
|
|
|
await listOrg({ size: 40 }).then(res => { |
|
|
|
|
|
|
|
state.orgList = res.data?.map(item => ({ |
|
|
|
|
|
|
|
value: item.id, |
|
|
|
|
|
|
|
label: item.name, |
|
|
|
|
|
|
|
mapOrientation: item.mapOrientation, |
|
|
|
|
|
|
|
mapLat: item.mapLat, |
|
|
|
|
|
|
|
mapLng: item.mapLng |
|
|
|
|
|
|
|
})); |
|
|
|
|
|
|
|
}); |
|
|
|
await listUser({ size: 40, userType: '1' }).then(res => { |
|
|
|
await listUser({ size: 40, userType: '1' }).then(res => { |
|
|
|
columns[0].editComponentProps!.options = res.data?.map(item => ({ |
|
|
|
columns[0].editComponentProps!.options = res.data?.map(item => ({ |
|
|
|
value: item.id, |
|
|
|
value: item.id, |
|
|
@ -79,6 +122,10 @@ |
|
|
|
const column = columns.find(e => e.dataIndex == item.dataIndex); |
|
|
|
const column = columns.find(e => e.dataIndex == item.dataIndex); |
|
|
|
return column ? column : item; |
|
|
|
return column ? column : item; |
|
|
|
})); |
|
|
|
})); |
|
|
|
|
|
|
|
const mapTaskPresetData = cloneDeep(state.taskPresetRow?.mapTaskPreset || []); |
|
|
|
|
|
|
|
// 提取交接最终到达上级医检医院 |
|
|
|
|
|
|
|
const lastElement = mapTaskPresetData[mapTaskPresetData.length - 1]; |
|
|
|
|
|
|
|
lastElement && (state.modelRef.destinationPresetId = lastElement.destinationPresetId); |
|
|
|
setTableData(cloneDeep(state.taskPresetRow?.mapTaskPreset || [])); |
|
|
|
setTableData(cloneDeep(state.taskPresetRow?.mapTaskPreset || [])); |
|
|
|
// 尾部:设置处理后的最终配置数据 |
|
|
|
// 尾部:设置处理后的最终配置数据 |
|
|
|
setModalProps(props); |
|
|
|
setModalProps(props); |
|
|
@ -175,8 +222,19 @@ |
|
|
|
async function handleSubmit() { |
|
|
|
async function handleSubmit() { |
|
|
|
try { |
|
|
|
try { |
|
|
|
// 处理提交之前逻辑 |
|
|
|
// 处理提交之前逻辑 |
|
|
|
|
|
|
|
const formData = await formElRef.value.validate(); |
|
|
|
setModalProps({ confirmLoading: true }); |
|
|
|
setModalProps({ confirmLoading: true }); |
|
|
|
state.taskPresetRow.mapTaskPreset = toRaw(getDataSource()); |
|
|
|
const mapTaskPresetData = toRaw(getDataSource()); |
|
|
|
|
|
|
|
// 自动填充交接最终到达上级医检医院 |
|
|
|
|
|
|
|
const lastElement = mapTaskPresetData[mapTaskPresetData.length - 1]; |
|
|
|
|
|
|
|
const option = state.orgList.find(item => item.value == formData.destinationPresetId); |
|
|
|
|
|
|
|
if (option) { |
|
|
|
|
|
|
|
lastElement.destinationPresetId = option.value; |
|
|
|
|
|
|
|
lastElement.destinationPresetName = option.label; |
|
|
|
|
|
|
|
lastElement.destinationPresetlng = option.mapLng; |
|
|
|
|
|
|
|
lastElement.destinationPresetlLat = option.mapLat; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
state.taskPresetRow.mapTaskPreset = mapTaskPresetData; |
|
|
|
// 处理提交完成之后逻辑 |
|
|
|
// 处理提交完成之后逻辑 |
|
|
|
closeModal(); |
|
|
|
closeModal(); |
|
|
|
emit('success'); |
|
|
|
emit('success'); |
|
|
|