Parcourir la source

添加城市管理

vera_min il y a 3 ans
Parent
commit
535f446709

+ 7 - 0
src/api/system/index.ts

@@ -127,5 +127,12 @@ export default {
     run: (id: number) => put('/system/job/run', { id }),
     start: (id: number) => put('/system/job/start', { id }),
     stop: (id: number) => put('/system/job/stop', { id })
+  },
+  city: {
+    getList: (params: object) => get('/common/city/tree', params),
+    add: (data: object) => post('/common/city/tree', data),
+    edit: (data: object) => put('/common/city/edit', data),
+    del: (id: number) => del('/common/city/del', { id }),
+    detail: (id: number) => get('/common/city/getInfoById', { id }),
   }
 }

+ 231 - 0
src/views/system/city/component/edit.vue

@@ -0,0 +1,231 @@
+<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="code">
+					<el-input v-model="ruleForm.code" 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, onMounted } from 'vue';
+import api 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;
+	code:  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: '',
+				code: '',
+				status: 1
+				// position: '',
+				// lnt: '',
+				// lat: '',
+				// principal: '',
+				// types: 1,
+				// status: 1
+			},
+			keyword: '',
+			rules: {
+				name: [{ required: true, message: '换热站名称不能为空', trigger: 'blur' }],
+				code: [{ required: true, message: '城市编码不能为空', trigger: 'blur' }],
+				status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
+			},
+			treeData: [],
+			dataHubList: [],
+			mapLocal: null as any
+		})
+		const store = useStore();
+		// 打开弹窗
+		const openDialog = (row: any, tree: any) => {
+			resetForm()
+			queryDataHubList()
+			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 resetForm = () => {
+			state.ruleForm = {
+				id: 0,
+				parentId: '',
+				name: '',
+				code: ''
+			}
+		}
+		// 关闭弹窗
+		const closeDialog = () => {
+			state.dialogVisible = false
+		}
+		// 取消
+		const onCancel = () => {
+			closeDialog()
+			state.keyword = ''
+		}
+		const getDetail = () => {
+			api.city.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.city.edit(params).then(() => {
+							ElMessage.success('城市修改成功')
+							emit('queryList')
+							closeDialog() // 关闭弹窗
+						})
+					} else {
+						//添加
+						console.log(params)
+						api.city.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>

+ 202 - 0
src/views/system/city/index.vue

@@ -0,0 +1,202 @@
+<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" 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-button size="default" type="success" class="ml10" @click="onOpenAddDic">
+              <el-icon>
+                <ele-FolderAdd />
+              </el-icon>
+              新增
+            </el-button>
+            <!-- <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 label="城市名称" prop="name" :show-overflow-tooltip="true" />
+	    	<el-table-column label="城市编号" prop="code" :show-overflow-tooltip="true" />
+	    	<el-table-column label="状态" prop="status" width="80">
+                <template #default="scope">
+					{{ scope.row.status === 1 ? '在线' : '不在线' }}
+                </template>
+            </el-table-column>
+	    	<el-table-column label="创建时间" prop="createdAt" :show-overflow-tooltip="true" />
+            <el-table-column label="操作" width="200" 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 api from '/@/api/system';
+
+// 定义接口来定义对象的类型
+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: 'cityManage',
+	components: { EditDic },
+	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.city.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);
+		};
+		return {
+			addDicRef,
+			editDicRef,
+			// detailRef,
+			queryRef,
+			// onOpenDetail,
+			onOpenAddDic,
+			onOpenEditDic,
+			onRowDel,
+			queryList,
+			resetQuery,
+			handleSelectionChange,
+			...toRefs(state),
+		};
+	},
+});
+</script>