瀏覽代碼

增加采油井生产日报(查询、抽取、填报)

chenwen 1 年之前
父節點
當前提交
047c3aa6f3
共有 3 個文件被更改,包括 629 次插入138 次删除
  1. 32 0
      src/api/oilDailyRpt.js
  2. 468 138
      src/pages/rpt/OilDailyRpt.vue
  3. 129 0
      src/pages/rpt/rpt.css

+ 32 - 0
src/api/oilDailyRpt.js

@@ -0,0 +1,32 @@
+import request from '../utils/request';
+
+const api={}
+
+api.load = (formData) => {
+	    return request({
+	        url: '/rpt/oil/load',
+	        method: 'post',
+			data:  formData
+	    });
+}
+
+api.extract = (formData) => {
+	    return request({
+	        url: '/rpt/oil/extract',
+	        method: 'post',
+			data:  formData
+	    });
+}
+
+api.saveRpt = (jsonData)=>{
+	return request({
+	    url: '/rpt/oil/save',
+	    method: 'post',
+		data:  jsonData,
+		headers:{
+			'Content-Type':'application/json'
+		}
+	});
+}
+
+export  default api

+ 468 - 138
src/pages/rpt/OilDailyRpt.vue

@@ -1,152 +1,331 @@
 <template>
-	<div class="rpt-page"  ref="rpt_page">
-		<div class="rpt-title" ref="rpt_title">
-			<div class="main-title">采油厂稀油井站采油井生产日报表</div>
-			<div class="sub-title">
-				<div>采油厂</div>
-				<div>2023年11月15日</div>
-			</div>
+	<div class="out-page">
+		<div class="out-top">
+			<el-form :inline="true" :model="queryForm" class="query-form-inline"  label-width="auto">
+			    <el-form-item label="井站">
+				  <div style="width:140px;">{{queryForm.orgName}}</div>
+				</el-form-item>
+				<el-form-item label="日期">
+					<el-date-picker
+							v-model="queryForm.dailyDate"
+							type="date"
+							placeholder="请选择日报日期"
+						    value-format="YYYY-MM-DD"
+						  />
+				</el-form-item>
+				  
+				<el-form-item>
+					<el-button type="primary" :loading="btnStatTag==1" :disabled="btnStatTag>0"  @click="queryHandle">检索</el-button>
+				</el-form-item>
+				<el-form-item>
+					<el-button type="success" :loading="btnStatTag==2" :disabled="btnStatTag>0" title="汇总其它基础数据到该日报" @click="extractRpt">提取数据</el-button>
+				</el-form-item>
+				<el-form-item>
+					<el-button type="warning" :loading="btnStatTag==3" :disabled="btnStatTag>0" @click="saveRpt">保存</el-button>
+				</el-form-item>
+				<el-form-item>
+					<!-- <el-button type="primary" plain icon="Edit">导出</el-button> -->
+				</el-form-item>
+			</el-form>
 		</div>
