Parcourir la source

Merge branch 'master' of http://124.70.43.205:3000/lining/jn_manager into devChenXinLei

chenxinlei il y a 2 ans
Parent
commit
fd864fe8e4

+ 74 - 1
src/api/realtimeDatabaseConfiguration.js

@@ -19,8 +19,81 @@ const deleteDatabase =(data)=>{
       method:"delete",
   })
 }
+
+// 设备厂商
+const manufacturer =(data)=>{
+  return request({
+      url:`/manufacturer/listByPage?name=${encodeURIComponent(data.name)}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
+      method:"get"
+  })
+}
+const addManufacturer =(pairs)=>{
+  return request({
+      url:`/manufacturer/save`,
+      method:"post",
+      data: pairs
+  })
+}
+const deleteManufacturer =(data)=>{
+  return request({
+      url:`/manufacturer/remove-manufacturer/${data.id}`,
+      method:"delete",
+  })
+}
+
+// 设备类型
+const modelpower =(data)=>{
+  return request({
+      url:`/modelpower/listByPage?name=${encodeURIComponent(data.name)}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
+      method:"get"
+  })
+}
+const addModelpower =(pairs)=>{
+  return request({
+      url:`/modelpower/save`,
+      method:"post",
+      data: pairs
+  })
+}
+const deleteModelpower =(data)=>{
+  return request({
+      url:`/modelpower/remove-modelpower/${data.id}`,
+      method:"delete",
+  })
+}
+
+// 变电所
+const windsubstation =(data)=>{
+  return request({
+      url:`/windsubstation/listByPage?name=${encodeURIComponent(data.name)}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
+      method:"get"
+  })
+}
+const addWindsubstation =(pairs)=>{
+  return request({
+      url:`/windsubstation/save`,
+      method:"post",
+      data: pairs
+  })
+}
+const deleteWindsubstation =(data)=>{
+  return request({
+      url:`/windsubstation/remove-windsub/${data.id}`,
+      method:"delete",
+  })
+}
+
 export default {
 	database,
 	addDatabase,
-	deleteDatabase
+	deleteDatabase,
+	addManufacturer,
+	addModelpower,
+	addWindsubstation,
+	manufacturer,
+	modelpower,
+	windsubstation,
+	deleteManufacturer,
+	deleteModelpower,
+	deleteWindsubstation,
 }

+ 20 - 1
src/api/station.js

@@ -142,6 +142,7 @@ const deleteEquipmentmodel =(data)=>{
       method:"delete",
   })
 }
+
 const meterpoint =(data)=>{
   return request({
       url:`/meterpoint/listByPage?name=${encodeURIComponent(data.name)}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
@@ -161,6 +162,20 @@ const deleteMeterpoint =(data)=>{
       method:"delete",
   })
 }
+
+
+const getStationPersis =(data)=>{
+  return request({
+		url:`/windpowerstation/getStationPersis?station=${data.station}&startdate=${data.startdate}&enddate=${data.enddate}`,
+		method:"get"
+  })
+}
+const getAdmList =(data)=>{
+  return request({
+		url:`/windpowerstation/getAdmList?companyid=${data.companyid}&regionid=${data.regionid}`,
+		method:"get"
+  })
+}
 export default {
   companys,
   addCompanys,
@@ -183,8 +198,12 @@ export default {
   newtreeTreels,
 	equipmentmodel,
 	addEquipmentmodel,
+
 	deleteEquipmentmodel,
 	meterpoint,
 	addMeterpoint,
-	deleteMeterpoint
+
+	deleteMeterpoint,
+	getStationPersis,
+	getAdmList,
 };

+ 25 - 1
src/api/table.js

@@ -51,6 +51,27 @@ const newtreeTreels=(data)=>{
       method:"get"
   })
 }
