diff --git a/package.json b/package.json
index 529d078..4d9cbbd 100644
--- a/package.json
+++ b/package.json
@@ -98,6 +98,7 @@
"axios": "^1.6.4",
"codemirror": "^5.65.16",
"color": "^4.2.3",
+ "coordtransform": "^2.1.2",
"cropperjs": "^1.6.1",
"crypto-js": "^4.2.0",
"dayjs": "^1.11.10",
diff --git a/src/assets/images/chart/tables/table_filter.png b/src/assets/images/chart/tables/table_filter.png
new file mode 100644
index 0000000..58e002b
Binary files /dev/null and b/src/assets/images/chart/tables/table_filter.png differ
diff --git a/src/packages/components/Tables/Tables/TableFilter/config.ts b/src/packages/components/Tables/Tables/TableFilter/config.ts
new file mode 100644
index 0000000..134cbe3
--- /dev/null
+++ b/src/packages/components/Tables/Tables/TableFilter/config.ts
@@ -0,0 +1,67 @@
+import cloneDeep from 'lodash/cloneDeep'
+import { PublicConfigClass } from '@/packages/public'
+import { CreateComponentType } from '@/packages/index.d'
+import { chartInitConfig } from '@/settings/designSetting'
+import { TableFilterConfig } from './index'
+import dataJson from './data.json'
+
+const {header, source, filterset} = dataJson;
+
+export const option = {
+ header: header,
+ dataset: source,
+ filterset: filterset,
+ dataStyle: {
+ colLeft: 4,
+
+ filterMarginTop: 20,
+ filterMarginLeft: 50,
+ filterItemHeight: 45,
+
+ filterTitleAlign: 'left',
+ filterTitleFontSize: 24,
+ filterTitleFontColor: '#ADFFC0',
+
+ filterContentAlign: 'left',
+ filterChooseFontSize: 18,
+ filterChooseFontColor: '#FFFFFF',
+
+ tableMarginTop: 20,
+ tableMarginLeft: 20,
+ tableBordered: false,
+ tableSigleColumn: true,
+ tableSingleLine: true,
+ tableStriped: false,
+ tableSize: 'small',
+ tableAlign: 'center',
+ // 表头
+ tableHeaderShow: false,
+ // 序号
+ orderBumberShow: false,
+ // 操作
+ buttonDivShow: true,
+ buttonDivShow1: true,
+ buttonDivShow2: true,
+ buttonWidth: 22,
+ buttonHeight: 22,
+ // 宽度
+ orderDivWidth: 50,
+ buttonDivWidth: 100,
+ // 字体
+ tableHeaderBackgroud: '#FFFFFF',
+ tableHeaderFontSize: 20,
+ tableHeaderFontColor: '#000000',
+
+ tableDataBackgroudShow: false,
+ tableDataBackgroud: '#FFFFFF',
+ tableDataFontSize: 20,
+ tableDataFontColor: '#FFFFFF',
+ },
+}
+
+export default class Config extends PublicConfigClass implements CreateComponentType {
+ public key = TableFilterConfig.key
+ public attr = { ...chartInitConfig, w: 1060, h: 570, zIndex: -1 }
+ public chartConfig = cloneDeep(TableFilterConfig)
+ public option = cloneDeep(option)
+}
diff --git a/src/packages/components/Tables/Tables/TableFilter/config.vue b/src/packages/components/Tables/Tables/TableFilter/config.vue
new file mode 100644
index 0000000..ec15759
--- /dev/null
+++ b/src/packages/components/Tables/Tables/TableFilter/config.vue
@@ -0,0 +1,826 @@
+
+
+
+ 筛选项字段与类型
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ / 24
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 表格数据(请先确定数据部分,再确定表格数据)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 表格数据(前缀和后缀)
+
+
+
+
+
+ 表格数据(数据格式转换)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/packages/components/Tables/Tables/TableFilter/data.json b/src/packages/components/Tables/Tables/TableFilter/data.json
new file mode 100644
index 0000000..1d6f880
--- /dev/null
+++ b/src/packages/components/Tables/Tables/TableFilter/data.json
@@ -0,0 +1,186 @@
+{
+ "header": [
+ {
+ "title": "名称",
+ "key": "name",
+ "align": "center",
+ "width": "250",
+ "prefix": null,
+ "suffix": null,
+ "convert": null
+ },
+ {
+ "title": "面积",
+ "key": "area",
+ "align": "center",
+ "width": "200",
+ "prefix": null,
+ "suffix": "m²",
+ "convert": null
+ },
+ {
+ "title": "时间",
+ "key": "time",
+ "align": "center",
+ "width": "200",
+ "prefix": null,
+ "suffix": "小时",
+ "convert": "0"
+ },
+ {
+ "title": "路程",
+ "key": "distance",
+ "align": "center",
+ "width": "200",
+ "prefix": "路程",
+ "suffix": "km",
+ "convert": null
+ },
+ {
+ "title": "预计时间",
+ "key": "estimatedTime",
+ "align": "center",
+ "width": "300",
+ "prefix": "预计",
+ "suffix": null,
+ "convert": "1"
+ }
+ ],
+ "filterset": [
+ {
+ "title": "地图显示",
+ "field": "type",
+ "compareType": "contain",
+ "showType": "checkbox",
+ "value": [ "水源", "物资", "营房", "防火通道", "三轮通道", "步行道" ],
+ "options": [
+ { "label": "水源", "value": "水源" },
+ { "label": "物资", "value": "物资" },
+ { "label": "营房", "value": "营房" },
+ { "label": "防火通道", "value": "防火通道" },
+ { "label": "三轮通道", "value": "三轮通道" },
+ { "label": "步行道", "value": "步行道" }
+ ]
+ },
+ {
+ "title": "资源列表",
+ "field": "type",
+ "compareType": "equal",
+ "showType": "buttonGroup",
+ "value": null,
+ "options": [
+ { "label": "水源", "value": "水源" },
+ { "label": "物资", "value": "物资" },
+ { "label": "营房", "value": "营房" }
+ ]
+ },
+ {
+ "title": "重点资源",
+ "field": null,
+ "compareType": null,
+ "showType": null,
+ "value": null,
+ "options": [
+ { "label": null, "value": null }
+ ]
+ },
+ {
+ "title": "距离",
+ "field": "distance",
+ "compareType": "lessAndEqual",
+ "showType": "radio",
+ "value": null,
+ "options": [
+ { "label": "1km以内", "value": "1" },
+ { "label": "5km以内", "value": "5" },
+ { "label": "10km以内", "value": "10" },
+ { "label": "20km以内", "value": "20" },
+ { "label": "全部", "value": null }
+ ]
+ }
+ ],
+ "source": [
+ {
+ "name": "坑塘",
+ "type": "水源",
+ "area": null,
+ "time": null,
+ "distance": "21.14",
+ "estimatedTime": "00:05:45",
+ "date": "2025-03-01 00:05:45"
+ },
+ {
+ "name": "东蒙布袋口检查",
+ "type": "物资",
+ "area": "300",
+ "time": "12.50",
+ "distance": "14.14",
+ "estimatedTime": "00:05:45",
+ "date": "2025-03-11 00:05:45"
+ },
+ {
+ "name": "北刘家庄蓄水池",
+ "type": "营房",
+ "area": "300",
+ "time": "12.50",
+ "distance": "0.14",
+ "estimatedTime": "00:05:45",
+ "date": "2025/03/01 00:05:45"
+
+ },
+ {
+ "name": "防火通道",
+ "type": "防火通道",
+ "area": null,
+ "time": null,
+ "distance": "2.14",
+ "estimatedTime": "00:05:45",
+ "date": "2025-12-01 00:05:45"
+ },
+ {
+ "name": "步行道",
+ "type": "步行道",
+ "area": "300",
+ "time": "5.50",
+ "distance": "1.14",
+ "estimatedTime": "00:05:45",
+ "date": "2025-08-01 00:05:45"
+ },
+ {
+ "name": "三轮通道",
+ "type": "三轮通道",
+ "area": "300",
+ "time": "9.50",
+ "distance": "5.14",
+ "estimatedTime": "00:05:45",
+ "date": "2025-10-21 00:05:45"
+ },
+ {
+ "name": "坑塘",
+ "type": "水源",
+ "area": null,
+ "time": null,
+ "distance": "10.14",
+ "estimatedTime": "00:05:45",
+ "date": "2025-06-01 00:05:45"
+ },
+ {
+ "name": "东蒙布袋口检查",
+ "type": "物资",
+ "area": "300",
+ "time": "12.50",
+ "distance": "10.14",
+ "estimatedTime": "00:05:45",
+ "date": "2025-06-12 00:05:45"
+ },
+ {
+ "name": "北刘家庄蓄水池",
+ "type": "营房",
+ "area": "300",
+ "time": "12.50",
+ "distance": "19.14",
+ "estimatedTime": "00:05:45",
+ "date": "2025-05-01 00:05:45"
+ }
+ ]
+}
diff --git a/src/packages/components/Tables/Tables/TableFilter/index.ts b/src/packages/components/Tables/Tables/TableFilter/index.ts
new file mode 100644
index 0000000..bf918a1
--- /dev/null
+++ b/src/packages/components/Tables/Tables/TableFilter/index.ts
@@ -0,0 +1,14 @@
+import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
+import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
+
+export const TableFilterConfig: ConfigType = {
+ key: 'TableFilter',
+ chartKey: 'VTableFilter',
+ conKey: 'VCTableFilter',
+ title: '自定义筛选表格',
+ category: ChatCategoryEnum.TABLE,
+ categoryName: ChatCategoryEnumName.TABLE,
+ package: PackagesCategoryEnum.TABLES,
+ chartFrame: ChartFrameEnum.COMMON,
+ image: 'table_filter.png'
+}
diff --git a/src/packages/components/Tables/Tables/TableFilter/index.vue b/src/packages/components/Tables/Tables/TableFilter/index.vue
new file mode 100644
index 0000000..3c4b78e
--- /dev/null
+++ b/src/packages/components/Tables/Tables/TableFilter/index.vue
@@ -0,0 +1,823 @@
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+ {{ checkboxItem.label }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ radioItem.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ buttonItem.label }}
+
+
+
+
+
+
+
+ {{ buttonItem.label }}
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ |
+
+ {{ item.title }}
+ |
+
+ 操作
+ |
+
+
+
+
+
+
+
+
+
+
+ |
+ {{ dataIndex + 1 }}
+ |
+
+
+
+ {{ dataItem[headerItem.key] ? convertData(headerItem, dataItem) : '--' }}
+
+ |
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
diff --git a/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/svg/button1.vue b/src/packages/components/Tables/Tables/TableFilter/svg/button1.vue
similarity index 99%
rename from src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/svg/button1.vue
rename to src/packages/components/Tables/Tables/TableFilter/svg/button1.vue
index 1b54b1a..3578a91 100644
--- a/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/svg/button1.vue
+++ b/src/packages/components/Tables/Tables/TableFilter/svg/button1.vue
@@ -8,7 +8,6 @@
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
>
-
编组 16
+
+
+
+
+
+
diff --git a/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/config.ts b/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/config.ts
index 764b155..b0007ab 100644
--- a/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/config.ts
+++ b/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/config.ts
@@ -5,57 +5,99 @@ import { chartInitConfig } from '@/settings/designSetting'
import { ZhiChu_ModalTableConfig } from './index'
import dataJson from './data.json'
-const {header, source, filterset} = dataJson;
+const {header, source} = dataJson;
export const option = {
header: header,
dataset: source,
- filterset: filterset,
dataStyle: {
colLeft: 4,
+ mapListValue: ['water', 'goods', 'barrack'],
+ buttonValue: '0',
+ distanceradio: '1',
+ // 筛选项
filterMarginTop: 20,
filterMarginLeft: 50,
filterItemHeight: 45,
-
filterTitleAlign: 'left',
filterTitleFontSize: 24,
filterTitleFontColor: '#ADFFC0',
-
filterContentAlign: 'left',
filterChooseFontSize: 18,
filterChooseFontColor: '#FFFFFF',
+ // 水源-表格
tableMarginTop: 20,
tableMarginLeft: 20,
tableBordered: false,
tableSigleColumn: true,
tableSingleLine: true,
- tableStriped: false,
tableSize: 'small',
tableAlign: 'center',
// 表头
tableHeaderShow: false,
// 序号
- orderBumberShow: false,
+ tableOrderBumberShow: false,
// 操作
- buttonDivShow: true,
- buttonDivShow1: true,
- buttonDivShow2: true,
- buttonWidth: 22,
- buttonHeight: 22,
+ tableButtonDivShow: true,
+ tableButtonWidth: 22,
+ tableButtonHeight: 22,
// 宽度
- orderDivWidth: 50,
- buttonDivWidth: 100,
+ tableOrderDivWidth: 50,
+ tableButtonDivWidth: 100,
// 字体
tableHeaderBackgroud: '#FFFFFF',
tableHeaderFontSize: 20,
tableHeaderFontColor: '#000000',
-
- tableDataBackgroudShow: false,
- tableDataBackgroud: '#FFFFFF',
tableDataFontSize: 20,
tableDataFontColor: '#FFFFFF',
+
+ // 物资-队列
+ goodsMarginTop: 20,
+ goodsMarginLeft: 20,
+ goodsDivMarginTop: 20,
+ goodsDivMarginLeft: 20,
+ // 标题
+ goodsTitleFontSize1: 18,
+ goodsTitleFontColor1: '#FFFFFF',
+ goodsTitleFontSize2: 14,
+ goodsTitleFontColor2: '#FFFFFF',
+ goodsTitleFontSize3: 16,
+ goodsTitleFontColor3: '#FFFFFF',
+ // 按钮
+ goodsButtonBackgroud: '#409EFF',
+ goodsButtonFontSize: 16,
+ goodsButtonFontColor: '#FFFFFF',
+ // 线
+ goodsLineStartColor: '#4DFFB5',
+ goodsLineEndColor: '#0B4D2C',
+ // text
+ goodsTextFontSize: 16,
+ goodsTextFontColor: '#FFFFFF',
+
+ // 营房-队列
+ barrackMarginTop: 20,
+ barrackMarginLeft: 20,
+ barrackDivMarginTop: 20,
+ barrackDivMarginLeft: 20,
+ // 标题
+ barrackTitleFontSize1: 18,
+ barrackTitleFontColor1: '#FFFFFF',
+ barrackTitleFontSize2: 14,
+ barrackTitleFontColor2: '#FFFFFF',
+ barrackTitleFontSize3: 16,
+ barrackTitleFontColor3: '#FFFFFF',
+ // 按钮
+ barrackButtonBackgroud: '#409EFF',
+ barrackButtonFontSize: 16,
+ barrackButtonFontColor: '#FFFFFF',
+ // 线
+ barrackLineStartColor: '#4DFFB5',
+ barrackLineEndColor: '#0B4D2C',
+ // text
+ barrackTextFontSize: 16,
+ barrackTextFontColor: '#FFFFFF',
},
}
diff --git a/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/config.vue b/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/config.vue
index ec15759..0b89e58 100644
--- a/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/config.vue
+++ b/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/config.vue
@@ -1,261 +1,5 @@
-
-
- 筛选项字段与类型
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ / 24
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
- / 24
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 水源
+ 物资
+ 营房
+
+
+
+
+ 1km以内
+ 5km以内
+ 10km以内
+ 20km以内
+ 全部
+
+
+
-
-
- 表格数据(请先确定数据部分,再确定表格数据)
-
+
+
+ 表格数据(请先确定数据部分,再确定表格数据)
+
-
-
-
-
-
-
- |
- {{ dataIndex + 1 }}
- |
-
-
-
- {{ dataItem[headerItem.key] ? convertData(headerItem, dataItem) : '--' }}
-
- |
-
-
-
-
-
-
-
- |
-
-
-
-
-
- |
-
-
-
+
+
+
+
@@ -335,10 +161,22 @@
import { icon } from '@/plugins';
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore';
import { useChartDataFetch } from '@/hooks';
+ import {
+ getRouterFunc,
+ handlerStartRoaming,
+ handlerStopRoaming,
+ drawRouterFunc,
+ clearRouterFunc,
+ } from './ts/routePath';
import dayjs from 'dayjs';
import { cloneDeep } from 'lodash-es';
- import Button1 from './svg/button1.vue';
- import Button2 from './svg/button2.vue';
+ import * as mars3d from 'mars3d';
+ import Water from './source/water.vue';
+ import Goods from './source/goods.vue';
+ import Barrack from './source/barrack.vue';
+
+ import dataJson from './data.json';
+ const { source } = dataJson;
const props = defineProps({
chartConfig: {
@@ -352,334 +190,253 @@
const option = reactive({
header: props.chartConfig.option.header,
dataset: props.chartConfig.option.dataset,
- filterset: props.chartConfig.option.filterset,
dataStyle: props.chartConfig.option.dataStyle,
+ status: props.chartConfig.status,
});
+ // 搜索
+ const searchValue = ref();
// 表头高度
- const headHeight: any = computed(() => {
- if (option.dataStyle.tableHeaderShow) {
- return document.querySelector('.theadDiv')?.offsetHeight + 10;
- } else {
- return 0;
- }
+ const filterDivHeight: any = computed(() => {
+ return option.dataStyle.buttonValue == '1'
+ ? option.dataStyle.filterItemHeight * 5
+ : option.dataStyle.filterItemHeight * 4;
});
- // 数据表实际宽度
- const headWidths = computed(() => {
- let widths: any = [];
- if (option.dataStyle.tableHeaderShow) {
- setTimeout(() => {
- if (option.dataStyle.orderBumberShow) {
- widths.push(document.getElementById('dataTd_order')?.offsetWidth);
- }
- option.header.forEach((item, index) => {
- let td = document.getElementById('dataTd_' + index);
- widths.push(td?.offsetWidth);
- });
- if (option.dataStyle.buttonDivShow) {
- widths.push(document.getElementById('dataTd_button')?.offsetWidth);
- }
- console.log(widths);
- }, 500);
- }
- return widths;
- });
+ let waterGraphicLayerArr: any = [];
+ let waterGraphicLayers = new mars3d.layer.GraphicLayer();
+ let goodsGraphicLayerArr: any = [];
+ let goodsGraphicLayers = new mars3d.layer.GraphicLayer();
+ let barrackGraphicLayerArr: any = [];
+ let barrackGraphicLayers = new mars3d.layer.GraphicLayer();
- // 搜索框
- const searchFlag = ref(false);
- const searchAllFlag = ref(false);
-
- function search() {
- searchFlag.value = true;
- }
- function searchAll() {
- searchAllFlag.value = true;
- }
-
- // 数据过滤
- const filterData = computed(() => {
- let data = cloneDeep(option.dataset);
- option.filterset.forEach((filtersetItem) => {
- // console.log(filtersetItem);
- if (
- (filtersetItem.field && filtersetItem.value) ||
- (!filtersetItem.field && filtersetItem.showType == 'inputSearchAll')
- ) {
- switch (filtersetItem.compareType) {
- // 大于
- case 'greater':
- if (['timePicker'].includes(filtersetItem.showType)) {
- data = data.filter(
- (d) =>
- dayjs(d[filtersetItem.field], 'HH:mm:ss').diff(
- dayjs(filtersetItem.value, 'HH:mm:ss'),
- ) > 0,
- );
- } else {
- data = data.filter(
- (d) => Number(d[filtersetItem.field]) > Number(filtersetItem.value),
- );
- }
- break;
- // 小于
- case 'less':
- if (['timePicker'].includes(filtersetItem.showType)) {
- data = data.filter(
- (d) =>
- dayjs(d[filtersetItem.field], 'HH:mm:ss').diff(
- dayjs(filtersetItem.value, 'HH:mm:ss'),
- ) < 0,
- );
- } else {
- data = data.filter(
- (d) => Number(d[filtersetItem.field]) < Number(filtersetItem.value),
- );
- }
- break;
- // 大于等于
- case 'greaterAndEqual':
- if (['timePicker'].includes(filtersetItem.showType)) {
- data = data.filter(
- (d) =>
- dayjs(d[filtersetItem.field], 'HH:mm:ss').diff(
- dayjs(filtersetItem.value, 'HH:mm:ss'),
- ) >= 0,
- );
- } else {
- data = data.filter(
- (d) => Number(d[filtersetItem.field]) >= Number(filtersetItem.value),
- );
- }
- break;
- // 小于等于
- case 'lessAndEqual':
- if (['timePicker'].includes(filtersetItem.showType)) {
- data = data.filter(
- (d) =>
- dayjs(d[filtersetItem.field], 'HH:mm:ss').diff(
- dayjs(filtersetItem.value, 'HH:mm:ss'),
- ) <= 0,
- );
- } else {
- data = data.filter(
- (d) => Number(d[filtersetItem.field]) <= Number(filtersetItem.value),
- );
- }
- break;
- // 等于
- case 'equal':
- if (['checkbox'].includes(filtersetItem.showType)) {
- // 多选框不选中时,不展示
- data = data.filter((d) =>
- filtersetItem.value.some((li) => d[filtersetItem.field].includes(li)),
- );
- } else if (['selectGroup', 'buttonGroupList'].includes(filtersetItem.showType)) {
- // 下拉框(多选)、按钮组(多选)不选中时,全展示
- if (filtersetItem.value.length > 0) {
- data = data.filter((d) =>
- filtersetItem.value.some((li) => d[filtersetItem.field].includes(li)),
- );
- }
- } else {
- // 其他统一
- data = data.filter((d) => d[filtersetItem.field] == filtersetItem.value);
- }
- break;
- // 不等于
- case 'notequal':
- if (['checkbox'].includes(filtersetItem.showType)) {
- // 多选框不选中时,不展示
- data = data.filter((d) =>
- filtersetItem.value.some((li) => !d[filtersetItem.field].includes(li)),
- );
- } else if (['selectGroup', 'buttonGroupList'].includes(filtersetItem.showType)) {
- // 下拉框(多选)、按钮组(多选)不选中时,全展示
- if (filtersetItem.value.length > 0) {
- data = data.filter((d) =>
- filtersetItem.value.some((li) => !d[filtersetItem.field].includes(li)),
- );
- }
- } else {
- // 其他统一
- data = data.filter((d) => d[filtersetItem.field] !== filtersetItem.value);
- }
- break;
- // 含有
- case 'contain':
- if (['checkbox'].includes(filtersetItem.showType)) {
- // 多选框不选中时,不展示
- data = data.filter((d) =>
- filtersetItem.value.some((li) => d[filtersetItem.field].includes(li)),
- );
- } else if (['selectGroup', 'buttonGroupList'].includes(filtersetItem.showType)) {
- // 下拉框(多选)、按钮组(多选)不选中时,全展示
- if (filtersetItem.value.length > 0) {
- data = data.filter((d) =>
- filtersetItem.value.some((li) => d[filtersetItem.field].includes(li)),
- );
- }
- } else if (['inputSearch'].includes(filtersetItem.showType)) {
- // 搜索框单独处理
- if (searchFlag.value) {
- data = data.filter(
- (d) => d[filtersetItem.field].indexOf(filtersetItem.value) !== -1,
- );
- searchFlag.value = false;
- }
- } else if (['inputSearchAll'].includes(filtersetItem.showType)) {
- // 全数据搜索框单独处理
- if (searchAllFlag.value) {
- data = data.filter((d) => {
- let flag = false;
- option.header.some((headerLi) => {
- if (d[headerLi.key]) {
- flag = flag ? true : d[headerLi.key].includes(filtersetItem.value);
- }
- });
- return flag;
- });
- searchAllFlag.value = false;
- }
- } else {
- // 其他统一
- data = data.filter((d) => d[filtersetItem.field].indexOf(filtersetItem.value) !== -1);
- }
- break;
- // 不含有
- case 'notcontain':
- if (['checkbox'].includes(filtersetItem.showType)) {
- // 多选框不选中时,不展示
- data = data.filter((d) =>
- filtersetItem.value.some((li) => !d[filtersetItem.field].includes(li)),
- );
- } else if (['selectGroup', 'buttonGroupList'].includes(filtersetItem.showType)) {
- // 下拉框(多选)、按钮组(多选)不选中时,全展示
- if (filtersetItem.value.length > 0) {
- data = data.filter((d) =>
- filtersetItem.value.some((li) => !d[filtersetItem.field].includes(li)),
- );
- }
- } else {
- // 其他统一
- data = data.filter((d) => d[filtersetItem.field].indexOf(filtersetItem.value) == -1);
- }
- break;
- // 两者之间
- case 'between':
- if (['timeRange'].includes(filtersetItem.showType)) {
- data = data.filter((d) => {
- const time = dayjs(d[filtersetItem.field], 'HH:mm:ss');
- const startTime = dayjs(filtersetItem.value, 'HH:mm:ss');
- const endTime = dayjs(filtersetItem.value2, 'HH:mm:ss');
- return time.diff(startTime) >= 0 && time.diff(endTime) <= 0;
- });
- }
- if (['dateRange'].includes(filtersetItem.showType)) {
- data = data.filter((d) => {
- const time = dayjs(d[filtersetItem.field], 'YYYY-MM-DD HH:mm:ss');
- const startTime = dayjs(filtersetItem.value[0], 'YYYY-MM-DD HH:mm:ss');
- const endTime = dayjs(filtersetItem.value[1], 'YYYY-MM-DD HH:mm:ss');
- return time.diff(startTime) >= 0 && time.diff(endTime) <= 0;
- });
- }
- break;
+ // 多选框-地图显示
+ watch(
+ () => option.dataStyle.mapListValue,
+ (newValue) => {
+ // 水源
+ if (newValue.includes('water')) {
+ mapListShow_water();
+ } else {
+ if (waterGraphicLayerArr.length > 0) {
+ waterGraphicLayerArr?.forEach((graphicLayer) => {
+ waterGraphicLayers.removeGraphic(graphicLayer);
+ });
}
}
+ // 物资
+ if (newValue.includes('goods')) {
+ mapListShow_goods();
+ } else {
+ if (goodsGraphicLayerArr.length > 0) {
+ goodsGraphicLayerArr?.forEach((graphicLayer) => {
+ goodsGraphicLayers.removeGraphic(graphicLayer);
+ });
+ }
+ }
+ // 营房
+ if (newValue.includes('barrack')) {
+ mapListShow_barrack();
+ } else {
+ if (barrackGraphicLayerArr.length > 0) {
+ barrackGraphicLayerArr?.forEach((graphicLayer) => {
+ barrackGraphicLayers.removeGraphic(graphicLayer);
+ });
+ }
+ }
+ // // 防火通道
+ // if (newValue.includes('fanghuotongdao')) {
+ // }
+ // // 三轮通道
+ // if (newValue.includes('sanluntongdao')) {
+ // }
+ // // 步行道
+ // if (newValue.includes('buxingdao')) {
+ // }
+ },
+ {
+ immediate: true,
+ deep: true,
+ },
+ );
+ watch(
+ () => option.status.hide,
+ () => {
+ if (option.status.hide) {
+ // 表格隐藏,则删除地图的数据
+ hideMapGraphicLayer();
+ } else {
+ // 表格展示,则显示地图的数据
+ if (waterGraphicLayerArr.length > 0) {
+ mapListShow_water();
+ }
+ if (goodsGraphicLayerArr.length > 0) {
+ mapListShow_goods();
+ }
+ if (barrackGraphicLayerArr.length > 0) {
+ mapListShow_barrack();
+ }
+ }
+ },
+ );
+
+ // 水源
+ function mapListShow_water() {
+ setTimeout(() => {
+ let data: any = source.filter((item) => parseInt(item.type) == 0);
+ // 删除旧数据
+ waterGraphicLayerArr?.forEach((graphicLayer) => {
+ waterGraphicLayers.removeGraphic(graphicLayer);
+ });
+ // 图层
+ window.globalMap.addLayer(waterGraphicLayers);
+ // 图层数据
+ waterGraphicLayerArr = [];
+ data.forEach((dataItem, dataIndex) => {
+ let waterGraphic = new mars3d.graphic.BillboardEntity({
+ id: 'ZhiChu_ModalTable' + '_water_' + dataIndex + '_' + dataItem.id,
+ position: [parseFloat(dataItem.lng), parseFloat(dataItem.lat)],
+ style: {
+ image: '/src/assets/images/chart/zhichu/component/TuLi_ShuiYuan.png',
+ clampToGround: true,
+ scale: 1,
+ },
+ });
+
+ // 绑定点击事件
+ waterGraphic.on('click', (event) => {
+ const graphic = event.graphic; // 获取被点击的图形对象
+ const attributes = graphic.options; // 获取图形的属性
+ // console.log(attributes);
+
+ // 动态生成弹窗内容
+ const popupContent = `
+
+ `;
+ // // 显示弹窗
+ // window.globalMap.openPopup({
+ // content: popupContent,
+ // location: [118.02841, 35.417686], // 弹窗位置
+ // });
+ });
+
+ // 将新图形添加到图层中
+ waterGraphicLayers.addGraphic(waterGraphic);
+ waterGraphicLayerArr.push(waterGraphic);
+ });
+ }, 1000);
+ }
+ // 物资
+ function mapListShow_goods() {
+ setTimeout(() => {
+ let data: any = source.filter((item) => parseInt(item.type) == 1);
+ // 删除旧数据
+ goodsGraphicLayerArr?.forEach((graphicLayer) => {
+ goodsGraphicLayers.removeGraphic(graphicLayer);
+ });
+ // 图层
+ window.globalMap.addLayer(goodsGraphicLayers);
+ // 图层数据
+ goodsGraphicLayerArr = [];
+ data.forEach((dataItem, dataIndex) => {
+ let goodsGraphic = new mars3d.graphic.BillboardEntity({
+ id: 'ZhiChu_ModalTable' + '_goods_' + dataIndex + '_' + data.id,
+ position: [parseFloat(dataItem.lng), parseFloat(dataItem.lat)],
+ style: {
+ image: '/src/assets/images/chart/zhichu/component/TuLi_WuZi.png',
+ clampToGround: true,
+ scale: 1,
+ },
+ });
+ goodsGraphicLayerArr.push(goodsGraphic);
+ goodsGraphicLayers.addGraphic(goodsGraphic);
+ });
+ }, 1000);
+ }
+ // 营房
+ function mapListShow_barrack() {
+ setTimeout(() => {
+ let data: any = source.filter((item) => parseInt(item.type) == 2);
+ // 删除旧数据
+ barrackGraphicLayerArr?.forEach((graphicLayer) => {
+ barrackGraphicLayers.removeGraphic(graphicLayer);
+ });
+ // 图层
+ window.globalMap.addLayer(barrackGraphicLayers);
+ // 图层数据
+ barrackGraphicLayerArr = [];
+ data.forEach((dataItem, dataIndex) => {
+ let barrackGraphic = new mars3d.graphic.BillboardEntity({
+ id: 'ZhiChu_ModalTable' + '_barrack_' + dataIndex + '_' + data.id,
+ position: [parseFloat(dataItem.lng), parseFloat(dataItem.lat)],
+ style: {
+ image: '/src/assets/images/chart/zhichu/component/TuLi_YingFang.png',
+ clampToGround: true,
+ scale: 1,
+ },
+ });
+ barrackGraphicLayerArr.push(barrackGraphic);
+ barrackGraphicLayers.addGraphic(barrackGraphic);
+ });
+ }, 1000);
+ }
+
+ // 删除地图的数据
+ function hideMapGraphicLayer() {
+ if (waterGraphicLayerArr.length > 0) {
+ waterGraphicLayerArr?.forEach((graphicLayer) => {
+ waterGraphicLayers.removeGraphic(graphicLayer);
+ });
+ }
+ if (goodsGraphicLayerArr.length > 0) {
+ goodsGraphicLayerArr?.forEach((graphicLayer) => {
+ goodsGraphicLayers.removeGraphic(graphicLayer);
+ });
+ }
+ if (barrackGraphicLayerArr.length > 0) {
+ barrackGraphicLayerArr?.forEach((graphicLayer) => {
+ barrackGraphicLayers.removeGraphic(graphicLayer);
+ });
+ }
+ }
+
+ // 移动位置
+ let startCoor: any;
+ function moveLocation(lngLat) {
+ // window.globalMap.flyToGraphic(lngLat);
+ startCoor = lngLat;
+ window.globalMap.flyToPoint(lngLat, {
+ alt: 4269.7,
+ heading: 359.2,
+ pitch: -51.9,
});
- return data;
- });
-
- // 筛选-按钮点击事件
- function clickFilterButton(item, buttonItem) {
- if (item.value == buttonItem.value) {
- item.value = '';
- } else {
- item.value = buttonItem.value;
- }
}
- // 筛选-按钮点击事件(多选)
- function clickFilterButtonList(item, buttonItem) {
- if (!item.value) {
- item.value = [];
- }
- if (item.value.includes(buttonItem.value)) {
- item.value.splice(item.value.indexOf(buttonItem.value), 1);
- } else {
- item.value.push(buttonItem.value);
- }
+ // 漫游
+ async function roamLocation(startCoor) {
+ let endCoor = [118.031528, 35.431473];
+ let params: any = {
+ startlng: parseFloat(startCoor[0]),
+ startlat: parseFloat(startCoor[1]),
+ endlng: parseFloat(endCoor[0]),
+ endlat: parseFloat(endCoor[1]),
+ areaname: 'feixian',
+ };
+ getRouterFunc(params)
+ .then((res) => {
+ handlerStopRoaming();
+ drawRouterFunc(res);
+ handlerStartRoaming(res.allCoordinates, false);
+ })
+ .catch((err) => {
+ clearRouterFunc();
+ });
}
- // 数据转换
- function convertData(header, data) {
- let prefix = header.prefix ? header.prefix : '';
- let suffix = header.suffix ? header.suffix : '';
- let convertData = data[header.key];
-
- // 小数点保留后两位
- if (convertData && header.convert == '0' && isValidNumber(convertData)) {
- convertData =
- typeof convertData === 'string'
- ? String(parseFloat(convertData).toFixed(2))
- : String(convertData.toFixed(2));
- }
- // 转换时间格式(例:0小时0分钟0秒)
- if (convertData && header.convert == '1' && isValidTime(convertData)) {
- convertData =
- dayjs(convertData, 'HH:mm:ss').hour() +
- '小时' +
- dayjs(convertData, 'HH:mm:ss').minute() +
- '分钟' +
- dayjs(convertData, 'HH:mm:ss').second() +
- '秒';
- }
- // 转换日期格式(例:YYYY-MM-DD HH:mm:ss)
- let format = 'YYYY-MM-DD HH:mm:ss';
- if (header.convert == '2') {
- format = 'YYYY-MM-DD';
- }
- if (header.convert == '3') {
- format = 'YYYY/MM/DD';
- }
- if (
- convertData &&
- ['2', '3', '4'].includes(header.convert) &&
- isValidDate(convertData, format)
- ) {
- convertData = dayjs(convertData).format(format);
- }
- return prefix + convertData + suffix;
- }
-
- // 检查字符串可否转成数字
- function isValidNumber(str) {
- const regex = /^-?\d+(\.\d+)?$/;
- return regex.test(String(str).trim());
- }
- // 检查字符串可否转成时间
- function isValidTime(str) {
- const parsedDate = dayjs(str, 'HH:mm:ss');
- if (parsedDate.isValid()) {
- return true;
- } else {
- return false;
- }
- }
- // 检查字符串可否转成日期
- function isValidDate(str, format) {
- const parsedDate = dayjs(str, format);
- if (parsedDate.isValid()) {
- return true;
- } else {
- return false;
- }
- }
-
- // 表格按钮方法
- function pitchLocation(dataItem, dataIndex) {}
-
- function moveLocation(dataItem, dataIndex) {}
-
// setdata 数据监听与更改
useChartDataFetch(props.chartConfig, useChartEditStore, (newData: any) => {
props.chartConfig.option.dataset = newData;
@@ -740,7 +497,7 @@
height: v-bind('`${option.dataStyle.filterChooseFontSize}px`') !important;
}
- .filterContentFont_nochoose {
+ .nochoose {
background: #1c211f;
color: #18d09d;
border: 1px solid #18d09d;
@@ -750,8 +507,9 @@
border-radius: v-bind('`${option.dataStyle.filterChooseFontSize + 12}px`');
text-align: center;
line-height: v-bind('`${option.dataStyle.filterChooseFontSize + 12}px`');
+ margin-right: v-bind('`${option.dataStyle.filterTitleFontSize}px`');
}
- .filterContentFont_choose {
+ .choose {
background: #26d1ad;
color: #0d2822;
font-size: v-bind('`${option.dataStyle.filterChooseFontSize}px`');
@@ -760,64 +518,19 @@
border-radius: v-bind('`${option.dataStyle.filterChooseFontSize + 12}px`');
text-align: center;
line-height: v-bind('`${option.dataStyle.filterChooseFontSize + 12}px`');
+ margin-right: v-bind('`${option.dataStyle.filterTitleFontSize}px`');
}
- // 表头
- .theadDiv {
- margin-top: v-bind('`${option.dataStyle.tableMarginTop}px`');
- padding-left: v-bind('`${option.dataStyle.tableMarginLeft}px`');
- padding-right: v-bind('`${option.dataStyle.tableMarginLeft}px`');
+ .popup {
+ background: white;
+ padding: 10px;
+ border-radius: 5px;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
}
- // 表格部分
- .tbodyDiv {
- overflow-y: auto;
+
+ .dataDiv {
height: v-bind(
- '`${h - headHeight - option.dataStyle.filterMarginTop - option.dataStyle.filterItemHeight * option.filterset.length - option.dataStyle.tableMarginTop}px`'
+ '`${h - option.dataStyle.filterMarginTop - filterDivHeight - option.dataStyle.tableMarginTop}px`'
);
- padding-left: v-bind('`${option.dataStyle.tableMarginLeft}px`');
- padding-right: v-bind('`${option.dataStyle.tableMarginLeft}px`');
- }
- .tbodyDiv::-webkit-scrollbar {
- display: none;
- }
- .tbodyDiv {
- scrollbar-width: none;
- -ms-overflow-style: none;
- }
-
- .th {
- background: v-bind('`${option.dataStyle.tableHeaderBackgroud}`');
- text-align: v-bind('`${option.dataStyle.tableAlign}`');
- color: v-bind('`${option.dataStyle.tableHeaderFontColor}`');
- font-size: v-bind('`${option.dataStyle.tableHeaderFontSize}px`');
- }
- td {
- text-align: v-bind('`${option.dataStyle.tableAlign}`');
- background: #ffffff00;
- color: v-bind('`${option.dataStyle.tableDataFontColor}`');
- font-size: v-bind('`${option.dataStyle.tableDataFontSize}px`');
- border-bottom: 0px;
- }
- .td_background {
- background: v-bind('`${option.dataStyle.tableDataBackgroud}`');
- }
- .td_image1 {
- background-image: url('@/assets/images/chart/zhichu/component/ModalTable_td1.png');
- background-size: 100% 100%;
- }
- .td_image2 {
- background-image: url('@/assets/images/chart/zhichu/component/ModalTable_td2.png');
- background-size: 100% 100%;
- }
-
- .buttonDiv {
- display: flex;
- align-items: v-bind('`${option.dataStyle.tableAlign}`');
- justify-content: center;
- width: v-bind('`${option.dataStyle.buttonDivWidth}px`');
- }
-
- .buttonDivspan {
- color: #00611a;
}
diff --git a/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/source/barrack.vue b/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/source/barrack.vue
new file mode 100644
index 0000000..c9b5af7
--- /dev/null
+++ b/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/source/barrack.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+ {{ dataItem.name }}
+ {{ dataItem.distance }}km
+ 预计到达时间:{{ dataItem.estimatedTime }}
+
+
+
+ 定位
+
+
+ 漫游
+
+
+
+
+
装备情况: {{ dataItem.situation }}
+
+
队伍驻地: {{ dataItem.teamLocation }}
+
+
+
+
+
+
+
diff --git a/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/source/button1.vue b/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/source/button1.vue
new file mode 100644
index 0000000..cf3707e
--- /dev/null
+++ b/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/source/button1.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
diff --git a/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/svg/button2.vue b/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/source/button2.vue
similarity index 97%
rename from src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/svg/button2.vue
rename to src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/source/button2.vue
index ccb6647..041b56a 100644
--- a/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/svg/button2.vue
+++ b/src/packages/components/Zhichu/Zhichu/ZhiChu_ModalTable/source/button2.vue
@@ -1,8 +1,8 @@