diff --git a/frontend-sjgl/src/api/DataQueryMenuModule/index.ts b/frontend-sjgl/src/api/DataQueryMenuModule/index.ts index 63501e8d..cb4498e5 100644 --- a/frontend-sjgl/src/api/DataQueryMenuModule/index.ts +++ b/frontend-sjgl/src/api/DataQueryMenuModule/index.ts @@ -114,6 +114,24 @@ export function getFlowDataMonthList(data) { data }); } + +// 生态流量运行数据 - 删除 +export function deleteFlowDataInfo(data) { + return request({ + url: '/eq/data/removeKendoByIds', + method: 'post', + data + }); +} + +// 生态流量运行数据 - 修改 +export function updateEqRsData(data) { + return request({ + url: '/eq/data/updateEqRsData', + method: 'post', + data + }); +} // 水质监测数据 - 断面 export function getWaterDataSectionList(data) { return request({ @@ -331,6 +349,36 @@ export function deleteFpssrlRInfo(data) { }); } +// 过鱼设施AI自动数据 - 分页查询 +export function getFpssrlAiRPageList(data) { + return request({ + url: '/fp/query/qgc/GetKendoListCustAI', + method: 'post', + data + }); +} + +// 过鱼设施AI自动数据 - 编辑 +export function updateFpssrlAiRInfo(data) { + return request({ + url: '/base/fpssrlAiR/update', + method: 'post', + headers: { + 'Content-Type': 'multipart/form-data' + }, + data + }); +} + +// 过鱼设施AI自动数据 - 删除 +export function deleteFpssrlAiRInfo(data) { + return request({ + url: '/base/fpssrlAiR/delete', + method: 'post', + data + }); +} + // 鱼类 放鱼 export function getFishReleaseList(data) { return request({ diff --git a/frontend-sjgl/src/components/BasicTable/index.vue b/frontend-sjgl/src/components/BasicTable/index.vue index 716cc092..88ab0ae9 100644 --- a/frontend-sjgl/src/components/BasicTable/index.vue +++ b/frontend-sjgl/src/components/BasicTable/index.vue @@ -54,7 +54,7 @@ interface Props { data?: any[]; enableRowSelection?: boolean; enableRowHighlight?: boolean; // 是否启用行点击高亮 - rowKey?: string; + rowKey?: string | ((record: any) => string | number); searchParams?: Record; defaultPageSize?: number; isPage?: boolean; @@ -663,7 +663,20 @@ const enhancedColumns = computed(() => { title: String(text) }, { - default: () => String(text) + default: () => + h( + 'span', + { + style: { + display: 'inline-block', + maxWidth: '100%', + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap' + } + }, + String(text) + ) } ) ); diff --git a/frontend-sjgl/src/views/monitorData/FishData/EditFishDataAutoModal.vue b/frontend-sjgl/src/views/monitorData/FishData/EditFishDataAutoModal.vue index 7e1219bf..1b9bdd03 100644 --- a/frontend-sjgl/src/views/monitorData/FishData/EditFishDataAutoModal.vue +++ b/frontend-sjgl/src/views/monitorData/FishData/EditFishDataAutoModal.vue @@ -210,7 +210,7 @@ - + - + -
- - - - - - - - - -
- -
-
- - - -
- -
-
- - - - - - - - -
- - - - diff --git a/frontend-sjgl/src/views/monitorData/FishData/FishDataSearch.vue b/frontend-sjgl/src/views/monitorData/FishData/FishDataSearch.vue index f1312a13..c5de8cbd 100644 --- a/frontend-sjgl/src/views/monitorData/FishData/FishDataSearch.vue +++ b/frontend-sjgl/src/views/monitorData/FishData/FishDataSearch.vue @@ -57,8 +57,10 @@ @@ -77,8 +79,8 @@ const emit = defineEmits<{ (e: 'export-btn'): void; (e: 'reset', values: any): void; (e: 'search-finish', values: any): void; - (e: 'add'): void; (e: 'seeEdit'): void; + (e: 'batch-delete'): void; }>(); const basicSearchRef = ref(); @@ -86,13 +88,13 @@ const btnLoading = ref(false); const props = defineProps<{ exportLoading?: boolean; - mway: string; + selectedCount?: number; }>(); const initSearchData = { rvcd: 'all', rstcd: null, stcd: '0086601020VP000006', - mway: props.mway + mway: '1' }; const searchData = ref({ ...initSearchData }); @@ -140,6 +142,22 @@ const searchList: any = computed(() => [ value: item.stcd })) }, + { + type: 'Radio', + name: 'mway', + label: '数据类型', + width: 140, + options: [ + { + label: '人工', + value: '1' + }, + { + label: '自动', + value: '2' + } + ] + }, { type: 'custom', name: 'jcdt', @@ -157,15 +175,13 @@ const onSearchFinish = (values: any) => { const exportBtn = () => { emit('export-btn'); }; - -const handleAdd = () => { - emit('add'); -}; - const seeEdit = () => { emit('seeEdit'); }; -const initCrossSectionList = (params, setDefault = false) => { +const batchDelete = () => { + emit('batch-delete'); +}; +const initCrossSectionList = params => { const filters = []; if (params) { if (params.rvcd != '' && params.rvcd != 'all') { @@ -185,13 +201,6 @@ const initCrossSectionList = (params, setDefault = false) => { }); } } - // 根据人工/自动站过滤过鱼设施 - filters.push({ - field: 'mway', - operator: 'eq', - dataType: 'string', - value: props.mway - }); crossSectionListLoading.value = true; getFishReleaseMonitorSectionList({ filter: { @@ -202,15 +211,6 @@ const initCrossSectionList = (params, setDefault = false) => { }).then(res => { if (res.data?.data) { crossSectionList.value = res.data?.data; - // 首次加载时默认选中第一条过鱼设施 - if (setDefault && crossSectionList.value.length > 0) { - const firstStcd = crossSectionList.value[0].stcd; - initSearchData.stcd = firstStcd; - if (basicSearchRef.value?.formData) { - basicSearchRef.value.formData.stcd = firstStcd; - } - handleSearchFinish({ ...initSearchData, stcd: firstStcd }); - } } crossSectionListLoading.value = false; }); @@ -261,8 +261,9 @@ onMounted(() => { min: `${now.subtract(5, 'year').format('YYYY-MM-DD')} 00:00:00`, max: `${now.format('YYYY-MM-DD')} 23:59:59` }; - // 首次加载:请求设施列表后默认选中第一条并触发搜索 - initCrossSectionList(undefined, true); + initCrossSectionList(); + // 使用 handleSearchFinish 确保包含 jcdt 等完整参数 + handleSearchFinish({ ...initSearchData }); }); diff --git a/frontend-sjgl/src/views/monitorData/FishData/index.vue b/frontend-sjgl/src/views/monitorData/FishData/index.vue index 34aae4f5..4473c69a 100644 --- a/frontend-sjgl/src/views/monitorData/FishData/index.vue +++ b/frontend-sjgl/src/views/monitorData/FishData/index.vue @@ -1,22 +1,697 @@ - +} diff --git a/frontend-sjgl/src/views/monitorData/FishRelease/EditFishReleaseModal.vue b/frontend-sjgl/src/views/monitorData/FishRelease/EditFishReleaseModal.vue new file mode 100644 index 00000000..70a57045 --- /dev/null +++ b/frontend-sjgl/src/views/monitorData/FishRelease/EditFishReleaseModal.vue @@ -0,0 +1,28 @@ + + + diff --git a/frontend-sjgl/src/views/monitorData/FishRelease/FishReleaseDetailModal.vue b/frontend-sjgl/src/views/monitorData/FishRelease/FishReleaseDetailModal.vue new file mode 100644 index 00000000..e847e317 --- /dev/null +++ b/frontend-sjgl/src/views/monitorData/FishRelease/FishReleaseDetailModal.vue @@ -0,0 +1,420 @@ + + + diff --git a/frontend-sjgl/src/views/monitorData/FishRelease/FishReleaseSearch.vue b/frontend-sjgl/src/views/monitorData/FishRelease/FishReleaseSearch.vue index 53684e85..971248f4 100644 --- a/frontend-sjgl/src/views/monitorData/FishRelease/FishReleaseSearch.vue +++ b/frontend-sjgl/src/views/monitorData/FishRelease/FishReleaseSearch.vue @@ -59,6 +59,7 @@ @@ -97,6 +98,7 @@ const emit = defineEmits<{ (e: 'export-btn'): void; (e: 'reset', values: any): void; (e: 'search-finish', values: any): void; + (e: 'seeEdit'): void; }>(); const basicSearchRef = ref(); @@ -157,6 +159,9 @@ const onSearchFinish = (values: any) => { const exportBtn = () => { emit('export-btn'); }; +const seeEdit = () => { + emit('seeEdit'); +}; const onValuesChange = (changedValues: any, allValues: any) => { handleValuesChange(changedValues, allValues); diff --git a/frontend-sjgl/src/views/monitorData/FishRelease/index.vue b/frontend-sjgl/src/views/monitorData/FishRelease/index.vue index ff145756..f09d6eff 100644 --- a/frontend-sjgl/src/views/monitorData/FishRelease/index.vue +++ b/frontend-sjgl/src/views/monitorData/FishRelease/index.vue @@ -5,6 +5,7 @@ @export-btn="exportBtn" @search-finish="onSearchFinish" @reset="onReset" + @seeEdit="handleSeeEdit" :exportLoading="exportLoading" ref="searchRef" /> @@ -19,13 +20,36 @@ sort: sort }" > + + + + + + + diff --git a/frontend-sjgl/src/views/monitorData/FlowData/FlowDataSearch.vue b/frontend-sjgl/src/views/monitorData/FlowData/FlowDataSearch.vue index 01440908..56097142 100644 --- a/frontend-sjgl/src/views/monitorData/FlowData/FlowDataSearch.vue +++ b/frontend-sjgl/src/views/monitorData/FlowData/FlowDataSearch.vue @@ -63,6 +63,14 @@ @@ -78,13 +86,22 @@ const emit = defineEmits<{ (e: 'export-btn'): void; (e: 'reset', values: any): void; (e: 'search-finish', values: any): void; + (e: 'seeEdit'): void; + (e: 'batch-delete'): void; }>(); const basicSearchRef = ref(); const btnLoading = ref(false); -const props = defineProps<{ - exportLoading?: boolean; -}>(); +const props = withDefaults( + defineProps<{ + exportLoading?: boolean; + selectedCount?: number; + showBatchDelete?: boolean; + }>(), + { + showBatchDelete: true + } +); const initSearchData = { rvcd: 'all', @@ -185,6 +202,12 @@ const onSearchFinish = (values: any) => { const exportBtn = () => { emit('export-btn'); }; +const seeEdit = () => { + emit('seeEdit'); +}; +const batchDelete = () => { + emit('batch-delete'); +}; const onValuesChange = (changedValues: any, allValues: any) => { handleValuesChange(changedValues, allValues); diff --git a/frontend-sjgl/src/views/monitorData/FlowData/index.vue b/frontend-sjgl/src/views/monitorData/FlowData/index.vue index 0b30103f..be0c05cf 100644 --- a/frontend-sjgl/src/views/monitorData/FlowData/index.vue +++ b/frontend-sjgl/src/views/monitorData/FlowData/index.vue @@ -5,6 +5,10 @@ @export-btn="exportBtn" @search-finish="onSearchFinish" @reset="onReset" + @seeEdit="handleSeeEdit" + @batch-delete="handleBatchDelete" + :show-batch-delete="currentSearchParams.timeScale === 'tm'" + :selected-count="selectedRowKeys.length" :exportLoading="exportLoading" ref="searchRef" /> @@ -12,6 +16,7 @@ + + + + + + + + + + diff --git a/frontend-sjgl/src/views/monitorData/fishSurveyData/fishSurveyDataSearch.vue b/frontend-sjgl/src/views/monitorData/fishSurveyData/fishSurveyDataSearch.vue new file mode 100644 index 00000000..c09002b2 --- /dev/null +++ b/frontend-sjgl/src/views/monitorData/fishSurveyData/fishSurveyDataSearch.vue @@ -0,0 +1,300 @@ + + + + + diff --git a/frontend-sjgl/src/views/monitorData/FishData/FishDataAuto.vue b/frontend-sjgl/src/views/monitorData/fishSurveyData/index.vue similarity index 80% rename from frontend-sjgl/src/views/monitorData/FishData/FishDataAuto.vue rename to frontend-sjgl/src/views/monitorData/fishSurveyData/index.vue index 32ff0de2..3c91c891 100644 --- a/frontend-sjgl/src/views/monitorData/FishData/FishDataAuto.vue +++ b/frontend-sjgl/src/views/monitorData/fishSurveyData/index.vue @@ -1,25 +1,28 @@ diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/FishDataManual.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/FishDataManual.vue deleted file mode 100644 index b69f5574..00000000 --- a/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/FishDataManual.vue +++ /dev/null @@ -1,369 +0,0 @@ - - - - diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/FishDataSearch.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/FishDataSearch.vue index de348c95..b33493e8 100644 --- a/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/FishDataSearch.vue +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/FishDataSearch.vue @@ -80,13 +80,12 @@ const btnLoading = ref(false); const props = defineProps<{ exportLoading?: boolean; - mway: string; }>(); const initSearchData = { rvcd: 'all', rstcd: null, stcd: '0086601020VP000006', - mway: props.mway + mway: '1' }; const searchData = ref({ ...initSearchData }); @@ -134,6 +133,22 @@ const searchList: any = computed(() => [ value: item.stcd })) }, + { + type: 'Radio', + name: 'mway', + label: '数据类型', + width: 140, + options: [ + { + label: '人工', + value: '1' + }, + { + label: '自动', + value: '2' + } + ] + }, { type: 'custom', name: 'jcdt', diff --git a/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/index.vue b/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/index.vue index 42facee3..421d1faa 100644 --- a/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/index.vue +++ b/frontend/src/views/DataQueryMenuModule/components/monitorData/FishData/index.vue @@ -1,42 +1,551 @@ - - + diff --git a/frontend/src/views/system/user/index.vue b/frontend/src/views/system/user/index.vue index 1dc3931d..10a2c004 100644 --- a/frontend/src/views/system/user/index.vue +++ b/frontend/src/views/system/user/index.vue @@ -47,6 +47,12 @@ const dialog = ref(false); const treeRef = ref(); const fishTreeRef = ref(); const infoForm = ref(); +//所属组织树型下拉框字段映射 +const treeSelectProps = { + value: 'id', + label: 'orgname', + children: 'childList' +}; //获取企业树形信息 const treeloading = ref(true); function getTree() { @@ -99,7 +105,8 @@ function addClick() { nickname: '', email: '', phone: '', - roleinfo: [] + roleinfo: [], + orgid: '' }; getrole(); } @@ -178,7 +185,8 @@ const info = ref({ nickname: '', email: '', phone: '', - roleinfo: [] as any[] + roleinfo: [] as any[], + orgid: '' }); //修改-用户 function editdepartment(row: any) { @@ -188,6 +196,8 @@ function editdepartment(row: any) { }); info.value = JSON.parse(JSON.stringify(row)); info.value.roleinfo = selectID; + // 回显所属组织 + info.value.orgid = row.orgid; rolesdata.value = row.roles; title.value = '修改用户'; dialogVisible.value = true; @@ -207,7 +217,8 @@ function confirmClick(formEl: any) { nickname: info.value.nickname, email: info.value.email, phone: info.value.phone, - orgid: orgId.value + // 修改时根据所属组织树型下拉框传递 + orgid: info.value.orgid }; const roleids = String(info.value.roleinfo); updataUser(params, roleids).then(() => { @@ -1274,6 +1285,17 @@ function handleClearSelection() { + + + +