+
+// 可研电量
+const projectstudy =(data)=>{
+  return request({
+      url:`/projectstudy/List?name=${encodeURIComponent(data.name)}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
+      method:"get"
+  })
+}
+const addProjectstudy =(pairs)=>{
+  return request({
+      url:`/projectstudy/add`,
+      method:"post",
+      data: pairs
+  })
+}
+const deleteProjectstudy =(data)=>{
+  return request({
+      url:`/projectstudy/remove-study/${data.id}`,
+      method:"delete",
+  })
+}
 export default {
   projectplan,
   addProjectplan,
@@ -59,5 +80,8 @@ export default {
   indicators,
   addIndicators,
   removeIndicators,
-  newtreeTreels
+  newtreeTreels,
+	addProjectstudy,
+	projectstudy,
+	deleteProjectstudy
 };

+ 42 - 0
src/router/index.js

@@ -122,6 +122,48 @@ export const asyncRoutes = [
           import('@/views/stationConfiguration/equipmentmodel/index'),
         meta: { title: '设备型号' },
       },
+			{
+        path: 'manufacturer',
+        name: 'manufacturer',
+        component: () =>
+          import('@/views/stationConfiguration/manufacturer/index'),
+        meta: { title: '设备厂商' },
+      },
+			{
+        path: 'modelpower',
+        name: 'modelpower',
+        component: () =>
+          import('@/views/stationConfiguration/modelpower/index'),
+        meta: { title: '设备类型' },
+      },
+			{
+        path: 'windsubstation',
+        name: 'windsubstation',
+        component: () =>
+          import('@/views/stationConfiguration/windsubstation/index'),
+        meta: { title: '变电所' },
+      },
+			{
+        path: 'projectstudy',
+        name: 'projectstudy',
+        component: () =>
+          import('@/views/stationConfiguration/projectstudy/index'),
+        meta: { title: '可研电量' },
+      },
+			{
+        path: 'admlist',
+        name: 'admlist',
+        component: () =>
+          import('@/views/stationConfiguration/admlist/index'),
+        meta: { title: '装机量管理' },
+      },
+			{
+        path: 'stationpersis',
+        name: 'stationpersis',
+        component: () =>
+          import('@/views/stationConfiguration/stationpersis/index'),
+        meta: { title: '场站功率图表' },
+      },
     ],
   },
   {

+ 234 - 0
src/views/stationConfiguration/admlist/index.vue

@@ -0,0 +1,234 @@
+<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="fetchData">
+						查询
+					</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 ref="tableSort" v-loading="listLoading" :data="list" :element-loading-text="elementLoadingText"
+				:height="height" @selection-change="setSelectRows">
+				<!-- <el-table-column show-overflow-tooltip type="selection" 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="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="capacity" align="center" sortable>
+				</el-table-column>
+				<el-table-column show-overflow-tooltip label="装机容量单位" prop="capacityunit" align="center" sortable>
+				</el-table-column>
+				<el-table-column show-overflow-tooltip label="装机台数" prop="quantity" 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="systemmanufact" align="center" sortable>
+				</el-table-column>
+				<el-table-column show-overflow-tooltip label="地址" prop="address" 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>
+		</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'
+export default {
+	components: {
+		UploadExcel,
+		ExportExcel,
+	},
+	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()
+	},
+	watch: {
+		'$route'() {
+			this.fetchData()
+		}
+	},
+	methods: {
+		getMyExcelData(val) {
+			val.forEach(item => {
+				api.addModelpower(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
+				}
+			})
+		},
+		fetchData() {
+			stationApi.getAdmList({
+				companyid: this.$route.query.companyid || '',
+				regionid: this.$route.query.regionid || '',
+				// 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
+					this.templateExcel = [
+						{
+							id: '',
+							code: '',
+							name: '',
+							capacity: '',
+							capacityunit: '',
+							quantity: '',
+							model: '',
+							systemmanufact: '',
+							address: ''
+						}
+					]
+					// 导出
+					let exportExcel = []
+					res.data.forEach(item => {
+						exportExcel.push({
+							id: item.id,
+							code: item.code,
+							name: item.name,
+							capacity: item.capacity,
+							capacityunit: item.capacityunit,
+							quantity: item.quantity,
+							model: item.model,
+							systemmanufact: item.systemmanufact,
+							address: item.address
+						})
+					})
+					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.deleteModelpower({
+						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>

+ 169 - 163
src/views/stationConfiguration/equipmentmodel/components/TableEdit.vue

@@ -1,178 +1,184 @@
 <template>
-	<el-dialog :title="title" :visible.sync="dialogFormVisible" width="800px" @close="close">
-		<el-form ref="form" :model="form" :rules="rules">
-			<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="code">
-					<el-input class="inputs" v-model.trim="form.code" autocomplete="off"></el-input>
-				</el-form-item>
-			</div>
-			<div class="lists">
-				<el-form-item label="名称" prop="name">
-					<el-input class="inputs" v-model="form.name" autocomplete="off"></el-input>
-				</el-form-item>
-				<el-form-item label="描述" prop="description">
-					<el-input class="inputs" v-model="form.description" autocomplete="off"></el-input>
-				</el-form-item>
-			</div>
-			<div class="lists">
-				<el-form-item label="容量" prop="powerproduction">
-					<el-input class="inputs" v-model.trim="form.powerproduction" autocomplete="off"></el-input>
-				</el-form-item>
-				<el-form-item label="厂商编号" prop="windturbinemanufacturerid">
-					<el-input class="inputs" v-model.trim="form.windturbinemanufacturerid" autocomplete="off"></el-input>
-				</el-form-item>
-			</div>
-			<div class="lists">
-				<el-form-item label="图片" prop="photo">
-					<el-input class="inputs" v-model="form.photo" autocomplete="off">
-					</el-input>
-				</el-form-item>
-				<el-form-item label="传输总发电量单位" prop="unit">
-					<el-input class="inputs" v-model.trim="form.unit" autocomplete="off"></el-input>
-				</el-form-item>
-			</div>
-			<div class="lists">
-				<el-form-item label="切入风速" prop="cutinwindspeed">
-					<el-input class="inputs" v-model="form.cutinwindspeed" autocomplete="off"></el-input>
-				</el-form-item>
-				<el-form-item label="额定风速" prop="ratedwindspeed">
-					<el-input class="inputs" v-model.trim="form.ratedwindspeed" autocomplete="off"></el-input>
-				</el-form-item>
-			</div>
-			<div class="lists">
-				<el-form-item label="切出风速" prop="cutoutwindspeed">
-					<el-input class="inputs" v-model="form.cutoutwindspeed" autocomplete="off">
-					</el-input>
-				</el-form-item>
-				<el-form-item label="叶片切入面积" prop="sweptarea">
-					<el-input class="inputs" v-model.trim="form.sweptarea" autocomplete="off"></el-input>
-				</el-form-item>
-			</div>
-			<div class="lists">
-				<el-form-item label="设备类别" prop="equipmentcategory">
-					<el-input class="inputs" v-model="form.equipmentcategory" autocomplete="off">
-					</el-input>
-				</el-form-item>
-			</div>
-		</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>
+
+
+
+
+
+
+  <el-dialog :title="title" :visible.sync="dialogFormVisible" width="800px" @close="close">
+    <el-form ref="form" :model="form" :rules="rules">
+      <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="code">
+          <el-input class="inputs" v-model.trim="form.code" autocomplete="off"></el-input>
+        </el-form-item>
+      </div>
+      <div class="lists">
+        <el-form-item label="名称" prop="name">
+          <el-input class="inputs" v-model="form.name" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="描述" prop="description">
+          <el-input class="inputs" v-model="form.description" autocomplete="off"></el-input>
+        </el-form-item>
+      </div>
+      <div class="lists">
+        <el-form-item label="容量" prop="powerproduction">
+          <el-input class="inputs" v-model.trim="form.powerproduction" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="厂商编号" prop="windturbinemanufacturerid">
+          <el-input class="inputs" v-model.trim="form.windturbinemanufacturerid" autocomplete="off"></el-input>
+        </el-form-item>
+      </div>
+      <div class="lists">
+        <el-form-item label="图片" prop="photo">
+          <el-input class="inputs" v-model="form.photo" autocomplete="off">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="传输总发电量单位" prop="unit">
+          <el-input class="inputs" v-model.trim="form.unit" autocomplete="off"></el-input>
+        </el-form-item>
+      </div>
+      <div class="lists">
+        <el-form-item label="切入风速" prop="cutinwindspeed">
+          <el-input class="inputs" v-model="form.cutinwindspeed" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="额定风速" prop="ratedwindspeed">
+          <el-input class="inputs" v-model.trim="form.ratedwindspeed" autocomplete="off"></el-input>
+        </el-form-item>
+      </div>
+      <div class="lists">
+        <el-form-item label="切出风速" prop="cutoutwindspeed">
+          <el-input class="inputs" v-model="form.cutoutwindspeed" autocomplete="off">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="叶片切入面积" prop="sweptarea">
+          <el-input class="inputs" v-model.trim="form.sweptarea" autocomplete="off"></el-input>
+        </el-form-item>
+      </div>
+      <div class="lists">
+        <el-form-item label="设备类别" prop="equipmentcategory">
+          <el-input class="inputs" v-model="form.equipmentcategory" autocomplete="off">
+          </el-input>
+        </el-form-item>
+      </div>
+    </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/station'
 import dayjs from "dayjs";
 export default {
-	name: 'TableEdit',
-	props: {
-		options: {
-			type: Array,
-			default: []
-		},
-		stationList: {
-			type: Array,
-			default: []
-		},
-	},
-	data() {
-		return {
-			form: {
-				id: '',
-				code: '',
-				name: '',
-				description: '',
-				powerproduction: '',
-				windturbinemanufacturerid: '',
-				photo: '',
-				unit: '',
-				cutinwindspeed: '',
-				ratedwindspeed: '',
-				cutoutwindspeed: '',
-				sweptarea: '',
-				equipmentcategory: '',
-			},
-			rules: {
-				id: [{ required: true, trigger: 'blur', message: '请输入' }],
-				code: [{ required: true, trigger: 'blur', message: '请输入' }],
-				name: [{ required: true, trigger: 'blur', message: '请输入' }],
-				description: [{ required: true, trigger: 'blur', message: '请输入' }],
-				powerproduction: [{ required: true, trigger: 'blur', message: '请输入' }],
-				windturbinemanufacturerid: [{ required: true, trigger: 'blur', message: '请输入' }],
-				photo: [{ required: true, trigger: 'blur', message: '请输入' }],
-				unit: [{ required: true, trigger: 'blur', message: '请输入' }],
-				cutinwindspeed: [{ required: true, trigger: 'blur', message: '请输入' }],
-				ratedwindspeed: [{ required: true, trigger: 'blur', message: '请输入' }],
-				cutoutwindspeed: [{ required: true, trigger: 'blur', message: '请输入' }],
-				sweptarea: [{ required: true, trigger: 'blur', message: '请输入' }],
-				equipmentcategory: [{ required: true, trigger: 'blur', message: '请输入' }],
-			},
-			title: '',
-			dialogFormVisible: false,
-			idAdd: true,
-		}
-	},
-	created() { },
-	methods: {
-		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.addEquipmentmodel(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, "")
-			}
-		},
-	},
+  name: 'TableEdit',
+  props: {
+    options: {
+      type: Array,
+      default: []
+    },
+    stationList: {
+      type: Array,
+      default: []
+    },
+  },
+  data() {
+    return {
+      form: {
+        id: '',
+        code: '',
+        name: '',
+        description: '',
+        powerproduction: '',
+        windturbinemanufacturerid: '',
+        photo: '',
+        unit: '',
+        cutinwindspeed: '',
+        ratedwindspeed: '',
+        cutoutwindspeed: '',
+        sweptarea: '',
+        equipmentcategory: '',
+      },
+      rules: {
+        id: [{ required: true, trigger: 'blur', message: '请输入' }],
+        code: [{ required: true, trigger: 'blur', message: '请输入' }],
+        name: [{ required: true, trigger: 'blur', message: '请输入' }],
+        description: [{ required: true, trigger: 'blur', message: '请输入' }],
+        powerproduction: [{ required: true, trigger: 'blur', message: '请输入' }],
+        windturbinemanufacturerid: [{ required: true, trigger: 'blur', message: '请输入' }],
+        photo: [{ required: true, trigger: 'blur', message: '请输入' }],
+        unit: [{ required: true, trigger: 'blur', message: '请输入' }],
+        cutinwindspeed: [{ required: true, trigger: 'blur', message: '请输入' }],
+        ratedwindspeed: [{ required: true, trigger: 'blur', message: '请输入' }],
+        cutoutwindspeed: [{ required: true, trigger: 'blur', message: '请输入' }],
+        sweptarea: [{ required: true, trigger: 'blur', message: '请输入' }],
+        equipmentcategory: [{ required: true, trigger: 'blur', message: '请输入' }],
+      },
+      title: '',
+      dialogFormVisible: false,
+      idAdd: true,
+    }
+  },
+  created() { },
+  methods: {
+    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.addEquipmentmodel(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;
+  width: 200px;
 }
 
 .lists {
-	display: flex;
-	flex-direction: row;
-	align-items: center;
-	justify-content: space-between;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: space-between;
 }
-</style>
+</style>

+ 241 - 228
src/views/stationConfiguration/equipmentmodel/index.vue

@@ -1,65 +1,72 @@
 <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="fetchData">
-						查询
-					</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 ref="tableSort" v-loading="listLoading" :data="list" :element-loading-text="elementLoadingText"
-				:height="height" @selection-change="setSelectRows">
-				<el-table-column show-overflow-tooltip type="selection" 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="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="description" align="center" sortable></el-table-column>
-				<el-table-column show-overflow-tooltip label="容量" prop="powerproduction" align="center" sortable>
-				</el-table-column>
-				<el-table-column show-overflow-tooltip label="厂商编号" prop="windturbinemanufacturerid" align="center" sortable>
-				</el-table-column>
-				<el-table-column show-overflow-tooltip label="图片" prop="photo" align="center" sortable>
-				</el-table-column>
-				<el-table-column show-overflow-tooltip label="传输总发电量单位" prop="unit" align="center" sortable></el-table-column>
-				<el-table-column show-overflow-tooltip label="切入风速" prop="cutinwindspeed" align="center" sortable>
-				</el-table-column>
-				<el-table-column show-overflow-tooltip label="额定风速" prop="ratedwindspeed" align="center" sortable>
-				</el-table-column>
-				<el-table-column show-overflow-tooltip label="切出风速" prop="cutoutwindspeed" align="center" sortable>
-				</el-table-column>
-				<el-table-column show-overflow-tooltip label="叶片切入面积" prop="sweptarea" align="center" sortable>
-				</el-table-column>
-				<el-table-column show-overflow-tooltip label="设备类别" prop="equipmentcategory" 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>
+  <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="fetchData">
+            查询
+          </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 ref="tableSort" v-loading="listLoading" :data="list" :element-loading-text="elementLoadingText"
+        :height="height" @selection-change="setSelectRows">
+        <el-table-column show-overflow-tooltip type="selection" 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="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="description" align="center" sortable></el-table-column>
+
+
+
+
+
+
+
+        <el-table-column show-overflow-tooltip label="容量" prop="powerproduction" align="center" sortable>
+        </el-table-column>
+        <el-table-column show-overflow-tooltip label="厂商编号" prop="windturbinemanufacturerid" align="center" sortable>
+        </el-table-column>
+        <el-table-column show-overflow-tooltip label="图片" prop="photo" align="center" sortable>
+        </el-table-column>
+        <el-table-column show-overflow-tooltip label="传输总发电量单位" prop="unit" align="center" sortable></el-table-column>
+        <el-table-column show-overflow-tooltip label="切入风速" prop="cutinwindspeed" align="center" sortable>
+        </el-table-column>
+        <el-table-column show-overflow-tooltip label="额定风速" prop="ratedwindspeed" align="center" sortable>
+        </el-table-column>
+        <el-table-column show-overflow-tooltip label="切出风速" prop="cutoutwindspeed" align="center" sortable>
+        </el-table-column>
+        <el-table-column show-overflow-tooltip label="叶片切入面积" prop="sweptarea" align="center" sortable>
+        </el-table-column>
+        <el-table-column show-overflow-tooltip label="设备类别" prop="equipmentcategory" 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'
@@ -67,180 +74,186 @@ import ExportExcel from '@/components/ExportExcel/index'
 import api 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.addEquipmentmodel(item).then(res => {
-					if (res.code == 200) {
-						this.$message({
-							type: 'success',
-							message: '添加成功!'
-						});
-						this.fetchData()
-					}
-				})
-			})
-		},
-		getStation() {
-			api.windpowerstationList({
-				id: '',
-				name: '',
-				companyid: '',
-				pageNum: 1,
-				pageSize: 1000,
-			}).then(res => {
-				if (res.data) {
-					this.listLoading = false
-					this.stationList = res.data.records
-				}
-			})
-		},
-		fetchData() {
-			api.equipmentmodel({
-				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: '',
-							description: '',
-							powerproduction: '',
-							windturbinemanufacturerid: '',
-							photo: '',
-							unit: '',
-							cutinwindspeed: '',
-							ratedwindspeed: '',
-							cutoutwindspeed: '',
-							sweptarea: '',
-							equipmentcategory: '',
-						}
-					]
-					// 导出
-					let exportExcel = []
-					res.data.records.forEach(item => {
-						exportExcel.push({
-							id: item.id,
-							code: item.code,
-							name: item.name,
-							description: item.description,
-							powerproduction: item.powerproduction,
-							windturbinemanufacturerid: item.windturbinemanufacturerid,
-							photo: item.photo,
-							unit: item.unit,
-							cutinwindspeed: item.cutinwindspeed,
-							ratedwindspeed: item.ratedwindspeed,
-							cutoutwindspeed: item.cutoutwindspeed,
-							sweptarea: item.sweptarea,
-							equipmentcategory: item.equipmentcategory,
-						})
-					})
-					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.deleteEquipmentmodel({
-						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
-		},
-	},
+
+
+
+
+
+
+  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.addEquipmentmodel(item).then(res => {
+          if (res.code == 200) {
+            this.$message({
+              type: 'success',
+              message: '添加成功!'
+            });
+            this.fetchData()
+          }
+        })
+      })
+    },
+    getStation() {
+      api.windpowerstationList({
+        id: '',
+        name: '',
+        companyid: '',
+        pageNum: 1,
+        pageSize: 1000,
+      }).then(res => {
+        if (res.data) {
+          this.listLoading = false
+          this.stationList = res.data.records
+        }
+      })
+    },
+    fetchData() {
+      api.equipmentmodel({
+        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: '',
+              description: '',
+              powerproduction: '',
+              windturbinemanufacturerid: '',
+              photo: '',
+              unit: '',
+              cutinwindspeed: '',
+              ratedwindspeed: '',
+              cutoutwindspeed: '',
+              sweptarea: '',
+              equipmentcategory: '',
+            }
+          ]
+          // 导出
+          let exportExcel = []
+          res.data.records.forEach(item => {
+            exportExcel.push({
+              id: item.id,
+              code: item.code,
+              name: item.name,
+              description: item.description,
+              powerproduction: item.powerproduction,
+              windturbinemanufacturerid: item.windturbinemanufacturerid,
+              photo: item.photo,
+              unit: item.unit,
+              cutinwindspeed: item.cutinwindspeed,
+              ratedwindspeed: item.ratedwindspeed,
+              cutoutwindspeed: item.cutoutwindspeed,
+              sweptarea: item.sweptarea,
+              equipmentcategory: item.equipmentcategory,
+            })
+          })
+          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.deleteEquipmentmodel({
+            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;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: space-between;
+  margin-bottom: 20px;
 }
 
 .left {
-	display: flex;
-	flex-direction: row;
-	align-items: center;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
 
-	.left-item {
-		display: flex;
-		flex-direction: row;
-		align-items: center;
-		margin-right: 10px;
-	}
+  .left-item {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    margin-right: 10px;
+  }
 }
 </style>

+ 127 - 0
src/views/stationConfiguration/manufacturer/components/TableEdit.vue

@@ -0,0 +1,127 @@
+<template>
+	<el-dialog :title="title" :visible.sync="dialogFormVisible" width="800px" @close="close">
+		<el-form ref="form" :model="form" :rules="rules">
+			<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="name">
+					<el-input class="inputs" v-model.trim="form.name" autocomplete="off"></el-input>
+				</el-form-item>
+			</div>
+			<div class="lists">
+				<el-form-item label="国家地区" prop="country">
+					<el-input class="inputs" v-model="form.country" autocomplete="off"></el-input>
+				</el-form-item>
+				<el-form-item label="地址" prop="address">
+					<el-input class="inputs" v-model="form.address" autocomplete="off"></el-input>
+				</el-form-item>
+			</div>
+			<div class="lists">
+				<el-form-item label="电话" prop="telephone">
+					<el-input class="inputs" v-model="form.telephone" autocomplete="off"></el-input>
+				</el-form-item>
+			</div>
+		</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: '',
+				name: '',
+				country: '',
+				address: '',
+				telephone: ''
+			},
+			rules: {
+				id: [{ required: true, trigger: 'blur', message: '请输入' }],
+				name: [{ required: true, trigger: 'blur', message: '请输入' }],
+				country: [{ required: true, trigger: 'blur', message: '请输入' }],
+				address: [{ required: true, trigger: 'blur', message: '请输入' }],
+				telephone: [{ required: true, trigger: 'blur', message: '请输入' }],
+			},
+			title: '',
+			dialogFormVisible: false,
+			idAdd: true,
+		}
+	},
+	created() { },
+	methods: {
+		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.addManufacturer(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>

+ 217 - 0
src/views/stationConfiguration/manufacturer/index.vue

@@ -0,0 +1,217 @@
+<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="fetchData">
+						查询
+					</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 ref="tableSort" v-loading="listLoading" :data="list" :element-loading-text="elementLoadingText"
+				:height="height" @selection-change="setSelectRows">
+				<el-table-column show-overflow-tooltip type="selection" 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="name" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="国家地区" prop="country" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="地址" prop="address" align="center" sortable>
+				</el-table-column>
+				<el-table-column show-overflow-tooltip label="电话" prop="telephone" 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.addManufacturer(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
+				}
+			})
+		},
+		fetchData() {
+			api.manufacturer({
+				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: '',
+							name: '',
+							country: '',
+							address: '',
+							telephone: ''
+						}
+					]
+					// 导出
+					let exportExcel = []
+					res.data.records.forEach(item => {
+						exportExcel.push({
+							id: item.id,
+							name: item.name,
+							country: item.country,
+							address: item.address,
+							telephone: item.telephone
+						})
+					})
+					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.deleteManufacturer({
+						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>

+ 128 - 0
src/views/stationConfiguration/modelpower/components/TableEdit.vue

@@ -0,0 +1,128 @@
+<template>
+	<el-dialog :title="title" :visible.sync="dialogFormVisible" width="800px" @close="close">
+		<el-form ref="form" :model="form" :rules="rules">
+			<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="modelid">
+					<el-input class="inputs" v-model.trim="form.modelid" autocomplete="off"></el-input>
+				</el-form-item>
+			</div>
+			<div class="lists">
+				<el-form-item label="风速/光照度" prop="speed">
+					<el-input class="inputs" v-model="form.speed" autocomplete="off"></el-input>
+				</el-form-item>
+				<el-form-item label="稳态功率相当于理论" prop="theorypower">
+					<el-input class="inputs" v-model="form.theorypower" autocomplete="off"></el-input>
+				</el-form-item>
+			</div>
+			<div class="lists">
+				<el-form-item label="动态功率保证功率" prop="ensurepower">
+					<el-input class="inputs" v-model="form.ensurepower" autocomplete="off"></el-input>
+				</el-form-item>
+			</div>
+		</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: '',
+				modelid: '',
+				speed: '',
+				theorypower: '',
+				ensurepower: ''
+
+			},
+			rules: {
+				id: [{ required: true, trigger: 'blur', message: '请输入' }],
+				modelid: [{ required: true, trigger: 'blur', message: '请输入' }],
+				speed: [{ required: true, trigger: 'blur', message: '请输入' }],
+				theorypower: [{ required: true, trigger: 'blur', message: '请输入' }],
+				ensurepower: [{ required: true, trigger: 'blur', message: '请输入' }]
+			},
+			title: '',
+			dialogFormVisible: false,
+			idAdd: true,
+		}
+	},
+	created() { },
+	methods: {
+		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.addModelpower(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>

+ 217 - 0
src/views/stationConfiguration/modelpower/index.vue

@@ -0,0 +1,217 @@
+<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="fetchData">
+						查询
+					</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 ref="tableSort" v-loading="listLoading" :data="list" :element-loading-text="elementLoadingText"
+				:height="height" @selection-change="setSelectRows">
+				<el-table-column show-overflow-tooltip type="selection" 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="modelid" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="风速/光照度" prop="speed" align="center" sortable></el-table-column>
+				<el-table-column show-overflow-tooltip label="稳态功率相当于理论" prop="theorypower" align="center" sortable>
+				</el-table-column>
+				<el-table-column show-overflow-tooltip label="动态功率保证功率" prop="ensurepower" 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.addModelpower(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
+				}
+			})
+		},
+		fetchData() {
+			api.modelpower({
+				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: '',
+							modelid: '',
+							speed: '',
+							theorypower: '',
+							ensurepower: ''
+						}
+					]
+					// 导出
+					let exportExcel = []
+					res.data.records.forEach(item => {
+						exportExcel.push({
+							id: item.id,
+							modelid: item.modelid,
+							speed: item.speed,
+							theorypower: item.theorypower,
+							ensurepower: item.ensurepower
+						})
+					})
+					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.deleteModelpower({
+						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>

+ 116 - 0
src/views/stationConfiguration/projectstudy/components/TableEdit.vue

@@ -0,0 +1,116 @@
+<template>
+	<el-dialog :title="title" :visible.sync="dialogFormVisible" width="800px" @close="close">
+		<el-form ref="form" :model="form" :rules="rules">
+			<el-form-item label="场站" prop="cascaderSel" v-if="idAdd">
+				<el-cascader v-model="form.cascaderSel" :options="options"
+					:props="{ checkStrictly: true, label: 'name', value: 'id' }" clearable>
+				</el-cascader>
+			</el-form-item>
+			<el-form-item label="场站" prop="generatingcapacity" v-if="!idAdd">
+				<el-input class="inputs" v-model="form.windpower" disabled></el-input>
+			</el-form-item>
+			<el-form-item label="期次" prop="generatingcapacity" v-if="!idAdd">
+				<el-input class="inputs" v-model="form.projectid" disabled></el-input>
+			</el-form-item>
+			<el-form-item label="计划发电量" prop="generatingcapacity">
+				<el-input class="inputs" v-model="form.generatingcapacity"></el-input>
+			</el-form-item>
+			<el-form-item label="计划停运小时" prop="outagehours">
+				<el-input class="inputs" v-model="form.outagehours"></el-input>
+			</el-form-item>
+			<el-form-item label="请选择日期" prop="dateValues">
+				<el-date-picker v-model="form.dateValues" type="month" placeholder="选择月" :disabled="!idAdd?true:false">
+				</el-date-picker>
+			</el-form-item>
+		</el-form>
+		<div slot="footer" class="dialog-footer">
+			<el-button @click="close">取 消</el-button>
+			<el-button type="primary" @click="handleSave()">确 定</el-button>
+		</div>
+	</el-dialog>
+</template>
+
+<script>
+import api from '@/api/table'
+export default {
+	name: 'TableEdit',
+	props: {
+		options: {
+			type: Array,
+			default: []
+		},
+	},
+	data() {
+		return {
+			form: {
+				generatingcapacity: '',
+				outagehours: '',
+				cascaderSel: [],
+				dateValues: '',
+			},
+			rules: {
+				generatingcapacity: [{ required: true, trigger: 'blur', message: '请输入发电量' }],
+				outagehours: [{ required: true, trigger: 'blur', message: '请输入停运小时' }],
+				cascaderSel: [{ required: true, trigger: 'blur', message: '请选择场站' }],
+				dateValues: [{ required: true, trigger: 'blur', message: '请选择日期' }],
+			},
+			title: '',
+			dialogFormVisible: false,
+			idAdd: true,
+		}
+	},
+	created() { },
+	methods: {
+		showEdit(row) {
+			if (!row) {
+				this.title = '添加'
+				this.idAdd = true
+			} else {
+				this.title = '编辑'
+				this.idAdd = false
+				this.form = Object.assign({}, row)
+				this.form.dateValues = this.form.year && this.form.month ? new Date(`${this.form.year}-${this.form.month}-01`).getTime() : ''
+			}
+			this.dialogFormVisible = true
+		},
+		close() {
+			this.$refs['form'].resetFields()
+			this.form = this.$options.data().form
+			this.dialogFormVisible = false
+			this.$emit('fetch-data')
+		},
+		handleSave() {
+			this.$refs['form'].validate(async (valid) => {
+				if (valid) {
+					this.form.year = new Date(this.form.dateValues).getFullYear()
+					this.form.month = new Date(this.form.dateValues).getMonth() + 1
+					if (!this.form.projectid) {
+						this.form.projectid = this.form.cascaderSel[2]
+					}
+					if (!this.form.windpower) {
+						this.form.windpower = this.form.cascaderSel[1]
+					}
+
+					api.addProjectstudy(this.form).then(res => {
+						if (res.code == 200) {
+							this.$message({
+								type: 'success',
+								message: '添加成功!'
+							});
+							this.$emit('handleSuccess');
+							this.dialogFormVisible = false
+						}
+					})
+				} else {
+					return false
+				}
+			})
+		},
+	},
+}
+</script>
+<style lang="less" scoped>
+.inputs {
+	width: 200px;
+}
+</style>

+ 249 - 0
src/views/stationConfiguration/projectstudy/index.vue

@@ -0,0 +1,249 @@
+<template>
+	<div class="table-container">
+		<vab-query-form>
+			<vab-query-form-left-panel>
+				<el-form ref="form" :model="queryForm" :inline="true" @submit.native.prevent>
+					<el-form-item>
+						<el-cascader class="cascaders" v-model="cascaderSel" :options="options"
+							:props="{ checkStrictly: true, label: 'name', value: 'id' }" clearable>
+						</el-cascader>
+					</el-form-item>
+					<el-form-item>
+						<el-button icon="el-icon-search" type="primary" native-type="submit" @click="handleQuery">
+							查询
+						</el-button>
+					</el-form-item>
+				</el-form>
+			</vab-query-form-left-panel>
+			<vab-query-form-right-panel>
+				<el-button icon="el-icon-plus" type="primary" @click="handleAdd">
+					添加
+				</el-button>
+				<el-button icon="el-icon-delete" type="danger" @click="handleDelete">
+					删除
+				</el-button>
+			</vab-query-form-right-panel>
+		</vab-query-form>
+
+		<el-table ref="tableSort" v-loading="listLoading" :data="list" :element-loading-text="elementLoadingText"
+			:height="height" @selection-change="setSelectRows" @sort-change="tableSortChange" show-summary
+			:summary-method="getSummaries">
+			<el-table-column show-overflow-tooltip type="selection" width="65"></el-table-column>
+			<el-table-column show-overflow-tooltip label="风场编号" prop="windpower" width="200" align="center" sortable>
+			</el-table-column>
+			<el-table-column show-overflow-tooltip label="工程编号" prop="projectid" align="center" sortable></el-table-column>
+			<el-table-column show-overflow-tooltip label="计划发电量" prop="generatingcapacity" align="center" sortable>
+			</el-table-column>
+			<el-table-column show-overflow-tooltip label="计划停运小时" prop="outagehours" align="center" sortable>
+			</el-table-column>
+			<el-table-column show-overflow-tooltip label="年份" prop="year" align="center" sortable></el-table-column>
+			<el-table-column show-overflow-tooltip label="月份" prop="month" align="center" sortable></el-table-column>
+			<el-table-column show-overflow-tooltip label="操作" width="180px">
+				<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" @handleSuccess="fetchData"></table-edit>
+	</div>
+</template>
+
+<script>
+import api from '@/api/table'
+import TableEdit from './components/TableEdit'
+export default {
+	name: 'ComprehensiveTable',
+	components: {
+		TableEdit
+	},
+	filters: {
+		statusFilter(status) {
+			const statusMap = {
+				published: 'success',
+				draft: 'gray',
+				deleted: 'danger',
+			}
+			return statusMap[status]
+		},
+	},
+	data() {
+		return {
+			imgShow: true,
+			list: [],
+			cascaderSel: [],
+			imageList: [],
+			listLoading: true,
+			layout: 'total, sizes, prev, pager, next, jumper',
+			total: 0,
+			background: true,
+			selectRows: '',
+			elementLoadingText: '正在加载...',
+			queryForm: {
+				pageNo: 1,
+				pageSize: 20,
+				title: '',
+			},
+			options: []
+		}
+	},
+	computed: {
+		height() {
+			return this.$baseTableHeight() + 50
+		},
+	},
+	created() {
+		this.getStation()
+		this.fetchData()
+	},
+	beforeDestroy() { },
+	mounted() { },
+	methods: {
+		getStation() {
+			api.wtls().then(res => {
+				if (res.data) {
+					this.options = res.data
+				}
+			})
+		},
+		tableSortChange() {
+			const imageList = []
+			this.$refs.tableSort.tableData.forEach((item, index) => {
+				imageList.push(item.img)
+			})
+			this.imageList = imageList
+		},
+		setSelectRows(val) {
+			this.selectRows = val
+		},
+		handleAdd() {
+			this.$refs['edit'].showEdit()
+		},
+		handleEdit(row) {
+			this.$refs['edit'].showEdit(row)
+		},
+		handleDelete(row) {
+			if (row.id) {
+				this.$baseConfirm('你确定要删除当前项吗', null, async () => {
+					api.deleteProjectstudy({
+						id: row.id
+					}).then(res => {
+						if (res.code == 200) {
+							this.$baseMessage('删除成功', 'success')
+							this.fetchData()
+						}
+					})
+				})
+			} else {
+				if (this.selectRows.length > 0) {
+					const ids = this.selectRows.map((item) => item.id).join()
+					this.$baseConfirm('你确定要删除选中项吗', null, async () => {
+						api.deleteProjectstudy({
+							id: ids
+						}).then(res => {
+							if (res.code == 200) {
+								this.$baseMessage('删除成功', 'success')
+								this.fetchData()
+							}
+						})
+					})
+				} else {
+					this.$baseMessage('未选中任何行', 'error')
+					return false
+				}
+			}
+		},
+		handleSizeChange(val) {
+			this.queryForm.pageSize = val
+			this.fetchData()
+		},
+		handleCurrentChange(val) {
+			this.queryForm.pageNo = val
+			this.fetchData()
+		},
+		handleQuery() {
+			this.queryForm.pageNo = 1
+			this.fetchData()
+		},
+		async fetchData() {
+			this.listLoading = true
+			api.projectstudy({
+				pagenum: this.queryForm.pageNo,
+				pagesize: this.queryForm.pageSize,
+			}).then(res => {
+				if (res.data) {
+					this.total = res.data.total
+					this.list = res.data.records
+					setTimeout(() => {
+						this.listLoading = false
+					}, 500)
+				}
+			})
+
+		},
+		testMessage() {
+			this.$baseMessage('test1', 'success')
+		},
+		testALert() {
+			this.$baseAlert('11')
+			this.$baseAlert('11', '自定义标题', () => {
+				/* 可以写回调; */
+			})
+			this.$baseAlert('11', null, () => {
+				/* 可以写回调; */
+			})
+		},
+		testConfirm() {
+			this.$baseConfirm(
+				'你确定要执行该操作?',
+				null,
+				() => {
+					/* 可以写回调; */
+				},
+				() => {
+					/* 可以写回调; */
+				}
+			)
+		},
+		testNotify() {
+			this.$baseNotify('测试消息提示', 'test', 'success', 'bottom-right')
+		},
+		getSummaries(param) {
+			console.log(11111);
+			const { columns, data } = param;
+			const sums = [];
+			columns.forEach((column, index) => {
+				if (index === 0) {
+					sums[index] = '总计';
+					return;
+				}
+				else if (index === 3) {
+					let totle = 0
+					data.forEach(item => {
+						totle = totle + Number(item.generatingcapacity)
+					})
+					sums[index] = totle;
+				}
+				else if (index === 4) {
+					let totle = 0
+					data.forEach(item => {
+						totle = totle + Number(item.outagehours)
+					})
+					sums[index] = totle;
+				} else {
+					sums[index] = '--';
+				}
+			});
+			return sums;
+		}
+	},
+}
+</script>
+<style lang="less" scoped>
+.cascaders {
+	width: 300px;
+}
+</style>

+ 341 - 0
src/views/stationConfiguration/stationpersis/index.vue

@@ -0,0 +1,341 @@
+<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="fetchData">
+						查询
+					</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 ref="tableSort" v-loading="listLoading" :data="list" :element-loading-text="elementLoadingText"
+				:height="height" @selection-change="setSelectRows">
+				<el-table-column show-overflow-tooltip type="selection" 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="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="capacity" align="center" sortable>
+				</el-table-column>
+				<el-table-column show-overflow-tooltip label="装机容量单位" prop="capacityunit" align="center" sortable>
+				</el-table-column>
+				<el-table-column show-overflow-tooltip label="装机台数" prop="quantity" 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="systemmanufact" align="center" sortable>
+				</el-table-column>
+				<el-table-column show-overflow-tooltip label="地址" prop="address" 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> -->
+			<div :style="{ 'height': height + 'px', width: '100%' }">
+				<v-chart :options="option" style="width: 100%;"></v-chart>
+			</div>
+		</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 VChart from 'vue-echarts'
+import { use } from 'echarts/core';
+import { CanvasRenderer } from 'echarts/renderers';
+import { LineChart } from 'echarts/charts';
+import {
+	TitleComponent,
+	TooltipComponent,
+	LegendComponent,
+	DataZoomComponent,
+	GridComponent,
+	AxisPointerComponent
+} from 'echarts/components';
+import dayjs from 'dayjs'
+
+use([
+	CanvasRenderer,
+	LineChart,
+	TitleComponent,
+	TooltipComponent,
+	LegendComponent,
+	DataZoomComponent,
+	GridComponent,
+	AxisPointerComponent
+]);
+
+export default {
+	components: {
+		UploadExcel,
+		ExportExcel,
+		VChart,
+	},
+	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: '',
+			option: {
+				title: {
+					showTitle: true,
+					subtext: "可滚轮缩放、左右拖动查看",
+					x: "center",
+					y: "20",
+				},
+				xAxis: {
+					type: "category",
+					data: [],
+				},
+				yAxis: [
+					{
+						name: '单位 (kw)',
+						type: "value",
+						position: 'left'
+					},
+					{
+						name: '单位 (kw)',
+						type: "value",
+						position: 'right'
+					}
+				],
+				legend: {
+					show: true,
+					x: "center",
+					y: "top",
+					itemWidth: 10,
+					itemHeight: 10,
+					data: ["理论功率", "实际功率"],
+					textStyle: {
+						fontSize: 10, //字体大小
+						color: "#000", //字体颜色
+					},
+				},
+				tooltip: {
+					show: true,
+					trigger: "axis",
+					// formatter(data) {
+					// 	let str = `${data[0].name}: <br />`;
+					// 	data.forEach((ele) => {
+					// 		let circle = `<span style="display:inline-block;margin-right:5px;border-radius:50%;width:10px;height:10px;left:5px;background-color:${ele.color}"></span>`;
+					// 		str += circle + `${ele.seriesName}: ${ele.value}% <br />`;
+					// 	});
+					// 	return str;
+					// },
+				},
+				grid: {
+					show: true,
+					left: "35",
+					// top: "23",
+					right: "30",
+					bottom: "23",
+				},
+				dataZoom: [
+					{
+						id: "dataZoomX",
+						type: "inside",
+						xAxisIndex: [0],
+						filterMode: "none",
+						start: 0,
+						end: 50,
+					},
+				],
+				series: [
+					// {
+					//   name: "部门培训率",
+					//   data: seriesData[0],
+					//   type: "bar",
+					//   itemStyle: {
+					//     color: "rgb(86,114,196)",
+					//   },
+					//   barMaxWidth: "25",
+					// },
+					// {
+					//   name: "部门考试合格率",
+					//   data: seriesData[1],
+					//   type: "bar",
+					//   itemStyle: {
+					//     color: "rgb(149,204,122)",
+					//   },
+					//   barMaxWidth: "25",
+					// },
+				],
+			}
+		};
+	},
+	computed: {
+		height() {
+			return this.$baseTableHeight() + 50
+		},
+	},
+	created() {
+		// this.getStation()
+		this.fetchData()
+	},
+	watch: {
+		'$route'() {
+			// this.fetchData()
+		}
+	},
+	methods: {
+		getMyExcelData(val) {
+			val.forEach(item => {
+				api.addModelpower(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
+				}
+			})
+		},
+		fetchData() {
+			const date = new Date()
+			// const pastDate = date.getTime() - 2592000000
+			const pastDate = date.getTime() - 43200000
+			stationApi.getStationPersis({
+				station: this.$route.query.station || '',
+				startdate: dayjs(pastDate).format('YYYY-M-D HH:mm:ss'),
+				enddate: dayjs().format('YYYY-M-D HH:mm:ss')
+			}).then(res => {
+				if (res.data) {
+					this.listLoading = false
+					if (res.data && res.data.length) {
+						this.option.xAxis.data = res.data.map(o => dayjs(o.datatime).format('YYYY-M-D HH:mm:ss'))
+						this.option.series = [
+							{
+								name: '理论功率',
+								data: res.data.map(o => o.rpjfs),
+								type: 'line',
+								itemStyle: {
+									color: "rgb(86,114,196)",
+								},
+								yAxisIndex: 0
+							},
+							{
+								name: '实际功率',
+								data: res.data.map(o => o.sszgl),
+								type: 'line',
+								itemStyle: {
+									color: "rgb(149,204,122)",
+								},
+								yAxisIndex: 1
+							}
+						]
+					}
+				}
+			})
+		},
+		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.deleteModelpower({
+						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>

+ 136 - 0
src/views/stationConfiguration/windsubstation/components/TableEdit.vue

@@ -0,0 +1,136 @@
+<template>
+	<el-dialog :title="title" :visible.sync="dialogFormVisible" width="800px" @close="close">
+		<el-form ref="form" :model="form" :rules="rules">
+			<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="code">
+					<el-input class="inputs" v-model.trim="form.code" autocomplete="off"></el-input>
+				</el-form-item>
+			</div>
+			<div class="lists">
+				<el-form-item label="名称" prop="name">
+					<el-input class="inputs" v-model="form.name" autocomplete="off"></el-input>
+				</el-form-item>
+				<el-form-item label="别名" prop="aname">
+					<el-input class="inputs" v-model="form.aname" 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>
+						<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="ordernum">
+					<el-input class="inputs" v-model="form.ordernum" autocomplete="off"></el-input>
+				</el-form-item>
+			</div>
+		</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: '',
+				windpowerstationid: '',
+				ordernum: ''
+
+			},
+			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: '请输入' }],
+				windpowerstationid: [{ required: true, trigger: 'blur', message: '请输入' }],
+				ordernum: [{ required: true, trigger: 'blur', message: '请输入' }]
+			},
+			title: '',
+			dialogFormVisible: false,
+			idAdd: true,
+		}
+	},
+	created() { },
+	methods: {
+		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.addWindsubstation(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>

+ 220 - 0
src/views/stationConfiguration/windsubstation/index.vue

@@ -0,0 +1,220 @@
+<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="fetchData">
+						查询
+					</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 ref="tableSort" v-loading="listLoading" :data="list" :element-loading-text="elementLoadingText"
+				:height="height" @selection-change="setSelectRows">
+				<el-table-column show-overflow-tooltip type="selection" 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="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="windpowerstationid" align="center" sortable>
+				</el-table-column>
+				<el-table-column show-overflow-tooltip label="顺序" prop="ordernum" 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.addWindsubstation(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
+				}
+			})
+		},
+		fetchData() {
+			api.windsubstation({
+				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: '',
+							windpowerstationid: '',
+							ordernum: ''
+						}
+					]
+					// 导出
+					let exportExcel = []
+					res.data.records.forEach(item => {
+						exportExcel.push({
+							id: item.id,
+							code: item.code,
+							name: item.name,
+							aname: item.aname,
+							windpowerstationid: item.windpowerstationid,
+							ordernum: item.ordernum
+						})
+					})
+					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.deleteWindsubstation({
+						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>