添加地图模块管理 图层 图例 图例数据
This commit is contained in:
parent
363c353bdf
commit
c31d89f364
34
frontend/src/api/system/map/LayerManagement/index.ts
Normal file
34
frontend/src/api/system/map/LayerManagement/index.ts
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
|
||||||
|
// 获取所有地图 图例树
|
||||||
|
export function getAllMapLayerTree(data: any) {
|
||||||
|
return request({
|
||||||
|
url: '/api/wmp-sys-server/mapLayer/getAllMapLayerTree',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 保存地图 图例
|
||||||
|
export function saveMapLayer(data: any) {
|
||||||
|
return request({
|
||||||
|
url: '/api/wmp-sys-server/mapLayer/save',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 删除地图 图例
|
||||||
|
export function deleteMapLayer(data: any) {
|
||||||
|
return request({
|
||||||
|
url: '/api/wmp-sys-server/mapLayer/delete',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 获取所有地图 图例树
|
||||||
|
export function getAllMapLegendParentIdTree(data: any) {
|
||||||
|
return request({
|
||||||
|
url: '/api/wmp-sys-server/mapLegend/getAllMapLegendTree',
|
||||||
|
method: 'get',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
}
|
||||||
26
frontend/src/api/system/map/LegendStructure/index.ts
Normal file
26
frontend/src/api/system/map/LegendStructure/index.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import request from '@/utils/request';
|
||||||
|
|
||||||
|
// 获取所有地图 图层
|
||||||
|
export function getAllMapLegendTree(data: any) {
|
||||||
|
return request({
|
||||||
|
url: '/api/wmp-sys-server/mapLegend/GetKendoList',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 保存地图 图层
|
||||||
|
export function saveMapLegend(data: any) {
|
||||||
|
return request({
|
||||||
|
url: '/api/wmp-sys-server/mapLegend/save',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 删除地图 图层
|
||||||
|
export function deleteMapLegend(data: any) {
|
||||||
|
return request({
|
||||||
|
url: '/api/wmp-sys-server/mapLegend/delete',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
}
|
||||||
@ -43,7 +43,7 @@
|
|||||||
:allow-clear="item.fieldProps?.allowClear"
|
:allow-clear="item.fieldProps?.allowClear"
|
||||||
:presets="item.presets"
|
:presets="item.presets"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
@change="(val) => triggerManualValuesChange(item.name, val)"
|
@change="val => triggerManualValuesChange(item.name, val)"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- 日期范围选择器 -->
|
<!-- 日期范围选择器 -->
|
||||||
@ -58,7 +58,7 @@
|
|||||||
:allow-clear="item.fieldProps?.allowClear"
|
:allow-clear="item.fieldProps?.allowClear"
|
||||||
:presets="item.presets"
|
:presets="item.presets"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
@change="(val) => triggerManualValuesChange(item.name, val)"
|
@change="val => triggerManualValuesChange(item.name, val)"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- 普通输入框 -->
|
<!-- 普通输入框 -->
|
||||||
@ -68,11 +68,16 @@
|
|||||||
:placeholder="item.placeholder || '请输入'"
|
:placeholder="item.placeholder || '请输入'"
|
||||||
:allow-clear="item.fieldProps?.allowClear"
|
:allow-clear="item.fieldProps?.allowClear"
|
||||||
:style="{ width: item.width ? item.width + 'px' : '200px' }"
|
:style="{ width: item.width ? item.width + 'px' : '200px' }"
|
||||||
@change="(e) => triggerManualValuesChange(item.name, e.target.value)"
|
@change="
|
||||||
|
e => triggerManualValuesChange(item.name, e.target.value)
|
||||||
|
"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- 电站下拉框 -->
|
<!-- 电站下拉框 -->
|
||||||
<div class="flex gap-[10px]" v-else-if="item.type === 'waterStation'">
|
<div
|
||||||
|
class="flex gap-[10px]"
|
||||||
|
v-else-if="item.type === 'waterStation'"
|
||||||
|
>
|
||||||
<a-form-item-rest>
|
<a-form-item-rest>
|
||||||
<!-- 基地下拉框 -->
|
<!-- 基地下拉框 -->
|
||||||
<!-- <a-select
|
<!-- <a-select
|
||||||
@ -168,7 +173,7 @@
|
|||||||
:placeholder="item.placeholder || '请选择'"
|
:placeholder="item.placeholder || '请选择'"
|
||||||
:allow-clear="item.fieldProps?.allowClear"
|
:allow-clear="item.fieldProps?.allowClear"
|
||||||
:style="{ width: item.width ? item.width + 'px' : '200px' }"
|
:style="{ width: item.width ? item.width + 'px' : '200px' }"
|
||||||
@change="(val) => triggerManualValuesChange(item.name, val)"
|
@change="val => triggerManualValuesChange(item.name, val)"
|
||||||
show-search
|
show-search
|
||||||
:filter-option="filterOption"
|
:filter-option="filterOption"
|
||||||
>
|
>
|
||||||
@ -182,14 +187,43 @@
|
|||||||
</a-select-option>
|
</a-select-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
|
|
||||||
|
<!-- 树形选择 -->
|
||||||
|
<a-tree-select
|
||||||
|
v-else-if="item.type === 'TreeSelect'"
|
||||||
|
v-model:value="formData[item.name]"
|
||||||
|
:tree-data="item.options"
|
||||||
|
:placeholder="item.placeholder || '请选择'"
|
||||||
|
:allow-clear="item.fieldProps?.allowClear"
|
||||||
|
:style="{ width: item.width ? item.width + 'px' : '200px' }"
|
||||||
|
:field-names="
|
||||||
|
item.fieldNames || {
|
||||||
|
label: 'label',
|
||||||
|
value: 'value',
|
||||||
|
children: 'children'
|
||||||
|
}
|
||||||
|
"
|
||||||
|
:show-search="item.showSearch !== false"
|
||||||
|
:multiple="item.multiple"
|
||||||
|
:tree-checkable="item.treeCheckable"
|
||||||
|
:check-strictly="item.checkStrictly"
|
||||||
|
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
|
||||||
|
@change="val => triggerManualValuesChange(item.name, val)"
|
||||||
|
/>
|
||||||
|
|
||||||
<!-- 单选框 -->
|
<!-- 单选框 -->
|
||||||
<a-radio-group
|
<a-radio-group
|
||||||
v-else-if="item.type === 'Radio'"
|
v-else-if="item.type === 'Radio'"
|
||||||
v-model:value="formData[item.name]"
|
v-model:value="formData[item.name]"
|
||||||
:style="{ width: item.width ? item.width + 'px' : '200px' }"
|
:style="{ width: item.width ? item.width + 'px' : '200px' }"
|
||||||
@change="(e) => triggerManualValuesChange(item.name, e.target.value)"
|
@change="
|
||||||
|
e => triggerManualValuesChange(item.name, e.target.value)
|
||||||
|
"
|
||||||
>
|
>
|
||||||
<a-radio v-for="opt in item.options" :key="opt.value" :value="opt.value">
|
<a-radio
|
||||||
|
v-for="opt in item.options"
|
||||||
|
:key="opt.value"
|
||||||
|
:value="opt.value"
|
||||||
|
>
|
||||||
{{ opt.label }}
|
{{ opt.label }}
|
||||||
</a-radio>
|
</a-radio>
|
||||||
</a-radio-group>
|
</a-radio-group>
|
||||||
@ -223,16 +257,16 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, computed, reactive, watch, onMounted, nextTick } from "vue";
|
import { ref, computed, reactive, watch, onMounted, nextTick } from 'vue';
|
||||||
import { useShuJuTianBaoStore } from "@/store/modules/shuJuTianBao";
|
import { useShuJuTianBaoStore } from '@/store/modules/shuJuTianBao';
|
||||||
const shuJuTianBaoStore = useShuJuTianBaoStore();
|
const shuJuTianBaoStore = useShuJuTianBaoStore();
|
||||||
|
|
||||||
// --- 类型定义 ---
|
// --- 类型定义 ---
|
||||||
export interface SearchItem {
|
export interface SearchItem {
|
||||||
type?: "Input" | "Select" | "DataPicker" | string;
|
type?: 'Input' | 'Select' | 'TreeSelect' | 'DataPicker' | string;
|
||||||
name: string;
|
name: string;
|
||||||
label: string;
|
label: string;
|
||||||
picker?: "year" | "month" | "date" | "week";
|
picker?: 'year' | 'month' | 'date' | 'week';
|
||||||
fieldProps?: any;
|
fieldProps?: any;
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
span?: number;
|
span?: number;
|
||||||
@ -246,6 +280,16 @@ export interface SearchItem {
|
|||||||
label: string;
|
label: string;
|
||||||
value: any;
|
value: any;
|
||||||
}[];
|
}[];
|
||||||
|
treeData?: any[];
|
||||||
|
fieldNames?: {
|
||||||
|
label?: string;
|
||||||
|
value?: string;
|
||||||
|
children?: string;
|
||||||
|
};
|
||||||
|
showSearch?: boolean;
|
||||||
|
multiple?: boolean;
|
||||||
|
treeCheckable?: boolean;
|
||||||
|
checkStrictly?: boolean;
|
||||||
component?: any;
|
component?: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,13 +304,13 @@ interface Props {
|
|||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
initialValues: () => ({}),
|
initialValues: () => ({}),
|
||||||
showSearch: true,
|
showSearch: true,
|
||||||
showReset: true,
|
showReset: true
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: "finish", values: any): void;
|
(e: 'finish', values: any): void;
|
||||||
(e: "valuesChange", changedValues: any, allValues: any): void;
|
(e: 'valuesChange', changedValues: any, allValues: any): void;
|
||||||
(e: "reset"): void;
|
(e: 'reset'): void;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const formRef = ref<any>();
|
const formRef = ref<any>();
|
||||||
@ -279,7 +323,7 @@ const filterOption = (inputValue: string, option: any) => {
|
|||||||
};
|
};
|
||||||
// 2. 创建计算属性,自动过滤掉 false/null/undefined 的项
|
// 2. 创建计算属性,自动过滤掉 false/null/undefined 的项
|
||||||
const validSearchList = computed(() => {
|
const validSearchList = computed(() => {
|
||||||
return props.searchList.filter((item) => item);
|
return props.searchList.filter(item => item);
|
||||||
});
|
});
|
||||||
|
|
||||||
// --- 初始化逻辑 ---
|
// --- 初始化逻辑 ---
|
||||||
@ -287,14 +331,14 @@ const initForm = () => {
|
|||||||
const initial = JSON.parse(JSON.stringify(props.initialValues || {}));
|
const initial = JSON.parse(JSON.stringify(props.initialValues || {}));
|
||||||
|
|
||||||
// 1. 清空 formData
|
// 1. 清空 formData
|
||||||
Object.keys(formData).forEach((key) => delete formData[key]);
|
Object.keys(formData).forEach(key => delete formData[key]);
|
||||||
|
|
||||||
// 2. 赋值初始数据
|
// 2. 赋值初始数据
|
||||||
Object.assign(formData, initial);
|
Object.assign(formData, initial);
|
||||||
|
|
||||||
// 3. 过滤掉 searchList 中为 false/null/undefined 的项,并生成规则
|
// 3. 过滤掉 searchList 中为 false/null/undefined 的项,并生成规则
|
||||||
validSearchList.value.forEach((item) => {
|
validSearchList.value.forEach(item => {
|
||||||
if (item.type == "waterStation") {
|
if (item.type == 'waterStation') {
|
||||||
// 下拉菜单
|
// 下拉菜单
|
||||||
// shuJuTianBaoStore.getBaseOption();
|
// shuJuTianBaoStore.getBaseOption();
|
||||||
shuJuTianBaoStore.getSelectForOption();
|
shuJuTianBaoStore.getSelectForOption();
|
||||||
@ -302,7 +346,7 @@ const initForm = () => {
|
|||||||
}
|
}
|
||||||
if (item.fieldProps?.required) {
|
if (item.fieldProps?.required) {
|
||||||
rules[item.name] = [
|
rules[item.name] = [
|
||||||
{ required: true, message: `${item.label}不能为空`, trigger: "blur" },
|
{ required: true, message: `${item.label}不能为空`, trigger: 'blur' }
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -318,7 +362,7 @@ const triggerManualValuesChange = (changedKey: string, newValue: any) => {
|
|||||||
const changedValues = { [changedKey]: newValue };
|
const changedValues = { [changedKey]: newValue };
|
||||||
// 发射事件,传递变更值和当前所有值
|
// 发射事件,传递变更值和当前所有值
|
||||||
// 注意:这里使用 {...formData} 是为了传递当前的最新状态
|
// 注意:这里使用 {...formData} 是为了传递当前的最新状态
|
||||||
emit("valuesChange", changedValues, { ...formData });
|
emit('valuesChange', changedValues, { ...formData });
|
||||||
};
|
};
|
||||||
|
|
||||||
// const dataDimensionDataChange = (value: any) => {
|
// const dataDimensionDataChange = (value: any) => {
|
||||||
@ -332,24 +376,24 @@ const triggerManualValuesChange = (changedKey: string, newValue: any) => {
|
|||||||
|
|
||||||
const lyChange = (value: any) => {
|
const lyChange = (value: any) => {
|
||||||
formData.hbrvcd = value;
|
formData.hbrvcd = value;
|
||||||
formData.rstcd = "";
|
formData.rstcd = '';
|
||||||
shuJuTianBaoStore.getEngOption(formData.hbrvcd);
|
shuJuTianBaoStore.getEngOption(formData.hbrvcd);
|
||||||
|
|
||||||
// 【关键修改】手动触发 valuesChange,因为 a-form-item-rest 阻断了自动监听
|
// 【关键修改】手动触发 valuesChange,因为 a-form-item-rest 阻断了自动监听
|
||||||
triggerManualValuesChange("hbrvcd", formData.hbrvcd);
|
triggerManualValuesChange('hbrvcd', formData.hbrvcd);
|
||||||
};
|
};
|
||||||
|
|
||||||
const stcdIdChange = (value: any) => {
|
const stcdIdChange = (value: any) => {
|
||||||
if (props.zhujianfujian == "fu") {
|
if (props.zhujianfujian == 'fu') {
|
||||||
formData.rstcd = value;
|
formData.rstcd = value;
|
||||||
shuJuTianBaoStore.getFpssOption(formData.hbrvcd, value);
|
shuJuTianBaoStore.getFpssOption(formData.hbrvcd, value);
|
||||||
// 【关键修改】手动触发 valuesChange
|
// 【关键修改】手动触发 valuesChange
|
||||||
triggerManualValuesChange("rstcd", formData.rstcd);
|
triggerManualValuesChange('rstcd', formData.rstcd);
|
||||||
} else {
|
} else {
|
||||||
formData.stcd = value;
|
formData.stcd = value;
|
||||||
shuJuTianBaoStore.getFpssOption(formData.hbrvcd, value);
|
shuJuTianBaoStore.getFpssOption(formData.hbrvcd, value);
|
||||||
// 【关键修改】手动触发 valuesChange
|
// 【关键修改】手动触发 valuesChange
|
||||||
triggerManualValuesChange("stcd", formData.stcd);
|
triggerManualValuesChange('stcd', formData.stcd);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -359,7 +403,7 @@ onMounted(() => {
|
|||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.initialValues,
|
() => props.initialValues,
|
||||||
(newVal) => {
|
newVal => {
|
||||||
if (newVal && formRef.value) {
|
if (newVal && formRef.value) {
|
||||||
formRef.value.setFieldsValue(newVal);
|
formRef.value.setFieldsValue(newVal);
|
||||||
Object.assign(formData, newVal);
|
Object.assign(formData, newVal);
|
||||||
@ -371,11 +415,11 @@ watch(
|
|||||||
// --- 事件处理 ---
|
// --- 事件处理 ---
|
||||||
const handleFinish = (values: any) => {
|
const handleFinish = (values: any) => {
|
||||||
const finalValues = { ...formData, ...values };
|
const finalValues = { ...formData, ...values };
|
||||||
emit("finish", finalValues);
|
emit('finish', finalValues);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleValuesChange = (changedValues: any, allValues: any) => {
|
const handleValuesChange = (changedValues: any, allValues: any) => {
|
||||||
emit("valuesChange", changedValues, allValues);
|
emit('valuesChange', changedValues, allValues);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleReset = () => {
|
const handleReset = () => {
|
||||||
@ -384,7 +428,7 @@ const handleReset = () => {
|
|||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
initForm();
|
initForm();
|
||||||
});
|
});
|
||||||
emit("reset");
|
emit('reset');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -392,7 +436,7 @@ defineExpose({
|
|||||||
form: formRef,
|
form: formRef,
|
||||||
formData,
|
formData,
|
||||||
reset: handleReset,
|
reset: handleReset,
|
||||||
submit: () => formRef.value?.submit(),
|
submit: () => formRef.value?.submit()
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -20,8 +20,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, computed, onMounted, watch, nextTick } from 'vue';
|
import { ref, computed, onMounted, watch, nextTick } from "vue";
|
||||||
import { calcTableScrollY } from '@/utils/index';
|
import { calcTableScrollY } from "@/utils/index";
|
||||||
|
|
||||||
// --- Types ---
|
// --- Types ---
|
||||||
interface Props {
|
interface Props {
|
||||||
@ -33,24 +33,26 @@ interface Props {
|
|||||||
rowKey?: string;
|
rowKey?: string;
|
||||||
searchParams?: Record<string, any>;
|
searchParams?: Record<string, any>;
|
||||||
defaultPageSize?: number;
|
defaultPageSize?: number;
|
||||||
|
isPage?: boolean;
|
||||||
getCheckboxProps?: (record: any) => any;
|
getCheckboxProps?: (record: any) => any;
|
||||||
transformData?: (res: any) => { records: any[]; total: number };
|
transformData?: (res: any) => { records: any[]; total: number };
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
enableRowSelection: false,
|
enableRowSelection: false,
|
||||||
rowKey: 'id',
|
rowKey: "id",
|
||||||
|
isPage: true,
|
||||||
data: () => [],
|
data: () => [],
|
||||||
searchParams: () => ({}),
|
searchParams: () => ({}),
|
||||||
defaultPageSize: 20,
|
defaultPageSize: 20,
|
||||||
getCheckboxProps: undefined,
|
getCheckboxProps: undefined,
|
||||||
transformData: undefined,
|
transformData: undefined,
|
||||||
scrollY: undefined
|
scrollY: undefined,
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: 'data-loaded', params: any, data: any): void;
|
(e: "data-loaded", params: any, data: any): void;
|
||||||
(e: 'selection-change', selectedRowKeys: string[], selectedRows: any[]): void;
|
(e: "selection-change", selectedRowKeys: string[], selectedRows: any[]): void;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
// --- State ---
|
// --- State ---
|
||||||
@ -68,8 +70,8 @@ const tableScrollY = ref<number>(0); // ✅ 新增:存储容器高度
|
|||||||
// --- Computed Scroll Config ---
|
// --- Computed Scroll Config ---
|
||||||
const scrollConfig = computed(() => {
|
const scrollConfig = computed(() => {
|
||||||
const config: any = {
|
const config: any = {
|
||||||
x: '100%',
|
x: "100%",
|
||||||
y: 0
|
y: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
// // 1. 如果父组件传入了固定的 scrollY,优先使用
|
// // 1. 如果父组件传入了固定的 scrollY,优先使用
|
||||||
@ -91,11 +93,11 @@ const rowSelection = computed(() => ({
|
|||||||
onChange: (keys: string[], rows: any[]) => {
|
onChange: (keys: string[], rows: any[]) => {
|
||||||
selectedRowKeys.value = keys;
|
selectedRowKeys.value = keys;
|
||||||
selectedRows.value = rows;
|
selectedRows.value = rows;
|
||||||
emit('selection-change', keys, rows);
|
emit("selection-change", keys, rows);
|
||||||
},
|
},
|
||||||
getCheckboxProps: props.getCheckboxProps
|
getCheckboxProps: props.getCheckboxProps
|
||||||
? props.getCheckboxProps
|
? props.getCheckboxProps
|
||||||
: (record: any) => ({})
|
: (record: any) => ({}),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// --- Pagination Config ---
|
// --- Pagination Config ---
|
||||||
@ -106,7 +108,7 @@ const paginationConfig = computed(() => ({
|
|||||||
showSizeChanger: true,
|
showSizeChanger: true,
|
||||||
showQuickJumper: true,
|
showQuickJumper: true,
|
||||||
showTotal: (total: number) => `共 ${total} 条`,
|
showTotal: (total: number) => `共 ${total} 条`,
|
||||||
pageSizeOptions: ['20', '50', '100']
|
pageSizeOptions: ["20", "50", "100"],
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// --- Methods ---
|
// --- Methods ---
|
||||||
@ -118,13 +120,18 @@ const getList = async (filter?: Record<string, any>) => {
|
|||||||
if (filter !== undefined) {
|
if (filter !== undefined) {
|
||||||
lastFilter.value = filter;
|
lastFilter.value = filter;
|
||||||
}
|
}
|
||||||
|
console.log(props.searchParams);
|
||||||
try {
|
try {
|
||||||
const params = {
|
const params = {
|
||||||
...props.searchParams,
|
...props.searchParams,
|
||||||
skip: page.value,
|
skip: page.value,
|
||||||
take: size.value,
|
take: size.value,
|
||||||
filter: lastFilter.value
|
filter: lastFilter.value,
|
||||||
};
|
};
|
||||||
|
if (!props.isPage) {
|
||||||
|
delete params.take;
|
||||||
|
delete params.skip;
|
||||||
|
}
|
||||||
|
|
||||||
const res = await props.listUrl(params);
|
const res = await props.listUrl(params);
|
||||||
|
|
||||||
@ -136,15 +143,15 @@ const getList = async (filter?: Record<string, any>) => {
|
|||||||
finalRecords = result.records || [];
|
finalRecords = result.records || [];
|
||||||
finalTotal = result.total || 0;
|
finalTotal = result.total || 0;
|
||||||
} else {
|
} else {
|
||||||
finalRecords = res?.data?.records || res?.data || [];
|
finalRecords = res?.data?.records || res?.data?.data || res?.data || [];
|
||||||
finalTotal = res?.data?.total || res?.total || 0;
|
finalTotal = res.data?.data?.total || res?.data?.total || res?.total || 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
tableData.value = finalRecords;
|
tableData.value = finalRecords;
|
||||||
total.value = finalTotal;
|
total.value = finalTotal;
|
||||||
emit('data-loaded', params, { records: finalRecords, total: finalTotal });
|
emit("data-loaded", params, { records: finalRecords, total: finalTotal });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Fetch table data error:', error);
|
console.error("Fetch table data error:", error);
|
||||||
tableData.value = [];
|
tableData.value = [];
|
||||||
total.value = 0;
|
total.value = 0;
|
||||||
} finally {
|
} finally {
|
||||||
@ -183,18 +190,10 @@ defineExpose({
|
|||||||
clearSelection,
|
clearSelection,
|
||||||
getSelected: () => ({
|
getSelected: () => ({
|
||||||
keys: selectedRowKeys.value,
|
keys: selectedRowKeys.value,
|
||||||
rows: selectedRows.value
|
rows: selectedRows.value,
|
||||||
})
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(
|
|
||||||
() => props.searchParams,
|
|
||||||
() => {
|
|
||||||
page.value = 1;
|
|
||||||
getList();
|
|
||||||
},
|
|
||||||
{ deep: true }
|
|
||||||
);
|
|
||||||
const observer = new ResizeObserver(() => {
|
const observer = new ResizeObserver(() => {
|
||||||
tableScrollY.value = calcTableScrollY(tableContainerRef.value);
|
tableScrollY.value = calcTableScrollY(tableContainerRef.value);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -21,7 +21,8 @@ service.interceptors.request.use(
|
|||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
config.url.includes('/dec-lygk-base-server') ||
|
config.url.includes('/dec-lygk-base-server') ||
|
||||||
config.url.includes('/wmp-env-server')
|
config.url.includes('/wmp-env-server') ||
|
||||||
|
config.url.includes('/wmp-sys-server')
|
||||||
) {
|
) {
|
||||||
config.headers._appid = '974975A6-47FD-4C04-9ACD-68938D2992BD';
|
config.headers._appid = '974975A6-47FD-4C04-9ACD-68938D2992BD';
|
||||||
config.headers._isolateid = '5b34aecb-adfb-4dfc-ad95-21505a9eb388';
|
config.headers._isolateid = '5b34aecb-adfb-4dfc-ad95-21505a9eb388';
|
||||||
@ -29,7 +30,7 @@ service.interceptors.request.use(
|
|||||||
config.headers._sysid = '10EC2E0B-AEA9-4757-83A2-201BA1BC54E9';
|
config.headers._sysid = '10EC2E0B-AEA9-4757-83A2-201BA1BC54E9';
|
||||||
|
|
||||||
config.headers.authorization =
|
config.headers.authorization =
|
||||||
'bearer ff5f2ec1-27ba-4ff4-8987-606cbfac6f2f';
|
'bearer bcaab66c-0455-4062-aa2a-85c1af405d9b';
|
||||||
config.baseURL = '/';
|
config.baseURL = '/';
|
||||||
} else {
|
} else {
|
||||||
const user = useUserStoreHook();
|
const user = useUserStoreHook();
|
||||||
|
|||||||
@ -1,10 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<a-modal
|
<a-modal
|
||||||
:title="isEdit ? '编辑配置' : '新增配置'"
|
:title="isEdit ? '编辑沿程配置' : '新增沿程配置'"
|
||||||
v-model:open="modalVisible"
|
v-model:open="modalVisible"
|
||||||
:confirm-loading="localLoading"
|
:confirm-loading="localLoading"
|
||||||
width="600px"
|
width="1200px"
|
||||||
:destroy-on-close="true"
|
:destroy-on-close="true"
|
||||||
|
ok-text="保存"
|
||||||
@cancel="handleCancel"
|
@cancel="handleCancel"
|
||||||
@ok="handleOk"
|
@ok="handleOk"
|
||||||
>
|
>
|
||||||
@ -15,43 +16,270 @@
|
|||||||
name="edit_form"
|
name="edit_form"
|
||||||
:labelCol="{ span: 5 }"
|
:labelCol="{ span: 5 }"
|
||||||
>
|
>
|
||||||
<a-form-item label="配置项名称" name="configName">
|
<a-row>
|
||||||
<a-input
|
<a-col :span="12">
|
||||||
v-model:value="formData.configName"
|
<a-form-item label="沿程配置名称" name="name">
|
||||||
style="width: 100%"
|
<a-input
|
||||||
placeholder="请输入配置项名称"
|
v-model:value="formData.name"
|
||||||
/>
|
style="width: 100%"
|
||||||
</a-form-item>
|
placeholder="请输入沿程配置名称"
|
||||||
<a-form-item label="配置类型" name="configType">
|
/> </a-form-item
|
||||||
<a-input
|
></a-col>
|
||||||
v-model:value="formData.configType"
|
<a-col :span="12">
|
||||||
style="width: 100%"
|
<a-form-item label="配置编码" name="code">
|
||||||
placeholder="请输入配置类型"
|
<a-input
|
||||||
/>
|
v-model:value="formData.code"
|
||||||
</a-form-item>
|
style="width: 100%"
|
||||||
<a-form-item label="配置值" name="configValue">
|
placeholder="请输入配置编码"
|
||||||
<a-input
|
/> </a-form-item
|
||||||
v-model:value="formData.configValue"
|
></a-col>
|
||||||
style="width: 100%"
|
</a-row>
|
||||||
placeholder="请输入配置值"
|
<a-row>
|
||||||
/>
|
<a-col :span="12">
|
||||||
</a-form-item>
|
<a-form-item label="所在河段" name="rvnm">
|
||||||
<a-form-item label="描述" name="description">
|
<a-input
|
||||||
<a-textarea
|
v-model:value="formData.rvnm"
|
||||||
v-model:value="formData.description"
|
style="width: 100%"
|
||||||
style="width: 100%"
|
placeholder="请输入所在河段"
|
||||||
placeholder="请输入描述"
|
/> </a-form-item
|
||||||
:rows="3"
|
></a-col>
|
||||||
/>
|
<a-col :span="12">
|
||||||
</a-form-item>
|
<a-form-item label="备注" name="description">
|
||||||
|
<a-textarea
|
||||||
|
:rows="4"
|
||||||
|
v-model:value="formData.description"
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请输入备注"
|
||||||
|
/> </a-form-item
|
||||||
|
></a-col>
|
||||||
|
</a-row>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
<div class="config-tree-container">
|
||||||
|
<!-- 新增一级节点区域 -->
|
||||||
|
<div v-if="addingNewNode" class="add-node-row">
|
||||||
|
<a-select
|
||||||
|
v-model:value="newNodeData.stcd"
|
||||||
|
show-search
|
||||||
|
placeholder="请选择站点"
|
||||||
|
style="width: 300px"
|
||||||
|
:filter-option="filterOption"
|
||||||
|
@change="handleNodeSelect"
|
||||||
|
>
|
||||||
|
<a-select-option
|
||||||
|
v-for="item in stationList"
|
||||||
|
:key="item.stcd"
|
||||||
|
:value="item.stcd"
|
||||||
|
>
|
||||||
|
{{ item.stnm }}
|
||||||
|
</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
<a-button
|
||||||
|
type="primary"
|
||||||
|
@click="handleSaveNewNode"
|
||||||
|
style="margin-left: 8px"
|
||||||
|
>
|
||||||
|
保存
|
||||||
|
</a-button>
|
||||||
|
<a-button @click="handleCancelAdd" style="margin-left: 8px">
|
||||||
|
<MinusOutlined />
|
||||||
|
</a-button>
|
||||||
|
</div>
|
||||||
|
<a-button v-else class="mb-4" type="primary" @click="handleAdd">
|
||||||
|
<PlusOutlined /> 新增一级节点
|
||||||
|
</a-button>
|
||||||
|
|
||||||
|
<!-- 树形结构 -->
|
||||||
|
<a-tree
|
||||||
|
v-if="treeData.length > 0"
|
||||||
|
:tree-data="treeData"
|
||||||
|
:default-expand-all="false"
|
||||||
|
:selectable="false"
|
||||||
|
block-node
|
||||||
|
style="width: 300px"
|
||||||
|
>
|
||||||
|
<template #title="{ dataRef }">
|
||||||
|
<!-- 编辑状态:只显示编辑区域 -->
|
||||||
|
<div
|
||||||
|
v-if="editingNode && editingNodeKey === dataRef.key"
|
||||||
|
class="add-child-node-row w-[300px]"
|
||||||
|
>
|
||||||
|
<a-select
|
||||||
|
v-model:value="editNodeData.stcd"
|
||||||
|
show-search
|
||||||
|
placeholder="请选择站点"
|
||||||
|
style="width: 300px"
|
||||||
|
:filter-option="filterOption"
|
||||||
|
@change="handleEditNodeSelect"
|
||||||
|
>
|
||||||
|
<a-select-option
|
||||||
|
v-for="item in stationList"
|
||||||
|
:key="item.stcd"
|
||||||
|
:value="item.stcd"
|
||||||
|
>
|
||||||
|
{{ item.stnm }}
|
||||||
|
</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
<a-button
|
||||||
|
type="primary"
|
||||||
|
@click.stop="handleSaveEditNode"
|
||||||
|
style="margin-left: 8px"
|
||||||
|
>
|
||||||
|
保存
|
||||||
|
</a-button>
|
||||||
|
<a-button
|
||||||
|
@click.stop="handleCancelEditNode"
|
||||||
|
style="margin-left: 8px"
|
||||||
|
>
|
||||||
|
<MinusOutlined />
|
||||||
|
</a-button>
|
||||||
|
</div>
|
||||||
|
<!-- 非编辑状态:显示正常节点内容 -->
|
||||||
|
<template v-else>
|
||||||
|
<div class="tree-node-wrapper">
|
||||||
|
<span class="tree-node-title"> {{ getNodeTitle(dataRef) }} </span>
|
||||||
|
<div class="tree-node-actions">
|
||||||
|
<!-- 一级节点:支持新增子节点、编辑、排序、删除 -->
|
||||||
|
<template v-if="!dataRef.parentId">
|
||||||
|
<a-button
|
||||||
|
type="link"
|
||||||
|
size="small"
|
||||||
|
@click.stop="handleAddChild(dataRef)"
|
||||||
|
title="添加子节点"
|
||||||
|
>
|
||||||
|
<PlusOutlined />
|
||||||
|
</a-button>
|
||||||
|
<a-button
|
||||||
|
type="link"
|
||||||
|
size="small"
|
||||||
|
@click.stop="handleEditNode(dataRef)"
|
||||||
|
title="编辑"
|
||||||
|
>
|
||||||
|
<EditOutlined />
|
||||||
|
</a-button>
|
||||||
|
<a-button
|
||||||
|
type="link"
|
||||||
|
size="small"
|
||||||
|
@click.stop="handleMoveUp(dataRef)"
|
||||||
|
title="上移"
|
||||||
|
:disabled="isFirstNode(dataRef)"
|
||||||
|
>
|
||||||
|
<ArrowUpOutlined />
|
||||||
|
</a-button>
|
||||||
|
<a-button
|
||||||
|
type="link"
|
||||||
|
size="small"
|
||||||
|
@click.stop="handleMoveDown(dataRef)"
|
||||||
|
title="下移"
|
||||||
|
:disabled="isLastNode(dataRef)"
|
||||||
|
>
|
||||||
|
<ArrowDownOutlined />
|
||||||
|
</a-button>
|
||||||
|
<a-button
|
||||||
|
type="link"
|
||||||
|
size="small"
|
||||||
|
danger
|
||||||
|
@click.stop="handleDeleteNode(dataRef)"
|
||||||
|
title="删除"
|
||||||
|
>
|
||||||
|
<DeleteOutlined />
|
||||||
|
</a-button>
|
||||||
|
</template>
|
||||||
|
<!-- 二级节点:只支持编辑、排序、删除 -->
|
||||||
|
<template v-else>
|
||||||
|
<a-button
|
||||||
|
type="link"
|
||||||
|
size="small"
|
||||||
|
@click.stop="handleEditNode(dataRef)"
|
||||||
|
title="编辑"
|
||||||
|
>
|
||||||
|
<EditOutlined />
|
||||||
|
</a-button>
|
||||||
|
<a-button
|
||||||
|
type="link"
|
||||||
|
size="small"
|
||||||
|
@click.stop="handleMoveUp(dataRef)"
|
||||||
|
title="上移"
|
||||||
|
:disabled="isFirstNode(dataRef)"
|
||||||
|
>
|
||||||
|
<ArrowUpOutlined />
|
||||||
|
</a-button>
|
||||||
|
<a-button
|
||||||
|
type="link"
|
||||||
|
size="small"
|
||||||
|
@click.stop="handleMoveDown(dataRef)"
|
||||||
|
title="下移"
|
||||||
|
:disabled="isLastNode(dataRef)"
|
||||||
|
>
|
||||||
|
<ArrowDownOutlined />
|
||||||
|
</a-button>
|
||||||
|
<a-button
|
||||||
|
type="link"
|
||||||
|
size="small"
|
||||||
|
danger
|
||||||
|
@click.stop="handleDeleteNode(dataRef)"
|
||||||
|
title="删除"
|
||||||
|
>
|
||||||
|
<DeleteOutlined />
|
||||||
|
</a-button>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 子节点添加区域 -->
|
||||||
|
<div
|
||||||
|
v-if="addingChildNode && currentParentKey === dataRef.key"
|
||||||
|
class="add-child-node-row"
|
||||||
|
>
|
||||||
|
<a-select
|
||||||
|
v-model:value="childNodeData.stcd"
|
||||||
|
show-search
|
||||||
|
placeholder="请选择站点"
|
||||||
|
style="width: 300px"
|
||||||
|
:filter-option="filterOption"
|
||||||
|
@change="handleChildNodeSelect"
|
||||||
|
>
|
||||||
|
<a-select-option
|
||||||
|
v-for="item in stationList"
|
||||||
|
:key="item.stcd"
|
||||||
|
:value="item.stcd"
|
||||||
|
>
|
||||||
|
{{ item.stnm }}
|
||||||
|
</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
<a-button
|
||||||
|
type="primary"
|
||||||
|
@click.stop="handleSaveChildNode"
|
||||||
|
style="margin-left: 8px"
|
||||||
|
>
|
||||||
|
保存
|
||||||
|
</a-button>
|
||||||
|
<a-button
|
||||||
|
@click.stop="handleCancelAddChild"
|
||||||
|
style="margin-left: 8px"
|
||||||
|
>
|
||||||
|
<MinusOutlined />
|
||||||
|
</a-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</a-tree>
|
||||||
|
<a-empty v-else description="暂无数据" style="margin-top: 20px" />
|
||||||
|
</div>
|
||||||
</a-modal>
|
</a-modal>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, reactive, computed, watch } from 'vue';
|
import { ref, reactive, computed, watch } from 'vue';
|
||||||
import { message } from 'ant-design-vue';
|
import { message, Modal } from 'ant-design-vue';
|
||||||
import type { Rule } from 'ant-design-vue/es/form';
|
import type { Rule } from 'ant-design-vue/es/form';
|
||||||
|
import dayjs from 'dayjs';
|
||||||
|
import {
|
||||||
|
PlusOutlined,
|
||||||
|
MinusOutlined,
|
||||||
|
EditOutlined,
|
||||||
|
DeleteOutlined,
|
||||||
|
ArrowUpOutlined,
|
||||||
|
ArrowDownOutlined
|
||||||
|
} from '@ant-design/icons-vue';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
visible: boolean;
|
visible: boolean;
|
||||||
@ -81,27 +309,366 @@ const formRef = ref();
|
|||||||
|
|
||||||
const defaultFormData = reactive({
|
const defaultFormData = reactive({
|
||||||
id: undefined,
|
id: undefined,
|
||||||
configName: undefined,
|
name: undefined,
|
||||||
configType: undefined,
|
code: undefined,
|
||||||
configValue: undefined,
|
rvnm: undefined,
|
||||||
description: undefined
|
description: undefined
|
||||||
});
|
});
|
||||||
const formData: any = reactive({ ...defaultFormData });
|
const formData: any = reactive({ ...defaultFormData });
|
||||||
|
|
||||||
const rules: Record<string, Rule[]> = {
|
const rules: Record<string, Rule[]> = {
|
||||||
configName: [
|
name: [{ required: true, message: '请输入沿程配置名称', trigger: 'blur' }],
|
||||||
{ required: true, message: '请输入配置项名称', trigger: 'blur' }
|
code: [{ required: true, message: '请输入配置编码', trigger: 'blur' }],
|
||||||
],
|
rvnm: [{ required: true, message: '请输入所在河段', trigger: 'blur' }]
|
||||||
configType: [{ required: true, message: '请输入配置类型', trigger: 'blur' }]
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const isEdit = computed(() => !!props.initialValues);
|
const isEdit = computed(() => !!props.initialValues);
|
||||||
|
|
||||||
|
// 树形数据
|
||||||
|
const treeData = ref<any[]>([]);
|
||||||
|
|
||||||
|
// 新增节点相关
|
||||||
|
const addingNewNode = ref(false);
|
||||||
|
const newNodeData = ref({
|
||||||
|
stcd: undefined,
|
||||||
|
stnm: '',
|
||||||
|
sttpName: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
// 添加子节点相关
|
||||||
|
const addingChildNode = ref(false);
|
||||||
|
const currentParentKey = ref<string | null>(null);
|
||||||
|
const childNodeData = ref({
|
||||||
|
stcd: undefined,
|
||||||
|
stnm: '',
|
||||||
|
sttpName: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
// 编辑节点相关
|
||||||
|
const editingNode = ref(false);
|
||||||
|
const editingNodeKey = ref<string | null>(null);
|
||||||
|
const editNodeData = ref({
|
||||||
|
stcd: undefined,
|
||||||
|
stnm: '',
|
||||||
|
sttpName: '',
|
||||||
|
originalData: null as any
|
||||||
|
});
|
||||||
|
|
||||||
|
// 站点列表(模拟数据,实际应从接口获取)
|
||||||
|
const stationList = ref([
|
||||||
|
{ stcd: '1', stnm: '站点A', sttpName: '类型1' },
|
||||||
|
{ stcd: '2', stnm: '站点B', sttpName: '类型2' },
|
||||||
|
{ stcd: '3', stnm: '站点C', sttpName: '类型1' },
|
||||||
|
{ stcd: '4', stnm: '站点D', sttpName: '类型3' }
|
||||||
|
]);
|
||||||
|
|
||||||
|
// 生成唯一ID
|
||||||
|
let nodeIdCounter = 0;
|
||||||
|
const generateNodeId = () => `node_${Date.now()}_${++nodeIdCounter}`;
|
||||||
|
|
||||||
|
// 获取节点标题
|
||||||
|
const getNodeTitle = (dataRef: any) => {
|
||||||
|
if (!dataRef.parentId) {
|
||||||
|
// 一级节点:只显示 stnm
|
||||||
|
return dataRef.stnm || '';
|
||||||
|
} else {
|
||||||
|
// 二级节点:显示 stnm + sttpName
|
||||||
|
return `${dataRef.stnm || ''} ${dataRef.sttpName || ''}`;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 搜索过滤
|
||||||
|
const filterOption = (input: string, option: any) => {
|
||||||
|
return (
|
||||||
|
option.children[0].children.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 判断是否为第一个节点
|
||||||
|
const isFirstNode = (dataRef: any) => {
|
||||||
|
const siblings = getSiblings(dataRef);
|
||||||
|
return siblings.length > 0 && siblings[0].key === dataRef.key;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 判断是否为最后一个节点
|
||||||
|
const isLastNode = (dataRef: any) => {
|
||||||
|
const siblings = getSiblings(dataRef);
|
||||||
|
return (
|
||||||
|
siblings.length > 0 && siblings[siblings.length - 1].key === dataRef.key
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 获取兄弟节点
|
||||||
|
const getSiblings = (dataRef: any) => {
|
||||||
|
if (!dataRef.parentId) {
|
||||||
|
// 一级节点
|
||||||
|
return treeData.value;
|
||||||
|
} else {
|
||||||
|
// 二级节点,找到父节点的 children
|
||||||
|
const parent = findNodeByKey(treeData.value, dataRef.parentId);
|
||||||
|
return parent?.children || [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 根据 key 查找节点
|
||||||
|
const findNodeByKey = (nodes: any[], key: string): any => {
|
||||||
|
for (const node of nodes) {
|
||||||
|
if (node.key === key) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
if (node.children && node.children.length > 0) {
|
||||||
|
const found = findNodeByKey(node.children, key);
|
||||||
|
if (found) return found;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 新增一级节点
|
||||||
|
const handleAdd = () => {
|
||||||
|
addingNewNode.value = true;
|
||||||
|
newNodeData.value = {
|
||||||
|
stcd: undefined,
|
||||||
|
stnm: '',
|
||||||
|
sttpName: ''
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// 选择节点
|
||||||
|
const handleNodeSelect = (value: string) => {
|
||||||
|
const station = stationList.value.find(item => item.stcd === value);
|
||||||
|
if (station) {
|
||||||
|
newNodeData.value.stnm = station.stnm;
|
||||||
|
newNodeData.value.sttpName = station.sttpName;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 保存新增节点
|
||||||
|
const handleSaveNewNode = () => {
|
||||||
|
if (!newNodeData.value.stcd) {
|
||||||
|
message.error('请选择站点');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const newNode = {
|
||||||
|
key: generateNodeId(),
|
||||||
|
stcd: newNodeData.value.stcd,
|
||||||
|
stnm: newNodeData.value.stnm,
|
||||||
|
sttpName: newNodeData.value.sttpName,
|
||||||
|
parentId: null,
|
||||||
|
children: []
|
||||||
|
};
|
||||||
|
|
||||||
|
treeData.value.push(newNode);
|
||||||
|
addingNewNode.value = false;
|
||||||
|
message.success('添加成功');
|
||||||
|
};
|
||||||
|
|
||||||
|
// 取消新增
|
||||||
|
const handleCancelAdd = () => {
|
||||||
|
addingNewNode.value = false;
|
||||||
|
newNodeData.value = {
|
||||||
|
stcd: undefined,
|
||||||
|
stnm: '',
|
||||||
|
sttpName: ''
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// 添加子节点(二级节点)
|
||||||
|
const handleAddChild = (parentData: any) => {
|
||||||
|
addingChildNode.value = true;
|
||||||
|
currentParentKey.value = parentData.key;
|
||||||
|
childNodeData.value = {
|
||||||
|
stcd: undefined,
|
||||||
|
stnm: '',
|
||||||
|
sttpName: ''
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// 选择子节点
|
||||||
|
const handleChildNodeSelect = (value: string) => {
|
||||||
|
const station = stationList.value.find(item => item.stcd === value);
|
||||||
|
if (station) {
|
||||||
|
childNodeData.value.stnm = station.stnm;
|
||||||
|
childNodeData.value.sttpName = station.sttpName;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 保存新增子节点
|
||||||
|
const handleSaveChildNode = () => {
|
||||||
|
if (!childNodeData.value.stcd) {
|
||||||
|
message.error('请选择站点');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const parent = findNodeByKey(treeData.value, currentParentKey.value!);
|
||||||
|
if (!parent) {
|
||||||
|
message.error('父节点不存在');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const newChild = {
|
||||||
|
key: generateNodeId(),
|
||||||
|
stcd: childNodeData.value.stcd,
|
||||||
|
stnm: childNodeData.value.stnm,
|
||||||
|
sttpName: childNodeData.value.sttpName,
|
||||||
|
parentId: parent.key,
|
||||||
|
children: []
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!parent.children) {
|
||||||
|
parent.children = [];
|
||||||
|
}
|
||||||
|
// 在子节点列表顶部添加
|
||||||
|
parent.children.unshift(newChild);
|
||||||
|
|
||||||
|
addingChildNode.value = false;
|
||||||
|
currentParentKey.value = null;
|
||||||
|
message.success('添加子节点成功');
|
||||||
|
};
|
||||||
|
|
||||||
|
// 取消添加子节点
|
||||||
|
const handleCancelAddChild = () => {
|
||||||
|
addingChildNode.value = false;
|
||||||
|
currentParentKey.value = null;
|
||||||
|
childNodeData.value = {
|
||||||
|
stcd: undefined,
|
||||||
|
stnm: '',
|
||||||
|
sttpName: ''
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// 编辑节点
|
||||||
|
const handleEditNode = (dataRef: any) => {
|
||||||
|
editingNode.value = true;
|
||||||
|
editingNodeKey.value = dataRef.key;
|
||||||
|
// 保存原始数据
|
||||||
|
editNodeData.value = {
|
||||||
|
stcd: dataRef.stcd,
|
||||||
|
stnm: dataRef.stnm,
|
||||||
|
sttpName: dataRef.sttpName,
|
||||||
|
originalData: { ...dataRef }
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// 选择编辑节点
|
||||||
|
const handleEditNodeSelect = (value: string) => {
|
||||||
|
const station = stationList.value.find(item => item.stcd === value);
|
||||||
|
if (station) {
|
||||||
|
editNodeData.value.stnm = station.stnm;
|
||||||
|
editNodeData.value.sttpName = station.sttpName;
|
||||||
|
editNodeData.value.stcd = station.stcd;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 保存编辑节点
|
||||||
|
const handleSaveEditNode = () => {
|
||||||
|
if (!editNodeData.value.stcd) {
|
||||||
|
message.error('请选择站点');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 找到要编辑的节点
|
||||||
|
const node = findNodeByKey(treeData.value, editingNodeKey.value!);
|
||||||
|
if (!node) {
|
||||||
|
message.error('节点不存在');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新节点数据
|
||||||
|
node.stcd = editNodeData.value.stcd;
|
||||||
|
node.stnm = editNodeData.value.stnm;
|
||||||
|
node.sttpName = editNodeData.value.sttpName;
|
||||||
|
|
||||||
|
editingNode.value = false;
|
||||||
|
editingNodeKey.value = null;
|
||||||
|
message.success('编辑成功');
|
||||||
|
};
|
||||||
|
|
||||||
|
// 取消编辑节点
|
||||||
|
const handleCancelEditNode = () => {
|
||||||
|
editingNode.value = false;
|
||||||
|
editingNodeKey.value = null;
|
||||||
|
editNodeData.value = {
|
||||||
|
stcd: undefined,
|
||||||
|
stnm: '',
|
||||||
|
sttpName: '',
|
||||||
|
originalData: null
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// 上移
|
||||||
|
const handleMoveUp = (dataRef: any) => {
|
||||||
|
const siblings = getSiblings(dataRef);
|
||||||
|
const index = siblings.findIndex(item => item.key === dataRef.key);
|
||||||
|
|
||||||
|
if (index > 0) {
|
||||||
|
// 交换位置
|
||||||
|
[siblings[index - 1], siblings[index]] = [
|
||||||
|
siblings[index],
|
||||||
|
siblings[index - 1]
|
||||||
|
];
|
||||||
|
message.success('上移成功');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 下移
|
||||||
|
const handleMoveDown = (dataRef: any) => {
|
||||||
|
const siblings = getSiblings(dataRef);
|
||||||
|
const index = siblings.findIndex(item => item.key === dataRef.key);
|
||||||
|
|
||||||
|
if (index < siblings.length - 1) {
|
||||||
|
// 交换位置
|
||||||
|
[siblings[index], siblings[index + 1]] = [
|
||||||
|
siblings[index + 1],
|
||||||
|
siblings[index]
|
||||||
|
];
|
||||||
|
message.success('下移成功');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 删除节点
|
||||||
|
const handleDeleteNode = (dataRef: any) => {
|
||||||
|
Modal.confirm({
|
||||||
|
title: '确认删除',
|
||||||
|
content: `确定要删除节点"${dataRef.stnm}"吗?`,
|
||||||
|
okText: '确定',
|
||||||
|
cancelText: '取消',
|
||||||
|
onOk: () => {
|
||||||
|
if (!dataRef.parentId) {
|
||||||
|
// 删除一级节点
|
||||||
|
const index = treeData.value.findIndex(
|
||||||
|
item => item.key === dataRef.key
|
||||||
|
);
|
||||||
|
if (index > -1) {
|
||||||
|
treeData.value.splice(index, 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 删除二级节点
|
||||||
|
const parent = findNodeByKey(treeData.value, dataRef.parentId);
|
||||||
|
if (parent && parent.children) {
|
||||||
|
const index = parent.children.findIndex(
|
||||||
|
item => item.key === dataRef.key
|
||||||
|
);
|
||||||
|
if (index > -1) {
|
||||||
|
parent.children.splice(index, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
message.success('删除成功');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const handleOk = async () => {
|
const handleOk = async () => {
|
||||||
try {
|
try {
|
||||||
await formRef.value.validate();
|
await formRef.value.validate();
|
||||||
const submitValues = {
|
const submitValues = {
|
||||||
...formData
|
...formData,
|
||||||
|
captureDate: formData.captureDate
|
||||||
|
? dayjs(formData.captureDate).format('YYYY-MM-DD')
|
||||||
|
: undefined,
|
||||||
|
configNodes: treeData.value // 提交树形数据
|
||||||
};
|
};
|
||||||
emit('ok', submitValues);
|
emit('ok', submitValues);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -115,9 +682,26 @@ const initForm = () => {
|
|||||||
const values = props.initialValues;
|
const values = props.initialValues;
|
||||||
Object.keys(formData).forEach(key => {
|
Object.keys(formData).forEach(key => {
|
||||||
if (values.hasOwnProperty(key)) {
|
if (values.hasOwnProperty(key)) {
|
||||||
formData[key] = values[key];
|
if (key === 'captureDate' && values[key]) {
|
||||||
|
formData[key] = dayjs(values[key]);
|
||||||
|
} else {
|
||||||
|
formData[key] = values[key];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 初始化树形数据
|
||||||
|
if (values.configNodes && Array.isArray(values.configNodes)) {
|
||||||
|
treeData.value = values.configNodes.map((node: any) => ({
|
||||||
|
...node,
|
||||||
|
children:
|
||||||
|
node.children?.map((child: any) => ({
|
||||||
|
...child
|
||||||
|
})) || []
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
treeData.value = [];
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
resetForm();
|
resetForm();
|
||||||
}
|
}
|
||||||
@ -128,6 +712,8 @@ const resetForm = () => {
|
|||||||
formRef.value.resetFields();
|
formRef.value.resetFields();
|
||||||
}
|
}
|
||||||
Object.assign(formData, defaultFormData);
|
Object.assign(formData, defaultFormData);
|
||||||
|
treeData.value = [];
|
||||||
|
addingNewNode.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleCancel = () => {
|
const handleCancel = () => {
|
||||||
@ -151,4 +737,48 @@ defineExpose({
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss"></style>
|
<style scoped lang="scss">
|
||||||
|
.config-tree-container {
|
||||||
|
margin-top: 16px;
|
||||||
|
|
||||||
|
.add-node-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tree-node-wrapper {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
padding-right: 8px;
|
||||||
|
|
||||||
|
.tree-node-title {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tree-node-actions {
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确保鼠标悬停时显示操作按钮
|
||||||
|
.tree-node-wrapper:hover {
|
||||||
|
.tree-node-actions {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 子节点添加区域样式
|
||||||
|
.add-child-node-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 8px 0 8px 24px;
|
||||||
|
margin-top: 4px;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="config-management-search">
|
<div class="content-search">
|
||||||
<BasicSearch
|
<BasicSearch
|
||||||
ref="basicSearchRef"
|
ref="basicSearchRef"
|
||||||
:searchList="searchList"
|
:searchList="searchList"
|
||||||
@ -10,9 +10,7 @@
|
|||||||
>
|
>
|
||||||
<template #actions>
|
<template #actions>
|
||||||
<a-tooltip title="新增配置">
|
<a-tooltip title="新增配置">
|
||||||
<a-button @click="props.handleAdd" type="primary">
|
<a-button @click="props.handleAdd" type="primary"> 新增沿程配置 </a-button>
|
||||||
新增配置
|
|
||||||
</a-button>
|
|
||||||
</a-tooltip>
|
</a-tooltip>
|
||||||
</template>
|
</template>
|
||||||
</BasicSearch>
|
</BasicSearch>
|
||||||
@ -20,8 +18,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, computed, onMounted } from 'vue';
|
import { ref, computed, onMounted } from "vue";
|
||||||
import BasicSearch from '@/components/BasicSearch/index.vue';
|
import BasicSearch from "@/components/BasicSearch/index.vue";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
handleAdd: () => void;
|
handleAdd: () => void;
|
||||||
@ -30,28 +28,36 @@ interface Props {
|
|||||||
const props = defineProps<Props>();
|
const props = defineProps<Props>();
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: 'reset', values: any): void;
|
(e: "reset", values: any): void;
|
||||||
(e: 'searchFinish', values: any): void;
|
(e: "searchFinish", values: any): void;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const initSearchData = {
|
const initSearchData = {
|
||||||
configName: ''
|
configName: "",
|
||||||
};
|
};
|
||||||
|
|
||||||
const searchData = ref<any>({ ...initSearchData });
|
const searchData = ref<any>({ ...initSearchData });
|
||||||
const searchList: any = computed(() => [
|
const searchList: any = computed(() => [
|
||||||
{
|
{
|
||||||
type: 'Input',
|
type: "Input",
|
||||||
name: 'configName',
|
name: "name",
|
||||||
label: '配置项名称',
|
label: "沿程配置名称",
|
||||||
fieldProps: {
|
fieldProps: {
|
||||||
allowClear: true
|
allowClear: true,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
type: "Input",
|
||||||
|
name: "rvnm",
|
||||||
|
label: "所在河段",
|
||||||
|
fieldProps: {
|
||||||
|
allowClear: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const onSearchFinish = (values: any) => {
|
const onSearchFinish = (values: any) => {
|
||||||
emit('searchFinish', values);
|
emit("searchFinish", values);
|
||||||
};
|
};
|
||||||
|
|
||||||
const onValuesChange = (changedValues: any, allValues: any) => {
|
const onValuesChange = (changedValues: any, allValues: any) => {
|
||||||
@ -59,11 +65,11 @@ const onValuesChange = (changedValues: any, allValues: any) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleReset = () => {
|
const handleReset = () => {
|
||||||
emit('reset', initSearchData);
|
emit("reset", initSearchData);
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
emit('searchFinish', initSearchData);
|
emit("searchFinish", initSearchData);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss"></style>
|
<style lang="scss"></style>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<!-- d:\wordpack\WholeProcessPlatform\frontend\src\views\system\map\components\ConfigManagement\index.vue -->
|
<!-- d:\wordpack\WholeProcessPlatform\frontend\src\views\system\map\components\ConfigManagement\index.vue -->
|
||||||
<template>
|
<template>
|
||||||
<div class="config-management">
|
<div class="content">
|
||||||
<ConfigManagementSearch
|
<ConfigManagementSearch
|
||||||
ref="configManagementSearch"
|
ref="configManagementSearch"
|
||||||
:handle-add="handleAdd"
|
:handle-add="handleAdd"
|
||||||
@ -12,23 +12,22 @@
|
|||||||
:data="dataSource"
|
:data="dataSource"
|
||||||
:list-url="fetchConfigData"
|
:list-url="fetchConfigData"
|
||||||
:search-params="searchParams"
|
:search-params="searchParams"
|
||||||
:enable-row-selection="true"
|
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
>
|
>
|
||||||
<template #bodyCell="{ column, record }">
|
<template #bodyCell="{ column, record }">
|
||||||
<template v-if="column.key === 'action'">
|
<template v-if="column.key === 'action'">
|
||||||
<a-space>
|
<div class="flex gap-[6px]">
|
||||||
<a-button type="link" size="small" @click="handleEdit(record)"
|
<a-button class="!p-0" type="link" size="small" @click="handleEdit(record)"
|
||||||
>编辑</a-button
|
>编辑</a-button
|
||||||
>
|
>
|
||||||
<a-button
|
<a-button
|
||||||
|
class="!p-0"
|
||||||
type="link"
|
type="link"
|
||||||
size="small"
|
size="small"
|
||||||
danger
|
danger
|
||||||
@click="handleDelete(record)"
|
@click="handleDelete(record)"
|
||||||
>删除</a-button
|
>删除</a-button
|
||||||
>
|
>
|
||||||
</a-space>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="column.key === 'configType'">
|
<template v-if="column.key === 'configType'">
|
||||||
<a-tag :color="getConfigTypeColor(record.configType)">
|
<a-tag :color="getConfigTypeColor(record.configType)">
|
||||||
@ -48,50 +47,69 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue';
|
import { ref } from "vue";
|
||||||
import BasicTable from '@/components/BasicTable/index.vue';
|
import BasicTable from "@/components/BasicTable/index.vue";
|
||||||
import ConfigManagementSearch from './ConfigManagementSearch.vue';
|
import ConfigManagementSearch from "./ConfigManagementSearch.vue";
|
||||||
import ConfigManagementForm from './ConfigManagementForm.vue';
|
import ConfigManagementForm from "./ConfigManagementForm.vue";
|
||||||
import { message } from 'ant-design-vue';
|
import { message } from "ant-design-vue";
|
||||||
|
|
||||||
// 表格列配置
|
// 表格列配置
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
title: '配置项名称',
|
title: "序号",
|
||||||
dataIndex: 'configName',
|
dataIndex: "index",
|
||||||
key: 'configName',
|
key: "index",
|
||||||
width: 150
|
width: 60,
|
||||||
|
align: "center",
|
||||||
|
customRender: ({ text, record, index }) => index + 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '配置类型',
|
title: "沿程配置名称",
|
||||||
key: 'configType',
|
dataIndex: "name",
|
||||||
dataIndex: 'configType',
|
key: "name",
|
||||||
width: 120
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '配置值',
|
|
||||||
dataIndex: 'configValue',
|
|
||||||
key: 'configValue',
|
|
||||||
ellipsis: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '描述',
|
|
||||||
dataIndex: 'description',
|
|
||||||
key: 'description',
|
|
||||||
ellipsis: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '更新时间',
|
|
||||||
dataIndex: 'updateTime',
|
|
||||||
key: 'updateTime',
|
|
||||||
width: 180
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '操作',
|
|
||||||
key: 'action',
|
|
||||||
width: 150,
|
width: 150,
|
||||||
fixed: 'right'
|
},
|
||||||
}
|
{
|
||||||
|
title: "配置编码",
|
||||||
|
key: "code",
|
||||||
|
dataIndex: "code",
|
||||||
|
width: 120,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "所在河段",
|
||||||
|
dataIndex: "rvnm",
|
||||||
|
key: "rvnm",
|
||||||
|
ellipsis: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "创建人",
|
||||||
|
key: "recordUser",
|
||||||
|
dataIndex: "recordUser",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "创建时间",
|
||||||
|
key: "recordTime",
|
||||||
|
dataIndex: "recordTime",
|
||||||
|
width: 150,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "更新时间",
|
||||||
|
key: "modifyTime",
|
||||||
|
dataIndex: "modifyTime",
|
||||||
|
width: 150,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "备注",
|
||||||
|
dataIndex: "remark",
|
||||||
|
key: "remark",
|
||||||
|
width: 360,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "操作",
|
||||||
|
key: "action",
|
||||||
|
width: 120,
|
||||||
|
fixed: "right",
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
// 搜索参数
|
// 搜索参数
|
||||||
@ -101,52 +119,393 @@ const currentRecord = ref<any | null>(null);
|
|||||||
const editModalVisible = ref(false);
|
const editModalVisible = ref(false);
|
||||||
|
|
||||||
// 数据源
|
// 数据源
|
||||||
const dataSource = ref([]);
|
const dataSource = ref([
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "D0E1293DB0324E729AB074D8BD61C745",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "0001-01-01 00:00:00",
|
||||||
|
modifyTime: "0001-01-01 00:00:00",
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "雅砻江通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY176",
|
||||||
|
rvnm: "雅砻江",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "E8E0425BFA8143BCB2D0FC9C45FE2853",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "0001-01-01 00:00:00",
|
||||||
|
modifyTime: "0001-01-01 00:00:00",
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "澜沧江干流通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY126",
|
||||||
|
rvnm: "澜沧江干流",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "9AE90200DF324B6981C85129D5288C8E",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:08",
|
||||||
|
modifyTime: null,
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "清江通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY109",
|
||||||
|
rvnm: "清江",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "F2EC0A6870534C14810AECA990E092D6",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:09",
|
||||||
|
modifyTime: "2024-07-08 16:25:05",
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "澧水通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY110",
|
||||||
|
rvnm: "澧水",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "F99C360B47B14F10AAE688534ECAFA87",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:10",
|
||||||
|
modifyTime: "2024-06-14 15:25:10",
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "红水河通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY130",
|
||||||
|
rvnm: "红水河",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "3E8E27C07F5B41D9A3915E969D9E1BB8",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:11",
|
||||||
|
modifyTime: "2024-07-18 17:29:22",
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "大渡河通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY148",
|
||||||
|
rvnm: "大渡河",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "BB4FBC900D2C462080BDC7638EB4459F",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:12",
|
||||||
|
modifyTime: null,
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "洞庭湖环湖区通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY155",
|
||||||
|
rvnm: "洞庭湖环湖区",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "8E707E0628414DC2BFC42CFAA32D2A76",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:13",
|
||||||
|
modifyTime: "2024-05-29 10:08:26",
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "丰满以下通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY168",
|
||||||
|
rvnm: "丰满以下",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "BB911176EE164E3F85B6DABF1F6C3F14",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:13",
|
||||||
|
modifyTime: null,
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "丰满以上通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY169",
|
||||||
|
rvnm: "丰满以上",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "3246C417FA544C3592FA367B15F90927",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:15",
|
||||||
|
modifyTime: "2024-07-08 16:14:42",
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "南盘江通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY178",
|
||||||
|
rvnm: "南盘江",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "2589AC1BFB5549F2AD497D3EDB7C45A9",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:16",
|
||||||
|
modifyTime: null,
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "瓯江温溪以上通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY194",
|
||||||
|
rvnm: "瓯江温溪以上",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "2A450ADE4A884F90A35866C89FF9A012",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:16",
|
||||||
|
modifyTime: null,
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "富春江水库以上通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY195",
|
||||||
|
rvnm: "富春江水库以上",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "761683529B374922864910CD334BE7D3",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:17",
|
||||||
|
modifyTime: null,
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "黄河干流中游通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY1C",
|
||||||
|
rvnm: "黄河干流中游",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "2A64FFA5D7944CE9A7D3C844F5A7B7AA",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:18",
|
||||||
|
modifyTime: "2024-08-07 10:29:42",
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "黄河干流上游通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY1U",
|
||||||
|
rvnm: "黄河干流上游",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "1B0ECE32A8F74E47B0B5EB6774476728",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:19",
|
||||||
|
modifyTime: null,
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "长江干流通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY208",
|
||||||
|
rvnm: "长江干流",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "96600AD12B9645D9A86B0754BE03F9C3",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:20",
|
||||||
|
modifyTime: null,
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "资水通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY214",
|
||||||
|
rvnm: "资水",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "2B70280D51D44398815C99EF700A6B55",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:20",
|
||||||
|
modifyTime: null,
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "沅水通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY216",
|
||||||
|
rvnm: "沅水",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "F9CD484CBE254AD0A7B7D3D058443455",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:21",
|
||||||
|
modifyTime: null,
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "赣江通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY217",
|
||||||
|
rvnm: "赣江",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "0AA0EA96FA5649FEA3B7881FC6F0C85C",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:22",
|
||||||
|
modifyTime: null,
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "黔浔江及西江通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY25",
|
||||||
|
rvnm: "黔浔江及西江",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: "533473B0349546CC82B50C21CF843101",
|
||||||
|
recordUser: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
recordTime: "2023-08-04 17:46:23",
|
||||||
|
modifyTime: null,
|
||||||
|
displayRecordUser: null,
|
||||||
|
isolateType: null,
|
||||||
|
name: "闽江上游通用配置",
|
||||||
|
code: "common",
|
||||||
|
rvcd: "SJLY33",
|
||||||
|
rvnm: "闽江上游",
|
||||||
|
remark: null,
|
||||||
|
recordUserName: "20210802-1454-3403-3753-a22ed7009522",
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
// 获取配置类型标签颜色
|
// 获取配置类型标签颜色
|
||||||
const getConfigTypeColor = (type: string) => {
|
const getConfigTypeColor = (type: string) => {
|
||||||
const colorMap: Record<string, string> = {
|
const colorMap: Record<string, string> = {
|
||||||
系统配置: 'blue',
|
系统配置: "blue",
|
||||||
显示配置: 'green',
|
显示配置: "green",
|
||||||
业务配置: 'orange'
|
业务配置: "orange",
|
||||||
};
|
};
|
||||||
return colorMap[type] || 'default';
|
return colorMap[type] || "default";
|
||||||
};
|
};
|
||||||
|
|
||||||
// 模拟数据获取函数
|
// 模拟数据获取函数
|
||||||
const fetchConfigData = (params: any) => {
|
const fetchConfigData = (params: any) => {
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
resolve({
|
resolve({
|
||||||
data: {
|
data: {
|
||||||
records: [
|
records: [
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
configName: '默认缩放级别',
|
configName: "默认缩放级别",
|
||||||
configType: '显示配置',
|
configType: "显示配置",
|
||||||
configValue: '10',
|
configValue: "10",
|
||||||
description: '地图默认显示的缩放级别',
|
description: "地图默认显示的缩放级别",
|
||||||
updateTime: '2023-05-15 10:30:00'
|
updateTime: "2023-05-15 10:30:00",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 2,
|
id: 2,
|
||||||
configName: '数据刷新间隔',
|
configName: "数据刷新间隔",
|
||||||
configType: '系统配置',
|
configType: "系统配置",
|
||||||
configValue: '300',
|
configValue: "300",
|
||||||
description: '数据自动刷新的时间间隔(秒)',
|
description: "数据自动刷新的时间间隔(秒)",
|
||||||
updateTime: '2023-06-20 14:45:00'
|
updateTime: "2023-06-20 14:45:00",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 3,
|
id: 3,
|
||||||
configName: '预警阈值',
|
configName: "预警阈值",
|
||||||
configType: '业务配置',
|
configType: "业务配置",
|
||||||
configValue: '85%',
|
configValue: "85%",
|
||||||
description: '触发预警的阈值百分比',
|
description: "触发预警的阈值百分比",
|
||||||
updateTime: '2023-07-10 09:15:00'
|
updateTime: "2023-07-10 09:15:00",
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
total: 3
|
total: 3,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
}, 500);
|
}, 500);
|
||||||
});
|
});
|
||||||
@ -176,11 +535,6 @@ const onSearchFinish = (values: any) => {
|
|||||||
// 重置
|
// 重置
|
||||||
const handleReset = (params: any) => {};
|
const handleReset = (params: any) => {};
|
||||||
|
|
||||||
// 选择变化处理
|
|
||||||
const handleSelectionChange = (selectedRows: any[]) => {
|
|
||||||
console.log('选中的行:', selectedRows);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 表单取消
|
// 表单取消
|
||||||
const editModalCancel = () => {
|
const editModalCancel = () => {
|
||||||
editModalVisible.value = false;
|
editModalVisible.value = false;
|
||||||
|
|||||||
@ -29,16 +29,63 @@
|
|||||||
placeholder="请输入图层编码"
|
placeholder="请输入图层编码"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="标签显示级别" name="treeLevel">
|
<a-form-item label="图层类型" name="type" v-if="isInterface">
|
||||||
|
<a-select
|
||||||
|
:options="typeOpiton"
|
||||||
|
v-model:value="formData.type"
|
||||||
|
:fieldNames="{
|
||||||
|
label: 'dictName',
|
||||||
|
value: 'itemCode',
|
||||||
|
}"
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请输入图层类型"
|
||||||
|
/>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="标签显示级别" name="treeLevel" v-if="!isInterface">
|
||||||
<a-input-number
|
<a-input-number
|
||||||
v-model:value="formData.treeLevel"
|
v-model:value="formData.treeLevel"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
placeholder="请输入标签显示级别"
|
placeholder="请输入标签显示级别"
|
||||||
:min="0"
|
:min="0"
|
||||||
|
:max="24"
|
||||||
:step="1"
|
:step="1"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="备注" name="description">
|
<a-form-item label="锚点接口" name="url" v-if="isInterface">
|
||||||
|
<a-input
|
||||||
|
v-model:value="formData.url"
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请输入锚点接口"
|
||||||
|
/>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item
|
||||||
|
label="三维接口"
|
||||||
|
name="urlThd"
|
||||||
|
v-if="isInterface && formData.type === 'geojson'"
|
||||||
|
>
|
||||||
|
<a-input
|
||||||
|
v-model:value="formData.urlThd"
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请输入三维接口"
|
||||||
|
/>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item
|
||||||
|
label="gisJson"
|
||||||
|
name="paramJson"
|
||||||
|
v-if="isInterface && formData.type === 'geojson'"
|
||||||
|
>
|
||||||
|
<a-textarea
|
||||||
|
rows="4"
|
||||||
|
v-model:value="formData.paramJson"
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请输入gisJson"
|
||||||
|
/>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item
|
||||||
|
label="备注"
|
||||||
|
name="description"
|
||||||
|
v-if="!isInterface || formData.type === 'geojson'"
|
||||||
|
>
|
||||||
<a-textarea
|
<a-textarea
|
||||||
rows="4"
|
rows="4"
|
||||||
v-model:value="formData.description"
|
v-model:value="formData.description"
|
||||||
@ -51,46 +98,42 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, reactive, computed, watch } from 'vue';
|
import { ref, reactive, computed, watch } from "vue";
|
||||||
import { message } from 'ant-design-vue';
|
import { message } from "ant-design-vue";
|
||||||
import type { Rule } from 'ant-design-vue/es/form';
|
import type { Rule } from "ant-design-vue/es/form";
|
||||||
|
import { getDictItemsByCode } from "@/api/dict";
|
||||||
|
|
||||||
// 定义 Props
|
// 定义 Props
|
||||||
interface Props {
|
interface Props {
|
||||||
visible: boolean;
|
visible: boolean;
|
||||||
initialValues?: any | null;
|
initialValues?: any | null;
|
||||||
loading?: boolean;
|
loading?: boolean;
|
||||||
|
isInterface?: boolean;
|
||||||
}
|
}
|
||||||
// 加载状态
|
// 加载状态
|
||||||
const localLoading = ref(false);
|
const localLoading = ref(false);
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
visible: false,
|
visible: false,
|
||||||
initialValues: null,
|
initialValues: null,
|
||||||
loading: false
|
loading: false,
|
||||||
|
isInterface: false,
|
||||||
});
|
});
|
||||||
const modalVisible = computed({
|
const modalVisible = computed({
|
||||||
get: () => props.visible,
|
get: () => props.visible,
|
||||||
set: val => emit('update:visible', val)
|
set: (val) => emit("update:visible", val),
|
||||||
});
|
});
|
||||||
// 定义 Emits
|
// 定义 Emits
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: 'update:visible', value: boolean): void;
|
(e: "update:visible", value: boolean): void;
|
||||||
(e: 'cancel'): void;
|
(e: "cancel"): void;
|
||||||
(e: 'ok', values: any): void;
|
(e: "ok", values: any, type: string): void;
|
||||||
(
|
|
||||||
e: 'preview-click',
|
|
||||||
record: any,
|
|
||||||
type: string,
|
|
||||||
index: number,
|
|
||||||
action: string
|
|
||||||
): void;
|
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
// 表单引用
|
// 表单引用
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
// 1. 新增用于存储手动验证错误信息的响应式变量
|
// 1. 新增用于存储手动验证错误信息的响应式变量
|
||||||
const bodyLengthError = ref<string>('');
|
const bodyLengthError = ref<string>("");
|
||||||
const weightError = ref<string>('');
|
const weightError = ref<string>("");
|
||||||
|
|
||||||
// 表单数据模型
|
// 表单数据模型
|
||||||
const defaultFormData = reactive({
|
const defaultFormData = reactive({
|
||||||
@ -98,16 +141,17 @@ const defaultFormData = reactive({
|
|||||||
title: undefined,
|
title: undefined,
|
||||||
code: undefined,
|
code: undefined,
|
||||||
treeLevel: undefined,
|
treeLevel: undefined,
|
||||||
description: undefined
|
description: undefined,
|
||||||
|
parentId: undefined,
|
||||||
});
|
});
|
||||||
|
const typeOpiton = ref<any>([]);
|
||||||
const formData: any = reactive({ ...defaultFormData });
|
const formData: any = reactive({ ...defaultFormData });
|
||||||
// 验证规则
|
// 验证规则
|
||||||
const rules: Record<string, Rule[]> = {
|
const rules: Record<string, Rule[]> = {
|
||||||
title: [{ required: true, message: '请输入图层名称', trigger: 'blur' }],
|
title: [{ required: true, message: "请输入图层名称", trigger: "blur" }],
|
||||||
code: [{ required: true, message: '请输入图层编码', trigger: 'blur' }],
|
code: [{ required: true, message: "请输入图层编码", trigger: "blur" }],
|
||||||
treeLevel: [
|
type: [{ required: true, message: "请输入图层类型", trigger: "change" }],
|
||||||
{ required: true, message: '请输入标签显示级别', trigger: 'blur' }
|
treeLevel: [{ required: true, message: "请输入标签显示级别", trigger: "blur" }],
|
||||||
]
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 计算是否为编辑模式
|
// 计算是否为编辑模式
|
||||||
@ -119,20 +163,23 @@ const handleOk = async () => {
|
|||||||
await formRef.value.validate();
|
await formRef.value.validate();
|
||||||
// 准备提交数据
|
// 准备提交数据
|
||||||
const submitValues = {
|
const submitValues = {
|
||||||
...formData
|
...formData,
|
||||||
};
|
};
|
||||||
emit('ok', submitValues);
|
emit("ok", submitValues, "form");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Validate Failed:', error);
|
console.error("Validate Failed:", error);
|
||||||
message.error('请检查表单填写是否正确');
|
message.error("请检查表单填写是否正确");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const initForm = () => {
|
const initForm = () => {
|
||||||
if (props.initialValues) {
|
if (props.initialValues) {
|
||||||
// --- 编辑模式:回填数据 ---
|
// --- 编辑模式:回填数据 ---
|
||||||
const values = props.initialValues;
|
const values = props.initialValues;
|
||||||
|
if (props.isInterface) {
|
||||||
|
initType();
|
||||||
|
}
|
||||||
// 回填其他普通字段
|
// 回填其他普通字段
|
||||||
Object.keys(formData).forEach(key => {
|
Object.keys(formData).forEach((key) => {
|
||||||
// 确保字段存在于 initialValues 中再赋值,避免覆盖默认值
|
// 确保字段存在于 initialValues 中再赋值,避免覆盖默认值
|
||||||
if (values.hasOwnProperty(key)) {
|
if (values.hasOwnProperty(key)) {
|
||||||
formData[key] = values[key];
|
formData[key] = values[key];
|
||||||
@ -142,6 +189,11 @@ const initForm = () => {
|
|||||||
resetForm();
|
resetForm();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
const initType = () => {
|
||||||
|
getDictItemsByCode({ dictCode: "LayerTypeCode" }).then((res) => {
|
||||||
|
typeOpiton.value = res.data;
|
||||||
|
});
|
||||||
|
};
|
||||||
// 重置表单
|
// 重置表单
|
||||||
const resetForm = () => {
|
const resetForm = () => {
|
||||||
if (formRef.value) {
|
if (formRef.value) {
|
||||||
@ -149,20 +201,20 @@ const resetForm = () => {
|
|||||||
}
|
}
|
||||||
Object.assign(formData, defaultFormData);
|
Object.assign(formData, defaultFormData);
|
||||||
// 清空手动验证的错误信息
|
// 清空手动验证的错误信息
|
||||||
bodyLengthError.value = '';
|
bodyLengthError.value = "";
|
||||||
weightError.value = '';
|
weightError.value = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
// 取消操作
|
// 取消操作
|
||||||
const handleCancel = () => {
|
const handleCancel = () => {
|
||||||
emit('update:visible', false);
|
emit("update:visible", false);
|
||||||
emit('cancel');
|
emit("cancel");
|
||||||
resetForm();
|
resetForm();
|
||||||
};
|
};
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.visible,
|
() => props.visible,
|
||||||
newVisible => {
|
(newVisible) => {
|
||||||
if (newVisible) {
|
if (newVisible) {
|
||||||
initForm();
|
initForm();
|
||||||
}
|
}
|
||||||
@ -171,7 +223,7 @@ watch(
|
|||||||
);
|
);
|
||||||
// 暴露变量
|
// 暴露变量
|
||||||
defineExpose({
|
defineExpose({
|
||||||
localLoading
|
localLoading,
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="guoYuSheShiShuJuTianBao-search">
|
<div class="content-search">
|
||||||
<BasicSearch
|
<BasicSearch
|
||||||
ref="basicSearchRef"
|
ref="basicSearchRef"
|
||||||
:searchList="searchList"
|
:searchList="searchList"
|
||||||
@ -10,9 +10,7 @@
|
|||||||
>
|
>
|
||||||
<template #actions>
|
<template #actions>
|
||||||
<a-tooltip title="新增图层">
|
<a-tooltip title="新增图层">
|
||||||
<a-button @click="props.handleAdd" type="primary">
|
<a-button @click="props.handleAdd" type="primary"> 新增图层 </a-button>
|
||||||
新增图层
|
|
||||||
</a-button>
|
|
||||||
</a-tooltip>
|
</a-tooltip>
|
||||||
</template>
|
</template>
|
||||||
</BasicSearch>
|
</BasicSearch>
|
||||||
@ -20,40 +18,40 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, computed, onMounted, watch } from 'vue';
|
import { ref, computed, onMounted, watch } from "vue";
|
||||||
import BasicSearch from '@/components/BasicSearch/index.vue'; // 确保路径正确
|
import BasicSearch from "@/components/BasicSearch/index.vue"; // 确保路径正确
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
handleAdd: () => void;
|
handleAdd: (record: any) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = defineProps<Props>();
|
const props = defineProps<Props>();
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: 'reset', values: any): void;
|
(e: "reset", values: any): void;
|
||||||
(e: 'searchFinish', values: any): void;
|
(e: "searchFinish", values: any): void;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const initSearchData = {
|
const initSearchData = {
|
||||||
title: ''
|
title: "",
|
||||||
};
|
};
|
||||||
|
|
||||||
const searchData = ref<any>({ ...initSearchData });
|
const searchData = ref<any>({ ...initSearchData });
|
||||||
const searchList: any = computed(() => [
|
const searchList: any = computed(() => [
|
||||||
{
|
{
|
||||||
type: 'Input',
|
type: "Input",
|
||||||
name: 'title',
|
name: "title",
|
||||||
label: '图层名称',
|
label: "图层名称",
|
||||||
fieldProps: {
|
fieldProps: {
|
||||||
allowClear: true
|
allowClear: true,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
]);
|
]);
|
||||||
// --- Methods ---
|
// --- Methods ---
|
||||||
|
|
||||||
// 2. 搜索表单逻辑
|
// 2. 搜索表单逻辑
|
||||||
const onSearchFinish = (values: any) => {
|
const onSearchFinish = (values: any) => {
|
||||||
emit('searchFinish', values);
|
emit("searchFinish", values);
|
||||||
};
|
};
|
||||||
// 值改变
|
// 值改变
|
||||||
const onValuesChange = (changedValues: any, allValues: any) => {
|
const onValuesChange = (changedValues: any, allValues: any) => {
|
||||||
@ -61,11 +59,11 @@ const onValuesChange = (changedValues: any, allValues: any) => {
|
|||||||
};
|
};
|
||||||
// 重置
|
// 重置
|
||||||
const handleReset = () => {
|
const handleReset = () => {
|
||||||
emit('reset', initSearchData);
|
emit("reset", initSearchData);
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
emit('searchFinish', initSearchData);
|
emit("searchFinish", initSearchData);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss"></style>
|
<style scoped lang="scss"></style>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -137,7 +137,7 @@ const modalVisible = computed({
|
|||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: "update:visible", value: boolean): void;
|
(e: "update:visible", value: boolean): void;
|
||||||
(e: "cancel"): void;
|
(e: "cancel"): void;
|
||||||
(e: "ok", values: any): void;
|
(e: "ok", values: any, type: string): void;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
@ -167,8 +167,9 @@ const handleOk = async () => {
|
|||||||
await formRef.value.validate();
|
await formRef.value.validate();
|
||||||
const submitValues = {
|
const submitValues = {
|
||||||
...formData,
|
...formData,
|
||||||
|
dataType: 2,
|
||||||
};
|
};
|
||||||
emit("ok", submitValues);
|
emit("ok", submitValues, "form");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Validate Failed:", error);
|
console.error("Validate Failed:", error);
|
||||||
message.error("请检查表单填写是否正确");
|
message.error("请检查表单填写是否正确");
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="legend-data-search">
|
<div class="content-search">
|
||||||
<BasicSearch
|
<BasicSearch
|
||||||
ref="basicSearchRef"
|
ref="basicSearchRef"
|
||||||
:searchList="searchList"
|
:searchList="searchList"
|
||||||
@ -23,6 +23,7 @@ import BasicSearch from "@/components/BasicSearch/index.vue";
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
handleAdd: () => void;
|
handleAdd: () => void;
|
||||||
|
options: any[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = defineProps<Props>();
|
const props = defineProps<Props>();
|
||||||
@ -34,9 +35,9 @@ const emit = defineEmits<{
|
|||||||
|
|
||||||
const initSearchData = {
|
const initSearchData = {
|
||||||
name: "",
|
name: "",
|
||||||
parentName: "",
|
parentId: "",
|
||||||
};
|
};
|
||||||
|
const options = ref<any>([]);
|
||||||
const searchData = ref<any>({ ...initSearchData });
|
const searchData = ref<any>({ ...initSearchData });
|
||||||
const searchList: any = computed(() => [
|
const searchList: any = computed(() => [
|
||||||
{
|
{
|
||||||
@ -48,9 +49,11 @@ const searchList: any = computed(() => [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "Select",
|
type: "TreeSelect",
|
||||||
name: "code",
|
name: "parentId",
|
||||||
label: "父级图例",
|
label: "父级图例",
|
||||||
|
fieldNames: { label: "name", value: "id", children: "childrenList" },
|
||||||
|
options: props.options,
|
||||||
fieldProps: {
|
fieldProps: {
|
||||||
allowClear: true,
|
allowClear: true,
|
||||||
},
|
},
|
||||||
@ -68,9 +71,8 @@ const onValuesChange = (changedValues: any, allValues: any) => {
|
|||||||
const handleReset = () => {
|
const handleReset = () => {
|
||||||
emit("reset", initSearchData);
|
emit("reset", initSearchData);
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
emit("searchFinish", initSearchData);
|
emit("searchFinish", initSearchData);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss"></style>
|
<style scoped lang="scss"></style>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -81,7 +81,7 @@ const modalVisible = computed({
|
|||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: "update:visible", value: boolean): void;
|
(e: "update:visible", value: boolean): void;
|
||||||
(e: "cancel"): void;
|
(e: "cancel"): void;
|
||||||
(e: "ok", values: any): void;
|
(e: "ok", values: any, record: any): void;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
@ -108,8 +108,9 @@ const handleOk = async () => {
|
|||||||
await formRef.value.validate();
|
await formRef.value.validate();
|
||||||
const submitValues = {
|
const submitValues = {
|
||||||
...formData,
|
...formData,
|
||||||
|
dataType: 1,
|
||||||
};
|
};
|
||||||
emit("ok", submitValues);
|
emit("ok", submitValues, "form");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Validate Failed:", error);
|
console.error("Validate Failed:", error);
|
||||||
message.error("请检查表单填写是否正确");
|
message.error("请检查表单填写是否正确");
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="legend-structure-search">
|
<div class="content-search">
|
||||||
<BasicSearch
|
<BasicSearch
|
||||||
ref="basicSearchRef"
|
ref="basicSearchRef"
|
||||||
:searchList="searchList"
|
:searchList="searchList"
|
||||||
@ -22,7 +22,7 @@ import { ref, computed, onMounted } from "vue";
|
|||||||
import BasicSearch from "@/components/BasicSearch/index.vue";
|
import BasicSearch from "@/components/BasicSearch/index.vue";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
handleAdd: () => void;
|
handleAdd: (record: any) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = defineProps<Props>();
|
const props = defineProps<Props>();
|
||||||
@ -64,4 +64,4 @@ onMounted(() => {
|
|||||||
emit("searchFinish", initSearchData);
|
emit("searchFinish", initSearchData);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss"></style>
|
<style scoped lang="scss"></style>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="station-management-search">
|
<div class="content-search">
|
||||||
<BasicSearch
|
<BasicSearch
|
||||||
ref="basicSearchRef"
|
ref="basicSearchRef"
|
||||||
:searchList="searchList"
|
:searchList="searchList"
|
||||||
@ -10,9 +10,7 @@
|
|||||||
>
|
>
|
||||||
<template #actions>
|
<template #actions>
|
||||||
<a-tooltip title="新增电站">
|
<a-tooltip title="新增电站">
|
||||||
<a-button @click="props.handleAdd" type="primary">
|
<a-button @click="props.handleAdd" type="primary"> 新增电站 </a-button>
|
||||||
新增电站
|
|
||||||
</a-button>
|
|
||||||
</a-tooltip>
|
</a-tooltip>
|
||||||
</template>
|
</template>
|
||||||
</BasicSearch>
|
</BasicSearch>
|
||||||
@ -20,8 +18,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, computed, onMounted } from 'vue';
|
import { ref, computed, onMounted } from "vue";
|
||||||
import BasicSearch from '@/components/BasicSearch/index.vue';
|
import BasicSearch from "@/components/BasicSearch/index.vue";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
handleAdd: () => void;
|
handleAdd: () => void;
|
||||||
@ -30,28 +28,28 @@ interface Props {
|
|||||||
const props = defineProps<Props>();
|
const props = defineProps<Props>();
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: 'reset', values: any): void;
|
(e: "reset", values: any): void;
|
||||||
(e: 'searchFinish', values: any): void;
|
(e: "searchFinish", values: any): void;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const initSearchData = {
|
const initSearchData = {
|
||||||
stationName: ''
|
stationName: "",
|
||||||
};
|
};
|
||||||
|
|
||||||
const searchData = ref<any>({ ...initSearchData });
|
const searchData = ref<any>({ ...initSearchData });
|
||||||
const searchList: any = computed(() => [
|
const searchList: any = computed(() => [
|
||||||
{
|
{
|
||||||
type: 'Input',
|
type: "Input",
|
||||||
name: 'stationName',
|
name: "stationName",
|
||||||
label: '电站名称',
|
label: "电站名称",
|
||||||
fieldProps: {
|
fieldProps: {
|
||||||
allowClear: true
|
allowClear: true,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const onSearchFinish = (values: any) => {
|
const onSearchFinish = (values: any) => {
|
||||||
emit('searchFinish', values);
|
emit("searchFinish", values);
|
||||||
};
|
};
|
||||||
|
|
||||||
const onValuesChange = (changedValues: any, allValues: any) => {
|
const onValuesChange = (changedValues: any, allValues: any) => {
|
||||||
@ -59,11 +57,11 @@ const onValuesChange = (changedValues: any, allValues: any) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleReset = () => {
|
const handleReset = () => {
|
||||||
emit('reset', initSearchData);
|
emit("reset", initSearchData);
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
emit('searchFinish', initSearchData);
|
emit("searchFinish", initSearchData);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss"></style>
|
<style lang="scss"></style>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<!-- d:\wordpack\WholeProcessPlatform\frontend\src\views\system\map\components\StationManagement\index.vue -->
|
<!-- d:\wordpack\WholeProcessPlatform\frontend\src\views\system\map\components\StationManagement\index.vue -->
|
||||||
<template>
|
<template>
|
||||||
<div class="station-management">
|
<div class="content">
|
||||||
<StationManagementSearch
|
<StationManagementSearch
|
||||||
ref="stationManagementSearch"
|
ref="stationManagementSearch"
|
||||||
:handle-add="handleAdd"
|
:handle-add="handleAdd"
|
||||||
@ -18,21 +18,15 @@
|
|||||||
<template #bodyCell="{ column, record }">
|
<template #bodyCell="{ column, record }">
|
||||||
<template v-if="column.key === 'action'">
|
<template v-if="column.key === 'action'">
|
||||||
<a-space>
|
<a-space>
|
||||||
<a-button type="link" size="small" @click="handleEdit(record)"
|
<a-button type="link" size="small" @click="handleEdit(record)">编辑</a-button>
|
||||||
>编辑</a-button
|
<a-button type="link" size="small" danger @click="handleDelete(record)"
|
||||||
>
|
|
||||||
<a-button
|
|
||||||
type="link"
|
|
||||||
size="small"
|
|
||||||
danger
|
|
||||||
@click="handleDelete(record)"
|
|
||||||
>删除</a-button
|
>删除</a-button
|
||||||
>
|
>
|
||||||
</a-space>
|
</a-space>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="column.key === 'status'">
|
<template v-if="column.key === 'status'">
|
||||||
<a-tag :color="record.status === 'running' ? 'green' : 'red'">
|
<a-tag :color="record.status === 'running' ? 'green' : 'red'">
|
||||||
{{ record.status === 'running' ? '运行中' : '停运' }}
|
{{ record.status === "running" ? "运行中" : "停运" }}
|
||||||
</a-tag>
|
</a-tag>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
@ -48,50 +42,50 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue';
|
import { ref } from "vue";
|
||||||
import BasicTable from '@/components/BasicTable/index.vue';
|
import BasicTable from "@/components/BasicTable/index.vue";
|
||||||
import StationManagementSearch from './StationManagementSearch.vue';
|
import StationManagementSearch from "./StationManagementSearch.vue";
|
||||||
import StationManagementForm from './StationManagementForm.vue';
|
import StationManagementForm from "./StationManagementForm.vue";
|
||||||
import { message } from 'ant-design-vue';
|
import { message } from "ant-design-vue";
|
||||||
|
|
||||||
// 表格列配置
|
// 表格列配置
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
title: '电站名称',
|
title: "电站名称",
|
||||||
dataIndex: 'stationName',
|
dataIndex: "stationName",
|
||||||
key: 'stationName',
|
key: "stationName",
|
||||||
width: 150
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '所属流域',
|
|
||||||
dataIndex: 'basin',
|
|
||||||
key: 'basin',
|
|
||||||
width: 120
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '装机容量(MW)',
|
|
||||||
dataIndex: 'capacity',
|
|
||||||
key: 'capacity',
|
|
||||||
width: 120
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '状态',
|
|
||||||
key: 'status',
|
|
||||||
dataIndex: 'status',
|
|
||||||
width: 100
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '位置坐标',
|
|
||||||
dataIndex: 'coordinates',
|
|
||||||
key: 'coordinates',
|
|
||||||
ellipsis: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '操作',
|
|
||||||
key: 'action',
|
|
||||||
width: 150,
|
width: 150,
|
||||||
fixed: 'right'
|
},
|
||||||
}
|
{
|
||||||
|
title: "所属流域",
|
||||||
|
dataIndex: "basin",
|
||||||
|
key: "basin",
|
||||||
|
width: 120,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "装机容量(MW)",
|
||||||
|
dataIndex: "capacity",
|
||||||
|
key: "capacity",
|
||||||
|
width: 120,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "状态",
|
||||||
|
key: "status",
|
||||||
|
dataIndex: "status",
|
||||||
|
width: 100,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "位置坐标",
|
||||||
|
dataIndex: "coordinates",
|
||||||
|
key: "coordinates",
|
||||||
|
ellipsis: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "操作",
|
||||||
|
key: "action",
|
||||||
|
width: 150,
|
||||||
|
fixed: "right",
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
// 搜索参数
|
// 搜索参数
|
||||||
@ -105,38 +99,38 @@ const dataSource = ref([]);
|
|||||||
|
|
||||||
// 模拟数据获取函数
|
// 模拟数据获取函数
|
||||||
const fetchStationData = (params: any) => {
|
const fetchStationData = (params: any) => {
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
resolve({
|
resolve({
|
||||||
data: {
|
data: {
|
||||||
records: [
|
records: [
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
stationName: '三峡电站',
|
stationName: "三峡电站",
|
||||||
basin: '长江流域',
|
basin: "长江流域",
|
||||||
capacity: 22500,
|
capacity: 22500,
|
||||||
status: 'running',
|
status: "running",
|
||||||
coordinates: '111.29,30.83'
|
coordinates: "111.29,30.83",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 2,
|
id: 2,
|
||||||
stationName: '葛洲坝电站',
|
stationName: "葛洲坝电站",
|
||||||
basin: '长江流域',
|
basin: "长江流域",
|
||||||
capacity: 2715,
|
capacity: 2715,
|
||||||
status: 'running',
|
status: "running",
|
||||||
coordinates: '111.28,30.75'
|
coordinates: "111.28,30.75",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 3,
|
id: 3,
|
||||||
stationName: '溪洛渡电站',
|
stationName: "溪洛渡电站",
|
||||||
basin: '金沙江流域',
|
basin: "金沙江流域",
|
||||||
capacity: 13860,
|
capacity: 13860,
|
||||||
status: 'stopped',
|
status: "stopped",
|
||||||
coordinates: '103.65,28.25'
|
coordinates: "103.65,28.25",
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
total: 3
|
total: 3,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
}, 500);
|
}, 500);
|
||||||
});
|
});
|
||||||
@ -168,7 +162,7 @@ const handleReset = (params: any) => {};
|
|||||||
|
|
||||||
// 选择变化处理
|
// 选择变化处理
|
||||||
const handleSelectionChange = (selectedRows: any[]) => {
|
const handleSelectionChange = (selectedRows: any[]) => {
|
||||||
console.log('选中的行:', selectedRows);
|
console.log("选中的行:", selectedRows);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 表单取消
|
// 表单取消
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
:confirm-loading="localLoading"
|
:confirm-loading="localLoading"
|
||||||
width="600px"
|
width="600px"
|
||||||
:destroy-on-close="true"
|
:destroy-on-close="true"
|
||||||
|
ok-text="保存"
|
||||||
@cancel="handleCancel"
|
@cancel="handleCancel"
|
||||||
@ok="handleOk"
|
@ok="handleOk"
|
||||||
>
|
>
|
||||||
@ -15,39 +16,72 @@
|
|||||||
name="edit_form"
|
name="edit_form"
|
||||||
:labelCol="{ span: 5 }"
|
:labelCol="{ span: 5 }"
|
||||||
>
|
>
|
||||||
<a-form-item label="项目名称" name="projectName">
|
<a-form-item label="倾斜影像名称" name="stnm">
|
||||||
<a-input
|
<a-input
|
||||||
v-model:value="formData.projectName"
|
v-model:value="formData.stnm"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
placeholder="请输入项目名称"
|
placeholder="请输入倾斜影像名称"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="拍摄日期" name="captureDate">
|
<a-form-item label="所在河段" name="hbrvcdName">
|
||||||
<a-date-picker
|
|
||||||
v-model:value="formData.captureDate"
|
|
||||||
style="width: 100%"
|
|
||||||
placeholder="请选择拍摄日期"
|
|
||||||
/>
|
|
||||||
</a-form-item>
|
|
||||||
<a-form-item label="文件大小" name="fileSize">
|
|
||||||
<a-input
|
<a-input
|
||||||
v-model:value="formData.fileSize"
|
v-model:value="formData.hbrvcdName"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
placeholder="请输入文件大小"
|
placeholder="请输入所在河段"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="状态" name="status">
|
<a-form-item label="所属电站" name="ennm">
|
||||||
<a-select v-model:value="formData.status" style="width: 100%">
|
<a-input
|
||||||
<a-select-option value="processed">已处理</a-select-option>
|
v-model:value="formData.ennm"
|
||||||
<a-select-option value="pending">待处理</a-select-option>
|
style="width: 100%"
|
||||||
</a-select>
|
placeholder="请输入所属电站"
|
||||||
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="覆盖区域" name="coverageArea">
|
<a-form-item label="倾斜影像URL" name="url">
|
||||||
|
<a-input
|
||||||
|
v-model:value="formData.url"
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请输入倾斜影像URL"
|
||||||
|
/>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="模型坐标" name="location">
|
||||||
<a-textarea
|
<a-textarea
|
||||||
v-model:value="formData.coverageArea"
|
v-model:value="formData.location"
|
||||||
|
:rows="4"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
placeholder="请输入覆盖区域"
|
placeholder="请输入模型坐标"
|
||||||
:rows="3"
|
/>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="模型精度" name="accuracy">
|
||||||
|
<a-input-number
|
||||||
|
v-model:value="formData.accuracy"
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请输入模型精度"
|
||||||
|
:min="0"
|
||||||
|
/>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="边界范围" name="boundary">
|
||||||
|
<a-textarea
|
||||||
|
v-model:value="formData.boundary"
|
||||||
|
:rows="4"
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请输入边界范围"
|
||||||
|
/>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="模型高度" name="height">
|
||||||
|
<a-input-number
|
||||||
|
v-model:value="formData.height"
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请输入模型高度"
|
||||||
|
:min="0"
|
||||||
|
/>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="备注" name="description">
|
||||||
|
<a-textarea
|
||||||
|
v-model:value="formData.description"
|
||||||
|
:rows="4"
|
||||||
|
style="width: 100%"
|
||||||
|
placeholder="请输入备注"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
@ -55,10 +89,10 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, reactive, computed, watch } from 'vue';
|
import { ref, reactive, computed, watch } from "vue";
|
||||||
import { message } from 'ant-design-vue';
|
import { message } from "ant-design-vue";
|
||||||
import type { Rule } from 'ant-design-vue/es/form';
|
import type { Rule } from "ant-design-vue/es/form";
|
||||||
import dayjs from 'dayjs';
|
import dayjs from "dayjs";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
visible: boolean;
|
visible: boolean;
|
||||||
@ -70,18 +104,18 @@ const localLoading = ref(false);
|
|||||||
const props = withDefaults(defineProps<Props>(), {
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
visible: false,
|
visible: false,
|
||||||
initialValues: null,
|
initialValues: null,
|
||||||
loading: false
|
loading: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
const modalVisible = computed({
|
const modalVisible = computed({
|
||||||
get: () => props.visible,
|
get: () => props.visible,
|
||||||
set: val => emit('update:visible', val)
|
set: (val) => emit("update:visible", val),
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: 'update:visible', value: boolean): void;
|
(e: "update:visible", value: boolean): void;
|
||||||
(e: 'cancel'): void;
|
(e: "cancel"): void;
|
||||||
(e: 'ok', values: any): void;
|
(e: "ok", values: any): void;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
@ -92,15 +126,16 @@ const defaultFormData = reactive({
|
|||||||
captureDate: undefined,
|
captureDate: undefined,
|
||||||
fileSize: undefined,
|
fileSize: undefined,
|
||||||
status: undefined,
|
status: undefined,
|
||||||
coverageArea: undefined
|
coverageArea: undefined,
|
||||||
});
|
});
|
||||||
const formData: any = reactive({ ...defaultFormData });
|
const formData: any = reactive({ ...defaultFormData });
|
||||||
|
|
||||||
const rules: Record<string, Rule[]> = {
|
const rules: Record<string, Rule[]> = {
|
||||||
projectName: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
|
stnm: [{ required: true, message: "请输入倾斜影像名称", trigger: "blur" }],
|
||||||
captureDate: [
|
hbrvcdName: [{ required: true, message: "请输入所在河段", trigger: "blur" }],
|
||||||
{ required: true, message: '请选择拍摄日期', trigger: 'change' }
|
ennm: [{ required: true, message: "请输入所属电站", trigger: "blur" }],
|
||||||
]
|
url: [{ required: true, message: "请输入倾斜影像URL", trigger: "blur" }],
|
||||||
|
location: [{ required: true, message: "请输入模型坐标", trigger: "blur" }],
|
||||||
};
|
};
|
||||||
|
|
||||||
const isEdit = computed(() => !!props.initialValues);
|
const isEdit = computed(() => !!props.initialValues);
|
||||||
@ -111,22 +146,22 @@ const handleOk = async () => {
|
|||||||
const submitValues = {
|
const submitValues = {
|
||||||
...formData,
|
...formData,
|
||||||
captureDate: formData.captureDate
|
captureDate: formData.captureDate
|
||||||
? dayjs(formData.captureDate).format('YYYY-MM-DD')
|
? dayjs(formData.captureDate).format("YYYY-MM-DD")
|
||||||
: undefined
|
: undefined,
|
||||||
};
|
};
|
||||||
emit('ok', submitValues);
|
emit("ok", submitValues);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Validate Failed:', error);
|
console.error("Validate Failed:", error);
|
||||||
message.error('请检查表单填写是否正确');
|
message.error("请检查表单填写是否正确");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const initForm = () => {
|
const initForm = () => {
|
||||||
if (props.initialValues) {
|
if (props.initialValues) {
|
||||||
const values = props.initialValues;
|
const values = props.initialValues;
|
||||||
Object.keys(formData).forEach(key => {
|
Object.keys(formData).forEach((key) => {
|
||||||
if (values.hasOwnProperty(key)) {
|
if (values.hasOwnProperty(key)) {
|
||||||
if (key === 'captureDate' && values[key]) {
|
if (key === "captureDate" && values[key]) {
|
||||||
formData[key] = dayjs(values[key]);
|
formData[key] = dayjs(values[key]);
|
||||||
} else {
|
} else {
|
||||||
formData[key] = values[key];
|
formData[key] = values[key];
|
||||||
@ -146,14 +181,14 @@ const resetForm = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleCancel = () => {
|
const handleCancel = () => {
|
||||||
emit('update:visible', false);
|
emit("update:visible", false);
|
||||||
emit('cancel');
|
emit("cancel");
|
||||||
resetForm();
|
resetForm();
|
||||||
};
|
};
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.visible,
|
() => props.visible,
|
||||||
newVisible => {
|
(newVisible) => {
|
||||||
if (newVisible) {
|
if (newVisible) {
|
||||||
initForm();
|
initForm();
|
||||||
}
|
}
|
||||||
@ -162,7 +197,7 @@ watch(
|
|||||||
);
|
);
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
localLoading
|
localLoading,
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="tilt-photo-management-search">
|
<div class="content-search">
|
||||||
<BasicSearch
|
<BasicSearch
|
||||||
ref="basicSearchRef"
|
ref="basicSearchRef"
|
||||||
:searchList="searchList"
|
:searchList="searchList"
|
||||||
@ -10,9 +10,7 @@
|
|||||||
>
|
>
|
||||||
<template #actions>
|
<template #actions>
|
||||||
<a-tooltip title="新增倾斜摄影">
|
<a-tooltip title="新增倾斜摄影">
|
||||||
<a-button @click="props.handleAdd" type="primary">
|
<a-button @click="props.handleAdd" type="primary"> 新增倾斜摄影 </a-button>
|
||||||
新增倾斜摄影
|
|
||||||
</a-button>
|
|
||||||
</a-tooltip>
|
</a-tooltip>
|
||||||
</template>
|
</template>
|
||||||
</BasicSearch>
|
</BasicSearch>
|
||||||
@ -20,8 +18,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, computed, onMounted } from 'vue';
|
import { ref, computed, onMounted } from "vue";
|
||||||
import BasicSearch from '@/components/BasicSearch/index.vue';
|
import BasicSearch from "@/components/BasicSearch/index.vue";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
handleAdd: () => void;
|
handleAdd: () => void;
|
||||||
@ -30,28 +28,36 @@ interface Props {
|
|||||||
const props = defineProps<Props>();
|
const props = defineProps<Props>();
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: 'reset', values: any): void;
|
(e: "reset", values: any): void;
|
||||||
(e: 'searchFinish', values: any): void;
|
(e: "searchFinish", values: any): void;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const initSearchData = {
|
const initSearchData = {
|
||||||
projectName: ''
|
stnm: "",
|
||||||
};
|
};
|
||||||
|
|
||||||
const searchData = ref<any>({ ...initSearchData });
|
const searchData = ref<any>({ ...initSearchData });
|
||||||
const searchList: any = computed(() => [
|
const searchList: any = computed(() => [
|
||||||
{
|
{
|
||||||
type: 'Input',
|
type: "Input",
|
||||||
name: 'projectName',
|
name: "stnm",
|
||||||
label: '项目名称',
|
label: "倾斜影像名称",
|
||||||
fieldProps: {
|
fieldProps: {
|
||||||
allowClear: true
|
allowClear: true,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
type: "Select",
|
||||||
|
name: "hbrvcdName",
|
||||||
|
label: "所在河段",
|
||||||
|
fieldProps: {
|
||||||
|
allowClear: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const onSearchFinish = (values: any) => {
|
const onSearchFinish = (values: any) => {
|
||||||
emit('searchFinish', values);
|
emit("searchFinish", values);
|
||||||
};
|
};
|
||||||
|
|
||||||
const onValuesChange = (changedValues: any, allValues: any) => {
|
const onValuesChange = (changedValues: any, allValues: any) => {
|
||||||
@ -59,11 +65,11 @@ const onValuesChange = (changedValues: any, allValues: any) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleReset = () => {
|
const handleReset = () => {
|
||||||
emit('reset', initSearchData);
|
emit("reset", initSearchData);
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
emit('searchFinish', initSearchData);
|
emit("searchFinish", initSearchData);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss"></style>
|
<style scoped lang="scss"></style>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<!-- d:\wordpack\WholeProcessPlatform\frontend\src\views\system\map\components\TiltPhotoManagement\index.vue -->
|
<!-- d:\wordpack\WholeProcessPlatform\frontend\src\views\system\map\components\TiltPhotoManagement\index.vue -->
|
||||||
<template>
|
<template>
|
||||||
<div class="tilt-photo-management">
|
<div class="content">
|
||||||
<TiltPhotoManagementSearch
|
<TiltPhotoManagementSearch
|
||||||
ref="tiltPhotoManagementSearch"
|
ref="tiltPhotoManagementSearch"
|
||||||
:handle-add="handleAdd"
|
:handle-add="handleAdd"
|
||||||
@ -12,26 +12,26 @@
|
|||||||
:data="dataSource"
|
:data="dataSource"
|
||||||
:list-url="fetchTiltPhotoData"
|
:list-url="fetchTiltPhotoData"
|
||||||
:search-params="searchParams"
|
:search-params="searchParams"
|
||||||
:enable-row-selection="true"
|
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
>
|
>
|
||||||
<template #bodyCell="{ column, record }">
|
<template #bodyCell="{ column, record }">
|
||||||
<template v-if="column.key === 'action'">
|
<template v-if="column.key === 'action'">
|
||||||
<a-space>
|
<div class="flex gap-[6px]">
|
||||||
<a-button type="link" size="small" @click="handlePreview(record)"
|
<a-button
|
||||||
>预览</a-button
|
class="!p-0"
|
||||||
>
|
type="link"
|
||||||
<a-button type="link" size="small" @click="handleEdit(record)"
|
size="small"
|
||||||
|
@click="handleEdit(record)"
|
||||||
>编辑</a-button
|
>编辑</a-button
|
||||||
>
|
>
|
||||||
<a-button
|
<a-button
|
||||||
|
class="!p-0"
|
||||||
type="link"
|
type="link"
|
||||||
size="small"
|
size="small"
|
||||||
danger
|
danger
|
||||||
@click="handleDelete(record)"
|
@click="handleDelete(record)"
|
||||||
>删除</a-button
|
>删除</a-button
|
||||||
>
|
>
|
||||||
</a-space>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="column.key === 'status'">
|
<template v-if="column.key === 'status'">
|
||||||
<a-tag :color="record.status === 'processed' ? 'green' : 'orange'">
|
<a-tag :color="record.status === 'processed' ? 'green' : 'orange'">
|
||||||
@ -60,39 +60,58 @@ import { message } from 'ant-design-vue';
|
|||||||
// 表格列配置
|
// 表格列配置
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
title: '项目名称',
|
title: '序号',
|
||||||
dataIndex: 'projectName',
|
dataIndex: 'index',
|
||||||
key: 'projectName',
|
key: 'index',
|
||||||
|
width: 60,
|
||||||
|
align: 'center',
|
||||||
|
customRender: ({ text, record, index }) => index + 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '倾斜影像名称',
|
||||||
|
dataIndex: 'stnm',
|
||||||
|
key: 'stnm',
|
||||||
width: 150
|
width: 150
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '拍摄日期',
|
title: 'URL',
|
||||||
dataIndex: 'captureDate',
|
dataIndex: 'url',
|
||||||
key: 'captureDate',
|
key: 'url',
|
||||||
|
width: 360
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '所在河段',
|
||||||
|
dataIndex: 'hbrvcdName',
|
||||||
|
key: 'hbrvcdName',
|
||||||
width: 120
|
width: 120
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '文件大小',
|
title: '所属电站',
|
||||||
dataIndex: 'fileSize',
|
key: 'ennm',
|
||||||
key: 'fileSize',
|
dataIndex: 'ennm',
|
||||||
width: 100
|
width: 140
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '状态',
|
title: '创建人',
|
||||||
key: 'status',
|
key: 'recordUser',
|
||||||
dataIndex: 'status',
|
dataIndex: 'recordUser'
|
||||||
width: 100
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '覆盖区域',
|
title: '创建时间',
|
||||||
dataIndex: 'coverageArea',
|
key: 'recordTime',
|
||||||
key: 'coverageArea',
|
dataIndex: 'recordTime',
|
||||||
ellipsis: true
|
width: 150
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '更新时间',
|
||||||
|
key: 'modifyTime',
|
||||||
|
dataIndex: 'modifyTime',
|
||||||
|
width: 150
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '操作',
|
title: '操作',
|
||||||
key: 'action',
|
key: 'action',
|
||||||
width: 200,
|
width: 80,
|
||||||
fixed: 'right'
|
fixed: 'right'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
@ -104,7 +123,728 @@ const currentRecord = ref<any | null>(null);
|
|||||||
const editModalVisible = ref(false);
|
const editModalVisible = ref(false);
|
||||||
|
|
||||||
// 数据源
|
// 数据源
|
||||||
const dataSource = ref([]);
|
const dataSource = ref([
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008640203500000001_GF',
|
||||||
|
recordUser: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
recordTime: '2023-05-18 01:16:30',
|
||||||
|
modifyTime: '2024-11-05 10:59:18',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008640203500000001_GF',
|
||||||
|
stnm: '羊曲光伏区',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing/huanghe/yangQu_YQ-GF_merge/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY1U',
|
||||||
|
hbrvcdName: '黄河干流上游',
|
||||||
|
rstcd: '008640203500000001',
|
||||||
|
ennm: '羊曲',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '08',
|
||||||
|
baseName: '黄河上游干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\n destination: [-925601.0019712645, 5101341.168949657, 3707151.451255355],\n orientation: {\n heading: 3.935777607555498,\n pitch: -0.30960256782642825,\n roll: 6.280804479489018\n },\n center: [100.27966528149938, 35.74512881924376, 2527]\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[100.280085008313,35.7434126745264],[100.274143813334,35.7434126745264],[100.274854725553,35.7449360578545],[100.276936682769,35.746535610349],[100.283233333858,35.7494808181167],[100.285353375656,35.7472084379856],[100.281087902338,35.7437554357753],[100.280085008313,35.7434126745264]]]}}]}',
|
||||||
|
height: 44,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008640203900000001',
|
||||||
|
recordUser: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
recordTime: '2023-05-14 00:02:12',
|
||||||
|
modifyTime: '2024-11-05 10:56:52',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008640203900000001',
|
||||||
|
stnm: '班多',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing/huanghe/banDuo/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY1U',
|
||||||
|
hbrvcdName: '黄河干流上游',
|
||||||
|
rstcd: '008640203900000001',
|
||||||
|
ennm: '班多',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '08',
|
||||||
|
baseName: '黄河上游干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
' {\r\n destination: [-929696.6123032116, 5129200.419350642, 3668757.052689075],\r\n orientation: {\r\n heading: 3.0798081424820065,\r\n pitch: -0.6148159031298439,\r\n roll: 0.000238697395245957\r\n },\r\n center: [100.271729604817, 35.3107902811941, 2800]\r\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[100.276306819621,35.3070198708922],[100.26643399204,35.3070198708922],[100.266505742241,35.3149697931008],[100.272461008877,35.3151850437021],[100.276966921465,35.3151850437021],[100.276966921465,35.3077660729768],[100.276306819621,35.3070198708922]]]}}]}',
|
||||||
|
height: 44,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008640203800000001',
|
||||||
|
recordUser: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
recordTime: '2023-05-14 00:02:12',
|
||||||
|
modifyTime: '2024-11-05 10:56:35',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008640203800000001',
|
||||||
|
stnm: '拉西瓦',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing/huanghe/laXiWa/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY1U',
|
||||||
|
hbrvcdName: '黄河干流上游',
|
||||||
|
rstcd: '008640203800000001',
|
||||||
|
ennm: '拉西瓦',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '08',
|
||||||
|
baseName: '黄河上游干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\r\n destination: [-1002668.01364282, 5065411.889787282, 3736496.3127215244],\r\n orientation: {\r\n heading: 4.485903770759803,\r\n pitch: -0.5306318071338225,\r\n roll: 6.279578857452076\r\n },\r\n center: [101.184897041962, 36.070651370076, 2416.45174914598]\r\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection","name":"lxw_boundary","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[101.177314346395,36.0553063647701],[101.168809017664,36.0686783789251],[101.1787903122448,36.07534306172733],[101.18569389717655,36.07509083882469],[101.1913078908158,36.07363038685621],[101.193688241279,36.0708615649096],[101.177314346395,36.0553063647701]]]}}]}',
|
||||||
|
height: 60,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008640203700000001',
|
||||||
|
recordUser: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
recordTime: '2023-05-14 00:02:12',
|
||||||
|
modifyTime: '2024-11-05 10:56:19',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008640203700000001',
|
||||||
|
stnm: '积石峡',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing/huanghe/jiShiXia/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY1U',
|
||||||
|
hbrvcdName: '黄河干流上游',
|
||||||
|
rstcd: '008640203700000001',
|
||||||
|
ennm: '积石峡',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '08',
|
||||||
|
baseName: '黄河上游干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\r\n destination: [-1139534.4509009295, 5052836.302100392, 3713220.2343443115],\r\n orientation: {\r\n heading: 5.981366614893845,\r\n pitch: -0.5440370528907605,\r\n roll: 6.282077087471317\r\n },\r\n center: [102.704592220253, 35.8259043091842, 1903.53630185407]\r\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection","name":"jsx_boundary","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[102.69530681909,35.8294628842497],[102.693855857125,35.8314865943588],[102.694466788479,35.8333193884199],[102.696452315378,35.8358394802539],[102.709014591339,35.8358394802539],[102.71389317825289,35.81905253997487],[102.71452157450645,35.8150089466911],[102.71217191894967,35.81405269152264],[102.70890004171,35.8142277836168],[102.69530681909,35.8294628842497]]]}}]}',
|
||||||
|
height: 84,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008640202600000001',
|
||||||
|
recordUser: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
recordTime: '2023-05-14 00:02:12',
|
||||||
|
modifyTime: '2024-11-05 10:56:01',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008640202600000001',
|
||||||
|
stnm: '苏只',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing/huanghe/suZhi/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY1U',
|
||||||
|
hbrvcdName: '黄河干流上游',
|
||||||
|
rstcd: '008640202600000001',
|
||||||
|
ennm: '苏只',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: 'other',
|
||||||
|
baseName: '其他',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\r\n destination: [-1106591.5264852343, 5056266.424429915, 3718716.7615750157],\r\n orientation: {\r\n heading: 3.819123893872565,\r\n pitch: -0.6049551059892484,\r\n roll: 6.2807611001840336\r\n },\r\n center: [102.337330495664, 35.8720315291731, 1860.26357494015]\r\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[102.336727944938,35.8659431118492],[102.330113343119,35.8703608062048],[102.340644171285,35.8785514503344],[102.346709546238,35.876354542871],[102.336727944938,35.8659431118492]]]}}]}',
|
||||||
|
height: 38,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008640202300000001',
|
||||||
|
recordUser: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
recordTime: '2023-05-14 00:02:12',
|
||||||
|
modifyTime: '2024-11-05 10:55:46',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008640202300000001',
|
||||||
|
stnm: '龙羊峡',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing/huanghe/longYangXia/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY1U',
|
||||||
|
hbrvcdName: '黄河干流上游',
|
||||||
|
rstcd: '008640202300000001',
|
||||||
|
ennm: '龙羊峡',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '08',
|
||||||
|
baseName: '黄河上游干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
' {\r\n destination: [-978484.4656175541, 5067136.757304259, 3741215.7656669803],\r\n orientation: {\r\n heading: 4.77058620280604,\r\n pitch: -0.773546963192036,\r\n roll: 6.278725977146404\r\n },\r\n center: [100.918351276306, 36.1228958229073, 2558.99829344545]\r\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection","features":[{"geometry":{"coordinates":[[[100.9139009281504,36.12777454726780],[100.9187677105970,36.11856061983825],[100.9220536986745,36.11315168748092],[100.9249463460061,36.11485880837403],[100.9278413602013,36.11721954956330],[100.9282265686215,36.11997360475776],[100.9277455925826,36.12411089425434],[100.9273678902740,36.12541103255819],[100.9271311603723,36.12686307096899],[100.9269482104378,36.12761047963833],[100.9266428533750,36.12830806106303],[100.9254395254174,36.12974059434591],[100.9237363800039,36.13137931925510],[100.9218180310860,36.13220316143079],[100.9192024368766,36.13220316143079],[100.9135570752082,36.13076718414857],[100.9124022180582,36.13034376456862],[100.9139009281504,36.12777454726780]]],"type":"Polygon"},"properties":{"UserID":0},"type":"Feature"}]}',
|
||||||
|
height: 44,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008640200600000001',
|
||||||
|
recordUser: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
recordTime: '2023-05-14 00:02:12',
|
||||||
|
modifyTime: '2024-11-05 10:55:30',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008640200600000001',
|
||||||
|
stnm: '李家峡',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing/huanghe/liJiaXia/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY1U',
|
||||||
|
hbrvcdName: '黄河干流上游',
|
||||||
|
rstcd: '008640200600000001',
|
||||||
|
ennm: '李家峡',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '08',
|
||||||
|
baseName: '黄河上游干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\r\n destination: [-1056838.2342324483, 5050939.864163284, 3740880.678268031],\r\n orientation: {\r\n heading: 4.259448409474915,\r\n pitch: -0.6511273262566135,\r\n roll: 6.279577142738661\r\n },\r\n center: [101.807873387655, 36.1182917300895, 2142.83166118246]\r\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[101.805962184839,36.1167844227604],[101.804733343478,36.118918726177],[101.806134653802,36.1201260089176],[101.809454681338,36.1214842020009],[101.820729839792,36.1214842020009],[101.82124724668,36.1182935261862],[101.809174419274,36.1147579124457],[101.805962184839,36.1167844227604]]]}}]}',
|
||||||
|
height: 40,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008610902100000002',
|
||||||
|
recordUser: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
recordTime: '2023-05-14 00:02:12',
|
||||||
|
modifyTime: '2024-11-05 10:55:12',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008610902100000002',
|
||||||
|
stnm: '永庆',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing/fengman/yq3dt/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY168',
|
||||||
|
hbrvcdName: '丰满以下',
|
||||||
|
rstcd: '008610902100000002',
|
||||||
|
ennm: '永庆',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '12',
|
||||||
|
baseName: '东北',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\r\n destination: [-2749991.4000875778, 3703611.667716356, 4391097.823840936],\r\n orientation: {\r\n heading: 1.9622093407367442,\r\n pitch: -0.535668550857455,\r\n roll: 0.003603576674832354\r\n },\r\n center: [126.60619194343177, 43.7782410182646, 5000.53630185407]\r\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[126.603568306525,43.7719078767057],[126.596380902377,43.7738856187867],[126.603471831301,43.7834366659097],[126.615772422293,43.7796500133887],[126.611431037237,43.7708948868593],[126.603568306525,43.7719078767057]]]}}]}',
|
||||||
|
height: -24,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008610902100000001',
|
||||||
|
recordUser: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
recordTime: '2023-05-14 00:02:12',
|
||||||
|
modifyTime: '2024-11-05 10:54:51',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008610902100000001',
|
||||||
|
stnm: '丰满',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing/fengman/fm3dt/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY168',
|
||||||
|
hbrvcdName: '丰满以下',
|
||||||
|
rstcd: '008610902100000001',
|
||||||
|
ennm: '丰满',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '12',
|
||||||
|
baseName: '东北',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
' {\r\n destination: [-2757984.791200001, 3702731.89344555, 4387429.141142541],\r\n orientation: {\r\n heading: 2.726968159168443,\r\n pitch: -0.659333747749792,\r\n roll: 0.001705711752572725\r\n },\r\n center: [126.68777681485555, 43.72062815295212, 0]\r\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[126.677201910442,43.7219629899428],[126.674824396421,43.7269429179591],[126.683017181222,43.7293204319798],[126.689699923334,43.7293204319798],[126.694037279993,43.7253364895667],[126.700013193613,43.7183967189117],[126.687290280746,43.7135453051668],[126.682631638408,43.7125171909957],[126.68125010999,43.7139629765488],[126.677201910442,43.7219629899428]]]}}]}',
|
||||||
|
height: -10,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008640204000000001',
|
||||||
|
recordUser: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
recordTime: '2023-05-14 00:02:12',
|
||||||
|
modifyTime: '2024-11-05 10:53:43',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008640204000000001',
|
||||||
|
stnm: '公伯峡',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing/huanghe/gongBoXia/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY1U',
|
||||||
|
hbrvcdName: '黄河干流上游',
|
||||||
|
rstcd: '008640204000000001',
|
||||||
|
ennm: '公伯峡',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '08',
|
||||||
|
baseName: '黄河上游干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\r\n destination: [-1097283.8773704714, 5058275.150543221, 3719350.2177485977],\r\n orientation: {\r\n heading: 4.069005072911528,\r\n pitch: -0.7601115186776273,\r\n roll: 6.2796739221159825\r\n },\r\n center: [102.230856244147, 35.8777364102304, 1800]\r\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection","name":"gbx_boundary","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[102.23096545810546,35.87070203368848],[102.22344702081998,35.87705511319469],[102.225531265309,35.8796295746632],[102.228103470885,35.8811594485677],[102.231953373348,35.882991934893],[102.234374272713,35.8803524821126],[102.23707888742315,35.87656171574784],[102.23096545810546,35.87070203368848]]]}}]}',
|
||||||
|
height: 50,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008640203500001021',
|
||||||
|
recordUser: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
recordTime: '2023-05-14 00:02:12',
|
||||||
|
modifyTime: '2024-11-05 10:53:28',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008640203500001021',
|
||||||
|
stnm: '羊曲移栽园',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing/huanghe/yangQu_YQ-YZY/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY119',
|
||||||
|
hbrvcdName: '浑江口以上',
|
||||||
|
rstcd: '008640203500001021',
|
||||||
|
ennm: '羊曲移栽园',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: 'other',
|
||||||
|
baseName: '其他',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\r\n destination: [-918241.2550154594, 5118065.7637626715, 3687260.3390196203],\r\n orientation: {\r\n heading: 5.259836877525001,\r\n pitch: -0.5723985723270184,\r\n roll: 6.279958994450198\r\n },\r\n center: [100.16275372918831, 35.52723692659094, 2803.53630185407]\r\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection","name":"yq_yzy_boundary","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[100.168575254524,35.5191839263442],[100.15747928780189,35.51922272824219],[100.15760326472177,35.5315736364896],[100.168522948508,35.5316589109779],[100.168575254524,35.5191839263442]]]}}]}',
|
||||||
|
height: 44,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008640203700001017',
|
||||||
|
recordUser: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
recordTime: '2023-05-14 00:02:12',
|
||||||
|
modifyTime: '2024-11-05 10:53:11',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: 'A62AB110-D4EC-FF3E-F293-140AB60CAE61',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008640203700001017',
|
||||||
|
stnm: '积石峡鱼类增殖站',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing/huanghe/jiShiXia_JSX-ZZZ/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY119',
|
||||||
|
hbrvcdName: '浑江口以上',
|
||||||
|
rstcd: '008640203700001017',
|
||||||
|
ennm: '积石峡鱼类增殖站',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: 'other',
|
||||||
|
baseName: '其他',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\r\n destination: [-1140971.640070955, 5051928.865525266, 3713299.455800881],\r\n orientation: {\r\n heading: 4.248666390778816,\r\n pitch: -0.32885653878595567,\r\n roll: 6.28017762476892\r\n },\r\n center: [102.722027790477, 35.820066370996095, 1903]\r\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[102.713719729036,35.8161431299919],[102.712877840146,35.8205587513157],[102.715214511352,35.8215552728596],[102.721451361704,35.8232905948584],[102.722585334496,35.8232905948584],[102.725609261939,35.822912603928],[102.726502695048,35.82193326379],[102.726932230196,35.819270145871],[102.727327402532,35.8167616606054],[102.724251930871,35.8157995018734],[102.721537268734,35.8154902365666],[102.717654270994,35.8157823204674],[102.713719729036,35.8161431299919]]]}}]}',
|
||||||
|
height: 44,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008660107300000001',
|
||||||
|
recordUser: '1',
|
||||||
|
recordTime: '2023-06-26 14:51:49',
|
||||||
|
modifyTime: '2024-11-05 10:52:50',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: '1',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008660107300000001',
|
||||||
|
stnm: '瀑布沟',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing2/ddh_3dtiles/pbg_3dtiles/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY148',
|
||||||
|
hbrvcdName: '大渡河',
|
||||||
|
rstcd: '008660107300000001',
|
||||||
|
ennm: '瀑布沟',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '03',
|
||||||
|
baseName: '大渡河干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\n destination: [102.87008, 29.19082, 4401.88],\n orientation: {\n heading: 5.380675551,\n pitch: -0.87091929675,\n roll: 0\n },\n center: [102.8376039, 29.2093539, 820]\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{ "type": "FeatureCollection", "name": "pbg", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "features": [ { "type": "Feature", "properties": { "id": 1 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 102.840797640489782, 29.213964126878459 ], [ 102.855678001879326, 29.2114613969921 ], [ 102.856222073593756, 29.21021003204892 ], [ 102.85643970227953, 29.208169763119823 ], [ 102.85630368435092, 29.204959740004711 ], [ 102.855841223393654, 29.204089225261626 ], [ 102.838022874746216, 29.204796518490379 ], [ 102.829181709386788, 29.206591955147985 ], [ 102.827930344443615, 29.209475535234443 ], [ 102.827277458386291, 29.212875983449607 ], [ 102.840797640489782, 29.213964126878459 ] ] ] ] } } ] }',
|
||||||
|
height: 40,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008660103600000001',
|
||||||
|
recordUser: '1',
|
||||||
|
recordTime: '2023-06-26 14:51:49',
|
||||||
|
modifyTime: '2024-11-05 10:52:17',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: '1',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008660103600000001',
|
||||||
|
stnm: '沙坪二级',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing2/ddh_3dtiles/sperji_3dtiles/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY148',
|
||||||
|
hbrvcdName: '大渡河',
|
||||||
|
rstcd: '008660103600000001',
|
||||||
|
ennm: '沙坪二级',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '03',
|
||||||
|
baseName: '大渡河干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\n destination: [103.2141, 29.23316, 904.46],\n orientation: {\n heading: 5.3297119368,\n pitch: -0.5429719303,\n roll: 0\n },\n center: [103.2087888, 29.2373865,550]\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{ "type": "FeatureCollection", "name": "spej", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "features": [ { "type": "Feature", "properties": { "id": 1 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 103.194898409051149, 29.235538315468801 ], [ 103.205283447950208, 29.241197228880864 ], [ 103.218342478901107, 29.242130016805927 ], [ 103.220021497166229, 29.240824113710836 ], [ 103.221016470952961, 29.238398865105669 ], [ 103.219710567857874, 29.236097988223843 ], [ 103.201738853834954, 29.227205410004892 ], [ 103.194898409051149, 29.235538315468801 ] ] ] ] } } ] }',
|
||||||
|
height: 25,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008660102000000001',
|
||||||
|
recordUser: '1',
|
||||||
|
recordTime: '2023-06-26 14:51:50',
|
||||||
|
modifyTime: '2024-11-05 10:52:01',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: '1',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008660102000000001',
|
||||||
|
stnm: '枕头坝一级',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing2/ddh_3dtiles/ztbyiji_3dtiles/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY148',
|
||||||
|
hbrvcdName: '大渡河',
|
||||||
|
rstcd: '008660102000000001',
|
||||||
|
ennm: '枕头坝一级',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '03',
|
||||||
|
baseName: '大渡河干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\n destination: [103.0548, 29.23505, 1204.95],\n orientation: {\n heading: 4.7448521045,\n pitch: -0.6974335691,\n roll: 0\n },\n center: [103.0451569, 29.2361348,800]\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection", "features": [ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[103.03508037100005,29.238394261000053],[103.03550867400008,29.237775601000067],[103.04157630000009,29.23394466900004],[103.05002338600008,29.231422440000074],[103.05477335100005,29.230721413000026],[103.05757159700005,29.23245366100008],[103.05479238700008,29.235480335000034],[103.04545733500004,29.238693915000056],[103.04071493500004,29.240112232000058],[103.03860197300008,29.240531017000023],[103.03593697700006,29.240726132000077],[103.03508037100005,29.238394261000053]]]},"properties":{"OBJECTID":1,"SHAPE_Leng":0.0510784849056,"SHAPE_Area":0.000108878511485}} ]}',
|
||||||
|
height: 30,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008660101400000001',
|
||||||
|
recordUser: '1',
|
||||||
|
recordTime: '2023-06-26 14:51:49',
|
||||||
|
modifyTime: '2024-11-05 10:51:51',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: '1',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008660101400000001',
|
||||||
|
stnm: '龚嘴',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing2/ddh_3dtiles/gz_3dtiles/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY148',
|
||||||
|
hbrvcdName: '大渡河',
|
||||||
|
rstcd: '008660101400000001',
|
||||||
|
ennm: '龚嘴',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '03',
|
||||||
|
baseName: '大渡河干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\n destination: [103.48497, 29.2966, 912.53],\n orientation: {\n heading: 5.5286794715,\n pitch: -0.48712139423,\n roll: 0\n },\n center: [103.4780156, 29.3029672, 490]\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection", "features": [ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[103.47109546400009,29.305520493000074],[103.47912852400003,29.294803400000035],[103.48588619300006,29.297658754000054],[103.48019452200003,29.309289559000035],[103.47109546400009,29.305520493000074]]]},"properties":{"OBJECTID":1,"SHAPE_Leng":0.0435272300608,"SHAPE_Area":0.000111320725035}} ]}',
|
||||||
|
height: 36,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008660101300000001',
|
||||||
|
recordUser: '1',
|
||||||
|
recordTime: '2023-06-26 14:51:49',
|
||||||
|
modifyTime: '2024-11-05 10:51:37',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: '1',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008660101300000001',
|
||||||
|
stnm: '铜街子',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing2/ddh_3dtiles/tjz_3dtiles/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY148',
|
||||||
|
hbrvcdName: '大渡河',
|
||||||
|
rstcd: '008660101300000001',
|
||||||
|
ennm: '铜街子',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '03',
|
||||||
|
baseName: '大渡河干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\n destination: [103.63945, 29.26618, 1147.14],\n orientation: {\n heading: 3.6472145379,\n pitch: -0.57752944948,\n roll: 0\n },\n center: [103.6327243, 29.2565762,500]\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection", "features": [ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[103.62492291400008,29.254544099000043],[103.63393954100007,29.249170900000024],[103.63571001800005,29.25017305600005],[103.64182317400008,29.263368120000052],[103.63166798600008,29.267510368000046],[103.62537263200005,29.255693378000046],[103.62492291400008,29.254544099000043]]]},"properties":{"OBJECTID":3,"SHAPE_Leng":0.0526639365108,"SHAPE_Area":0.000174571026443}} ]}',
|
||||||
|
height: 33,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008660103900000001',
|
||||||
|
recordUser: '1',
|
||||||
|
recordTime: '2023-06-26 14:51:49',
|
||||||
|
modifyTime: '2024-11-05 10:51:22',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: '1',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008660103900000001',
|
||||||
|
stnm: '大岗山',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing2/ddh_3dtiles/dgs_3dtiles/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY148',
|
||||||
|
hbrvcdName: '大渡河',
|
||||||
|
rstcd: '008660103900000001',
|
||||||
|
ennm: '大岗山',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '03',
|
||||||
|
baseName: '大渡河干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\n destination: [102.21188, 29.43792, 1998.92],\n orientation: {\n heading: 0.54628805587,\n pitch: -0.62674773439,\n roll: 0\n },\n center: [102.218611, 29.4495989, 1101]\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{ "type": "FeatureCollection", "name": "dgs", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "features": [ { "type": "Feature", "properties": { "id": 1 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 102.211945639635587, 29.463552037774974 ], [ 102.222998605826191, 29.463466355866519 ], [ 102.227368383157355, 29.458582487084623 ], [ 102.226168836439001, 29.437419055696413 ], [ 102.215201552156842, 29.437933147147138 ], [ 102.210831774825678, 29.442131560661398 ], [ 102.211945639635587, 29.463552037774974 ] ] ] ] } } ] }',
|
||||||
|
height: 34,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008660105700000001',
|
||||||
|
recordUser: '1',
|
||||||
|
recordTime: '2023-06-26 14:51:49',
|
||||||
|
modifyTime: '2024-11-05 10:51:11',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: '1',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008660105700000001',
|
||||||
|
stnm: '双江口',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing2/ddh_3dtiles/sjk_3dtiles/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY148',
|
||||||
|
hbrvcdName: '大渡河',
|
||||||
|
rstcd: '008660105700000001',
|
||||||
|
ennm: '双江口',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '03',
|
||||||
|
baseName: '大渡河干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\n destination: [101.92794, 31.79046, 2999.46],\n orientation: {\n heading: 5.1129420437,\n pitch: -0.66270151698,\n roll: 0\n },\n center: [101.9174412, 31.7944958, 2317]\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{\r\n"type": "FeatureCollection",\r\n"name": "sjk_boundary",\r\n"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },\r\n"features": [\r\n{ "type": "Feature", "properties": { "id": 1 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 101.918070761460442, 31.799020881908287 ], [ 101.915831763674746, 31.794542886336899 ], [ 101.920579518015487, 31.790091866642445 ], [ 101.934553022268375, 31.790091866642445 ], [ 101.934660925776129, 31.792654574951371 ], [ 101.918070761460442, 31.799020881908287 ] ] ] ] } }\r\n]\r\n}',
|
||||||
|
height: 52,
|
||||||
|
comments: null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
_tls: {},
|
||||||
|
id: 'OSGB_008660107200000001',
|
||||||
|
recordUser: '1',
|
||||||
|
recordTime: '2023-06-26 14:51:49',
|
||||||
|
modifyTime: '2024-11-05 10:50:58',
|
||||||
|
displayRecordUser: null,
|
||||||
|
recordUserName: '1',
|
||||||
|
departmentId: null,
|
||||||
|
displayDepartment: null,
|
||||||
|
stcd: 'OSGB_008660107200000001',
|
||||||
|
stnm: '深溪沟',
|
||||||
|
url: 'https://211.99.26.225:18085/qingXieSheYing2/ddh_3dtiles/sxg_3dtiles/tileset.json',
|
||||||
|
rvcd: null,
|
||||||
|
rvcdName: null,
|
||||||
|
hbrvcd: 'SJLY148',
|
||||||
|
hbrvcdName: '大渡河',
|
||||||
|
rstcd: '008660107200000001',
|
||||||
|
ennm: '深溪沟',
|
||||||
|
sttp: null,
|
||||||
|
sttpCode: null,
|
||||||
|
sttpName: null,
|
||||||
|
sttpFullPath: null,
|
||||||
|
sttpTreeLevel: null,
|
||||||
|
baseId: '03',
|
||||||
|
baseName: '大渡河干流',
|
||||||
|
lgtd: null,
|
||||||
|
lttd: null,
|
||||||
|
location:
|
||||||
|
'{\n destination: [102.93682, 29.30348, 1593],\n orientation: {\n heading: 4.0931461618,\n pitch: -1.040739833,\n roll: 0\n },\n center: [102.9330302, 29.3016719, 1100]\n }',
|
||||||
|
accuracy: 16,
|
||||||
|
boundary:
|
||||||
|
'{"type":"FeatureCollection", "features": [ {"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[102.93710628900004,29.305941235000034],[102.93332294600003,29.304870477000065],[102.92946821900006,29.302693271000066],[102.92604179500006,29.299195463000046],[102.92289292500004,29.290856630000064],[102.92579295700006,29.290469959000063],[102.93764309500006,29.303935349000028],[102.93710628900004,29.305941235000034]]]},"properties":{"OBJECTID":2,"SHAPE_Leng":0.0451083802786,"SHAPE_Area":0.0000854803537049}} ]}',
|
||||||
|
height: 51,
|
||||||
|
comments: null
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
// 模拟数据获取函数
|
// 模拟数据获取函数
|
||||||
const fetchTiltPhotoData = (params: any) => {
|
const fetchTiltPhotoData = (params: any) => {
|
||||||
@ -174,11 +914,6 @@ const onSearchFinish = (values: any) => {
|
|||||||
// 重置
|
// 重置
|
||||||
const handleReset = (params: any) => {};
|
const handleReset = (params: any) => {};
|
||||||
|
|
||||||
// 选择变化处理
|
|
||||||
const handleSelectionChange = (selectedRows: any[]) => {
|
|
||||||
console.log('选中的行:', selectedRows);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 表单取消
|
// 表单取消
|
||||||
const editModalCancel = () => {
|
const editModalCancel = () => {
|
||||||
editModalVisible.value = false;
|
editModalVisible.value = false;
|
||||||
|
|||||||
@ -11,60 +11,52 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, defineAsyncComponent } from 'vue';
|
import { ref, defineAsyncComponent } from "vue";
|
||||||
|
|
||||||
// Tab 配置
|
// Tab 配置
|
||||||
const tabs = [
|
const tabs = [
|
||||||
{
|
{
|
||||||
name: '图层管理',
|
name: "图层管理",
|
||||||
value: 'layer'
|
value: "layer",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '图例结构管理',
|
name: "图例结构管理",
|
||||||
value: 'legend'
|
value: "legend",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '图例数据管理',
|
name: "图例数据管理",
|
||||||
value: 'legendData'
|
value: "legendData",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '电站专题管理',
|
name: "电站专题管理",
|
||||||
value: 'station'
|
value: "station",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '沿程配置管理',
|
name: "沿程配置管理",
|
||||||
value: 'config'
|
value: "config",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '倾斜摄影管理',
|
name: "倾斜摄影管理",
|
||||||
value: 'tilt'
|
value: "tilt",
|
||||||
}
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
// 当前激活的 tab
|
// 当前激活的 tab
|
||||||
const activeTab = ref('layer');
|
const activeTab = ref("layer");
|
||||||
|
|
||||||
// 获取对应组件的方法
|
// 获取对应组件的方法
|
||||||
const getComponent = (value: string) => {
|
const getComponent = (value: string) => {
|
||||||
const componentMap: Record<string, any> = {
|
const componentMap: Record<string, any> = {
|
||||||
layer: defineAsyncComponent(
|
layer: defineAsyncComponent(() => import("./components/LayerManagement/index.vue")),
|
||||||
() => import('./components/LayerManagement/index.vue')
|
legend: defineAsyncComponent(() => import("./components/LegendStructure/index.vue")),
|
||||||
),
|
legendData: defineAsyncComponent(() => import("./components/LegendData/index.vue")),
|
||||||
legend: defineAsyncComponent(
|
|
||||||
() => import('./components/LegendStructure/index.vue')
|
|
||||||
),
|
|
||||||
legendData: defineAsyncComponent(
|
|
||||||
() => import('./components/LegendData/index.vue')
|
|
||||||
),
|
|
||||||
station: defineAsyncComponent(
|
station: defineAsyncComponent(
|
||||||
() => import('./components/StationManagement/index.vue')
|
() => import("./components/StationManagement/index.vue")
|
||||||
),
|
|
||||||
config: defineAsyncComponent(
|
|
||||||
() => import('./components/ConfigManagement/index.vue')
|
|
||||||
),
|
),
|
||||||
|
config: defineAsyncComponent(() => import("./components/ConfigManagement/index.vue")),
|
||||||
tilt: defineAsyncComponent(
|
tilt: defineAsyncComponent(
|
||||||
() => import('./components/TiltPhotoManagement/index.vue')
|
() => import("./components/TiltPhotoManagement/index.vue")
|
||||||
)
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
return componentMap[value] || null;
|
return componentMap[value] || null;
|
||||||
@ -95,6 +87,9 @@ const getComponent = (value: string) => {
|
|||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
:deep(.ant-form-item) {
|
||||||
|
margin-bottom: 0 !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.ant-tabs) {
|
:deep(.ant-tabs) {
|
||||||
|
|||||||
@ -64,6 +64,16 @@ export default ({ mode }: ConfigEnv): UserConfig => {
|
|||||||
new RegExp('^/api/wmp-env-server'),
|
new RegExp('^/api/wmp-env-server'),
|
||||||
'/api/wmp-env-server'
|
'/api/wmp-env-server'
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
'/api/wmp-sys-server': {
|
||||||
|
target: 'https://211.99.26.225:12122',
|
||||||
|
changeOrigin: true,
|
||||||
|
secure: false,
|
||||||
|
rewrite: path =>
|
||||||
|
path.replace(
|
||||||
|
new RegExp('^/api/wmp-sys-server'),
|
||||||
|
'/api/wmp-sys-server'
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user