-		
-		<div class="rpt-box">
-			<div class="rpt-table-header" ref="rpt_header">
-				<table cellpadding="0" cellspacing="0" class="rpt-table" align="center">
-					<tr>
-						<td rowspan="3"><div class="rpt-table-cell rpttab-cell-0">井号</div></td>
-						<td rowspan="3"><div class="rpt-table-cell rpttab-cell-1">生产方式</div></td>
-						<td colspan="5"><div class="rpt-table-cell colspan-center">工作制度</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-3">班次</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4 ">生产时间</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-5">巡检时间</div></td>
-						<td colspan="3"><div class="rpt-table-cell colspan-center">压力(MPa)</div></td>
-						<td colspan="4"><div class="rpt-table-cell colspan-center">温度(℃)</div></td>
-						<td colspan="3"><div class="rpt-table-cell">伴热</div></td>
-						<td colspan="5"><div class="rpt-table-cell">计量	</div></td>
-						<td colspan="2"><div class="rpt-table-cell">电流(A)	</div></td>
-						<td rowspan="3"><div class="rpt-table-cell rpttab-cell-9">备注</div></td>
-						<td  patch><div class="rpt-table-cell rpt-patch-cell"></div></td>		
-					</tr>
-					
-					<tr>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">油嘴(mm)</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">冲程(m)</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">冲次(rpm)</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">泵径(mm)</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">泵深(m)</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">h:min</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">h:min</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">h:min</div></td>
+		<div class="rpt-page"  ref="rpt_page">
+			<div class="rpt-title" ref="rpt_title">
+				<div class="main-title">{{queryForm.orgName}}采油井生产日报表</div>
+				<div class="sub-title">
+					<div>{{queryForm.orgName}}</div>
+					<div>{{dailyDatefmt}}</div>
+				</div>
+			</div>
+			
+			<div class="rpt-box">
+				<div class="rpt-table-header" ref="rpt_header">
+					<table cellpadding="0" cellspacing="0" class="rpt-table" align="center">
+						<tr>
+							<td rowspan="3"><div class="rpt-table-cell rpttab-cell-0">井号</div></td>
+							<td rowspan="3"><div class="rpt-table-cell rpttab-cell-1">生产方式</div></td>
+							<td colspan="5"><div class="rpt-table-cell colspan-center">工作制度</div></td>
+							<td><div class="rpt-table-cell rpttab-cell-3">班次</div></td>
+							<td><div class="rpt-table-cell rpttab-cell-4 ">生产时间</div></td>
+							<td><div class="rpt-table-cell rpttab-cell-5">巡检时间</div></td>
+							<td colspan="3"><div class="rpt-table-cell colspan-center">压力(MPa)</div></td>
+							<td colspan="4"><div class="rpt-table-cell colspan-center">温度(℃)</div></td>
+							<td colspan="3"><div class="rpt-table-cell">伴热</div></td>
+							<td colspan="5"><div class="rpt-table-cell">计量	</div></td>
+							<td colspan="2"><div class="rpt-table-cell">电流(A)	</div></td>
+							<td rowspan="3"><div class="rpt-table-cell rpttab-cell-9">备注</div></td>
+							<td  patch><div class="rpt-table-cell rpt-patch-cell"></div></td>		
+						</tr>
 						
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">油压</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">套压</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">回压</div></td>
+						<tr>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">油嘴(mm)</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">冲程(m)</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">冲次(rpm)</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">泵径(mm)</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">泵深(m)</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">h:min</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">h:min</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">h:min</div></td>
+							
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">油压</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">套压</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">回压</div></td>
+							
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">井口</div></td>
+							<td colspan="2"><div class="rpt-table-cell colspan-center">加热炉</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">进站</div></td>
+							
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">方式</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">配参量(m3/d)</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">实参量(m3/d)</div></td>
+							
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">量油标高/罐位(cm)</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">计量起止时间      h:min-h:min</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">平均量油时间(s)</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">计量液量(t/d)</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">计量气量(m3/d)</div></td>
+							
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">上行</div></td>
+							<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">下行</div></td>
+						</tr>
 						
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">井口</div></td>
-						<td colspan="2"><div class="rpt-table-cell colspan-center">加热炉</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">进站</div></td>
+						<tr>
+							<td><div class="rpt-table-cell rpttab-cell-4">进口</div></td>
+							<td><div class="rpt-table-cell rpttab-cell-4">出口</div></td>
+						</tr>
+					</table>
+				</div>
+				<div class="rpt-table-body" @scroll="rptboxScrollHandler" ref="rpt_body">
+					<el-form :model="rptDatas" :show-message="false" @validate="formValidHandler" ref="rptform">
+					<table cellpadding="0" cellspacing="0"  class="rpt-table" align="center"> 
+					    <template v-for="(daily,index) in rptDatas " :key="index">
+						  <tr class="dataRow dbl-line">
+						  	<td rowspan="4"><div class="rpt-table-cell rpttab-cell-0">{{daily.wellName}}</div></td>
+						  	<td rowspan="4"><div class="rpt-table-cell rpttab-cell-1">{{daily.produceMode}}</div></td>
+						  	<td rowspan="4"><el-form-item :prop="'['+index+'].oilMouth'" :rules="ruleFloat('油嘴')"><el-input v-model="daily.oilMouth" class="rpt-table-cell rpttab-cell-4"/></el-form-item></td>
+						  	<td rowspan="4"><div class="rpt-table-cell rpttab-cell-3">{{daily.stroke}}</div></td>
+						  	<td rowspan="4"><div class="rpt-table-cell rpttab-cell-4">{{daily.freq}}</div></td>
+						  	<td rowspan="4"><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td rowspan="4"><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	
+							<td><div class="rpt-table-cell rpttab-cell-4">{{dutyTimes[0]}}</div></td>
+							<td><el-input v-model="daily.duties[dutyTimes[0]].produceTime"/></td>
+							<td><el-input v-model="daily.duties[dutyTimes[0]].patrolTime"/></td>
+							<td><div class="rpt-table-cell rpttab-cell-4">{{daily.duties[dutyTimes[0]]?.oilPress}}</div></td>
+							<td><div class="rpt-table-cell rpttab-cell-4">{{daily.duties[dutyTimes[0]]?.casingPress}}</div></td>
+							<td><div class="rpt-table-cell rpttab-cell-4">{{daily.duties[dutyTimes[0]]?.backPress}}</div></td>
+							<td><div class="rpt-table-cell rpttab-cell-4">{{daily.duties[dutyTimes[0]]?.tempWellport}}</div></td>
+							
+							<td><el-form-item :prop="'['+index+'].duties['+dutyTimes[0]+'].tempHotInput'" :rules="ruleFloat('加热炉进口温度')"><el-input v-model="daily.duties[dutyTimes[0]].tempHotInput"/></el-form-item></td>
+							<td><el-form-item :prop="'['+index+'].duties['+dutyTimes[0]+'].tempHotOutput'" :rules="ruleFloat('加热炉出口温度')"><el-input v-model="daily.duties[dutyTimes[0]].tempHotOutput"/></el-form-item></td>
+							<td><el-form-item :prop="'['+index+'].duties['+dutyTimes[0]+'].tempStationInput'" :rules="ruleFloat('进站温度')"><el-input v-model="daily.duties[dutyTimes[0]].tempStationInput"/></el-form-item></td>
+							<td><el-input v-model="daily.duties[dutyTimes[0]].tracingMode"/></td>
+							<td><el-form-item :prop="'['+index+'].duties['+dutyTimes[0]+'].tracingMixQuota'" :rules="ruleFloat('伴热配参量')"><el-input v-model="daily.duties[dutyTimes[0]].tracingMixQuota"/></el-form-item></td>
+							<td><el-form-item :prop="'['+index+'].duties['+dutyTimes[0]+'].tracingMixReal'" :rules="ruleFloat('伴热实参量')"><el-input v-model="daily.duties[dutyTimes[0]].tracingMixReal"/></el-form-item></td>
+							
+							<td><el-form-item :prop="'['+index+'].duties['+dutyTimes[0]+'].meterOilHeight'" :rules="ruleFloat('量油标高')"><el-input v-model="daily.duties[dutyTimes[0]].meterOilHeight"/></el-form-item></td>
+							<td><el-input v-model="daily.duties[dutyTimes[0]].meterPeriod"/></td>
+							<td><el-input v-model="daily.duties[dutyTimes[0]].meterAvgTime"/></td>
+							<td><el-form-item :prop="'['+index+'].duties['+dutyTimes[0]+'].meterLiquid'" :rules="ruleFloat('计量液量')"><el-input v-model="daily.duties[dutyTimes[0]].meterLiquid"/></el-form-item></td>
+							<td><el-form-item :prop="'['+index+'].duties['+dutyTimes[0]+'].meterGas'" :rules="ruleFloat('计量气量')"><el-input v-model="daily.duties[dutyTimes[0]].meterGas"/></el-form-item></td>
+							
+						  	<td rowspan="4"><div class="rpt-table-cell rpttab-cell-4">{{daily.currentDown}}</div></td>
+						  	<td rowspan="4"><div class="rpt-table-cell rpttab-cell-4">{{daily.currentUp}}</div></td>
+						  	<td rowspan="4"><el-input v-model="daily.note" class="rpt-table-cell rpttab-cell-4"/></td>
+						  </tr>
+						  <tr v-for="dt in [dutyTimes[1],dutyTimes[2]]">
+						  	<td><div class="rpt-table-cell rpttab-cell-4">{{dt}}</div></td>
+						  	<td><el-input v-model="daily.duties[dt].produceTime"/></td>
+						  	<td><el-input v-model="daily.duties[dt].patrolTime"/></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4">{{daily.duties[dt]?.oilPress}}</div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4">{{daily.duties[dt]?.casingPress}}</div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4">{{daily.duties[dt]?.backPress}}</div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4">{{daily.duties[dt]?.tempWellport}}</div></td>
+							
+						  	<td><el-form-item :prop="'['+index+'].duties['+dt+'].tempHotInput'" :rules="ruleFloat('加热炉进口温度')"><el-input v-model="daily.duties[dt].tempHotInput"/></el-form-item></td>
+						  	<td><el-form-item :prop="'['+index+'].duties['+dt+'].tempHotOutput'" :rules="ruleFloat('加热炉出口温度')"><el-input v-model="daily.duties[dt].tempHotOutput"/></el-form-item></td>
+						  	<td><el-form-item :prop="'['+index+'].duties['+dt+'].tempStationInput'" :rules="ruleFloat('进站温度')"><el-input v-model="daily.duties[dt].tempStationInput"/></el-form-item></td>
+						  	<td><el-input v-model="daily.duties[dt].tracingMode"/></td>
+						  	<td><el-form-item :prop="'['+index+'].duties['+dt+'].tracingMixQuota'" :rules="ruleFloat('伴热配参量')"><el-input v-model="daily.duties[dt].tracingMixQuota"/></el-form-item></td>
+						  	<td><el-form-item :prop="'['+index+'].duties['+dt+'].tracingMixReal'" :rules="ruleFloat('伴热实参量')"><el-input v-model="daily.duties[dt].tracingMixReal"/></el-form-item></td>
+						  	
+						  	<td><el-form-item :prop="'['+index+'].duties['+dt+'].meterOilHeight'" :rules="ruleFloat('量油标高')"><el-input v-model="daily.duties[dt].meterOilHeight"/></el-form-item></td>
+						  	<td><el-input v-model="daily.duties[dt].meterPeriod"/></td>
+						  	<td><el-input v-model="daily.duties[dt].meterAvgTime"/></td>
+						  	<td><el-form-item :prop="'['+index+'].duties['+dt+'].meterLiquid'" :rules="ruleFloat('计量液量')"><el-input v-model="daily.duties[dt].meterLiquid"/></el-form-item></td>
+						  	<td><el-form-item :prop="'['+index+'].duties['+dt+'].meterGas'" :rules="ruleFloat('计量气量')"><el-input v-model="daily.duties[dt].meterGas"/></el-form-item></td>
+						  </tr>
+						  
+						  <tr>
+						  	<td><div class="rpt-table-cell rpttab-cell-4">小计</div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4">{{calcSum(daily,'tracingMixQuota')}}</div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4">{{calcSum(daily,'tracingMixReal')}}</div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4"></div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4">{{calcSum(daily,'meterLiquid')}}</div></td>
+						  	<td><div class="rpt-table-cell rpttab-cell-4">{{calcSum(daily,'meterGas')}}</div></td>
+						  </tr>
+						  
+					    </template>
 						
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">方式</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">配参量(m3/d)</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">实参量(m3/d)</div></td>
 						
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">量油标高/罐位(cm)</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">计量起止时间      h:min-h:min</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">平均量油时间(s)</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">计量液量(t/d)</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">计量气量(m3/d)</div></td>
 						
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">上行</div></td>
-						<td rowspan="2"><div class="rpt-table-cell rpttab-cell-4">下行</div></td>
-					</tr>
-					
-					<tr>
-						<td><div class="rpt-table-cell rpttab-cell-4">进口</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">出口</div></td>
-					</tr>
-				</table>
-			</div>
-			<div class="rpt-table-body" @scroll="rptboxScrollHandler" ref="rpt_body">
-				<table cellpadding="0" cellspacing="0"  class="rpt-table" align="center">  
-					<tr class="dataRow dbl-line" v-for=" d in 15 ">
-						<td><div class="rpt-table-cell rpttab-cell-0">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-1">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-2">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-3">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">d</div></td>
-					</tr>
-					<tr class="tab-foot-tr">
-						<td><div class="rpt-table-cell rpttab-cell-0">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-1">d</div></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">巡检人:</div></td>
-						<td ><div class="rpt-table-cell edit-able-cell">dd</div></td>
-						<td></td>
-						<td><div class="rpt-table-cell rpttab-cell-4">计量人:</div></td>
-						<td><div class="rpt-table-cell edit-able-cell">dd</div></td>
-					</tr>
-				</table>
-				
-				
-			</div>
-			
-			<div class="rpt-table-fixed">
-				<div class="rpt-table-header" ref="fixed_header">
-				    <table cellpadding="0" cellspacing="0" class="rpt-table" align="center">
-				       <tr>
-				    	<td rowspan="3"><div class="rpt-table-cell rpttab-cell-0">井号2</div></td>
-				    	<td rowspan="3"><div class="rpt-table-cell rpttab-cell-1">生产方式2</div></td>
-				       </tr>
-				    </table>    
-				</div>
-				<div class="rpt-table-body" ref="fixed_body">
-					<table cellpadding="0" cellspacing="0"  class="rpt-table" align="center">
-						<tr class="dataRow dbl-line" v-for=" d in 15 ">
-							<td><div class="rpt-table-cell rpttab-cell-0">d</div></td>
-							<td><div class="rpt-table-cell rpttab-cell-1">d</div></td>
-						</tr>
-						<tr class="tab-foot-tr">
-							<td><div class="rpt-table-cell rpttab-cell-0">&nbsp;</div></td>
+						<tr class="tab-foot-tr"  v-show="rptDatas&&rptDatas.length>0">
+							<td><div class="rpt-table-cell rpttab-cell-0"></div></td>
+							<td><div class="rpt-table-cell rpttab-cell-1"></div></td>
+							<td><div class="rpt-table-cell rpttab-cell-4">白班巡检人:</div></td>
+							<td><el-input v-model="rptOth.dayPatrolBy"/></td>
+							<td></td>
+							<td><div class="rpt-table-cell rpttab-cell-4">白班计量人:</div></td>
+							<td><el-input v-model="rptOth.dayMeterBy"/></td>
+							<td></td>
+							<td><div class="rpt-table-cell rpttab-cell-4">夜班巡检人:</div></td>
+							<td><el-input v-model="rptOth.nightPatrolBy"/></td>
+							<td></td>
+							<td><div class="rpt-table-cell rpttab-cell-4">夜班计量人:</div></td>
+							<td><el-input v-model="rptOth.nightMeterBy"/></td>
+							<td></td>
+							<td><div class="rpt-table-cell rpttab-cell-4">审核人:</div></td>
+							<td><el-input v-model="rptOth.auditor"/></td>
 						</tr>
 					</table>
