Browse Source

调整地图设计器数据结构

master
wangxiang 3 years ago
parent
commit
106c4943d8
  1. 4
      src/components/AMap/src/AMapDesigner/index.vue
  2. 71
      src/components/AMap/src/amap.data.ts
  3. 44
      src/components/AMap/src/components/MapTaskModal.vue
  4. 179
      src/components/AMap/src/components/MapTaskPresetModal.vue

4
src/components/AMap/src/AMapDesigner/index.vue

@ -564,12 +564,12 @@
/** 处理打开任务配置 */ /** 处理打开任务配置 */
function handleOpenTask() { function handleOpenTask() {
openModal(true, { driving, formData: mapState.mapData }); openModal(true, { mapData: mapState.mapData });
} }
/** 处理打开地图标记点配置 */ /** 处理打开地图标记点配置 */
function handleOpenMapPoint() { function handleOpenMapPoint() {
mapPointOpenModal(true, { driving }); mapPointOpenModal(true, { });
} }
/** 处理地图放大 */ /** 处理地图放大 */

71
src/components/AMap/src/amap.data.ts

@ -1,6 +1,5 @@
import { BasicColumn } from '/@/components/Table'; import { BasicColumn } from '/@/components/Table';
import { listHospital } from '/@/api/platform/common/controller/hospital'; import { listHospital } from '/@/api/platform/common/controller/hospital';
import { listUser } from '/@/api/platform/system/controller/user';
import { listOrg } from '/@/api/platform/common/controller/org'; import { listOrg } from '/@/api/platform/common/controller/org';
import { commonUpload } from '/@/api/platform/core/controller/upload'; import { commonUpload } from '/@/api/platform/core/controller/upload';
import { h } from 'vue'; import { h } from 'vue';
@ -84,6 +83,7 @@ export const taskColumns: BasicColumn[] = [
editRule: true, editRule: true,
editComponent: 'ApiSelect', editComponent: 'ApiSelect',
editComponentProps: { editComponentProps: {
style: { width:'100%' },
api: listHospital, api: listHospital,
params: { size: 40 }, params: { size: 40 },
labelField: 'name', labelField: 'name',
@ -97,6 +97,7 @@ export const taskColumns: BasicColumn[] = [
editRow: true, editRow: true,
editComponent: 'ApiSelect', editComponent: 'ApiSelect',
editComponentProps: { editComponentProps: {
style: { width:'100%' },
api: listOrg, api: listOrg,
params: { size: 40 }, params: { size: 40 },
labelField: 'name', labelField: 'name',
@ -148,6 +149,7 @@ export const taskPresetColumns: BasicColumn[] = [
editRule: true, editRule: true,
editComponent: 'ApiSelect', editComponent: 'ApiSelect',
editComponentProps: { editComponentProps: {
style: { width:'100%' },
api: listHospital, api: listHospital,
params: { size: 40 }, params: { size: 40 },
labelField: 'name', labelField: 'name',
@ -157,7 +159,7 @@ export const taskPresetColumns: BasicColumn[] = [
}, },
{ {
title: '目的地预设点', title: '目的地预设点',
dataIndex: 'orgId', dataIndex: 'orgName',
}, },
{ {
title: '上传文件', title: '上传文件',
@ -190,57 +192,46 @@ export const taskPresetColumns: BasicColumn[] = [
export const taskPresetChildColumns: BasicColumn[] = [
export const formMutualTaskSettingColumns: BasicColumn[] = [
{ {
title: '收样员', title: '任务名称',
dataIndex: 'userId' dataIndex: 'name',
editRow: true,
editRule: true
}, },
{ {
title: '起始预设点', title: '收样员',
dataIndex: 'smallHospitalId', dataIndex: 'courierUserId',
editRow: true, editRow: true,
editRule: true, editRule: true,
editComponent: 'Select', editComponent: 'Select',
editComponentProps: { editComponentProps: {
options: [ style: { width:'100%' },
{ options: [],
label: 'Option1',
value: '1'
},
{
label: 'Option2',
value: '2'
},
{
label: 'Option3',
value: '3'
}
]
} }
}, },
{
title: '起始预设点',
dataIndex: 'orginPresetName'
},
{ {
title: '目的地预设点', title: '目的地预设点',
dataIndex: 'largeHospitalId', dataIndex: 'destinationPresetName'
},
{
title: '上传文件',
dataIndex: 'fileId',
editRow: true, editRow: true,
editRule: true, editComponent: 'Upload',
editComponent: 'Select',
editComponentProps: { editComponentProps: {
'options': [ multiple: true,
{ maxSize: 20,
'label': 'Option1', maxNumber: 10,
'value': '1' showUploadSaveBtn: true,
}, showPreviewNumber: false,
{ emptyHidePreview: true,
'label': 'Option2', api: commonUpload,
'value': '2' accept: ['image/*']
},
{
'label': 'Option3',
'value': '3'
}
]
} }
}, },
// todo: 第二版功能 // todo: 第二版功能

44
src/components/AMap/src/components/MapTaskModal.vue

@ -1,6 +1,7 @@
<template> <template>
<BasicModal v-bind="$attrs" <BasicModal v-bind="$attrs"
:width="990" :width="1050"
:minHeight="500"
@register="registerModal" @register="registerModal"
@ok="handleSubmit" @ok="handleSubmit"
> >
@ -47,23 +48,24 @@
/> />
</template> </template>
</BasicTable> </BasicTable>
<TaskPresetModal @register="taskPresetRegisterModal" @success="handleTaskPreset"/> <TaskPresetModal @register="taskPresetRegisterModal"/>
</BasicModal> </BasicModal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive } from 'vue'; import { reactive, toRaw } from 'vue';
import {BasicModal, ModalProps, useModal, useModalInner} from '/@/components/Modal'; import {BasicModal, ModalProps, useModal, 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 { taskColumns, taskPresetColumns, MapData } from '../amap.data'; import { taskColumns, taskPresetColumns, MapData } from '../amap.data';
import TaskPresetModal from './MapTaskPresetModal.vue'; import TaskPresetModal from './MapTaskPresetModal.vue';
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';
/** 类型规范统一声明定义区域 */ /** 类型规范统一声明定义区域 */
interface WindowState { interface WindowState {
taskOrdinaryCurrentEditKeyRef: string; taskOrdinaryCurrentEditKeyRef: string;
taskPresetCurrentEditKeyRef: string; taskPresetCurrentEditKeyRef: string;
mapData: MapData | undefined; mapData: MapData;
} }
/** 通用变量统一声明区域 */ /** 通用变量统一声明区域 */
@ -91,16 +93,19 @@
}); });
const emit = defineEmits(['success', 'register']); const emit = defineEmits(['success', 'register']);
const [registerModal, { setModalProps, closeModal }] = useModalInner(async data => { const [registerModal, { setModalProps, closeModal }] = useModalInner(async data => {
state.mapData.formData = data.formData; //
state.mapData = data.mapData;
const props: Partial<ModalProps> = { confirmLoading: false }; const props: Partial<ModalProps> = { confirmLoading: false };
props.title = '任务配置'; props.title = '任务配置';
const mapTask = cloneDeep(state.mapData?.mapTask || []);
setTaskOrdinaryTableData(mapTask.filter(item => ~~item.taskType == 0));
setTaskPresetTableData(mapTask.filter(item => ~~item.taskType == 1));
// : // :
setModalProps(props); setModalProps(props);
}); });
const { createMessage } = useMessage(); const { createMessage } = useMessage();
const [taskPresetRegisterModal, { openModal }] = useModal(); const [taskPresetRegisterModal, { openModal }] = useModal();
const [taskOrdinaryRegisterTable, { const [taskOrdinaryRegisterTable, {
reload: taskOrdinaryReload,
getDataSource: getTaskOrdinaryDataSource, getDataSource: getTaskOrdinaryDataSource,
setTableData: setTaskOrdinaryTableData setTableData: setTaskOrdinaryTableData
}] = useTable({ }] = useTable({
@ -108,7 +113,7 @@
title: '普通任务', title: '普通任务',
columns: taskColumns, columns: taskColumns,
pagination: { pagination: {
pageSize: 3, pageSize: 4,
showSizeChanger: false showSizeChanger: false
}, },
striped: false, striped: false,
@ -125,7 +130,6 @@
} }
}); });
const [taskPresetRegisterTable, { const [taskPresetRegisterTable, {
reload: taskPresetReload,
getDataSource: getTaskPresetDataSource, getDataSource: getTaskPresetDataSource,
setTableData: setTaskPresetTableData setTableData: setTaskPresetTableData
}] = useTable({ }] = useTable({
@ -133,7 +137,7 @@
title: '交接任务', title: '交接任务',
columns: taskPresetColumns, columns: taskPresetColumns,
pagination: { pagination: {
pageSize: 3, pageSize: 4,
showSizeChanger: false showSizeChanger: false
}, },
striped: false, striped: false,
@ -174,7 +178,7 @@
getTaskPresetDataSource().push({ getTaskPresetDataSource().push({
name: '', name: '',
hospitalId: '', hospitalId: '',
orgId: '等待收样员设置!', orgName: '等待收样员设置!',
fileId: [], fileId: [],
key: buildUUID() key: buildUUID()
}); });
@ -282,20 +286,22 @@
} }
} }
/** 处理打开交接任务 */ /** 处理打开交接任务 */
function handleOpenTaskPreset() { function handleOpenTaskPreset(record) {
openModal(true, {}); openModal(true, { row: record, courierUserId: state.mapData.courierUserId });
}
/** 处理地图任务预设点数据 */
function handleTaskPreset() {
} }
/** 处理弹出框提交 */ /** 处理弹出框提交 */
async function handleSubmit() { async function handleSubmit() {
console.log(getTaskOrdinaryDataSource()); try {
setModalProps({ confirmLoading: true });
state.mapData.mapTask = [...toRaw(getTaskOrdinaryDataSource()), ...toRaw(getTaskPresetDataSource())];
//
closeModal();
emit('success');
} finally {
setModalProps({ confirmLoading: false });
}
} }
/** todo:地图动态组合排序算法暂时保留,等待下一版谈论是否做智能地图最优方案 */ /** todo:地图动态组合排序算法暂时保留,等待下一版谈论是否做智能地图最优方案 */

179
src/components/AMap/src/components/MapTaskPresetModal.vue

@ -1,65 +1,93 @@
<template> <template>
<BasicModal v-bind="$attrs" <BasicModal v-bind="$attrs"
:width="920" :width="1050"
:minHeight="400"
@register="registerModal" @register="registerModal"
@ok="handleSubmit" @ok="handleSubmit"
> >
<BasicTable @register="registerTable">
<AForm :labelCol="{ style: { width: '80px' } }" <template #toolbar>
:wrapperCol="{ style: { width: '100%', 'margin-right': '10px' } }" <a-button type="primary"
:model="mutualState.modelRef" @click="handleTaskTurnToDoAdd"
> >新增</a-button>
<AFormItem label="收样员"> </template>
<ASelect v-model:value="mutualState.modelRef.smallHospitalId" <template #action="{ record, column }">
:options="[ <TableAction :actions="createTaskTurnToDoActions(record, column).concat([
{ value: '001', label: '收样员:小狗' }, {
{ value: '002', label: '收样员:小明' }, label: '删除',
{ value: '003', label: '收样员:小红' } icon: 'ant-design:delete-outlined',
]" color: 'error',
onClick: handleTaskTurnToDoDelete.bind(null, record)
}
])"
/> />
</AFormItem> </template>
</AForm> </BasicTable>
<BasicTable @register="registerTable"/>
</BasicModal> </BasicModal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive } from 'vue'; import { reactive, toRaw } from '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 { formTaskColumns, formMutualTaskColumns, largeHospitalMapList, smallHospitalMapList, formMutualTaskSettingColumns } from '../amap.data'; import { taskPresetChildColumns } from '../amap.data';
import { Form, Select } from 'ant-design-vue'; import { listUser } from '/@/api/platform/system/controller/user';
import { buildUUID } from '/@/utils/uuid';
const AForm = Form; import { useMessage } from '/@/hooks/web/useMessage';
const AFormItem = Form.Item; import { cloneDeep } from 'lodash-es';
const ASelect = Select;
/** 类型规范统一声明定义区域 */ /** 类型规范统一声明定义区域 */
interface WindowState { interface WindowState {
currentEditKeyRef: string; currentEditKeyRef: string;
formData: Recordable; taskPresetRow: Recordable;
modelRef: Recordable; courierUserId: string;
} }
/** 通用变量统一声明区域 */ /** 通用变量统一声明区域 */
const mutualState = reactive<WindowState>({ const state = reactive<WindowState>({
currentEditKeyRef: '', currentEditKeyRef: '',
formData: {}, taskPresetRow: {},
modelRef: { courierUserId: ''
smallHospitalId: ''
}
}); });
const emit = defineEmits(['success', 'register']); const emit = defineEmits(['success', 'register']);
const { createMessage } = useMessage();
const [registerModal, { setModalProps, closeModal }] = useModalInner(async data => { const [registerModal, { setModalProps, closeModal }] = useModalInner(async data => {
state.taskPresetRow = data.row;
state.courierUserId = data.courierUserId;
const props: Partial<ModalProps> = { confirmLoading: false }; const props: Partial<ModalProps> = { confirmLoading: false };
props.title = '转办任务配置'; props.title = '转办任务配置';
const columns: BasicColumn[] = [
{
title: '收样员',
dataIndex: 'courierUserId',
editRow: true,
editRule: true,
editComponent: 'Select',
editComponentProps: {
style: { width:'100%' },
options: []
}
}
];
await listUser({ size: 40, userType: '1' }).then(res => {
columns[0].editComponentProps!.options = res.data?.map(item => ({
value: item.id,
label: item.nickName,
})).filter(item => item.value != state.courierUserId);
});
setColumns(taskPresetChildColumns.map(item => {
const column = columns.find(e => e.dataIndex == item.dataIndex);
return column ? column : item;
}));
setTableData(cloneDeep(state.taskPresetRow?.mapTaskPreset || []));
// : // :
setModalProps(props); setModalProps(props);
}); });
const [registerTable, { reload, getDataSource }] = useTable({ const [registerTable, { getDataSource, setTableData, setColumns }] = useTable({
title: '转办任务', title: '转办任务',
columns: formMutualTaskSettingColumns, columns: taskPresetChildColumns,
pagination: { pagination: {
pageSize: 3, pageSize: 6,
showSizeChanger: false showSizeChanger: false
}, },
striped: false, striped: false,
@ -76,30 +104,85 @@
} }
}); });
/** 处理转办任务新增 */
function handleTaskTurnToDoAdd() {
getDataSource().push({
name: '',
courierUserId: '',
orginPresetName: '等待收样员设置!',
destinationPresetName: '等待收样员设置!',
fileId: [],
key: buildUUID()
});
}
/** 处理转办任务删除 */
function handleTaskTurnToDoDelete(record) {
const index = getDataSource().findIndex(item => item.key == record.key);
if (index != -1) {
getDataSource().splice(record.index, 1);
} else createMessage.error(`找不到key:${record.key}的数据,请刷新页面重试!`);
}
/** 创建转办任务操作列 */
function createTaskTurnToDoActions(record: EditRecordRow, column: BasicColumn): ActionItem[] {
if (!record.editable) {
return [
{
label: '编辑',
disabled: state.currentEditKeyRef ? state.currentEditKeyRef !== record.key : false,
onClick: handleTaskTurnToDoEdit.bind(null, record),
}
];
}
return [
{
label: '保存',
onClick: handleTaskTurnToDoSave.bind(null, record, column)
},
{
label: '取消',
popConfirm: {
title: '是否取消编辑',
confirm: handleTaskTurnToDoCancel.bind(null, record, column)
}
}
];
}
/** 处理转办任务表格编辑 */
function handleTaskTurnToDoEdit(record: EditRecordRow) {
state.currentEditKeyRef = record.key;
record.onEdit?.(true);
}
/** 处理转办任务表格编辑取消 */
function handleTaskTurnToDoCancel(record: EditRecordRow) {
state.currentEditKeyRef = '';
record.onEdit?.(false, false);
}
/** 处理转办任务表格编辑保存 */
async function handleTaskTurnToDoSave(record: EditRecordRow) {
const valid = await record.onValid?.();
if (valid) {
const pass = await record.onEdit?.(false, true);
pass && (state.currentEditKeyRef = '');
}
}
/** 处理弹出框提交 */ /** 处理弹出框提交 */
async function handleSubmit() { async function handleSubmit() {
console.log(getDataSource()); try {
/*try {
//
const formData = await formElRef.value.validate();
console.log(formData);
// //
setModalProps({ confirmLoading: true }); setModalProps({ confirmLoading: true });
// tag state.taskPresetRow.mapTaskPreset = toRaw(getDataSource());
switch (state.tag) {
case 'add':
//await addConfig(formData);
break;
case 'edit':
//await editConfig(formData);
break;
}
// //
closeModal(); closeModal();
emit('success'); emit('success');
} finally { } finally {
setModalProps({ confirmLoading: false }); setModalProps({ confirmLoading: false });
}*/ }
} }
</script> </script>

Loading…
Cancel
Save