Explorar o código

feat:统一编码,逻辑测点,场站测点,电气测点,实时数据库配置

chenxinlei %!s(int64=2) %!d(string=hai) anos
pai
achega
a051e3ca5a

+ 198 - 0
src/api/realtimeDatabaseConfiguration.js

@@ -135,7 +135,205 @@ const deleteProjectstudy = (data) => {
     method: 'delete',
   })
 }
+// GET
+// /pro-econ-uniform-code/list
+// 统一编码表-列表
+// DELETE
+// /pro-econ-uniform-code/remove-by-ids
+// 统一编码-删除
+// POST
+// /pro-econ-uniform-code/save-uniform_code
+// 统一编码-新增
+const uniformList = (data) => {
+  return request({
+    url: `/pro-econ-uniform-code/list?nemCode=${data.nemCode}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
+    method: 'get',
+  })
+}
+const addUniform = (pairs) => {
+  return request({
+    url: `/pro-econ-uniform-code/save-uniform_code`,
+    method: 'post',
+    data: pairs,
+  })
+}
+const deleteUniform = (data) => {
+  return request({
+    url: `/pro-econ-uniform-code/remove-by-ids?ids=${data.id}`,
+    method: 'delete',
+  })
+}
+// DELETE
+// /pro-econ-testing-point/{ids}
+// 逻辑测点配置-删除
+// POST
+// /pro-econ-testing-point/add
+// 逻辑测点配置-新增or修改
+// GET
+// /pro-econ-testing-point/list
+// 逻辑测点配置-列表
+const testingList = (data) => {
+  return request({
+    url: `/pro-econ-testing-point/list?nemCode=${data.nemCode}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
+    method: 'get',
+  })
+}
+const addTesting = (pairs) => {
+  return request({
+    url: `/pro-econ-testing-point/add`,
+    method: 'post',
+    data: pairs,
+  })
+}
+const deleteTesting = (data) => {
+  return request({
+    url: `/pro-econ-testing-point/${data.id}`,
+    method: 'delete',
+  })
+}
+// GET
+// /pro-basic-equipment-point/{id}
+// 设备测点-列表
+// DELETE
+// /pro-basic-equipment-point/{ids}
+// 设备测点-批量删除
+// POST
+// /pro-basic-equipment-point/add
+// 设备测点-新增(修改)
+// PUT
+// /pro-basic-equipment-point/editPointnew
+// 设备测点-批量修改
+// GET
+// /pro-basic-equipment-point/list
+// 设备测点-列表
+const equipmentPointList = (data) => {
+  return request({
+    url: `/pro-basic-equipment-point/list?name=${data.name}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
+    method: 'get',
+  })
+}
+const addEquipmentPoint = (pairs) => {
+  return request({
+    url: `/pro-basic-equipment-point/add`,
+    method: 'post',
+    data: pairs,
+  })
+}
+const deleteEquipmentPoint = (data) => {
+  return request({
+    url: `/pro-basic-equipment-point/${data.id}`,
+    method: 'delete',
+  })
+}
+// GET
+// /pro-basic-wppoint/{id}
+// 场站测点-更具主键查询
+// DELETE
+// /pro-basic-wppoint/{ids}
+// 场站测点-批量删除
+// POST
+// /pro-basic-wppoint/add
+// 场站测点-新增(修改)
+// PUT
+// /pro-basic-wppoint/editPointnew
+// 场站测点-批量修改
+// GET
+// /pro-basic-wppoint/list
+// 场站测点-列表
+const wppointList = (data) => {
+  return request({
+    url: `/pro-basic-wppoint/list?name=${data.name}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
+    method: 'get',
+  })
+}
+const addWppoint = (pairs) => {
+  return request({
+    url: `/pro-basic-wppoint/add`,
+    method: 'post',
+    data: pairs,
+  })
+}
+const deleteWppoint = (data) => {
+  return request({
+    url: `/pro-basic-wppoint/${data.id}`,
+    method: 'delete',
+  })
+}
+// DELETE
+// /pro-econ-electricaltest-point/{ids}
+// 电气测点-删除
+// POST
+// /pro-econ-electricaltest-point/add
+// 电气测点-新增or修改
+// GET
+// /pro-econ-electricaltest-point/list
+// 电气测点-列表
+const electricaltestList = (data) => {
+  return request({
+    url: `/pro-econ-electricaltest-point/list?name=${data.name}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
+    method: 'get',
+  })
+}
+const addElectricaltest = (pairs) => {
+  return request({
+    url: `/pro-econ-electricaltest-point/add`,
+    method: 'post',
+    data: pairs,
+  })
+}
+const deleteElectricaltest = (data) => {
+  return request({
+    url: `/pro-econ-electricaltest-point/${data.id}`,
+    method: 'delete',
+  })
+}
+// GET
+// /pro-basic-realtime-dbconfig/listByPage
+// 实时数据库配置-列表
+// DELETE
+// /pro-basic-realtime-dbconfig/remove-Realtime/{ids}
+// 实时数据库配置-删除
+// POST
+// /pro-basic-realtime-dbconfig/save
+// 实时数据库配置-新增or修改
+const dbconfigListByPage = (data) => {
+  return request({
+    url: `/pro-basic-realtime-dbconfig/listByPage?surName=${data.surName}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
+    method: 'get',
+  })
+}
+const addDbconfig = (pairs) => {
+  return request({
+    url: `/pro-basic-realtime-dbconfig/save`,
+    method: 'post',
+    data: pairs,
+  })
+}
+const deleteDbconfig = (data) => {
+  return request({
+    url: `/pro-basic-realtime-dbconfig/remove-Realtime/${data.id}`,
+    method: 'delete',
+  })
+}
 export default {
+  dbconfigListByPage,
+  addDbconfig,
+  deleteDbconfig,
+  electricaltestList,
+  addElectricaltest,
+  deleteElectricaltest,
+  wppointList,
+  addWppoint,
+  deleteWppoint,
+  equipmentPointList,
+  addEquipmentPoint,
+  deleteEquipmentPoint,
+  testingList,
+  addTesting,
+  deleteTesting,
+  uniformList,
+  addUniform,
+  deleteUniform,
   database,
   addDatabase,
   deleteDatabase,

+ 51 - 17
src/router/index.js

@@ -139,6 +139,13 @@ export const asyncRoutes = [
         meta: { title: '设备类型' },
       },
       {
+        path: 'equipmentPoint',
+        name: 'equipmentPoint',
+        component: () =>
+          import('@/views/stationConfiguration/equipmentPoint/index'),
+        meta: { title: '设备测点' },
+      },
+      {
         path: 'windsubstation',
         name: 'windsubstation',
         component: () =>
@@ -152,6 +159,33 @@ export const asyncRoutes = [
           import('@/views/stationConfiguration/projectstudy/index'),
         meta: { title: '可研电量' },
       },
+      {
+        path: 'unifyCode',
+        name: 'unifyCode',
+        component: () => import('@/views/stationConfiguration/unifyCode/index'),
+        meta: { title: '统一编码' },
+      },
+      {
+        path: 'logicPoint',
+        name: 'logicPoint',
+        component: () =>
+          import('@/views/stationConfiguration/logicPoint/index'),
+        meta: { title: '逻辑测点' },
+      },
+      {
+        path: 'stationMeasure',
+        name: 'stationMeasure',
+        component: () =>
+          import('@/views/stationConfiguration/stationMeasure/index'),
+        meta: { title: '场站测点' },
+      },
+      {
+        path: 'electricStation',
+        name: 'electricStation',
+        component: () =>
+          import('@/views/stationConfiguration/electricStation/index'),
+        meta: { title: '电气测点' },
+      },
       // {
       //   path: 'admlist',
       //   name: 'admlist',
@@ -195,23 +229,23 @@ export const asyncRoutes = [
   //     },
   //   ],
   // },
-  // {
-  //   path: '/realDatabaseConfig',
-  //   component: Layout,
-  //   redirect: 'noRedirect',
-  //   children: [
-  //     {
-  //       path: 'realDatabaseConfig',
-  //       name: 'realDatabaseConfig',
-  //       component: () => import('@/views/realDatabaseConfig/index'),
-  //       meta: {
-  //         title: '实时数据库配置',
-  //         icon: 'allergies',
-  //         permissions: ['admin'],
-  //       },
-  //     },
-  //   ],
-  // },
+  {
+    path: '/realDatabaseConfig',
+    component: Layout,
+    redirect: 'noRedirect',
+    children: [
+      {
+        path: 'realDatabaseConfig',
+        name: 'realDatabaseConfig',
+        component: () => import('@/views/realDatabaseConfig/index'),
+        meta: {
+          title: '实时数据库配置',
+          icon: 'allergies',
+          permissions: ['admin'],
+        },
+      },
+    ],
+  },
 
   // {
   //   path: "/square",

+ 37 - 81
src/views/realDatabaseConfig/components/TableEdit.vue

@@ -1,62 +1,20 @@
 <template>
 	<el-dialog :title="title" :visible.sync="dialogFormVisible" width="800px" @close="close">
 		<el-form ref="form" :model="form" :rules="rules" label-width="120px">
-			<div class="lists">
-				<el-form-item label="id" prop="id">
-					<el-input class="inputs" v-model="form.id" autocomplete="off" :disabled="!idAdd?true:false"></el-input>
-				</el-form-item>
-				<el-form-item label="服务姓" prop="surname">
-					<el-input class="inputs" v-model.trim="form.surname" autocomplete="off"></el-input>
-				</el-form-item>
-			</div>
-			<div class="lists">
-				<el-form-item label="服务名历史" prop="namehist" width="150">
-					<el-input class="inputs" v-model="form.namehist" autocomplete="off"></el-input>
-				</el-form-item>
-				<el-form-item label="服务名配置" prop="namecmcfg">
-					<el-input class="inputs" v-model="form.namecmcfg" autocomplete="off"></el-input>
-				</el-form-item>
-			</div>
-			<div class="lists">
-				<el-form-item label="服务名实时" prop="namerts">
-					<el-input class="inputs" v-model="form.namerts" autocomplete="off"></el-input>
-				</el-form-item>
-				<el-form-item label="点标签" prop="label">
-					<el-input class="inputs" v-model="form.label" autocomplete="off"></el-input>
-				</el-form-item>
-			</div>
-			<div class="lists">
-				<el-form-item label="风场编号" prop="windpowerstationid">
-					<el-select v-model="form.windpowerstationid" placeholder="请选择" clearable style="width:200px">
-						<el-option v-for="item in stationList" :key="item.id" :label="item.name" :value="item.id">
-						</el-option>
-					</el-select>
-				</el-form-item>
-				<el-form-item label="端口历史" prop="porthist">
-					<el-input class="inputs" v-model.trim="form.porthist" autocomplete="off"></el-input>
-				</el-form-item>
-			</div>
-			<div class="lists">
-				<el-form-item label="端口配置" prop="portcmcfg">
-					<el-input class="inputs" v-model.trim="form.portcmcfg" autocomplete="off"></el-input>
-				</el-form-item>
-				<el-form-item label="端口实时" prop="portrts">
-					<el-input class="inputs" v-model.trim="form.portrts" autocomplete="off"></el-input>
-				</el-form-item>
-			</div>
-			<div class="lists">
-				<el-form-item label="地址历史" prop="iphist">
-					<el-input class="inputs" v-model.trim="form.iphist" autocomplete="off"></el-input>
-				</el-form-item>
-				<el-form-item label="地址配置" prop="ipcmcfg">
-					<el-input class="inputs" v-model.trim="form.ipcmcfg" autocomplete="off"></el-input>
-				</el-form-item>
-			</div>
-			<div class="lists">
-				<el-form-item label="地址实时" prop="iprts">
-					<el-input class="inputs" v-model.trim="form.iprts" autocomplete="off"></el-input>
-				</el-form-item>
-			</div>
+       <el-row>
+        <el-col :span="12"><el-form-item label="服务姓" prop="surName"><el-input class="inputs" v-model="form.surName" autocomplete="off" :disabled="!idAdd?true:false"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="服务名历史" prop="nameHist"><el-input class="inputs" v-model="form.nameHist" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="服务名配置" prop="nameCmcfg"><el-input class="inputs" v-model="form.nameCmcfg" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="服务名实时" prop="nameRts"><el-input class="inputs" v-model="form.nameRts" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="点标签" prop="label"><el-input class="inputs" v-model="form.label" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="风场编号" prop="windpowerstationId"><el-input class="inputs" v-model="form.windpowerstationId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="端口历史" prop="portHist"><el-input class="inputs" v-model="form.portHist" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="端口配置" prop="portCmcfg"><el-input class="inputs" v-model="form.portCmcfg" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="端口实时" prop="portRts"><el-input class="inputs" v-model="form.portRts" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="地址历史" prop="ipHist"><el-input class="inputs" v-model="form.ipHist" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="地址配置" prop="ipCmcfg"><el-input class="inputs" v-model="form.ipCmcfg" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="地址实时" prop="ipRts"><el-input class="inputs" v-model="form.ipRts" autocomplete="off"></el-input></el-form-item></el-col>
+      </el-row>
 		</el-form>
 		<div slot="footer" class="dialog-footer">
 			<el-button @click="close">取 消</el-button>
@@ -83,34 +41,32 @@ export default {
 	data() {
 		return {
 			form: {
-				id: '',
-				surname: '',
-				namehist: '',
-				namecmcfg: '',
-				namerts: '',
+				surName: '',
+				nameHist: '',
+				nameCmcfg: '',
+				nameRts: '',
 				label: '',
-				windpowerstationid: '',
-				porthist: '',
-				portcmcfg: '',
-				portrts: '',
-				iphist: '',
-				ipcmcfg: '',
-				iprts: '',
+				windpowerstationId: '',
+				portHist: '',
+				portCmcfg: '',
+				portRts: '',
+				ipHist: '',
+				ipCmcfg: '',
+				ipRts: '',
 			},
 			rules: {
-				id: [{ required: true, trigger: 'blur', message: '请输入' }],
-				surname: [{ required: true, trigger: 'blur', message: '请输入' }],
-				namehist: [{ required: true, trigger: 'blur', message: '请输入' }],
-				namecmcfg: [{ required: true, trigger: 'blur', message: '请输入' }],
-				namerts: [{ required: true, trigger: 'blur', message: '请输入' }],
+				surName: [{ required: true, trigger: 'blur', message: '请输入' }],
+				nameHist: [{ required: true, trigger: 'blur', message: '请输入' }],
+				nameCmcfg: [{ required: true, trigger: 'blur', message: '请输入' }],
+				nameRts: [{ required: true, trigger: 'blur', message: '请输入' }],
 				label: [{ required: true, trigger: 'blur', message: '请输入' }],
-				windpowerstationid: [{ required: true, trigger: 'blur', message: '请输入' }],
-				porthist: [{ required: true, trigger: 'blur', message: '请输入' }],
-				portcmcfg: [{ required: true, trigger: 'blur', message: '请输入' }],
-				portrts: [{ required: true, trigger: 'blur', message: '请输入' }],
-				iphist: [{ required: true, trigger: 'blur', message: '请输入' }],
-				ipcmcfg: [{ required: true, trigger: 'blur', message: '请输入' }],
-				iprts: [{ required: true, trigger: 'blur', message: '请输入' }],
+				windpowerstationId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				portHist: [{ required: true, trigger: 'blur', message: '请输入' }],
+				portCmcfg: [{ required: true, trigger: 'blur', message: '请输入' }],
+				portRts: [{ required: true, trigger: 'blur', message: '请输入' }],
+				ipHist: [{ required: true, trigger: 'blur', message: '请输入' }],
+				ipCmcfg: [{ required: true, trigger: 'blur', message: '请输入' }],
+				ipRts: [{ required: true, trigger: 'blur', message: '请输入' }],
 			},
 			title: '',
 			dialogFormVisible: false,
@@ -139,7 +95,7 @@ export default {
 		save() {
 			this.$refs['form'].validate(async (valid) => {
 				if (valid) {
-					api.addDatabase(this.form).then(res => {
+					api.addDbconfig(this.form).then(res => {
 						if (res.data) {
 							this.$message({
 								type: 'success',

+ 43 - 51
src/views/realDatabaseConfig/index.vue

@@ -4,10 +4,10 @@
 			<div class="title">
 				<div class="left">
 					<div class="left-item">
-						<div style="width: 70px;">名称:</div>
+						<div style="width: 70px;">服务姓:</div>
 						<el-input v-model="fuzzyQuery_name" placeholder="请输入" clearable />
 					</div>
-					<el-button icon="el-icon-search" type="primary" native-type="submit" @click="fetchData">
+					<el-button icon="el-icon-search" type="primary" native-type="submit" @click="searchFetchData">
 						查询
 					</el-button>
 				</div>
@@ -26,28 +26,18 @@
 			<el-table header-cell-class-name="table_header_style" border ref="tableSort" v-loading="listLoading" :data="list"
 				:element-loading-text="elementLoadingText" :height="height" @selection-change="setSelectRows">
 				<el-table-column show-overflow-tooltip type="selection" align="center" width="40"></el-table-column>
-				<el-table-column show-overflow-tooltip label="id" prop="id" align="center" sortable></el-table-column>
-				<el-table-column show-overflow-tooltip label="服务名" prop="surname" align="center" sortable></el-table-column>
-				<el-table-column width="120" show-overflow-tooltip label="服务名历史" prop="namehist" align="center" sortable></el-table-column>
-				<el-table-column width="120" show-overflow-tooltip label="服务名配置" prop="namecmcfg" align="center" sortable>
-				</el-table-column>
-				<el-table-column width="120" show-overflow-tooltip label="服务名实时" prop="namerts" align="center" sortable>
-				</el-table-column>
+				<el-table-column show-overflow-tooltip label="服务姓" prop="surName" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="服务名历史" prop="nameHist" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="服务名配置" prop="nameCmcfg" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="服务名实时" prop="nameRts" align="center" sortable></el-table-column>
 				<el-table-column show-overflow-tooltip label="点标签" prop="label" align="center" sortable></el-table-column>
-				<el-table-column show-overflow-tooltip label="风场编号" prop="windpowerstationid" align="center" sortable>
-				</el-table-column>
-				<el-table-column show-overflow-tooltip label="端口历史" prop="porthist" align="center" sortable>
-				</el-table-column>
-				<el-table-column show-overflow-tooltip label="端口配置" prop="portcmcfg" align="center" sortable>
-				</el-table-column>
-				<el-table-column show-overflow-tooltip label="端口实时" prop="portrts" align="center" sortable>
-				</el-table-column>
-				<el-table-column show-overflow-tooltip label="地址历史" prop="iphist" align="center" sortable>
-				</el-table-column>
-				<el-table-column show-overflow-tooltip label="地址配置" prop="ipcmcfg" align="center" sortable>
-				</el-table-column>
-				<el-table-column show-overflow-tooltip label="地址实时" prop="iprts" align="center" sortable>
-				</el-table-column>
+				<el-table-column show-overflow-tooltip label="风场编号" prop="windpowerstationId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="端口历史" prop="portHist" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="端口配置" prop="portCmcfg" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="端口实时" prop="portRts" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="地址历史" prop="ipHist" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="地址配置" prop="ipCmcfg" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="地址实时" prop="ipRts" align="center" sortable></el-table-column>
 				<el-table-column show-overflow-tooltip label="操作" width="100px" fixed="right">
 					<template #default="{ row }">
 						<el-button type="text" @click="handleEdit(row)">编辑</el-button>
@@ -106,9 +96,13 @@ export default {
 		this.fetchData()
 	},
 	methods: {
+    searchFetchData(){
+      this.queryForm.pageNo = 1
+      this.fetchData()
+    },
 		getMyExcelData(val) {
 			val.forEach(item => {
-				api.addDatabase(item).then(res => {
+				api.addDbconfig(item).then(res => {
 					if (res.code == 200) {
 						this.$message({
 							type: 'success',
@@ -134,8 +128,8 @@ export default {
 			})
 		},
 		fetchData() {
-			api.database({
-				name: this.fuzzyQuery_name,
+			api.dbconfigListByPage({
+				surName: this.fuzzyQuery_name,
 				pageNum: this.queryForm.pageNo,
 				pageSize: this.queryForm.pageSize,
 			}).then(res => {
@@ -145,38 +139,36 @@ export default {
 					this.list = res.data.records
 					this.templateExcel = [
 						{
-							id: '',
-							surname: '',
-							namehist: '',
-							namecmcfg: '',
-							namerts: '',
+							surName: '',
+							nameHist: '',
+							nameCmcfg: '',
+							nameRts: '',
 							label: '',
-							windpowerstationid: '',
-							porthist: '',
-							portcmcfg: '',
-							portrts: '',
-							iphist: '',
-							ipcmcfg: '',
-							iprts: '',
+							windpowerstationId: '',
+							portHist: '',
+							portCmcfg: '',
+							portRts: '',
+							ipHist: '',
+							ipCmcfg: '',
+							ipRts: '',
 						}
 					]
 					// 导出
 					let exportExcel = []
 					res.data.records.forEach(item => {
 						exportExcel.push({
-							id: item.id,
-							surname: item.surname,
-							namehist: item.namehist,
-							namecmcfg: item.namecmcfg,
-							namerts: item.namerts,
+							surName: item.surName,
+							nameHist: item.nameHist,
+							nameCmcfg: item.nameCmcfg,
+							nameRts: item.nameRts,
 							label: item.label,
-							windpowerstationid: item.windpowerstationid,
-							porthist: item.porthist,
-							portcmcfg: item.portcmcfg,
-							portrts: item.portrts,
-							iphist: item.iphist,
-							ipcmcfg: item.ipcmcfg,
-							iprts: item.iprts,
+							windpowerstationId: item.windpowerstationId,
+							portHist: item.portHist,
+							portCmcfg: item.portCmcfg,
+							portRts: item.portRts,
+							ipHist: item.ipHist,
+							ipCmcfg: item.ipCmcfg,
+							ipRts: item.ipRts,
 						})
 					})
 					this.exportExcel = exportExcel
@@ -204,7 +196,7 @@ export default {
 					if (this.selectRows.length > 0) {
 						ids = this.selectRows.map((item) => item.id).join()
 					}
-					api.deleteDatabase({
+					api.deleteDbconfig({
 						id: row.id || ids
 					}).then(res => {
 						if (res.data) {

+ 164 - 0
src/views/stationConfiguration/electricStation/components/TableEdit.vue

@@ -0,0 +1,164 @@
+<template>
+	<el-dialog :title="title" :visible.sync="dialogFormVisible" width="800px" @close="close">
+		<el-form ref="form" :model="form" :rules="rules" label-width="150px">
+      <el-row>
+        <el-col :span="12"><el-form-item label="编号" prop="id"><el-input class="inputs" v-model="form.id" autocomplete="off" :disabled="!idAdd?true:false"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="编码" prop="code"><el-input class="inputs" v-model="form.code" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="名称" prop="name"><el-input class="inputs" v-model="form.name" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="实时库名称" prop="aname"><el-input class="inputs" v-model="form.aname" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="型号" prop="model"><el-input class="inputs" v-model="form.model" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="单位" prop="valueUnit"><el-input class="inputs" v-model="form.valueUnit" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="英文名称" prop="englishName"><el-input class="inputs" v-model="form.englishName" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="类型编号" prop="typeId"><el-input class="inputs" v-model="form.typeId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="所属型号" prop="modelId"><el-input class="inputs" v-model="form.modelId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="最大值" prop="maxval"><el-input class="inputs" v-model="form.maxval" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="最小值" prop="minval"><el-input class="inputs" v-model="form.minval" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="合理最大值" prop="reasonableMaxval"><el-input class="inputs" v-model="form.reasonableMaxval" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="合理最小值" prop="reasonableMinval"><el-input class="inputs" v-model="form.reasonableMinval" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="统一编码" prop="uniformCode"><el-input class="inputs" v-model="form.uniformCode" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="短id" prop="shortId"><el-input class="inputs" v-model="form.shortId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="长id" prop="longId"><el-input class="inputs" v-model="form.longId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="风场编号" prop="windpowerstationId"><el-input class="inputs" v-model="form.windpowerstationId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="实时配置编号" prop="realTimeId"><el-input class="inputs" v-model="form.realTimeId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="集团测点编号" prop="groupPointId"><el-input class="inputs" v-model="form.groupPointId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="具体名称" prop="specificName"><el-input class="inputs" v-model="form.specificName" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="变电所编号" prop="electricalId"><el-input class="inputs" v-model="form.electricalId" autocomplete="off"></el-input></el-form-item></el-col>
+      </el-row>
+		</el-form>
+		<div slot="footer" class="dialog-footer">
+			<el-button @click="close">取 消</el-button>
+			<el-button type="primary" @click="save">确 定</el-button>
+		</div>
+	</el-dialog>
+</template>
+
+<script>
+import api from '@/api/realtimeDatabaseConfiguration'
+import dayjs from "dayjs";
+export default {
+	name: 'TableEdit',
+	props: {
+		options: {
+			type: Array,
+			default: []
+		},
+		stationList: {
+			type: Array,
+			default: []
+		},
+	},
+	data() {
+		return {
+			form: {
+				id: "",
+        code: "",
+        name: "",
+        aname: "",
+        model: "",
+        valueUnit: "",
+        englishName: "",
+        typeId: "",
+        modelId: "",
+        maxval: "",
+        minval: "",
+        reasonableMaxval: "",
+        reasonableMinval: "",
+        uniformCode: "",
+        shortId: "",
+        longId: "",
+        windpowerstationId: "",
+        realTimeId: "",
+        groupPointId: "",
+        specificName: "",
+        electricalId: "",
+			},
+			rules: {
+				id: [{ required: true, trigger: 'blur', message: '请输入' }],
+				code: [{ required: true, trigger: 'blur', message: '请输入' }],
+				name: [{ required: true, trigger: 'blur', message: '请输入' }],
+				aname: [{ required: true, trigger: 'blur', message: '请输入' }],
+				model: [{ required: true, trigger: 'blur', message: '请输入' }],
+				valueUnit: [{ required: true, trigger: 'blur', message: '请输入' }],
+				englishName: [{ required: true, trigger: 'blur', message: '请输入' }],
+				typeId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				modelId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				maxval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				minval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				reasonableMaxval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				reasonableMinval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				uniformCode: [{ required: true, trigger: 'blur', message: '请输入' }],
+				shortId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				longId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				windpowerstationId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				realTimeId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				groupPointId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				specificName: [{ required: true, trigger: 'blur', message: '请输入' }],
+				electricalId: [{ required: true, trigger: 'blur', message: '请输入' }],
+			},
+			title: '',
+			dialogFormVisible: false,
+			idAdd: true,
+		}
+	},
+	created() { },
+	methods: {
+    changeDate() {
+      this.$forceUpdate()
+    },
+		showEdit(row) {
+			if (!row) {
+				this.title = '添加'
+				this.idAdd = true
+			} else {
+				this.title = '编辑'
+				this.idAdd = false
+				this.form = Object.assign({}, row)
+			}
+			this.dialogFormVisible = true
+		},
+		close() {
+			this.$refs['form'].resetFields()
+			this.form = this.$options.data().form
+			this.dialogFormVisible = false
+			this.$emit('fetch-data')
+		},
+		save() {
+			this.$refs['form'].validate(async (valid) => {
+				if (valid) {
+					api.addElectricaltest(this.form).then(res => {
+						if (res.data) {
+							this.$message({
+								type: 'success',
+								message: '添加成功!'
+							});
+							this.$emit('save-success');
+							this.dialogFormVisible = false
+						}
+					})
+				} else {
+					return false
+				}
+			})
+		},
+		handleChange() {
+		},
+		onBlur(val, param) {
+			if (typeof (this.form[param]) !== 'number') {
+				this.form[param] = val.replace(/[^0-9]/ig, "")
+			}
+		},
+	},
+}
+</script>
+<style lang="less" scoped>
+.inputs {
+	width: 200px;
+}
+
+.lists {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	justify-content: space-between;
+}
+</style>

+ 268 - 0
src/views/stationConfiguration/electricStation/index.vue

@@ -0,0 +1,268 @@
+<template>
+	<div class="table-container">
+		<vab-query-form>
+			<div class="title">
+				<div class="left">
+					<div class="left-item">
+						<div style="width: 70px;">编码:</div>
+						<el-input v-model="fuzzyQuery_name" placeholder="请输入" clearable />
+					</div>
+					<el-button icon="el-icon-search" type="primary" native-type="submit" @click="searchFetchData">
+						查询
+					</el-button>
+				</div>
+				<div class="right">
+					<el-button icon="el-icon-plus" type="primary" @click="handleAdd">
+						添加
+					</el-button>
+					<el-button icon="el-icon-delete" type="danger" @click="handleDelete">
+						删除
+					</el-button>
+					<UploadExcel style="margin-left: 10px;" @getResult="getMyExcelData"></UploadExcel>
+					<ExportExcel :exportList="exportExcel" :useType="'export'" partsName="电气测点"></ExportExcel>
+					<ExportExcel :exportList="templateExcel" :useType="'template'" partsName="电气测点模板"></ExportExcel>
+				</div>
+			</div>
+			<el-table header-cell-class-name="table_header_style" border ref="tableSort" v-loading="listLoading" :data="list"
+				:element-loading-text="elementLoadingText" :height="height" @selection-change="setSelectRows">
+				<el-table-column show-overflow-tooltip type="selection" align="center" width="40"></el-table-column>
+				<el-table-column show-overflow-tooltip label="编号" prop="id" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="编码" prop="code" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="名称" prop="name" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="实时库名称" prop="aname" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="型号" prop="model" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="单位" prop="valueUnit" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="英文名称" prop="englishName" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="类型编号" prop="typeId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="所属型号" prop="modelId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最大值" prop="maxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最小值" prop="minval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最大值" prop="reasonableMaxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最小值" prop="reasonableMinval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="统一编码" prop="uniformCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="短id" prop="shortId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="长id" prop="longId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="风场编号" prop="windpowerstationId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="实时配置编号" prop="realTimeId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="集团测点编号" prop="groupPointId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="具体名称" prop="specificName" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="变电所编号" prop="electricalId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="操作" width="100px" fixed="right">
+					<template #default="{ row }">
+						<el-button type="text" @click="handleEdit(row)">编辑</el-button>
+						<el-button type="text" @click="handleDelete(row)">删除</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+			<el-pagination :background="background" :current-page="queryForm.pageNo" :layout="layout"
+				:page-size="queryForm.pageSize" :total="total" @current-change="handleCurrentChange"
+				@size-change="handleSizeChange"></el-pagination>
+			<table-edit ref="edit" :options="options" :stationList="stationList" @save-success="fetchData"></table-edit>
+		</vab-query-form>
+	</div>
+</template>
+<script>
+import UploadExcel from '@/components/UploadExcel/index'
+import ExportExcel from '@/components/ExportExcel/index'
+import api from '@/api/realtimeDatabaseConfiguration'
+import stationApi from '@/api/station'
+import TableEdit from './components/TableEdit'
+export default {
+	components: {
+		UploadExcel,
+		ExportExcel,
+		TableEdit,
+	},
+	data() {
+		return {
+			fuzzyQuery_name: '',
+			listLoading: true,
+			list: [],
+			options: [],
+			exportExcel: [],
+			templateExcel: [],
+			elementLoadingText: '正在加载...',
+			selectRows: '',
+			layout: 'total, sizes, prev, pager, next, jumper',
+			total: 0,
+			background: true,
+			exportList: [],
+			queryForm: {
+				pageNo: 1,
+				pageSize: 20,
+			},
+			stationList: [],
+			selectValue: ''
+		};
+	},
+	computed: {
+		height() {
+			return this.$baseTableHeight() + 50
+		},
+	},
+	created() {
+		// this.getStation()
+		this.fetchData()
+	},
+	methods: {
+		getMyExcelData(val) {
+			val.forEach(item => {
+				api.addElectricaltest(item).then(res => {
+					if (res.code == 200) {
+						this.$message({
+							type: 'success',
+							message: '添加成功!'
+						});
+						this.fetchData()
+					}
+				})
+			})
+		},
+		getStation() {
+			stationApi.windpowerstationList({
+				id: '',
+				name: '',
+				companyid: '',
+				pageNum: 1,
+				pageSize: 1000,
+			}).then(res => {
+				if (res.data) {
+					this.listLoading = false
+					this.stationList = res.data.records
+				}
+			})
+		},
+    searchFetchData(){
+      this.queryForm.pageNo = 1
+      this.fetchData()
+    },
+		fetchData() {
+			api.electricaltestList({
+				name: this.fuzzyQuery_name,
+				pageNum: this.queryForm.pageNo,
+				pageSize: this.queryForm.pageSize,
+			}).then(res => {
+				if (res.data) {
+					this.listLoading = false
+					this.total = res.data.total
+					this.list = res.data.records
+					this.templateExcel = [
+						{
+							id: "",
+							code: "",
+							name: "",
+							aname: "",
+							model: "",
+							valueUnit: "",
+							englishName: "",
+							typeId: "",
+							modelId: "",
+							maxval: "",
+							minval: "",
+							reasonableMaxval: "",
+							reasonableMinval: "",
+							uniformCode: "",
+							shortId: "",
+              longId: "",
+              windpowerstationId: "",
+              realTimeId: "",
+              groupPointId: "",
+              specificName: "",
+              electricalId:"",
+              windPowerStationId:"",
+						}
+					]
+					// 导出
+					let exportExcel = []
+					res.data.records.forEach(item => {
+						exportExcel.push({
+							id: item.id,
+							code: item.code,
+							name: item.name,
+							aname: item.aname,
+							model: item.model,
+							valueUnit: item.valueUnit,
+							englishName: item.englishName,
+							typeId: item.typeId,
+							modelId: item.modelId,
+							maxval: item.maxval,
+							minval: item.minval,
+							reasonableMaxval: item.reasonableMaxval,
+							reasonableMinval: item.reasonableMinval,
+							uniformCode: item.uniformCode,
+							shortId: item.shortId,
+							longId: item.longId,
+							windpowerstationId: item.windpowerstationId,
+							realTimeId: item.realTimeId,
+							groupPointId: item.groupPointId,
+							specificName: item.specificName,
+							electricalId: item.electricalId,
+						})
+					})
+					this.exportExcel = exportExcel
+				}
+			})
+		},
+		handleSizeChange(val) {
+			this.queryForm.pageSize = val
+			this.fetchData()
+		},
+		handleCurrentChange(val) {
+			this.queryForm.pageNo = val
+			this.fetchData()
+		},
+		handleAdd() {
+			this.$refs['edit'].showEdit()
+		},
+		handleEdit(row) {
+			this.$refs['edit'].showEdit(row)
+		},
+		handleDelete(row) {
+			if (row.id || this.selectRows.length > 0) {
+				this.$baseConfirm('你确定要删除吗', null, async () => {
+					let ids = ''
+					if (this.selectRows.length > 0) {
+						ids = this.selectRows.map((item) => item.id).join()
+					}
+					api.deleteElectricaltest({
+						id: row.id || ids
+					}).then(res => {
+						if (res.data) {
+							this.$baseMessage('删除成功', 'success')
+							this.fetchData()
+						}
+					})
+				})
+			} else {
+				this.$baseMessage('未选中任何行', 'error')
+				return false
+			}
+		},
+		setSelectRows(val) {
+			this.selectRows = val
+		},
+	},
+}
+</script>
+<style lang="less" scoped>
+.title {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	justify-content: space-between;
+	margin-bottom: 20px;
+}
+
+.left {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+
+	.left-item {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		margin-right: 10px;
+	}
+}
+</style>

+ 184 - 0
src/views/stationConfiguration/equipmentPoint/components/TableEdit.vue

@@ -0,0 +1,184 @@
+<template>
+	<el-dialog :title="title" :visible.sync="dialogFormVisible" width="800px" @close="close">
+		<el-form ref="form" :model="form" :rules="rules" label-width="150px">
+<!-- 
+  			<el-table-column show-overflow-tooltip label="编号" prop="id" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="编码" prop="nemCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="名称" prop="name" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="单位" prop="valueUnit" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="英文名称" prop="englishName" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="类型编号" prop="typeId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最大值" prop="maxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最小值" prop="minval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最大值" prop="reasonableMaxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最小值" prop="reasonableMinval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="统一编码" prop="uniformCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="部件编号" prop="logicalUnitId" align="center" sortable></el-table-column>
+ -->
+      <el-row>
+        <el-col :span="12"><el-form-item label="编号" prop="id"><el-input class="inputs" v-model="form.id" autocomplete="off" :disabled="!idAdd?true:false"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="编码" prop="nemCode"><el-input class="inputs" v-model="form.nemCode" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="名称" prop="name"><el-input class="inputs" v-model="form.name" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="实时库名称" prop="aname"><el-input class="inputs" v-model="form.aname" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="型号" prop="model"><el-input class="inputs" v-model="form.model" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="单位" prop="valueUnit"><el-input class="inputs" v-model="form.valueUnit" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="英文名称" prop="englishName"><el-input class="inputs" v-model="form.englishName" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="类型编号" prop="typeId"><el-input class="inputs" v-model="form.typeId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="所属型号" prop="modelId"><el-input class="inputs" v-model="form.modelId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="最大值" prop="maxval"><el-input class="inputs" v-model="form.maxval" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="最小值" prop="minval"><el-input class="inputs" v-model="form.minval" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="合理最大值" prop="reasonableMaxval"><el-input class="inputs" v-model="form.reasonableMaxval" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="合理最小值" prop="reasonableMinval"><el-input class="inputs" v-model="form.reasonableMinval" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="风机编号" prop="windturbineId"><el-input class="inputs" v-model="form.windturbineId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="统一编码" prop="uniformCode"><el-input class="inputs" v-model="form.uniformCode" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="短id" prop="shortId"><el-input class="inputs" v-model="form.shortId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="长id" prop="longId"><el-input class="inputs" v-model="form.longId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="场站编号" prop="windpowerstationId"><el-input class="inputs" v-model="form.windpowerstationId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="实时配置编号" prop="realtimeId"><el-input class="inputs" v-model="form.realtimeId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="部件编号" prop="logicalUnitId"><el-input class="inputs" v-model="form.logicalUnitId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="集团测点编号" prop="groupPointId"><el-input class="inputs" v-model="form.groupPointId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="具体名称" prop="specificName"><el-input class="inputs" v-model="form.specificName" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="系数" prop="coefficient"><el-input class="inputs" v-model="form.coefficient" autocomplete="off"></el-input></el-form-item></el-col>
+      </el-row>
+		</el-form>
+		<div slot="footer" class="dialog-footer">
+			<el-button @click="close">取 消</el-button>
+			<el-button type="primary" @click="save">确 定</el-button>
+		</div>
+	</el-dialog>
+</template>
+
+<script>
+import api from '@/api/realtimeDatabaseConfiguration'
+import dayjs from "dayjs";
+export default {
+	name: 'TableEdit',
+	props: {
+		options: {
+			type: Array,
+			default: []
+		},
+		stationList: {
+			type: Array,
+			default: []
+		},
+	},
+	data() {
+		return {
+			form: {
+				id: "",
+        nemCode: "",
+        name: "",
+        aname: "",
+        model: "",
+        valueUnit: "",
+        englishName: "",
+        typeId: "",
+        modelId: "",
+        maxval: "",
+        minval: "",
+        reasonableMaxval: "",
+        reasonableMinval: "",
+        windturbineId: "",
+        uniformCode: "",
+        shortId: "",
+        longId: "",
+        windpowerstationId: "",
+        realtimeId: "",
+        logicalUnitId: "",
+        groupPointId: "",
+        specificName: "",
+        coefficient: "",
+			},
+			rules: {
+				id: [{ required: true, trigger: 'blur', message: '请输入' }],
+				nemCode: [{ required: true, trigger: 'blur', message: '请输入' }],
+				name: [{ required: true, trigger: 'blur', message: '请输入' }],
+				aname: [{ required: true, trigger: 'blur', message: '请输入' }],
+				model: [{ required: true, trigger: 'blur', message: '请输入' }],
+				valueUnit: [{ required: true, trigger: 'blur', message: '请输入' }],
+				englishName: [{ required: true, trigger: 'blur', message: '请输入' }],
+				typeId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				modelId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				maxval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				minval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				reasonableMaxval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				reasonableMinval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				windturbineId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				uniformCode: [{ required: true, trigger: 'blur', message: '请输入' }],
+				shortId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				longId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				windpowerstationId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				realtimeId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				logicalUnitId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				groupPointId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				specificName: [{ required: true, trigger: 'blur', message: '请输入' }],
+				coefficient: [{ required: true, trigger: 'blur', message: '请输入' }],
+			},
+			title: '',
+			dialogFormVisible: false,
+			idAdd: true,
+		}
+	},
+	created() { },
+	methods: {
+    changeDate() {
+      this.$forceUpdate()
+    },
+		showEdit(row) {
+			if (!row) {
+				this.title = '添加'
+				this.idAdd = true
+			} else {
+				this.title = '编辑'
+				this.idAdd = false
+				this.form = Object.assign({}, row)
+			}
+			this.dialogFormVisible = true
+		},
+		close() {
+			this.$refs['form'].resetFields()
+			this.form = this.$options.data().form
+			this.dialogFormVisible = false
+			this.$emit('fetch-data')
+		},
+		save() {
+			this.$refs['form'].validate(async (valid) => {
+				if (valid) {
+					api.addEquipmentPoint(this.form).then(res => {
+						if (res.data) {
+							this.$message({
+								type: 'success',
+								message: '添加成功!'
+							});
+							this.$emit('save-success');
+							this.dialogFormVisible = false
+						}
+					})
+				} else {
+					return false
+				}
+			})
+		},
+		handleChange() {
+		},
+		onBlur(val, param) {
+			if (typeof (this.form[param]) !== 'number') {
+				this.form[param] = val.replace(/[^0-9]/ig, "")
+			}
+		},
+	},
+}
+</script>
+<style lang="less" scoped>
+.inputs {
+	width: 200px;
+}
+
+.lists {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	justify-content: space-between;
+}
+</style>

+ 273 - 0
src/views/stationConfiguration/equipmentPoint/index.vue

@@ -0,0 +1,273 @@
+<template>
+	<div class="table-container">
+		<vab-query-form>
+			<div class="title">
+				<div class="left">
+					<div class="left-item">
+						<div style="width: 70px;">编码:</div>
+						<el-input v-model="fuzzyQuery_name" placeholder="请输入" clearable />
+					</div>
+					<el-button icon="el-icon-search" type="primary" native-type="submit" @click="searchFetchData">
+						查询
+					</el-button>
+				</div>
+				<div class="right">
+					<el-button icon="el-icon-plus" type="primary" @click="handleAdd">
+						添加
+					</el-button>
+					<el-button icon="el-icon-delete" type="danger" @click="handleDelete">
+						删除
+					</el-button>
+					<UploadExcel style="margin-left: 10px;" @getResult="getMyExcelData"></UploadExcel>
+					<ExportExcel :exportList="exportExcel" :useType="'export'" partsName="设备测点"></ExportExcel>
+					<ExportExcel :exportList="templateExcel" :useType="'template'" partsName="设备测点模板"></ExportExcel>
+				</div>
+			</div>
+			<el-table header-cell-class-name="table_header_style" border ref="tableSort" v-loading="listLoading" :data="list"
+				:element-loading-text="elementLoadingText" :height="height" @selection-change="setSelectRows">
+				<el-table-column show-overflow-tooltip type="selection" align="center" width="40"></el-table-column>
+				<el-table-column show-overflow-tooltip label="编号" prop="id" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="编码" prop="nemCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="名称" prop="name" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="实时库名称" prop="aname" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="型号" prop="model" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="单位" prop="valueUnit" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="英文名称" prop="englishName" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="类型编号" prop="typeId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="所属型号" prop="modelId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最大值" prop="maxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最小值" prop="minval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最大值" prop="reasonableMaxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最小值" prop="reasonableMinval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="风机编号" prop="windturbineId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="统一编码" prop="uniformCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="短id" prop="shortId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="长id" prop="longId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="场站编号" prop="windpowerstationId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="实时配置编号" prop="realtimeId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="部件编号" prop="logicalUnitId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="集团测点编号" prop="groupPointId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="具体名称" prop="specificName" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="系数" prop="coefficient" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="操作" width="100px" fixed="right">
+					<template #default="{ row }">
+						<el-button type="text" @click="handleEdit(row)">编辑</el-button>
+						<el-button type="text" @click="handleDelete(row)">删除</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+			<el-pagination :background="background" :current-page="queryForm.pageNo" :layout="layout"
+				:page-size="queryForm.pageSize" :total="total" @current-change="handleCurrentChange"
+				@size-change="handleSizeChange"></el-pagination>
+			<table-edit ref="edit" :options="options" :stationList="stationList" @save-success="fetchData"></table-edit>
+		</vab-query-form>
+	</div>
+</template>
+<script>
+import UploadExcel from '@/components/UploadExcel/index'
+import ExportExcel from '@/components/ExportExcel/index'
+import api from '@/api/realtimeDatabaseConfiguration'
+import stationApi from '@/api/station'
+import TableEdit from './components/TableEdit'
+export default {
+	components: {
+		UploadExcel,
+		ExportExcel,
+		TableEdit,
+	},
+	data() {
+		return {
+			fuzzyQuery_name: '',
+			listLoading: true,
+			list: [],
+			options: [],
+			exportExcel: [],
+			templateExcel: [],
+			elementLoadingText: '正在加载...',
+			selectRows: '',
+			layout: 'total, sizes, prev, pager, next, jumper',
+			total: 0,
+			background: true,
+			exportList: [],
+			queryForm: {
+				pageNo: 1,
+				pageSize: 20,
+			},
+			stationList: [],
+			selectValue: ''
+		};
+	},
+	computed: {
+		height() {
+			return this.$baseTableHeight() + 50
+		},
+	},
+	created() {
+		// this.getStation()
+		this.fetchData()
+	},
+	methods: {
+		getMyExcelData(val) {
+			val.forEach(item => {
+				api.addEquipmentPoint(item).then(res => {
+					if (res.code == 200) {
+						this.$message({
+							type: 'success',
+							message: '添加成功!'
+						});
+						this.fetchData()
+					}
+				})
+			})
+		},
+		getStation() {
+			stationApi.windpowerstationList({
+				id: '',
+				name: '',
+				companyid: '',
+				pageNum: 1,
+				pageSize: 1000,
+			}).then(res => {
+				if (res.data) {
+					this.listLoading = false
+					this.stationList = res.data.records
+				}
+			})
+		},
+    searchFetchData(){
+      this.queryForm.pageNo = 1
+      this.fetchData()
+    },
+		fetchData() {
+			api.equipmentPointList({
+				name: this.fuzzyQuery_name,
+				pageNum: this.queryForm.pageNo,
+				pageSize: this.queryForm.pageSize,
+			}).then(res => {
+				if (res.data) {
+					this.listLoading = false
+					this.total = res.data.total
+					this.list = res.data.records
+					this.templateExcel = [
+						{
+							id: "",
+							nemCode: "",
+							name: "",
+							aname: "",
+							model: "",
+							valueUnit: "",
+							englishName: "",
+							typeId: "",
+							modelId: "",
+							maxval: "",
+							minval: "",
+							reasonableMaxval: "",
+							reasonableMinval: "",
+							windturbineId: "",
+							uniformCode: "",
+							shortId: "",
+              longId: "",
+              windpowerstationId: "",
+              realtimeId: "",
+              logicalUnitId: "",
+              groupPointId: "",
+              specificName: "",
+              coefficient: "",
+						}
+					]
+					// 导出
+					let exportExcel = []
+					res.data.records.forEach(item => {
+						exportExcel.push({
+							id: item.id,
+							nemCode: item.nemCode,
+							name: item.name,
+							aname: item.aname,
+							model: item.model,
+							valueUnit: item.valueUnit,
+							englishName: item.englishName,
+							typeId: item.typeId,
+							modelId: item.modelId,
+							maxval: item.maxval,
+							minval: item.minval,
+							reasonableMaxval: item.reasonableMaxval,
+							reasonableMinval: item.reasonableMinval,
+							windturbineId: item.windturbineId,
+							uniformCode: item.uniformCode,
+							shortId: item.shortId,
+							longId: item.longId,
+							windpowerstationId: item.windpowerstationId,
+							realtimeId: item.realtimeId,
+							logicalUnitId: item.logicalUnitId,
+							groupPointId: item.groupPointId,
+							specificName: item.specificName,
+							coefficient: item.coefficient,
+						})
+					})
+					this.exportExcel = exportExcel
+				}
+			})
+		},
+		handleSizeChange(val) {
+			this.queryForm.pageSize = val
+			this.fetchData()
+		},
+		handleCurrentChange(val) {
+			this.queryForm.pageNo = val
+			this.fetchData()
+		},
+		handleAdd() {
+			this.$refs['edit'].showEdit()
+		},
+		handleEdit(row) {
+			this.$refs['edit'].showEdit(row)
+		},
+		handleDelete(row) {
+			if (row.id || this.selectRows.length > 0) {
+				this.$baseConfirm('你确定要删除吗', null, async () => {
+					let ids = ''
+					if (this.selectRows.length > 0) {
+						ids = this.selectRows.map((item) => item.id).join()
+					}
+					api.deleteEquipmentPoint({
+						id: row.id || ids
+					}).then(res => {
+						if (res.data) {
+							this.$baseMessage('删除成功', 'success')
+							this.fetchData()
+						}
+					})
+				})
+			} else {
+				this.$baseMessage('未选中任何行', 'error')
+				return false
+			}
+		},
+		setSelectRows(val) {
+			this.selectRows = val
+		},
+	},
+}
+</script>
+<style lang="less" scoped>
+.title {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	justify-content: space-between;
+	margin-bottom: 20px;
+}
+
+.left {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+
+	.left-item {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		margin-right: 10px;
+	}
+}
+</style>

+ 175 - 0
src/views/stationConfiguration/logicPoint/components/TableEdit.vue

@@ -0,0 +1,175 @@
+<template>
+	<el-dialog :title="title" :visible.sync="dialogFormVisible" width="800px" @close="close">
+		<el-form ref="form" :model="form" :rules="rules" label-width="150px">
+<!-- 
+  			<el-table-column show-overflow-tooltip label="编号" prop="id" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="编码" prop="nemCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="名称" prop="name" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="单位" prop="valueUnit" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="英文名称" prop="englishName" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="类型编号" prop="typeId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最大值" prop="maxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最小值" prop="minval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最大值" prop="reasonableMaxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最小值" prop="reasonableMinval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="统一编码" prop="uniformCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="部件编号" prop="logicalUnitId" align="center" sortable></el-table-column>
+ -->
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="编号" prop="id"><el-input class="inputs" v-model="form.id" autocomplete="off" :disabled="!idAdd?true:false"></el-input></el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="编码" prop="nemCode"><el-input class="inputs" v-model="form.nemCode" autocomplete="off"></el-input></el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="名称" prop="name"><el-input class="inputs" v-model="form.name" autocomplete="off"></el-input></el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="单位" prop="valueUnit"><el-input class="inputs" v-model="form.valueUnit" autocomplete="off"></el-input></el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="英文名称" prop="englishName"><el-input class="inputs" v-model="form.englishName" autocomplete="off"></el-input></el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="类型编号" prop="typeId"><el-input class="inputs" v-model="form.typeId" autocomplete="off"></el-input></el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="最大值" prop="maxval"><el-input class="inputs" v-model="form.maxval" autocomplete="off"></el-input></el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="最小值" prop="minval"><el-input class="inputs" v-model="form.minval" autocomplete="off"></el-input></el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="合理最大值" prop="reasonableMaxval"><el-input class="inputs" v-model="form.reasonableMaxval" autocomplete="off"></el-input></el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="合理最小值" prop="reasonableMinval"><el-input class="inputs" v-model="form.reasonableMinval" autocomplete="off"></el-input></el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="统一编码" prop="uniformCode"><el-input class="inputs" v-model="form.uniformCode" autocomplete="off"></el-input></el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="部件编号" prop="logicalUnitId"><el-input class="inputs" v-model="form.logicalUnitId" autocomplete="off"></el-input></el-form-item>
+        </el-col>
+      </el-row>
+		</el-form>
+		<div slot="footer" class="dialog-footer">
+			<el-button @click="close">取 消</el-button>
+			<el-button type="primary" @click="save">确 定</el-button>
+		</div>
+	</el-dialog>
+</template>
+
+<script>
+import api from '@/api/realtimeDatabaseConfiguration'
+import dayjs from "dayjs";
+export default {
+	name: 'TableEdit',
+	props: {
+		options: {
+			type: Array,
+			default: []
+		},
+		stationList: {
+			type: Array,
+			default: []
+		},
+	},
+	data() {
+		return {
+			form: {
+				id: "",
+        nemCode: "",
+        name: "",
+        valueUnit: "",
+        englishName: "",
+        typeId: "",
+        maxval: "",
+        minval: "",
+        reasonableMaxval: "",
+        reasonableMinval: "",
+        uniformCode: "",
+        logicalUnitId: "",
+			},
+			rules: {
+				id: [{ required: true, trigger: 'blur', message: '请输入' }],
+				nemCode: [{ required: true, trigger: 'blur', message: '请输入' }],
+				name: [{ required: true, trigger: 'blur', message: '请输入' }],
+				valueUnit: [{ required: true, trigger: 'blur', message: '请输入' }],
+				englishName: [{ required: true, trigger: 'blur', message: '请输入' }],
+				typeId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				maxval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				minval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				reasonableMaxval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				reasonableMinval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				uniformCode: [{ required: true, trigger: 'blur', message: '请输入' }],
+				logicalUnitId: [{ required: true, trigger: 'blur', message: '请输入' }],
+			},
+			title: '',
+			dialogFormVisible: false,
+			idAdd: true,
+		}
+	},
+	created() { },
+	methods: {
+    changeDate() {
+      this.$forceUpdate()
+    },
+		showEdit(row) {
+			if (!row) {
+				this.title = '添加'
+				this.idAdd = true
+			} else {
+				this.title = '编辑'
+				this.idAdd = false
+				this.form = Object.assign({}, row)
+			}
+			this.dialogFormVisible = true
+		},
+		close() {
+			this.$refs['form'].resetFields()
+			this.form = this.$options.data().form
+			this.dialogFormVisible = false
+			this.$emit('fetch-data')
+		},
+		save() {
+			this.$refs['form'].validate(async (valid) => {
+				if (valid) {
+					api.addTesting(this.form).then(res => {
+						if (res.data) {
+							this.$message({
+								type: 'success',
+								message: '添加成功!'
+							});
+							this.$emit('save-success');
+							this.dialogFormVisible = false
+						}
+					})
+				} else {
+					return false
+				}
+			})
+		},
+		handleChange() {
+		},
+		onBlur(val, param) {
+			if (typeof (this.form[param]) !== 'number') {
+				this.form[param] = val.replace(/[^0-9]/ig, "")
+			}
+		},
+	},
+}
+</script>
+<style lang="less" scoped>
+.inputs {
+	width: 200px;
+}
+
+.lists {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	justify-content: space-between;
+}
+</style>

+ 240 - 0
src/views/stationConfiguration/logicPoint/index.vue

@@ -0,0 +1,240 @@
+<template>
+	<div class="table-container">
+		<vab-query-form>
+			<div class="title">
+				<div class="left">
+					<div class="left-item">
+						<div style="width: 70px;">编码:</div>
+						<el-input v-model="fuzzyQuery_name" placeholder="请输入" clearable />
+					</div>
+					<el-button icon="el-icon-search" type="primary" native-type="submit" @click="searchFetchData">
+						查询
+					</el-button>
+				</div>
+				<div class="right">
+					<el-button icon="el-icon-plus" type="primary" @click="handleAdd">
+						添加
+					</el-button>
+					<el-button icon="el-icon-delete" type="danger" @click="handleDelete">
+						删除
+					</el-button>
+					<UploadExcel style="margin-left: 10px;" @getResult="getMyExcelData"></UploadExcel>
+					<ExportExcel :exportList="exportExcel" :useType="'export'" partsName="逻辑测点"></ExportExcel>
+					<ExportExcel :exportList="templateExcel" :useType="'template'" partsName="逻辑测点模板"></ExportExcel>
+				</div>
+			</div>
+			<el-table header-cell-class-name="table_header_style" border ref="tableSort" v-loading="listLoading" :data="list"
+				:element-loading-text="elementLoadingText" :height="height" @selection-change="setSelectRows">
+				<el-table-column show-overflow-tooltip type="selection" align="center" width="40"></el-table-column>
+				<el-table-column show-overflow-tooltip label="编号" prop="id" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="编码" prop="nemCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="名称" prop="name" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="单位" prop="valueUnit" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="英文名称" prop="englishName" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="类型编号" prop="typeId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最大值" prop="maxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最小值" prop="minval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最大值" prop="reasonableMaxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最小值" prop="reasonableMinval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="统一编码" prop="uniformCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="部件编号" prop="logicalUnitId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="操作" width="100px" fixed="right">
+					<template #default="{ row }">
+						<el-button type="text" @click="handleEdit(row)">编辑</el-button>
+						<el-button type="text" @click="handleDelete(row)">删除</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+			<el-pagination :background="background" :current-page="queryForm.pageNo" :layout="layout"
+				:page-size="queryForm.pageSize" :total="total" @current-change="handleCurrentChange"
+				@size-change="handleSizeChange"></el-pagination>
+			<table-edit ref="edit" :options="options" :stationList="stationList" @save-success="fetchData"></table-edit>
+		</vab-query-form>
+	</div>
+</template>
+<script>
+import UploadExcel from '@/components/UploadExcel/index'
+import ExportExcel from '@/components/ExportExcel/index'
+import api from '@/api/realtimeDatabaseConfiguration'
+import stationApi from '@/api/station'
+import TableEdit from './components/TableEdit'
+export default {
+	components: {
+		UploadExcel,
+		ExportExcel,
+		TableEdit,
+	},
+	data() {
+		return {
+			fuzzyQuery_name: '',
+			listLoading: true,
+			list: [],
+			options: [],
+			exportExcel: [],
+			templateExcel: [],
+			elementLoadingText: '正在加载...',
+			selectRows: '',
+			layout: 'total, sizes, prev, pager, next, jumper',
+			total: 0,
+			background: true,
+			exportList: [],
+			queryForm: {
+				pageNo: 1,
+				pageSize: 20,
+			},
+			stationList: [],
+			selectValue: ''
+		};
+	},
+	computed: {
+		height() {
+			return this.$baseTableHeight() + 50
+		},
+	},
+	created() {
+		// this.getStation()
+		this.fetchData()
+	},
+	methods: {
+		getMyExcelData(val) {
+			val.forEach(item => {
+				api.addTesting(item).then(res => {
+					if (res.code == 200) {
+						this.$message({
+							type: 'success',
+							message: '添加成功!'
+						});
+						this.fetchData()
+					}
+				})
+			})
+		},
+		getStation() {
+			stationApi.windpowerstationList({
+				id: '',
+				name: '',
+				companyid: '',
+				pageNum: 1,
+				pageSize: 1000,
+			}).then(res => {
+				if (res.data) {
+					this.listLoading = false
+					this.stationList = res.data.records
+				}
+			})
+		},
+    searchFetchData(){
+      this.queryForm.pageNo = 1
+      this.fetchData()
+    },
+		fetchData() {
+			api.testingList({
+				nemCode: this.fuzzyQuery_name,
+				pageNum: this.queryForm.pageNo,
+				pageSize: this.queryForm.pageSize,
+			}).then(res => {
+				if (res.data) {
+					this.listLoading = false
+					this.total = res.data.total
+					this.list = res.data.records
+					this.templateExcel = [
+						{
+							id: "",
+              nemCode: "",
+              name: "",
+              valueUnit: "",
+              englishName: "",
+              typeId: "",
+              maxval: "",
+              minval: "",
+              reasonableMaxval: "",
+              reasonableMinval: "",
+              uniformCode: "",
+              logicalUnitId: "",
+						}
+					]
+					// 导出
+					let exportExcel = []
+					res.data.records.forEach(item => {
+						exportExcel.push({
+							id: item.id,
+							nemCode: item.nemCode,
+							name: item.name,
+							valueUnit: item.valueUnit,
+							englishName: item.englishName,
+							typeId: item.typeId,
+							maxval: item.maxval,
+							minval: item.minval,
+							reasonableMaxval: item.reasonableMaxval,
+							reasonableMinval: item.reasonableMinval,
+							uniformCode: item.uniformCode,
+							logicalUnitId: item.logicalUnitId,
+						})
+					})
+					this.exportExcel = exportExcel
+				}
+			})
+		},
+		handleSizeChange(val) {
+			this.queryForm.pageSize = val
+			this.fetchData()
+		},
+		handleCurrentChange(val) {
+			this.queryForm.pageNo = val
+			this.fetchData()
+		},
+		handleAdd() {
+			this.$refs['edit'].showEdit()
+		},
+		handleEdit(row) {
+			this.$refs['edit'].showEdit(row)
+		},
+		handleDelete(row) {
+			if (row.id || this.selectRows.length > 0) {
+				this.$baseConfirm('你确定要删除吗', null, async () => {
+					let ids = ''
+					if (this.selectRows.length > 0) {
+						ids = this.selectRows.map((item) => item.id).join()
+					}
+					api.deleteTesting({
+						id: row.id || ids
+					}).then(res => {
+						if (res.data) {
+							this.$baseMessage('删除成功', 'success')
+							this.fetchData()
+						}
+					})
+				})
+			} else {
+				this.$baseMessage('未选中任何行', 'error')
+				return false
+			}
+		},
+		setSelectRows(val) {
+			this.selectRows = val
+		},
+	},
+}
+</script>
+<style lang="less" scoped>
+.title {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	justify-content: space-between;
+	margin-bottom: 20px;
+}
+
+.left {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+
+	.left-item {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		margin-right: 10px;
+	}
+}
+</style>

+ 193 - 0
src/views/stationConfiguration/stationMeasure/components/TableEdit.vue

@@ -0,0 +1,193 @@
+<template>
+	<el-dialog :title="title" :visible.sync="dialogFormVisible" width="800px" @close="close">
+		<el-form ref="form" :model="form" :rules="rules" label-width="150px">
+<!-- 
+				<el-table-column show-overflow-tooltip label="编号" prop="id" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="编码" prop="nemCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="名称" prop="name" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="实时库名称" prop="aname" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="型号" prop="model" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="单位" prop="valueUnit" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="英文名称" prop="englishName" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="类型编号" prop="typeId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="所属型号" prop="modelId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最大值" prop="maxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最小值" prop="minval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最大值" prop="reasonableMaxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最小值" prop="reasonableMinval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="统一编码" prop="uniformCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="短id" prop="shortId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="长id" prop="longId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="场站编号" prop="windpowerstationId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="实时配置编号" prop="realtimeId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="集团测点编号" prop="groupPointId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="具体名称" prop="specificName" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="系数" prop="coefficient" align="center" sortable></el-table-column>
+ -->
+      <el-row>
+        <el-col :span="12"><el-form-item label="编号" prop="id"><el-input class="inputs" v-model="form.id" autocomplete="off" :disabled="!idAdd?true:false"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="编码" prop="nemCode"><el-input class="inputs" v-model="form.nemCode" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="名称" prop="name"><el-input class="inputs" v-model="form.name" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="实时库名称" prop="aname"><el-input class="inputs" v-model="form.aname" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="型号" prop="model"><el-input class="inputs" v-model="form.model" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="单位" prop="valueUnit"><el-input class="inputs" v-model="form.valueUnit" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="英文名称" prop="englishName"><el-input class="inputs" v-model="form.englishName" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="类型编号" prop="typeId"><el-input class="inputs" v-model="form.typeId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="所属型号" prop="modelId"><el-input class="inputs" v-model="form.modelId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="最大值" prop="maxval"><el-input class="inputs" v-model="form.maxval" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="最小值" prop="minval"><el-input class="inputs" v-model="form.minval" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="合理最大值" prop="reasonableMaxval"><el-input class="inputs" v-model="form.reasonableMaxval" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="合理最小值" prop="reasonableMinval"><el-input class="inputs" v-model="form.reasonableMinval" autocomplete="off"></el-input></el-form-item></el-col>
+        <!-- <el-col :span="12"><el-form-item label="风机编号" prop="windturbineId"><el-input class="inputs" v-model="form.windturbineId" autocomplete="off"></el-input></el-form-item></el-col> -->
+        <el-col :span="12"><el-form-item label="统一编码" prop="uniformCode"><el-input class="inputs" v-model="form.uniformCode" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="短id" prop="shortId"><el-input class="inputs" v-model="form.shortId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="长id" prop="longId"><el-input class="inputs" v-model="form.longId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="场站编号" prop="windpowerstationId"><el-input class="inputs" v-model="form.windpowerstationId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="实时配置编号" prop="realtimeId"><el-input class="inputs" v-model="form.realtimeId" autocomplete="off"></el-input></el-form-item></el-col>
+        <!-- <el-col :span="12"><el-form-item label="部件编号" prop="logicalUnitId"><el-input class="inputs" v-model="form.logicalUnitId" autocomplete="off"></el-input></el-form-item></el-col> -->
+        <el-col :span="12"><el-form-item label="集团测点编号" prop="groupPointId"><el-input class="inputs" v-model="form.groupPointId" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="具体名称" prop="specificName"><el-input class="inputs" v-model="form.specificName" autocomplete="off"></el-input></el-form-item></el-col>
+        <el-col :span="12"><el-form-item label="系数" prop="coefficient"><el-input class="inputs" v-model="form.coefficient" autocomplete="off"></el-input></el-form-item></el-col>
+      </el-row>
+		</el-form>
+		<div slot="footer" class="dialog-footer">
+			<el-button @click="close">取 消</el-button>
+			<el-button type="primary" @click="save">确 定</el-button>
+		</div>
+	</el-dialog>
+</template>
+
+<script>
+import api from '@/api/realtimeDatabaseConfiguration'
+import dayjs from "dayjs";
+export default {
+	name: 'TableEdit',
+	props: {
+		options: {
+			type: Array,
+			default: []
+		},
+		stationList: {
+			type: Array,
+			default: []
+		},
+	},
+	data() {
+		return {
+			form: {
+				id: "",
+        nemCode: "",
+        name: "",
+        aname: "",
+        model: "",
+        valueUnit: "",
+        englishName: "",
+        typeId: "",
+        modelId: "",
+        maxval: "",
+        minval: "",
+        reasonableMaxval: "",
+        reasonableMinval: "",
+        // windturbineId: "",
+        uniformCode: "",
+        shortId: "",
+        longId: "",
+        windpowerstationId: "",
+        realtimeId: "",
+        // logicalUnitId: "",
+        groupPointId: "",
+        specificName: "",
+        coefficient: "",
+			},
+			rules: {
+				id: [{ required: true, trigger: 'blur', message: '请输入' }],
+				nemCode: [{ required: true, trigger: 'blur', message: '请输入' }],
+				name: [{ required: true, trigger: 'blur', message: '请输入' }],
+				aname: [{ required: true, trigger: 'blur', message: '请输入' }],
+				model: [{ required: true, trigger: 'blur', message: '请输入' }],
+				valueUnit: [{ required: true, trigger: 'blur', message: '请输入' }],
+				englishName: [{ required: true, trigger: 'blur', message: '请输入' }],
+				typeId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				modelId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				maxval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				minval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				reasonableMaxval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				reasonableMinval: [{ required: true, trigger: 'blur', message: '请输入' }],
+				// windturbineId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				uniformCode: [{ required: true, trigger: 'blur', message: '请输入' }],
+				shortId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				longId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				windpowerstationId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				realtimeId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				// logicalUnitId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				groupPointId: [{ required: true, trigger: 'blur', message: '请输入' }],
+				specificName: [{ required: true, trigger: 'blur', message: '请输入' }],
+				coefficient: [{ required: true, trigger: 'blur', message: '请输入' }],
+			},
+			title: '',
+			dialogFormVisible: false,
+			idAdd: true,
+		}
+	},
+	created() { },
+	methods: {
+    changeDate() {
+      this.$forceUpdate()
+    },
+		showEdit(row) {
+			if (!row) {
+				this.title = '添加'
+				this.idAdd = true
+			} else {
+				this.title = '编辑'
+				this.idAdd = false
+				this.form = Object.assign({}, row)
+			}
+			this.dialogFormVisible = true
+		},
+		close() {
+			this.$refs['form'].resetFields()
+			this.form = this.$options.data().form
+			this.dialogFormVisible = false
+			this.$emit('fetch-data')
+		},
+		save() {
+			this.$refs['form'].validate(async (valid) => {
+				if (valid) {
+					api.addWppoint(this.form).then(res => {
+						if (res.data) {
+							this.$message({
+								type: 'success',
+								message: '添加成功!'
+							});
+							this.$emit('save-success');
+							this.dialogFormVisible = false
+						}
+					})
+				} else {
+					return false
+				}
+			})
+		},
+		handleChange() {
+		},
+		onBlur(val, param) {
+			if (typeof (this.form[param]) !== 'number') {
+				this.form[param] = val.replace(/[^0-9]/ig, "")
+			}
+		},
+	},
+}
+</script>
+<style lang="less" scoped>
+.inputs {
+	width: 200px;
+}
+
+.lists {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	justify-content: space-between;
+}
+</style>

+ 267 - 0
src/views/stationConfiguration/stationMeasure/index.vue

@@ -0,0 +1,267 @@
+<template>
+	<div class="table-container">
+		<vab-query-form>
+			<div class="title">
+				<div class="left">
+					<div class="left-item">
+						<div style="width: 70px;">编码:</div>
+						<el-input v-model="fuzzyQuery_name" placeholder="请输入" clearable />
+					</div>
+					<el-button icon="el-icon-search" type="primary" native-type="submit" @click="searchFetchData">
+						查询
+					</el-button>
+				</div>
+				<div class="right">
+					<el-button icon="el-icon-plus" type="primary" @click="handleAdd">
+						添加
+					</el-button>
+					<el-button icon="el-icon-delete" type="danger" @click="handleDelete">
+						删除
+					</el-button>
+					<UploadExcel style="margin-left: 10px;" @getResult="getMyExcelData"></UploadExcel>
+					<ExportExcel :exportList="exportExcel" :useType="'export'" partsName="场站测点"></ExportExcel>
+					<ExportExcel :exportList="templateExcel" :useType="'template'" partsName="场站测点模板"></ExportExcel>
+				</div>
+			</div>
+			<el-table header-cell-class-name="table_header_style" border ref="tableSort" v-loading="listLoading" :data="list"
+				:element-loading-text="elementLoadingText" :height="height" @selection-change="setSelectRows">
+				<el-table-column show-overflow-tooltip type="selection" align="center" width="40"></el-table-column>
+				<el-table-column show-overflow-tooltip label="编号" prop="id" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="编码" prop="nemCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="名称" prop="name" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="实时库名称" prop="aname" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="型号" prop="model" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="单位" prop="valueUnit" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="英文名称" prop="englishName" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="类型编号" prop="typeId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="所属型号" prop="modelId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最大值" prop="maxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="最小值" prop="minval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最大值" prop="reasonableMaxval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="合理最小值" prop="reasonableMinval" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="统一编码" prop="uniformCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="短id" prop="shortId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="长id" prop="longId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="场站编号" prop="windpowerstationId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="实时配置编号" prop="realtimeId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="集团测点编号" prop="groupPointId" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="具体名称" prop="specificName" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="系数" prop="coefficient" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="操作" width="100px" fixed="right">
+					<template #default="{ row }">
+						<el-button type="text" @click="handleEdit(row)">编辑</el-button>
+						<el-button type="text" @click="handleDelete(row)">删除</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+			<el-pagination :background="background" :current-page="queryForm.pageNo" :layout="layout"
+				:page-size="queryForm.pageSize" :total="total" @current-change="handleCurrentChange"
+				@size-change="handleSizeChange"></el-pagination>
+			<table-edit ref="edit" :options="options" :stationList="stationList" @save-success="fetchData"></table-edit>
+		</vab-query-form>
+	</div>
+</template>
+<script>
+import UploadExcel from '@/components/UploadExcel/index'
+import ExportExcel from '@/components/ExportExcel/index'
+import api from '@/api/realtimeDatabaseConfiguration'
+import stationApi from '@/api/station'
+import TableEdit from './components/TableEdit'
+export default {
+	components: {
+		UploadExcel,
+		ExportExcel,
+		TableEdit,
+	},
+	data() {
+		return {
+			fuzzyQuery_name: '',
+			listLoading: true,
+			list: [],
+			options: [],
+			exportExcel: [],
+			templateExcel: [],
+			elementLoadingText: '正在加载...',
+			selectRows: '',
+			layout: 'total, sizes, prev, pager, next, jumper',
+			total: 0,
+			background: true,
+			exportList: [],
+			queryForm: {
+				pageNo: 1,
+				pageSize: 20,
+			},
+			stationList: [],
+			selectValue: ''
+		};
+	},
+	computed: {
+		height() {
+			return this.$baseTableHeight() + 50
+		},
+	},
+	created() {
+		// this.getStation()
+		this.fetchData()
+	},
+	methods: {
+		getMyExcelData(val) {
+			val.forEach(item => {
+				api.addWppoint(item).then(res => {
+					if (res.code == 200) {
+						this.$message({
+							type: 'success',
+							message: '添加成功!'
+						});
+						this.fetchData()
+					}
+				})
+			})
+		},
+		getStation() {
+			stationApi.windpowerstationList({
+				id: '',
+				name: '',
+				companyid: '',
+				pageNum: 1,
+				pageSize: 1000,
+			}).then(res => {
+				if (res.data) {
+					this.listLoading = false
+					this.stationList = res.data.records
+				}
+			})
+		},
+    searchFetchData(){
+      this.queryForm.pageNo = 1
+      this.fetchData()
+    },
+		fetchData() {
+			api.wppointList({
+				name: this.fuzzyQuery_name,
+				pageNum: this.queryForm.pageNo,
+				pageSize: this.queryForm.pageSize,
+			}).then(res => {
+				if (res.data) {
+					this.listLoading = false
+					this.total = res.data.total
+					this.list = res.data.records
+					this.templateExcel = [
+						{
+							id: "",
+							nemCode: "",
+							name: "",
+							aname: "",
+							model: "",
+							valueUnit: "",
+							englishName: "",
+							typeId: "",
+							modelId: "",
+							maxval: "",
+							minval: "",
+							reasonableMaxval: "",
+							reasonableMinval: "",
+							uniformCode: "",
+							shortId: "",
+							longId: "",
+              windpowerstationId: "",
+              realtimeId: "",
+              groupPointId: "",
+              specificName: "",
+              coefficient: "",
+						}
+					]
+					// 导出
+					let exportExcel = []
+					res.data.records.forEach(item => {
+						exportExcel.push({
+							id: item.id,
+							nemCode: item.nemCode,
+							name: item.name,
+							aname: item.aname,
+							model: item.model,
+							valueUnit: item.valueUnit,
+							englishName: item.englishName,
+							typeId: item.typeId,
+							modelId: item.modelId,
+							maxval: item.maxval,
+							minval: item.minval,
+							reasonableMaxval: item.reasonableMaxval,
+							reasonableMinval: item.reasonableMinval,
+							uniformCode: item.uniformCode,
+							shortId: item.shortId,
+							longId: item.longId,
+							windpowerstationId: item.windpowerstationId,
+							realtimeId: item.realtimeId,
+							groupPointId: item.groupPointId,
+							specificName: item.specificName,
+							coefficient: item.coefficient,
+						})
+					})
+					this.exportExcel = exportExcel
+				}
+			})
+		},
+		handleSizeChange(val) {
+			this.queryForm.pageSize = val
+			this.fetchData()
+		},
+		handleCurrentChange(val) {
+			this.queryForm.pageNo = val
+			this.fetchData()
+		},
+		handleAdd() {
+			this.$refs['edit'].showEdit()
+		},
+		handleEdit(row) {
+			this.$refs['edit'].showEdit(row)
+		},
+		handleDelete(row) {
+			if (row.id || this.selectRows.length > 0) {
+				this.$baseConfirm('你确定要删除吗', null, async () => {
+					let ids = ''
+					if (this.selectRows.length > 0) {
+						ids = this.selectRows.map((item) => item.id).join()
+					}
+					api.deleteWppoint({
+						id: row.id || ids
+					}).then(res => {
+						if (res.data) {
+							this.$baseMessage('删除成功', 'success')
+							this.fetchData()
+						}
+					})
+				})
+			} else {
+				this.$baseMessage('未选中任何行', 'error')
+				return false
+			}
+		},
+		setSelectRows(val) {
+			this.selectRows = val
+		},
+	},
+}
+</script>
+<style lang="less" scoped>
+.title {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	justify-content: space-between;
+	margin-bottom: 20px;
+}
+
+.left {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+
+	.left-item {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		margin-right: 10px;
+	}
+}
+</style>

+ 159 - 0
src/views/stationConfiguration/unifyCode/components/TableEdit.vue

@@ -0,0 +1,159 @@
+<template>
+	<el-dialog :title="title" :visible.sync="dialogFormVisible" width="800px" @close="close">
+		<el-form ref="form" :model="form" :rules="rules" label-width="150px">
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="编号" prop="id">
+            <el-input class="inputs" v-model="form.id" autocomplete="off" :disabled="!idAdd?true:false"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="编码" prop="nemCode">
+            <el-input class="inputs" v-model="form.nemCode" autocomplete="off"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="说明" prop="description">
+            <el-input class="inputs" v-model="form.description" autocomplete="off"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="设备类型" prop="equipmentType">
+            <el-select style="width: 200px" v-model="form.equipmentType" placeholder="请选择">
+              <el-option
+                v-for="item in equipmentTypeOptions"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id">
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="测点类型" prop="pointType">
+            <el-select style="width: 200px" v-model="form.pointType" placeholder="请选择">
+              <el-option
+                v-for="item in pointTypeOptions"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id">
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+		</el-form>
+		<div slot="footer" class="dialog-footer">
+			<el-button @click="close">取 消</el-button>
+			<el-button type="primary" @click="save">确 定</el-button>
+		</div>
+	</el-dialog>
+</template>
+
+<script>
+import api from '@/api/realtimeDatabaseConfiguration'
+import dayjs from "dayjs";
+export default {
+	name: 'TableEdit',
+	props: {
+		options: {
+			type: Array,
+			default: []
+		},
+		stationList: {
+			type: Array,
+			default: []
+		},
+	},
+	data() {
+		return {
+      equipmentTypeOptions: [
+        {id: "fj", name:"风电"},
+        {id: "gf", name:"光伏"},
+      ],
+      pointTypeOptions: [
+        {id: "AI", name:"遥测"},
+        {id: "DI", name:"遥信"},
+        {id: "CI", name:"计算"},
+      ],
+			form: {
+				id: "",
+        nemCode: "",
+        description: "",
+        equipmentType: "",
+        pointType: "",
+			},
+			rules: {
+				id: [{ required: true, trigger: 'blur', message: '请输入' }],
+				nemCode: [{ required: true, trigger: 'blur', message: '请输入' }],
+				description: [{ required: true, trigger: 'blur', message: '请输入' }],
+				equipmentType: [{ required: true, trigger: 'blur', message: '请输入' }],
+				pointType: [{ required: true, trigger: 'blur', message: '请输入' }],
+			},
+			title: '',
+			dialogFormVisible: false,
+			idAdd: true,
+		}
+	},
+	created() { },
+	methods: {
+    changeDate() {
+      this.$forceUpdate()
+    },
+		showEdit(row) {
+			if (!row) {
+				this.title = '添加'
+				this.idAdd = true
+			} else {
+				this.title = '编辑'
+				this.idAdd = false
+				this.form = Object.assign({}, row)
+			}
+			this.dialogFormVisible = true
+		},
+		close() {
+			this.$refs['form'].resetFields()
+			this.form = this.$options.data().form
+			this.dialogFormVisible = false
+			this.$emit('fetch-data')
+		},
+		save() {
+			this.$refs['form'].validate(async (valid) => {
+				if (valid) {
+					api.addUniform(this.form).then(res => {
+						if (res.data) {
+							this.$message({
+								type: 'success',
+								message: '操作成功!'
+							});
+							this.$emit('save-success');
+							this.dialogFormVisible = false
+						}
+					})
+				} else {
+					return false
+				}
+			})
+		},
+		handleChange() {
+		},
+		onBlur(val, param) {
+			if (typeof (this.form[param]) !== 'number') {
+				this.form[param] = val.replace(/[^0-9]/ig, "")
+			}
+		},
+	},
+}
+</script>
+<style lang="less" scoped>
+.inputs {
+	width: 200px;
+}
+
+.lists {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	justify-content: space-between;
+}
+</style>

+ 244 - 0
src/views/stationConfiguration/unifyCode/index.vue

@@ -0,0 +1,244 @@
+<template>
+	<div class="table-container">
+		<vab-query-form>
+			<div class="title">
+				<div class="left">
+					<div class="left-item">
+						<div style="width: 70px;">编码:</div>
+						<el-input v-model="fuzzyQuery_name" placeholder="请输入" clearable />
+					</div>
+					<el-button icon="el-icon-search" type="primary" native-type="submit" @click="searchFetchData">
+						查询
+					</el-button>
+				</div>
+				<div class="right">
+					<el-button icon="el-icon-plus" type="primary" @click="handleAdd">
+						添加
+					</el-button>
+					<el-button icon="el-icon-delete" type="danger" @click="handleDelete">
+						删除
+					</el-button>
+					<UploadExcel style="margin-left: 10px;" @getResult="getMyExcelData"></UploadExcel>
+					<ExportExcel :exportList="exportExcel" :useType="'export'" partsName="统一编码"></ExportExcel>
+					<ExportExcel :exportList="templateExcel" :useType="'template'" partsName="统一编码模板"></ExportExcel>
+				</div>
+			</div>
+			<el-table header-cell-class-name="table_header_style" border ref="tableSort" v-loading="listLoading" :data="list"
+				:element-loading-text="elementLoadingText" :height="height" @selection-change="setSelectRows">
+				<el-table-column show-overflow-tooltip type="selection" align="center" width="40"></el-table-column>
+				<el-table-column show-overflow-tooltip label="编号" prop="id" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="编码" prop="nemCode" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="说明" prop="description" align="center" sortable></el-table-column>
+				<el-table-column label="设备类型" prop="equipmentType" align="center" sortable :formatter="equipmentTypeFormatter"></el-table-column>
+				<el-table-column label="测点类型" prop="pointType" align="center" sortable :formatter="pointTypeFormatter"></el-table-column>
+				<el-table-column show-overflow-tooltip label="操作" width="100px" fixed="right">
+					<template #default="{ row }">
+						<el-button type="text" @click="handleEdit(row)">编辑</el-button>
+						<el-button type="text" @click="handleDelete(row)">删除</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+			<el-pagination :background="background" :current-page="queryForm.pageNo" :layout="layout"
+				:page-size="queryForm.pageSize" :total="total" @current-change="handleCurrentChange"
+				@size-change="handleSizeChange"></el-pagination>
+			<table-edit ref="edit" :options="options" :stationList="stationList" @save-success="fetchData"></table-edit>
+		</vab-query-form>
+	</div>
+</template>
+<script>
+import UploadExcel from '@/components/UploadExcel/index'
+import ExportExcel from '@/components/ExportExcel/index'
+import api from '@/api/realtimeDatabaseConfiguration'
+import stationApi from '@/api/station'
+import TableEdit from './components/TableEdit'
+export default {
+	components: {
+		UploadExcel,
+		ExportExcel,
+		TableEdit,
+	},
+	data() {
+		return {
+      // 设备类型:风电/光伏
+      // 测点类型:遥测/遥信/计算 遥信DI  遥测AI 计算CI
+      equipmentTypeOptions: [
+        {id: "fj", name:"风电"},
+        {id: "gf", name:"光伏"},
+      ],
+      pointTypeOptions: [
+        {id: "AI", name:"遥测"},
+        {id: "DI", name:"遥信"},
+        {id: "CI", name:"计算"},
+      ],
+			fuzzyQuery_name: '',
+			listLoading: true,
+			list: [],
+			options: [],
+			exportExcel: [],
+			templateExcel: [],
+			elementLoadingText: '正在加载...',
+			selectRows: '',
+			layout: 'total, sizes, prev, pager, next, jumper',
+			total: 0,
+			background: true,
+			exportList: [],
+			queryForm: {
+				pageNo: 1,
+				pageSize: 20,
+			},
+			stationList: [],
+			selectValue: ''
+		};
+	},
+	computed: {
+		height() {
+			return this.$baseTableHeight() + 50
+		},
+	},
+	created() {
+		// this.getStation()
+		this.fetchData()
+	},
+	methods: {
+    equipmentTypeFormatter(row, column, cellValue, index) {
+      for (const iterator of this.equipmentTypeOptions) {
+        if(row.equipmentType === iterator.id){
+          return iterator.name
+        }
+      }
+    },
+    pointTypeFormatter(row, column, cellValue, index) {
+      for (const iterator of this.pointTypeOptions) {
+        if(row.pointType === iterator.id){
+          return iterator.name
+        }
+      }
+    },
+		getMyExcelData(val) {
+			val.forEach(item => {
+				api.addUniform(item).then(res => {
+					if (res.code == 200) {
+						this.$message({
+							type: 'success',
+							message: '添加成功!'
+						});
+						this.fetchData()
+					}
+				})
+			})
+		},
+		getStation() {
+			stationApi.windpowerstationList({
+				id: '',
+				name: '',
+				companyid: '',
+				pageNum: 1,
+				pageSize: 1000,
+			}).then(res => {
+				if (res.data) {
+					this.listLoading = false
+					this.stationList = res.data.records
+				}
+			})
+		},
+    searchFetchData(){
+      this.queryForm.pageNo = 1
+      this.fetchData()
+    },
+		fetchData() {
+			api.uniformList({
+				nemCode: this.fuzzyQuery_name,
+				pageNum: this.queryForm.pageNo,
+				pageSize: this.queryForm.pageSize,
+			}).then(res => {
+				if (res.data) {
+					this.listLoading = false
+					this.total = res.data.total
+					this.list = res.data.records
+					this.templateExcel = [
+						{
+							id: "",
+              nemCode: "",
+              description: "",
+              equipmentType: "",
+              pointType: "",
+						}
+					]
+					// 导出
+					let exportExcel = []
+					res.data.records.forEach(item => {
+						exportExcel.push({
+							id: item.id,
+              nemCode: item.nemCode,
+              description: item.description,
+              equipmentType: item.equipmentType,
+              pointType: item.pointType,
+						})
+					})
+					this.exportExcel = exportExcel
+				}
+			})
+		},
+		handleSizeChange(val) {
+			this.queryForm.pageSize = val
+			this.fetchData()
+		},
+		handleCurrentChange(val) {
+			this.queryForm.pageNo = val
+			this.fetchData()
+		},
+		handleAdd() {
+			this.$refs['edit'].showEdit()
+		},
+		handleEdit(row) {
+			this.$refs['edit'].showEdit(row)
+		},
+		handleDelete(row) {
+			if (row.id || this.selectRows.length > 0) {
+				this.$baseConfirm('你确定要删除吗', null, async () => {
+					let ids = ''
+					if (this.selectRows.length > 0) {
+						ids = this.selectRows.map((item) => item.id).join()
+					}
+					api.deleteUniform({
+						id: row.id || ids
+					}).then(res => {
+						if (res.data) {
+							this.$baseMessage('删除成功', 'success')
+							this.fetchData()
+						}
+					})
+				})
+			} else {
+				this.$baseMessage('未选中任何行', 'error')
+				return false
+			}
+		},
+		setSelectRows(val) {
+			this.selectRows = val
+		},
+	},
+}
+</script>
+<style lang="less" scoped>
+.title {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	justify-content: space-between;
+	margin-bottom: 20px;
+}
+
+.left {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+
+	.left-item {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		margin-right: 10px;
+	}
+}
+</style>