+					</el-form>
+					
+				</div>
+				
+				<div class="rpt-table-fixed" style="display: none;">
+					<div class="rpt-table-header" ref="fixed_header">
+					    <table cellpadding="0" cellspacing="0" class="rpt-table" align="center">
+					       <tr>
+					    	<td rowspan="3"><div class="rpt-table-cell rpttab-cell-0">井号</div></td>
+					    	<td rowspan="3"><div class="rpt-table-cell rpttab-cell-1">生产方式</div></td>
+					       </tr>
+					    </table>    
+					</div>
+					<div class="rpt-table-body" ref="fixed_body">
+						<table cellpadding="0" cellspacing="0"  class="rpt-table" align="center">
+							<tr class="dataRow dbl-line" v-for=" (daily,index) in rptDatas " :key="index">
+								<td rows="4"><div class="rpt-table-cell rpttab-cell-0">{{daily.wellName}}</div></td>
+							</tr>
+							<tr class="tab-foot-tr">
+								<td><div class="rpt-table-cell rpttab-cell-0">&nbsp;</div></td>
+							</tr>
+						</table>
+					</div>
 				</div>
+				
+				
+				
+				
+				
 			</div>
 			
 			
-			
-			
-			
 		</div>
-		
-		
+	
+	
 	</div>
 	
