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

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

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

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

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

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

@ -1,65 +1,93 @@ @@ -1,65 +1,93 @@
<template>
<BasicModal v-bind="$attrs"
:width="920"
:width="1050"
:minHeight="400"
@register="registerModal"
@ok="handleSubmit"
>
<AForm :labelCol="{ style: { width: '80px' } }"
:wrapperCol="{ style: { width: '100%', 'margin-right': '10px' } }"
:model="mutualState.modelRef"
>
<AFormItem label="收样员">
<ASelect v-model:value="mutualState.modelRef.smallHospitalId"
:options="[
{ value: '001', label: '收样员:小狗' },
{ value: '002', label: '收样员:小明' },
{ value: '003', label: '收样员:小红' }
]"
<BasicTable @register="registerTable">
<template #toolbar>
<a-button type="primary"
@click="handleTaskTurnToDoAdd"
>新增</a-button>
</template>
<template #action="{ record, column }">
<TableAction :actions="createTaskTurnToDoActions(record, column).concat([
{
label: '删除',
icon: 'ant-design:delete-outlined',
color: 'error',
onClick: handleTaskTurnToDoDelete.bind(null, record)
}
])"
/>
</AFormItem>
</AForm>
<BasicTable @register="registerTable"/>
</template>
</BasicTable>
</BasicModal>
</template>
<script lang="ts" setup>
import { reactive } from 'vue';
import { reactive, toRaw } from 'vue';
import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal';
import { BasicTable, useTable, EditRecordRow, BasicColumn, ActionItem, TableAction } from '/@/components/Table';
import { formTaskColumns, formMutualTaskColumns, largeHospitalMapList, smallHospitalMapList, formMutualTaskSettingColumns } from '../amap.data';
import { Form, Select } from 'ant-design-vue';
const AForm = Form;
const AFormItem = Form.Item;
const ASelect = Select;
import { taskPresetChildColumns } from '../amap.data';
import { listUser } from '/@/api/platform/system/controller/user';
import { buildUUID } from '/@/utils/uuid';
import { useMessage } from '/@/hooks/web/useMessage';
import { cloneDeep } from 'lodash-es';
/** 类型规范统一声明定义区域 */
interface WindowState {
currentEditKeyRef: string;
formData: Recordable;
modelRef: Recordable;
taskPresetRow: Recordable;
courierUserId: string;
}
/** 通用变量统一声明区域 */
const mutualState = reactive<WindowState>({
const state = reactive<WindowState>({
currentEditKeyRef: '',
formData: {},
modelRef: {
smallHospitalId: ''
}
taskPresetRow: {},
courierUserId: ''
});
const emit = defineEmits(['success', 'register']);
const { createMessage } = useMessage();
const [registerModal, { setModalProps, closeModal }] = useModalInner(async data => {
state.taskPresetRow = data.row;
state.courierUserId = data.courierUserId;
const props: Partial<ModalProps> = { confirmLoading: false };
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);
});
const [registerTable, { reload, getDataSource }] = useTable({
const [registerTable, { getDataSource, setTableData, setColumns }] = useTable({
title: '转办任务',
columns: formMutualTaskSettingColumns,
columns: taskPresetChildColumns,
pagination: {
pageSize: 3,
pageSize: 6,
showSizeChanger: false
},
striped: false,
@ -76,30 +104,85 @@ @@ -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() {
console.log(getDataSource());
/*try {
//
const formData = await formElRef.value.validate();
console.log(formData);
try {
//
setModalProps({ confirmLoading: true });
// tag
switch (state.tag) {
case 'add':
//await addConfig(formData);
break;
case 'edit':
//await editConfig(formData);
break;
}
state.taskPresetRow.mapTaskPreset = toRaw(getDataSource());
//
closeModal();
emit('success');
} finally {
setModalProps({ confirmLoading: false });
}*/
}
}
</script>

Loading…
Cancel
Save