Преглед на файлове

fix: 去除与基础服务无关的业务代码

yanglzh преди 2 години
родител
ревизия
33e18f54ed
променени са 49 файла, в които са добавени 0 реда и са изтрити 11285 реда
  1. 0 26
      src/api/energyAnalysis/index.ts
  2. 0 27
      src/api/heatStation/index.ts
  3. 0 45
      src/api/heatingDistrict/index.ts
  4. 0 9
      src/api/loopSupervision/index.ts
  5. 0 326
      src/views/developTool/codeGeneration/component/buildConfig.vue
  6. 0 273
      src/views/developTool/codeGeneration/component/edit.vue
  7. 0 421
      src/views/developTool/codeGeneration/component/editParams.vue
  8. 0 56
      src/views/developTool/codeGeneration/component/preview.vue
  9. 0 191
      src/views/developTool/codeGeneration/index.vue
  10. 0 400
      src/views/heating/energyAnalysis/analysisReport/index.vue
  11. 0 255
      src/views/heating/energyAnalysis/energyRanking/index.vue
  12. 0 145
      src/views/heating/energyAnalysis/energyWarning/index.vue
  13. 0 402
      src/views/heating/energyAnalysis/heatStationWaterAnalysis/index.vue
  14. 0 183
      src/views/heating/energyAnalysis/historyData/loopPerformanceHistory/index.vue
  15. 0 53
      src/views/heating/energyAnalysis/historyData/stationPerformanceHistory/detail.vue
  16. 0 185
      src/views/heating/energyAnalysis/historyData/stationPerformanceHistory/index.vue
  17. 0 174
      src/views/heating/energyAnalysis/loopEnergyCostPerformanceAppraisal/index.vue
  18. 0 310
      src/views/heating/energyAnalysis/stationPerformanceAppraisal/index.vue
  19. 0 89
      src/views/heating/heatStation/heatStation/component/detail.vue
  20. 0 283
      src/views/heating/heatStation/heatStation/component/edit.vue
  21. 0 233
      src/views/heating/heatStation/heatStation/index.vue
  22. 0 200
      src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/floor/component/detail.vue
  23. 0 133
      src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/floor/component/edit.vue
  24. 0 184
      src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/floor/index.vue
  25. 0 200
      src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/regional/component/detail.vue
  26. 0 153
      src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/regional/component/edit.vue
  27. 0 193
      src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/regional/index.vue
  28. 0 200
      src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/resident/component/detail.vue
  29. 0 163
      src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/resident/component/edit.vue
  30. 0 185
      src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/resident/index.vue
  31. 0 200
      src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/unit/component/detail.vue
  32. 0 132
      src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/unit/component/edit.vue
  33. 0 189
      src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/unit/index.vue
  34. 0 276
      src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/index.vue
  35. 0 199
      src/views/heating/heatStation/loop/component/detail.vue
  36. 0 411
      src/views/heating/heatStation/loop/component/edit.vue
  37. 0 297
      src/views/heating/heatStation/loop/index.vue
  38. 0 635
      src/views/heating/home/index.vue
  39. 0 84
      src/views/heating/monitor/history-weather.vue
  40. 0 421
      src/views/heating/monitor/loopSupervision/heatStationDetail.vue
  41. 0 104
      src/views/heating/monitor/loopSupervision/heatStationHistory.vue
  42. 0 177
      src/views/heating/monitor/loopSupervision/index.vue
  43. 0 590
      src/views/heating/monitor/loopSupervision/loopDetail.vue
  44. 0 101
      src/views/heating/monitor/loopSupervision/loopHistory.vue
  45. 0 394
      src/views/heating/monitor/map.vue
  46. 0 266
      src/views/heating/monitor/realTimeStatistics/index.vue
  47. 0 177
      src/views/heating/monitor/statisticsDetail/index.vue
  48. 0 928
      src/views/heating/monitor/weather/index.vue
  49. 0 7
      src/views/home/index.vue

+ 0 - 26
src/api/energyAnalysis/index.ts

@@ -1,26 +0,0 @@
-import { get, post, del, put, file } from '/@/utils/request';
-
-export default {
-  getStationInfoList: (params?: object) => get('/energy/station/info/list', params), // 换热站基础数据(分析报表数据)
-  getEnergyHuanluWaterFlowList: (params?: object) => get('/energy/huanlu/water/flow/list', params), // 换热站失水分析条形图列表
-  getEnergyHuanluWaterLossLineChart: (params?: object) => get('/energy/huanlu/water/loss/line/chart', params), // 换热站失水分析折现图列表
-  getEnergyWaterWarnList: (params?: object) => get('/energy/early/warn/list', params), // 换热站温度压力报警
-  getEnergyLoopdata: (params?: object) => get('/energy/loopdata', params), // 环路分析
-  getEnergyLoopdataPage: (params?: object) => get('/energy/loopdata/page_list', params), // 环路分析
-  getEnergyWaterLossLineChart: (params?: object) => get('/energy/water/loss/line/chart', params), // 换热站失水分析
-  getEnergyHuanluWaterLossLineChartPage: (params?: object) => get('/energy/water/loss/page_list', params), // 换热站失水分析折现图列表
-  getEnergyTop: (params?: object) => get('/energy/top', params), // 能耗排行榜
-  loopdataExport: (params: object) => file('/energy/loopdata/export', params), // 导出:环路分析
-  lossWaterExport: (params: object) => file('/energy/water/loss/export', params), // 导出:环路分析
-  getEnergyPerformance: (params?: object) => get('/energy/performance', params), // 环路绩效考核
-  performanceExport: (params: object) => file('/energy/performanceExport', params), // 导出:环路绩效考核数据导出
-  getEnergyPerformanceStation: (params?: object) => get('/energy/performance/station', params), // 换热站绩效考核
-  performanceExportStation: (params: object) => file('/energy/performance/station/export', params), // 导出:换热站绩效考核数据导出
-  history: {
-    historyYear: () => get('/energy/history/list'), // 历史年份
-    getEnergyPerformance: (params?: object) => get('/energy/history/performance', params), // 环路绩效考核
-    performanceExport: (params: object) => file('/energy/history/performanceExport', params), // 导出:环路绩效考核数据导出
-    getEnergyPerformanceStation: (params?: object) => get('/energy/history/performance/station', params), // 换热站绩效考核
-    performanceExportStation: (params: object) => file('/energy/history/performance/station/export', params), // 导出:换热站绩效考核数据导出
-  },
-}

+ 0 - 27
src/api/heatStation/index.ts

@@ -1,27 +0,0 @@
-import { get, post, del, put, file } from '/@/utils/request';
-
-export default {
-  loop: {
-    getList: (params: object) => get('/region/loop/list', params),
-    add: (data: object) => post('/region/loop/add', data),
-    export: (params: object) => file('/region/loop/export', params), // 环路列表导出
-    upload: (params: object) => file('/region/loop/import', params), // 环路列表导出
-    edit: (data: object) => put('/region/loop/edit', data),
-    del: (id: number) => del('/region/loop/del', { id }),
-    detail: (id: number) => get('/region/loop/getInfoById', { id }),
-  },
-  heatStation: {
-    // getAll: (params?: object) => get('/region/monitor/getAllHeatStation', params),
-    getAll: (params?: object) => get('/region/monitor/loopMap', params),
-    getList: (params: object) => get('/region/heatStation/tree', params),
-    heatStationExport: (params: object) => file('/region/heatStation/export', params), // 换热站列表导出
-    getAllList: (params: object) => get('/region/heatStation/getAll', params),
-    add: (data: object) => post('/region/heatStation/add', data),
-    edit: (data: object) => put('/region/heatStation/edit', data),
-    del: (id: number) => del('/region/heatStation/del', { id }),
-    detail: (id: number) => get('/region/heatStation/getInfoById', { id }),
-    getAllStaAndLoop: (params?: object) => get('/region/heatStation/getAllStaAndLoop', params),
-    stationDetail: (params?: object) => get('/energy/performance/station/detail', params),
-    stationDetailHistory: (params?: object) => get('/energy/history/performance/station/detail', params),
-  }
-}

+ 0 - 45
src/api/heatingDistrict/index.ts

@@ -1,45 +0,0 @@
-import { get, post, del, put } from '/@/utils/request';
-
-export default {
-  heatingDistrict: {
-    getTree: (params: object) => get('/region/zhgy/tree', params),
-    getPlotCount: (params: object) => get('/region/plot/count', params), // 获取小区数量
-    getResidentCount: (params: object) => get('/region/resident/count', params), // 获取住户数量
-    getOrganizationCount: (params: object) => get('/system/organization/count', params), // 获取组织数量
-  },
-  regionalManage: {
-    allList: (params: object) => get('/region/plot/all', params),
-    getList: (params: object) => get('/region/plot/list', params),
-    add: (data: object) => post('/region/plot/add', data),
-    edit: (data: object) => put('/region/plot/edit', data),
-    del: (id: number) => del('/region/plot/del', { id }),
-    detail: (id: number) => get('/region/plot/detail', { id }),
-    setStatus: (id: number, status: number) => put('/region/plot/editStatus', { id, status }),
-  },
-  floor: {
-    allList: (params: object) => get('/region/floor/all', params),
-    getList: (params: object) => get('/region/floor/list', params),
-    add: (data: object) => post('/region/floor/add', data),
-    edit: (data: object) => put('/region/floor/edit', data),
-    del: (id: number) => del('/region/floor/del', { id }),
-    detail: (id: number) => get('/region/floor/detail', { id }),
-    setStatus: (id: number, status: number) => put('/region/floor/editStatus', { id, status }),
-  },
-  unit: {
-    getListByFloorId: (params: object) => get('/region/unit/getInfoByFloorId', params),
-    getList: (params: object) => get('/region/unit/list', params),
-    add: (data: object) => post('/region/unit/add', data),
-    edit: (data: object) => put('/region/unit/edit', data),
-    del: (id: number) => del('/region/unit/del', { id }),
-    detail: (id: number) => get('/region/unit/getInfoById', { id }),
-    setStatus: (id: number, status: number) => put('/region/unit/editStatus', { id, status }),
-  },
-  resident: {
-    getList: (params: object) => get('/region/resident/list', params),
-    add: (data: object) => post('/region/resident/add', data),
-    edit: (data: object) => put('/region/resident/edit', data),
-    del: (id: number) => del('/region/resident/del', { id }),
-    detail: (id: number) => get('/region/resident/getInfoById', { id }),
-    setStatus: (id: number, status: number) => put('/region/resident/editStatus', { id, status }),
-  }
-}

+ 0 - 9
src/api/loopSupervision/index.ts

@@ -1,9 +0,0 @@
-import { get, post, del, put, file } from '/@/utils/request';
-
-export default {
-  getLoopHistoryData: (params: object) => get('/region/monitor/getLoopHistoryData', params), // 环路监管
-  getLoopRegulation: (params: object) => get('/region/monitor/getLoopRegulation', params), // 环路监管
-  getAllHeatStation: (params: object) => get('/region/monitor/getAllHeatStation', params), // 分布图
-  getLoopRegulationDetail: (params: object) => get('/region/monitor/getLoopRegulationDetail', params), // 环路监管详情
-  loopReportExport: (params: object) => file('/region/monitor/loopReportExport', params), // 环路监管详情列表导出
-}

+ 0 - 326
src/views/developTool/codeGeneration/component/buildConfig.vue

@@ -1,326 +0,0 @@
-<template>
-	<el-dialog title="生成配置" v-model="state.dialogVisible" width="769px">
-		<el-form ref="form" :model="state.ruleForm" label-width="80px">
-			<el-form-item label="上级菜单">
-				<el-cascader :options="state.options" :props="state.props" clearable style="width: 100%;"/>
-			</el-form-item>
-		</el-form>
-
-    <template #footer>
-      <div class="dialog-footer">
-        <el-button type="default" @click="state.dialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="state.dialogVisible = false">编 辑</el-button>
-      </div>
-    </template>
-	</el-dialog>
-</template>
-
-<script lang="ts" setup>
-import { reactive, ref } from 'vue';
-import api from '/@/api/device';
-import { ElMessage } from 'element-plus';
-
-const tagOption = ref(['api', 'editVue', 'entity', 'jsApi', 'listVue', 'router', 'service'])
-const state = reactive({
-	dialogVisible: false,
-	props: {
-		checkStrictly: true,
-	},
-	ruleForm: {},
-	options: [
-		{
-			value: 'guide',
-			label: 'Guide',
-			children: [
-				{
-					value: 'disciplines',
-					label: 'Disciplines',
-					children: [
-						{
-							value: 'consistency',
-							label: 'Consistency',
-						},
-						{
-							value: 'feedback',
-							label: 'Feedback',
-						},
-						{
-							value: 'efficiency',
-							label: 'Efficiency',
-						},
-						{
-							value: 'controllability',
-							label: 'Controllability',
-						},
-					],
-				},
-				{
-					value: 'navigation',
-					label: 'Navigation',
-					children: [
-						{
-							value: 'side nav',
-							label: 'Side Navigation',
-						},
-						{
-							value: 'top nav',
-							label: 'Top Navigation',
-						},
-					],
-				},
-			],
-		},
-		{
-			value: 'component',
-			label: 'Component',
-			children: [
-				{
-					value: 'basic',
-					label: 'Basic',
-					children: [
-						{
-							value: 'layout',
-							label: 'Layout',
-						},
-						{
-							value: 'color',
-							label: 'Color',
-						},
-						{
-							value: 'typography',
-							label: 'Typography',
-						},
-						{
-							value: 'icon',
-							label: 'Icon',
-						},
-						{
-							value: 'button',
-							label: 'Button',
-						},
-					],
-				},
-				{
-					value: 'form',
-					label: 'Form',
-					children: [
-						{
-							value: 'radio',
-							label: 'Radio',
-						},
-						{
-							value: 'checkbox',
-							label: 'Checkbox',
-						},
-						{
-							value: 'input',
-							label: 'Input',
-						},
-						{
-							value: 'input-number',
-							label: 'InputNumber',
-						},
-						{
-							value: 'select',
-							label: 'Select',
-						},
-						{
-							value: 'cascader',
-							label: 'Cascader',
-						},
-						{
-							value: 'switch',
-							label: 'Switch',
-						},
-						{
-							value: 'slider',
-							label: 'Slider',
-						},
-						{
-							value: 'time-picker',
-							label: 'TimePicker',
-						},
-						{
-							value: 'date-picker',
-							label: 'DatePicker',
-						},
-						{
-							value: 'datetime-picker',
-							label: 'DateTimePicker',
-						},
-						{
-							value: 'upload',
-							label: 'Upload',
-						},
-						{
-							value: 'rate',
-							label: 'Rate',
-						},
-						{
-							value: 'form',
-							label: 'Form',
-						},
-					],
-				},
-				{
-					value: 'data',
-					label: 'Data',
-					children: [
-						{
-							value: 'table',
-							label: 'Table',
-						},
-						{
-							value: 'tag',
-							label: 'Tag',
-						},
-						{
-							value: 'progress',
-							label: 'Progress',
-						},
-						{
-							value: 'tree',
-							label: 'Tree',
-						},
-						{
-							value: 'pagination',
-							label: 'Pagination',
-						},
-						{
-							value: 'badge',
-							label: 'Badge',
-						},
-					],
-				},
-				{
-					value: 'notice',
-					label: 'Notice',
-					children: [
-						{
-							value: 'alert',
-							label: 'Alert',
-						},
-						{
-							value: 'loading',
-							label: 'Loading',
-						},
-						{
-							value: 'message',
-							label: 'Message',
-						},
-						{
-							value: 'message-box',
-							label: 'MessageBox',
-						},
-						{
-							value: 'notification',
-							label: 'Notification',
-						},
-					],
-				},
-				{
-					value: 'navigation',
-					label: 'Navigation',
-					children: [
-						{
-							value: 'menu',
-							label: 'Menu',
-						},
-						{
-							value: 'tabs',
-							label: 'Tabs',
-						},
-						{
-							value: 'breadcrumb',
-							label: 'Breadcrumb',
-						},
-						{
-							value: 'dropdown',
-							label: 'Dropdown',
-						},
-						{
-							value: 'steps',
-							label: 'Steps',
-						},
-					],
-				},
-				{
-					value: 'others',
-					label: 'Others',
-					children: [
-						{
-							value: 'dialog',
-							label: 'Dialog',
-						},
-						{
-							value: 'tooltip',
-							label: 'Tooltip',
-						},
-						{
-							value: 'popover',
-							label: 'Popover',
-						},
-						{
-							value: 'card',
-							label: 'Card',
-						},
-						{
-							value: 'carousel',
-							label: 'Carousel',
-						},
-						{
-							value: 'collapse',
-							label: 'Collapse',
-						},
-					],
-				},
-			],
-		},
-		{
-			value: 'resource',
-			label: 'Resource',
-			children: [
-				{
-					value: 'axure',
-					label: 'Axure Components',
-				},
-				{
-					value: 'sketch',
-					label: 'Sketch Templates',
-				},
-				{
-					value: 'docs',
-					label: 'Design Documentation',
-				},
-			],
-		},
-	]
-});
-// 打开弹窗
-const openDialog = (row: any) => {
-	if (row) {
-		state.ruleForm = row;
-	}
-	state.dialogVisible = true;
-};
-
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialogVisible = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-
-
-defineExpose({ openDialog });
-</script>
-
-<style scoped lang="scss">
-:deep(.el-dialog__body) {
-	max-height: calc(90vh - 111px)!important;
-	overflow-y: auto;
-	overflow-x: hidden;
-}
-</style>

+ 0 - 273
src/views/developTool/codeGeneration/component/edit.vue

@@ -1,273 +0,0 @@
-<template>
-	<div class="system-edit-dic-container">
-		<el-dialog :title="(ruleForm.id !== 0 ? '修改' : '添加') + '换热站'" v-model="dialogVisible" width="769px">
-			<el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
-				<el-form-item label="所属换热站" prop="">
-					<el-tree-select
-						v-model="ruleForm.parentId"
-						:data="treeData"
-						:props="{
-							label: 'name',
-							children: 'children'
-						}"
-						node-key="id"
-						:clearable="true"
-						check-strictly
-						style="width: 100%;"
-						:render-after-expand="true"
-					/>
-				</el-form-item>
-				<el-form-item label="换热站名称" prop="name">
-					<el-input v-model="ruleForm.name" placeholder="请输入换热站名称" />
-				</el-form-item>
-				<el-form-item label="换热站位置" prop="position">
-					<el-input v-model="ruleForm.position" placeholder="请输入换热站位置" />
-				</el-form-item>
-				<el-form-item label="负责人" prop="principal">
-					<!-- <el-input v-model="ruleForm.principal" placeholder="请输入负责人" /> -->
-					<el-select v-model="ruleForm.principal" clearable style="width: 100%;" placeholder="请选择">
-						<el-option
-							v-for="item in userList"
-							:key="item.id"
-							:label="item.userNickname"
-							:value="item.id">
-						</el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="状态" prop="status">
-					<el-radio v-model="ruleForm.status" :label="1">在线</el-radio>
-					<el-radio v-model="ruleForm.status" :label="0">不在线</el-radio>
-				</el-form-item>
-				<el-form-item label="数据模型" prop="dataTemplateIds">
-					<el-select v-model="ruleForm.dataTemplateIds" multiple clearable style="width: 100%;" placeholder="请选择">
-						<el-option
-							v-for="item in dataHubList"
-							:key="item.id"
-							:label="item.name"
-							:value="item.id">
-						</el-option>
-					</el-select>
-				</el-form-item>
-        <el-form-item label="地图展示" prop="decade">
-					<div>
-						<span>经度:{{ ruleForm.lnt ? `${ruleForm.lnt},` : '' }}</span>
-						<span style="margin-left: 10px">纬度:{{ ruleForm.lat }}</span>
-					</div>
-					<div class="mb10" style="width: 100%">
-						<el-input v-model="keyword" @change="onLocalChange" placeholder="请输入关键字进行搜索" clearable style="width: 100%;"></el-input>
-					</div>
-					<div style="width: 100%; height: 300px" id="map-container"></div>
-        </el-form-item>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent, ref, unref, nextTick, onMounted } from 'vue';
-import api from '/@/api/heatStation';
-import userApi from '/@/api/system';
-import datahubApi from '/@/api/datahub';
-import { ElMessage } from 'element-plus';
-import { useStore } from '/@/store/index';
-interface RuleFormState {
-	id: number;
-	parentId: number | string;
-	name: string;
-	position: string;
-	lnt: number;
-	lat: number;
-	principal: string;
-	types: number;
-	status: number;
-}
-
-export default defineComponent({
-	name: 'headStationLoop',
-	setup(prop, { emit }) {
-		const formRef = ref<HTMLElement | null>(null);
-		const state = reactive({
-			dialogVisible: false,
-			map: null,
-			ruleForm: {
-				id: 0,
-				parentId: '',
-				name: '',
-				position: '',
-				lnt: '',
-				lat: '',
-				principal: '',
-				types: 1,
-				status: 1
-			},
-			keyword: '',
-			rules: {
-				name: [{ required: true, message: '换热站名称不能为空', trigger: 'blur' }],
-				position: [{ required: true, message: '换热站位置不能为空', trigger: 'blur' }],
-				principal: [{ required: true, message: '负责人不能为空', trigger: 'blur' }],
-				status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
-			},
-			treeData: [],
-			dataHubList: [],
-			userList: [],
-			mapLocal: null as any
-		})
-		const store = useStore();
-		// 打开弹窗
-		const openDialog = (row: any, tree: any) => {
-			resetForm()
-			queryDataHubList()
-			queryUserList()
-			state.treeData = tree
-
-			if (row) {
-				(state.ruleForm as any).id = row.id
-				getDetail()
-			}
-			nextTick(() => {
-				initMap()
-			}) 
-			state.dialogVisible = true
-		}
-		
-		const queryDataHubList = () => {
-			datahubApi.template.allList({})
-				.then((res: any) => {
-					state.dataHubList = res.list || [];
-				});
-		};
-		const queryUserList = () => {
-			userApi.user.getAllList({})
-				.then((res: any) => {
-					state.userList = res || [];
-				});
-		};
-		const resetForm = () => {
-			state.ruleForm = {
-				id: 0,
-				parentId: '',
-				name: '',
-				position: '',
-				lnt: '',
-				lat: '',
-				principal: '',
-				types: 1,
-				status: 1
-			}
-		}
-		// 关闭弹窗
-		const closeDialog = () => {
-			state.dialogVisible = false
-		}
-		// 取消
-		const onCancel = () => {
-			closeDialog()
-			state.keyword = ''
-		}
-		const getDetail = () => {
-			api.heatStation.detail(state.ruleForm.id)
-				.then((res: any) => {
-					state.ruleForm = {
-						...res,
-						parentId: res.parentId === -1 ? '' : res.parentId
-					}
-				})
-		}
-		// 新增
-		const onSubmit = () => {
-			const formWrap = unref(formRef) as any
-			if (!formWrap) return;
-			formWrap.validate((valid: boolean) => {
-				if (valid) {
-					let params = { ...state.ruleForm };
-					(params.parentId as any) = params.parentId || -1
-					if (state.ruleForm.id) {
-						//修改
-						api.heatStation.edit(params).then(() => {
-							ElMessage.success('换热站修改成功')
-							emit('queryList')
-							closeDialog() // 关闭弹窗
-						})
-					} else {
-						//添加
-						api.heatStation.add(params).then(() => {
-							ElMessage.success('换热站添加成功')
-							emit('queryList')
-							closeDialog() // 关闭弹窗
-						})
-					}
-				}
-			})
-		}
-		const initMap = () => {
-			let BMapGL = (window as any).BMapGL
-			let map = new BMapGL.Map("map-container");
-			// 获取布局配置信息
-			let getThemeConfig =  store.state.themeConfig.themeConfig;
-			// 116.404, 39.915
-			let point = new BMapGL.Point(state.ruleForm.lnt || 116.404, state.ruleForm.lat || 39.915);
-			let zoomCtrl = new BMapGL.ZoomControl();  // 添加缩放控件
-			let cityCtrl = new BMapGL.CityListControl()
-			if(getThemeConfig.isIsDark) {
-				map.setMapStyleV2({     
-					styleId: 'b8d841ee37fd5bd41e742049b6fcd0f5'
-				});
-			}
-
-			map.centerAndZoom(point, 15); 
-			
-			map.enableScrollWheelZoom(true); // 开启滚轮缩放
-			map.addControl(zoomCtrl);
-			map.addControl(cityCtrl);
-			if (state.ruleForm.lnt && state.ruleForm.lat) {
-				let marker = new BMapGL.Marker(new BMapGL.Point(state.ruleForm.lnt, state.ruleForm.lat));
-				// 在地图上添加点标记
-				map.addOverlay(marker);
-			}
-
-			state.mapLocal = new BMapGL.LocalSearch(map, {
-				renderOptions:{map: map}
-			})
-
-			map.addEventListener('click', (e: any) => {
-				console.log('map--click', e)
-				let point = e.latlng
-				state.ruleForm.lnt = point.lng
-				state.ruleForm.lat = point.lat
-			})
-		}
-
-		const onLocalChange = () => {
-			state.mapLocal.search(state.keyword)
-		}
-
-		return {
-			openDialog,
-			closeDialog,
-			onCancel,
-			onSubmit,
-			formRef,
-			onLocalChange,
-			// onMapClick,
-			// onMarkersset,
-			// mapReady,
-			...toRefs(state)
-		}
-	}
-})
-</script>
-
-<style scoped lang="scss">
-.mb10 {
-	margin-bottom: 10px;
-}
-.mr10 {
-	margin-right: 10px;
-}
-</style>

+ 0 - 421
src/views/developTool/codeGeneration/component/editParams.vue

@@ -1,421 +0,0 @@
-<template>
-	<el-dialog title="编辑表结构" v-model="state.dialogVisible" width="80%">
-		<el-tabs v-model="state.activeName" @tab-click="onTabClick">
-			<el-tab-pane label="基本信息" name="1">
-				<el-form ref="ruleForm" :model="state.ruleForm" label-width="120px">
-					<el-row>
-						<el-col :span="12">
-							<el-form-item label="表名称" prop="tableName">
-								<el-input size="default" v-model="state.ruleForm.tableName"></el-input>
-							</el-form-item>
-						</el-col>
-						<el-col :span="12">
-							<el-form-item label="表描述" prop="tableComment">
-								<el-input size="default" v-model="state.ruleForm.tableComment"></el-input>
-							</el-form-item>
-						</el-col>
-					</el-row>
-					<el-row>
-						<el-col :span="12">
-							<el-form-item label="实体类名称" prop="className">
-								<el-input size="default" v-model="state.ruleForm.className"></el-input>
-							</el-form-item>
-						</el-col>
-						<el-col :span="12">
-							<el-form-item label="作者" prop="functionAuthor">
-								<el-input size="default" v-model="state.ruleForm.functionAuthor"></el-input>
-							</el-form-item>
-						</el-col>
-					</el-row>
-					<el-form-item label="备注" prop="remark">
-						<el-input size="default" type="textarea" :rows="6" v-model="state.ruleForm.remark"></el-input>
-					</el-form-item>
-				</el-form>
-			</el-tab-pane>
-			<el-tab-pane label="字段信息" name="2">
-				<!-- v-loading="state.tableData.loading"  -->
-				<el-table :data="state.columns" style="width: 100%">
-					<el-table-column label="字段描述" align="center" width="150" fixed="left">
-						<template #default="{ row }">
-							<el-input size="default" v-model="row.columnComment" placeholder=""></el-input>
-						</template>
-					</el-table-column>
-					<el-table-column label="序号" type="index" width="60" align="center" />
-					<el-table-column label="字段列名" prop="columnName" width="150"> </el-table-column>
-					<el-table-column label="物理类型" prop="columnType" width="120"> </el-table-column>
-					<el-table-column label="go类型" prop="goType" width="120">
-						<template #default="{ row }">
-							<el-select size="default" v-model="row.goType" placeholder="">
-								<el-option label="int" value="int" />
-								<el-option label="unit" value="unit" />
-								<el-option label="int64" value="int64" />
-								<el-option label="unit64" value="unit64" />
-								<el-option label="float64" value="float64" />
-								<el-option label="string" value="string" />
-								<el-option label="Time" value="Time" />
-								<el-option label="byte" value="byte" />
-							</el-select>
-						</template>
-					</el-table-column>
-					<el-table-column label="go属性" prop="goField" width="150">
-						<template #default="{ row }">
-							<el-input size="default" v-model="row.goField" placeholder=""></el-input>
-						</template>
-					</el-table-column>
-					<el-table-column label="json属性" prop="jsonField" width="150">
-						<template #default="{ row }">
-							<el-input size="default" v-model="row.jsonField" placeholder=""></el-input>
-						</template>
-					</el-table-column>
-					<el-table-column label="插入" prop="isInsert" width="70">
-						<template #default="{ row }">
-							<!-- 1 0 -->
-							<el-checkbox size="default" v-model="row.isInsert"></el-checkbox>
-						</template>
-					</el-table-column>
-					<el-table-column label="编辑" prop="isEdit" width="70">
-						<template #default="{ row }">
-							<el-checkbox size="default" v-model="row.isEdit"></el-checkbox>
-						</template>
-					</el-table-column>
-					<el-table-column label="列表" prop="isList" width="70">
-						<template #default="{ row }">
-							<el-checkbox size="default" v-model="row.isList"></el-checkbox>
-						</template>
-					</el-table-column>
-					<el-table-column label="查询" prop="isQuery" width="70">
-						<template #default="{ row }">
-							<el-checkbox size="default" v-model="row.isQuery"></el-checkbox>
-						</template>
-					</el-table-column>
-					<el-table-column label="必填" prop="isRequired" width="70">
-						<template #default="{ row }">
-							<el-checkbox size="default" v-model="row.isRequired"></el-checkbox>
-						</template>
-					</el-table-column>
-					<el-table-column label="查询方式" prop="queryType" width="120">
-						<template #default="{ row }">
-							<el-select size="default" v-model="row.queryType" placeholder="">
-								<el-option label="=" value="EQ" />
-								<el-option label="!=" value="NE" />
-								<el-option label=">" value="GT" />
-								<el-option label=">=" value="GTE" />
-								<el-option label="<" value="LT" />
-								<el-option label="<=" value="LTE" />
-								<el-option label="LIKE" value="LIKE" />
-							</el-select>
-						</template>
-					</el-table-column>
-					<el-table-column label="显示类型" prop="htmlType" width="140">
-						<template #default="{ row }">
-							<el-select size="default" v-model="row.htmlType" placeholder="">
-								<el-option label="文本框" value="input" />
-								<el-option label="下拉框" value="select" />
-								<el-option label="开关" value="switch" />
-								<el-option label="单选框" value="radio" />
-								<el-option label="多选框" value="checkbox" />
-								<el-option label="文件选择" value="file" />
-								<el-option label="文本域" value="textarea" />
-								<el-option label="日期控件" value="datetime" />
-							</el-select>
-						</template>
-					</el-table-column>
-					<el-table-column label="字典类型" prop="dictType" width="160">
-						<template #default="{ row }">
-							<el-select size="default" v-model="row.dictType" placeholder="">
-								<el-option v-for="item in []" :key="item.value" :label="item.label" :value="item.value"> </el-option>
-							</el-select>
-						</template>
-					</el-table-column>
-					<el-table-column label="关系表" prop="linkTableName" width="160">
-						<template #default="{ row }">
-							<el-select size="default" v-model="row.linkTableName" placeholder="">
-								<el-option v-for="item in []" :key="item.value" :label="item.label" :value="item.value"> </el-option>
-							</el-select>
-						</template>
-					</el-table-column>
-				</el-table>
-			</el-tab-pane>
-			<el-tab-pane label="生成信息" name="3">
-				<el-form ref="ruleForm" :model="state.ruleForm" label-width="120px">
-					<el-row>
-						<el-col :span="12">
-							<el-form-item label="指定应用名" prop="packageName">
-								<el-input size="default" v-model="state.ruleForm.packageName"></el-input>
-							</el-form-item>
-						</el-col>
-						<el-col :span="12">
-							<el-form-item label="生成模块名" prop="moduleName">
-								<el-input size="default" v-model="state.ruleForm.moduleName"></el-input>
-							</el-form-item>
-						</el-col>
-					</el-row>
-					<el-row>
-						<el-col :span="12">
-							<el-form-item label="生成业务名" prop="businessName">
-								<el-input size="default" v-model="state.ruleForm.businessName"></el-input>
-							</el-form-item>
-						</el-col>
-						<el-col :span="12">
-							<el-form-item label="生成功能名" prop="functionName">
-								<el-input size="default" v-model="state.ruleForm.functionName"></el-input>
-							</el-form-item>
-						</el-col>
-					</el-row>
-				</el-form>
-			</el-tab-pane>
-		</el-tabs>
-
-		<template #footer>
-			<div class="dialog-footer">
-				<el-button type="default" @click="state.dialogVisible = false">取 消</el-button>
-				<el-button type="primary" @click="state.dialogVisible = false">提 交</el-button>
-			</div>
-		</template>
-	</el-dialog>
-</template>
-
-<script lang="ts" setup>
-import { reactive, ref } from 'vue';
-import api from '/@/api/device';
-import { ElMessage } from 'element-plus';
-
-const tagOption = ref(['api', 'editVue', 'entity', 'jsApi', 'listVue', 'router', 'service']);
-const state = reactive({
-	dialogVisible: false,
-	activeName: '1',
-	ruleForm: {},
-	columns: [
-		{
-			columnId: 29,
-			tableId: 3,
-			TableName: '',
-			columnName: 'business_type',
-			columnComment: '0其它 1新增 2修改 3删除',
-			columnType: 'varchar(1)',
-			columnKey: '',
-			goType: 'string',
-			goField: 'BusinessType',
-			jsonField: 'businessType',
-			htmlField: '',
-			isPk: '0',
-			isIncrement: '',
-			isRequired: '0',
-			isInsert: '1',
-			isEdit: '1',
-			isList: '1',
-			isQuery: '1',
-			queryType: 'EQ',
-			htmlType: 'datetime',
-			dictType: '',
-			sort: 3,
-			linkTableName: '',
-			linkTableClass: '',
-			linkTablePackage: '',
-			linkLabelId: '',
-			linkLabelName: '',
-		},
-		{
-			columnId: 31,
-			tableId: 3,
-			TableName: '',
-			columnName: 'method',
-			columnComment: '请求方法',
-			columnType: 'varchar(255)',
-			columnKey: '',
-			goType: 'string',
-			goField: 'Method',
-			jsonField: 'method',
-			htmlField: '',
-			isPk: '0',
-			isIncrement: '',
-			isRequired: '0',
-			isInsert: '1',
-			isEdit: '1',
-			isList: '1',
-			isQuery: '1',
-			queryType: 'EQ',
-			htmlType: 'input',
-			dictType: '',
-			sort: 4,
-			linkTableName: '',
-			linkTableClass: '',
-			linkTablePackage: '',
-			linkLabelId: '',
-			linkLabelName: '',
-		},
-		{
-			columnId: 33,
-			tableId: 3,
-			TableName: '',
-			columnName: 'oper_name',
-			columnComment: '操作人员',
-			columnType: 'varchar(255)',
-			columnKey: '',
-			goType: 'string',
-			goField: 'OperName',
-			jsonField: 'operName',
-			htmlField: '',
-			isPk: '0',
-			isIncrement: '',
-			isRequired: '1',
-			isInsert: '1',
-			isEdit: '1',
-			isList: '1',
-			isQuery: '1',
-			queryType: 'LIKE',
-			htmlType: 'input',
-			dictType: '',
-			sort: 5,
-			linkTableName: '',
-			linkTableClass: '',
-			linkTablePackage: '',
-			linkLabelId: '',
-			linkLabelName: '',
-		},
-		{
-			columnId: 35,
-			tableId: 3,
-			TableName: '',
-			columnName: 'oper_url',
-			columnComment: '操作url',
-			columnType: 'varchar(255)',
-			columnKey: '',
-			goType: 'string',
-			goField: 'OperUrl',
-			jsonField: 'operUrl',
-			htmlField: '',
-			isPk: '0',
-			isIncrement: '',
-			isRequired: '0',
-			isInsert: '1',
-			isEdit: '1',
-			isList: '1',
-			isQuery: '1',
-			queryType: 'EQ',
-			htmlType: 'input',
-			dictType: '',
-			sort: 6,
-			linkTableName: '',
-			linkTableClass: '',
-			linkTablePackage: '',
-			linkLabelId: '',
-			linkLabelName: '',
-		},
-		{
-			columnId: 37,
-			tableId: 3,
-			TableName: '',
-			columnName: 'oper_ip',
-			columnComment: '操作IP',
-			columnType: 'varchar(255)',
-			columnKey: '',
-			goType: 'string',
-			goField: 'OperIp',
-			jsonField: 'operIp',
-			htmlField: '',
-			isPk: '0',
-			isIncrement: '',
-			isRequired: '0',
-			isInsert: '1',
-			isEdit: '1',
-			isList: '1',
-			isQuery: '1',
-			queryType: 'EQ',
-			htmlType: 'input',
-			dictType: '',
-			sort: 7,
-			linkTableName: '',
-			linkTableClass: '',
-			linkTablePackage: '',
-			linkLabelId: '',
-			linkLabelName: '',
-		},
-		{
-			columnId: 41,
-			tableId: 3,
-			TableName: '',
-			columnName: 'status',
-			columnComment: '0=正常,1=异常',
-			columnType: 'varchar(1)',
-			columnKey: '',
-			goType: 'string',
-			goField: 'Status',
-			jsonField: 'status',
-			htmlField: '',
-			isPk: '0',
-			isIncrement: '',
-			isRequired: '1',
-			isInsert: '1',
-			isEdit: '1',
-			isList: '1',
-			isQuery: '1',
-			queryType: 'EQ',
-			htmlType: 'radio',
-			dictType: '',
-			sort: 10,
-			linkTableName: '',
-			linkTableClass: '',
-			linkTablePackage: '',
-			linkLabelId: '',
-			linkLabelName: '',
-		},
-		{
-			columnId: 42,
-			tableId: 3,
-			TableName: '',
-			columnName: 'oper_id',
-			columnComment: '',
-			columnType: 'bigint(20)',
-			columnKey: '',
-			goType: 'int64',
-			goField: 'OperId',
-			jsonField: 'operId',
-			htmlField: '',
-			isPk: '1',
-			isIncrement: '',
-			isRequired: '0',
-			isInsert: '1',
-			isEdit: '0',
-			isList: '1',
-			isQuery: '1',
-			queryType: 'EQ',
-			htmlType: 'input',
-			dictType: '',
-			sort: 1,
-			linkTableName: '',
-			linkTableClass: '',
-			linkTablePackage: '',
-			linkLabelId: '',
-			linkLabelName: '',
-		},
-	],
-});
-// 打开弹窗
-const openDialog = (row: any) => {
-	if (row) {
-		state.ruleForm = row;
-	}
-	state.dialogVisible = true;
-};
-
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialogVisible = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-const onTabClick = () => {};
-
-defineExpose({ openDialog });
-</script>
-
-<style scoped lang="scss">
-:deep(.el-dialog__body) {
-	max-height: calc(90vh - 111px) !important;
-	overflow-y: auto;
-	overflow-x: hidden;
-}
-</style>

+ 0 - 56
src/views/developTool/codeGeneration/component/preview.vue

@@ -1,56 +0,0 @@
-<template>
-	<el-dialog title="预览" v-model="state.dialogVisible" width="80%">
-		<div class="mb-4">
-			<el-button type="primary" size="small" plain v-for="tag in tagOption" :key="tag">{{ tag }}</el-button>
-		</div>
-
-		<div style="background: #000; color: #fff; height: 300px;">
-			代码区域
-		</div>
-		
-		<template #footer>
-			<span class="dialog-footer">
-				<el-button type="primary" @click="state.dialogVisible = false" size="default">确 定</el-button>
-			</span>
-		</template>
-	</el-dialog>
-</template>
-
-<script lang="ts" setup>
-import { reactive, ref } from 'vue';
-import api from '/@/api/device';
-import { ElMessage } from 'element-plus';
-
-const tagOption = ref(['api', 'editVue', 'entity', 'jsApi', 'listVue', 'router', 'service'])
-const state = reactive({
-	dialogVisible: false,
-	ruleForm: {}
-});
-// 打开弹窗
-const openDialog = (row: any) => {
-	if (row) {
-		state.ruleForm = row;
-	}
-	state.dialogVisible = true;
-};
-
-// 关闭弹窗
-const closeDialog = () => {
-	state.dialogVisible = false;
-};
-// 取消
-const onCancel = () => {
-	closeDialog();
-};
-
-
-defineExpose({ openDialog });
-</script>
-
-<style scoped lang="scss">
-:deep(.el-dialog__body) {
-	max-height: calc(90vh - 111px)!important;
-	overflow-y: auto;
-	overflow-x: hidden;
-}
-</style>

+ 0 - 191
src/views/developTool/codeGeneration/index.vue

@@ -1,191 +0,0 @@
-<template>
-  <div class="system-dic-container">
-    <el-card shadow="hover">
-      <div class="system-user-search mb15">
-        <el-form :model="state.tableData.param" ref="queryRef" :inline="true" label-width="100px">
-          <el-form-item label="表名称" prop="tableName">
-            <el-input v-model="state.tableData.param.tableName" placeholder="请输入表名称" clearable size="default" @keyup.enter="queryList" />
-          </el-form-item>
-		  		<el-form-item label="表描述" prop="tableComment">
-            <el-input v-model="state.tableData.param.tableComment" placeholder="请输入表描述" clearable size="default" @keyup.enter="queryList" />
-          </el-form-item>
-          <el-form-item>
-            <el-button size="default" type="primary" class="ml10" @click="queryList">
-              <el-icon>
-                <ele-Search />
-              </el-icon>
-              查询
-            </el-button>
-            <el-button size="default" @click="resetQuery(queryRef)">
-              <el-icon>
-                <ele-Refresh />
-              </el-icon>
-              重置
-            </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-			
-      <el-table :data="state.tableData.data" v-loading="state.tableData.loading" style="width: 100%">
-        <!-- <el-table-column type="selection" width="55" align="center" /> -->
-        <el-table-column label="ID" align="center" prop="tableId" width="60" />
-	    	<el-table-column label="表名称" prop="tableName" min-width="120" :show-overflow-tooltip="true" />
-	    	<el-table-column label="表描述" prop="tableComment" min-width="120" :show-overflow-tooltip="true" />
-	    	<el-table-column label="模型名称" prop="className" min-width="120" :show-overflow-tooltip="true" />
-	    	<el-table-column label="创建时间" prop="createTime" width="180"/>
-	    	<el-table-column label="更新时间" prop="updateTime" width="180"/>
-				<el-table-column label="操作" width="280" align="center" fixed="right">
-          <template #default="scope">
-			 			<el-button size="small" text type="primary" @click="operate('preview', scope.row)">预览</el-button>
-            <el-button size="small" text type="primary" @click="operate('editParams', scope.row)">参数编辑</el-button>
-            <el-button size="small" text type="primary" @click="operate('', scope.row)">代码生成</el-button>
-            <el-button size="small" text type="primary" @click="operate('buildConfig', scope.row)">生成配置</el-button>
-            <el-button size="small" text type="danger" @click="operate('delete', scope.row)">删除</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-				v-show="state.tableData.total>0"
-				:total="state.tableData.total"
-				v-model:page="state.tableData.param.pageNum"
-				v-model:limit="state.tableData.param.pageSize"
-				@pagination="queryList"
-			/>
-    </el-card>
-    <!-- <EditDic ref="editDicRef" :treeData="tableData.data" @queryList="queryList" />
-    <Detail ref="detailRef"  /> -->
-		<Preview ref="previewRef"/>
-		<EditParams ref="editParamsRef"/>
-		<BuildConfig ref="buildConfigRef"/>
-  </div>
-</template>
-
-<script lang="ts" setup>
-import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import EditDic from './component/edit.vue';
-import Detail from './component/detail.vue';
-import Preview from './component/preview.vue';
-import EditParams from './component/editParams.vue';
-import BuildConfig from './component/buildConfig.vue';
-import api from '/@/api/heatStation';
-
-// 定义接口来定义对象的类型
-interface TableDataRow {
-	id: number;
-	name: string;
-	code: string;
-	stationId: string;
-	loopTypes: number;
-	energyTypes: number;
-	heatingObject: number;
-	heatingTypes: number;
-	heatingArea: string;
-	forRealArea: string;
-	decade: string;
-	status: number;
-}
-interface TableDataState {
-	ids: number[];
-	tableData: {
-		data: Array<TableDataRow>;
-		loading: boolean;
-		param: {
-			name: string;
-			code: string;
-			status: number;
-		};
-	};
-}
-
-const addDicRef = ref();
-const editDicRef = ref();
-const detailRef = ref();
-const previewRef = ref();
-const editParamsRef = ref();
-const buildConfigRef = ref();
-const queryRef = ref();
-const state = reactive({
-	ids: [],
-	tableData: {
-		data: [{
-			"tableId": 3,
-			"tableName": "log_opers",
-			"tableComment": "LogOpers",
-			"className": "LogOpers",
-			"tplCategory": "crud",
-			"packageName": "admin",
-			"moduleName": "log-opers",
-			"businessName": "logOpers",
-			"functionName": "LogOpers",
-			"functionAuthor": "panda",
-			"options": "",
-			"remark": "",
-			"pkColumn": "oper_id",
-			"pkGoField": "OperId",
-			"pkJsonField": "operId",
-			"columns": null,
-			"createTime": "2022-01-06 15:02:45",
-			"updateTime": "2022-01-06 15:02:45"
-		}],
-		loading: false,
-		param: {
-			tableName: '',
-			tableComment: '',
-			status: -1
-		},
-	},
-});
-// 初始化表格数据
-const initTableData = () => {
-	queryList();
-};
-const queryList = () => {
-	// state.tableData.loading = true
-	// api.heatStation.getList(state.tableData.param)
-	// 	.then((res: any) => {
-	// 		state.tableData.data = res || [];
-	// 		state.tableData.loading = false
-	// 	});
-};
-
-// 页面加载时
-onMounted(() => {
-	initTableData();
-});
-/** 重置按钮操作 */
-const resetQuery = (formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.resetFields();
-	queryList();
-};
-
-const operate = (type: string, row: any) => {
-	switch(type) {
-		case 'preview':
-			console.log(previewRef.value)
-			previewRef.value.openDialog(row)
-			break
-		case 'editParams':
-			editParamsRef.value.openDialog(row)
-			break
-		case 'buildConfig':
-			buildConfigRef.value.openDialog(row)
-			break
-		case 'delete':
-			ElMessageBox.confirm(`是否确认删除TABLE编号为"${row.tableId}"的数据项?`, '提示', {
-				confirmButtonText: '确认',
-				cancelButtonText: '取消',
-				type: 'warning',
-			})
-				.then(() => {
-					// api.heatStation.del(row.id).then(() => {
-					// 	ElMessage.success('删除成功');
-					// 	queryList();
-					// });
-				})
-				.catch(() => {});
-			break
-	}
-}
-</script>

+ 0 - 400
src/views/heating/energyAnalysis/analysisReport/index.vue

@@ -1,400 +0,0 @@
-<template>
-  <div class="page-container">
-    <el-card shadow="hover">
-      <div class="panel">
-        <div class="left-panel">
-          <el-input v-model="filterText" clearable placeholder="请输入" />
-          <div class="list">
-            <el-tree ref="treeRef" class="filter-tree" :data="state.heatList" :props="{
-                label: 'name',
-                children: 'loopInfo'
-              }" default-expand-all :filter-node-method="filterNode" :expand-on-click-node="false" @node-click="onNodeClick">
-              <template #default="{ data }">
-                <span class="custom-tree-node" :class="{ active: data.code === curNode }">
-                  <span class="name" :title="data.name">{{ data.name }}</span>
-                </span>
-              </template>
-            </el-tree>
-          </div>
-        </div>
-        <div class="right-panel">
-          <el-form :model="state.tableData.param" ref="queryRef" :inline="true" label-width="68px">
-            <el-form-item label="时间范围" prop="dateRange">
-              <el-date-picker v-model="state.tableData.param.dateRange" size="default" style="width: 240px" value-format="YYYY-MM-DD" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
-            <el-form-item>
-              <el-button size="default" type="primary" @click="getChartData">
-                <el-icon>
-                  <ele-Search />
-                </el-icon>
-                查询
-              </el-button>
-              <!-- <el-button size="default" @click="resetQuery(queryRef)">
-                <el-icon>
-                  <ele-Refresh />
-                </el-icon>
-                重置
-              </el-button> -->
-            </el-form-item>
-          </el-form>
-          <el-tabs v-model="tabName" @tab-change="initLineChart">
-            <el-tab-pane label="温度" :name="0"></el-tab-pane>
-            <el-tab-pane label="压力" :name="1"></el-tab-pane>
-            <el-tab-pane label="流量" :name="2"></el-tab-pane>
-            <el-tab-pane label="阀门开度" :name="3"></el-tab-pane>
-          </el-tabs>
-
-          <div class="chart" style="height: 400px" v-loading="state.tableData.loading" ref="lineChartRef"></div>
-          <div class="title flex-row" style="margin-top:20px">数据列表 <el-button @click="exportExcel">数据导出</el-button>
-          </div>
-          <el-table :data="tableData" v-loading="loading" style="width: 100%">
-            <el-table-column label="环路编号" prop="huanLuNo" :show-overflow-tooltip="true" />
-            <el-table-column label="环路名称" prop="huanLuName" :show-overflow-tooltip="true" />
-            <el-table-column label="一网供水温度" prop="inTemperature1" :show-overflow-tooltip="true" />
-            <el-table-column label="一网回水温度" prop="outTemperature1" :show-overflow-tooltip="true" />
-            <el-table-column label="二网供水温度" prop="inTemperature2" :show-overflow-tooltip="true" />
-            <el-table-column label="二网回水温度" prop="outTemperature2" :show-overflow-tooltip="true" />
-            <el-table-column label="一网供水压力" prop="inPressure1" :show-overflow-tooltip="true" />
-            <el-table-column label="一网回水压力" prop="outPressure1" :show-overflow-tooltip="true" />
-            <el-table-column label="二网供水压力" prop="inPressure2" :show-overflow-tooltip="true" />
-            <el-table-column label="二网回水压力" prop="outPressure2" :show-overflow-tooltip="true" />
-            <el-table-column label="供水流量" prop="supplyWaterFlow" :show-overflow-tooltip="true" />
-            <el-table-column label="回水流量" prop="returnWaterFlow" :show-overflow-tooltip="true" />
-            <el-table-column label="二网供水流量" prop="supplyWaterFlow2" :show-overflow-tooltip="true" />
-            <!-- <el-table-column label="二网回水流量" prop="returnWaterFlow2" :show-overflow-tooltip="true" /> -->
-            <el-table-column label="阀门开度" prop="supplyValve" :show-overflow-tooltip="true" />
-          </el-table>
-          <pagination v-if="params.total" :total="params.total" v-model:page="params.pageNum" v-model:limit="params.pageSize" @pagination="getList()" />
-        </div>
-      </div>
-    </el-card>
-  </div>
-</template>
-
-<script lang="ts" setup>
-import { ref, reactive, watch, nextTick, onMounted } from 'vue';
-import * as echarts from 'echarts';
-import { useStore } from '/@/store/index';
-import heatApi from '/@/api/heatStation';
-import energyApi from '/@/api/energyAnalysis';
-import { formatDate } from '/@/utils/formatTime'
-import { useSearch } from '/@/hooks/useCommon';
-import downloadFile from '/@/utils/download';
-// import { export_json_to_excel } from '/@/utils/xlsx';
-
-const { params, tableData, getList, loading } = useSearch<any[]>(energyApi.getEnergyLoopdataPage, 'list', {
-  loopCode: '',
-  dateRange: [
-    formatDate(new Date(), 'YYYY-mm-dd'),
-    formatDate(new Date(), 'YYYY-mm-dd')
-  ]
-})
-
-let nodeName = ''
-
-let global: any = {
-  lineChart: null,
-  dispose: [null, '', undefined],
-};
-
-const store = useStore();
-const state = reactive({
-  myCharts: [],
-  charts: {
-    theme: '',
-    bgColor: '',
-    color: '#303133',
-  },
-  heatList: [],
-  lineChartXAxis: [],
-  inPressure1: [],
-  inPressure2: [],
-  inTemperature1: [],
-  inTemperature2: [],
-  outPressure1: [],
-  outPressure2: [],
-  outTemperature1: [],
-  outTemperature2: [],
-  supplyWaterFlow: [],
-  supplyWaterFlow2: [],
-  returnWaterFlow: [],
-  returnWaterFlow2: [],
-  supplyValve: [],
-  tableData: {
-    data: [],
-    loading: false,
-    param: {
-      dateRange: [
-        formatDate(new Date(), 'YYYY-mm-dd'),
-        formatDate(new Date(), 'YYYY-mm-dd')
-      ]
-    }
-  }
-})
-
-const lineChartRef = ref()
-const treeRef = ref()
-const filterText = ref('')
-const curNode = ref('')
-const tabName = ref(0)
-watch(filterText, (val) => {
-  treeRef.value!.filter(val)
-})
-watch(() => state.tableData.param.dateRange, (val) => {
-  params.dateRange = val
-})
-const filterNode = (value: string, data: any) => {
-  if (!value) return true
-  return data.name.includes(value)
-}
-
-// 后端导出
-const exportExcel = () => {
-  energyApi.loopdataExport({
-    loopCode: curNode.value,
-    dateRange: state.tableData.param.dateRange
-  }).then((res: any) => {
-    downloadFile(res, nodeName + '-环路分析数据导出.xlsx')
-  })
-}
-
-// 前端导出
-// const exportExcel = () => {
-
-//   const header = {
-//     huanLuNo: '环路编号',
-//     inTemperature1: '一网供水温度',
-//     outTemperature1: '一网回水温度',
-//     inTemperature2: '二网供水温度',
-//     outTemperature2: '二网回水温度',
-//     inPressure1: '一网供水压力',
-//     outPressure1: '一网回水压力',
-//     inPressure2: '二网供水压力',
-//     outPressure2: '二网回水压力',
-//     supplyWaterFlow: '供水流量',
-//     returnWaterFlow: '回水流量',
-//     supplyWaterFlow2: '二网供水流量',
-//     supplyValve: '阀门开度',
-//   };
-
-//   // 主体数据
-//   const list = state.tableData.data.map((item: any) => {
-//     const newItem: any = {}
-//     Object.keys(header).forEach((key: string) => {
-//       newItem[key] = item[key]
-//     })
-//     return newItem
-//   });
-
-//   export_json_to_excel({
-//     header,
-//     list,
-//     fileName: nodeName + '-环路分析数据导出',
-//   });
-// }
-
-const queryTree = () => {
-  heatApi.heatStation.getAllStaAndLoop({})
-    .then((res: any) => {
-      state.heatList = res || [];
-      if (state.heatList.length) {
-        curNode.value = state.heatList[0].code
-        params.loopCode = state.heatList[0].code
-        nodeName = state.heatList[0].name
-      }
-      getChartData()
-    });
-};
-// 
-const getChartData = () => {
-  getList();
-  state.tableData.loading = true
-  energyApi.getEnergyLoopdata({
-    loopCode: curNode.value,
-    dateRange: state.tableData.param.dateRange
-  }).then((res: any) => {
-    const data = res.list || []
-    state.tableData.data = data
-
-    state.lineChartXAxis = []
-    state.inPressure1 = []
-    state.inPressure2 = []
-    state.inTemperature1 = []
-    state.inTemperature2 = []
-    state.outPressure1 = []
-    state.outPressure2 = []
-    state.outTemperature1 = []
-    state.outTemperature2 = []
-    state.supplyWaterFlow = []
-    state.supplyWaterFlow2 = []
-    state.returnWaterFlow = []
-    state.returnWaterFlow2 = []
-    state.supplyValve = []
-
-    data.forEach((item: any) => {
-      state.lineChartXAxis.push(item.datetime);
-      state.inPressure1.push(item.inPressure1);
-      state.inPressure2.push(item.inPressure2);
-      state.inTemperature1.push(item.inTemperature1);
-      state.inTemperature2.push(item.inTemperature2);
-      state.outPressure1.push(item.outPressure1);
-      state.outPressure2.push(item.outPressure2);
-      state.outTemperature1.push(item.outTemperature1);
-      state.outTemperature2.push(item.outTemperature2);
-      state.supplyWaterFlow.push(item.supplyWaterFlow);
-      state.supplyWaterFlow2.push(item.supplyWaterFlow2);
-      state.returnWaterFlow.push(item.returnWaterFlow);
-      state.returnWaterFlow2.push(item.returnWaterFlow2);
-      state.supplyValve.push(item.supplyValve);
-    });
-    state.tableData.loading = false
-    nextTick(() => {
-      initLineChart();
-    });
-  })
-}
-const onNodeClick = (data: any) => {
-  nodeName = data.name
-  // nodeName = data.code
-  curNode.value = data.code
-  params.loopCode = data.code
-  getChartData()
-}
-
-// 初始化图表
-const initLineChart = () => {
-  if (!global.dispose.some((b: any) => b === global.lineChart)) global.lineChart.dispose();
-  global.lineChart = <any>echarts.init(lineChartRef.value, state.charts.theme);
-
-  const seriesList = [[
-    { name: '一网供水温度', type: 'line', symbolSize: 6, symbol: 'circle', smooth: true, data: state.inTemperature1 },
-    { name: '二网供水温度', type: 'line', symbolSize: 6, symbol: 'circle', smooth: true, data: state.inTemperature2 },
-    { name: '一网回水温度', type: 'line', symbolSize: 6, symbol: 'circle', smooth: true, data: state.outTemperature1 },
-  ], [
-    { name: '一网供水压力', type: 'line', symbolSize: 6, symbol: 'circle', smooth: true, data: state.inPressure1 },
-    { name: '二网供水压力', type: 'line', symbolSize: 6, symbol: 'circle', smooth: true, data: state.inPressure2 },
-    { name: '一网回水压力', type: 'line', symbolSize: 6, symbol: 'circle', smooth: true, data: state.outPressure1 },
-    { name: '二网回水压力', type: 'line', symbolSize: 6, symbol: 'circle', smooth: true, data: state.outPressure2 },
-  ], [
-    { name: '供水流量', type: 'line', symbolSize: 6, symbol: 'circle', smooth: true, data: state.supplyWaterFlow },
-    { name: '二网供水流量', type: 'line', symbolSize: 6, symbol: 'circle', smooth: true, data: state.supplyWaterFlow2 },
-    { name: '回水流量', type: 'line', symbolSize: 6, symbol: 'circle', smooth: true, data: state.returnWaterFlow },
-    // { name: '二网回水流量', type: 'line', symbolSize: 6, symbol: 'circle', smooth: true, data: state.returnWaterFlow2 },
-  ], [
-    { name: '阀门开度', type: 'line', symbolSize: 6, symbol: 'circle', smooth: true, data: state.supplyValve },
-  ]]
-
-  const option = {
-    backgroundColor: state.charts.bgColor,
-    grid: { top: 70, right: 20, bottom: 30, left: 30 },
-    tooltip: { trigger: 'axis' },
-    legend: {},
-    xAxis: {
-      data: state.lineChartXAxis,
-    },
-    yAxis: [
-      {
-        type: 'value',
-        name: '',
-        splitLine: { show: true, lineStyle: { type: 'dashed', color: '#f5f5f5' } },
-      },
-    ],
-    dataZoom: [
-      {
-        type: 'inside',
-        start: 0,
-        end: 30
-      },
-      {
-        start: 0,
-        end: 30
-      }
-    ],
-    series: seriesList[tabName.value] || []
-  };
-  (<any>global.lineChart).setOption(option);
-  (<any>state.myCharts).push(global.lineChart);
-}
-
-// 批量设置 echarts resize
-const initEchartsResizeFun = () => {
-  nextTick(() => {
-    for (let i = 0; i < state.myCharts.length; i++) {
-      setTimeout(() => {
-        (<any>state.myCharts[i]).resize();
-      }, i * 100);
-    }
-  });
-};
-// 批量设置 echarts resize
-const initEchartsResize = () => {
-  window.addEventListener('resize', initEchartsResizeFun);
-};
-// 页面加载时
-onMounted(() => {
-  queryTree()
-  initEchartsResize();
-});
-
-// 监听 vuex 中是否开启深色主题
-watch(
-  () => store.state.themeConfig.themeConfig.isIsDark,
-  (isIsDark) => {
-    nextTick(() => {
-      state.charts.theme = isIsDark ? 'dark' : '';
-      state.charts.bgColor = isIsDark ? 'transparent' : '';
-      state.charts.color = isIsDark ? '#dadada' : '#303133';
-      setTimeout(() => {
-        initLineChart();
-      }, 500);
-    });
-  },
-  {
-    deep: true,
-    immediate: true,
-  }
-);
-</script>
-
-<style scoped lang="scss">
-.title {
-	font-size: 16px;
-	font-weight: bold;
-}
-.panel {
-	display: flex;
-	justify-content: space-between;
-	.left-panel {
-		width: 250px;
-		min-width: 250px;
-		.list {
-			max-height: 625px;
-			overflow-y: auto;
-		}
-	}
-	.right-panel {
-		flex: 1;
-		padding: 16px;
-		overflow-x: hidden;
-		.chart {
-			width: 100%;
-		}
-	}
-}
-
-.custom-tree-node {
-	.name {
-		overflow: hidden;
-		text-overflow: ellipsis;
-	}
-	&.active {
-		color: var(--el-color-primary);
-		// background: var(--el-color-primary-light-9);
-	}
-}
-
-:deep(.el-form-item) {
-	// margin-bottom: 0;
-}
-</style>

+ 0 - 255
src/views/heating/energyAnalysis/energyRanking/index.vue

@@ -1,255 +0,0 @@
-<template>
-  <div class="system-dic-container">
-    <el-card shadow="hover">
-      <div class="system-user-search mb15">
-        <el-form :model="state.tableData.param" ref="queryRef" :inline="true" label-width="60px">
-					<el-form-item label="类型" prop="type">
-						<el-radio-group v-model="state.tableData.param.type" size="default" @change="queryList">
-							<el-radio-button label="1">热单耗</el-radio-button>
-							<el-radio-button label="2">电单耗</el-radio-button>
-							<el-radio-button label="3">水单耗</el-radio-button>
-						</el-radio-group>
-					</el-form-item>
-          <el-form-item label="top" prop="top">
-            <el-select v-model="state.tableData.param.top" placeholder="top" filterable clearable size="default" @change="queryList">
-							<el-option label="10" :value="10" />
-							<el-option label="30" :value="30" />
-							<el-option label="60" :value="60" />
-						</el-select>
-          </el-form-item>
-        </el-form>
-      </div>
-			<div class="title mt20">能耗红榜</div>
-			<div class="chart-grid">
-				<div style="height: 300px" v-loading="state.tableData.loading" ref="redChartOneRef"></div>
-			</div>
-			<div class="title mt20">能耗黑榜</div>
-			<div class="chart-grid">
-				<div style="height: 300px" v-loading="state.tableData.loading" ref="blackChartOneRef"></div>
-			</div>
-    </el-card>
-  </div>
-</template>
-
-<script lang="ts" setup>
-import { toRefs, reactive, onMounted, ref, watch, nextTick } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import * as echarts from 'echarts';
-import { useStore } from '/@/store/index';
-import energyApi from '/@/api/energyAnalysis';
-
-let global: any = {
-	redChartOneRef: null,
-	blackChartOneRef: null,
-	dispose: [null, '', undefined],
-};
-
-const queryRef = ref();
-const redChartOneRef = ref();
-const blackChartOneRef = ref();
-
-const store = useStore();
-const state = reactive({
-	myCharts: [],
-	charts: {
-		theme: '',
-		bgColor: '',
-		color: '#303133',
-	},
-	chartTitle: '',
-  redChartXAxis: [],
-  redChartList: [],
-  blackChartXAxis: [],
-  blackChartList: [],
-	tableData: {
-		data: [],
-		loading: false,
-		total: 0,
-		param: {
-			type: 1,
-			top: 10,
-		}
-	}
-});
-
-const queryList = () => {
-	state.tableData.loading = true
-	energyApi.getEnergyTop(state.tableData.param)
-		.then(res => {
-			console.log(res)
-			let data = res.data
-			let titleMap = {
-				1: '热单耗',
-				2: '水单耗',
-				3: '电单耗'
-			}
-  		state.chartTitle = titleMap[state.tableData.param.type]
-  		state.redChartXAxis = []
-			state.redChartList = []
-			state.blackChartXAxis = []
-			state.blackChartList = []
-			data.head.forEach((item: any) => {
-				state.redChartXAxis.push(item.huanLuName)
-				state.redChartList.push(item.value)
-			})
-			data.tail.forEach((item: any) => {
-				state.blackChartXAxis.push(item.huanLuName)
-				state.blackChartList.push(item.value)
-			})
-			state.tableData.loading = false
-
-			nextTick(() => {
-				initChart()
-			})
-		})
-}
-// 页面加载时
-onMounted(() => {
-	queryList()
-});
-
-const initChart = () => {
-	initBarRedChart()
-	initBarBlackChart()
-}
-
-// 初始化图表
-const initBarRedChart = () => {
-	if (!global.dispose.some((b: any) => b === global.redChartOneRef)) global.redChartOneRef.dispose();
-	global.redChartOneRef = <any>echarts.init(redChartOneRef.value, state.charts.theme);
-	const option = {
-		tooltip: {
-			trigger: 'axis',
-			axisPointer: {
-				type: 'shadow'
-			}
-		},
-		legend: {},
-		grid: {
-			left: '3%',
-			right: '4%',
-			bottom: '3%',
-			containLabel: true
-		},
-		xAxis: [
-			{
-				type: 'category',
-				data: state.redChartXAxis
-			}
-		],
-		yAxis: [
-			{
-				type: 'value'
-			}
-		],
-		series: [
-			{
-				name: state.chartTitle,
-				type: 'bar',
-				emphasis: {
-					focus: 'series'
-				},
-				data: state.redChartList
-			}
-		]
-	};
-	(<any>global.redChartOneRef).setOption(option);
-	(<any>state.myCharts).push(global.redChartOneRef);
-}
-const initBarBlackChart = () => {
-	if (!global.dispose.some((b: any) => b === global.blackChartOneRef)) global.blackChartOneRef.dispose();
-	global.blackChartOneRef = <any>echarts.init(blackChartOneRef.value, state.charts.theme);
-	const option = {
-		tooltip: {
-			trigger: 'axis',
-			axisPointer: {
-				type: 'shadow'
-			}
-		},
-		legend: {},
-		grid: {
-			left: '3%',
-			right: '4%',
-			bottom: '3%',
-			containLabel: true
-		},
-		xAxis: [
-			{
-				type: 'category',
-				data: state.blackChartXAxis
-			}
-		],
-		yAxis: [
-			{
-				type: 'value'
-			}
-		],
-		series: [
-			{
-				name: state.chartTitle,
-				type: 'bar',
-				emphasis: {
-					focus: 'series'
-				},
-				data: state.blackChartList
-			}
-		]
-	};
-	(<any>global.blackChartOneRef).setOption(option);
-	(<any>state.myCharts).push(global.blackChartOneRef);
-}
-
-// 批量设置 echarts resize
-const initEchartsResizeFun = () => {
-	nextTick(() => {
-		for (let i = 0; i < state.myCharts.length; i++) {
-			setTimeout(() => {
-				(<any>state.myCharts[i]).resize();
-			}, i * 1000);
-		}
-	});
-};
-// 批量设置 echarts resize
-const initEchartsResize = () => {
-	window.addEventListener('resize', initEchartsResizeFun);
-};
-// 页面加载时
-onMounted(() => {
-	initEchartsResize();
-});
-
-// 监听 vuex 中是否开启深色主题
-watch(
-	() => store.state.themeConfig.themeConfig.isIsDark,
-	(isIsDark) => {
-		nextTick(() => {
-			state.charts.theme = isIsDark ? 'transparent' : '';
-			state.charts.bgColor = isIsDark ? 'transparent' : '';
-			state.charts.color = isIsDark ? '#dadada' : '#303133';
-			setTimeout(() => {
-				initChart();
-			}, 500)
-		});
-	},
-	{
-		deep: true,
-		immediate: true,
-	}
-);
-</script>
-
-
-<style lang="scss" scoped>
-.title {
-	font-size: 16px;
-	font-weight: bold;
-}
-.chart-grid {
-	// display: grid;
-	// grid-template-columns: repeat(3, 1fr);
-	// grid-column-gap: 10px;
-}
-.mt20 {
-	margin-top: 20px;
-}
-</style>

+ 0 - 145
src/views/heating/energyAnalysis/energyWarning/index.vue

@@ -1,145 +0,0 @@
-<template>
-  <div class="system-dic-container">
-    <el-card shadow="hover">
-      <div class="system-user-search mb15">
-        <el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="90px">
-					<el-form-item label="所属换热站" prop="heatStaId">
-						<el-tree-select
-							v-model="tableData.param.heatStaId"
-							:data="heatList"
-							:props="{
-								label: 'name',
-								children: 'children'
-							}"
-							node-key="id"
-							:clearable="true"
-							check-strictly
-							size="default"
-							style="width: 100%;"
-							placeholder="请选择"
-							:render-after-expand="true"
-						/>
-					</el-form-item>
-          <el-form-item label="负责人" prop="plotId">
-            <el-select v-model="tableData.param.plotId" placeholder="选择负责人" filterable clearable size="default">
-							<el-option
-								v-for="item in []"
-								:key="item.id"
-								:label="item.name"
-								:value="item.id">
-							</el-option>
-						</el-select>
-          </el-form-item>
-          <el-form-item>
-            <el-button size="default" type="primary" v-auth="'query'" class="ml10" @click="queryList">
-              <el-icon>
-                <ele-Search />
-              </el-icon>
-              查询
-            </el-button>
-            <el-button size="default" v-auth="'reset'" @click="resetQuery(queryRef)">
-              <el-icon>
-                <ele-Refresh />
-              </el-icon>
-              重置
-            </el-button>
-            <!-- <el-button size="default" type="success" class="ml10" @click="onOpenDialog()">
-              <el-icon>
-                <ele-FolderAdd />
-              </el-icon>
-              导入
-            </el-button> -->
-          </el-form-item>
-        </el-form>
-      </div>
-      <el-table :data="tableData.data" v-loading="tableData.loading" style="width: 100%" >
-	    	<el-table-column label="换热站名称" prop="station" v-col="'station'"/>
-	    	<el-table-column label="换热站编号" prop="stationNo" v-col="'stationNo'"/>
-	    	<!-- <el-table-column label="负责人" prop="number" /> -->
-	    	<el-table-column label="温度" prop="alarmT" v-col="'alarmT'">
-					<template #default="{ row }">
-						{{ row.alarmT == '1' ? '报警' : '不报警' }}
-					</template>
-				</el-table-column>
-	    	<el-table-column label="压力" prop="alarmP" v-col="'alarmP'">
-					<template #default="{ row }">
-						{{ row.alarmP == '1' ? '报警' : '不报警' }}
-					</template>
-				</el-table-column>
-      </el-table>
-      <pagination
-				v-show="tableData.total>0"
-				:total="tableData.total"
-				v-model:page="tableData.param.pageNum"
-				v-model:limit="tableData.param.pageSize"
-				@pagination="queryList"
-			/>
-    </el-card>
-  </div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import api from '/@/api/energyAnalysis';
-import heatApi from '/@/api/heatStation';
-
-export default defineComponent({
-	name: 'loop',
-	setup() {
-		const queryRef = ref();
-		const state = reactive({
-			ids: [],
-			tableData: {
-				data: [],
-				total: 0,
-				loading: false,
-				param: {
-					code: ''
-				},
-			},
-			heatList: []
-		});
-		
-		const queryTree = () => {
-			heatApi.heatStation.getList({
-					name: '',
-					code: '',
-					status: -1
-				})
-				.then((res: any) => {
-					state.heatList = res || [];
-				});
-		};
-		
-		const queryList = () => {
-			state.tableData.loading = true
-			api.getEnergyWaterWarnList({ code: 11 })
-				.then((res: any) => {
-					console.log(res);
-					state.tableData.data = res.list || []
-				})
-				.finally(() => {
-					state.tableData.loading = false
-				})
-		};
-		// 页面加载时
-		onMounted(() => {
-			queryTree()
-			queryList()
-		});
-		/** 重置按钮操作 */
-		const resetQuery = (formEl: FormInstance | undefined) => {
-			if (!formEl) return;
-			formEl.resetFields();
-			// queryList();
-		};
-
-		return {
-			queryRef,
-			resetQuery,
-			...toRefs(state),
-		};
-	},
-});
-</script>

+ 0 - 402
src/views/heating/energyAnalysis/heatStationWaterAnalysis/index.vue

@@ -1,402 +0,0 @@
-<template>
-  <div class="system-dic-container">
-    <el-card shadow="hover">
-      <div class="panel">
-        <div class="left-panel">
-          <el-input v-model="filterText" clearable placeholder="请输入" />
-          <div class="list">
-            <el-tree ref="treeRef" class="filter-tree" :data="state.heatList" :props="{
-                label: 'name',
-                children: 'loopInfo'
-              }" default-expand-all :expand-on-click-node="false" :filter-node-method="filterNode" @node-click="onNodeClick">
-              <template #default="{ data }">
-                <span class="custom-tree-node" :class="{ active: data.code === curNode }">
-                  <span class="name" :title="data.name">{{ data.name }}</span>
-                </span>
-              </template>
-            </el-tree>
-          </div>
-        </div>
-        <div class="right-panel">
-          <el-form :model="state.tableData.param" ref="queryRef" :inline="true" label-width="68px">
-            <el-form-item label="时间范围" prop="dateRange">
-              <el-date-picker v-model="state.tableData.param.dateRange" size="default" style="width: 240px" value-format="YYYY-MM-DD" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
-            <el-form-item>
-              <el-button size="default" type="primary" @click="queryLineChart">
-                <el-icon>
-                  <ele-Search />
-                </el-icon>
-                查询
-              </el-button>
-              <!-- <el-button size="default" @click="resetQuery(queryRef)">
-                <el-icon>
-                  <ele-Refresh />
-                </el-icon>
-                重置
-              </el-button> -->
-            </el-form-item>
-          </el-form>
-          <div class="title">供回水对比图</div>
-          <div style="height: 300px" v-loading="state.tableData.loading" ref="barChartRef"></div>
-          <div class="title mt-2">失水量曲线</div>
-          <div style="height: 300px" v-loading="state.tableData.loading" ref="lineChartRef"></div>
-          <div class="title mt-2 flex-row" style="margin-top:20px">数据列表 <el-button @click="exportExcel">数据导出</el-button>
-          </div>
-
-          <el-table :data="tableData" style="width: 100%" v-loading="loading">
-            <el-table-column type="index" width="55" label="序号" align="center" />
-            <el-table-column label="日期" v-col="'key'" prop="datetime" min-width="120" :show-overflow-tooltip="true" />
-            <el-table-column label="环路名称" prop="huanLuName" min-width="120" :show-overflow-tooltip="true" />
-            <el-table-column label="供水流量" prop="supplyWater" min-width="120" :show-overflow-tooltip="true" />
-            <el-table-column label="回水流量" prop="returnWater" min-width="120" :show-overflow-tooltip="true" />
-            <el-table-column label="失水量" prop="waterLoss" min-width="120" :show-overflow-tooltip="true" />
-          </el-table>
-          <pagination v-if="params.total" :total="params.total" v-model:page="params.pageNum" v-model:limit="params.pageSize" @pagination="getList()" />
-        </div>
-      </div>
-    </el-card>
-  </div>
-</template>
-
-<script lang="ts" setup>
-import { toRefs, reactive, onMounted, ref, watch, nextTick } from 'vue';
-import * as echarts from 'echarts';
-import { useStore } from '/@/store/index';
-import api from '/@/api/energyAnalysis';
-import heatApi from '/@/api/heatStation';
-import { formatDate } from '/@/utils/formatTime';
-import { useSearch } from '/@/hooks/useCommon';
-// import { export_json_to_excel } from '/@/utils/xlsx';
-import downloadFile from '/@/utils/download';
-
-const { params, tableData, getList, loading } = useSearch<any[]>(api.getEnergyHuanluWaterLossLineChartPage, 'list', {
-  loopCode: '',
-  dateRange: [
-    formatDate(new Date(), 'YYYY-mm-dd'),
-    formatDate(new Date(), 'YYYY-mm-dd')
-  ]
-});
-
-let nodeName = ''
-
-let global: any = {
-  barChart: null,
-  lineChart: null,
-  dispose: [null, '', undefined],
-};
-
-const queryRef = ref();
-const barChartRef = ref();
-const lineChartRef = ref();
-const store = useStore();
-const state = reactive({
-  myCharts: [],
-  charts: {
-    theme: '',
-    bgColor: '',
-    color: '#303133',
-  },
-  param: {
-    stationId: '',
-    principal: '',
-    interval: '',
-    flow: ''
-  },
-  heatList: [],
-  barChartXAxis: [],
-  barChartSeries1: [],
-  barChartSeries2: [],
-  lineChartXAixs: [],
-  lineChartSeries: [],
-  tableData: {
-    data: [],
-    loading: false,
-    param: {
-      dateRange: [
-        formatDate(new Date(), 'YYYY-mm-dd'),
-        formatDate(new Date(), 'YYYY-mm-dd')
-      ]
-    }
-  }
-});
-
-const treeRef = ref()
-const filterText = ref('')
-const curNode = ref('')
-watch(filterText, (val) => {
-  treeRef.value!.filter(val)
-})
-watch(() => state.tableData.param.dateRange, (val) => {
-  params.dateRange = val
-})
-const filterNode = (value: string, data: any) => {
-  if (!value) return true
-  return data.name.includes(value)
-}
-
-const onNodeClick = (data: any) => {
-  nodeName = data.name
-  curNode.value = data.code
-  params.loopCode = data.code
-  queryLineChart()
-}
-
-// 后端导出
-const exportExcel = () => {
-  api.lossWaterExport({
-    loopCode: curNode.value
-  }).then((res: any) => {
-    downloadFile(res, nodeName + '-换热站失水分析数据导出.xlsx')
-  })
-}
-
-// 前端导出
-// const exportExcel = () => {
-//   const header = {
-//     datetime: '日期',
-//     huanLuNo: '环路编码',
-//     huanLuName: '环路名称',
-//     supplyWater: '供水流量',
-//     returnWater: '回水流量',
-//     waterLoss: '失水量',
-//   };
-
-//   const list = state.tableData.data
-
-//   export_json_to_excel({
-//     header,
-//     list,
-//     fileName: nodeName + '-换热站失水分析数据导出',
-//   });
-// }
-
-const queryTree = () => {
-  heatApi.heatStation.getAllStaAndLoop({})
-    .then((res: any) => {
-      state.heatList = res || [];
-      if (state.heatList.length) {
-        curNode.value = state.heatList[0].code
-        params.loopCode = state.heatList[0].code
-        nodeName = state.heatList[0].name
-      }
-      queryLineChart()
-    });
-};
-
-const queryLineChart = () => {
-  getList()
-  state.tableData.loading = true
-  api.getEnergyWaterLossLineChart({ loopCode: curNode.value, dateRange: state.tableData.param.dateRange })
-    // api.getEnergyWaterLossLineChart({ loopCode: 'D00107-1' })
-    .then((res: any) => {
-      // console.log(res);
-      let data = res.list || []
-
-      state.lineChartXAixs = []
-      state.lineChartSeries = []
-      state.barChartXAxis = []
-      state.barChartSeries1 = []
-      state.barChartSeries2 = []
-
-      data.forEach((item: any) => {
-        state.lineChartXAixs.push(formatDate(new Date(item.datetime), 'mm-dd HH:MM'));
-        state.barChartXAxis.push(formatDate(new Date(item.datetime), 'mm-dd HH:MM'));
-        state.lineChartSeries.push(item.waterLoss);
-        state.barChartSeries1.push(item.supplyWater);
-        state.barChartSeries2.push(item.returnWater);
-      });
-      state.tableData.data = data
-      state.tableData.loading = false
-
-      nextTick(() => {
-        initLineChart();
-        initBarChart();
-      });
-    });
-};
-// 页面加载时
-onMounted(() => {
-  queryTree()
-});
-
-// 初始化图表
-const initBarChart = () => {
-  if (!global.dispose.some((b: any) => b === global.barChart)) global.barChart.dispose();
-  global.barChart = <any>echarts.init(barChartRef.value, state.charts.theme);
-  const option = {
-    tooltip: { trigger: 'axis' },
-    legend: {},
-    grid: {
-      left: '3%',
-      right: '4%',
-      bottom: '3%',
-      containLabel: true
-    },
-    xAxis: [
-      {
-        type: 'category',
-        data: state.barChartXAxis
-      }
-    ],
-    yAxis: [
-      {
-        type: 'value'
-      }
-    ],
-    dataZoom: [
-      {
-        type: 'inside',
-        start: 0,
-        end: 30
-      },
-      {
-        start: 0,
-        end: 30
-      }
-    ],
-    series: [
-      {
-        name: '供水流量',
-        type: 'line',
-        symbolSize: 6,
-        symbol: 'circle',
-        smooth: true,
-        data: state.barChartSeries1
-      },
-      {
-        name: '回水流量',
-        type: 'line',
-        symbolSize: 6,
-        symbol: 'circle',
-        smooth: true,
-        data: state.barChartSeries2
-      }
-    ]
-  };
-  (<any>global.barChart).setOption(option);
-  (<any>state.myCharts).push(global.barChart);
-}
-// 初始化图标
-const initLineChart = () => {
-  if (!global.dispose.some((b: any) => b === global.lineChart)) global.lineChart.dispose();
-  global.lineChart = <any>echarts.init(lineChartRef.value, state.charts.theme);
-  const option = {
-    backgroundColor: state.charts.bgColor,
-    grid: {
-      left: '3%',
-      right: '4%',
-      bottom: '3%',
-      containLabel: true
-    },
-    tooltip: { trigger: 'axis' },
-    legend: { data: ['失水量'] },
-    xAxis: {
-      data: state.lineChartXAixs,
-    },
-    yAxis: [
-      {
-        type: 'value',
-        name: '',
-        splitLine: { show: true, lineStyle: { type: 'dashed', color: '#f5f5f5' } },
-      },
-    ],
-    dataZoom: [
-      {
-        type: 'inside',
-        start: 0,
-        end: 30
-      },
-      {
-        start: 0,
-        end: 30
-      }
-    ],
-    series: [
-      {
-        name: '失水量',
-        type: 'line',
-        symbolSize: 6,
-        symbol: 'circle',
-        smooth: true,
-        data: state.lineChartSeries
-      }
-    ]
-  };
-  (<any>global.lineChart).setOption(option);
-  (<any>state.myCharts).push(global.lineChart);
-}
-
-// 批量设置 echarts resize
-const initEchartsResizeFun = () => {
-  nextTick(() => {
-    for (let i = 0; i < state.myCharts.length; i++) {
-      setTimeout(() => {
-        (<any>state.myCharts[i]).resize();
-      }, i * 1000);
-    }
-  });
-};
-// 批量设置 echarts resize
-const initEchartsResize = () => {
-  window.addEventListener('resize', initEchartsResizeFun);
-};
-// 页面加载时
-onMounted(() => {
-  initEchartsResize();
-});
-
-// 监听 vuex 中是否开启深色主题
-watch(
-  () => store.state.themeConfig.themeConfig.isIsDark,
-  (isIsDark) => {
-    nextTick(() => {
-      state.charts.theme = isIsDark ? 'transparent' : '';
-      state.charts.bgColor = isIsDark ? 'transparent' : '';
-      state.charts.color = isIsDark ? '#dadada' : '#303133';
-      setTimeout(() => {
-        // initBarChart();
-        initLineChart();
-      }, 500)
-    });
-  },
-  {
-    deep: true,
-    immediate: true,
-  }
-);
-</script>
-
-
-<style lang="scss" scoped>
-.title {
-	font-size: 16px;
-	font-weight: bold;
-}
-
-.panel {
-	display: grid;
-	grid-template-columns: 250px 1fr;
-	.left-panel {
-		.list {
-			max-height: 625px;
-			overflow-y: auto;
-		}
-	}
-	.right-panel {
-		padding: 16px;
-	}
-}
-
-.custom-tree-node {
-	.name {
-		overflow: hidden;
-		text-overflow: ellipsis;
-	}
-	&.active {
-		color: var(--el-color-primary);
-		// background: var(--el-color-primary-light-9);
-	}
-}
-</style>

+ 0 - 183
src/views/heating/energyAnalysis/historyData/loopPerformanceHistory/index.vue

@@ -1,183 +0,0 @@
-<template>
-	<div class="system-dic-container">
-		<el-card shadow="hover">
-			<div class="system-user-search mb15">
-				<el-form :model="state.tableData.param" ref="queryRef" :inline="true" label-width="90px">
-					<el-form-item label="年份" prop="year">
-						<el-select v-model="state.tableData.param.year" placeholder="按照选择进行排名" filterable size="default">
-							<el-option v-for="year in years" :label="year" :value="year" :key="year" />
-						</el-select>
-					</el-form-item>
-					<el-form-item label="时间范围" prop="dateRange">
-						<el-date-picker
-							v-model="state.tableData.param.dateRange"
-							size="default"
-							style="width: 240px"
-							value-format="YYYY-MM-DD"
-							type="daterange"
-							range-separator="-"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-						>
-						</el-date-picker>
-					</el-form-item>
-					<el-form-item label="排序" prop="sort">
-						<el-select v-model="state.tableData.param.sort" placeholder="按照选择进行排名" filterable clearable size="default">
-							<el-option label="总耗热" :value="1" />
-							<el-option label="热单耗" :value="2" />
-							<el-option label="总耗水" :value="5" />
-							<el-option label="小时补水量" :value="6" />
-							<el-option label="供热负荷" :value="7" />
-						</el-select>
-					</el-form-item>
-					<el-form-item label="排序方式" prop="isdesc">
-						<el-select v-model="state.tableData.param.isdesc" placeholder="按照选择进行排名" filterable clearable size="default">
-							<el-option label="正序" :value="2" />
-							<el-option label="倒序" :value="1" />
-						</el-select>
-					</el-form-item>
-					<el-form-item label="换热站名称" prop="stationName">
-						<el-input v-model="state.tableData.param.stationName" placeholder="输入" clearable size="default"> </el-input>
-					</el-form-item>
-					<el-form-item label="环路名称" prop="loopName">
-						<el-input v-model="state.tableData.param.loopName" placeholder="输入" clearable size="default"> </el-input>
-					</el-form-item>
-					<el-form-item>
-						<el-button size="default" type="primary" class="ml10" @click="queryList">
-							<el-icon>
-								<ele-Search />
-							</el-icon>
-							查询
-						</el-button>
-						<el-button size="default" v-auth="'reset'" @click="resetQuery(queryRef)">
-							<el-icon>
-								<ele-Refresh />
-							</el-icon>
-							重置
-						</el-button>
-						<el-button size="default" v-auth="'download'" @click="exportData()">
-							<el-icon>
-								<ele-Download />
-							</el-icon>
-							导出
-						</el-button>
-						<!-- <el-button size="default" type="success" class="ml10" @click="onOpenDialog()">
-              <el-icon>
-                <ele-FolderAdd />
-              </el-icon>
-              导入
-            </el-button> -->
-					</el-form-item>
-				</el-form>
-			</div>
-			<el-table :data="state.tableData.data" v-loading="state.tableData.loading" style="width: 100%">
-				<el-table-column type="index" label="序号" align="center" width="60" />
-				<el-table-column label="换热站环路名称" prop="huanLuName" min-width="100">
-					<template #default="{ row }"> {{ row.stationName }}-{{ row.huanLuName }} </template>
-				</el-table-column>
-				<el-table-column :label="`总耗热(${unitMap['总耗热']})`" prop="unitConsumptionTotal" />
-				<el-table-column :label="`热单耗(${unitMap['总单耗']})`" prop="unitConsumption" />
-				<el-table-column :label="`供热负荷(${unitMap['供热负荷']})`" prop="unitConsumptionDemand" />
-				<el-table-column :label="`平均供热负荷(${unitMap['平均供热负荷']})`" prop="unitConsumptionDemandAvg" />
-				<el-table-column :label="`总失水量(${unitMap['总耗水']})`" prop="flowLossTotal" />
-				<el-table-column :label="`小时失水量(${unitMap['小时补水量']})`" prop="flowLoss" />
-			</el-table>
-
-			<pagination
-				v-show="state.tableData.total > 0"
-				:total="state.tableData.total"
-				v-model:page="state.tableData.param.pageNum"
-				v-model:limit="state.tableData.param.pageSize"
-				@pagination="queryList"
-			/>
-		</el-card>
-	</div>
-</template>
-
-<script lang="ts" setup>
-import { reactive, ref } from 'vue';
-import { FormInstance } from 'element-plus';
-import energyApi from '/@/api/energyAnalysis';
-import downloadFile from '/@/utils/download';
-import apiDatahub from '/@/api/datahub';
-
-const unitMap = ref<any>({});
-// 统计信息的单位的字典
-apiDatahub.template.getDictData({ DictType: 'overview_unit' }).then((res: any) => {
-	res.values.forEach((v: any) => {
-		unitMap.value[v.value] = v.key;
-	});
-});
-
-const queryRef = ref();
-const years = ref([]);
-const state = reactive({
-	myCharts: [],
-	charts: {
-		theme: '',
-		bgColor: '',
-		color: '#303133',
-	},
-	heatList: [],
-	tableData: {
-		data: [],
-		loading: false,
-		total: 0,
-		param: {
-			sort: 1,
-			isdesc: 1,
-			year: '',
-			stationName: '',
-			loopName: '',
-			dateRange: [],
-			pageNum: 1,
-			pageSize: 10,
-		},
-	},
-});
-
-energyApi.history.historyYear().then((res: any) => {
-	years.value = res.list || [];
-	if (res.list.length) {
-		state.tableData.param.year = res.list[0]
-		queryList();
-	}
-});
-
-const exportData = () => {
-	energyApi.history.performanceExport(state.tableData.param).then((res: any) => {
-		downloadFile(res, '历史环路绩效考核数据.xlsx');
-	});
-};
-
-const queryList = () => {
-	state.tableData.loading = true;
-	energyApi.history.getEnergyPerformance(state.tableData.param).then((res: any) => {
-		state.tableData.data = res.list || [];
-		state.tableData.total = res.Total;
-	}).finally(() => {
-		state.tableData.loading = false;
-	})
-};
-/** 重置按钮操作 */
-const resetQuery = (formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.resetFields();
-	queryList();
-};
-</script>
-
-<style lang="scss" scoped>
-.title {
-	font-size: 16px;
-	font-weight: bold;
-}
-.chart-grid {
-	display: grid;
-	grid-template-columns: repeat(3, 1fr);
-	grid-column-gap: 10px;
-}
-.mt20 {
-	margin-top: 20px;
-}
-</style>

+ 0 - 53
src/views/heating/energyAnalysis/historyData/stationPerformanceHistory/detail.vue

@@ -1,53 +0,0 @@
-<template>
-	<div class="system-edit-dic-container">
-		<el-dialog title="换热站详情" v-model="state.isShowDialog" width="1000px">
-			<el-table :data="tableData" style="width: 100%" class="mt-6" v-loading="loading" border>
-				<el-table-column prop="datetime" label="日期" align="center" />
-				<el-table-column prop="unitConsumptionTotal" :label="`供水量(${unitMap['小时补水量']})`" align="center" />
-				<el-table-column prop="flowLossTotal" :label="`失水量(${unitMap['小时补水量']})`" align="center" />
-				<el-table-column prop="unitConsumptionDemand" :label="`供热负荷(${unitMap['供热负荷']})`" align="center" />
-				<el-table-column prop="temperature" label="温度(℃)" align="center" />
-			</el-table>
-			<pagination v-if="params.total" :total="params.total" v-model:page="params.pageNum" v-model:limit="params.pageSize" @pagination="getList()" />
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts" setup>
-import { reactive, ref } from 'vue';
-import api from '/@/api/heatStation';
-import { useSearch } from '/@/hooks/useCommon';
-import apiDatahub from '/@/api/datahub';
-
-const state = reactive({
-	isShowDialog: false,
-	ruleForm: {} as any,
-});
-
-const unitMap = ref<any>({});
-// 统计信息的单位的字典
-apiDatahub.template.getDictData({ DictType: 'overview_unit' }).then((res: any) => {
-	res.values.forEach((v: any) => {
-		unitMap.value[v.value] = v.key;
-	});
-});
-
-const { params, tableData, getList, loading } = useSearch(api.heatStation.stationDetailHistory, 'list', { stationId: '', year: '' });
-
-// 打开弹窗
-const openDialog = (id: string, year: number) => {
-	console.log(year)
-	params.stationId = id;
-	params.year = year;
-	getList();
-	state.isShowDialog = true;
-};
-
-defineExpose({ openDialog });
-</script>
-
-<style scoped>
-.el-form-item {
-	margin-bottom: 0;
-}
-</style>

+ 0 - 185
src/views/heating/energyAnalysis/historyData/stationPerformanceHistory/index.vue

@@ -1,185 +0,0 @@
-<template>
-	<div class="system-dic-container">
-		<el-card shadow="hover">
-			<div class="system-user-search mb15">
-				<el-form :model="state.tableData.param" ref="queryRef" :inline="true" label-width="90px">
-					<el-form-item label="年份" prop="year">
-						<el-select v-model="state.tableData.param.year" placeholder="按照选择进行排名" filterable size="default">
-							<el-option v-for="year in years" :label="year" :value="year" :key="year" />
-						</el-select>
-					</el-form-item>
-					<el-form-item label="时间范围" prop="dateRange">
-						<el-date-picker
-							v-model="state.tableData.param.dateRange"
-							size="default"
-							style="width: 240px"
-							value-format="YYYY-MM-DD"
-							type="daterange"
-							range-separator="-"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-						>
-						</el-date-picker>
-					</el-form-item>
-					<el-form-item label="排序" prop="sort">
-						<el-select v-model="state.tableData.param.sort" placeholder="按照选择进行排名" filterable clearable size="default">
-							<el-option label="总耗热" :value="1" />
-							<el-option label="热单耗" :value="2" />
-							<el-option label="总耗水" :value="5" />
-							<el-option label="小时补水量" :value="6" />
-							<el-option label="供热负荷" :value="7" />
-						</el-select>
-					</el-form-item>
-					<el-form-item label="排序方式" prop="isdesc">
-						<el-select v-model="state.tableData.param.isdesc" placeholder="按照选择进行排名" filterable clearable size="default">
-							<el-option label="正序" :value="2" />
-							<el-option label="倒序" :value="1" />
-						</el-select>
-					</el-form-item>
-					<el-form-item label="换热站名称" prop="stationName">
-						<el-input v-model="state.tableData.param.stationName" placeholder="输入" clearable size="default"> </el-input>
-					</el-form-item>
-					<el-form-item>
-						<el-button size="default" type="primary" class="ml10" @click="queryList">
-							<el-icon>
-								<ele-Search />
-							</el-icon>
-							查询
-						</el-button>
-						<el-button size="default" v-auth="'reset'" @click="resetQuery(queryRef)">
-							<el-icon>
-								<ele-Refresh />
-							</el-icon>
-							重置
-						</el-button>
-						<el-button size="default" v-auth="'download'" @click="exportData()">
-							<el-icon>
-								<ele-Download />
-							</el-icon>
-							导出
-						</el-button>
-					</el-form-item>
-				</el-form>
-			</div>
-			<el-table :data="state.tableData.data" v-loading="state.tableData.loading" style="width: 100%">
-				<el-table-column type="index" label="序号" align="center" width="80" />
-				<el-table-column label="换热站名称" prop="stationName">
-					<template #default="{ row }">
-            <el-button text type="primary" @click="showDialog(row.stationId)">{{row.stationName}}</el-button>
-          </template>
-				</el-table-column>
-				<el-table-column :label="`总耗热(${unitMap['总耗热']})`" prop="unitConsumptionTotal" />
-				<el-table-column :label="`热单耗(${unitMap['总单耗']})`" prop="unitConsumption" />
-				<el-table-column :label="`供热负荷(${unitMap['供热负荷']})`" prop="unitConsumptionDemand" />
-				<el-table-column :label="`平均供热负荷(${unitMap['平均供热负荷']})`" prop="unitConsumptionDemandAvg" />
-				<el-table-column :label="`总失水量(${unitMap['总耗水']})`" prop="flowLossTotal" />
-				<el-table-column :label="`小时失水量(${unitMap['小时补水量']})`" prop="flowLoss" />
-			</el-table>
-
-			<pagination
-				v-show="state.tableData.total > 0"
-				:total="state.tableData.total"
-				v-model:page="state.tableData.param.pageNum"
-				v-model:limit="state.tableData.param.pageSize"
-				@pagination="queryList"
-			/>
-		</el-card>
-		<detailDialog ref="detailDialogRef"></detailDialog>
-	</div>
-</template>
-
-<script lang="ts" setup>
-import { reactive, ref } from 'vue';
-import { FormInstance } from 'element-plus';
-import energyApi from '/@/api/energyAnalysis';
-import downloadFile from '/@/utils/download';
-import apiDatahub from '/@/api/datahub';
-import detailDialog from './detail.vue';
-
-const unitMap = ref<any>({});
-// 统计信息的单位的字典
-apiDatahub.template.getDictData({ DictType: 'overview_unit' }).then((res: any) => {
-	res.values.forEach((v: any) => {
-		unitMap.value[v.value] = v.key;
-	});
-});
-
-const queryRef = ref();
-const detailDialogRef = ref();
-const years = ref([]);
-
-const state = reactive({
-	myCharts: [],
-	charts: {
-		theme: '',
-		bgColor: '',
-		color: '#303133',
-	},
-	heatList: [],
-	tableData: {
-		data: [],
-		loading: false,
-		total: 0,
-		param: {
-			sort: 1,
-			isdesc: 1,
-			stationName: '',
-			year: '',
-			loopName: '',
-			dateRange: [],
-			pageNum: 1,
-			pageSize: 10,
-		},
-	},
-});
-
-energyApi.history.historyYear().then((res: any) => {
-	years.value = res.list || [];
-	if (res.list.length) {
-		state.tableData.param.year = res.list[0]
-		queryList();
-	}
-});
-
-const showDialog = (id: string) => {
-	detailDialogRef.value.openDialog(id, state.tableData.param.year)
-};
-
-const exportData = () => {
-	energyApi.history.performanceExportStation(state.tableData.param).then((res: any) => {
-		downloadFile(res, '换热站绩效考核数据.xlsx');
-	});
-};
-
-const queryList = () => {
-	state.tableData.loading = true;
-	energyApi.history.getEnergyPerformanceStation(state.tableData.param).then((res: any) => {
-		state.tableData.data = res.list || [];
-		state.tableData.total = res.Total;
-	}).finally(() => {
-		state.tableData.loading = false;
-	})
-};
-/** 重置按钮操作 */
-const resetQuery = (formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.resetFields();
-	queryList();
-};
-
-</script>
-
-<style lang="scss" scoped>
-.title {
-	font-size: 16px;
-	font-weight: bold;
-}
-.chart-grid {
-	display: grid;
-	grid-template-columns: repeat(3, 1fr);
-	grid-column-gap: 10px;
-}
-.mt20 {
-	margin-top: 20px;
-}
-</style>

+ 0 - 174
src/views/heating/energyAnalysis/loopEnergyCostPerformanceAppraisal/index.vue

@@ -1,174 +0,0 @@
-<template>
-	<div class="system-dic-container">
-		<el-card shadow="hover">
-			<div class="system-user-search mb15">
-				<el-form :model="state.tableData.param" ref="queryRef" :inline="true" label-width="90px">
-					<el-form-item label="时间范围" prop="dateRange">
-						<el-date-picker
-							v-model="state.tableData.param.dateRange"
-							size="default"
-							style="width: 240px"
-							value-format="YYYY-MM-DD"
-							type="daterange"
-							range-separator="-"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-						>
-						</el-date-picker>
-					</el-form-item>
-					<el-form-item label="排序" prop="sort">
-						<el-select v-model="state.tableData.param.sort" placeholder="按照选择进行排名" filterable clearable size="default">
-							<el-option label="总耗热" :value="1" />
-							<el-option label="热单耗" :value="2" />
-							<el-option label="供热负荷" :value="7" />
-							<el-option label="平均供热负荷" :value="9" />
-							<el-option label="总失水量" :value="5" />
-							<el-option label="小时失水量" :value="6" />
-						</el-select>
-					</el-form-item>
-					<el-form-item label="排序方式" prop="isdesc">
-						<el-select v-model="state.tableData.param.isdesc" placeholder="按照选择进行排名" filterable clearable size="default">
-							<el-option label="正序" :value="2" />
-							<el-option label="倒序" :value="1" />
-						</el-select>
-					</el-form-item>
-					<el-form-item label="换热站名称" prop="stationName">
-						<el-input v-model="state.tableData.param.stationName" placeholder="输入" clearable size="default"> </el-input>
-					</el-form-item>
-					<el-form-item label="环路名称" prop="loopName">
-						<el-input v-model="state.tableData.param.loopName" placeholder="输入" clearable size="default"> </el-input>
-					</el-form-item>
-					<el-form-item>
-						<el-button size="default" type="primary" v-auth="'query'" class="ml10" @click="queryList">
-							<el-icon>
-								<ele-Search />
-							</el-icon>
-							查询
-						</el-button>
-						<el-button size="default" v-auth="'reset'" @click="resetQuery(queryRef)">
-							<el-icon>
-								<ele-Refresh />
-							</el-icon>
-							重置
-						</el-button>
-						<el-button size="default" v-auth="'download'" @click="exportData()">
-							<el-icon>
-								<ele-Download />
-							</el-icon>
-							导出
-						</el-button>
-						<!-- <el-button size="default" type="success" class="ml10" @click="onOpenDialog()">
-              <el-icon>
-                <ele-FolderAdd />
-              </el-icon>
-              导入
-            </el-button> -->
-					</el-form-item>
-				</el-form>
-			</div>
-			<el-table :data="state.tableData.data" v-loading="state.tableData.loading" style="width: 100%">
-				<el-table-column type="index" label="序号" align="center" width="60" />
-				<el-table-column label="换热站环路名称" prop="huanLuName" min-width="100">
-					<template #default="{row}">
-						{{ row.stationName }}-{{ row.huanLuName }}
-					</template>
-				</el-table-column>
-				<el-table-column :label="`总耗热(${unitMap['总耗热']})`" prop="unitConsumptionTotal" />
-				<el-table-column :label="`热单耗(${unitMap['总单耗']})`" prop="unitConsumption" />
-				<el-table-column :label="`供热负荷(${unitMap['供热负荷']})`" prop="unitConsumptionDemand" />
-				<el-table-column :label="`平均供热负荷(${unitMap['平均供热负荷']})`" prop="unitConsumptionDemandAvg" />
-				<el-table-column :label="`总失水量(${unitMap['总耗水']})`" prop="flowLossTotal" />
-				<el-table-column :label="`小时失水量(${unitMap['小时补水量']})`" prop="flowLoss" />
-			</el-table>
-
-			<pagination
-				v-show="state.tableData.total > 0"
-				:total="state.tableData.total"
-				v-model:page="state.tableData.param.pageNum"
-				v-model:limit="state.tableData.param.pageSize"
-				@pagination="queryList"
-			/>
-		</el-card>
-	</div>
-</template>
-
-<script lang="ts" setup>
-import { reactive, onMounted, ref } from 'vue';
-import { FormInstance } from 'element-plus';
-import energyApi from '/@/api/energyAnalysis';
-import downloadFile from '/@/utils/download';
-import apiDatahub from '/@/api/datahub';
-
-const unitMap = ref<any>({});
-// 统计信息的单位的字典
-apiDatahub.template.getDictData({ DictType: 'overview_unit' }).then((res: any) => {
-	res.values.forEach((v: any) => {
-		unitMap.value[v.value] = v.key;
-	});
-});
-
-const queryRef = ref();
-const state = reactive({
-	myCharts: [],
-	charts: {
-		theme: '',
-		bgColor: '',
-		color: '#303133',
-	},
-	heatList: [],
-	tableData: {
-		data: [],
-		loading: false,
-		total: 0,
-		param: {
-			sort: 1,
-			isdesc: 1,
-			stationName: '',
-			loopName: '',
-			dateRange: [],
-			pageNum: 1,
-			pageSize: 10,
-		},
-	},
-});
-
-const exportData = () => {
-	energyApi.performanceExport(state.tableData.param).then((res: any) => {
-		downloadFile(res, '环路绩效考核数据.xlsx');
-	});
-};
-
-const queryList = () => {
-	state.tableData.loading = true;
-	energyApi.getEnergyPerformance(state.tableData.param).then((res: any) => {
-		state.tableData.data = res.list || [];
-		state.tableData.total = res.Total;
-		state.tableData.loading = false;
-	});
-};
-// 页面加载时
-onMounted(() => {
-	queryList();
-});
-/** 重置按钮操作 */
-const resetQuery = (formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.resetFields();
-	queryList();
-};
-</script>
-
-<style lang="scss" scoped>
-.title {
-	font-size: 16px;
-	font-weight: bold;
-}
-.chart-grid {
-	display: grid;
-	grid-template-columns: repeat(3, 1fr);
-	grid-column-gap: 10px;
-}
-.mt20 {
-	margin-top: 20px;
-}
-</style>

+ 0 - 310
src/views/heating/energyAnalysis/stationPerformanceAppraisal/index.vue

@@ -1,310 +0,0 @@
-<template>
-	<div class="system-dic-container">
-		<el-card shadow="hover">
-			<div class="system-user-search mb15">
-				<el-form :model="state.tableData.param" ref="queryRef" :inline="true" label-width="90px">
-					<el-form-item label="时间范围" prop="dateRange">
-						<el-date-picker
-							v-model="state.tableData.param.dateRange"
-							size="default"
-							style="width: 240px"
-							value-format="YYYY-MM-DD"
-							type="daterange"
-							range-separator="-"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-						>
-						</el-date-picker>
-					</el-form-item>
-					<el-form-item label="排序" prop="sort">
-						<el-select v-model="state.tableData.param.sort" placeholder="按照选择进行排名" filterable clearable size="default">
-							<el-option label="总耗热" :value="1" />
-							<el-option label="热单耗" :value="2" />
-							<el-option label="供热负荷" :value="7" />
-							<el-option label="平均供热负荷" :value="9" />
-							<el-option label="总失水量" :value="5" />
-							<el-option label="小时失水量" :value="6" />
-						</el-select>
-					</el-form-item>
-					<el-form-item label="排序方式" prop="isdesc">
-						<el-select v-model="state.tableData.param.isdesc" placeholder="按照选择进行排名" filterable clearable size="default">
-							<el-option label="正序" :value="2" />
-							<el-option label="倒序" :value="1" />
-						</el-select>
-					</el-form-item>
-					<el-form-item label="换热站名称" prop="stationName">
-						<el-input v-model="state.tableData.param.stationName" placeholder="输入" clearable size="default"> </el-input>
-					</el-form-item>
-					<el-form-item>
-						<el-button size="default" type="primary" class="ml10" @click="queryList">
-							<el-icon>
-								<ele-Search />
-							</el-icon>
-							查询
-						</el-button>
-						<el-button size="default" v-auth="'reset'" @click="resetQuery(queryRef)">
-							<el-icon>
-								<ele-Refresh />
-							</el-icon>
-							重置
-						</el-button>
-						<el-button size="default" v-auth="'download'" @click="exportData()">
-							<el-icon>
-								<ele-Download />
-							</el-icon>
-							导出
-						</el-button>
-						<!-- <el-button size="default" type="success" class="ml10" @click="onOpenDialog()">
-              <el-icon>
-                <ele-FolderAdd />
-              </el-icon>
-              导入
-            </el-button> -->
-					</el-form-item>
-				</el-form>
-			</div>
-			<el-table :data="state.tableData.data" v-loading="state.tableData.loading" style="width: 100%">
-				<el-table-column type="index" label="序号" align="center" width="80" />
-				<el-table-column label="换热站名称" prop="stationName" />
-				<el-table-column :label="`总耗热(${unitMap['总耗热']})`" prop="unitConsumptionTotal" />
-				<el-table-column :label="`热单耗(${unitMap['总单耗']})`" prop="unitConsumption" />
-				<el-table-column :label="`供热负荷(${unitMap['供热负荷']})`" prop="unitConsumptionDemand" />
-				<el-table-column :label="`平均供热负荷(${unitMap['平均供热负荷']})`" prop="unitConsumptionDemandAvg" />
-				<el-table-column :label="`总失水量(${unitMap['总耗水']})`" prop="flowLossTotal" />
-				<el-table-column :label="`小时失水量(${unitMap['小时补水量']})`" prop="flowLoss" />
-			</el-table>
-
-			<pagination
-				v-show="state.tableData.total > 0"
-				:total="state.tableData.total"
-				v-model:page="state.tableData.param.pageNum"
-				v-model:limit="state.tableData.param.pageSize"
-				@pagination="queryList"
-			/>
-			<!-- <div class="title mt20">能耗红榜</div>
-			<div class="chart-grid">
-				<div style="height: 250px" ref="redChartOneRef"></div>
-				<div style="height: 250px" ref="redChartTwoRef"></div>
-				<div style="height: 250px" ref="redChartThreeRef"></div>
-			</div>
-			<div class="title mt20">能耗黑榜</div>
-			<div class="chart-grid">
-				<div style="height: 250px" ref="blackChartOneRef"></div>
-				<div style="height: 250px" ref="blackChartTwoRef"></div>
-				<div style="height: 250px" ref="blackChartThreeRef"></div>
-			</div> -->
-		</el-card>
-	</div>
-</template>
-
-<script lang="ts" setup>
-import { reactive, onMounted, ref, watch, nextTick } from 'vue';
-import { FormInstance } from 'element-plus';
-import * as echarts from 'echarts';
-import { useStore } from '/@/store/index';
-import energyApi from '/@/api/energyAnalysis';
-import heatApi from '/@/api/heatStation';
-import downloadFile from '/@/utils/download';
-import apiDatahub from '/@/api/datahub';
-
-let global: any = {
-	redChartOneRef: null,
-	redChartTwoRef: null,
-	redChartThreeRef: null,
-	blackChartOneRef: null,
-	blackChartTwoRef: null,
-	blackChartThreeRef: null,
-	dispose: [null, '', undefined],
-};
-
-const unitMap = ref<any>({});
-// 统计信息的单位的字典
-apiDatahub.template.getDictData({ DictType: 'overview_unit' }).then((res: any) => {
-	res.values.forEach((v: any) => {
-		unitMap.value[v.value] = v.key;
-	});
-});
-
-const queryRef = ref();
-const redChartOneRef = ref();
-const redChartTwoRef = ref();
-const redChartThreeRef = ref();
-const blackChartOneRef = ref();
-const blackChartTwoRef = ref();
-const blackChartThreeRef = ref();
-
-const store = useStore();
-const state = reactive({
-	myCharts: [],
-	charts: {
-		theme: '',
-		bgColor: '',
-		color: '#303133',
-	},
-	heatList: [],
-	tableData: {
-		data: [],
-		loading: false,
-		total: 0,
-		param: {
-			sort: 1,
-			isdesc: 1,
-			stationName: '',
-			loopName: '',
-			dateRange: [],
-			pageNum: 1,
-			pageSize: 10,
-		},
-	},
-});
-
-const queryTree = () => {
-	heatApi.heatStation
-		.getList({
-			name: '',
-			code: '',
-			status: -1,
-		})
-		.then((res: any) => {
-			state.heatList = res || [];
-		});
-};
-
-const exportData = () => {
-	energyApi.performanceExportStation(state.tableData.param).then((res: any) => {
-		downloadFile(res, '换热站绩效考核数据.xlsx');
-	});
-};
-
-const queryList = () => {
-	state.tableData.loading = true;
-	energyApi.getEnergyPerformanceStation(state.tableData.param).then((res: any) => {
-		state.tableData.data = res.list || [];
-		state.tableData.total = res.Total;
-		state.tableData.loading = false;
-	});
-};
-// 页面加载时
-onMounted(() => {
-	// queryTree()
-	queryList();
-});
-/** 重置按钮操作 */
-const resetQuery = (formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	formEl.resetFields();
-	queryList();
-};
-
-let chartArr = [
-	{ globalKey: 'redChartOneRef', refKey: redChartOneRef },
-	{ globalKey: 'redChartTwoRef', refKey: redChartTwoRef },
-	{ globalKey: 'redChartThreeRef', refKey: redChartThreeRef },
-	{ globalKey: 'blackChartOneRef', refKey: blackChartOneRef },
-	{ globalKey: 'blackChartTwoRef', refKey: blackChartTwoRef },
-	{ globalKey: 'blackChartThreeRef', refKey: blackChartThreeRef },
-];
-
-const initChart = () => {
-	chartArr.forEach((item) => {
-		initBarChart(item.globalKey, item.refKey);
-	});
-};
-
-// 初始化图表
-const initBarChart = (gk: string, refKey: any) => {
-	if (!global.dispose.some((b: any) => b === global[gk])) global[gk].dispose();
-	global[gk] = <any>echarts.init(refKey.value, state.charts.theme);
-	const option = {
-		tooltip: {
-			trigger: 'axis',
-			axisPointer: {
-				type: 'shadow',
-			},
-		},
-		legend: {},
-		grid: {
-			left: '3%',
-			right: '4%',
-			bottom: '3%',
-			containLabel: true,
-		},
-		xAxis: [
-			{
-				type: 'category',
-				data: ['换热站1', '换热站2', '换热站3', '换热站4', '换热站5', '换热站6', '换热站7'],
-			},
-		],
-		yAxis: [
-			{
-				type: 'value',
-			},
-		],
-		series: [
-			{
-				name: '供水流量',
-				type: 'bar',
-				emphasis: {
-					focus: 'series',
-				},
-				data: [320, 332, 301, 334, 390, 330, 320],
-			},
-		],
-	};
-	(<any>global[gk]).setOption(option);
-	(<any>state.myCharts).push(global[gk]);
-};
-
-// 批量设置 echarts resize
-const initEchartsResizeFun = () => {
-	nextTick(() => {
-		for (let i = 0; i < state.myCharts.length; i++) {
-			setTimeout(() => {
-				(<any>state.myCharts[i]).resize();
-			}, i * 1000);
-		}
-	});
-};
-// 批量设置 echarts resize
-const initEchartsResize = () => {
-	window.addEventListener('resize', initEchartsResizeFun);
-};
-// 页面加载时
-onMounted(() => {
-	initEchartsResize();
-});
-
-// 监听 vuex 中是否开启深色主题
-watch(
-	() => store.state.themeConfig.themeConfig.isIsDark,
-	(isIsDark) => {
-		nextTick(() => {
-			state.charts.theme = isIsDark ? 'transparent' : '';
-			state.charts.bgColor = isIsDark ? 'transparent' : '';
-			state.charts.color = isIsDark ? '#dadada' : '#303133';
-			setTimeout(() => {
-				// initChart();
-			}, 500);
-		});
-	},
-	{
-		deep: true,
-		immediate: true,
-	}
-);
-</script>
-
-<style lang="scss" scoped>
-.title {
-	font-size: 16px;
-	font-weight: bold;
-}
-.chart-grid {
-	display: grid;
-	grid-template-columns: repeat(3, 1fr);
-	grid-column-gap: 10px;
-}
-.mt20 {
-	margin-top: 20px;
-}
-</style>

+ 0 - 89
src/views/heating/heatStation/heatStation/component/detail.vue

@@ -1,89 +0,0 @@
-<template>
-	<div class="system-edit-dic-container">
-		<el-dialog title="换热站详情" v-model="state.isShowDialog" width="1000px">
-			<el-form :model="state.ruleForm" ref="formRef" size="default" label-width="110px">
-				<el-form-item label="换热站名称" prop="name">
-					{{ state.ruleForm.name }}
-				</el-form-item>
-				<el-form-item label="换热站位置" prop="position">
-					{{ state.ruleForm.position }}
-				</el-form-item>
-				<el-form-item label="负责人" prop="principalInfo.userNickname">
-					{{ state.ruleForm.principalInfo.userNickname }}
-				</el-form-item>
-				<el-form-item label="状态" prop="status">
-					{{ state.ruleForm.status === 1 ? '启用' : '禁用' }}
-				</el-form-item>
-				<el-form-item label="地图展示" prop="">
-					<div>
-						<span>经度:{{ state.ruleForm.lnt ? `${state.ruleForm.lnt}` : '' }}</span>
-						<span style="margin-left: 10px">纬度:{{ state.ruleForm.lat }}</span>
-					</div>
-				</el-form-item>
-			</el-form>
-			<el-table :data="tableData" style="width: 100%" class="mt-6" v-loading="loading" border>
-				<el-table-column prop="datetime" label="日期" align="center" />
-				<el-table-column prop="unitConsumptionTotal" :label="`供水量(${unitMap['小时补水量']})`" align="center" />
-				<el-table-column prop="flowLossTotal" :label="`失水量(${unitMap['小时补水量']})`" align="center" />
-				<el-table-column prop="unitConsumptionDemand" :label="`供热负荷(${unitMap['供热负荷']})`" align="center" />
-				<el-table-column prop="temperature" label="温度(℃)" align="center" />
-			</el-table>
-			<pagination v-if="params.total" :total="params.total" v-model:page="params.pageNum" v-model:limit="params.pageSize" @pagination="getList()" />
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts" setup>
-import { reactive, ref } from 'vue';
-import api from '/@/api/heatStation';
-import { useSearch } from '/@/hooks/useCommon';
-import apiDatahub from '/@/api/datahub';
-// import { ElMessage } from 'element-plus';
-
-const state = reactive({
-	isShowDialog: false,
-	ruleForm: {} as any,
-});
-
-const unitMap = ref<any>({});
-// 统计信息的单位的字典
-apiDatahub.template.getDictData({ DictType: 'overview_unit' }).then((res: any) => {
-	res.values.forEach((v: any) => {
-		unitMap.value[v.value] = v.key;
-	});
-});
-
-const { params, tableData, getList, loading } = useSearch(api.heatStation.stationDetail, 'list', { stationId: '' });
-
-// 打开弹窗
-const openDialog = (row: any) => {
-	if (row) {
-		state.ruleForm = row;
-		params.stationId = row.id;
-		getList();
-		// api.heatStation
-		// 	.stationDetail({
-		// 		stationId: row.id,
-		// 		pageNum: 1,
-		// 		pageSize: 10,
-		// 	})
-		// 	.then((res: any) => {
-		// 		console.log(res);
-		// 	});
-	}
-	state.isShowDialog = true;
-};
-
-// 关闭弹窗
-const closeDialog = () => {
-	state.isShowDialog = false;
-};
-
-defineExpose({ openDialog });
-</script>
-
-<style scoped>
-.el-form-item {
-	margin-bottom: 0;
-}
-</style>

+ 0 - 283
src/views/heating/heatStation/heatStation/component/edit.vue

@@ -1,283 +0,0 @@
-<template>
-	<div class="system-edit-dic-container">
-		<el-dialog :title="(ruleForm.id !== 0 ? '修改' : '添加') + '换热站'" v-model="dialogVisible" width="769px">
-			<el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
-				<el-form-item label="所属换热站" prop="">
-					<el-tree-select
-						v-model="ruleForm.parentId"
-						:data="treeData"
-						:props="{
-							label: 'name',
-							children: 'children'
-						}"
-						node-key="id"
-						:clearable="true"
-						check-strictly
-						style="width: 100%;"
-						:render-after-expand="true"
-					/>
-				</el-form-item>
-				<el-form-item label="换热站名称" prop="name">
-					<el-input v-model="ruleForm.name" placeholder="请输入换热站名称" />
-				</el-form-item>
-				<el-form-item label="换热站位置" prop="position">
-					<el-input v-model="ruleForm.position" placeholder="请输入换热站位置" />
-				</el-form-item>
-				<el-form-item label="负责人" prop="principal">
-					<!-- <el-input v-model="ruleForm.principal" placeholder="请输入负责人" /> -->
-					<el-select v-model="ruleForm.principal" clearable style="width: 100%;" placeholder="请选择">
-						<el-option
-							v-for="item in userList"
-							:key="item.id"
-							:label="item.userNickname"
-							:value="item.id">
-						</el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="状态" prop="status">
-					<el-radio v-model="ruleForm.status" :label="1">启用</el-radio>
-					<el-radio v-model="ruleForm.status" :label="0">禁用</el-radio>
-				</el-form-item>
-				<!-- <el-form-item label="数据模型" prop="dataTemplateIds">
-					<el-select v-model="ruleForm.dataTemplateIds" multiple clearable style="width: 100%;" placeholder="请选择">
-						<el-option
-							v-for="item in dataHubList"
-							:key="item.id"
-							:label="item.name"
-							:value="item.id">
-						</el-option>
-					</el-select>
-				</el-form-item> -->
-        <el-form-item label="地图展示" prop="decade">
-					<div>
-						<span>经度:{{ ruleForm.lnt ? `${ruleForm.lnt},` : '' }}</span>
-						<span style="margin-left: 10px">纬度:{{ ruleForm.lat }}</span>
-					</div>
-					<div class="mb10" style="width: 100%">
-						<el-input v-model="keyword" @change="onLocalChange" placeholder="请输入关键字进行搜索" clearable style="width: 100%;"></el-input>
-					</div>
-					<div style="width: 100%; height: 300px" id="map-container"></div>
-        </el-form-item>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent, ref, unref, nextTick, onMounted } from 'vue';
-import api from '/@/api/heatStation';
-import userApi from '/@/api/system';
-import datahubApi from '/@/api/datahub';
-import { ElMessage } from 'element-plus';
-import { useStore } from '/@/store/index';
-interface RuleFormState {
-	id: number;
-	parentId: number | string;
-	name: string;
-	position: string;
-	lnt: number;
-	lat: number;
-	principal: string;
-	types: number;
-	status: number;
-}
-
-export default defineComponent({
-	name: 'headStationLoop',
-	setup(prop, { emit }) {
-		const formRef = ref<HTMLElement | null>(null);
-		const state = reactive({
-			dialogVisible: false,
-			map: null,
-			ruleForm: {
-				id: 0,
-				parentId: '',
-				name: '',
-				position: '',
-				lnt: '',
-				lat: '',
-				principal: '',
-				types: 1,
-				status: 1
-			},
-			keyword: '',
-			rules: {
-				name: [{ required: true, message: '换热站名称不能为空', trigger: 'blur' }],
-				position: [{ required: true, message: '换热站位置不能为空', trigger: 'blur' }],
-				principal: [{ required: true, message: '负责人不能为空', trigger: 'blur' }],
-				status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
-			},
-			treeData: [],
-			dataHubList: [],
-			userList: [],
-			mapLocal: null as any
-		})
-		const store = useStore();
-		// 打开弹窗
-		const openDialog = (row: any, tree: any) => {
-			resetForm()
-			// queryDataHubList()
-			queryUserList()
-			state.treeData = tree
-
-			if (row) {
-				(state.ruleForm as any).id = row.id
-				getDetail()
-			}
-			nextTick(() => {
-				initMap()
-			}) 
-			state.dialogVisible = true
-		}
-		
-		// const queryDataHubList = () => {
-		// 	datahubApi.template.allList({})
-		// 		.then((res: any) => {
-		// 			state.dataHubList = res.list || [];
-		// 		});
-		// };
-		const queryUserList = () => {
-			userApi.user.getAllList({})
-				.then((res: any) => {
-					state.userList = res || [];
-				});
-		};
-		const resetForm = () => {
-			state.ruleForm = {
-				id: 0,
-				parentId: '',
-				name: '',
-				position: '',
-				lnt: '',
-				lat: '',
-				principal: '',
-				types: 1,
-				status: 1
-			}
-		}
-		// 关闭弹窗
-		const closeDialog = () => {
-			state.dialogVisible = false
-			state.keyword = ''
-		}
-		// 取消
-		const onCancel = () => {
-			closeDialog()
-		}
-		const getDetail = () => {
-			api.heatStation.detail(state.ruleForm.id)
-				.then((res: any) => {
-					state.ruleForm = {
-						...res,
-						parentId: res.parentId === -1 ? '' : res.parentId
-					}
-				})
-		}
-		// 新增
-		const onSubmit = () => {
-			const formWrap = unref(formRef) as any
-			if (!formWrap) return;
-			formWrap.validate((valid: boolean) => {
-				if (valid) {
-					let params = { ...state.ruleForm };
-					(params.parentId as any) = params.parentId || -1
-					if (state.ruleForm.id) {
-						//修改
-						api.heatStation.edit(params).then(() => {
-							ElMessage.success('换热站修改成功')
-							emit('queryList')
-							closeDialog() // 关闭弹窗
-						})
-					} else {
-						//添加
-						api.heatStation.add(params).then(() => {
-							ElMessage.success('换热站添加成功')
-							emit('queryList')
-							closeDialog() // 关闭弹窗
-						})
-					}
-				}
-			})
-		}
-		const initMap = () => {
-			let BMapGL = (window as any).BMapGL
-			let map = new BMapGL.Map("map-container");
-			// 获取布局配置信息
-			let getThemeConfig =  store.state.themeConfig.themeConfig;
-			// 124.383044, 40.124296
-			let point = new BMapGL.Point(state.ruleForm.lnt || 124.383044, state.ruleForm.lat || 40.124296);
-			let zoomCtrl = new BMapGL.ZoomControl();  // 添加缩放控件
-			let cityCtrl = new BMapGL.CityListControl()
-			if(getThemeConfig.isIsDark) {
-				map.setMapStyleV2({     
-					styleId: 'b8d841ee37fd5bd41e742049b6fcd0f5'
-				});
-			}
-
-			map.centerAndZoom(point, 15); 
-			
-			map.enableScrollWheelZoom(true); // 开启滚轮缩放
-			map.addControl(zoomCtrl);
-			map.addControl(cityCtrl);
-			if (state.ruleForm.lnt && state.ruleForm.lat) {
-				let marker = new BMapGL.Marker(new BMapGL.Point(state.ruleForm.lnt, state.ruleForm.lat));
-				// 在地图上添加点标记
-				map.addOverlay(marker);
-			}
-
-			state.mapLocal = new BMapGL.LocalSearch(map, {
-				renderOptions:{map: map}
-			})
-
-			map.addEventListener('click', (e: any) => {
-				// console.log('map--click', e)
-				let point = e.latlng
-				state.ruleForm.lnt = point.lng
-				state.ruleForm.lat = point.lat
-				// if (e.currentTarget.infoWindow) {
-				// 	state.ruleForm.position = e.currentTarget.infoWindow.contentDiv.innerText.replace(/[^\s]+[\s\t\n]+([^\s\t\n]+)[\s\t\n]+.*/g, '$1')
-				// }
-				let myGeo = new BMapGL.Geocoder
-				myGeo.getLocation(new BMapGL.Point(point.lng, point.lat), (result: any) => {
-					if (result) {
-						// console.log(result);
-						state.ruleForm.position = result.address
-					}
-				})
-			})
-		}
-
-		const onLocalChange = () => {
-			state.mapLocal.search(state.keyword)
-		}
-
-		return {
-			openDialog,
-			closeDialog,
-			onCancel,
-			onSubmit,
-			formRef,
-			onLocalChange,
-			// onMapClick,
-			// onMarkersset,
-			// mapReady,
-			...toRefs(state)
-		}
-	}
-})
-</script>
-
-<style scoped lang="scss">
-.mb10 {
-	margin-bottom: 10px;
-}
-.mr10 {
-	margin-right: 10px;
-}
-</style>

+ 0 - 233
src/views/heating/heatStation/heatStation/index.vue

@@ -1,233 +0,0 @@
-<template>
-	<div class="system-dic-container">
-		<el-card shadow="hover">
-			<div class="system-user-search mb15">
-				<el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="100px">
-					<el-form-item label="换热站名称" prop="name">
-						<el-input v-model="tableData.param.name" placeholder="请输入换热站名称" clearable size="default" @keyup.enter="queryList" />
-					</el-form-item>
-					<el-form-item label="换热站编号" prop="code">
-						<el-input v-model="tableData.param.code" placeholder="请输入换热站编号" clearable size="default" @keyup.enter="queryList" />
-					</el-form-item>
-					<el-form-item>
-						<el-button size="default" type="primary" v-auth="'query'" class="ml10" @click="queryList">
-							<el-icon>
-								<ele-Search />
-							</el-icon>
-							查询
-						</el-button>
-						<el-button size="default" v-auth="'reset'" @click="resetQuery(queryRef)">
-							<el-icon>
-								<ele-Refresh />
-							</el-icon>
-							重置
-						</el-button>
-						<el-button size="default" type="success" v-auth="'add'" class="ml10" @click="onOpenAddDic">
-							<el-icon>
-								<ele-FolderAdd />
-							</el-icon>
-							新增
-						</el-button>
-						<el-button @click="exportExcel" v-auth="'download'">
-							<el-icon> <ele-Download /> </el-icon>
-							数据导出
-						</el-button>
-						<uploadBtn @update="queryList" url="/region/heatStation/import" v-auth="'upload'"></uploadBtn>
-						<!-- <el-button size="default" type="danger" class="ml10" @click="onRowDel(null)">
-              <el-icon>
-                <ele-Delete />
-              </el-icon>
-              删除
-            </el-button> -->
-					</el-form-item>
-				</el-form>
-			</div>
-
-			<el-table
-				:data="tableData.data"
-				v-loading="tableData.loading"
-				style="width: 100%"
-				row-key="id"
-				default-expand-all
-				:indent="16"
-				:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
-			>
-				<!-- <el-table-column type="selection" width="55" align="center" /> -->
-				<!-- <el-table-column label="ID" align="center" prop="id" width="60" /> -->
-				<el-table-column label="换热站" prop="name" v-col="'name'" :show-overflow-tooltip="true" />
-				<el-table-column label="换热站编号" prop="code" v-col="'code'" :show-overflow-tooltip="true" />
-				<el-table-column label="位置" prop="position" v-col="'position'" min-width="120" :show-overflow-tooltip="true" />
-				<el-table-column label="负责人" prop="principalInfo.userNickname" v-col="'principalInfo.userNickname'" width="100" />
-				<el-table-column label="状态" prop="status" v-col="'status'" width="100">
-					<template #default="scope">
-						{{ scope.row.status === 1 ? '启用' : '禁用' }}
-					</template>
-				</el-table-column>
-				<el-table-column label="创建时间" prop="createdAt" v-col="'createdAt'" :show-overflow-tooltip="true"  width="180"/>
-				<el-table-column label="操作" width="200" v-col="'handle'" align="center">
-					<template #default="scope">
-						<el-button size="small" text type="primary" @click="onOpenDetail(scope.row)">详情</el-button>
-						<el-button size="small" text type="warning" @click="onOpenEditDic(scope.row)">修改</el-button>
-						<el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
-					</template>
-				</el-table-column>
-			</el-table>
-			<pagination
-				v-show="tableData.total > 0"
-				:total="tableData.total"
-				v-model:page="tableData.param.pageNum"
-				v-model:limit="tableData.param.pageSize"
-				@pagination="queryList"
-			/>
-		</el-card>
-		<EditDic ref="editDicRef" :treeData="tableData.data" @queryList="queryList" />
-		<Detail ref="detailRef" />
-	</div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import EditDic from './component/edit.vue';
-import Detail from './component/detail.vue';
-import uploadBtn from '/@/components/upload/button.vue';
-import api from '/@/api/heatStation';
-import downloadFile from '/@/utils/download';
-
-// 定义接口来定义对象的类型
-interface TableDataRow {
-	id: number;
-	name: string;
-	code: string;
-	stationId: string;
-	loopTypes: number;
-	energyTypes: number;
-	heatingObject: number;
-	heatingTypes: number;
-	heatingArea: string;
-	forRealArea: string;
-	decade: string;
-	status: number;
-}
-interface TableDataState {
-	ids: number[];
-	tableData: {
-		data: Array<TableDataRow>;
-		loading: boolean;
-		param: {
-			name: string;
-			code: string;
-			status: number;
-		};
-	};
-}
-
-export default defineComponent({
-	name: 'heatStation',
-	components: { EditDic, Detail, uploadBtn },
-	setup() {
-		const addDicRef = ref();
-		const editDicRef = ref();
-		const detailRef = ref();
-		const queryRef = ref();
-		const state = reactive<TableDataState>({
-			ids: [],
-			tableData: {
-				data: [],
-				loading: false,
-				param: {
-					name: '',
-					code: '',
-					status: -1,
-				},
-			},
-		});
-		// 初始化表格数据
-		const initTableData = () => {
-			queryList();
-		};
-		const queryList = () => {
-			state.tableData.loading = true;
-			api.heatStation.getList(state.tableData.param).then((res: any) => {
-				state.tableData.data = res || [];
-				state.tableData.loading = false;
-			});
-		};
-
-		//查看详情
-		const onOpenDetail = (row: TableDataRow) => {
-			detailRef.value.openDialog(row);
-		};
-		// 打开新增产品弹窗
-		const onOpenAddDic = () => {
-			editDicRef.value.openDialog(null, state.tableData.data);
-		};
-		// 打开修改产品弹窗
-		const onOpenEditDic = (row: TableDataRow) => {
-			editDicRef.value.openDialog(row, state.tableData.data);
-		};
-		// 删除产品
-		const onRowDel = (row: TableDataRow) => {
-			let msg = '你确定要删除所选数据?';
-			// let ids: number[] = [];
-			// if (row) {
-			msg = `此操作将永久删除设备:“${row.name}”,是否继续?`;
-			// ids = [row.id];
-			// } else {
-			// 	ids = state.ids;
-			// }
-			// if (ids.length === 0) {
-			// 	ElMessage.error('请选择要删除的数据。');
-			// 	return;
-			// }
-			ElMessageBox.confirm(msg, '提示', {
-				confirmButtonText: '确认',
-				cancelButtonText: '取消',
-				type: 'warning',
-			})
-				.then(() => {
-					api.heatStation.del(row.id).then(() => {
-						ElMessage.success('删除成功');
-						queryList();
-					});
-				})
-				.catch(() => {});
-		};
-		// 页面加载时
-		onMounted(() => {
-			initTableData();
-		});
-		/** 重置按钮操作 */
-		const resetQuery = (formEl: FormInstance | undefined) => {
-			if (!formEl) return;
-			formEl.resetFields();
-			queryList();
-		};
-		// 多选框选中数据
-		const handleSelectionChange = (selection: TableDataRow[]) => {
-			state.ids = selection.map((item) => item.id);
-		};
-		// 后端导出
-		const exportExcel = () => {
-			api.heatStation.heatStationExport(state.tableData.param).then((res: any) => {
-				downloadFile(res, '换热站列表数据导出.xlsx');
-			});
-		};
-		return {
-			addDicRef,
-			editDicRef,
-			detailRef,
-			queryRef,
-			onOpenDetail,
-			onOpenAddDic,
-			onOpenEditDic,
-			onRowDel,
-			queryList,
-			resetQuery,
-			exportExcel,
-			handleSelectionChange,
-			...toRefs(state),
-		};
-	},
-});
-</script>

+ 0 - 200
src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/floor/component/detail.vue

@@ -1,200 +0,0 @@
-<template>
-	<div class="system-edit-dic-container">
-		<el-dialog :title="'环路详情'" v-model="dialogVisible" width="950px">
-			<el-form :model="ruleForm" ref="formRef" size="default" label-width="110px">
-				<el-form-item label="环路名称" prop="name">
-					{{ ruleForm.name }}
-				</el-form-item>
-				<el-form-item label="环路编号" prop="code">
-					{{ ruleForm.code }}
-				</el-form-item>
-				<el-form-item label="所属换热站" prop="stationId">
-          {{ ruleForm.stationId }}
-					<!-- <el-tree-select
-						v-model="ruleForm.stationId"
-						:data="treeData"
-						:props="{
-							label: 'name',
-							children: 'children'
-						}"
-						node-key="id"
-						:clearable="true"
-						check-strictly
-						style="width: 100%;"
-						:render-after-expand="true"
-					/> -->
-				</el-form-item>
-        <el-form-item label="环路类型" prop="loopTypes">
-          {{ ruleForm.loopTypes === 1 ? '一网' : '二网' }}
-        </el-form-item>
-        <el-form-item label="节能类型" prop="energyTypes">
-          {{ ruleForm.energyTypes === 1 ? '节能' : '' }}
-        </el-form-item>
-        <el-row :gutter="10">
-          <el-col :span="12">
-            <el-form-item label="供暖对象" prop="heatingObject">
-              {{ ruleForm.heatingObject === 1 ? '公建' : '居民' }}
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="供暖类型" prop="heatingTypes">
-              {{ ruleForm.heatingTypes === 1 ? '地暖' : '暖气片' }}
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="10">
-          <el-col :span="12">
-            <el-form-item label="联网面积" prop="heatingArea">
-              {{ ruleForm.heatingArea }}
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="实供面积" prop="forRealArea">
-              {{ ruleForm.forRealArea }}
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item label="环路年代" prop="decade">
-          {{ ruleForm.decade }}
-        </el-form-item>
-				<el-form-item label="状态" prop="status">
-          {{ ruleForm.decade === 1 ? '在线' : '不在线' }}
-				</el-form-item>
-        <el-form-item label="路线信息" prop="">
-					<div class="mb10" style="width: 100%">
-						<div style="display: flex;" class="mb10" v-for="(item, index) in pointList" :key="index">
-							<el-input v-model="item.position" :disabled="!item.editFalg" @keydown="onLocalChange(item, index)" @change="onLocalChange(item, index)" placeholder="请输入关键字进行搜索" clearable style="flex: 1; margin-right: 10px"></el-input>
-							<span>排序:</span>
-							<el-input-number v-model="item.sort" :controls="false" :disabled="!item.editFalg" placeholder="排序" clearable style="width: 100px; margin-right: 10px"></el-input-number>
-						</div>
-					</div>
-        </el-form-item>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent, ref } from 'vue';
-import api from '/@/api/heatStation';
-import { ElMessage } from 'element-plus';
-interface Point {
-	sort?: number;
-	lnt: number;
-	lat: number
-}
-interface RuleFormState {
-	id?: number;
-	name: string;
-	code: string;
-	stationId: string;
-	loopTypes: string;
-	energyTypes: string;
-	heatingObject: string;
-	heatingTypes: string;
-	heatingArea: string;
-	forRealArea: string;
-	viaPoint: Array<Point>;
-	decade: string;
-	status: number;
-}
-
-export default defineComponent({
-	name: 'headStationLoop',
-	setup(prop, { emit }) {
-		const formRef = ref<HTMLElement | null>(null);
-		const state = reactive({
-			dialogVisible: false,
-			ruleForm: {
-				id: 0,
-				name: '',
-        code: '',
-        stationId: '',
-        loopTypes: '',
-        energyTypes: '',
-        heatingObject: '',
-        heatingTypes: '',
-        heatingArea: '',
-        forRealArea: '',
-        decade: '',
-				viaPoint: [],
-        status: 1
-			},
-			treeData: [],
-      pointList: [] as any
-		})
-		// 打开弹窗
-		const openDialog = (row: RuleFormState | null) => {
-			resetForm()
-			queryTree()
-			if (row) {
-				(state.ruleForm as any).id = row.id
-				getDetail()
-			}
-			state.dialogVisible = true
-		}
-		const resetForm = () => {
-			state.ruleForm = {
-				id: 0,
-				name: '',
-        code: '',
-        stationId: '',
-        loopTypes: '',
-        energyTypes: '',
-        heatingObject: '',
-        heatingTypes: '',
-        heatingArea: '',
-        forRealArea: '',
-				viaPoint: [],
-        decade: '',
-        status: 1
-			}
-		}
-		// 关闭弹窗
-		const closeDialog = () => {
-			state.dialogVisible = false
-		}
-		// 取消
-		const onCancel = () => {
-			closeDialog()
-			state.pointList = []
-		}
-		const queryTree = () => {
-			api.heatStation.getList({
-					name: '',
-					code: '',
-					status: -1
-				})
-				.then((res: any) => {
-					state.treeData = res || [];
-				});
-		};
-		const getDetail = () => {
-			api.loop.detail(state.ruleForm.id)
-				.then((res: any) => {
-					state.ruleForm = {
-						...res
-					}
-					state.pointList = state.ruleForm.viaPoint.map((item: any) => ({
-						...item,
-						editFlag: false
-					}))
-				})
-		}
-
-		return {
-			openDialog,
-			closeDialog,
-			onCancel,
-			formRef,
-			...toRefs(state)
-		}
-	}
-})
-</script>

+ 0 - 133
src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/floor/component/edit.vue

@@ -1,133 +0,0 @@
-<template>
-	<div class="system-edit-dic-container">
-		<el-dialog :title="(ruleForm.id !== 0 ? '修改' : '添加') + '楼宇'" v-model="dialogVisible" width="550px">
-			<el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
-				<el-form-item label="楼宇名称" prop="name">
-					<el-input v-model="ruleForm.name" placeholder="请输入楼宇名称" />
-				</el-form-item>
-				<el-form-item label="楼号" prop="number">
-					<el-input v-model="ruleForm.number" placeholder="请输入楼号" />
-				</el-form-item>
-				<el-form-item label="状态" prop="status">
-					<el-radio v-model="ruleForm.status" :label="1">启用</el-radio>
-					<el-radio v-model="ruleForm.status" :label="0">禁用</el-radio>
-				</el-form-item>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent, ref, unref } from 'vue';
-import api from '/@/api/heatingDistrict';
-import heatApi from '/@/api/heatStation';
-import { ElMessage } from 'element-plus';
-interface RuleFormState {
-	id?: number;
-	name: string;
-	organizationId: string;
-}
-
-export default defineComponent({
-	name: 'edit',
-	setup(prop, { emit }) {
-		const formRef = ref<HTMLElement | null>(null);
-		const state = reactive({
-			dialogVisible: false,
-			ruleForm: {
-				id: 0,
-				name: '',
-        number: '',
-				nodeId: '',
-				status: 1
-			},
-			rules: {
-				name: [{ required: true, message: '楼宇名称不能为空', trigger: ['blur', 'change'] }],
-				number: [{ required: true, message: '楼号不能为空', trigger: ['blur', 'change'] }],
-			}
-		})
-		// 打开弹窗
-		const openDialog = (row: RuleFormState | null, params: any) => {
-			resetForm()
-			if (params) {
-				state.ruleForm = {
-					...state.ruleForm,
-					...params
-				}
-			}
-			if (row) {
-				(state.ruleForm as any).id = row.id
-				getDetail()
-			}
-			state.dialogVisible = true
-		}
-		const resetForm = () => {
-			state.ruleForm = {
-				id: 0,
-				name: '',
-        number: '',
-				nodeId: '',
-				status: 1
-			}
-		}
-		// 关闭弹窗
-		const closeDialog = () => {
-			state.dialogVisible = false;
-			(formRef.value as any).clearValidate()
-		}
-		// 取消
-		const onCancel = () => {
-			closeDialog()
-		}
-		const getDetail = () => {
-			api.floor.detail(state.ruleForm.id)
-				.then((res: any) => {
-					state.ruleForm = {
-						...res
-					}
-				})
-		}
-		// 新增
-		const onSubmit = () => {
-			const formWrap = unref(formRef) as any
-			if (!formWrap) return;
-			formWrap.validate((valid: boolean) => {
-				if (valid) {
-					let params = { ...state.ruleForm }
-
-					if (params.id) {
-						//修改
-						api.floor.edit(params).then(() => {
-							ElMessage.success('楼宇修改成功')
-							closeDialog() // 关闭弹窗
-							emit('queryList')
-						})
-					} else {
-						//添加
-						api.floor.add(params).then(() => {
-							ElMessage.success('楼宇添加成功')
-							closeDialog() // 关闭弹窗
-							emit('queryList')
-						})
-					}
-				}
-			})
-		}
-
-		return {
-			openDialog,
-			closeDialog,
-			onCancel,
-			onSubmit,
-			formRef,
-			...toRefs(state)
-		}
-	}
-})
-</script>

+ 0 - 184
src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/floor/index.vue

@@ -1,184 +0,0 @@
-<template>
-  <div class="system-dic-container">
-    <div>
-      <div class="system-user-search mb15">
-        <el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="68px">
-          <el-form-item label="楼宇名称" prop="name">
-            <el-input v-model="tableData.param.name" placeholder="请输入楼宇名称" clearable size="default" style="width: 240px" @keyup.enter="queryList" />
-          </el-form-item>
-          <el-form-item label="楼号" prop="number">
-            <el-input v-model="tableData.param.number" placeholder="请输入楼号" clearable size="default" style="width: 240px" @keyup.enter="queryList" />
-          </el-form-item>
-          <el-form-item>
-            <el-button size="default" v-auth="'floor-query'" type="primary" class="ml10" @click="queryList">
-              <el-icon>
-                <ele-Search />
-              </el-icon>
-              查询
-            </el-button>
-            <el-button size="default" v-auth="'floor-reset'" @click="resetQuery(queryRef)">
-              <el-icon>
-                <ele-Refresh />
-              </el-icon>
-              重置
-            </el-button>
-            <el-button size="default" v-auth="'floor-add'" type="success" class="ml10" @click="onOpenDialog()">
-              <el-icon>
-                <ele-FolderAdd />
-              </el-icon>
-              新增
-            </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-      <el-table :data="tableData.data" v-loading="tableData.loading" style="width: 100%" >
-        <el-table-column label="ID" align="center" prop="id" width="60" />
-	    	<el-table-column label="楼宇名称" v-col="'floor-name'" prop="name" />
-	    	<el-table-column label="楼号" v-col="'floor-number'" prop="number" />
-	    	<el-table-column label="更新时间" v-col="'floor-createdAt'" prop="createdAt" width="180" />
-				<el-table-column label="启用状态" v-col="'floor-status'" prop="status" width="120" align="center">
-					<template #default="scope">
-						<el-switch v-model="scope.row.status" inline-prompt :active-value="1" :inactive-value="0" active-text="启" inactive-text="禁" @change="handleStatusChange(scope.row)">
-						</el-switch>
-					</template>
-				</el-table-column>
-        <el-table-column label="操作" v-col="'floor-handle'" width="200" align="center" fixed="right">
-          <template #default="scope">
-            <el-button size="small" text type="warning" @click="onOpenDialog(scope.row)">修改</el-button>
-            <el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination v-show="tableData.total>0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="queryList" />
-    </div>
-    <EditDic ref="editDicRef" @queryList="handleFinish()" />
-    <Detail ref="detailRef"  />
-  </div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent, watch } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import EditDic from './component/edit.vue';
-import Detail from './component/detail.vue';
-import api from '/@/api/heatingDistrict';
-
-export default defineComponent({
-	name: 'loop',
-	components: { EditDic,Detail },
-	props: {
-		nodeId: {
-			default: ''
-		}
-	},
-	setup(prop, { emit }) {
-		const editDicRef = ref();
-		const detailRef=ref();
-		const queryRef = ref();
-		const state = reactive({
-			ids: [],
-			tableData: {
-				data: [],
-				total: 0,
-				loading: false,
-				param: {
-					pageNum: 1,
-					pageSize: 10,
-					name: '',
-					number: '',
-					nodeId: '',
-					status: -1
-				},
-			},
-		});
-
-		const queryList = () => {
-			state.tableData.loading = true
-			api.floor.getList(state.tableData.param).then((res: any) => {
-				state.tableData.data = res.Info || [];
-				state.tableData.total = res.Total;
-				state.tableData.loading = false
-			});
-		};
-
-		const handleFinish = () => {
-			emit('finish')
-			queryList()
-		}
-		
-		watch(() => prop.nodeId, () => {
-			state.tableData.param.nodeId = prop.nodeId
-			queryList()
-		}, {
-			deep: true,
-			immediate: true
-		})
-
-		//查看详情
-		const onOpenDetail=(row: any)=>{
-			detailRef.value.openDialog(row);
-		}
-		// 打开新增修改弹窗
-		const onOpenDialog = (row: any) => {
-			editDicRef.value.openDialog(row, { nodeId: prop.nodeId });
-		};
-		
-		// 状态修改
-		const handleStatusChange = (row: any) => {
-			let text = row.status === 1 ? '启用' : '停用';
-			ElMessageBox.confirm('确认要"' + text + '":"' + row.name + '"楼宇吗?', '警告', {
-				confirmButtonText: '确定',
-				cancelButtonText: '取消',
-				type: 'warning',
-			})
-				.then(function () {
-					return api.floor.setStatus(row.id, row.status);
-				})
-				.then(() => {
-					ElMessage.success(text + '成功');
-				})
-				.catch(function () {
-					row.status = row.status === 0 ? 1 : 0;
-				});
-		};
-		// 删除产品
-		const onRowDel = (row: any) => {
-			let msg = `此操作将永久删除楼宇:“${row.name}”,是否继续?`;
-
-			ElMessageBox.confirm(msg, '提示', {
-				confirmButtonText: '确认',
-				cancelButtonText: '取消',
-				type: 'warning',
-			})
-				.then(() => {
-					api.floor.del(row.id).then(() => {
-						ElMessage.success('删除成功');
-						queryList();
-					});
-				})
-				.catch(() => {});
-		};
-
-		/** 重置按钮操作 */
-		const resetQuery = (formEl: FormInstance | undefined) => {
-			if (!formEl) return;
-			formEl.resetFields();
-			queryList();
-		};
-
-		return {
-			editDicRef,
-			detailRef,
-			queryRef,
-			onOpenDetail,
-			onOpenDialog,
-			onRowDel,
-			queryList,
-			resetQuery,
-			handleStatusChange,
-			handleFinish,
-			...toRefs(state),
-		};
-	},
-});
-</script>

+ 0 - 200
src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/regional/component/detail.vue

@@ -1,200 +0,0 @@
-<template>
-	<div class="system-edit-dic-container">
-		<el-dialog :title="'环路详情'" v-model="dialogVisible" width="950px">
-			<el-form :model="ruleForm" ref="formRef" size="default" label-width="110px">
-				<el-form-item label="环路名称" prop="name">
-					{{ ruleForm.name }}
-				</el-form-item>
-				<el-form-item label="环路编号" prop="code">
-					{{ ruleForm.code }}
-				</el-form-item>
-				<el-form-item label="所属换热站" prop="stationId">
-          {{ ruleForm.stationId }}
-					<!-- <el-tree-select
-						v-model="ruleForm.stationId"
-						:data="treeData"
-						:props="{
-							label: 'name',
-							children: 'children'
-						}"
-						node-key="id"
-						:clearable="true"
-						check-strictly
-						style="width: 100%;"
-						:render-after-expand="true"
-					/> -->
-				</el-form-item>
-        <el-form-item label="环路类型" prop="loopTypes">
-          {{ ruleForm.loopTypes === 1 ? '一网' : '二网' }}
-        </el-form-item>
-        <el-form-item label="节能类型" prop="energyTypes">
-          {{ ruleForm.energyTypes === 1 ? '节能' : '' }}
-        </el-form-item>
-        <el-row :gutter="10">
-          <el-col :span="12">
-            <el-form-item label="供暖对象" prop="heatingObject">
-              {{ ruleForm.heatingObject === 1 ? '公建' : '居民' }}
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="供暖类型" prop="heatingTypes">
-              {{ ruleForm.heatingTypes === 1 ? '地暖' : '暖气片' }}
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="10">
-          <el-col :span="12">
-            <el-form-item label="联网面积" prop="heatingArea">
-              {{ ruleForm.heatingArea }}
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="实供面积" prop="forRealArea">
-              {{ ruleForm.forRealArea }}
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item label="环路年代" prop="decade">
-          {{ ruleForm.decade }}
-        </el-form-item>
-				<el-form-item label="状态" prop="status">
-          {{ ruleForm.decade === 1 ? '在线' : '不在线' }}
-				</el-form-item>
-        <el-form-item label="路线信息" prop="">
-					<div class="mb10" style="width: 100%">
-						<div style="display: flex;" class="mb10" v-for="(item, index) in pointList" :key="index">
-							<el-input v-model="item.position" :disabled="!item.editFalg" @keydown="onLocalChange(item, index)" @change="onLocalChange(item, index)" placeholder="请输入关键字进行搜索" clearable style="flex: 1; margin-right: 10px"></el-input>
-							<span>排序:</span>
-							<el-input-number v-model="item.sort" :controls="false" :disabled="!item.editFalg" placeholder="排序" clearable style="width: 100px; margin-right: 10px"></el-input-number>
-						</div>
-					</div>
-        </el-form-item>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent, ref } from 'vue';
-import api from '/@/api/heatStation';
-import { ElMessage } from 'element-plus';
-interface Point {
-	sort?: number;
-	lnt: number;
-	lat: number
-}
-interface RuleFormState {
-	id?: number;
-	name: string;
-	code: string;
-	stationId: string;
-	loopTypes: string;
-	energyTypes: string;
-	heatingObject: string;
-	heatingTypes: string;
-	heatingArea: string;
-	forRealArea: string;
-	viaPoint: Array<Point>;
-	decade: string;
-	status: number;
-}
-
-export default defineComponent({
-	name: 'headStationLoop',
-	setup(prop, { emit }) {
-		const formRef = ref<HTMLElement | null>(null);
-		const state = reactive({
-			dialogVisible: false,
-			ruleForm: {
-				id: 0,
-				name: '',
-        code: '',
-        stationId: '',
-        loopTypes: '',
-        energyTypes: '',
-        heatingObject: '',
-        heatingTypes: '',
-        heatingArea: '',
-        forRealArea: '',
-        decade: '',
-				viaPoint: [],
-        status: 1
-			},
-			treeData: [],
-      pointList: [] as any
-		})
-		// 打开弹窗
-		const openDialog = (row: RuleFormState | null) => {
-			resetForm()
-			queryTree()
-			if (row) {
-				(state.ruleForm as any).id = row.id
-				getDetail()
-			}
-			state.dialogVisible = true
-		}
-		const resetForm = () => {
-			state.ruleForm = {
-				id: 0,
-				name: '',
-        code: '',
-        stationId: '',
-        loopTypes: '',
-        energyTypes: '',
-        heatingObject: '',
-        heatingTypes: '',
-        heatingArea: '',
-        forRealArea: '',
-				viaPoint: [],
-        decade: '',
-        status: 1
-			}
-		}
-		// 关闭弹窗
-		const closeDialog = () => {
-			state.dialogVisible = false
-		}
-		// 取消
-		const onCancel = () => {
-			closeDialog()
-			state.pointList = []
-		}
-		const queryTree = () => {
-			api.heatStation.getList({
-					name: '',
-					code: '',
-					status: -1
-				})
-				.then((res: any) => {
-					state.treeData = res || [];
-				});
-		};
-		const getDetail = () => {
-			api.loop.detail(state.ruleForm.id)
-				.then((res: any) => {
-					state.ruleForm = {
-						...res
-					}
-					state.pointList = state.ruleForm.viaPoint.map((item: any) => ({
-						...item,
-						editFlag: false
-					}))
-				})
-		}
-
-		return {
-			openDialog,
-			closeDialog,
-			onCancel,
-			formRef,
-			...toRefs(state)
-		}
-	}
-})
-</script>

+ 0 - 153
src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/regional/component/edit.vue

@@ -1,153 +0,0 @@
-<template>
-	<div class="system-edit-dic-container">
-		<el-dialog :title="(ruleForm.id !== 0 ? '修改' : '添加') + '小区'" v-model="dialogVisible" width="550px">
-			<el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
-				<!-- <el-form-item label="所属组织" prop="organizationId">
-					<el-tree-select
-						v-model="ruleForm.organizationId"
-						:data="orgList"
-						:props="{
-							label: 'name',
-							children: 'children'
-						}"
-						node-key="id"
-						:clearable="true"
-						check-strictly
-						style="width: 100%;"
-						:render-after-expand="true"
-					/>
-				</el-form-item> -->
-				<el-form-item label="小区名称" prop="name">
-					<el-input v-model="ruleForm.name" placeholder="请输入小区名称" />
-				</el-form-item>
-				<el-form-item label="状态" prop="status">
-					<el-radio v-model="ruleForm.status" :label="1">启用</el-radio>
-					<el-radio v-model="ruleForm.status" :label="0">禁用</el-radio>
-				</el-form-item>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent, ref, unref, nextTick } from 'vue';
-import api from '/@/api/heatingDistrict';
-import heatApi from '/@/api/heatStation';
-import { ElMessage } from 'element-plus';
-interface RuleFormState {
-	id?: number;
-	name: string;
-	organizationId: string;
-}
-
-export default defineComponent({
-	name: 'edit',
-	setup(prop, { emit }) {
-		const formRef = ref<HTMLElement | null>(null);
-		const state = reactive({
-			dialogVisible: false,
-			ruleForm: {
-				id: 0,
-				name: '',
-        organizationId: '',
-				status: 1
-			},
-			rules: {
-				name: [{ required: true, message: '小区名称不能为空', trigger: ['blur', 'change'] }],
-				organizationId: [{ required: true, message: '所属组织不能为空', trigger: ['blur', 'change'] }]
-			},
-			orgList: [],
-			heatList: []
-		})
-		// 打开弹窗
-		const openDialog = (row: RuleFormState | null, organizationId: any) => {
-			resetForm()
-			queryTree()
-			if (organizationId) {
-				state.ruleForm.organizationId = organizationId
-			}
-			if (row) {
-				(state.ruleForm as any).id = row.id
-				getDetail()
-			}
-			state.dialogVisible = true
-		}
-		const resetForm = () => {
-			state.ruleForm = {
-				id: 0,
-				name: '',
-        organizationId: '',
-				status: 1
-			}
-		}
-		// 关闭弹窗
-		const closeDialog = () => {
-			state.dialogVisible = false;
-			(formRef.value as any).clearValidate()
-		}
-		// 取消
-		const onCancel = () => {
-			closeDialog()
-		}
-		const queryTree = () => {
-			heatApi.heatStation.getList({
-					name: '',
-					code: '',
-					status: -1
-				})
-				.then((res: any) => {
-					state.heatList = res || [];
-				});
-		};
-		const getDetail = () => {
-			api.regionalManage.detail(state.ruleForm.id)
-				.then((res: any) => {
-					state.ruleForm = {
-						...res
-					}
-				})
-		}
-		// 新增
-		const onSubmit = () => {
-			const formWrap = unref(formRef) as any
-			if (!formWrap) return;
-			formWrap.validate((valid: boolean) => {
-				if (valid) {
-					let params = { ...state.ruleForm }
-
-					if (params.id) {
-						//修改
-						api.regionalManage.edit(params).then(() => {
-							ElMessage.success('小区修改成功')
-							closeDialog() // 关闭弹窗
-							emit('queryList')
-						})
-					} else {
-						//添加
-						api.regionalManage.add(params).then(() => {
-							ElMessage.success('小区添加成功')
-							closeDialog() // 关闭弹窗
-							emit('queryList')
-						})
-					}
-				}
-			})
-		}
-
-		return {
-			openDialog,
-			closeDialog,
-			onCancel,
-			onSubmit,
-			formRef,
-			...toRefs(state)
-		}
-	}
-})
-</script>

+ 0 - 193
src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/regional/index.vue

@@ -1,193 +0,0 @@
-<template>
-  <div class="system-dic-container">
-    <div>
-      <div class="system-user-search mb15">
-        <el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="68px">
-          <el-form-item label="小区名称" prop="name">
-            <el-input v-model="tableData.param.name" placeholder="请输入小区名称" clearable size="default" style="width: 240px" @keyup.enter="queryList" />
-          </el-form-item>
-          <el-form-item>
-            <el-button size="default" v-auth="'regional-query'" type="primary" class="ml10" @click="queryList">
-              <el-icon>
-                <ele-Search />
-              </el-icon>
-              查询
-            </el-button>
-            <el-button size="default" v-auth="'regional-reset'" @click="resetQuery(queryRef)">
-              <el-icon>
-                <ele-Refresh />
-              </el-icon>
-              重置
-            </el-button>
-            <el-button size="default" type="success" v-auth="'regional-add'" class="ml10" @click="onOpenAddDic">
-              <el-icon>
-                <ele-FolderAdd />
-              </el-icon>
-              新增
-            </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-			<el-table :data="tableData.data" v-loading="tableData.loading">
-				<el-table-column label="ID" align="center" prop="id" width="60" />
-				<el-table-column label="小区名称" v-col="'regional-name'" prop="name" min-width="100" />
-				<el-table-column label="区域名称" v-col="'regional-SysOrganization.name'" prop="SysOrganization.name" min-width="100">
-					<template #default="{ row }">
-						{{ row.SysOrganization.name }}
-					</template>
-				</el-table-column>
-				<el-table-column label="更新时间" v-col="'regional-createdAt'" prop="createdAt" width="180" />
-				<el-table-column prop="status" v-col="'regional-status'" label="启用状态" width="120" align="center">
-					<template #default="scope">
-						<el-switch v-model="scope.row.status" inline-prompt :active-value="1" :inactive-value="0" active-text="启" inactive-text="禁" @change="handleStatusChange(scope.row)">
-						</el-switch>
-					</template>
-				</el-table-column>
-				<el-table-column label="操作" v-col="'regional-handle'" width="200" align="center" fixed="right">
-					<template #default="scope">
-						<el-button size="small" text type="warning" @click="onOpenEditDic(scope.row)">修改</el-button>
-						<el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
-					</template>
-				</el-table-column>
-			</el-table>
-      <pagination v-show="tableData.total>0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="queryList" />
-    </div>
-    <EditDic ref="editDicRef" @queryList="handleFinish()" />
-    <Detail ref="detailRef"  />
-  </div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent, watch } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import EditDic from './component/edit.vue';
-import Detail from './component/detail.vue';
-import api from '/@/api/heatingDistrict';
-import systemApi from '/@/api/system';
-import { nextTick } from 'process';
-
-export default defineComponent({
-	name: 'loop',
-	components: { EditDic,Detail },
-	props: {
-		organizationId: {
-			default: ''
-		}
-	},
-	setup(prop, { emit }) {
-		const addDicRef = ref();
-		const editDicRef = ref();
-		const detailRef=ref();
-		const queryRef = ref();
-		const state = reactive({
-			ids: [],
-			tableData: {
-				data: [],
-				total: 0,
-				loading: false,
-				param: {
-					pageNum: 1,
-					pageSize: 10,
-					name: '',
-					organizationId: '',
-					status: -1
-				},
-			},
-		});
-
-		const queryList = () => {
-			state.tableData.loading = true
-			api.regionalManage.getList(state.tableData.param).then((res: any) => {
-				console.log(res);
-				state.tableData.data = res.Info || [];
-				state.tableData.total = res.Total;
-				state.tableData.loading = false
-			});
-		};
-		
-		const handleFinish = () => {
-			emit('finish')
-			queryList()
-		}
-
-		watch(() => prop.organizationId, () => {
-			state.tableData.param.organizationId = prop.organizationId
-			queryList()
-		}, {
-			deep: true,
-			immediate: true
-		})
-		//查看详情
-		const onOpenDetail=(row: any)=>{
-			detailRef.value.openDialog(row);
-		}
-		// 打开新增产品弹窗
-		const onOpenAddDic = () => {
-			editDicRef.value.openDialog(null, prop.organizationId);
-		};
-		// 打开修改产品弹窗
-		const onOpenEditDic = (row: any) => {
-			editDicRef.value.openDialog(row);
-		};
-		
-		// 状态修改
-		const handleStatusChange = (row: any) => {
-			let text = row.status === 1 ? '启用' : '停用';
-			ElMessageBox.confirm('确认要"' + text + '":"' + row.name + '"小区吗?', '警告', {
-				confirmButtonText: '确定',
-				cancelButtonText: '取消',
-				type: 'warning',
-			})
-				.then(function () {
-					return api.regionalManage.setStatus(row.id, row.status);
-				})
-				.then(() => {
-					ElMessage.success(text + '成功');
-				})
-				.catch(function () {
-					row.status = row.status === 0 ? 1 : 0;
-				});
-		};
-		// 删除产品
-		const onRowDel = (row: any) => {
-			let msg = `此操作将永久删除小区:“${row.name}”,是否继续?`;
-
-			ElMessageBox.confirm(msg, '提示', {
-				confirmButtonText: '确认',
-				cancelButtonText: '取消',
-				type: 'warning',
-			})
-				.then(() => {
-					api.regionalManage.del(row.id).then(() => {
-						ElMessage.success('删除成功');
-						queryList();
-					});
-				})
-				.catch(() => {});
-		};
-
-		/** 重置按钮操作 */
-		const resetQuery = (formEl: FormInstance | undefined) => {
-			if (!formEl) return;
-			formEl.resetFields();
-			queryList();
-		};
-
-		return {
-			addDicRef,
-			editDicRef,
-			detailRef,
-			queryRef,
-			onOpenDetail,
-			onOpenAddDic,
-			onOpenEditDic,
-			onRowDel,
-			queryList,
-			resetQuery,
-			handleStatusChange,
-			handleFinish,
-			...toRefs(state),
-		};
-	},
-});
-</script>

+ 0 - 200
src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/resident/component/detail.vue

@@ -1,200 +0,0 @@
-<template>
-	<div class="system-edit-dic-container">
-		<el-dialog :title="'环路详情'" v-model="dialogVisible" width="950px">
-			<el-form :model="ruleForm" ref="formRef" size="default" label-width="110px">
-				<el-form-item label="环路名称" prop="name">
-					{{ ruleForm.name }}
-				</el-form-item>
-				<el-form-item label="环路编号" prop="code">
-					{{ ruleForm.code }}
-				</el-form-item>
-				<el-form-item label="所属换热站" prop="stationId">
-          {{ ruleForm.stationId }}
-					<!-- <el-tree-select
-						v-model="ruleForm.stationId"
-						:data="treeData"
-						:props="{
-							label: 'name',
-							children: 'children'
-						}"
-						node-key="id"
-						:clearable="true"
-						check-strictly
-						style="width: 100%;"
-						:render-after-expand="true"
-					/> -->
-				</el-form-item>
-        <el-form-item label="环路类型" prop="loopTypes">
-          {{ ruleForm.loopTypes === 1 ? '一网' : '二网' }}
-        </el-form-item>
-        <el-form-item label="节能类型" prop="energyTypes">
-          {{ ruleForm.energyTypes === 1 ? '节能' : '' }}
-        </el-form-item>
-        <el-row :gutter="10">
-          <el-col :span="12">
-            <el-form-item label="供暖对象" prop="heatingObject">
-              {{ ruleForm.heatingObject === 1 ? '公建' : '居民' }}
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="供暖类型" prop="heatingTypes">
-              {{ ruleForm.heatingTypes === 1 ? '地暖' : '暖气片' }}
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="10">
-          <el-col :span="12">
-            <el-form-item label="联网面积" prop="heatingArea">
-              {{ ruleForm.heatingArea }}
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="实供面积" prop="forRealArea">
-              {{ ruleForm.forRealArea }}
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item label="环路年代" prop="decade">
-          {{ ruleForm.decade }}
-        </el-form-item>
-				<el-form-item label="状态" prop="status">
-          {{ ruleForm.decade === 1 ? '在线' : '不在线' }}
-				</el-form-item>
-        <el-form-item label="路线信息" prop="">
-					<div class="mb10" style="width: 100%">
-						<div style="display: flex;" class="mb10" v-for="(item, index) in pointList" :key="index">
-							<el-input v-model="item.position" :disabled="!item.editFalg" @keydown="onLocalChange(item, index)" @change="onLocalChange(item, index)" placeholder="请输入关键字进行搜索" clearable style="flex: 1; margin-right: 10px"></el-input>
-							<span>排序:</span>
-							<el-input-number v-model="item.sort" :controls="false" :disabled="!item.editFalg" placeholder="排序" clearable style="width: 100px; margin-right: 10px"></el-input-number>
-						</div>
-					</div>
-        </el-form-item>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent, ref } from 'vue';
-import api from '/@/api/heatStation';
-import { ElMessage } from 'element-plus';
-interface Point {
-	sort?: number;
-	lnt: number;
-	lat: number
-}
-interface RuleFormState {
-	id?: number;
-	name: string;
-	code: string;
-	stationId: string;
-	loopTypes: string;
-	energyTypes: string;
-	heatingObject: string;
-	heatingTypes: string;
-	heatingArea: string;
-	forRealArea: string;
-	viaPoint: Array<Point>;
-	decade: string;
-	status: number;
-}
-
-export default defineComponent({
-	name: 'headStationLoop',
-	setup(prop, { emit }) {
-		const formRef = ref<HTMLElement | null>(null);
-		const state = reactive({
-			dialogVisible: false,
-			ruleForm: {
-				id: 0,
-				name: '',
-        code: '',
-        stationId: '',
-        loopTypes: '',
-        energyTypes: '',
-        heatingObject: '',
-        heatingTypes: '',
-        heatingArea: '',
-        forRealArea: '',
-        decade: '',
-				viaPoint: [],
-        status: 1
-			},
-			treeData: [],
-      pointList: [] as any
-		})
-		// 打开弹窗
-		const openDialog = (row: RuleFormState | null) => {
-			resetForm()
-			queryTree()
-			if (row) {
-				(state.ruleForm as any).id = row.id
-				getDetail()
-			}
-			state.dialogVisible = true
-		}
-		const resetForm = () => {
-			state.ruleForm = {
-				id: 0,
-				name: '',
-        code: '',
-        stationId: '',
-        loopTypes: '',
-        energyTypes: '',
-        heatingObject: '',
-        heatingTypes: '',
-        heatingArea: '',
-        forRealArea: '',
-				viaPoint: [],
-        decade: '',
-        status: 1
-			}
-		}
-		// 关闭弹窗
-		const closeDialog = () => {
-			state.dialogVisible = false
-		}
-		// 取消
-		const onCancel = () => {
-			closeDialog()
-			state.pointList = []
-		}
-		const queryTree = () => {
-			api.heatStation.getList({
-					name: '',
-					code: '',
-					status: -1
-				})
-				.then((res: any) => {
-					state.treeData = res || [];
-				});
-		};
-		const getDetail = () => {
-			api.loop.detail(state.ruleForm.id)
-				.then((res: any) => {
-					state.ruleForm = {
-						...res
-					}
-					state.pointList = state.ruleForm.viaPoint.map((item: any) => ({
-						...item,
-						editFlag: false
-					}))
-				})
-		}
-
-		return {
-			openDialog,
-			closeDialog,
-			onCancel,
-			formRef,
-			...toRefs(state)
-		}
-	}
-})
-</script>

+ 0 - 163
src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/resident/component/edit.vue

@@ -1,163 +0,0 @@
-<template>
-	<div class="system-edit-dic-container">
-		<el-dialog :title="(ruleForm.id !== 0 ? '修改' : '添加') + '住户'" v-model="dialogVisible" width="550px">
-			<el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
-				<el-form-item label="住户姓名" prop="name">
-					<el-input v-model="ruleForm.name" placeholder="请输入住户姓名" />
-				</el-form-item>
-				<el-form-item label="楼层" prop="floorLevel">
-					<el-input v-model="ruleForm.floorLevel" placeholder="请输入楼层" />
-				</el-form-item>
-				<el-form-item label="房间号" prop="roomNumber">
-					<el-input v-model="ruleForm.roomNumber" placeholder="请输入房间号" />
-				</el-form-item>
-				<el-form-item label="电话号码" prop="phone">
-					<el-input v-model="ruleForm.phone" placeholder="请输入电话号码" />
-				</el-form-item>
-				<el-form-item label="建筑面积" prop="buildingArea">
-					<el-input v-model="ruleForm.buildingArea" placeholder="请输入建筑面积" />
-				</el-form-item>
-				<el-form-item label="实供面积" prop="forRealArea">
-					<el-input v-model="ruleForm.forRealArea" placeholder="请输入实供面积" />
-				</el-form-item>
-				<el-form-item label="状态" prop="status">
-					<el-radio v-model="ruleForm.status" :label="1">启用</el-radio>
-					<el-radio v-model="ruleForm.status" :label="0">禁用</el-radio>
-				</el-form-item>
-				<el-form-item label="备注" prop="remark">
-					<el-input type="textarea" :rows="8" v-model="ruleForm.remark" placeholder="请输入备注" />
-				</el-form-item>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent, ref, unref, nextTick } from 'vue';
-import api from '/@/api/heatingDistrict';
-import heatApi from '/@/api/heatStation';
-import { ElMessage } from 'element-plus';
-interface RuleFormState {
-	id?: number;
-	name: string;
-	organizationId: string;
-}
-
-export default defineComponent({
-	name: 'edit',
-	setup(prop, { emit }) {
-		const formRef = ref<HTMLElement | null>(null);
-		const state = reactive({
-			dialogVisible: false,
-			ruleForm: {
-				id: 0,
-				nodeId: '',
-				name: '',
-				floorLevel: '',
-				roomNumber: '',
-				phone: '',
-				buildingArea: '',
-				forRealArea: '',
-				remark: '',
-				status: 1
-			},
-			rules: {
-				name: [{ required: true, message: '住户名称不能为空', trigger: ['blur', 'change'] }],
-				floorLevel: [{ required: true, message: '楼层不能为空', trigger: ['blur', 'change'] }],
-				roomNumber: [{ required: true, message: '房间号不能为空', trigger: ['blur', 'change'] }],
-				phone: [{ required: true, message: '手机号码不能为空', trigger: ['blur', 'change'] }],
-				forRealArea: [{ required: true, message: '实供面积不能为空', trigger: ['blur', 'change'] }],
-				buildingArea: [{ required: true, message: '建筑面积不能为空', trigger: ['blur', 'change'] }],
-			}
-		})
-		// 打开弹窗
-		const openDialog = (row: any, params: any) => {
-			resetForm()
-			if (params) {
-				state.ruleForm = {
-					...state.ruleForm,
-					...params
-				}
-			}
-			if (row) {
-				(state.ruleForm as any).id = row.id
-				getDetail()
-			}
-			state.dialogVisible = true
-		}
-		const resetForm = () => {
-			state.ruleForm = {
-				id: 0,
-				nodeId: '',
-				name: '',
-				floorLevel: '',
-				roomNumber: '',
-				phone: '',
-				buildingArea: '',
-				forRealArea: '',
-				remark: '',
-				status: 1
-			}
-		}
-		// 关闭弹窗
-		const closeDialog = () => {
-			state.dialogVisible = false;
-			(formRef.value as any).clearValidate()
-		}
-		// 取消
-		const onCancel = () => {
-			closeDialog()
-		}
-		const getDetail = () => {
-			api.resident.detail(state.ruleForm.id)
-				.then((res: any) => {
-					state.ruleForm = {
-						...res,
-						heatStaId: res.heatStaId || ''
-					}
-				})
-		}
-		// 新增
-		const onSubmit = () => {
-			const formWrap = unref(formRef) as any
-			if (!formWrap) return;
-			formWrap.validate((valid: boolean) => {
-				if (valid) {
-					let params = { ...state.ruleForm }
-
-					if (params.id) {
-						//修改
-						api.resident.edit(params).then(() => {
-							ElMessage.success('单元修改成功')
-							closeDialog() // 关闭弹窗
-							emit('queryList')
-						})
-					} else {
-						//添加
-						api.resident.add(params).then(() => {
-							ElMessage.success('单元添加成功')
-							closeDialog() // 关闭弹窗
-							emit('queryList')
-						})
-					}
-				}
-			})
-		}
-
-		return {
-			openDialog,
-			closeDialog,
-			onCancel,
-			onSubmit,
-			formRef,
-			...toRefs(state)
-		}
-	}
-})
-</script>

+ 0 - 185
src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/resident/index.vue

@@ -1,185 +0,0 @@
-<template>
-  <div class="system-dic-container">
-    <div>
-      <div class="system-user-search mb15">
-        <el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="68px">
-          <el-form-item label="住户名称" prop="name">
-            <el-input v-model="tableData.param.name" placeholder="请输入住户名称" clearable size="default" style="width: 240px" @keyup.enter="queryList" />
-          </el-form-item>
-          <el-form-item>
-            <el-button size="default" v-auth="'resident-query'" type="primary" class="ml10" @click="queryList">
-              <el-icon>
-                <ele-Search />
-              </el-icon>
-              查询
-            </el-button>
-            <el-button size="default" v-auth="'resident-reset'" @click="resetQuery(queryRef)">
-              <el-icon>
-                <ele-Refresh />
-              </el-icon>
-              重置
-            </el-button>
-            <el-button size="default" v-auth="'resident-add'" type="success" class="ml10" @click="onOpenDialog()">
-              <el-icon>
-                <ele-FolderAdd />
-              </el-icon>
-              新增
-            </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-      <el-table :data="tableData.data" v-loading="tableData.loading" style="width: 100%" >
-        <el-table-column label="ID" align="center" prop="id" width="60" />
-	    	<el-table-column label="楼层" v-col="'resident-floorLevel'" prop="floorLevel" min-width="100" />
-	    	<el-table-column label="房间号" v-col="'resident-roomNumber'" prop="roomNumber" min-width="100" />
-	    	<el-table-column label="建筑面积" v-col="'resident-buildingArea'" prop="buildingArea" min-width="100" />
-	    	<el-table-column label="实供面积" v-col="'resident-forRealArea'" prop="forRealArea" min-width="100" />
-	    	<el-table-column label="住户姓名" v-col="'resident-name'" prop="name" min-width="100" />
-	    	<el-table-column label="电话号码" v-col="'resident-phone'" prop="phone" min-width="100" />
-	    	<el-table-column label="更新时间" v-col="'resident-createdAt'" prop="createdAt" width="180"/>
-				<el-table-column label="启用状态" v-col="'resident-status'" prop="status" width="120" align="center">
-					<template #default="scope">
-						<el-switch v-model="scope.row.status" inline-prompt :active-value="1" :inactive-value="0" active-text="启" inactive-text="禁" @change="handleStatusChange(scope.row)">
-						</el-switch>
-					</template>
-				</el-table-column>
-        <el-table-column label="操作" v-col="'resident-handle'" width="200" align="center" fixed="right">
-          <template #default="scope">
-            <el-button size="small" text type="warning" @click="onOpenDialog(scope.row)">修改</el-button>
-            <el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination v-show="tableData.total>0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="queryList" />
-    </div>
-    <EditDic ref="editDicRef" @queryList="handleFinish()" />
-    <Detail ref="detailRef"  />
-  </div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent, watch } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import EditDic from './component/edit.vue';
-import Detail from './component/detail.vue';
-import api from '/@/api/heatingDistrict';
-import systemApi from '/@/api/system';
-
-export default defineComponent({
-	name: 'loop',
-	components: { EditDic,Detail },
-	props: {
-		nodeId: {
-			default: ''
-		}
-	},
-	setup(prop, { emit }) {
-		const addDicRef = ref();
-		const editDicRef = ref();
-		const detailRef=ref();
-		const queryRef = ref();
-		const state = reactive({
-			ids: [],
-			tableData: {
-				data: [],
-				total: 0,
-				loading: false,
-				param: {
-					pageNum: 1,
-					pageSize: 10,
-					name: '',
-					nodeId: '',
-					status: -1
-				},
-			},
-		});
-		const queryList = () => {
-			state.tableData.loading = true
-			api.resident.getList(state.tableData.param).then((res: any) => {
-				console.log(res);
-				state.tableData.data = res.Data || [];
-				state.tableData.total = res.Total;
-				state.tableData.loading = false
-			});
-		};
-		
-		const handleFinish = () => {
-			emit('finish')
-			queryList()
-		}
-		
-		watch(() => prop.nodeId, () => {
-			state.tableData.param.nodeId = prop.nodeId
-			queryList()
-		}, {
-			deep: true,
-			immediate: true
-		})
-		//查看详情
-		const onOpenDetail=(row: any)=>{
-			detailRef.value.openDialog(row);
-		}
-		// 打开新增修改弹窗
-		const onOpenDialog = (row: any) => {
-			editDicRef.value.openDialog(row, { nodeId: prop.nodeId });
-		};
-		
-		// 状态修改
-		const handleStatusChange = (row: any) => {
-			let text = row.status === 1 ? '启用' : '停用';
-			ElMessageBox.confirm('确认要"' + text + '":"' + row.name + '"住户吗?', '警告', {
-				confirmButtonText: '确定',
-				cancelButtonText: '取消',
-				type: 'warning',
-			})
-				.then(function () {
-					return api.resident.setStatus(row.id, row.status);
-				})
-				.then(() => {
-					ElMessage.success(text + '成功');
-				})
-				.catch(function () {
-					row.status = row.status === 0 ? 1 : 0;
-				});
-		};
-		// 删除产品
-		const onRowDel = (row: any) => {
-			let msg = `此操作将永久删除住户:“${row.name}”,是否继续?`;
-			ElMessageBox.confirm(msg, '提示', {
-				confirmButtonText: '确认',
-				cancelButtonText: '取消',
-				type: 'warning',
-			})
-				.then(() => {
-					api.resident.del(row.id).then(() => {
-						ElMessage.success('删除成功');
-						queryList();
-					});
-				})
-				.catch(() => {});
-		};
-
-		/** 重置按钮操作 */
-		const resetQuery = (formEl: FormInstance | undefined) => {
-			if (!formEl) return;
-			formEl.resetFields();
-			queryList();
-		};
-
-		return {
-			addDicRef,
-			editDicRef,
-			detailRef,
-			queryRef,
-			onOpenDetail,
-			onOpenDialog,
-			onRowDel,
-			queryList,
-			resetQuery,
-			handleStatusChange,
-			handleFinish,
-			...toRefs(state),
-		};
-	},
-});
-</script>

+ 0 - 200
src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/unit/component/detail.vue

@@ -1,200 +0,0 @@
-<template>
-	<div class="system-edit-dic-container">
-		<el-dialog :title="'环路详情'" v-model="dialogVisible" width="950px">
-			<el-form :model="ruleForm" ref="formRef" size="default" label-width="110px">
-				<el-form-item label="环路名称" prop="name">
-					{{ ruleForm.name }}
-				</el-form-item>
-				<el-form-item label="环路编号" prop="code">
-					{{ ruleForm.code }}
-				</el-form-item>
-				<el-form-item label="所属换热站" prop="stationId">
-          {{ ruleForm.stationId }}
-					<!-- <el-tree-select
-						v-model="ruleForm.stationId"
-						:data="treeData"
-						:props="{
-							label: 'name',
-							children: 'children'
-						}"
-						node-key="id"
-						:clearable="true"
-						check-strictly
-						style="width: 100%;"
-						:render-after-expand="true"
-					/> -->
-				</el-form-item>
-        <el-form-item label="环路类型" prop="loopTypes">
-          {{ ruleForm.loopTypes === 1 ? '一网' : '二网' }}
-        </el-form-item>
-        <el-form-item label="节能类型" prop="energyTypes">
-          {{ ruleForm.energyTypes === 1 ? '节能' : '' }}
-        </el-form-item>
-        <el-row :gutter="10">
-          <el-col :span="12">
-            <el-form-item label="供暖对象" prop="heatingObject">
-              {{ ruleForm.heatingObject === 1 ? '公建' : '居民' }}
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="供暖类型" prop="heatingTypes">
-              {{ ruleForm.heatingTypes === 1 ? '地暖' : '暖气片' }}
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="10">
-          <el-col :span="12">
-            <el-form-item label="联网面积" prop="heatingArea">
-              {{ ruleForm.heatingArea }}
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="实供面积" prop="forRealArea">
-              {{ ruleForm.forRealArea }}
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item label="环路年代" prop="decade">
-          {{ ruleForm.decade }}
-        </el-form-item>
-				<el-form-item label="状态" prop="status">
-          {{ ruleForm.decade === 1 ? '在线' : '不在线' }}
-				</el-form-item>
-        <el-form-item label="路线信息" prop="">
-					<div class="mb10" style="width: 100%">
-						<div style="display: flex;" class="mb10" v-for="(item, index) in pointList" :key="index">
-							<el-input v-model="item.position" :disabled="!item.editFalg" @keydown="onLocalChange(item, index)" @change="onLocalChange(item, index)" placeholder="请输入关键字进行搜索" clearable style="flex: 1; margin-right: 10px"></el-input>
-							<span>排序:</span>
-							<el-input-number v-model="item.sort" :controls="false" :disabled="!item.editFalg" placeholder="排序" clearable style="width: 100px; margin-right: 10px"></el-input-number>
-						</div>
-					</div>
-        </el-form-item>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent, ref } from 'vue';
-import api from '/@/api/heatStation';
-import { ElMessage } from 'element-plus';
-interface Point {
-	sort?: number;
-	lnt: number;
-	lat: number
-}
-interface RuleFormState {
-	id?: number;
-	name: string;
-	code: string;
-	stationId: string;
-	loopTypes: string;
-	energyTypes: string;
-	heatingObject: string;
-	heatingTypes: string;
-	heatingArea: string;
-	forRealArea: string;
-	viaPoint: Array<Point>;
-	decade: string;
-	status: number;
-}
-
-export default defineComponent({
-	name: 'headStationLoop',
-	setup(prop, { emit }) {
-		const formRef = ref<HTMLElement | null>(null);
-		const state = reactive({
-			dialogVisible: false,
-			ruleForm: {
-				id: 0,
-				name: '',
-        code: '',
-        stationId: '',
-        loopTypes: '',
-        energyTypes: '',
-        heatingObject: '',
-        heatingTypes: '',
-        heatingArea: '',
-        forRealArea: '',
-        decade: '',
-				viaPoint: [],
-        status: 1
-			},
-			treeData: [],
-      pointList: [] as any
-		})
-		// 打开弹窗
-		const openDialog = (row: RuleFormState | null) => {
-			resetForm()
-			queryTree()
-			if (row) {
-				(state.ruleForm as any).id = row.id
-				getDetail()
-			}
-			state.dialogVisible = true
-		}
-		const resetForm = () => {
-			state.ruleForm = {
-				id: 0,
-				name: '',
-        code: '',
-        stationId: '',
-        loopTypes: '',
-        energyTypes: '',
-        heatingObject: '',
-        heatingTypes: '',
-        heatingArea: '',
-        forRealArea: '',
-				viaPoint: [],
-        decade: '',
-        status: 1
-			}
-		}
-		// 关闭弹窗
-		const closeDialog = () => {
-			state.dialogVisible = false
-		}
-		// 取消
-		const onCancel = () => {
-			closeDialog()
-			state.pointList = []
-		}
-		const queryTree = () => {
-			api.heatStation.getList({
-					name: '',
-					code: '',
-					status: -1
-				})
-				.then((res: any) => {
-					state.treeData = res || [];
-				});
-		};
-		const getDetail = () => {
-			api.loop.detail(state.ruleForm.id)
-				.then((res: any) => {
-					state.ruleForm = {
-						...res
-					}
-					state.pointList = state.ruleForm.viaPoint.map((item: any) => ({
-						...item,
-						editFlag: false
-					}))
-				})
-		}
-
-		return {
-			openDialog,
-			closeDialog,
-			onCancel,
-			formRef,
-			...toRefs(state)
-		}
-	}
-})
-</script>

+ 0 - 132
src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/unit/component/edit.vue

@@ -1,132 +0,0 @@
-<template>
-	<div class="system-edit-dic-container">
-		<el-dialog :title="(ruleForm.id !== 0 ? '修改' : '添加') + '单元'" v-model="dialogVisible" width="550px">
-			<el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
-				<el-form-item label="单元名称" prop="name">
-					<el-input v-model="ruleForm.name" placeholder="请输入单元名称" />
-				</el-form-item>
-				<el-form-item label="单元号" prop="number">
-					<el-input v-model="ruleForm.number" placeholder="请输入单元号" />
-				</el-form-item>
-				<el-form-item label="状态" prop="status">
-					<el-radio v-model="ruleForm.status" :label="1">启用</el-radio>
-					<el-radio v-model="ruleForm.status" :label="0">禁用</el-radio>
-				</el-form-item>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
-				</span>
-			</template>
-		</el-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent, ref, unref, nextTick } from 'vue';
-import api from '/@/api/heatingDistrict';
-import heatApi from '/@/api/heatStation';
-import { ElMessage } from 'element-plus';
-
-export default defineComponent({
-	name: 'edit',
-	setup(prop, { emit }) {
-		const formRef = ref<HTMLElement | null>(null);
-		const state = reactive({
-			dialogVisible: false,
-			ruleForm: {
-				id: 0,
-				name: '',
-        nodeId: '',
-        number: '',
-        remark: '',
-				status: 1
-			},
-			rules: {
-				name: [{ required: true, message: '单元名称不能为空', trigger: ['blur', 'change'] }],
-				number: [{ required: true, message: '单元号不能为空', trigger: ['blur', 'change'] }],
-			}
-		})
-		// 打开弹窗
-		const openDialog = (row: any, params: any) => {
-			resetForm()
-			if (params) {
-				state.ruleForm = {
-					...state.ruleForm,
-					...params
-				}
-			}
-			if (row) {
-				(state.ruleForm as any).id = row.id;
-				(state.ruleForm as any).plotId = row.plotId;
-				getDetail()
-			}
-			state.dialogVisible = true
-		}
-		const resetForm = () => {
-			state.ruleForm = {
-				id: 0,
-				name: '',
-        nodeId: '',
-        number: '',
-        remark: '',
-				status: 1
-			}
-		}
-		// 关闭弹窗
-		const closeDialog = () => {
-			state.dialogVisible = false;
-			(formRef.value as any).clearValidate()
-		}
-		// 取消
-		const onCancel = () => {
-			closeDialog()
-		}
-		const getDetail = () => {
-			api.unit.detail(state.ruleForm.id)
-				.then((res: any) => {
-					state.ruleForm = {
-						...res,
-						heatStaId: res.heatStaId || ''
-					}
-				})
-		}
-		// 新增
-		const onSubmit = () => {
-			const formWrap = unref(formRef) as any
-			if (!formWrap) return;
-			formWrap.validate((valid: boolean) => {
-				if (valid) {
-					let params = { ...state.ruleForm }
-
-					if (params.id) {
-						//修改
-						api.unit.edit(params).then(() => {
-							ElMessage.success('单元修改成功')
-							closeDialog() // 关闭弹窗
-							emit('queryList')
-						})
-					} else {
-						//添加
-						api.unit.add(params).then(() => {
-							ElMessage.success('单元添加成功')
-							closeDialog() // 关闭弹窗
-							emit('queryList')
-						})
-					}
-				}
-			})
-		}
-
-		return {
-			openDialog,
-			closeDialog,
-			onCancel,
-			onSubmit,
-			formRef,
-			...toRefs(state)
-		}
-	}
-})
-</script>

+ 0 - 189
src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/children/unit/index.vue

@@ -1,189 +0,0 @@
-<template>
-  <div class="system-dic-container">
-    <div>
-      <div class="system-user-search mb15">
-        <el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="68px">
-          <el-form-item label="单元名称" prop="name">
-            <el-input v-model="tableData.param.name" placeholder="请输入单元名称" clearable size="default" style="width: 240px" @keyup.enter="queryList" />
-          </el-form-item>
-					<el-form-item label="单元号" prop="number">
-            <el-input v-model="tableData.param.number" placeholder="请输入单元号" clearable size="default" style="width: 240px" @keyup.enter="queryList" />
-          </el-form-item>
-          <el-form-item>
-            <el-button size="default" v-auth="'unit-query'" type="primary" class="ml10" @click="queryList">
-              <el-icon>
-                <ele-Search />
-              </el-icon>
-              查询
-            </el-button>
-            <el-button size="default" v-auth="'unit-reset'" @click="resetQuery(queryRef)">
-              <el-icon>
-                <ele-Refresh />
-              </el-icon>
-              重置
-            </el-button>
-            <el-button size="default" v-auth="'unit-add'" type="success" class="ml10" @click="onOpenDialog()">
-              <el-icon>
-                <ele-FolderAdd />
-              </el-icon>
-              新增
-            </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-      <el-table :data="tableData.data" v-loading="tableData.loading" style="width: 100%" >
-        <el-table-column label="ID" align="center" prop="id" width="60" />
-	    	<el-table-column label="单元名称" v-col="'unit-name'" prop="name" />
-	    	<el-table-column label="单元号" v-col="'unit-number'" prop="number" />
-	    	<el-table-column label="更新时间" v-col="'unit-updatedAt'" prop="updatedAt" width="180" />
-				<el-table-column label="启用状态" v-col="'unit-status'" prop="status" width="120" align="center">
-					<template #default="scope">
-						<el-switch v-model="scope.row.status" inline-prompt :active-value="1" :inactive-value="0" active-text="启" inactive-text="禁" @change="handleStatusChange(scope.row)">
-						</el-switch>
-					</template>
-				</el-table-column>
-        <el-table-column label="操作" v-col="'unit-handle'" width="200" align="center" fixed="right">
-          <template #default="scope">
-            <el-button size="small" text type="warning" @click="onOpenDialog(scope.row)">修改</el-button>
-            <el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination v-show="tableData.total>0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="queryList" />
-    </div>
-    <EditDic ref="editDicRef" @queryList="handleFinish()" />
-    <Detail ref="detailRef"  />
-  </div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent, watch } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import EditDic from './component/edit.vue';
-import Detail from './component/detail.vue';
-import api from '/@/api/heatingDistrict';
-import systemApi from '/@/api/system';
-
-export default defineComponent({
-	name: 'loop',
-	components: { EditDic,Detail },
-	props: {
-		nodeId: {
-			default: ''
-		}
-	},
-	setup(prop, { emit }) {
-		const addDicRef = ref();
-		const editDicRef = ref();
-		const detailRef=ref();
-		const queryRef = ref();
-		const state = reactive({
-			ids: [],
-			tableData: {
-				data: [],
-				total: 0,
-				loading: false,
-				param: {
-					pageNum: 1,
-					pageSize: 10,
-					name: '',
-					number: '',
-					nodeId: '',
-					status: -1
-				},
-			},
-		});
-		const queryList = () => {
-			state.tableData.loading = true
-			api.unit.getList(state.tableData.param).then((res: any) => {
-				console.log(res);
-				state.tableData.data = res.Data || [];
-				state.tableData.total = res.Total;
-				state.tableData.loading = false
-			});
-		};
-		
-		const handleFinish = () => {
-			emit('finish')
-			queryList()
-		}
-		
-		watch(() => prop.nodeId, () => {
-			state.tableData.param.nodeId = prop.nodeId
-			queryList()
-		}, {
-			deep: true,
-			immediate: true
-		})
-
-		//查看详情
-		const onOpenDetail=(row: any)=>{
-			detailRef.value.openDialog(row);
-		}
-		// 打开新增修改弹窗
-		const onOpenDialog = (row: any) => {
-			editDicRef.value.openDialog(row, { nodeId: prop.nodeId });
-		};
-		
-		// 状态修改
-		const handleStatusChange = (row: any) => {
-			let text = row.status === 1 ? '启用' : '停用';
-			ElMessageBox.confirm('确认要"' + text + '":"' + row.name + '"单元吗?', '警告', {
-				confirmButtonText: '确定',
-				cancelButtonText: '取消',
-				type: 'warning',
-			})
-				.then(function () {
-					return api.unit.setStatus(row.id, row.status);
-				})
-				.then(() => {
-					ElMessage.success(text + '成功');
-				})
-				.catch(function () {
-					row.status = row.status === 0 ? 1 : 0;
-				});
-		};
-		// 删除产品
-		const onRowDel = (row: any) => {
-			let msg = `此操作将永久删除单元:“${row.name}”,是否继续?`;
-			ElMessageBox.confirm(msg, '提示', {
-				confirmButtonText: '确认',
-				cancelButtonText: '取消',
-				type: 'warning',
-			})
-				.then(() => {
-					api.unit.del(row.id).then(() => {
-						ElMessage.success('删除成功');
-						queryList();
-					});
-				})
-				.catch(() => {});
-		};
-		// 页面加载时
-		// onMounted(() => {
-		// 	queryList();
-		// });
-		/** 重置按钮操作 */
-		const resetQuery = (formEl: FormInstance | undefined) => {
-			if (!formEl) return;
-			formEl.resetFields();
-			queryList();
-		};
-
-		return {
-			addDicRef,
-			editDicRef,
-			detailRef,
-			queryRef,
-			onOpenDetail,
-			onOpenDialog,
-			onRowDel,
-			queryList,
-			resetQuery,
-			handleStatusChange,
-			handleFinish,
-			...toRefs(state),
-		};
-	},
-});
-</script>

+ 0 - 276
src/views/heating/heatStation/heatingDistrict/heatingDistrictManage/index.vue

@@ -1,276 +0,0 @@
-<template>
-	<div class="page-container">
-		<el-card>
-			<div class="head-card">
-				<div class="head-card-item">
-					<div class="item">
-						<div class="count" :class="{ dark: isDark }">{{ cardCount.org }}</div>
-						<div class="label">区域统计</div>
-					</div>
-					<div class="logo">
-						<img src="/@/assets/icon-org.png" class="img">
-					</div>
-				</div>
-				<div class="head-card-item">
-					<div class="item">
-						<div class="count" :class="{ dark: isDark }">{{ cardCount.plot }}</div>
-						<div class="label">小区统计</div>
-					</div>
-					<div class="logo">
-						<img src="/@/assets/icon-plot.png" class="img">
-					</div>
-				</div>
-				<div class="head-card-item">
-					<div class="item">
-						<div class="count" :class="{ dark: isDark }">{{ cardCount.resident }}</div>
-						<div class="label">住户统计</div>
-					</div>
-					<div class="logo">
-						<img src="/@/assets/icon-resident.png" class="img">
-					</div>
-				</div>
-			</div>
-		</el-card>
-		<el-card class="mt-3">
-			<div class="panel" :class="{ dark: isDark }">
-				<div class="left-panel">
-					<!-- <el-input v-model="filterText" size="default" placeholder="搜索区域" /> -->
-					<el-tree :data="treeList" node-key="id" default-expand-all :props="{
-						children: 'children'
-					}" @node-click="onNodeClick" :expand-on-click-node="false">
-						<template #default="{ data }">
-							<span class="custom-tree-node" :class="{ active: `${data.id}-${data.orgType}` === `${curNode.id}-${curNode.orgType}` }">
-								<img src="/src/assets/icon-org.png" v-if="data.orgType === 'org'">
-								<img src="/src/assets/icon-plot.png" v-else-if="data.orgType === 'plot'">
-								<img src="/src/assets/icon-floor.png" v-else-if="data.orgType === 'floor'">
-								<img src="/src/assets/icon-unit.png" v-else-if="data.orgType === 'unit'">
-								<span class="name" :title="data.orgName">{{ data.orgName }}</span>
-							</span>
-						</template>
-					</el-tree>
-				</div>
-				<div class="right-panel" :class="{ dark: isDark }">
-					<!-- 小区 -->
-					<Regional v-if="curNode.orgType === 'org'" :organizationId="curNode.id" @finish="initPage()" />
-					<!-- 楼宇 -->
-					<Floor v-else-if="curNode.orgType === 'plot'" :nodeId="curNode.id" @finish="initPage()" />
-					<!-- 单元 -->
-					<Unit v-else-if="curNode.orgType === 'floor'" :nodeId="curNode.id" @finish="initPage()" />
-					<!-- 住户 -->
-					<Resident v-else-if="curNode.orgType === 'unit'" :nodeId="curNode.id" @finish="initPage()" />
-				</div>
-			</div>
-		</el-card>
-	</div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent, watch } from 'vue';
-import { useStore } from '/@/store/index';
-import api from '/@/api/heatingDistrict';
-import Regional from './children/regional/index.vue'
-import Floor from './children/floor/index.vue'
-import Unit from './children/unit/index.vue'
-import Resident from './children/resident/index.vue'
-
-export default defineComponent({
-	name: '',
-	components: {
-		Regional,
-		Floor,
-		Unit,
-		Resident
-	},
-	setup() {
-		const store = useStore();
-		const treeList = ref([])
-		const state = reactive({
-			filterText: '',
-			cardCount: {
-				org: 0,
-				plot: 0,
-				resident: 0
-			},
-			curNode: {},
-			isDark: false
-		});
-		// 获取区域树
-		const getTreeData = () => {
-			api.heatingDistrict.getTree({})
-				.then((res: any) => {
-					treeList.value = res || []
-					if (!state.curNode.id) {
-						state.curNode = treeList.value[0]
-					}
-				})
-		}
-		// 获取组织数量
-		const getOrgCount = () => {
-			api.heatingDistrict.getOrganizationCount({})
-				.then((res: any) => {
-					console.log(res)
-					state.cardCount.org = res.Count
-				})
-		}
-
-		// 获取小区数量
-		const getPlotCount = () => {
-			api.heatingDistrict.getPlotCount({})
-				.then((res: any) => {
-					console.log(res)
-					state.cardCount.plot = res.Count
-				})
-		}
-
-		// 获取组织数量
-		const getResidentCount = () => {
-			api.heatingDistrict.getResidentCount({})
-				.then((res: any) => {
-					console.log(res)
-					state.cardCount.resident = res.Count
-				})
-		}
-
-		const initPage = () => {
-			getTreeData()
-			getOrgCount()
-			getPlotCount()
-			getResidentCount()
-		}
-
-		const onNodeClick = (data: any, node: any) => {
-			// console.log(data)
-			// console.log(node)
-			if (data.orgType === 'floor') {
-				data.plotId = node.parent.data.id
-			} else if (data.orgType === 'unit') {
-				data.floorId = node.parent.data.id
-				data.plotId = node.parent.parent.data.id
-			}
-			state.curNode = data
-		}
-
-		// 监听 vuex 中是否开启深色主题
-		watch(
-			() => store.state.themeConfig.themeConfig.isIsDark,
-			(isIsDark) => {
-				state.isDark = !!isIsDark;
-			},
-			{
-				deep: true,
-				immediate: true,
-			}
-		);
-
-		// 页面加载时
-		onMounted(() => {
-			initPage()
-		});
-
-
-		return {
-			treeList,
-			onNodeClick,
-			getTreeData,
-			initPage,
-			...toRefs(state),
-		};
-	},
-});
-</script>
-
-<style lang="scss" scoped>
-.page-container {
-	.panel {
-		display: grid;
-		grid-template-columns: 250px 1fr;
-		border: 1px solid #ddd;
-		&.dark {
-			border: 1px solid rgb(51, 51, 51);
-		}
-	}
-
-	.left-panel {
-		padding: 20px;
-	}
-
-	.right-panel {
-		display: flex;
-		flex-direction: column;
-		padding: 20px;
-		border-left: 1px solid #ddd;
-		position: relative;
-		&.dark {
-			border-left: 1px solid rgb(51, 51, 51);
-		}
-	}
-}
-
-
-.custom-tree-node {
-	display: grid;
-	grid-template-columns: 20px 1fr;
-	align-items: center;
-
-	img {
-		width: 16px;
-		height: 16px;
-	}
-
-	.name {
-		overflow: hidden;
-		text-overflow: ellipsis;
-	}
-
-	&.active {
-		color: var(--el-color-primary);
-		// background: var(--el-color-primary-light-9);
-	}
-}
-
-.head-card {
-	display: grid;
-	grid-template-columns: 1fr 1fr 1fr;
-	padding: 20px;
-
-	&-item {
-		display: flex;
-		justify-content: center;
-		align-items: center;
-
-		.item {
-			text-align: center;
-
-			.count {
-				font-size: 32px;
-				font-weight: 700;
-				color: #101010;
-				margin-bottom: 5px;
-				&.dark {
-					color: #dadada;
-				}
-			}
-		}
-
-		.logo {
-			width: 72px;
-			height: 72px;
-			border-radius: 50%;
-			// border: 1px solid #ddd;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-
-			.img {
-				width: 32px;
-				height: 32px;
-			}
-		}
-	}
-}
-
-:deep(.system-dic-container) {
-	position: absolute;
-	width: calc(100% - 40px);
-}
-</style>

+ 0 - 199
src/views/heating/heatStation/loop/component/detail.vue

@@ -1,199 +0,0 @@
-<template>
-  <div class="system-edit-dic-container">
-    <el-dialog :title="'环路详情'" v-model="dialogVisible" width="950px">
-      <el-form :model="ruleForm" ref="formRef" size="default" label-width="110px">
-        <el-form-item label="环路名称" prop="name">
-          {{ ruleForm.name }}
-        </el-form-item>
-        <el-form-item label="环路编号" prop="code">
-          {{ ruleForm.code }}
-        </el-form-item>
-        <el-form-item label="所属换热站" prop="stationId">
-          {{ ruleForm.stationInfo?.name }}
-          <!-- <el-tree-select
-						v-model="ruleForm.stationId"
-						:data="treeData"
-						:props="{
-							label: 'name',
-							children: 'children'
-						}"
-						node-key="id"
-						:clearable="true"
-						check-strictly
-						style="width: 100%;"
-						:render-after-expand="true"
-					/> -->
-        </el-form-item>
-        <el-form-item label="环路类型" prop="loopTypes">
-          {{ ruleForm.loopTypes === 1 ? '一网' : '二网' }}
-        </el-form-item>
-        <el-form-item label="节能类型" prop="energyTypes">
-          {{ ruleForm.energyTypes === 1 ? '节能' : '非节能' }}
-        </el-form-item>
-        <el-row :gutter="10">
-          <el-col :span="12">
-            <el-form-item label="供暖对象" prop="heatingObject">
-              {{ ruleForm.heatingObject === 1 ? '公建' : '居民' }}
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="供暖类型" prop="heatingTypes">
-              {{ ruleForm.heatingTypes === 1 ? '地暖' : '暖气片' }}
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="10">
-          <el-col :span="12">
-            <el-form-item label="实供面积" prop="heatingArea">
-              {{ ruleForm.heatingArea }}
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="联网面积" prop="forRealArea">
-              {{ ruleForm.forRealArea }}
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item label="环路年代" prop="decade">
-          {{ ruleForm.decade }}
-        </el-form-item>
-        <el-form-item label="状态" prop="status">
-          {{ ruleForm.status === 1 ? '启用' : '禁用' }}
-        </el-form-item>
-        <el-form-item label="路线信息" prop="">
-          <div class="mb10" style="width: 100%">
-            <div style="display: flex;" class="mb10" v-for="(item, index) in pointList" :key="index">
-              <el-input v-model="item.position" :disabled="!item.editFalg" @keydown="onLocalChange(item, index)" @change="onLocalChange(item, index)" placeholder="请输入关键字进行搜索" clearable style="flex: 1; margin-right: 10px"></el-input>
-              <span>排序:</span>
-              <el-input-number v-model="item.sort" :controls="false" :disabled="!item.editFalg" placeholder="排序" clearable style="width: 100px; margin-right: 10px"></el-input-number>
-            </div>
-          </div>
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <span class="dialog-footer">
-          <el-button @click="onCancel" size="default">取 消</el-button>
-        </span>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent, ref } from 'vue';
-import api from '/@/api/heatStation';
-import { ElMessage } from 'element-plus';
-interface Point {
-  sort?: number;
-  lnt: number;
-  lat: number
-}
-interface RuleFormState {
-  id?: number;
-  name: string;
-  code: string;
-  stationId: string;
-  loopTypes: string;
-  energyTypes: string;
-  heatingObject: string;
-  heatingTypes: string;
-  heatingArea: string;
-  forRealArea: string;
-  viaPoint: Array<Point>;
-  decade: string;
-  status: number;
-}
-
-export default defineComponent({
-  name: 'headStationLoop',
-  setup(prop, { emit }) {
-    const formRef = ref<HTMLElement | null>(null);
-    const state = reactive({
-      dialogVisible: false,
-      ruleForm: {
-        id: 0,
-        name: '',
-        code: '',
-        stationId: '',
-        loopTypes: '',
-        energyTypes: '',
-        heatingObject: '',
-        heatingTypes: '',
-        heatingArea: '',
-        forRealArea: '',
-        decade: '',
-        viaPoint: [],
-        status: 1
-      },
-      treeData: [],
-      pointList: [] as any
-    })
-    // 打开弹窗
-    const openDialog = (row: RuleFormState | null) => {
-      resetForm()
-      queryTree()
-      if (row) {
-        (state.ruleForm as any).id = row.id
-        getDetail()
-      }
-      state.dialogVisible = true
-    }
-    const resetForm = () => {
-      state.ruleForm = {
-        id: 0,
-        name: '',
-        code: '',
-        stationId: '',
-        loopTypes: '',
-        energyTypes: '',
-        heatingObject: '',
-        heatingTypes: '',
-        heatingArea: '',
-        forRealArea: '',
-        viaPoint: [],
-        decade: '',
-        status: 1
-      }
-    }
-    // 关闭弹窗
-    const closeDialog = () => {
-      state.dialogVisible = false
-    }
-    // 取消
-    const onCancel = () => {
-      closeDialog()
-      state.pointList = []
-    }
-    const queryTree = () => {
-      api.heatStation.getList({
-        name: '',
-        code: '',
-        status: -1
-      })
-        .then((res: any) => {
-          state.treeData = res || [];
-        });
-    };
-    const getDetail = () => {
-      api.loop.detail(state.ruleForm.id)
-        .then((res: any) => {
-          state.ruleForm = {
-            ...res
-          }
-          state.pointList = state.ruleForm.viaPoint.map((item: any) => ({
-            ...item,
-            editFlag: false
-          }))
-        })
-    }
-
-    return {
-      openDialog,
-      closeDialog,
-      onCancel,
-      formRef,
-      ...toRefs(state)
-    }
-  }
-})
-</script>

+ 0 - 411
src/views/heating/heatStation/loop/component/edit.vue

@@ -1,411 +0,0 @@
-<template>
-  <div class="system-edit-dic-container">
-    <el-dialog :title="(ruleForm.id !== 0 ? '修改' : '添加') + '环路'" v-model="dialogVisible" width="950px">
-      <el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
-        <el-form-item label="环路名称" prop="name">
-          <el-input v-model="ruleForm.name" placeholder="请输入环路名称" />
-        </el-form-item>
-        <!-- <el-form-item label="环路编号" prop="code">
-					<el-input v-model="ruleForm.code" placeholder="请输入环路编号" />
-				</el-form-item> -->
-        <el-form-item label="所属换热站" prop="stationId">
-          <el-tree-select v-model="ruleForm.stationId" :data="treeData" @change="stationChange" :props="{
-            label: 'name',
-            children: 'children'
-          }" node-key="id" :clearable="true" filterable check-strictly style="width: 100%;" :render-after-expand="true" />
-        </el-form-item>
-        <el-form-item label="环路类型" prop="loopTypes">
-          <el-select v-model="ruleForm.loopTypes" placeholder="请选择环路类型" clearable size="default" style="width: 100%">
-            <el-option label="一网" :value="1" />
-            <el-option label="二网" :value="2" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="节能类型" prop="energyTypes">
-          <el-select v-model="ruleForm.energyTypes" placeholder="请选择节能类型" clearable size="default" style="width: 100%">
-            <el-option label="节能" :value="1" />
-            <el-option label="非节能" :value="2" />
-          </el-select>
-        </el-form-item>
-        <el-row :gutter="10">
-          <el-col :span="12">
-            <el-form-item label="供暖对象" prop="heatingObject">
-              <el-select v-model="ruleForm.heatingObject" placeholder="请选择供暖对象" clearable size="default" style="width: 100%">
-                <el-option label="公建" :value="1" />
-                <el-option label="居民" :value="2" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="供暖类型" prop="heatingTypes">
-              <el-select v-model="ruleForm.heatingTypes" placeholder="请选择供暖类型" clearable size="default" style="width: 100%">
-                <el-option label="地暖" :value="1" />
-                <el-option label="暖气片" :value="2" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="10">
-          <el-col :span="12">
-            <el-form-item label="实供面积" prop="heatingArea">
-              <el-input v-model="ruleForm.heatingArea" placeholder="请输入联网面积" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="联网面积" prop="forRealArea">
-              <el-input v-model="ruleForm.forRealArea" placeholder="请输入实供面积" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item label="环路年代" prop="decade">
-          <el-input v-model="ruleForm.decade" placeholder="请输入环路年代" />
-        </el-form-item>
-        <el-form-item label="状态" prop="status">
-          <el-radio v-model="ruleForm.status" :label="1">启用</el-radio>
-          <el-radio v-model="ruleForm.status" :label="0">禁用</el-radio>
-        </el-form-item>
-        <!-- <el-form-item label="数据模型" prop="dataTemplateIds">
-					<el-select v-model="ruleForm.dataTemplateIds" multiple clearable style="width: 100%;" placeholder="请选择">
-						<el-option
-							v-for="item in dataHubList"
-							:key="item.id"
-							:label="item.name"
-							:value="item.id">
-						</el-option>
-					</el-select>
-				</el-form-item> -->
-        <el-form-item label="编辑路线信息" prop="">
-          <div class="mb10">
-            <el-button type="primary" @click="onAddPoint">添加途经点</el-button>
-          </div>
-          <!-- <div class="mb10" style="width: 100%">
-            <div style="display: flex;" class="mb10" v-for="(item, index) in pointList" :key="index">
-              <el-input v-model="item.position" :disabled="!item.editFalg" @change="onLocalChange(item, index)" placeholder="请输入关键字进行搜索" clearable style="flex: 1; margin-right: 10px"></el-input>
-              <span>排序:</span>
-              <el-input-number v-model="item.sort" :controls="false" :disabled="!item.editFalg" placeholder="排序" clearable style="width: 100px; margin-right: 10px"></el-input-number>
-
-              <el-button type="primary" v-if="item.editFalg" @click="onSavePoint(item, index)">保存</el-button>
-              <el-button type="primary" v-else @click="onEditChange(item, index)">修改</el-button>
-              <el-button type="danger" @click="onRemovePoint(index)">删除</el-button>
-            </div>
-          </div> -->
-          <div style="width: 100%; height: 300px" id="loop-map-container"></div>
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <span class="dialog-footer">
-          <el-button @click="onCancel" size="default">取 消</el-button>
-          <el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
-        </span>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
-<script lang="ts">
-import { reactive, toRefs, defineComponent, ref, unref, nextTick } from 'vue';
-import api from '/@/api/heatStation';
-import datahubApi from '/@/api/datahub';
-import { ElMessage } from 'element-plus';
-import { number } from 'echarts';
-interface Point {
-  sort?: number;
-  lnt: number;
-  lat: number
-}
-interface RuleFormState {
-  id?: number;
-  name: string;
-  code: string;
-  stationId: string;
-  loopTypes: string;
-  energyTypes: string;
-  heatingObject: string;
-  heatingTypes: string;
-  heatingArea: string;
-  forRealArea: string;
-  viaPoint: Array<Point>;
-  decade: string;
-  status: number;
-}
-
-export default defineComponent({
-  name: 'headStationLoop',
-  setup(prop, { emit }) {
-    let map: any = null
-    let BMapGL: any = null
-    let myGeo: any = null
-    let polyline: any = null
-    let startDraw = false
-    let stationInfo: any = null
-
-    const formRef = ref<HTMLElement | null>(null);
-    const state = reactive({
-      dialogVisible: false,
-      ruleForm: {
-        id: 0,
-        name: '',
-        code: '',
-        stationId: '',
-        loopTypes: '',
-        energyTypes: '',
-        heatingObject: '',
-        heatingTypes: '',
-        heatingArea: '',
-        forRealArea: '',
-        decade: '',
-        viaPoint: [],
-        status: 1
-      },
-      rules: {
-        name: [{ required: true, message: '环路名称不能为空', trigger: ['blur', 'change'] }],
-        code: [{ required: true, message: '环路编号不能为空', trigger: ['blur', 'change'] }],
-        stationId: [{ required: true, message: '所属换热站不能为空', trigger: ['blur', 'change'] }],
-        loopTypes: [{ required: true, message: '环路类型不能为空', trigger: ['blur', 'change'] }],
-        energyTypes: [{ required: true, message: '节能类型不能为空', trigger: ['blur', 'change'] }],
-        heatingObject: [{ required: true, message: '供暖对象不能为空', trigger: ['blur', 'change'] }],
-        heatingTypes: [{ required: true, message: '供暖类型不能为空', trigger: ['blur', 'change'] }],
-        heatingArea: [{ required: true, message: '联网面积不能为空', trigger: ['blur', 'change'] }],
-        forRealArea: [{ required: true, message: '实供面积不能为空', trigger: ['blur', 'change'] }],
-        decade: [{ required: true, message: '年代不能为空', trigger: ['blur', 'change'] }],
-        status: [{ required: true, message: '状态不能为空', trigger: ['blur', 'change'] }]
-      },
-      treeData: [],
-      mapLocal: null as any, // 地图搜索
-      pointList: [] as any,
-      pointIndex: -1,
-      dataHubList: []
-    })
-    // 打开弹窗
-    const openDialog = (row: RuleFormState | null) => {
-      resetForm()
-      queryTree()
-      // queryDataHubList()
-      nextTick(() => {
-        initMap()
-      })
-      if (row) {
-        (state.ruleForm as any).id = row.id
-        getDetail()
-      }
-      state.dialogVisible = true
-    }
-    const resetForm = () => {
-      state.ruleForm = {
-        id: 0,
-        name: '',
-        code: '',
-        stationId: '',
-        loopTypes: '',
-        energyTypes: '',
-        heatingObject: '',
-        heatingTypes: '',
-        heatingArea: '',
-        forRealArea: '',
-        viaPoint: [],
-        decade: '',
-        status: 1
-      }
-    }
-    // 关闭弹窗
-    const closeDialog = () => {
-      state.dialogVisible = false
-      state.pointList = [];
-      (formRef.value as any).clearValidate()
-    }
-    // 取消
-    const onCancel = () => {
-      closeDialog()
-    }
-    const queryTree = () => {
-      api.heatStation.getList({
-        name: '',
-        code: '',
-        status: -1
-      })
-        .then((res: any) => {
-          state.treeData = res || [];
-        });
-    };
-    // const queryDataHubList = () => {
-    // 	datahubApi.template.allList({})
-    // 		.then((res: any) => {
-    // 			state.dataHubList = res.list || [];
-    // 		});
-    // };
-    const getDetail = () => {
-      api.loop.detail(state.ruleForm.id)
-        .then((res: any) => {
-          state.ruleForm = {
-            ...res
-          }
-          state.pointList = (state.ruleForm.viaPoint || []).map((item: any) => ({
-            lat: item.lat,
-            lng: item.lnt,
-          }))
-
-          // 绘制换热站
-          stationInfo = res.stationInfo
-          setStationMarker()
-
-          // 绘制点线
-          state.pointList.forEach((point: any) => map.addOverlay(new BMapGL.Marker(point)))
-          setLine(state.pointList)
-
-        })
-    }
-
-    function setStationMarker() {
-      map.clearOverlays()
-      const { lnt: lng, lat } = stationInfo
-      map.centerAndZoom({ lng, lat }, 18);
-      map.addOverlay(new BMapGL.Marker({ lng, lat }, {
-        icon: new BMapGL.Icon("/imgs/flag.svg", new BMapGL.Size(40, 40), {
-          anchor: new BMapGL.Size(10, 40)   // 设置图片偏移  
-        }),
-      }));
-    }
-    // 新增
-    const onSubmit = () => {
-      const formWrap = unref(formRef) as any
-      if (!formWrap) return;
-      formWrap.validate((valid: boolean) => {
-        if (valid) {
-          if (!state.pointList.length) {
-            ElMessage.warning('请选择途经点')
-            return
-          }
-          for (let i = 0; i < state.pointList.length; i++) {
-            let item = state.pointList[i]
-            if (!item.lnt && !item.lat) {
-              ElMessage.warning('途经点填错错误')
-              return
-            }
-          }
-          let params = { ...state.ruleForm }
-          params.viaPoint = state.pointList.map((item: any, index: number) => ({
-            sort: index + 1,
-            lnt: item.lng,
-            lat: item.lat,
-            position: item.position
-          }))
-          if (params.id) {
-            //修改
-            api.loop.edit(params).then(() => {
-              ElMessage.success('环路修改成功')
-              closeDialog() // 关闭弹窗
-              emit('queryList')
-            })
-          } else {
-            //添加
-            api.loop.add(params).then(() => {
-              ElMessage.success('环路添加成功')
-              closeDialog() // 关闭弹窗
-              emit('queryList')
-            })
-          }
-        }
-      })
-    }
-    // 新增途经点
-    const onAddPoint = () => {
-      startDraw = true
-      state.pointList = []
-      map.clearOverlays();
-      setStationMarker()
-
-      // if (state.pointList.find((item: any) => item.editFalg)) {
-      //   ElMessage.warning('请先保存途经点')
-      //   return
-      // }
-      // state.pointList.push({
-      //   sort: undefined,
-      //   position: '',
-      //   lnt: '',
-      //   lat: '',
-      //   editFalg: true
-      // })
-      // state.pointIndex = state.pointList.length - 1
-    }
-    // 修改途经点
-    const onEditChange = (item: any, index: number) => {
-      if (state.pointList.find((point: any) => point.editFalg && point !== item)) {
-        ElMessage.warning('请先保存途经点')
-        return
-      }
-      state.pointIndex = index
-      item.editFalg = true
-    }
-    // 保存途经点
-    const onSavePoint = (item: any, index: number) => {
-      item.editFalg = false
-    }
-    // 移除途经点
-    const onRemovePoint = (index: number) => {
-      state.pointList.splice(index, 1)
-    }
-
-    const initMap = () => {
-      BMapGL = (window as any).BMapGL
-      myGeo = new BMapGL.Geocoder()
-      map = new BMapGL.Map("loop-map-container");
-      // 116.404, 39.915
-      const point = new BMapGL.Point(124.383044, 40.124296);
-      const zoomCtrl = new BMapGL.ZoomControl();  // 添加缩放控件
-      const cityCtrl = new BMapGL.CityListControl()
-      map.centerAndZoom(point, 15);
-      map.enableScrollWheelZoom(true); // 开启滚轮缩放
-      map.addControl(zoomCtrl);
-      map.addControl(cityCtrl);
-
-      map.addEventListener('click', ({ latlng }: any) => {
-        if (!startDraw) return
-        // 获取地址名称
-        myGeo.getLocation(latlng, (result: any) => {
-          if (result) {
-            // console.log(result.address)
-            state.pointList.push({ ...latlng, position: result.address })
-            let marker = new BMapGL.Marker(latlng);
-            // 在地图上添加点标记
-            map.addOverlay(marker);
-            setLine(state.pointList)
-          }
-        })
-      })
-    }
-    function setLine(pointList: any[]) {
-      polyline && map.removeOverlay(polyline);
-      if (!pointList || !pointList.length) return
-      polyline = new BMapGL.Polyline(pointList, { strokeColor: "blue", strokeWeight: 10, strokeOpacity: 0.5 });   //创建折线
-      map.addOverlay(polyline);
-    }
-
-    // const onLocalChange = (item: any, index: number) => {
-    //   state.mapLocal.search(item.position)
-    //   state.pointIndex = index
-    // }
-
-    function stationChange(id: number) {
-
-      api.heatStation.detail(id).then((res: any) => {
-        stationInfo = res
-        setStationMarker()
-      })
-    }
-
-    return {
-      stationChange,
-      openDialog,
-      closeDialog,
-      onCancel,
-      onSubmit,
-      formRef,
-      // onLocalChange,
-      onAddPoint,
-      onRemovePoint,
-      onSavePoint,
-      onEditChange,
-      ...toRefs(state)
-    }
-  }
-})
-</script>

+ 0 - 297
src/views/heating/heatStation/loop/index.vue

@@ -1,297 +0,0 @@
-<template>
-	<div class="system-dic-container">
-		<el-card shadow="hover">
-			<div class="system-user-search mb15">
-				<el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="68px">
-					<el-form-item label="环路名称" prop="name">
-						<el-input
-							v-model="tableData.param.name"
-							placeholder="请输入环路名称"
-							clearable
-							size="default"
-							style="width: 240px"
-							@keyup.enter="queryList"
-						/>
-					</el-form-item>
-					<el-form-item label="环路编号" prop="code">
-						<el-input
-							v-model="tableData.param.code"
-							placeholder="请输入环路编号"
-							clearable
-							size="default"
-							style="width: 240px"
-							@keyup.enter="queryList"
-						/>
-					</el-form-item>
-					<el-form-item label="环路类型" prop="loopTypes" style="width: 200px">
-						<el-select v-model="tableData.param.loopTypes" placeholder="全部" clearable size="default" style="width: 240px">
-							<el-option label="一网" :value="1" />
-							<el-option label="二网" :value="2" />
-						</el-select>
-					</el-form-item>
-					<el-form-item label="供暖对象" prop="heatingObject" style="width: 200px">
-						<el-select v-model="tableData.param.heatingObject" placeholder="全部" clearable size="default" style="width: 240px">
-							<el-option label="公建" :value="1" />
-							<el-option label="居民" :value="2" />
-						</el-select>
-					</el-form-item>
-					<el-form-item>
-						<el-button size="default" type="primary" v-auth="'query'" class="ml10" @click="queryList">
-							<el-icon>
-								<ele-Search />
-							</el-icon>
-							查询
-						</el-button>
-						<el-button size="default" v-auth="'reset'" @click="resetQuery(queryRef)">
-							<el-icon>
-								<ele-Refresh />
-							</el-icon>
-							重置
-						</el-button>
-						<el-button size="default" type="success" v-auth="'add'" class="ml10" @click="onOpenAddDic">
-							<el-icon>
-								<ele-FolderAdd />
-							</el-icon>
-							新增
-						</el-button>
-						<el-button @click="exportExcel" v-auth="'download'">
-							<el-icon> <ele-Download /> </el-icon>
-							数据导出
-						</el-button>
-						<uploadBtn @update="queryList" url="/region/loop/import" v-auth="'upload'"></uploadBtn>
-						<!-- <el-button size="default" type="danger" class="ml10" @click="onRowDel(null)">
-              <el-icon>
-                <ele-Delete />
-              </el-icon>
-              删除
-            </el-button> -->
-					</el-form-item>
-				</el-form>
-			</div>
-			<el-table :data="tableData.data" v-loading="tableData.loading" style="width: 100%" @selection-change="handleSelectionChange">
-				<el-table-column label="ID" align="center" prop="id" width="60" />
-				<el-table-column label="编号" prop="code" v-col="'code'" :show-overflow-tooltip="true" />
-				<el-table-column label="名称" prop="name" v-col="'name'" :show-overflow-tooltip="true">
-					<template #default="{ row }">
-					{{ row.stationInfo.name }}-{{ row.name }}
-					</template>
-				</el-table-column>
-				<!-- stationInfo -->
-				<el-table-column label="类型" prop="loopTypes" v-col="'loopTypes'">
-					<template #default="scope">
-						<el-tag type="success" size="small" v-if="scope.row.loopTypes === 1">一网</el-tag>
-						<el-tag type="info" size="small" v-else-if="scope.row.loopTypes === 2">二网</el-tag>
-					</template>
-				</el-table-column>
-				<el-table-column label="节能类型" prop="energyTypes" v-col="'energyTypes'">
-					<template #default="scope">
-						<el-tag type="success" size="small" v-if="scope.row.energyTypes === 1">节能</el-tag>
-						<el-tag type="success" size="small" v-else-if="scope.row.energyTypes === 2">非节能</el-tag>
-					</template>
-				</el-table-column>
-				<el-table-column label="供暖对象" prop="heatingObject" v-col="'heatingObject'" :show-overflow-tooltip="true">
-					<template #default="scope">
-						<el-tag type="success" size="small" v-if="scope.row.heatingObject === 1">公建</el-tag>
-						<el-tag type="info" size="small" v-else-if="scope.row.heatingObject === 2">居民</el-tag>
-					</template>
-				</el-table-column>
-				<el-table-column label="供暖类型" prop="heatingTypes" v-col="'heatingTypes'">
-					<template #default="scope">
-						<el-tag type="success" size="small" v-if="scope.row.heatingTypes === 1">地暖</el-tag>
-						<el-tag type="info" size="small" v-else-if="scope.row.heatingTypes === 2">暖气片</el-tag>
-					</template>
-				</el-table-column>
-				<el-table-column label="联网面积" prop="heatingArea" v-col="'heatingArea'" :show-overflow-tooltip="true" />
-				<el-table-column label="实供面积" prop="forRealArea" v-col="'forRealArea'" :show-overflow-tooltip="true" />
-				<!--	    	<el-table-column label="环路年代" prop="decade" :show-overflow-tooltip="true" />-->
-				<el-table-column prop="status" label="状态" v-col="'status'" align="center">
-					<template #default="scope">
-						<el-tag type="info" size="small" v-if="scope.row.status === 0">禁用</el-tag>
-						<el-tag type="success" size="small" v-else-if="scope.row.status === 1">启用</el-tag>
-					</template>
-				</el-table-column>
-				<el-table-column label="操作" width="150" v-col="'handle'" align="center">
-					<template #default="scope">
-						<el-button size="small" text type="primary" @click="onOpenDetail(scope.row)">详情</el-button>
-						<el-button size="small" text type="warning" @click="onOpenEditDic(scope.row)">修改</el-button>
-						<el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
-					</template>
-				</el-table-column>
-			</el-table>
-			<pagination
-				v-show="tableData.total > 0"
-				:total="tableData.total"
-				v-model:page="tableData.param.pageNum"
-				v-model:limit="tableData.param.pageSize"
-				@pagination="queryList"
-			/>
-		</el-card>
-		<EditDic ref="editDicRef" @queryList="queryList" />
-		<Detail ref="detailRef" />
-	</div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import EditDic from './component/edit.vue';
-import Detail from './component/detail.vue';
-import api from '/@/api/heatStation';
-import downloadFile from '/@/utils/download';
-import uploadBtn from '/@/components/upload/button.vue';
-
-// 定义接口来定义对象的类型
-interface Point {
-	sort?: number;
-	lnt: number;
-	lat: number;
-}
-interface TableDataRow {
-	id: number;
-	name: string;
-	code: string;
-	stationId: string;
-	loopTypes: number;
-	energyTypes: number;
-	heatingObject: number;
-	heatingTypes: number;
-	heatingArea: string;
-	forRealArea: string;
-	viaPoint: Array<Point>;
-	decade: string;
-	status: number;
-}
-interface TableDataState {
-	ids: number[];
-	tableData: {
-		data: Array<TableDataRow>;
-		total: number;
-		loading: boolean;
-		param: {
-			pageNum: number;
-			pageSize: number;
-			name: string;
-			code: string;
-			loopTypes: string;
-			heatingObject: string;
-			status: number;
-		};
-	};
-}
-
-export default defineComponent({
-	name: 'loop',
-	components: { EditDic, Detail, uploadBtn },
-	setup() {
-		const addDicRef = ref();
-		const editDicRef = ref();
-		const detailRef = ref();
-		const queryRef = ref();
-		const state = reactive<TableDataState>({
-			ids: [],
-			tableData: {
-				data: [],
-				total: 0,
-				loading: false,
-				param: {
-					pageNum: 1,
-					pageSize: 10,
-					name: '',
-					code: '',
-					loopTypes: '',
-					heatingObject: '',
-					status: -1,
-				},
-			},
-		});
-		// 初始化表格数据
-		const initTableData = () => {
-			queryList();
-		};
-		const queryList = () => {
-			state.tableData.loading = true;
-			api.loop.getList(state.tableData.param).then((res: any) => {
-				console.log(res);
-				state.tableData.data = res.Data || [];
-				state.tableData.total = res.Total;
-				state.tableData.loading = false;
-			});
-		};
-
-		//查看详情
-		const onOpenDetail = (row: TableDataRow) => {
-			detailRef.value.openDialog(row);
-		};
-		// 打开新增产品弹窗
-		const onOpenAddDic = () => {
-			editDicRef.value.openDialog();
-		};
-		// 打开修改产品弹窗
-		const onOpenEditDic = (row: TableDataRow) => {
-			editDicRef.value.openDialog(row);
-		};
-		// 删除产品
-		const onRowDel = (row: TableDataRow) => {
-			// let msg = '你确定要删除所选数据?';
-			// let ids: number[] = [];
-			// if (row) {
-			let msg = `此操作将永久删除环路:“${row.name}”,是否继续?`;
-			// 	ids = [row.id];
-			// } else {
-			// 	ids = state.ids;
-			// }
-			// if (ids.length === 0) {
-			// 	ElMessage.error('请选择要删除的数据。');
-			// 	return;
-			// }
-			ElMessageBox.confirm(msg, '提示', {
-				confirmButtonText: '确认',
-				cancelButtonText: '取消',
-				type: 'warning',
-			})
-				.then(() => {
-					api.loop.del(row.id).then(() => {
-						ElMessage.success('删除成功');
-						queryList();
-					});
-				})
-				.catch(() => {});
-		};
-		// 页面加载时
-		onMounted(() => {
-			initTableData();
-		});
-		/** 重置按钮操作 */
-		const resetQuery = (formEl: FormInstance | undefined) => {
-			if (!formEl) return;
-			formEl.resetFields();
-			queryList();
-		};
-		// 多选框选中数据
-		const handleSelectionChange = (selection: TableDataRow[]) => {
-			state.ids = selection.map((item) => item.id);
-		};
-		// 后端导出
-		const exportExcel = () => {
-			api.loop.export(state.tableData.param).then((res: any) => {
-				downloadFile(res, '环路列表数据导出.xlsx');
-			});
-		};
-		return {
-			addDicRef,
-			editDicRef,
-			detailRef,
-			queryRef,
-			onOpenDetail,
-			onOpenAddDic,
-			onOpenEditDic,
-			onRowDel,
-			queryList,
-			resetQuery,
-			handleSelectionChange,
-			exportExcel,
-			...toRefs(state),
-		};
-	},
-});
-</script>

+ 0 - 635
src/views/heating/home/index.vue

@@ -1,635 +0,0 @@
-<template>
-	<div class="data-overview">
-		<el-row :gutter="15" class="home-card-one mb15">
-			<el-col
-				:xs="24"
-				:sm="12"
-				:md="12"
-				:lg="6"
-				:xl="6"
-				v-for="(v, k) in dataOne"
-				:key="k"
-				:class="{ 'home-media home-media-lg': k > 1, 'home-media-sm': k === 1 }"
-			>
-				<div class="home-card-item">
-					<div class="item-header">
-						<img :src="isIsDark ? v.iconDark : v.icon" alt="" />
-						<span>{{ v.title }}</span>
-					</div>
-					<div class="item-content w100" :class="` home-one-animation${k}`">
-						<p>
-							<span class="text-no-wrap">{{ v.contentTitle1 }}</span>
-							<span>{{ v.val1 }} {{ unitMap[v.contentTitle1] }}</span>
-						</p>
-						<p>
-							<span class="text-no-wrap">{{ v.contentTitle2 }}</span>
-							<span
-								>{{ v.val2 }}
-								{{ unitMap[v.title + ':' + v.contentTitle2] ? unitMap[v.title + ':' + v.contentTitle2] : unitMap[v.contentTitle2] }}</span
-							>
-						</p>
-						<p style="height: 30px">
-							<template v-if="v.contentTitle3">
-								<span class="text-no-wrap">{{ v.contentTitle3 || ' ' }}</span>
-								<span
-									>{{ v.val3 || ' ' }}
-									{{ unitMap[v.title + ':' + v.contentTitle3] ? unitMap[v.title + ':' + v.contentTitle3] : unitMap[v.contentTitle3] }}</span
-								>
-							</template>
-						</p>
-					</div>
-				</div>
-			</el-col>
-		</el-row>
-		<el-row :gutter="15" class="home-card-two mb15">
-			<div class="home-card-item" style="height: auto">
-				<div class="home-card-item-title">总耗热</div>
-				<div style="height: 200px" ref="homeLineRef1"></div>
-			</div>
-		</el-row>
-		<el-row :gutter="15" class="home-card-two mb15">
-			<div class="home-card-item" style="height: auto">
-				<div class="home-card-item-title">总失水量</div>
-				<div style="height: 200px" ref="homeLineRef3"></div>
-			</div>
-		</el-row>
-		<el-row :gutter="15" class="home-card-two mb15">
-			<div class="home-card-item" style="height: auto">
-				<div class="home-card-item-title">平均供热负荷</div>
-				<div style="height: 200px" ref="homeLineRef4"></div>
-			</div>
-		</el-row>
-	</div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, defineComponent, onMounted, ref, watch, nextTick, onActivated } from 'vue';
-import * as echarts from 'echarts';
-import { useStore } from '/@/store/index';
-import apiDatahub from '/@/api/datahub';
-
-import ele from '/@/assets/img/ele.svg';
-import ele1 from '/@/assets/img/ele1.svg';
-
-import fire from '/@/assets/img/fire.svg';
-import fire1 from '/@/assets/img/fire1.svg';
-
-import map from '/@/assets/img/map.svg';
-import map1 from '/@/assets/img/map1.svg';
-
-import water from '/@/assets/img/water.svg';
-import water1 from '/@/assets/img/water1.svg';
-
-import api from '/@/api/datahub';
-
-let global: any = {
-	homeChartOne: null,
-	homeChartTwo: null,
-	homeCharThree: null,
-	homeCharFour: null,
-	dispose: [null, '', undefined],
-};
-
-export default defineComponent({
-	name: 'heating-home',
-	setup() {
-		const tabName = ref('homeLineRef1');
-		const homeLineRef1 = ref();
-		const homeLineRef3 = ref();
-		const homeLineRef4 = ref();
-		const homePieRef = ref();
-		const homeBarRef = ref();
-		const homeFourBarRef = ref();
-		const unitMap = ref<any>({});
-		const store = useStore();
-
-		// 统计信息的单位的字典
-		apiDatahub.template.getDictData({ DictType: 'overview_unit' }).then((res: any) => {
-			res.values.forEach((v: any) => {
-				unitMap.value[v.value] = v.key;
-			});
-		});
-
-		const state = reactive({
-			checkList: ['一网供水温度'],
-			rangeValue: 10,
-			isIsDark: false,
-			dataOne: [
-				{
-					icon: map,
-					iconDark: map1,
-					title: '供热面积',
-					contentTitle1: '联网面积',
-					val1: '',
-					contentTitle2: '实供面积',
-					val2: '',
-					contentTitle3: '供热率',
-					val3: '',
-				},
-				{
-					icon: fire,
-					iconDark: fire1,
-					title: '热量',
-					contentTitle1: '总耗热',
-					val1: '',
-					contentTitle2: '总单耗',
-					val2: '',
-				},
-				{
-					icon: ele,
-					iconDark: ele1,
-					title: '负荷',
-					contentTitle1: '供热负荷',
-					val1: '0',
-					contentTitle2: '平均供热负荷',
-					val2: '0',
-				},
-				{
-					icon: water,
-					iconDark: water1,
-					title: '水量',
-					contentTitle1: '总耗水',
-					val1: '',
-					contentTitle2: '小时补水量',
-					val2: '',
-				},
-			],
-			myCharts: [],
-			charts: {
-				theme: '',
-				bgColor: '',
-				color: '#303133',
-			},
-			statisticsChartXAxisData: [],
-			inTemperature: [],
-			outTemperature: [],
-			diffTemperature: [],
-			chartXAxisData: [],
-			flowLossData: [],
-			elctricConsumptionData: [],
-			unitConsumptionData: [],
-			heatDemandData: [],
-			pieData: [],
-			pieType: '1',
-			pressureXAxisData: [],
-			inPressureData: [],
-			outPressureData: [],
-			diffPressureData: [],
-		});
-
-		// 获取顶部总数据
-		const getStatisticsTotalData = () => {
-			api.statistics.getStatisticsOverview({ queryType: 'num' }).then((res: any) => {
-				const { flowLoss, flowLossTotal, forRealArea, heatingArea, unitConsumption, unitConsumptionTotal, heatRate, heatDemandAvg, heatDemand } =
-					res.data;
-				state.dataOne[0].val1 = heatingArea;
-				state.dataOne[0].val2 = forRealArea;
-				state.dataOne[0].val3 = heatRate;
-
-				state.dataOne[1].val1 = unitConsumptionTotal;
-				state.dataOne[1].val2 = unitConsumption;
-
-				state.dataOne[2].val1 = heatDemand;
-				state.dataOne[2].val2 = heatDemandAvg;
-
-				state.dataOne[3].val1 = flowLossTotal;
-				state.dataOne[3].val2 = flowLoss;
-			});
-		};
-
-		// 获取热网总能耗数据
-		const getStatisticsLineChartData = () => {
-			if (!state.rangeValue) return;
-			api.statistics.getStatisticsOverview({ queryType: 'energy' }).then((res: any) => {
-				const { flowLoss, elctricConsumption, unitConsumption, heatDemand } = res.data;
-				// calorie:总热耗  electric:总电耗  water:总失水量 heatDemand: 供热负荷
-				state.chartXAxisData = flowLoss.map((item: any) => item.date);
-				state.flowLossData = flowLoss.map((item: any) => item.total);
-				state.unitConsumptionData = unitConsumption.map((item: any) => item.total);
-				state.heatDemandData = heatDemand.map((item: any) => item.total);
-				if (state.rangeValue == 10) return;
-				nextTick(() => {
-					initLineChart('homeLineRef1');
-					initLineChart('homeLineRef3');
-					initLineChart('homeLineRef4');
-				});
-			});
-		};
-		// 折线图
-		const initLineChart = (ref: string) => {
-			if (!global.dispose.some((b: any) => b === global.homeCharThree)) global.homeCharThree.dispose();
-
-			let dom: any;
-			let data: any;
-			let unit: any;
-			// 总耗热:GJ
-			// 日失水量:T
-			// 平均供热负荷: W/m²
-			if (ref === 'homeLineRef1') {
-				dom = homeLineRef1.value;
-				data = state.unitConsumptionData;
-				unit = 'GJ';
-			} else if (ref === 'homeLineRef3') {
-				dom = homeLineRef3.value;
-				data = state.flowLossData;
-				unit = 'T';
-			} else {
-				dom = homeLineRef4.value;
-				data = state.heatDemandData;
-				unit = 'W/m²';
-			}
-
-			const chart = <any>echarts.init(dom, state.charts.theme);
-
-			const common = {
-				type: 'line',
-				smooth: true,
-				showSymbol: true,
-				symbolSize: 12,
-				yAxisIndex: 0,
-			};
-			const option = {
-				backgroundColor: state.charts.bgColor,
-				tooltip: { trigger: 'axis' },
-				grid: { top: 30, right: 40, bottom: 30, left: 25, containLabel: true },
-				xAxis: [
-					{
-						type: 'category',
-						data: state.chartXAxisData,
-						boundaryGap: true,
-						axisTick: { show: false },
-					},
-				],
-				yAxis: [
-					{
-						type: 'value',
-						name: unit,
-					},
-				],
-				dataZoom: [
-					{
-						type: 'inside',
-						start: 0,
-						end: 30,
-					},
-					{
-						start: 0,
-						end: 30,
-					},
-				],
-				series: [
-					{
-						...common,
-						data,
-					},
-				],
-			};
-			chart.setOption(option);
-		};
-		// 批量设置 echarts resize
-		const initEchartsResizeFun = () => {
-			nextTick(() => {
-				for (let i = 0; i < state.myCharts.length; i++) {
-					setTimeout(() => {
-						(<any>state.myCharts[i]).resize();
-					}, i * 1000);
-				}
-			});
-		};
-		// 批量设置 echarts resize
-		const initEchartsResize = () => {
-			window.addEventListener('resize', initEchartsResizeFun);
-		};
-		// 页面加载时
-		onMounted(() => {
-			initEchartsResize();
-			getStatisticsTotalData();
-			getStatisticsLineChartData();
-			// 获取布局配置信息
-			state.isIsDark = store.state.themeConfig.themeConfig.isIsDark;
-		});
-		// 由于页面缓存原因,keep-alive
-		onActivated(() => {
-			initEchartsResizeFun();
-		});
-		// 监听 vuex 中的 tagsview 开启全屏变化,重新 resize 图表,防止不出现/大小不变等
-		watch(
-			() => store.state.tagsViewRoutes.isTagsViewCurrenFull,
-			() => {
-				initEchartsResizeFun();
-			}
-		);
-		// 监听 vuex 中是否开启深色主题
-		watch(
-			() => store.state.themeConfig.themeConfig.isIsDark,
-			() => {
-				state.isIsDark = store.state.themeConfig.themeConfig.isIsDark;
-			},
-			{
-				deep: true,
-				immediate: true,
-			}
-		);
-		// 监听 vuex 中是否开启深色主题
-		watch(
-			() => store.state.themeConfig.themeConfig.isIsDark,
-			(isIsDark) => {
-				nextTick(() => {
-					// if(!isIsDark) return
-					state.charts.theme = isIsDark ? 'transparent' : '';
-					state.charts.bgColor = isIsDark ? 'transparent' : '';
-					state.charts.color = isIsDark ? '#dadada' : '#303133';
-					setTimeout(() => {
-						initLineChart('homeLineRef1');
-						initLineChart('homeLineRef3');
-						initLineChart('homeLineRef4');
-					}, 1000);
-				});
-			},
-			{
-				deep: true,
-				immediate: true,
-			}
-		);
-		return {
-			unitMap,
-			tabName,
-			homeLineRef1,
-			homeLineRef3,
-			homeLineRef4,
-			homePieRef,
-			homeBarRef,
-			homeFourBarRef,
-			// changePieType,
-			getStatisticsLineChartData,
-			...toRefs(state),
-		};
-	},
-});
-</script>
-
-<style scoped lang="scss">
-$homeNavLengh: 8;
-
-.home-card-item-title {
-	margin-left: 12px;
-	margin-top: 3px;
-}
-
-.data-overview {
-	overflow: hidden;
-
-	// .home-card-one,
-	.home-card-two,
-	.home-card-three,
-	.home-card-four {
-		.home-card-item,
-		.home-card-top {
-			width: 100%;
-			height: 100px;
-			border-radius: 4px;
-			transition: all ease 0.3s;
-			padding: 10px;
-			overflow: hidden;
-			background: var(--el-color-white);
-			color: var(--el-text-color-primary);
-			border: 1px solid var(--next-border-color-light);
-
-			&:hover {
-				box-shadow: 0 2px 12px var(--next-color-dark-hover);
-				transition: all ease 0.3s;
-			}
-
-			&-icon {
-				width: 70px;
-				height: 70px;
-				border-radius: 100%;
-				flex-shrink: 1;
-
-				i {
-					color: var(--el-text-color-placeholder);
-				}
-			}
-
-			&-title {
-				font-size: 15px;
-				font-weight: bold;
-				height: 30px;
-			}
-		}
-	}
-
-	.home-card-one {
-		@for $i from 0 through 3 {
-			.home-one-animation#{$i} {
-				opacity: 0;
-				animation-name: error-num;
-				animation-duration: 0.5s;
-				animation-fill-mode: forwards;
-				animation-delay: calc($i/10) + s;
-			}
-		}
-	}
-
-	.home-card-one .home-card-item {
-		width: 100%;
-		border-radius: 4px;
-		transition: all ease 0.3s;
-		overflow: hidden;
-		background: var(--el-color-white);
-		color: var(--el-text-color-primary);
-		border: 1px solid var(--next-border-color-light);
-
-		&:hover {
-			box-shadow: 0 2px 12px var(--next-color-dark-hover);
-			transition: all ease 0.3s;
-		}
-
-		.item-header {
-			display: flex;
-			justify-content: center;
-			align-content: center;
-			color: #101010;
-			padding: 10px 0;
-			border-bottom: 1px solid var(--next-border-color-light);
-			font-size: 20px;
-			font-weight: bold;
-
-			img {
-				margin-right: 32px;
-				width: 24px;
-				height: 24px;
-				margin-top: 3px;
-			}
-		}
-
-		.item-content {
-			padding: 16px;
-
-			p {
-				display: flex;
-				justify-content: space-between;
-				align-content: center;
-
-				span:nth-child(1) {
-					line-height: 30px;
-					font-size: 14px;
-					flex: 0 0 60px;
-				}
-
-				span:nth-child(2) {
-					color: #101010;
-					font-weight: bold;
-					font-size: 22px;
-					word-wrap: break-word;
-					word-break: break-all;
-				}
-			}
-
-			p:nth-child(2),
-			p:nth-child(3) {
-				margin-top: 5px;
-			}
-		}
-	}
-
-	.home-card-two,
-	.home-card-three,
-	.home-card-four {
-		.home-card-item {
-			height: 300px;
-		}
-
-		.home-card-top {
-			height: 200px;
-
-			.box-card {
-				padding: 15px 20px 20px 10px;
-
-				p {
-					margin-bottom: 10px;
-				}
-
-				&-item {
-					margin-bottom: 10px;
-				}
-			}
-		}
-
-		.home-card-item,
-		.home-card-top {
-			width: 100%;
-			overflow: hidden;
-
-			.home-monitor {
-				height: 100%;
-
-				.flex-warp-item {
-					width: 25%;
-					height: 111px;
-					display: flex;
-
-					.flex-warp-item-box {
-						margin: auto;
-						text-align: center;
-						color: var(--el-text-color-primary);
-						display: flex;
-						border-radius: 5px;
-						background: var(--next-bg-color);
-						cursor: pointer;
-						transition: all 0.3s ease;
-
-						&:hover {
-							background: var(--el-color-primary-light-9);
-							transition: all 0.3s ease;
-						}
-					}
-
-					@for $i from 0 through $homeNavLengh {
-						.home-animation#{$i} {
-							opacity: 0;
-							animation-name: error-num;
-							animation-duration: 0.5s;
-							animation-fill-mode: forwards;
-							animation-delay: calc($i/10) + s;
-						}
-					}
-				}
-			}
-		}
-	}
-
-	.text-info {
-		color: #23c6c8;
-	}
-
-	.text-danger {
-		color: #ed5565;
-	}
-
-	.git-res {
-		margin-top: 20px;
-	}
-
-	.git-res .el-link {
-		margin-right: 30px;
-	}
-
-	ul,
-	li {
-		padding: 0;
-		margin: 0;
-		list-style: none;
-	}
-
-	.product {
-		margin-top: 50px;
-
-		h3 {
-			margin-bottom: 15px;
-		}
-	}
-
-	.product li {
-		margin-bottom: 20px;
-		float: left;
-		width: 150px;
-	}
-
-	.box-card.xx {
-		margin-top: 20px;
-	}
-}
-
-.lable-group,
-.lable-group1 {
-	// background-color: pink;
-	display: flex;
-	width: 100%;
-	margin-top: 20px;
-	border: 1px solid rgba(22, 132, 252, 1);
-
-	> div {
-		cursor: pointer;
-		width: 33%;
-		text-align: center;
-		padding: 6px 0;
-
-		color: rgba(22, 132, 252, 1);
-	}
-
-	div:nth-child(2) {
-		border-left: 1px solid rgba(22, 132, 252, 1);
-		border-right: 1px solid rgba(22, 132, 252, 1);
-	}
-
-	.active {
-		background-color: rgba(22, 132, 252, 1);
-		color: #fff;
-	}
-}
-
-.lable-group1 > div {
-	width: 50%;
-}
-</style>

+ 0 - 84
src/views/heating/monitor/history-weather.vue

@@ -1,84 +0,0 @@
-<template>
-	<div class="weather-history">
-		<div class="flex-row">
-			<div class="title">{{ cityName }}历史天气</div>
-			<div class="flex search">
-				<el-date-picker
-					v-model="dateTime"
-					type="month"
-					format="YYYY-MM"
-					value-format="YYYY-MM"
-					placeholder="选择年月"
-					:clearable="false"
-					style="width: 130px"
-					class="mr-4"
-					@change="getData"
-				/>
-				<el-button type="primary" @click="exportFile">导出</el-button>
-			</div>
-		</div>
-		<el-table :data="list" border max-height="calc(100vh  - 210px)" v-loading="loading" style="width: 100%" class="mt-5">
-			<el-table-column label="日期" prop="createdAt" align="center" />
-			<el-table-column label="最高风力(级)" prop="maxWindpower" align="center" />
-			<el-table-column label="最低风力(级)" prop="minWindpower" align="center" />
-			<el-table-column label="平均风力(级)" prop="avgWindpower" align="center" />
-			<el-table-column label="日照时长" prop="sunshineDuration" align="center" />
-			<el-table-column label="最高气温(℃)" prop="maxTemperature" align="center" />
-			<el-table-column label="最低气温(℃)" prop="minTemperature" align="center" />
-			<el-table-column label="当日平均气温(℃)" prop="avgTemperature" align="center" min-width="100" />
-		</el-table>
-	</div>
-</template>
-
-<script lang="ts" setup>
-import { useRoute } from 'vue-router'
-import { ref } from 'vue'
-import dayjs from 'dayjs'
-import api from '/@/api/datahub'
-import downloadFile from '/@/utils/download'
-
-const route = useRoute()
-
-const list = ref<any[]>([])
-const cityName = ref('')
-const dateTime = ref(dayjs().format('YYYY-MM'))
-const loading = ref(true)
-
-function getData() {
-	list.value = []
-	api.weather
-		.getCityWeatherHistory({
-			id: route.params.id,
-			dateTime: dateTime.value,
-		})
-		.then(({ Info }: { Info: any[] }) => {
-			if (Info?.length) {
-				cityName.value = Info[0].name
-				list.value = Info
-			}
-		})
-		.finally(() => (loading.value = false))
-}
-
-getData()
-
-function exportFile() {
-	api.weather.getCityWeatherHistoryExport({
-		id: route.params.id,
-		dateTime: dateTime.value,
-	}).then((res: any) => {
-    downloadFile(res, cityName.value + dateTime.value + '-天气预报导出.xlsx')
-  })
-}
-</script>
-
-<style scoped lang="scss">
-.weather-history {
-	background: #fff;
-	padding: 20px;
-	.title {
-		font-size: 18px;
-		font-weight: bold;
-	}
-}
-</style>

+ 0 - 421
src/views/heating/monitor/loopSupervision/heatStationDetail.vue

@@ -1,421 +0,0 @@
-<template>
-	<div class="system-dic-container data-overview">
-		<div v-if="$route.query.name" style="text-align: center;font-size: 20px;font-weight: bold;margin-bottom: 10px;">{{$route.query.name}}</div>
-		<el-row :gutter="15" class="home-card-one">
-			<el-col
-				:xs="24"
-				:sm="12"
-				:md="12"
-				:lg="6"
-				:xl="6"
-				v-for="(v, k) in dataOne"
-				:key="k"
-				:class="{ 'home-media home-media-lg': k > 1, 'home-media-sm': k === 1 }"
-			>
-				<div class="home-card-item">
-					<div class="item-header">
-						<img :src="isIsDark ? v.iconDark : v.icon" alt="" />
-						<span>{{ v.title }}</span>
-					</div>
-					<div class="item-content w100" :class="` home-one-animation${k}`">
-						<p>
-							<span class="text-no-wrap">{{ v.contentTitle1 }}</span>
-							<span>{{ v.val1 }} {{ unitMap[v.contentTitle1] }}</span>
-						</p>
-						<p>
-							<span class="text-no-wrap">{{ v.contentTitle2 }}</span>
-							<span
-								>{{ v.val2 }}
-								{{ unitMap[v.title + ':' + v.contentTitle2] ? unitMap[v.title + ':' + v.contentTitle2] : unitMap[v.contentTitle2] }}</span
-							>
-						</p>
-						<p style="height: 30px">
-							<template v-if="v.contentTitle3">
-								<span class="text-no-wrap">{{ v.contentTitle3 || ' ' }}</span>
-								<span
-									>{{ v.val3 || ' ' }}
-									{{ unitMap[v.title + ':' + v.contentTitle3] ? unitMap[v.title + ':' + v.contentTitle3] : unitMap[v.contentTitle3] }}</span
-								>
-							</template>
-						</p>
-					</div>
-				</div>
-			</el-col>
-		</el-row>
-		<el-row :gutter="15" class="home-card-one mt15">
-			<el-col :span="24">
-				<div class="home-card-item p20">
-					<div class="home-card-item-title" style="display: flex; justify-content: space-between">
-						<span>热网总能耗</span>
-
-						<el-button type="text" @click="goDetail()">更多 &gt;</el-button>
-						<!-- <el-select @change="getStatisticsLineChartData()" v-model="rangeValue" placeholder="请选择查询范围" size="mini">
-							<el-option
-							v-for="item in [10, 30, 60]"
-							:key="item"
-							:label="'近'+item+'天'"
-							:value="item"
-							/>
-						</el-select> -->
-					</div>
-					<div style="height: 300px" ref="homeLineRef"></div>
-				</div>
-			</el-col>
-		</el-row>
-	</div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent, nextTick, watch } from 'vue';
-import { FormInstance } from 'element-plus';
-import * as echarts from 'echarts';
-import api from '/@/api/loopSupervision';
-
-import ele from '/@/assets/img/ele.svg';
-import ele1 from '/@/assets/img/ele1.svg';
-import fire from '/@/assets/img/fire.svg';
-import fire1 from '/@/assets/img/fire1.svg';
-import map from '/@/assets/img/map.svg';
-import map1 from '/@/assets/img/map1.svg';
-import water from '/@/assets/img/water.svg';
-import water1 from '/@/assets/img/water1.svg';
-import { useRoute, useRouter } from 'vue-router';
-import { useStore } from '/@/store/index';
-import apiDatahub from '/@/api/datahub';
-
-let global: any = {
-	homeCharThree: null,
-	dispose: [null, '', undefined],
-};
-
-export default defineComponent({
-	name: 'deviceproduct',
-	setup() {
-		const addDicRef = ref();
-		const editDicRef = ref();
-		const queryRef = ref();
-		const homeLineRef = ref();
-		const router = useRouter();
-		const route = useRoute();
-		const store = useStore();
-		const unitMap = ref<any>({});
-
-		// 统计信息的单位的字典
-		apiDatahub.template.getDictData({ DictType: 'overview_unit' }).then((res: any) => {
-			res.values.forEach((v: any) => {
-				unitMap.value[v.value] = v.key;
-			});
-		});
-		const state = reactive({
-			dataOne: [
-				{
-					icon: map,
-					iconDark: map1,
-					title: '供热面积',
-					contentTitle1: '联网面积',
-					val1: '0',
-					contentTitle2: '实供面积',
-					val2: '0',
-					contentTitle3: '供热率',
-					val3: '',
-				},
-				{
-					icon: fire,
-					iconDark: fire1,
-					title: '热量',
-					contentTitle1: '总耗热',
-					val1: '0',
-					contentTitle2: '总单耗',
-					val2: '0',
-				},
-				{
-					icon: ele,
-					iconDark: ele1,
-					title: '负荷',
-					contentTitle1: '供热负荷',
-					val1: '0',
-					contentTitle2: '平均供热负荷',
-					val2: '-',
-				},
-				{
-					icon: water,
-					iconDark: water1,
-					title: '水量',
-					contentTitle1: '总耗水',
-					val1: '0',
-					contentTitle2: '小时补水量',
-					val2: '0',
-				},
-			],
-			lineName: '换热站监测',
-			myCharts: [],
-			charts: {
-				theme: '',
-				bgColor: '',
-				color: '#303133',
-			},
-			searchParams: {
-				name: '',
-			},
-			xAxisData: [],
-			inTemperatureEchart: [], // 供水温度
-			outTemperatureEchart: [], // 回水温度
-			isIsDark: false,
-		});
-
-		const getNumDetail = () => {
-			api
-				.getLoopRegulationDetail({
-					QueryType: 'num',
-					types: 'station',
-					code: route.query.code,
-				})
-				.then((res: any) => {
-					const { flowLoss, flowLossTotal, forRealArea, heatingArea, unitConsumption, unitConsumptionTotal, heatRate, heatDemandAvg, heatDemand } =
-						res.Data;
-
-					state.dataOne[0].val1 = heatingArea;
-					state.dataOne[0].val2 = forRealArea;
-					state.dataOne[0].val3 = heatRate;
-
-					state.dataOne[1].val1 = unitConsumptionTotal;
-					state.dataOne[1].val2 = unitConsumption;
-
-					state.dataOne[2].val1 = heatDemand;
-					state.dataOne[2].val2 = heatDemandAvg || '-';
-
-					state.dataOne[3].val1 = flowLossTotal;
-					state.dataOne[3].val2 = flowLoss;
-				});
-		};
-
-		const getChartDetail = () => {
-			api
-				.getLoopRegulationDetail({
-					QueryType: 'echart',
-					types: 'station',
-					code: route.query.code,
-				})
-				.then((res: any) => {
-					state.inTemperatureEchart = res.inTemperatureEchart.map((item: any) => item.value);
-					state.outTemperatureEchart = res.outTemperatureEchart.map((item: any) => item.value);
-					state.xAxisData = res.inTemperatureEchart.map((item: any) => item.time);
-
-					nextTick(() => {
-						initLineChart();
-					});
-				});
-		};
-
-		const goDetail = () => {
-			router.push({
-				path: '/heating-monitor/loopSupervision/heatStationHistory',
-				query: {
-					code: route.query.code,
-				},
-			});
-		};
-
-		// 折线图
-		const initLineChart = () => {
-			if (!global.dispose.some((b: any) => b === global.homeCharThree)) global.homeCharThree.dispose();
-			global.homeCharThree = <any>echarts.init(homeLineRef.value, state.charts.theme);
-			const option = {
-				backgroundColor: state.charts.bgColor,
-				tooltip: { trigger: 'axis' },
-				legend: {},
-				grid: { top: 40, right: 40, bottom: 40, left: 40 },
-				xAxis: [
-					{
-						type: 'category',
-						data: state.xAxisData,
-						boundaryGap: true,
-						axisTick: { show: false },
-					},
-				],
-				yAxis: [
-					{
-						type: 'value',
-						axisLabel: {
-							formatter: '{value} °C',
-						},
-					},
-				],
-				series: [
-					{
-						name: '供水温度',
-						type: 'line',
-						data: state.inTemperatureEchart,
-					},
-					{
-						name: '回水温度',
-						type: 'line',
-						data: state.outTemperatureEchart,
-					},
-					// {
-					// 	name: '室外温度',
-					// 	type: 'line',
-					// 	data: [3, 0, 4, 7, 5, 7, 5]
-					// }
-				],
-			};
-			(<any>global.homeCharThree).setOption(option);
-			(<any>state.myCharts).push(global.homeCharThree);
-		};
-
-		// 批量设置 echarts resize
-		const initEchartsResizeFun = () => {
-			nextTick(() => {
-				for (let i = 0; i < state.myCharts.length; i++) {
-					setTimeout(() => {
-						(<any>state.myCharts[i]).resize();
-					}, i * 1000);
-				}
-			});
-		};
-		// 批量设置 echarts resize
-		const initEchartsResize = () => {
-			window.addEventListener('resize', initEchartsResizeFun);
-		};
-
-		// 监听 vuex 中是否开启深色主题
-		watch(
-			() => store.state.themeConfig.themeConfig.isIsDark,
-			(isIsDark) => {
-				nextTick(() => {
-					state.isIsDark = store.state.themeConfig.themeConfig.isIsDark;
-					state.charts.theme = isIsDark ? 'transparent' : '';
-					state.charts.bgColor = isIsDark ? 'transparent' : '';
-					state.charts.color = isIsDark ? '#dadada' : '#303133';
-					setTimeout(() => {
-						initLineChart();
-					}, 1000);
-				});
-			},
-			{
-				deep: true,
-				immediate: true,
-			}
-		);
-
-		// 页面加载时
-		onMounted(() => {
-			getNumDetail();
-			getChartDetail();
-
-			initEchartsResize();
-			// 获取布局配置信息
-			state.isIsDark = store.state.themeConfig.themeConfig.isIsDark;
-		});
-
-		/** 重置按钮操作 */
-		const resetQuery = (formEl: FormInstance | undefined) => {
-			if (!formEl) return;
-			formEl.resetFields();
-			// typeList();
-		};
-
-		return {
-			unitMap,
-			addDicRef,
-			editDicRef,
-			queryRef,
-			homeLineRef,
-			...toRefs(state),
-			resetQuery,
-			goDetail,
-		};
-	},
-});
-</script>
-
-<style lang="scss" scoped>
-$homeNavLengh: 8;
-
-.home-card-one {
-	@for $i from 0 through 3 {
-		.home-one-animation#{$i} {
-			opacity: 0;
-			animation-name: error-num;
-			animation-duration: 0.5s;
-			animation-fill-mode: forwards;
-			animation-delay: calc($i/10) + s;
-		}
-	}
-}
-
-.home-card-one .home-card-item {
-	width: 100%;
-	border-radius: 4px;
-	transition: all ease 0.3s;
-	overflow: hidden;
-	background: var(--el-color-white);
-	color: var(--el-text-color-primary);
-	border: 1px solid var(--next-border-color-light);
-
-	&:hover {
-		box-shadow: 0 2px 12px var(--next-color-dark-hover);
-		transition: all ease 0.3s;
-	}
-
-	&.p20 {
-		padding: 20px;
-	}
-
-	.item-header {
-		display: flex;
-		justify-content: center;
-		align-content: center;
-		color: #101010;
-		padding: 10px 0;
-		border-bottom: 1px solid var(--next-border-color-light);
-		font-size: 20px;
-		font-weight: bold;
-
-		img {
-			margin-right: 32px;
-			width: 24px;
-			height: 24px;
-			margin-top: 3px;
-		}
-	}
-
-	.item-content {
-		padding: 26px;
-
-		p {
-			display: flex;
-			justify-content: space-between;
-			align-content: center;
-
-			span:nth-child(1) {
-				// padding-top: 4px;
-				line-height: 33px;
-				font-size: 14px;
-			}
-
-			span:nth-child(2) {
-				color: #101010;
-				font-weight: bold;
-				font-size: 22px;
-			}
-		}
-
-		p:nth-child(2),
-		p:nth-child(3) {
-			margin-top: 5px;
-		}
-	}
-
-	&-title {
-		font-size: 15px;
-		font-weight: bold;
-		height: 30px;
-		align-items: center;
-	}
-}
-
-// :deep(.el-form-item--default) {
-// 	margin-bottom: 0;
-// }
-</style>

+ 0 - 104
src/views/heating/monitor/loopSupervision/heatStationHistory.vue

@@ -1,104 +0,0 @@
-<template>
-  <div class="system-dic-container">
-    <el-card shadow="hover">
-      <div class="system-user-search mb15">
-        <el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="68px">
-          <el-form-item label="创建时间" prop="dateRange">
-            <el-date-picker v-model="tableData.param.dateRange" size="default" style="width: 240px" value-format="YYYY-MM-DD" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
-          </el-form-item>
-          <el-form-item>
-            <el-button size="default" type="primary" class="ml10" @click="typeList">
-              <el-icon>
-                <ele-Search />
-              </el-icon>
-              查询
-            </el-button>
-            <el-button size="default" @click="resetQuery(queryRef)">
-              <el-icon>
-                <ele-Refresh />
-              </el-icon>
-              重置
-            </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-      <el-table :data="tableData.data" style="width: 100%" v-loading="tableData.loading">
-        <el-table-column type="index" label="序号" width="55" align="center" />
-        <el-table-column label="换热站" prop="name" :show-overflow-tooltip="true" />
-        <el-table-column label="换热站编号" prop="code" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="一网供水压力" prop="inPressure1" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="二网供水压力" prop="inPressure2" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="一网供水温度" prop="inTemperature1" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="二网供水温度" prop="inTemperature2" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="一网回水压力" prop="outPressure1" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="二网回水压力" prop="outPressure2" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="一网回水温度" prop="outTemperature1" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="二网回水温度" prop="outTemperature2" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="供水流量" prop="supplyWaterFlow" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="回水流量" prop="returnWaterFlow" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="二网供水流量" prop="secondWaterSupply" min-width="120" :show-overflow-tooltip="true" />
-      </el-table>
-      <pagination v-show="tableData.total>0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="typeList" />
-    </el-card>
-  </div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import api from '/@/api/loopSupervision';
-import { useRoute } from 'vue-router';
-
-export default defineComponent({
-  name: 'deviceproduct',
-  setup() {
-    const queryRef = ref();
-    const route = useRoute()
-    const state = reactive({
-      radioValue: '换热站',
-      ids: [],
-      tableData: {
-        data: [],
-        total: 0,
-        loading: false,
-        param: {
-          pageNum: 1,
-          pageSize: 10,
-          types: 'station',
-          code: '',
-          dateRange: [],
-        },
-      },
-    });
-    // 初始化表格数据
-    const initTableData = () => {
-      state.tableData.param.pageNum = 1
-      typeList();
-    };
-    const typeList = () => {
-      state.tableData.loading = true;
-      api.getLoopRegulation(state.tableData.param).then((res: any) => {
-        state.tableData.data = res.Data;
-        state.tableData.total = res.Total;
-      }).finally(() => (state.tableData.loading = false));
-    };
-    // 页面加载时
-    onMounted(() => {
-      state.tableData.param.code = route.query.code
-      initTableData();
-    });
-    /** 重置按钮操作 */
-    const resetQuery = (formEl: FormInstance | undefined) => {
-      if (!formEl) return;
-      formEl.resetFields();
-      initTableData();
-    };
-    return {
-      queryRef,
-      typeList,
-      resetQuery,
-      ...toRefs(state),
-    };
-  },
-});
-</script>

+ 0 - 177
src/views/heating/monitor/loopSupervision/index.vue

@@ -1,177 +0,0 @@
-<template>
-  <div class="system-dic-container">
-    <el-card shadow="hover">
-      <div class="system-user-search mb15">
-        <el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="68px">
-          <!-- <el-form-item label="" prop="">
-            <el-radio-group v-model="tableData.param.types" size="default" @change="initTableData">
-              <el-radio-button label="station" v-auth="'heatStation'">
-                换热站
-              </el-radio-button>
-              <el-radio-button label="loop" v-auth="'loop'">
-                环路
-              </el-radio-button>
-            </el-radio-group>
-          </el-form-item> -->
-          <el-form-item label="环路名称" prop="name">
-            <el-input v-model="tableData.param.name" placeholder="环路名称" size="default"></el-input>
-          </el-form-item>
-          <el-form-item label="环路编号" prop="code">
-            <el-input v-model="tableData.param.code" placeholder="环路编号" size="default"></el-input>
-            <!-- <el-select v-model="tableData.param.name" placeholder="环路编号" clearable size="default" style="width: 240px">
-              <el-option label="已发布" :value="1" />
-              <el-option label="未发布" :value="0" />
-            </el-select> -->
-          </el-form-item>
-          <el-form-item label="换热站名称" prop="stationName" label-width="90">
-            <el-input v-model="tableData.param.stationName" placeholder="换热站名称" size="default"></el-input>
-          </el-form-item>
-          <el-form-item>
-            <el-button size="default" type="primary" class="ml10" v-auth="'query'" @click="typeList">
-              <el-icon>
-                <ele-Search />
-              </el-icon>
-              查询
-            </el-button>
-            <el-button size="default" v-auth="'reset'" @click="resetQuery(queryRef)">
-              <el-icon>
-                <ele-Refresh />
-              </el-icon>
-              重置
-            </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-      <el-table :data="tableData.data" style="width: 100%" @selection-change="handleSelectionChange" v-loading="tableData.loading">
-        <el-table-column type="index" width="55" label="序号" align="center" />
-        <!-- <el-table-column label="日期" v-col="'key'" prop="key" min-width="120" :show-overflow-tooltip="true" /> -->
-        <el-table-column label="换热站" min-width="120" v-col="'stationName'" prop="stationName" :show-overflow-tooltip="true"></el-table-column>
-        <el-table-column :label="tableData.param.types === 'station' ? '换热站' : '环路名称'" v-col="'name'" prop="name" :show-overflow-tooltip="true">
-          <template #default="{ row }">
-            <el-button type="text" @click="goPage(row)">
-              {{ row.name }}
-            </el-button>
-          </template>
-        </el-table-column>
-        <el-table-column label="一网供水温度" prop="inTemperature1" min-width="110" :show-overflow-tooltip="true" />
-        <el-table-column label="二网供水温度" prop="inTemperature2" min-width="110" :show-overflow-tooltip="true" />
-        <el-table-column label="一网回水温度" prop="outTemperature1" min-width="110" :show-overflow-tooltip="true" />
-        <el-table-column label="供水流量" prop="supplyWaterFlow" min-width="100" :show-overflow-tooltip="true" />
-        <el-table-column label="回水流量" prop="returnWaterFlow" min-width="100" :show-overflow-tooltip="true" />
-        <el-table-column label="一网供水压力" prop="inPressure1" min-width="110" :show-overflow-tooltip="true" />
-        <el-table-column label="二网供水压力" prop="inPressure2" min-width="110" :show-overflow-tooltip="true" />
-        <el-table-column label="一网回水压力" prop="outPressure1" min-width="110" :show-overflow-tooltip="true" />
-        <el-table-column label="二网回水压力" prop="outPressure2" min-width="110" :show-overflow-tooltip="true" />
-
-        <!-- <el-table-column prop="status" label="状态" width="100" align="center">
-          <template #default="scope">
-            <el-tag type="success" size="small" v-if="scope.row.status">已发布</el-tag>
-            <el-tag type="info" size="small" v-else>未发布</el-tag>
-          </template>
-        </el-table-column> -->
-      </el-table>
-      <pagination v-show="tableData.total > 0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="typeList" />
-    </el-card>
-  </div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import api from '/@/api/loopSupervision';
-import { useRouter } from 'vue-router';
-
-export default defineComponent({
-  name: 'deviceproduct',
-  setup() {
-    const addDicRef = ref();
-    const editDicRef = ref();
-    const queryRef = ref();
-    const router = useRouter()
-    const state = reactive({
-      ids: [],
-      tableData: {
-        data: [{ name: '换热站', key: '2022-10-25', value: 1 }],
-        total: 0,
-        loading: false,
-        param: {
-          pageNum: 1,
-          pageSize: 30,
-          types: 'loop', // 类型 station 换热站 loop环路
-          stationName: '',
-          name: '',
-          code: '',
-        },
-      },
-    });
-    // 初始化表格数据
-    const initTableData = () => {
-      state.tableData.param.pageNum = 1
-      typeList();
-    };
-    const typeList = () => {
-      state.tableData.loading = true;
-      state.tableData.data = [];
-      api.getLoopRegulation(state.tableData.param).then((res: any) => {
-        state.tableData.data = res.Data;
-        state.tableData.total = res.Total;
-      }).finally(() => (state.tableData.loading = false));
-    };
-    // 打开新增产品弹窗
-    const onOpenAddDic = () => {
-      editDicRef.value.openDialog();
-    };
-    // 打开修改产品弹窗
-    const onOpenEditDic = (row: any) => {
-      editDicRef.value.openDialog(row);
-    };
-    // 页面加载时
-    onMounted(() => {
-      initTableData();
-    });
-    /** 重置按钮操作 */
-    const resetQuery = (formEl: FormInstance | undefined) => {
-      if (!formEl) return;
-      formEl.resetFields();
-      typeList();
-    };
-    // 多选框选中数据
-    const handleSelectionChange = (selection: any) => {
-      // state.ids = selection.map((item) => item.id);
-    };
-
-    const goPage = (row: any) => {
-      if (state.tableData.param.types === 'station') {
-        router.push({
-          path: '/heating-monitor/loopSupervision/heatStationDetail',
-          query: {
-            code: row.code,
-            name: row.stationName + '_' +  row.name
-          }
-        })
-      } else {
-        router.push({
-          path: '/heating-monitor/loopSupervision/loopDetail',
-          query: {
-            code: row.code,
-            name: row.stationName + '_' +  row.name
-          }
-        })
-      }
-    }
-    return {
-      addDicRef,
-      editDicRef,
-      queryRef,
-      onOpenAddDic,
-      onOpenEditDic,
-      typeList,
-      resetQuery,
-      handleSelectionChange,
-      ...toRefs(state),
-      initTableData,
-      goPage
-    };
-  },
-});
-</script>

+ 0 - 590
src/views/heating/monitor/loopSupervision/loopDetail.vue

@@ -1,590 +0,0 @@
-<template>
-	<div class="system-dic-container data-overview">
-		<div v-if="$route.query.name" style="text-align: center; font-size: 20px; font-weight: bold; margin-bottom: 10px">{{ $route.query.name }}</div>
-		<el-row :gutter="15" class="home-card-one">
-			<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" v-for="(v, k) in dataOne" :key="k" :class="{ 'home-media home-media-lg': k > 1, 'home-media-sm': k === 1 }">
-				<div class="home-card-item">
-					<div class="item-header">
-						<img :src="isIsDark ? v.iconDark : v.icon" alt="" />
-						<span>{{ v.title }}</span>
-					</div>
-					<div class="item-content w100" :class="` home-one-animation${k}`">
-						<p>
-							<span class="text-no-wrap">{{ v.contentTitle1 }}</span>
-							<span>{{ v.val1 }} {{ unitMap[v.contentTitle1] }}</span>
-						</p>
-						<p>
-							<span class="text-no-wrap">{{ v.contentTitle2 }}</span>
-							<span>{{ v.val2 }}
-								{{ unitMap[v.title + ':' + v.contentTitle2] ? unitMap[v.title + ':' + v.contentTitle2] : unitMap[v.contentTitle2] }}</span>
-						</p>
-						<p style="height: 30px">
-							<template v-if="v.contentTitle3">
-								<span class="text-no-wrap">{{ v.contentTitle3 || ' ' }}</span>
-								<span>{{ v.val3 || ' ' }}
-									{{ unitMap[v.title + ':' + v.contentTitle3] ? unitMap[v.title + ':' + v.contentTitle3] : unitMap[v.contentTitle3] }}</span>
-							</template>
-						</p>
-					</div>
-				</div>
-			</el-col>
-		</el-row>
-
-		<el-card shadow="hover" class="mt-4">
-			<div class="search">
-				<el-form :model="params" :inline="true" ref="queryRef">
-					<el-form-item label="" prop="dataTypes">
-						<el-radio-group v-model="params.dataTypes" size="default">
-							<el-radio-button label="hour">时</el-radio-button>
-							<el-radio-button label="day">日</el-radio-button>
-							<el-radio-button label="month">月</el-radio-button>
-						</el-radio-group>
-					</el-form-item>
-					<el-form-item label="" prop="date">
-						<el-date-picker v-if="params.dataTypes === 'hour'" v-model="date" type="datetimerange" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" range-separator="-" start-placeholder="开始时间" end-placeholder="结束时间" :clearable="false" />
-						<el-date-picker v-else-if="params.dataTypes === 'day'" v-model="date" type="daterange" format="YYYY-MM-DD" value-format="YYYY-MM-DD" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :clearable="false" />
-						<el-date-picker v-else-if="params.dataTypes === 'month'" v-model="date" type="monthrange" format="YYYY-MM" value-format="YYYY-MM" range-separator="-" start-placeholder="开始月份" end-placeholder="结束月份" :clearable="false" />
-					</el-form-item>
-					<el-form-item>
-						<el-button size="default" type="primary" class="ml10" @click="search(1)">
-							<el-icon>
-								<ele-Search />
-							</el-icon>
-							查询
-						</el-button>
-						<el-button size="default" @click="exportData">
-							<el-icon>
-								<ele-Download />
-							</el-icon>
-							导出
-						</el-button>
-					</el-form-item>
-				</el-form>
-			</div>
-			<el-table :data="tableData" style="width: 100%" v-loading="loadingTable">
-				<el-table-column type="index" label="序号" width="70" align="center" />
-				<el-table-column prop="time" label="时间" align="center"></el-table-column>
-				<el-table-column :label="`总耗热(${unitMap['总耗热']})`" prop="unitConsumptionTotal" />
-				<el-table-column :label="`热单耗(${unitMap['总单耗']})`" prop="unitConsumption" />
-				<el-table-column :label="`供热负荷(${unitMap['供热负荷']})`" prop="heatDemand" />
-				<el-table-column :label="`平均供热负荷(${unitMap['平均供热负荷']})`" prop="heatDemandAvg" />
-				<el-table-column :label="`总失水量(${currentUnit})`" prop="flowLossTotal" />
-				<el-table-column :label="`小时失水量(${unitMap['小时补水量']})`" prop="flowLoss" />
-				<el-table-column :label="`${currentDateTypePrefix}平均温度(℃/${currentDateType})`" prop="avgTemperature" />
-			</el-table>
-		</el-card>
-
-		<el-row :gutter="15" class="home-card-one mt15" v-if="$route.query.code">
-			<el-col :span="24">
-				<div class="home-card-item p20" v-loading="loading">
-					<!-- <el-tabs>
-						<el-tab-pane label="环路监测"> -->
-					<div class="flex-row">
-						<el-tabs v-model="tabName" @tab-change="initLineChart">
-							<el-tab-pane label="温度" :name="0"></el-tab-pane>
-							<el-tab-pane label="压力" :name="1"></el-tab-pane>
-							<el-tab-pane label="流量" :name="2"></el-tab-pane>
-							<el-tab-pane label="失水量" :name="3"></el-tab-pane>
-						</el-tabs>
-						<el-button type="text" @click="goDetail()">更多 &gt;</el-button>
-					</div>
-					<div style="height: 300px" ref="homeLineRef"></div>
-					<!-- </el-tab-pane>
-						<el-tab-pane label="流程图" lazy>
-							<div class="iframe-wrapper">
-								<iframe :src="'/plugin/topo/?bgColor=000#/name/' + $route.query.code" height="400" width="100%" frameborder="0" class="mt15"></iframe>
-								<div class="jump" @click="jump('/plugin/topo/?bgColor=000#/name/' + $route.query.code)">
-									<img src="/@/assets/open.svg" />
-								</div>
-							</div>
-						</el-tab-pane>
-					</el-tabs> -->
-				</div>
-			</el-col>
-		</el-row>
-	</div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent, nextTick, watch } from 'vue';
-import { FormInstance } from 'element-plus';
-import * as echarts from 'echarts';
-import api from '/@/api/loopSupervision';
-import apiDatahub from '/@/api/datahub';
-import dayjs from 'dayjs';
-import downloadFile from '/@/utils/download';
-
-import ele from '/@/assets/img/ele.svg';
-import ele1 from '/@/assets/img/ele1.svg';
-import fire from '/@/assets/img/fire.svg';
-import fire1 from '/@/assets/img/fire1.svg';
-import map from '/@/assets/img/map.svg';
-import map1 from '/@/assets/img/map1.svg';
-import water from '/@/assets/img/water.svg';
-import water1 from '/@/assets/img/water1.svg';
-import { useRoute, useRouter } from 'vue-router';
-import { useStore } from '/@/store/index';
-import { useSearch } from '/@/hooks/useCommon';
-
-let global: any = {
-	homeCharThree: null,
-	dispose: [null, '', undefined],
-};
-
-export default defineComponent({
-	name: 'deviceproduct',
-	setup() {
-		const addDicRef = ref();
-		const loading = ref(false);
-		const editDicRef = ref();
-		const queryRef = ref();
-		const homeLineRef = ref();
-		const router = useRouter();
-		const route = useRoute();
-		const store = useStore();
-		const tabName = ref(0);
-		const unitMap = ref<any>({});
-
-		const currentUnit = ref('t/h');
-		const currentDateType = ref('h');
-		const currentDateTypePrefix = ref('小时');
-
-		const date = ref([dayjs().format('YYYY-MM-DD 00:00:00'), dayjs().format('YYYY-MM-DD HH:mm:ss')]);
-
-		const {
-			params,
-			tableData,
-			getList,
-			loading: loadingTable,
-		} = useSearch(api.getLoopRegulationDetail, 'Report', {
-			queryType: 'report',
-			dataTypes: 'hour',
-			beginTime: date.value[0],
-			endTime: date.value[1],
-			code: route.query.code,
-		});
-
-		function exportData() {
-			api.loopReportExport(params).then((res: any) => {
-				downloadFile(res, route.query.name + '环路报表数据导出.xlsx');
-			});
-		}
-
-		watch(date, (date) => {
-			console.log(date);
-			params.beginTime = date[0];
-			params.endTime = date[1];
-		});
-
-		watch(
-			() => params.dataTypes,
-			(dataTypes) => {
-				switch (dataTypes) {
-					case 'hour':
-						date.value = [dayjs().format('YYYY-MM-DD 00:00:00'), dayjs().format('YYYY-MM-DD HH:mm:ss')];
-						break;
-					case 'day':
-						date.value = [dayjs().subtract(7, 'days').format('YYYY-MM-DD'), dayjs().format('YYYY-MM-DD')];
-						break;
-					case 'month':
-						date.value = [dayjs().subtract(7, 'months').format('YYYY-MM'), dayjs().format('YYYY-MM')];
-						break;
-				}
-			}
-		);
-
-		function search(page: number | undefined) {
-			currentUnit.value = ({ hour: 't/h', day: 't/天', month: 't/月' } as any)[params.dataTypes]
-			currentDateType.value = ({ hour: 'h', day: '天', month: '月' } as any)[params.dataTypes]
-			currentDateTypePrefix.value = ({ hour: '小时', day: '日', month: '月' } as any)[params.dataTypes]
-			getList(page);
-		}
-
-		// 统计信息的单位的字典
-		apiDatahub.template.getDictData({ DictType: 'overview_unit' }).then((res: any) => {
-			res.values.forEach((v: any) => {
-				unitMap.value[v.value] = v.key;
-			});
-		});
-
-		const state = reactive({
-			dataOne: [
-				{
-					icon: map,
-					iconDark: map1,
-					title: '供热面积',
-					contentTitle1: '联网面积',
-					val1: '0',
-					contentTitle2: '实供面积',
-					val2: '0',
-					contentTitle3: '供热率',
-					val3: '',
-				},
-				{
-					icon: fire,
-					iconDark: fire1,
-					title: '热量',
-					contentTitle1: '总耗热',
-					val1: '0',
-					contentTitle2: '总单耗',
-					val2: '0',
-				},
-				{
-					icon: ele,
-					iconDark: ele1,
-					title: '负荷',
-					contentTitle1: '供热负荷',
-					val1: '0',
-					contentTitle2: '平均供热负荷',
-					val2: '-',
-				},
-				{
-					icon: water,
-					iconDark: water1,
-					title: '水量',
-					contentTitle1: '总耗水',
-					val1: '0',
-					contentTitle2: '小时补水量',
-					val2: '0',
-				},
-			],
-			lineName: '环路监测',
-			myCharts: [],
-			charts: {
-				theme: '',
-				bgColor: '',
-				color: '#303133',
-			},
-			searchParams: {
-				name: '',
-			},
-			xAxisData: [],
-			inTemperature1Echart: [], // 供水温度
-			inTemperature2Echart: [],
-			outTemperature1Echart: [],
-			outTemperature2Echart: [],
-			inPressure1Echart: [],
-			inPressure2Echart: [],
-			outPressure1Echart: [],
-			outPressure2Echart: [],
-			supplyWaterFlowEchart: [],
-			secondWaterSupplyEchart: [],
-			returnWaterFlowEchart: [],
-			waterLossEchart: [],
-			isIsDark: false,
-		});
-
-		const getNumDetail = () => {
-			api
-				.getLoopRegulationDetail({
-					QueryType: 'num',
-					types: 'loop',
-					code: route.query.code,
-				})
-				.then((res: any) => {
-					const { flowLoss, flowLossTotal, forRealArea, heatingArea, unitConsumption, unitConsumptionTotal, heatRate, heatDemandAvg, heatDemand } =
-						res.Data;
-					state.dataOne[0].val1 = heatingArea;
-					state.dataOne[0].val2 = forRealArea;
-					state.dataOne[0].val3 = heatRate;
-
-					state.dataOne[1].val1 = unitConsumptionTotal;
-					state.dataOne[1].val2 = unitConsumption;
-
-					state.dataOne[2].val1 = heatDemand;
-					state.dataOne[2].val2 = heatDemandAvg || '-';
-
-					state.dataOne[3].val1 = flowLossTotal;
-					state.dataOne[3].val2 = flowLoss;
-				});
-		};
-
-		const getChartDetail = () => {
-			loading.value = true;
-			api
-				.getLoopRegulationDetail({
-					QueryType: 'echart',
-					types: 'loop',
-					code: route.query.code,
-				})
-				.then((res: any) => {
-					res = res.Data;
-					state.inTemperature1Echart = res.inTemperature1Echart.map((item: any) => item.value);
-					state.inTemperature2Echart = res.inTemperature2Echart.map((item: any) => item.value);
-					state.outTemperature1Echart = res.outTemperature1Echart.map((item: any) => item.value);
-					state.outTemperature2Echart = res.outTemperature2Echart.map((item: any) => item.value);
-					state.inPressure1Echart = res.inPressure1Echart.map((item: any) => item.value);
-					state.inPressure2Echart = res.inPressure2Echart.map((item: any) => item.value);
-					state.outPressure1Echart = res.outPressure1Echart.map((item: any) => item.value);
-					state.outPressure2Echart = res.outPressure2Echart.map((item: any) => item.value);
-					state.supplyWaterFlowEchart = res.supplyWaterFlowEchart.map((item: any) => item.value);
-					state.secondWaterSupplyEchart = res.secondWaterSupplyEchart.map((item: any) => item.value);
-					state.returnWaterFlowEchart = res.returnWaterFlowEchart.map((item: any) => item.value);
-					state.waterLossEchart = res.waterLossEchart.map((item: any) => item.value);
-					state.xAxisData = res.inTemperature1Echart.map((item: any) => item.time);
-
-					nextTick(() => {
-						initLineChart();
-					});
-				})
-				.finally(() => {
-					loading.value = false;
-				});
-		};
-
-		const goDetail = () => {
-			router.push({
-				path: '/heating-monitor/loopSupervision/loopHistory',
-				query: {
-					code: route.query.code,
-				},
-			});
-		};
-		const jump = (iframeUrl: string) => {
-			window.open(iframeUrl);
-		};
-
-		// 折线图
-		const initLineChart = () => {
-			if (!global.dispose.some((b: any) => b === global.homeCharThree)) global.homeCharThree.dispose();
-			global.homeCharThree = <any>echarts.init(homeLineRef.value, state.charts.theme);
-
-			const seriesList = [
-				[
-					{ name: '一网供水温度', type: 'line', data: state.inTemperature1Echart },
-					{ name: '二网供水温度', type: 'line', data: state.inTemperature2Echart },
-					{ name: '一网回水温度', type: 'line', data: state.outTemperature1Echart },
-				],
-				[
-					{ name: '一网供水压力', type: 'line', data: state.inPressure1Echart },
-					{ name: '二网供水压力', type: 'line', data: state.inPressure2Echart },
-					{ name: '一网回水压力', type: 'line', data: state.outPressure1Echart },
-					{ name: '二网回水压力', type: 'line', data: state.outPressure2Echart },
-				],
-				[
-					{ name: '供水流量', type: 'line', data: state.supplyWaterFlowEchart },
-					{ name: '二网供水流量', type: 'line', data: state.secondWaterSupplyEchart },
-					{ name: '回水流量', type: 'line', data: state.returnWaterFlowEchart },
-				],
-				[{ name: '失水量', type: 'line', data: state.waterLossEchart }],
-			];
-
-			const units = ['°C', 'Mpa', 'T/h', 'T'];
-
-			const option = {
-				backgroundColor: state.charts.bgColor,
-				tooltip: {},
-				legend: {},
-				grid: {
-					top: 40,
-					right: 20,
-					bottom: 20,
-					left: 20,
-					containLabel: true,
-				},
-				xAxis: [
-					{
-						type: 'category',
-						data: state.xAxisData,
-						boundaryGap: true,
-						axisTick: { show: false },
-					},
-				],
-				yAxis: [
-					{
-						type: 'value',
-						scale: true,
-						axisLabel: {
-							formatter: '{value} ' + units[tabName.value],
-						},
-					},
-				],
-				series: seriesList[tabName.value] || [],
-			};
-			(<any>global.homeCharThree).setOption(option);
-			(<any>state.myCharts).push(global.homeCharThree);
-		};
-
-		// 批量设置 echarts resize
-		const initEchartsResizeFun = () => {
-			nextTick(() => {
-				for (let i = 0; i < state.myCharts.length; i++) {
-					setTimeout(() => {
-						(<any>state.myCharts[i]).resize();
-					}, i * 1000);
-				}
-			});
-		};
-		// 批量设置 echarts resize
-		const initEchartsResize = () => {
-			window.addEventListener('resize', initEchartsResizeFun);
-		};
-
-		// 监听 vuex 中是否开启深色主题
-		watch(
-			() => store.state.themeConfig.themeConfig.isIsDark,
-			(isIsDark) => {
-				nextTick(() => {
-					state.charts.theme = isIsDark ? 'dark' : '';
-					state.charts.bgColor = isIsDark ? 'transparent' : '';
-					state.charts.color = isIsDark ? '#dadada' : '#303133';
-					setTimeout(() => {
-						initLineChart();
-					}, 500);
-				});
-			},
-			{
-				deep: true,
-				immediate: true,
-			}
-		);
-
-		// 页面加载时
-		onMounted(() => {
-			getNumDetail();
-			getChartDetail();
-
-			initEchartsResize();
-			// 获取布局配置信息
-			state.isIsDark = store.state.themeConfig.themeConfig.isIsDark;
-		});
-
-		/** 重置按钮操作 */
-		const resetQuery = (formEl: FormInstance | undefined) => {
-			if (!formEl) return;
-			formEl.resetFields();
-			// typeList();
-		};
-
-		return {
-			unitMap,
-			jump,
-			exportData,
-			loading,
-			currentDateTypePrefix,
-			currentDateType,
-			initLineChart,
-			tabName,
-			addDicRef,
-			editDicRef,
-			queryRef,
-			homeLineRef,
-			...toRefs(state),
-			resetQuery,
-			goDetail,
-			params,
-			tableData,
-			getList,
-			search,
-			currentUnit,
-			loadingTable,
-			date,
-		};
-	},
-});
-</script>
-
-<style lang="scss" scoped>
-$homeNavLengh: 8;
-
-.iframe-wrapper {
-	position: relative;
-
-	.jump {
-		position: absolute;
-		top: 24px;
-		right: 12px;
-		z-index: 10;
-		cursor: pointer;
-
-		img {
-			width: 40px;
-			height: 40px;
-			display: block;
-		}
-	}
-}
-
-.home-card-one {
-	@for $i from 0 through 3 {
-		.home-one-animation#{$i} {
-			opacity: 0;
-			animation-name: error-num;
-			animation-duration: 0.5s;
-			animation-fill-mode: forwards;
-			animation-delay: calc($i/10) + s;
-		}
-	}
-}
-
-.home-card-one .home-card-item {
-	width: 100%;
-	border-radius: 4px;
-	transition: all ease 0.3s;
-	overflow: hidden;
-	background: var(--el-color-white);
-	color: var(--el-text-color-primary);
-	border: 1px solid var(--next-border-color-light);
-
-	&:hover {
-		box-shadow: 0 2px 12px var(--next-color-dark-hover);
-		transition: all ease 0.3s;
-	}
-
-	&.p20 {
-		padding: 20px;
-	}
-
-	.item-header {
-		display: flex;
-		justify-content: center;
-		align-content: center;
-		color: #101010;
-		padding: 10px 0;
-		border-bottom: 1px solid var(--next-border-color-light);
-		font-size: 20px;
-		font-weight: bold;
-
-		img {
-			margin-right: 32px;
-			width: 24px;
-			height: 24px;
-			margin-top: 3px;
-		}
-	}
-
-	.item-content {
-		padding: 26px;
-
-		p {
-			display: flex;
-			justify-content: space-between;
-			align-content: center;
-
-			span:nth-child(1) {
-				// padding-top: 4px;
-				line-height: 33px;
-				font-size: 14px;
-			}
-
-			span:nth-child(2) {
-				color: #101010;
-				font-weight: bold;
-				font-size: 22px;
-			}
-		}
-
-		p:nth-child(2),
-		p:nth-child(3) {
-			margin-top: 5px;
-		}
-	}
-
-	&-title {
-		font-size: 15px;
-		font-weight: bold;
-		height: 30px;
-		align-items: center;
-	}
-}
-</style>

+ 0 - 101
src/views/heating/monitor/loopSupervision/loopHistory.vue

@@ -1,101 +0,0 @@
-<template>
-  <div class="system-dic-container">
-    <el-card shadow="hover">
-      <div class="system-user-search mb15">
-        <el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="68px">
-          <el-form-item label="创建时间" prop="dateRange">
-            <el-date-picker v-model="tableData.param.dateRange" size="default" style="width: 240px" value-format="YYYY-MM-DD" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
-          </el-form-item>
-          <el-form-item>
-            <el-button size="default" type="primary" class="ml10" @click="typeList">
-              <el-icon>
-                <ele-Search />
-              </el-icon>
-              查询
-            </el-button>
-            <el-button size="default" @click="resetQuery(queryRef)">
-              <el-icon>
-                <ele-Refresh />
-              </el-icon>
-              重置
-            </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-      <el-table :data="tableData.data" style="width: 100%" v-loading="tableData.loading">
-        <el-table-column type="index" label="序号" width="55" align="center" />
-        <el-table-column label="时间" prop="dateTime"  min-width="180" />
-        <el-table-column label="换热站" prop="stationName" :show-overflow-tooltip="true" />
-        <el-table-column label="环路名称" prop="name" :show-overflow-tooltip="true" />
-        <el-table-column label="一网供水温度" prop="inTemperature1" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="二网供水温度" prop="inTemperature2" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="一网回水温度" prop="outTemperature1" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="供水流量" prop="supplyWaterFlow" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="回水流量" prop="returnWaterFlow" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="一网供水压力" prop="inPressure1" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="二网供水压力" prop="inPressure2" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="一网回水压力" prop="outPressure1" min-width="120" :show-overflow-tooltip="true" />
-        <el-table-column label="二网回水压力" prop="outPressure2" min-width="120" :show-overflow-tooltip="true" />
-      </el-table>
-      <pagination v-show="tableData.total>0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="typeList" />
-    </el-card>
-  </div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import api from '/@/api/loopSupervision';
-import { useRoute } from 'vue-router';
-
-export default defineComponent({
-  name: 'deviceproduct',
-  setup() {
-    const queryRef = ref();
-    const route = useRoute()
-    const state = reactive({
-      tableData: {
-        data: [],
-        total: 0,
-        loading: false,
-        param: {
-          pageNum: 1,
-          pageSize: 10,
-          types: 'loop',
-          code: '',
-          dateRange: [],
-        },
-      },
-    });
-    // 初始化表格数据
-    const initTableData = () => {
-      state.tableData.param.pageNum = 1
-      typeList();
-    };
-    const typeList = () => {
-      state.tableData.loading = true;
-      api.getLoopHistoryData(state.tableData.param).then((res: any) => {
-        state.tableData.data = res.Data;
-        state.tableData.total = res.Total;
-      }).finally(() => (state.tableData.loading = false));
-    };
-    // 页面加载时
-    onMounted(() => {
-      state.tableData.param.code = route.query.code
-      initTableData();
-    });
-    /** 重置按钮操作 */
-    const resetQuery = (formEl: FormInstance | undefined) => {
-      if (!formEl) return;
-      formEl.resetFields();
-      typeList();
-    };
-    return {
-      queryRef,
-      typeList,
-      resetQuery,
-      ...toRefs(state),
-    };
-  },
-});
-</script>

+ 0 - 394
src/views/heating/monitor/map.vue

@@ -1,394 +0,0 @@
-<template>
-	<div class="page page-full">
-		<div style="position: relative; flex: 1">
-			<div class="map" ref="mapRef" style="height: 100%"></div>
-			<div class="search-hover">
-				<!-- <el-input v-model="searchText" @keydown.enter.native="searchPoint" placeholder="地址搜索" style="width:250px">
-          <template #append>
-            <el-button :icon="Search" @click="searchPoint"></el-button>
-          </template>
-        </el-input> -->
-
-				<el-select
-					v-model="searchText"
-					filterable
-					allow-create
-					default-first-option
-					:reserve-keyword="false"
-					placeholder="地址搜索"
-					style="width: 250px"
-					@change="searchPoint"
-				>
-					<el-option v-for="item in heatList" :key="item.id" :label="item.name" :value="item.id" />
-				</el-select>
-			</div>
-			<!-- 显示弹层区域 -->
-			<div class="view map-hover-station">
-				<div class="view-div" v-for="(item, index) in viewList" :key="index">
-					<div class="view-div-head">
-						<div class="title">{{ item.name }}环路</div>
-						<div class="info">
-							<div class="">环路编号:{{ item.code }}</div>
-							<div class="ml-4">所属换热站:{{ item.stationInfo.name }}</div>
-						</div>
-					</div>
-					<div class="view-div-content">
-						<div>路线信息</div>
-						<div class="mt-1 pl-4">
-							<p v-for="(point, index) in item.loopViaPointInfo" :key="index">
-								{{ point.position }}
-							</p>
-						</div>
-						<div class="mt-1">实时温度</div>
-						<el-table
-							:data="[
-								{
-									outTemperature1: item.outTemperature1,
-									inTemperature1: item.inTemperature1,
-									outTemperature2: item.outTemperature2,
-									inTemperature2: item.inTemperature2,
-								},
-							]"
-							:border="true"
-							class="mt-1"
-						>
-							<el-table-column label="一网供水温度" prop="outTemperature1" :show-overflow-tooltip="true" />
-							<el-table-column label="一网回水温度" prop="inTemperature1" :show-overflow-tooltip="true" />
-							<el-table-column label="二网供水温度" prop="outTemperature2" :show-overflow-tooltip="true" />
-							<el-table-column label="二网回水温度" prop="inTemperature2" :show-overflow-tooltip="true" />
-						</el-table>
-						<div class="mt-1">实时压力(MPa)</div>
-						<el-table
-							:data="[
-								{
-									outPressure1: item.outPressure1,
-									inPressure1: item.inPressure1,
-									outPressure2: item.outPressure2,
-									inPressure2: item.inPressure2,
-								},
-							]"
-							:border="true"
-							class="mt-1"
-						>
-							<el-table-column label="一网供水压力" prop="outPressure1" :show-overflow-tooltip="true" />
-							<el-table-column label="一网回水压力" prop="inPressure1" :show-overflow-tooltip="true" />
-							<el-table-column label="二网供水压力" prop="outPressure2" :show-overflow-tooltip="true" />
-							<el-table-column label="二网回水压力" prop="inPressure2" :show-overflow-tooltip="true" />
-						</el-table>
-					</div>
-				</div>
-			</div>
-		</div>
-	</div>
-</template>
-
-<script lang="ts" setup>
-import { onMounted, ref, watch, nextTick } from 'vue';
-import { Search } from '@element-plus/icons-vue';
-import { useRouter } from 'vue-router';
-import api from '/@/api/heatStation';
-import { setMarker, setLine } from '/@/utils/map';
-import { useStore } from '/@/store/index';
-
-const router = useRouter();
-
-const mapRef = ref();
-const searchText = ref('');
-const store = useStore();
-const heatList = ref([]);
-const viewList = ref<any[]>([]);
-
-let BMapGL = (window as any).BMapGL;
-let map: any = null;
-let local: any = null;
-let getThemeConfig: any = null;
-let points: any = [];
-let loops: any = [];
-
-// 地图弹窗点击去环路详情,进行跳转
-window.mapToDetail = (code: string) => {
-	router.push('/heating-monitor/loopSupervision/loopDetail?code=' + code);
-};
-
-function searchPoint(val: number | string) {
-	if (typeof val === 'number') {
-		map.setZoom(15);
-		const { lat, lnt: lng } = heatList.value.find((item: any) => item.id === val) as any;
-
-		setTimeout(() => {
-			map.centerAndZoom({ lat, lng }, 20);
-		}, 500);
-
-		local && local.search('');
-
-		// 选择的换热站
-	} else {
-		// 自定义的地址搜索
-		if (local) {
-			local.search(searchText.value);
-		} else {
-			local = new BMapGL.LocalSearch(map, {
-				renderOptions: { map },
-			});
-			local.search(searchText.value);
-		}
-	}
-	console.log(val);
-}
-
-onMounted(() => {
-	// 获取布局配置信息
-	getThemeConfig = store.state.themeConfig.themeConfig;
-	map = new BMapGL.Map(mapRef.value, {});
-
-	map.addControl(new BMapGL.ScaleControl()); // 添加比例尺控件
-	map.addControl(new BMapGL.ZoomControl()); // 添加缩放控件
-
-	const testPt = new BMapGL.Point(124.383044, 40.124296);
-	map.centerAndZoom(testPt, 5);
-	map.enableScrollWheelZoom();
-	if (getThemeConfig.isIsDark) {
-		map.setMapStyleV2({
-			styleId: 'b8d841ee37fd5bd41e742049b6fcd0f5',
-		});
-	}
-
-	// 获取环路列表
-	api.heatStation.getAll().then((res: any) => {
-		loops = res;
-		const list = res.filter((item: any) => item.loopViaPointInfo?.length > 1);
-		// console.log(list)
-		setLine(list, map);
-	});
-	// 获取换热站列表
-	api.heatStation
-		.getAllList({
-			status: 1,
-		})
-		.then((res: any) => {
-			heatList.value = res;
-			renderStation(res);
-    });
-    
-	// 地图缩放事件
-  map.addEventListener('zoomend', (e: any) => {
-		// console.log('zoomend', map.getZoom())
-		let zoom = map.getZoom();
-		if (zoom > 18.4 && points.length) {
-			resetAreaPoints()
-		} else {
-			viewList.value = [];
-		}
-  });
-  
-	// 地图拖拽事件
-	map.addEventListener('dragend', (e: any) => {
-		let zoom = map.getZoom();
-		if (zoom > 18.4 && points.length) {
-			resetAreaPoints()
-		} else {
-			viewList.value = [];
-		}
-	});
-	// 获取当前视图内的点
-	// map.getBounds().containsPoint({
-	//   "lng": 124.41798,
-	//   "lat": 40.149303
-	// })
-
-	// window._map = map
-});
-
-function resetAreaPoints() {
-	let arr: any = [];
-	let viewArrCache: any = [];
-
-	points.forEach((point: any) => {
-		if (map.getBounds().containsPoint(point)) {
-			arr.push(point);
-		}
-	});
-	arr.forEach((point: any) => {
-		// 查询环路列表中属于该站点的环路列表,进行显示
-		const theLoops = loops.filter((item: any) => item.stationInfo?.id === point.data.id);
-		viewArrCache = viewArrCache.concat(theLoops);
-	});
-	viewList.value = viewArrCache;
-}
-
-// 监听 vuex 中是否开启深色主题
-watch(
-	() => store.state.themeConfig.themeConfig.isIsDark,
-	(isIsDark) => {
-		nextTick(() => {
-			setTimeout(() => {
-				map.setMapStyleV2({
-					styleId: isIsDark ? 'b8d841ee37fd5bd41e742049b6fcd0f5' : '48b5759a53d0d6f607c049543d4c92e4',
-				});
-			}, 500);
-		});
-	},
-	{
-		deep: true,
-		immediate: true,
-	}
-);
-const renderStation = (list: any[]) => {
-	points = setMarker(list, map);
-	// 控制标点显示在最佳视野内
-	if (points && points.length) {
-		map.setViewport(points);
-	}
-};
-</script>
-
-<style lang="scss">
-[data-theme='dark'] .map-hover-station {
-	.view-div-head,
-	.view-div {
-		color: #fff;
-		background: #222;
-	}
-}
-
-.BMap_bubble_pop {
-	width: 220px;
-	padding: 0 !important;
-	border: none !important;
-	background: transparent !important;
-	color: #fff !important;
-	margin-top: 0;
-	margin-left: -20px;
-	// pointer-events: none;
-
-	& > img {
-		display: none !important;
-	}
-}
-
-.BMap_bubble_content {
-	color: #fff !important;
-}
-// .BMap_bubble_content,
-// .BMap_bubble_center {
-// 	height: 150px !important;
-// }
-
-.BMap_bubble_content {
-	height: auto !important;
-	background: rgba(0, 29, 122, 0.6) !important;
-	border-radius: 3px;
-}
-
-.BMap_bubble_top,
-.BMap_bubble_bottom {
-	display: none !important;
-}
-
-.map-hover-box {
-	color: #fff;
-	font-size: 12px;
-	padding: 10px 14px;
-
-	.map-hover-title {
-		line-height: 18px;
-		font-size: 14px;
-		font-weight: 500;
-	}
-	.map-hover-label {
-		white-space: nowrap;
-	}
-	.map-hover-btn {
-		white-space: nowrap;
-		background: #67c23a;
-		padding: 6px 12px;
-		border-radius: 4px;
-		cursor: pointer;
-	}
-
-	.map-hover-row-item {
-		display: flex;
-		align-items: flex-start;
-		margin-top: 4px;
-		line-height: 1.2;
-
-		// gap: 20px;
-		.map-hover-value {
-			// font-size: 22px;
-			color: #ffd228;
-			font-weight: 500;
-			word-break: break-all;
-		}
-	}
-}
-</style>
-<style scoped lang="scss">
-.map-hover-station {
-	max-height: 98%;
-	overflow-y: auto;
-}
-.view {
-	position: absolute;
-	top: 10px;
-	right: 10px;
-	z-index: 999;
-	// display: flex;
-	&-div {
-		width: 350px;
-		color: #000;
-		background-color: #fff;
-		font-size: 12px;
-		&:not(:first-child) {
-			margin-top: 10px;
-		}
-		&-head {
-			background-color: #f2f2f2;
-			padding: 5px 10px;
-			.title {
-				font-size: 13px;
-				font-weight: bold;
-			}
-			.info {
-				display: flex;
-				align-items: center;
-				margin-top: 4px;
-			}
-		}
-		&-content {
-			padding: 10px;
-		}
-	}
-}
-
-:deep(.el-table) {
-	tr {
-		th {
-			background-color: #efefef;
-		}
-	}
-}
-:deep(.el-table__cell) {
-	padding: 2px 0;
-}
-:deep(.cell) {
-	padding: 0 2px;
-	line-height: 14px;
-	font-weight: 400;
-	font-size: 12px;
-	color: #000;
-}
-.search-hover {
-	position: absolute;
-	top: 10px;
-	left: 10px;
-	z-index: 999;
-	width: 350px;
-	color: #000;
-	font-size: 12px;
-	padding: 10px;
-}
-.suggestId {
-	height: 30px;
-	padding: 0 10px;
-}
-</style>

+ 0 - 266
src/views/heating/monitor/realTimeStatistics/index.vue

@@ -1,266 +0,0 @@
-<template>
-  <div class="system-dic-container">
-		<el-row :gutter="10">
-			<el-col :span="5">
-				<el-card shadow="hover">
-					<el-scrollbar v-loading="treeLoading">
-						<el-input :prefix-icon="search" v-model="searchVal" placeholder="请输入设备树名称" clearable size="default" style="width: 100%;" />
-						<el-tree
-              ref="zlTreeSearchRef"
-              v-if="!treeLoading"
-              :data="treeData"
-              :props="{
-                children: 'children',
-                label: 'name'
-              }"
-              :filter-node-method="filterNode"
-              :default-expand-all="true"
-              :node-key="'id'"
-              highlight-current
-              @node-click="nodeClick">
-              <template #default="{ node }">
-                <div class="custom-tree-node">
-                  <span class="tree-label">
-                    <i class="iconfont icon-wenjianjia icon-wjj mr8" />{{ node.label }}
-                  </span>
-                </div>
-              </template>
-            </el-tree>
-          </el-scrollbar>
-        </el-card>
-      </el-col>
-      <el-col :span="19">
-				<el-card shadow="hover">
-          <el-table :data="tableData.data" v-loading="tableData.loading">
-            <el-table-column :label="item.name + `${item.unit ? `(${item.unit})` : ''}`" :prop="item.key" v-for="(item, index) in tableData
-            .columns" :key="index" :show-overflow-tooltip="true" />
-          </el-table>
-
-          <!-- <div  style="text-align: center;padding: 28px;" v-if="(!tableData.data.length)">暂无数据</div> -->
-        </el-card>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent, getCurrentInstance, watch } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import api from '/@/api/device';
-import LrLayout from '/@/components/lrLayout/index.vue'
-import { Fold, Expand, More, Plus, Edit, Delete, Search } from '@element-plus/icons-vue'
-
-// 定义接口来定义对象的类型
-interface TableDataRow {
-  id: number;
-  name: string;
-  deviceType: string;
-  status: number;
-  desc: string;
-  createBy: string;
-}
-interface TableDataState {
-  ids: number[];
-  tableData: {
-    data: Array<TableDataRow>;
-      columns: Array<any>;
-    total: number;
-    loading: boolean;
-    param: {
-      pageNum: number;
-      pageSize: number;
-      name: string;
-      status: string;
-    };
-  };
-  treeData: any[]
-  deviceList: any[]
-  treeLoading: boolean
-  tabName: string
-  searchVal: string
-  treeDetail: any
-  unitData: any
-  ruleForm: any
-}
-
-export default defineComponent({
-  name: 'realTimeStatistics',
-  components: { LrLayout, Fold, Expand, More, Plus, Edit, Delete, Search },
-  setup() {
-    const { proxy } = getCurrentInstance() as any;
-    const addOrUpdateRef = ref();
-    const queryRef = ref();
-    const state = reactive<TableDataState>({
-      ids: [],
-      tableData: {
-        data: [],
-        columns: [],
-        total: 0,
-        loading: false,
-        param: {
-          pageNum: 1,
-          pageSize: 10,
-          status: '',
-          name: ''
-        },
-      },
-      treeData: [],
-      treeLoading: false,
-      tabName: '1',
-      searchVal: '',
-      treeDetail: {},
-      deviceList: [],
-			unitData: [
-				{ label: '秒', value: 1 },
-				{ label: '分', value: 2 },
-				{ label: '时', value: 3 },
-				{ label: '天', value: 4 },
-			],
-      ruleForm: {
-        duration: '',
-        timeUnit: '',
-        template: 'default',
-        category: 'default'
-      }
-    });
-    let zlTreeSearchRef = ref()
-    watch(() => state.searchVal, (val) => {
-			zlTreeSearchRef.value!.filter(val);
-		});
-
-		const filterNode = (value: string, data: any) => {
-			if (!value) return true;
-			return data.name.includes(value);
-		};
-    
-    // const { tree_types, tree_category } = proxy.useDict('tree_types', 'tree_category');
-    // 初始化表格数据
-    const initTableData = () => {
-      getTreeList();
-
-      nodeClick({ infoId:  1 })
-    };
-    const getTreeList = () => {
-      state.treeLoading = true;
-      api.tree.getList({}).then((res: any) => {
-        state.treeData = res.list;
-      }).finally(() => (state.treeLoading = false));
-    }
-    // 页面加载时
-    onMounted(() => {
-      initTableData();
-    });
-    /** 重置按钮操作 */
-    const resetQuery = (formEl: FormInstance | undefined) => {
-      if (!formEl) return;
-      formEl.resetFields();
-    };
-    // 多选框选中数据
-    const handleSelectionChange = (selection: TableDataRow[]) => {
-      state.ids = selection.map((item) => item.id);
-    };
-    const nodeClick = (data: any) => {
-      api.tree.statistic({ infoId: data.infoId })
-        .then((res: any) => {
-          state.tableData.columns = []
-          state.tableData.data = []
-          if (res.name) {
-            let header = res.header || []
-            let list = res.list || []
-            state.tableData.columns = header
-            state.tableData.data = list.map((item: any) => {
-              return {
-                time: item.time,
-                ...item.data
-              }
-            })
-            state.tableData.columns.unshift({ name: '时间', key: 'time' })
-          }
-          // state.treeDetail = res.data || {}
-        })
-    }
-    const onSaveTime = () => {
-      if (!state.treeDetail.id) {
-        ElMessage.warning('请选择节点树')
-        return
-      }
-      //修改
-      api.tree.edit({
-        ...state.treeDetail,
-        template: state.ruleForm.template,
-        category: state.ruleForm.category,
-        deviceKey: state.ruleForm.deviceKey,
-      }).then(() => {
-        ElMessage.success('修改成功');
-      });
-    }
-
-    const operateCmd = (type: string, data: any) => {
-      switch(type) {
-        case 'add':
-          addOrUpdateRef.value.openDialog(type, data)
-          break
-        case 'edit':
-          addOrUpdateRef.value.openDialog(type, data)
-          break
-        case 'delete':
-          ElMessageBox.confirm('是否删除该设备树', '提示', {
-            confirmButtonText: '确认',
-            cancelButtonText: '取消',
-            type: 'warning',
-          })
-            .then(() => {
-              api.tree.delete({ id: data.infoId }).then(() => {
-                ElMessage.success('删除成功');
-                getTreeList();
-              });
-            })
-            .catch(() => { });
-          break
-      }
-    }
-    return {
-      addOrUpdateRef,
-      queryRef,
-      zlTreeSearchRef,
-      resetQuery,
-      handleSelectionChange,
-      operateCmd,
-      getTreeList,
-      nodeClick,
-      ...toRefs(state),
-      onSaveTime,
-      filterNode
-    };
-  },
-});
-</script>
-
-<style scoped lang="scss">
-.zl-tree-search {
-  margin: 0 12px 0 0;
-  background-color: #fff;
-  border-radius: 4px;
-  &__filter {
-    padding: 4px 10px;
-    border-bottom: 1px solid #EAEAEA;
-  }
-}
-.zl-tree-search__filter :deep .el-input__wrapper {
-  box-shadow: none;
-}
-
-.custom-tree-node {
-  width: 100%;
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  font-size: 14px;
-  padding-right: 8px;
-  &:hover {
-    .tree-options {
-      display: block;
-    }
-  }
-}
-</style>

+ 0 - 177
src/views/heating/monitor/statisticsDetail/index.vue

@@ -1,177 +0,0 @@
-<template>
-  <div class="system-dic-container">
-    <el-card shadow="hover">
-      <div class="system-user-search mb15">
-        <el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="68px">
-          <el-form-item label="区域" prop="area" style="width: 200px;">
-            <el-select v-model="tableData.param.area" placeholder="区域" clearable size="default" style="width: 200px">
-              <el-option v-for="item in areaOptions" :key="item" :label="item" :value="item" />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="管道序号" prop="name" style="width: 200px;">
-            <el-select v-model="tableData.param.name" placeholder="管道序号" clearable size="default" style="width: 200px">
-              <el-option v-for="item in nameOptions" :key="item" :label="item" :value="item" />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="输送单位" prop="company" style="width: 200px;">
-            <el-select v-model="tableData.param.company" placeholder="输送单位" clearable size="default" style="width: 200px">
-              <el-option v-for="item in companyOptions" :key="item" :label="item" :value="item" />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="创建时间" prop="dateRange">
-            <el-date-picker v-model="tableData.param.dateRange" size="default" style="width: 240px" value-format="YYYY-MM-DD" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
-          </el-form-item>
-          <el-form-item label="类型" prop="types" style="width: 200px;">
-            <el-select v-model="tableData.param.types" filterable clearable placeholder="请选择类型" style="width: 200px">
-              <el-option v-for="dict in tree_types_2" :key="dict.value" :label="dict.label" :value="dict.value"> </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item>
-            <el-button size="default" type="primary" class="ml10" @click="typeList">
-              <el-icon>
-                <ele-Search />
-              </el-icon>
-              查询
-            </el-button>
-            <el-button size="default" @click="resetQuery(queryRef)">
-              <el-icon>
-                <ele-Refresh />
-              </el-icon>
-              重置
-            </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-      <el-table :data="tableData.data" style="width: 100%" @selection-change="handleSelectionChange" v-loading="tableData.loading">
-        <el-table-column label="管道" prop="name" :show-overflow-tooltip="true" />
-        <el-table-column label="区域名称" prop="area" :show-overflow-tooltip="true"/>
-        <el-table-column label="用量(m³)" prop="value" :show-overflow-tooltip="true" />
-        <el-table-column label="输送单位" prop="company" :show-overflow-tooltip="true" />
-        <el-table-column label="类型" prop="types" :show-overflow-tooltip="true"/>
-        <el-table-column label="输送时间" prop="datetime" align="center" width="180" ></el-table-column>
-      </el-table>
-      <pagination v-show="tableData.total>0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="typeList" />
-    </el-card>
-  </div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, onMounted, ref, defineComponent, getCurrentInstance } from 'vue';
-import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
-import api from '/@/api/device';
-
-// 定义接口来定义对象的类型
-interface TableDataRow {
-  id: number;
-  name: string;
-  key: string;
-  status: number;
-  desc: string;
-  createBy: string;
-}
-interface TableDataState {
-  ids: number[];
-  tableData: {
-    data: Array<TableDataRow>;
-    total: number;
-    loading: boolean;
-    param: {
-      pageNum: number;
-      pageSize: number;
-      name: string;
-      area: string;
-      company: string;
-      types: string;
-      dateRange: string[];
-    };
-  };
-  nameOptions: string[];
-  areaOptions: string[];
-  companyOptions: string[];
-}
-
-export default defineComponent({
-  name: 'deviceInstance',
-  setup() {
-    const { proxy } = getCurrentInstance() as any;
-    const queryRef = ref();
-    const state = reactive<TableDataState>({
-      ids: [],
-      tableData: {
-        data: [],
-        total: 0,
-        loading: false,
-        param: {
-          pageNum: 1,
-          pageSize: 10,
-          name: '',
-          area: '',
-          company: '',
-          types: '',
-          dateRange: [],
-        },
-      },
-      nameOptions: [],
-      areaOptions: [],
-      companyOptions: []
-    });
-    const { tree_types_2 } = proxy.useDict('tree_types_2');
-    // 初始化表格数据
-    const initTableData = () => {
-      typeList();
-    };
-    const initParam = () => {
-      api.tree.param(state.tableData.param).then((res: any) => {
-        state.nameOptions = res.name || []
-        state.areaOptions = res.area || []
-        state.companyOptions = res.company || []
-      })
-    }
-    const typeList = () => {
-      state.tableData.loading = true;
-      api.tree.record(state.tableData.param).then((res: any) => {
-        state.tableData.data = res.list;
-        state.tableData.total = res.total;
-      }).finally(() => (state.tableData.loading = false));
-    };
-
-    // 页面加载时
-    onMounted(() => {
-      initTableData();
-      initParam()
-    });
-    /** 重置按钮操作 */
-    const resetQuery = (formEl: FormInstance | undefined) => {
-      if (!formEl) return;
-      formEl.resetFields();
-      typeList();
-    };
-    // 多选框选中数据
-    const handleSelectionChange = (selection: TableDataRow[]) => {
-      state.ids = selection.map((item) => item.id);
-    };
-    const onActionStatus = (item: TableDataRow[]) => {
-      if (item.status == 0) {
-        api.instance.devdeploy({ id: item.id }).then((res: any) => {
-          typeList();
-          ElMessage.success(res.message || '操作成功');
-        });
-      } else {
-        api.instance.devundeploy({ id: item.id }).then((res: any) => {
-          typeList();
-          ElMessage.success(res.message || '操作成功');
-        });
-      }
-    }
-    return {
-      queryRef,
-      onActionStatus,
-      typeList,
-      resetQuery,
-      handleSelectionChange,
-      tree_types_2,
-      ...toRefs(state),
-    };
-  },
-});
-</script>

+ 0 - 928
src/views/heating/monitor/weather/index.vue

@@ -1,928 +0,0 @@
-<template>
-  <div class="monitor-weather">
-    <div class="left" :style="{width: isCollapse?'384px':'40px',minWidth: isCollapse?'384px':'40px'}">
-      <SvgIcon class="collapse" :name="isCollapse ? 'ele-Expand' : 'ele-Fold'" :size="16" @click="changeCollapse" />
-      <div class="city-weather-data-overview-wrap" v-if="isCollapse">
-        <section class="title">
-          <span>城市</span>
-          <span>风力</span>
-          <span>日照时长</span>
-        </section>
-        <section style="cursor: pointer" :class="currentcityId == item.id ? 'active' : ''" @click="currentcityId = item.id, currentcityName = item.name" v-for="(item, index) in cityList" :key="index">
-          <span>{{ item.name }}</span>
-          <span>{{ item.windpower }}</span>
-          <span>{{ item.sunshineDuration }}</span>
-        </section>
-      </div>
-    </div>
-    <div class="right">
-      <el-row :gutter="15" class="home-card-two mb15">
-        <el-col>
-          <div class="weather-info">
-            <section v-if="oneCityInfo.weather" style="display: flex;justify-content: space-between;">
-              <div>
-                <span class="temperature">{{ oneCityInfo.Temperature }}℃</span>
-                <img :src="`/imgs/weather/${oneCityInfo.weather}.svg`" alt="">
-                <span class="weather">{{ oneCityInfo.weather }}</span>
-                <span>{{ oneCityInfo.reporttime }}更新</span>
-              </div>
-              <div class="history" @click="$router.push('/heating-monitor/weather-history/' + oneCityInfo.id)">历史数据 &gt;</div>
-            </section>
-            <section>
-              <span style="margin-right: 20px;">地点:{{ currentcityName }}</span>
-              <img src="/@/assets/img/windPowerIcon.svg" alt="">
-              <span>风力: {{ oneCityInfo.winddirection + oneCityInfo.windpower }}</span>
-              <img class="sunset-sunrise" src="/@/assets/img/sunset.svg" alt="">
-              <span class="sunset">日出时间: {{ oneCityInfo.sunrise }}</span>
-              <span>日落时间: {{ oneCityInfo.sunset }}</span>
-            </section>
-          </div>
-        </el-col>
-      </el-row>
-      <el-row :gutter="15" class="home-card-two mb15">
-        <el-col>
-          <div class="home-card-item">
-            <div class="home-card-item-title">
-              <span>温度 监测图表</span>
-              <el-select @change="getTemperatureEchartById(currentcityId)" v-model="temperatureType" placeholder="请选择查询范围" size="mini">
-                <el-option v-for="item in ranges" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </div>
-            <div style="height: 100%" ref="homeTemLineRef"></div>
-          </div>
-        </el-col>
-      </el-row>
-      <el-row :gutter="15" class="home-card-three">
-        <el-col>
-          <div class="home-card-item">
-            <div class="home-card-item-title">
-              <span>风力 监测图表</span>
-              <el-select @change="getWindpowerEchartById(currentcityId)" v-model="windpowerType" placeholder="请选择查询范围" size="mini">
-                <el-option v-for="item in ranges" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </div>
-            <div style="height: 100%" ref="homeWindLineRef"></div>
-          </div>
-        </el-col>
-      </el-row>
-    </div>
-
-  </div>
-</template>
-
-<script lang="ts">
-import { toRefs, reactive, defineComponent, onMounted, ref, watch, nextTick, onActivated } from 'vue';
-import * as echarts from 'echarts';
-import { useStore } from '/@/store/index';
-
-import api from '/@/api/datahub';
-
-let global: any = {
-  homeChartOne: null,
-  homeChartTwo: null,
-  homeCharThree: null,
-  dispose: [null, '', undefined]
-};
-
-export default defineComponent({
-  name: 'weather',
-  setup() {
-    const homeTemLineRef = ref();
-    const homeWindLineRef = ref();
-    const isCollapse = ref(true);
-    const store = useStore();
-    const state = reactive({
-      city: '',
-      cityList: [],
-      oneCityInfo: {} as any,
-      temperatureType: 1,
-      windpowerType: 1,
-      ranges: [
-        {
-          value: 1,
-          label: "日数据"
-        },
-        {
-          value: 2,
-          label: "周数据"
-        },
-        {
-          value: 3,
-          label: "月数据"
-        },
-        {
-          value: 4,
-          label: "年数据"
-        }
-      ],
-      xAxis: [],
-      tem: [],
-      averageTem: [],
-      foreCastInfoTem: [],
-      foreCastAvgInfoTem: [],
-      xAxisWind: [],
-      foreCastInfoWind: [],
-      foreCastAvgInfoWind: [],
-      temWind: [],
-      averageTemWind: [],
-      currentcityId: 0,
-      currentcityName: '',
-      myCharts: [],
-      charts: {
-        theme: '',
-        bgColor: '',
-        color: '#303133',
-      },
-    });
-    // 获取左侧数据
-    const getCityWeatherList = () => {
-      api.weather.getCityWeatherList().then((res: any) => {
-        state.cityList = res.Info;
-        if (!res.Info.length) return;
-        state.currentcityId = res.Info[0].id;
-        state.currentcityName = res.Info[0].name;
-      });
-    };
-
-    // 根据ID获取指定城市的风力图表
-    const getWindpowerEchartById = (id: number) => {
-      api.weather.getWindpowerEchartById({ id: id, types: state.windpowerType }).then((res: any) => {
-        const { AvgInfo, Info, ForeCastInfo,  ForeCastAvgInfo} = res;
-        state.xAxisWind = [];
-        state.temWind = [];
-        state.foreCastInfoWind = [];
-        state.averageTemWind = [];
-        state.foreCastAvgInfoWind = [];
-        if (Info && Info.length) {
-          state.xAxisWind = [];
-          Info.forEach((i: any) => {
-            state.xAxisWind.push(i.time);
-            state.temWind.push(i.value);
-            // state.foreCastInfoWind.push('-');
-          })
-        }
-        if (AvgInfo && AvgInfo.length) {
-          AvgInfo.forEach((i: any) => {
-            state.averageTemWind.push(i.value)
-            // state.foreCastAvgInfoWind.push('-');
-          })
-        }
-        if([2, 3].indexOf(state.windpowerType) > -1) {
-          // 周数据、月数据
-          state.xAxisWind = [];
-          ForeCastInfo.forEach((i: any) => {
-            // state.xAxisWind.push(i.time);
-            // state.temWind.push('-');
-            state.foreCastInfoWind.push(i.value);
-            state.xAxisWind.push(i.time);
-          })
-          ForeCastAvgInfo.forEach((i: any) => {
-            state.foreCastAvgInfoWind.push(i.value);
-          })
-        }
-        nextTick(() => {
-          initWindLineChart();
-        });
-      });
-    };
-
-    // 根据ID获取指定城市的温度图表
-    const getTemperatureEchartById = (id: number) => {
-      api.weather.getTemperatureEchartById({ id: id, types: state.temperatureType }).then((res: any) => {
-        const { AvgInfo, Info, ForeCastLowInfo, ForeCastHighInfo } = res;
-        state.xAxis = [];
-        state.tem = [];
-        state.foreCastInfoTem = [];
-        state.averageTem = [];
-        state.foreCastAvgInfoTem = [];
-        if (Info && Info.length) {
-          state.xAxis = [];
-          Info.forEach((i: any) => {
-            state.xAxis.push(i.time);
-            state.tem.push(i.value);
-            // state.foreCastInfoTem.push('-');
-          })
-        }
-        if (AvgInfo && AvgInfo.length) {
-          AvgInfo.forEach((i: any) => {
-            state.averageTem.push(i.value)
-            // state.foreCastAvgInfoTem.push('-');
-          })
-        }
-        
-        if([2, 3].indexOf(state.temperatureType) > -1) {
-          // 周数据、月数据
-          state.xAxis = [];
-          ForeCastLowInfo.forEach((i:any) => {
-            // state.xAxis.push(i.time);
-            // state.tem.push('-');
-            state.xAxis.push(i.time);
-            state.foreCastInfoTem.push(i.value);
-          })
-          ForeCastHighInfo.forEach((i: any) => {
-            state.foreCastAvgInfoTem.push(i.value);
-          })
-        }
-        console.log(state.xAxis)
-        nextTick(() => {
-          initTemLineChart();
-        });
-      });
-    };
-
-    // 获取顶部天气数据
-    const getWhichCityWeather = (id: number) => {
-      api.weather.getWhichCityWeather({ id: id }).then((res: any) => {
-        state.oneCityInfo = res.Info
-      });
-    };
-
-    // 温度折线图
-    const initTemLineChart = () => {
-      if (!global.dispose.some((b: any) => b === global.homeChartOne)) global.homeChartOne.dispose();
-      global.homeChartOne = <any>echarts.init(homeTemLineRef.value, state.charts.theme);
-
-      const option = {
-        backgroundColor: state.charts.bgColor,
-        grid: { top: 70, right: 40, bottom: 50, left: 40 },
-        tooltip: { trigger: 'axis' },
-        legend: { data: [2, 3].indexOf(state.temperatureType) > -1 ? ['平均气温(℃)', '最低温度(℃)', '最高温度(℃)'] : ['气温(℃)', '平均气温(℃)'], left: '0' },
-        xAxis: {
-          data: state.xAxis
-        },
-        yAxis: [
-          {
-            type: 'value',
-            axisLabel: {
-              formatter: "{value}℃"
-            },
-            splitLine: { show: true, lineStyle: { type: 'dashed', color: '#f5f5f5' } },
-          },
-        ],
-        series:  [2, 3].indexOf(state.temperatureType) > -1 ? [
-          {
-            name: '平均气温(℃)',
-            type: 'line',
-            symbolSize: 6,
-            symbol: 'circle',
-            smooth: true,
-            // data: [0, 41.1, 30.4, 65.1, 53.3, 53.3, 53.3, 41.1, 30.4, 65.1, 53.3, 10],
-            data: state.averageTem,
-            lineStyle: { color: '#fe9a8b' },
-            itemStyle: { color: '#fe9a8b', borderColor: '#fe9a8b' },
-            areaStyle: {
-              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-                { offset: 0, color: '#fe9a8bb3' },
-                { offset: 1, color: '#fe9a8b03' },
-              ]),
-            },
-          },
-          {
-            name: '最低温度(℃)',
-            type: 'line',
-            symbolSize: 6,
-            symbol: 'circle',
-            smooth: true,
-            // data: [0, 41.1, 30.4, 65.1, 53.3, 53.3, 53.3, 41.1, 30.4, 65.1, 53.3, 10],
-            data: state.foreCastInfoTem,
-            lineStyle: { color: '#2b79ff' },
-            itemStyle: { color: '#2b79ff', borderColor: '#2b79ff' },
-            areaStyle: {
-              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-                { offset: 0, color: '#2b79ff' },
-                { offset: 1, color: '#c5e3ed' },
-              ]),
-            },
-          },
-          {
-            name: '最高温度(℃)',
-            type: 'line',
-            symbolSize: 6,
-            symbol: 'circle',
-            smooth: true,
-            data: state.foreCastAvgInfoTem,
-            lineStyle: { color: '#41b883' },
-            itemStyle: { color: '#41b883', borderColor: '#41b883' },
-            areaStyle: {
-              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-                { offset: 0, color: '#41b883' },
-                { offset: 1, color: '#ddf2eaab' },
-              ]),
-            },
-            emphasis: {
-              itemStyle: {
-                color: {
-                  type: 'radial',
-                  x: 0.5,
-                  y: 0.5,
-                  r: 0.5,
-                  colorStops: [
-                    { offset: 0, color: '#9E87FF' },
-                    { offset: 0.4, color: '#9E87FF' },
-                    { offset: 0.5, color: '#fff' },
-                    { offset: 0.7, color: '#fff' },
-                    { offset: 0.8, color: '#fff' },
-                    { offset: 1, color: '#fff' },
-                  ],
-                },
-                borderColor: '#9E87FF',
-                borderWidth: 2,
-              },
-            },
-          },
-        ]: [{
-            name: '气温(℃)',
-            type: 'line',
-            symbolSize: 6,
-            symbol: 'circle',
-            smooth: true,
-            // data: [0, 41.1, 30.4, 65.1, 53.3, 53.3, 53.3, 41.1, 30.4, 65.1, 53.3, 10],
-            data: state.tem,
-            lineStyle: { color: '#fe9a8b' },
-            itemStyle: { color: '#fe9a8b', borderColor: '#fe9a8b' },
-            areaStyle: {
-              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-                { offset: 0, color: '#fe9a8bb3' },
-                { offset: 1, color: '#fe9a8b03' },
-              ]),
-            },
-          },
-          {
-            name: '平均气温(℃)',
-            type: 'line',
-            symbolSize: 6,
-            symbol: 'circle',
-            smooth: true,
-            data: state.averageTem,
-            lineStyle: { color: '#9E87FF' },
-            itemStyle: { color: '#9E87FF', borderColor: '#9E87FF' },
-            areaStyle: {
-              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-                { offset: 0, color: '#9E87FFb3' },
-                { offset: 1, color: '#9E87FF03' },
-              ]),
-            },
-            emphasis: {
-              itemStyle: {
-                color: {
-                  type: 'radial',
-                  x: 0.5,
-                  y: 0.5,
-                  r: 0.5,
-                  colorStops: [
-                    { offset: 0, color: '#9E87FF' },
-                    { offset: 0.4, color: '#9E87FF' },
-                    { offset: 0.5, color: '#fff' },
-                    { offset: 0.7, color: '#fff' },
-                    { offset: 0.8, color: '#fff' },
-                    { offset: 1, color: '#fff' },
-                  ],
-                },
-                borderColor: '#9E87FF',
-                borderWidth: 2,
-              },
-            },
-          },],
-      };
-      (<any>global.homeChartOne).setOption(option);
-      (<any>state.myCharts).push(global.homeChartOne);
-    };
-    // 风力折线图
-    const initWindLineChart = () => {
-      if (!global.dispose.some((b: any) => b === global.homeChartTwo)) global.homeChartTwo.dispose();
-      global.homeChartTwo = <any>echarts.init(homeWindLineRef.value, state.charts.theme);
-      const option = {
-        backgroundColor: state.charts.bgColor,
-        grid: { top: 70, right: 40, bottom: 50, left: 40 },
-        tooltip: { trigger: 'axis' },
-        legend: { data: [2, 3].indexOf(state.windpowerType) > -1 ? ['风力(级)', '平均风力(级)', '预测风力(级)', '预测平均风力(级)'] : ['风力(级)', '平均风力(级)'], left: '0' },
-        xAxis: {
-          data: state.xAxisWind
-        },
-        yAxis: [
-          {
-            type: 'value',
-            axisLabel: {
-              formatter: "{value}级"
-            },
-            splitLine: { show: true, lineStyle: { type: 'dashed', color: '#f5f5f5' } },
-          },
-        ],
-        series: [
-          {
-            name: '风力(级)',
-            type: 'line',
-            symbolSize: 6,
-            symbol: 'circle',
-            smooth: true,
-            data: state.temWind,
-            lineStyle: { color: '#fe9a8b' },
-            itemStyle: { color: '#fe9a8b', borderColor: '#fe9a8b' },
-            areaStyle: {
-              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-                { offset: 0, color: '#fe9a8bb3' },
-                { offset: 1, color: '#fe9a8b03' },
-              ]),
-            },
-          },
-          {
-            name: '预测风力(级)',
-            type: 'line',
-            symbolSize: 6,
-            symbol: 'circle',
-            smooth: true,
-            data: state.foreCastInfoWind,
-            lineStyle: { color: '#2b79ff' },
-            itemStyle: { color: '#2b79ff', borderColor: '#2b79ff' },
-            areaStyle: {
-              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-                { offset: 0, color: '#2b79ff' },
-                { offset: 1, color: '#c5e3ed' },
-              ]),
-            },
-          },
-          {
-            name: '平均风力(级)',
-            type: 'line',
-            symbolSize: 6,
-            symbol: 'circle',
-            smooth: true,
-            data: state.averageTemWind,
-            lineStyle: { color: '#9E87FF' },
-            itemStyle: { color: '#9E87FF', borderColor: '#9E87FF' },
-            areaStyle: {
-              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-                { offset: 0, color: '#9E87FFb3' },
-                { offset: 1, color: '#9E87FF03' },
-              ]),
-            },
-            emphasis: {
-              itemStyle: {
-                color: {
-                  type: 'radial',
-                  x: 0.5,
-                  y: 0.5,
-                  r: 0.5,
-                  colorStops: [
-                    { offset: 0, color: '#9E87FF' },
-                    { offset: 0.4, color: '#9E87FF' },
-                    { offset: 0.5, color: '#fff' },
-                    { offset: 0.7, color: '#fff' },
-                    { offset: 0.8, color: '#fff' },
-                    { offset: 1, color: '#fff' },
-                  ],
-                },
-                borderColor: '#9E87FF',
-                borderWidth: 2,
-              },
-            },
-          },
-          {
-            name: '预测平均风力(级)',
-            type: 'line',
-            symbolSize: 6,
-            symbol: 'circle',
-            smooth: true,
-            data: state.foreCastAvgInfoWind,
-            lineStyle: { color: '#41b883' },
-            itemStyle: { color: '#41b883', borderColor: '#41b883' },
-            areaStyle: {
-              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-                { offset: 0, color: '#41b883' },
-                { offset: 1, color: '#ddf2eaab' },
-              ]),
-            },
-            emphasis: {
-              itemStyle: {
-                color: {
-                  type: 'radial',
-                  x: 0.5,
-                  y: 0.5,
-                  r: 0.5,
-                  colorStops: [
-                    { offset: 0, color: '#9E87FF' },
-                    { offset: 0.4, color: '#9E87FF' },
-                    { offset: 0.5, color: '#fff' },
-                    { offset: 0.7, color: '#fff' },
-                    { offset: 0.8, color: '#fff' },
-                    { offset: 1, color: '#fff' },
-                  ],
-                },
-                borderColor: '#9E87FF',
-                borderWidth: 2,
-              },
-            },
-          },
-        ],
-      };
-      (<any>global.homeChartTwo).setOption(option);
-      (<any>state.myCharts).push(global.homeChartTwo);
-    };
-    // 批量设置 echarts resize
-    const initEchartsResizeFun = () => {
-      nextTick(() => {
-        for (let i = 0; i < state.myCharts.length; i++) {
-          setTimeout(() => {
-            (<any>state.myCharts[i]).resize();
-          }, 0);
-        }
-      });
-    };
-    // 批量设置 echarts resize
-    const changeCollapse = () => {
-      isCollapse.value = !isCollapse.value;
-      initEchartsResizeFun()
-    };
-    // 批量设置 echarts resize
-    const initEchartsResize = () => {
-      window.addEventListener('resize', initEchartsResizeFun);
-    };
-    // 页面加载时
-    onMounted(() => {
-      initEchartsResize();
-      getCityWeatherList();
-    });
-    // 由于页面缓存原因,keep-alive
-    onActivated(() => {
-      initEchartsResizeFun();
-    });
-    // 监听 vuex 中的 tagsview 开启全屏变化,重新 resize 图表,防止不出现/大小不变等
-    watch(
-      () => store.state.tagsViewRoutes.isTagsViewCurrenFull,
-      () => {
-        initEchartsResizeFun();
-      }
-    );
-    // 监听 vuex 中是否开启深色主题
-    watch(
-      () => store.state.themeConfig.themeConfig.isIsDark,
-      (isIsDark) => {
-        nextTick(() => {
-          state.charts.theme = isIsDark ? 'dark' : '';
-          state.charts.bgColor = isIsDark ? 'transparent' : '';
-          state.charts.color = isIsDark ? '#dadada' : '#303133';
-          setTimeout(() => {
-            initTemLineChart();
-          }, 500);
-          setTimeout(() => {
-            initWindLineChart();
-          }, 700);
-        });
-      },
-      {
-        deep: true,
-        immediate: true,
-      }
-    );
-    watch(
-      () => state.currentcityId,
-      () => {
-        getWhichCityWeather(state.currentcityId);
-        getTemperatureEchartById(state.currentcityId);
-        getWindpowerEchartById(state.currentcityId)
-      }
-    );
-    return {
-      changeCollapse,
-      isCollapse,
-      homeTemLineRef,
-      homeWindLineRef,
-      getWhichCityWeather,
-      getCityWeatherList,
-      getTemperatureEchartById,
-      getWindpowerEchartById,
-      ...toRefs(state),
-    };
-  },
-});
-</script>
-
-<style scoped lang="scss">
-$homeNavLengh: 8;
-.history{
-  font-weight: bold;
-  cursor: pointer;
-}
-.monitor-weather {
-	overflow: hidden;
-	display: flex;
-	background-color: #fff;
-	padding: 20px;
-	justify-content: space-between;
-
-	.left {
-		width: 384px;
-		height: 500px;
-		margin-right: 20px;
-		position: relative;
-		.collapse {
-			position: absolute;
-			top: 0;
-			right: 0;
-			z-index: 1;
-			padding: 5px;
-			width: 36px;
-			height: 36px;
-			cursor: pointer;
-		}
-
-		.city-weather-data-overview-wrap {
-			border: 1px solid #f2f2f2;
-
-			section.title {
-				font-size: 18px;
-				font-weight: bold;
-				color: #1a1a1a;
-				padding-top: 30px;
-			}
-
-			section {
-				padding: 20px 0;
-
-				span {
-					display: inline-block;
-					width: 33%;
-					text-align: center;
-				}
-
-				span:nth-child(2) {
-					border-left: 1px solid #f2f2f2;
-					border-right: 1px solid #f2f2f2;
-				}
-			}
-
-			section:nth-child(2n) {
-				background-color: #fff;
-			}
-
-			section:nth-child(2n + 1) {
-				background-color: #f8f8f8;
-			}
-
-			section.active {
-				background: var(--el-color-primary-light-9);
-			}
-		}
-	}
-
-	.right {
-		flex: 1;
-		height: 100%;
-		overflow: hidden;
-
-		.weather-info {
-			padding: 15px 30px 15px 30px;
-			background: var(--el-color-white);
-			color: var(--el-text-color-primary);
-			border: 1px solid var(--next-border-color-light);
-
-			section:nth-child(1) {
-				margin-bottom: 12px;
-			}
-
-			section {
-				display: flex;
-				justify-content: flex-start;
-				align-items: center;
-
-				.temperature {
-					font-size: 50px;
-					font-weight: bold;
-				}
-
-				img {
-					margin: 0 10px 0 30px;
-				}
-
-				.weather {
-					margin-right: 30px;
-				}
-
-				img {
-					width: 24px;
-				}
-
-				.sunset-sunrise {
-					margin: 0 8xpx 0 47px;
-				}
-
-				.sunset {
-					margin-right: 40px;
-				}
-			}
-		}
-	}
-
-	.home-card-two,
-	.home-card-three {
-		.home-card-item,
-		.home-card-top {
-			width: 100%;
-			height: 130px;
-			border-radius: 4px;
-			transition: all ease 0.3s;
-			padding: 20px;
-			overflow: hidden;
-			background: var(--el-color-white);
-			color: var(--el-text-color-primary);
-			border: 1px solid var(--next-border-color-light);
-
-			&:hover {
-				box-shadow: 0 2px 12px var(--next-color-dark-hover);
-				transition: all ease 0.3s;
-			}
-
-			&-icon {
-				width: 70px;
-				height: 70px;
-				border-radius: 100%;
-				flex-shrink: 1;
-
-				i {
-					color: var(--el-text-color-placeholder);
-				}
-			}
-
-			&-title {
-				font-size: 15px;
-				font-weight: bold;
-				height: 30px;
-			}
-		}
-	}
-
-	// .home-card-one {
-	// 	@for $i from 0 through 3 {
-	// 		.home-one-animation#{$i} {
-	// 			opacity: 0;
-	// 			animation-name: error-num;
-	// 			animation-duration: 0.5s;
-	// 			animation-fill-mode: forwards;
-	// 			animation-delay: calc($i/10) + s;
-	// 		}
-	// 	}
-	// }
-	.home-card-item-title {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-	}
-
-	// .home-card-one .home-card-item {
-	// 		width: 100%;
-	// 		border-radius: 4px;
-	// 		transition: all ease 0.3s;
-	// 		overflow: hidden;
-	// 		background: var(--el-color-white);
-	// 		color: var(--el-text-color-primary);
-	// 		border: 1px solid var(--next-border-color-light);
-	// 		&:hover {
-	// 			box-shadow: 0 2px 12px var(--next-color-dark-hover);
-	// 			transition: all ease 0.3s;
-	// 		}
-	// 		.item-header {
-	// 			display: flex;
-	// 			justify-content: center;
-	// 			align-content: center;
-	// 			color: #101010;
-	// 			padding: 10px 0;
-	// 			border-bottom: 1px solid var(--next-border-color-light);
-	// 			font-size: 20px;
-	// 			font-weight: bold;
-	// 			img {
-	// 				margin-right: 32px;
-	// 				width: 24px;
-	// 				height: 24px;;
-	// 				margin-top: 3px;
-	// 			}
-	// 		}
-	// 		.item-content {
-	// 			padding: 26px;
-	// 			p {
-	// 				display: flex;
-	// 				justify-content: space-between;
-	// 				align-content: center;
-	// 				span:nth-child(1) {
-	// 					// padding-top: 4px;
-	// 					line-height: 33px;;
-	// 					font-size: 14px;
-	// 				}
-	// 				span:nth-child(2) {
-	// 					color: #101010;
-	// 					font-weight: bold;
-	// 					font-size: 22px;
-	// 				}
-	// 			}
-	// 			p:nth-child(2) {
-	// 				margin-top: 26px;
-	// 			}
-	// 		}
-	// }
-
-	.home-card-two,
-	.home-card-three {
-		.home-card-item {
-			height: 500px;
-		}
-
-		.home-card-top {
-			height: 250px;
-
-			.box-card {
-				padding: 15px 20px 20px 20px;
-
-				p {
-					margin-bottom: 10px;
-				}
-
-				&-item {
-					margin-bottom: 20px;
-				}
-			}
-		}
-
-		.home-card-item,
-		.home-card-top {
-			width: 100%;
-			overflow: hidden;
-
-			.home-monitor {
-				height: 100%;
-
-				.flex-warp-item {
-					width: 25%;
-					height: 111px;
-					display: flex;
-
-					.flex-warp-item-box {
-						margin: auto;
-						text-align: center;
-						color: var(--el-text-color-primary);
-						display: flex;
-						border-radius: 5px;
-						background: var(--next-bg-color);
-						cursor: pointer;
-						transition: all 0.3s ease;
-
-						&:hover {
-							background: var(--el-color-primary-light-9);
-							transition: all 0.3s ease;
-						}
-					}
-
-					@for $i from 0 through $homeNavLengh {
-						.home-animation#{$i} {
-							opacity: 0;
-							animation-name: error-num;
-							animation-duration: 0.5s;
-							animation-fill-mode: forwards;
-							animation-delay: calc($i/10) + s;
-						}
-					}
-				}
-			}
-		}
-	}
-
-	.text-info {
-		color: #23c6c8;
-	}
-
-	.text-danger {
-		color: #ed5565;
-	}
-
-	.git-res {
-		margin-top: 20px;
-	}
-
-	.git-res .el-link {
-		margin-right: 30px;
-	}
-
-	ul,
-	li {
-		padding: 0;
-		margin: 0;
-		list-style: none;
-	}
-
-	.product {
-		margin-top: 50px;
-
-		h3 {
-			margin-bottom: 15px;
-		}
-	}
-
-	.product li {
-		margin-bottom: 20px;
-		float: left;
-		width: 150px;
-	}
-
-	.box-card.xx {
-		margin-top: 20px;
-	}
-}
-</style>

+ 0 - 7
src/views/home/index.vue

@@ -1,7 +0,0 @@
-<template>
-  <home-vue></home-vue>
-</template>
-
-<script lang="ts" setup>
-import homeVue from '/@/views/heating/home/index.vue';
-</script>