+	
 </template>
 
 <script setup>
-	import {reactive,ref,onMounted} from 'vue'
+	import {reactive,ref,onMounted,watch,toRaw,nextTick,computed} from 'vue'
+	import {ElMessageBox,ElMessage} from 'element-plus'
+	import { storeToRefs } from 'pinia'
+	import { useHomeStore } from '../../store/home.js'
+	
+	import oilDailyRptAPI from '../../api/oilDailyRpt.js'
+	
+	const queryForm=reactive({
+		dailyDate:null,
+		orgId:null,
+		orgName:null
+	})
+	
+	const dailyDatefmt=computed(()=>{
+		if(queryForm.dailyDate){
+			let ds=queryForm.dailyDate.split('-')
+			return `${ds[0]}年${ds[1]}月${ds[2]}日`
+		}
+		return null
+	})
+	
+	const btnStatTag=ref(0)
+	
+	const dutyTimes=ref(['08:00-16:00','16:00-00:00','00:00-08:00'])
+	const rptDatas=ref(null)
+	const rptOth=reactive({
+		dayPatrolBy:null,
+		dayMeterBy:null,
+		nightPatrolBy:null,
+		nightMeterBy:null,
+		auditor:null,
+		dailyDate:null
+	})
+	
+	const calcSum=(daily,prop)=>{
+		let sum=0
+		dutyTimes.value.forEach(dt=>{
+			sum+=daily.duties[dt][prop]?parseFloat(daily.duties[dt][prop]):0
+		})
+		return sum
+	}
+	
+	const clearRpt=()=>{
+		rptDatas.value=null
+		Object.assign(rptOth,{dayPatrolBy:null,dayMeterBy:null,nightPatrolBy:null,nightMeterBy:null,auditor:null,dailyDate:null})
+	}
+	
+	const queryHandle=()=>{
+		
+		if(queryForm.dailyDate==null || queryForm.orgId==null){
+			ElMessage.error('请选择井站、日期后再继续')
+			return
+		}
+		clearRpt()
+		
+		btnStatTag.value=1
+		oilDailyRptAPI.load(toRaw(queryForm)).then(resp=>{
+			btnStatTag.value=0
+			if(resp.code!=0){
+				ElMessage.error(resp.msg || "加载数据失败")
+				return 
+			}
+			
+			if(!resp.data || resp.data.length==0){
+				ElMessage.error("未找到对应数据")
+				return 
+			}
+			
+			let {dayPatrolBy,dayMeterBy,nightPatrolBy,nightMeterBy,auditor,dailyDate}=resp.data[0]
+			
+			Object.assign(rptOth,{dayPatrolBy,dayMeterBy,nightPatrolBy,nightMeterBy,auditor,dailyDate})
+			
+			rptDatas.value=resp.data
+			
+			nextTick(()=>{
+				initSize()
+			})
+			
+		}).catch(err=>{
+			btnStatTag.value=0
+			ElMessage.error('加载数据出错')
+			console.log(err)
+		})
+	}
 	
+	const rptform=ref(null)
 	const rpt_page=ref(null)
 	const rpt_title=ref(null)
 	const rpt_body=ref(null)
@@ -157,41 +336,179 @@
 	const fixedBodyH=ref(283)
 	
 	const rptboxScrollHandler=(evn)=>{
-		//console.log(evn.target.scrollTop)
-		//console.log(fixed_body.value)
 		fixed_body.value.scrollTop=evn.target.scrollTop
 		rpt_header.value.scrollLeft=evn.target.scrollLeft
 	}
 	
+	
+	const ruleFloat=(msg)=>{
+		return {
+			pattern:/^\d+(\.\d+)?$/,
+			message:`${msg}应为大于0的数值`,
+			trigger:'blur'
+		}
+	}
+	
+	let formValiding=false  //整体验证
+	
+	const formValidHandler=(prop,isValid,message)=>{
+		//console.log(prop,isValid,message)
+		if(!isValid && !formValiding){
+			ElMessage.error(message)
+		}
+	}
+	
+	const saveRpt=()=>{
+		formValiding=true
+		rptform.value.validate((isValid,invalidObj) => {
+			formValiding=false
+			if(!isValid){
+				ElMessage.error('还有数据不符合要求,请先修改再继续')
+				return
+			}
+			btnStatTag.value=3
+			rptOth.dailyDate=queryForm.dailyDate
+			let saveData=toRaw(rptDatas.value)
+			saveData.forEach(daily=>{
+				Object.assign(daily,rptOth)
+			})
+			oilDailyRptAPI.saveRpt(JSON.stringify(saveData)).then(resp=>{
+				btnStatTag.value=0
+				if(resp.code!=0){
+					ElMessage.error(resp.msg || '保存失败')
+					return
+				}
+				ElMessage.success('保存成功')
+				
+			}).catch(err=>{
+				btnStatTag.value=0
+				console.error(err)
+			})
+		})
+		
+		
+	}
+	
+	const extractRpt=()=>{
+		btnStatTag.value=2
+		clearRpt()
+		oilDailyRptAPI.extract(toRaw(queryForm)).then(resp=>{
+			//console.log(resp)
+			btnStatTag.value=0
+			if(resp.code!=0){
+				ElMessage.error(resp.msg || "提取数据失败")
+				return 
+			}
+			
+			//补齐班次数据
+			let blankDuty={
+				"dutyId": null,
+				"dutyTime": null,
+				"produceTime": null,
+				"patrolTime": null,
+				"oilPress": null,
+				"casingPress": null,
+				"backPress": null,
+				"tempWellport": null,
+				"tempHotInput": null,
+				"tempHotOutput": null,
+				"tempStationInput": null,
+				"tracingMode": null,
+				"tracingMixQuota": null,
+				"tracingMixReal": null,
+				"meterOilHeight": null,
+				"meterPeriod": null,
+				"meterAvgTime": null,
+				"meterLiquid": null,
+				"meterGas": null,
+				"wellId": null,
+				"dailyDate": null,
+				"displayNum": null					
+			}
+			resp.data.forEach(daily=>{
+				let [dt1,dt2,dt3] = dutyTimes.value
+				if(!daily.duties){
+					daily.duties={
+						dt1:Object.assign({},blankDuty,{dutyTime:dt1}),
+						dt2:Object.assign({},blankDuty,{dutyTime:dt2}),
+						dt3:Object.assign({},blankDuty,{dutyTime:dt3})
+						}
+					
+					return false
+				}
+				if(!daily.duties[dt1]){
+					daily.duties[dt1]=Object.assign({},blankDuty,{dutyTime:dt1})
+				}
+				if(!daily.duties[dt2]){
+					daily.duties[dt2]=Object.assign({},blankDuty,{dutyTime:dt2})
+				}
+				if(!daily.duties[dt3]){
+					daily.duties[dt3]=Object.assign({},blankDuty,{dutyTime:dt3})
+				}
+			})
+			
+			rptDatas.value=resp.data
+			
+			nextTick(()=>{
+				initSize()
+			})
+			
+		}).catch(err=>{
+			btnStatTag.value=0
+			console.error(err)
+		})
+	}
+	
 	onMounted(()=>{
 		setTimeout(()=>{
-			console.log(rpt_body.value.clientHeight,rpt_body.value.offsetHeight)
-			console.log(rpt_page.value.offsetHeight)
 			initSize()
 		},100)
 		
 	})
 	
 	const initSize=()=>{
+		
 		//报表内容区高度设置
 		rptBodyH.value=rpt_page.value.clientHeight-rpt_title.value.offsetHeight-rpt_header.value.offsetHeight-5
 		let diffH=rpt_body.value.offsetHeight-rpt_body.value.clientHeight
 		fixedBodyH.value=rptBodyH.value-diffH-1
-		//固定列首格高度设置
 		
+		//固定列首格高度设置
 		let hdtab=rpt_header.value.querySelector('table')
-		console.log(hdtab.rows[0].cells[0].clientHeight)
-		
 		let fixedHdtab=fixed_header.value.querySelector('table')
 		fixedHdtab.rows[0].cells[0].style.height=(hdtab.rows[0].cells[0].clientHeight+0.5)+'px'
 	}
+	
+	const synFixedClmVal=()=>{
+		
+	}
+	
+	const store=useHomeStore()
+	const  {currentTreeNode} = storeToRefs(store)
+	watch(currentTreeNode,(newNode, oldNode)=>{
+		if(newNode!=null && newNode.nodeType=='org'){
+			queryForm.orgId=newNode.id 
+			queryForm.orgName=newNode.name 
+		}
+		
+	},{ immediate: true })
+	
 </script>
 
 <style scoped>
 	@import url('rpt.css');
-	
-	.rpt-page{
+	.out-page{
 		height: 100%;
+		box-sizing: border-box;
+	}
+	.out-top{
+		height:60px;
+		padding:10px 20px;
+		border-bottom: 1px solid #e8e8e8;
+		box-sizing: border-box;
+	}
+	.rpt-page{
+		height: calc(100% - 60px);
 	}
 	.sub-title{
 		display: flex;
@@ -218,4 +535,17 @@
 	.rpt-table-fixed .rpt-table-body{
 		height: v-bind(fixedBodyH+'px');
 	}
+	
+	.rpt-table-body .el-form-item{
+		margin:0px;
+	}
+	
+	.el-input.rpt-table-cell{
+		height: 127px;
+		padding:0px;
+	}
+	
+	.el-input.rpt-table-cell:deep(.el-input__inner){
+		height:100%;
+	}
 </style>

+ 129 - 0
src/pages/rpt/rpt.css

@@ -0,0 +1,129 @@
+html,body{
+	margin:0px;
+	padding:0px;
+	height:100%;
+	overflow:auto;
+}
+
+
+
+
+.rpt-title{margin:0px auto;padding:10px;font-family:"黑体";color:#000000;font-size:24px;text-align:center;}
+
+.rpt-title .sub-title{height:24px;line-height:24px;font-size:16px;}
+
+.active{
+	 background-color:#16b738;
+	 color:#ffffff;
+}
+
+.editor{
+	border:0px;width:100%;height:100%;margin:0px;padding:0px;box-sizing:border-box;
+}
+
+
+
+
+.rpt-box{
+	position:relative;
+	overflow:hidden;
+	width:100%;
+	top:2px;
+	font-family:'宋体';
+	color:#000000;
+	display:inline-block;
+}
+
+.rpt-box,.rpt-box *{
+	box-sizing:border-box;
+}
+
+.rpt-box .rpt-table{
+	position:relative;
+	width:auto;
+	margin:0;
+	border-collapse: collapse;
+}
+
+.rpt-table,.rpt-table td{
+	border:1px solid #000000;
+	
+}
+
+.rpt-table,.rpt-table td[patch]{
+	border:0px solid #000000;
+}
+
+
+
+
+.rpt-table-cell{
+	/* height:28px;
+	line-height:28px; */
+	padding:5px 2px;
+	position:relative;
+	box-sizing:border-box;
+	text-align:center;
+	/*overflow:hidden;
+	text-overflow:ellipsis;
+	white-space:nowrap;*/
+	
+}
+
+.el-input.rpt-table-cell{
+	height: 100%;
+}
+
+td:deep(.el-input__wrapper){
+	border-radius: 0px !important;
+	background-color: #e5f8fe !important;
+	
+}
+
+td:deep(.el-input__inner){
+	text-align: center !important;
+	
+}
+
+
+.line-half{line-height:14px;} /*单元格内有换行*/
+
+.rpt-patch-cell{
+	width:18px !important;
+}
+
+.edit-able-cell{
+	border-bottom: 1px solid #666 !important;
+}
+
+.rpt-table-header {
+    border-width: 0 0 1px;
+    overflow:hidden;
+}
+
+.rpt-table-body {
+	height:300px;
+	width:100%;
+	position:relative;
+	overflow:auto;
+	padding-right: 1px;
+	padding-bottom: 5px;
+    margin-top:-1px;
+}
+
+.rpt-table-fixed{
+	position:absolute;
+	top:0px;
+	left:0px;
+	z-index:101;
+	background-color:#fff;
+}
+
+.rpt-table-fixed .rpt-table-body{
+	overflow:hidden;
+	/* height:300px; */
+}
+
+.tab-foot-tr td{
+	border:0px !important;
+}