index.vue 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
  4. <el-form-item label="测量批次id" prop="measurementBatchId" label-width="90px">
  5. <el-input v-model="queryParams.measurementBatchId" placeholder="请输入测量批次id" clearable
  6. @keyup.enter.native="handleQuery" />
  7. </el-form-item>
  8. <el-form-item label="发动机状态" prop="engineStatus" label-width="90px">
  9. <el-select v-model="queryParams.engineStatus" placeholder="请选择发动机状态" clearable>
  10. <el-option v-for="item in engineStatusOptions" :key="item.value" :label="item.label" :value="item.value" />
  11. </el-select>
  12. </el-form-item>
  13. <el-form-item label="角度" prop="angle">
  14. <el-select v-model="queryParams.angle" placeholder="请选择角度" clearable>
  15. <el-option v-for="item in angleOptions" :key="item.value" :label="item.label" :value="item.value" />
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item label="测试距离" prop="testDistance">
  19. <el-input v-model="queryParams.testDistance" placeholder="请输入测试距离" clearable
  20. @keyup.enter.native="handleQuery" />
  21. </el-form-item>
  22. <el-form-item label="时间" prop="time">
  23. <el-date-picker clearable v-model="queryParams.time" type="datetime" value-format="yyyy-MM-dd HH:mm"
  24. format="yyyy-MM-dd HH:mm" placeholder="请选择时间">
  25. </el-date-picker>
  26. </el-form-item>
  27. <el-form-item label="地点" prop="location">
  28. <el-input v-model="queryParams.location" placeholder="请输入地点" clearable @keyup.enter.native="handleQuery" />
  29. </el-form-item>
  30. <el-form-item label="大气压" prop="atmosPress">
  31. <el-input v-model="queryParams.atmosPress" placeholder="请输入大气压" clearable @keyup.enter.native="handleQuery" />
  32. </el-form-item>
  33. <el-form-item label="温度" prop="temperature">
  34. <el-input v-model="queryParams.temperature" placeholder="请输入温度" clearable @keyup.enter.native="handleQuery" />
  35. </el-form-item>
  36. <el-form-item label="风速" prop="windSpeed">
  37. <el-input v-model="queryParams.windSpeed" placeholder="请输入风速" clearable @keyup.enter.native="handleQuery" />
  38. </el-form-item>
  39. <el-form-item label="湿度" prop="humidity">
  40. <el-input v-model="queryParams.humidity" placeholder="请输入湿度" clearable @keyup.enter.native="handleQuery" />
  41. </el-form-item>
  42. <el-form-item label="CO₂浓度" prop="concentration">
  43. <el-input v-model="queryParams.concentration" placeholder="请输入CO₂浓度" clearable
  44. @keyup.enter.native="handleQuery" />
  45. </el-form-item>
  46. <el-form-item>
  47. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  48. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  49. </el-form-item>
  50. </el-form>
  51. <el-row :gutter="10" class="mb8">
  52. <el-col :span="1.5">
  53. <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
  54. v-hasPermi="['meas:envData:add']">新增</el-button>
  55. </el-col>
  56. <el-col :span="1.5">
  57. <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
  58. v-hasPermi="['meas:envData:edit']">修改</el-button>
  59. </el-col>
  60. <el-col :span="1.5">
  61. <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
  62. v-hasPermi="['meas:envData:remove']">删除</el-button>
  63. </el-col>
  64. <el-col :span="1.5">
  65. <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
  66. v-hasPermi="['meas:envData:export']">导出</el-button>
  67. </el-col>
  68. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  69. </el-row>
  70. <el-table v-loading="loading" :data="envDataList" @selection-change="handleSelectionChange">
  71. <el-table-column type="selection" width="55" align="center" />
  72. <el-table-column label="编号" align="center" prop="id" />
  73. <el-table-column label="测量批次id" align="center" prop="measurementBatchId" />
  74. <el-table-column label="发动机状态" align="center" prop="engineStatus" />
  75. <el-table-column label="角度" align="center" prop="angle" />
  76. <el-table-column label="涡轮后温度" align="center" prop="turbinePostTemp" />
  77. <el-table-column label="测试距离" align="center" prop="testDistance" />
  78. <el-table-column label="时间" align="center" prop="time">
  79. <template slot-scope="scope">
  80. <span>{{ parseTime(scope.row.time, "{y}-{m}-{d}") }}</span>
  81. </template>
  82. </el-table-column>
  83. <el-table-column label="地点" align="center" prop="location" />
  84. <el-table-column label="大气压" align="center" prop="atmosPress" />
  85. <el-table-column label="温度" align="center" prop="temperature" />
  86. <el-table-column label="风速" align="center" prop="windSpeed" />
  87. <el-table-column label="湿度" align="center" prop="humidity" />
  88. <el-table-column label="CO₂浓度" align="center" prop="concentration" />
  89. <!-- <el-table-column label="创建人" align="center" prop="createBy" />
  90. <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
  91. <template slot-scope="scope">
  92. <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
  93. </template>
  94. </el-table-column> -->
  95. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  96. <template slot-scope="scope">
  97. <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
  98. v-hasPermi="['meas:envData:edit']">修改</el-button>
  99. <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
  100. v-hasPermi="['meas:envData:remove']">删除</el-button>
  101. </template>
  102. </el-table-column>
  103. </el-table>
  104. <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
  105. @pagination="getList" />
  106. <!-- 添加或修改测量环境数据对话框 -->
  107. <el-dialog :title="title" :visible.sync="open" width="70%" append-to-body>
  108. <el-form ref="form" :model="engineForm" :rules="rules" size="mini" label-width="80px">
  109. <el-row type="flex" justify="space-around">
  110. <el-form-item label="发动机型号" prop="model" label-width="90px">
  111. <el-select v-model="engineForm.model" placeholder="请选择发动机型号">
  112. <el-option v-for="item in engineModelList" :key="item.id" :label="item.model" :value="item.id">
  113. </el-option>
  114. <el-option :value="undefined" disabled style="cursor: pointer">
  115. <el-button type="text" @click="onClickBtn('engine')"><i class="el-icon-plus"></i> 增加发动机型号</el-button>
  116. </el-option>
  117. </el-select>
  118. </el-form-item>
  119. <el-form-item label="几何模型" prop="geometryFiles">
  120. <file-upload :fileSize="0" :limit="1" :fileType="['x_t', 'str']" v-model="engineForm.geometryFiles" />
  121. </el-form-item>
  122. <el-form-item label="" prop="geometryImage">
  123. <image-upload :fileSize="0" :limit="1" :fileType="['jpg']" v-model="engineForm.geometryImage"
  124. :isPicCard="false" />
  125. </el-form-item>
  126. </el-row>
  127. </el-form>
  128. <el-form ref="form" :model="form" :rules="rules" size="mini" label-width="80px">
  129. <el-form-item label="测量批次" prop="measurementBatch" style="margin-left: 5%">
  130. <el-select v-model="form.measurementBatchId" placeholder="请选择测量批次">
  131. <el-option v-for="item in measureBatchOptions" :key="item.id" :label="item.measurementBatch"
  132. :value="item.id">
  133. <span style="float: left">{{ item.id }}</span>
  134. <span style="float: right; color: #8492a6; font-size: 13px">{{
  135. item.measurementBatch
  136. }}</span>
  137. </el-option>
  138. <el-option :value="undefined" disabled style="cursor: pointer">
  139. <el-button type="text" @click="onClickBtn('measBatch')"><i class="el-icon-plus"></i> 增加测量批次</el-button>
  140. </el-option>
  141. </el-select>
  142. </el-form-item>
  143. </el-form>
  144. <div class="box">
  145. <span class="title">环境参数</span>
  146. <el-form ref="form" :model="form" size="mini" :rules="rules" label-width="80px">
  147. <el-row type="flex" justify="space-around">
  148. <el-form-item label="发动机状态" label-width="100px" prop="engineStatus">
  149. <el-select v-model="form.engineStatus" placeholder="请选择发动机状态">
  150. <el-option v-for="item in engineStatusOptions" :key="item.value" :label="item.label"
  151. :value="item.value">
  152. </el-option>
  153. </el-select>
  154. </el-form-item>
  155. <el-form-item label="角度" prop="angle">
  156. <el-select v-model="form.angle" placeholder="请输入角度">
  157. <el-option v-for="item in angleOptions" :key="item.value" :label="item.label" :value="item.value">
  158. </el-option>
  159. </el-select>
  160. </el-form-item>
  161. <el-form-item label="涡轮后温度" prop="turbinePostTemp" label-width="90px">
  162. <file-upload :fileSize="0" :limit="1" :fileType="['txt']" v-model="form.turbinePostTemp" />
  163. </el-form-item>
  164. </el-row>
  165. <el-row type="flex" justify="space-around">
  166. <el-form-item label="测试距离" prop="testDistance">
  167. <el-input v-model="form.testDistance" placeholder="请输入测试距离" />
  168. </el-form-item>
  169. <el-form-item label="时间" prop="time">
  170. <el-date-picker clearable v-model="form.time" type="datetime" value-format="yyyy-MM-dd HH:mm"
  171. format="yyyy-MM-dd HH:mm" placeholder="请选择时间">
  172. </el-date-picker>
  173. </el-form-item>
  174. <el-form-item label="地点" prop="location">
  175. <el-input v-model="form.location" placeholder="请输入地点" />
  176. </el-form-item>
  177. </el-row>
  178. <el-row type="flex" justify="space-around">
  179. <el-form-item label="大气压" prop="atmosPress">
  180. <el-input v-model="form.atmosPress" placeholder="请输入大气压(单位:pa)" />
  181. </el-form-item>
  182. <el-form-item label="温度" prop="temperature">
  183. <el-input v-model="form.temperature" placeholder="请输入温度(单位:K)" />
  184. </el-form-item>
  185. <el-form-item label="风速" prop="windSpeed">
  186. <el-input v-model="form.windSpeed" placeholder="请输入风速(单位:m/s)" />
  187. </el-form-item>
  188. </el-row>
  189. <el-row type="flex" justify="space-around">
  190. <el-form-item label="湿度" prop="humidity">
  191. <el-input v-model="form.humidity" placeholder="请输入湿度(单位:%)" />
  192. </el-form-item>
  193. <el-form-item label="CO₂浓度" prop="concentration">
  194. <el-input v-model="form.concentration" placeholder="请输入浓度(单位:mol)" />
  195. </el-form-item>
  196. <el-col :span="7">
  197. <el-button type="primary" size="mini" @click="envDataSave">保 存</el-button>
  198. </el-col>
  199. </el-row>
  200. </el-form>
  201. </div>
  202. <div class="box">
  203. <span class="title">光谱辐射计测量数据</span>
  204. <el-form ref="radiationForm" size="mini" :model="radiationForm" :rules="rules" :disabled="disabled"
  205. label-width="80px">
  206. <el-row type="flex" justify="space-around">
  207. <el-form-item label="型号" prop="model">
  208. <el-input v-model="radiationForm.model" placeholder="请输入型号" />
  209. </el-form-item>
  210. <el-form-item label="镜头视场角" prop="lensFView" label-width="90px">
  211. <el-input v-model="radiationForm.lensFView" placeholder="请输入镜头视场角(单位:mrad)" />
  212. </el-form-item>
  213. <el-form-item label="增益" prop="gain">
  214. <el-input v-model.number="radiationForm.gain" placeholder="请输入增益(单位:x)" />
  215. </el-form-item>
  216. </el-row>
  217. <el-row type="flex" justify="space-around">
  218. <el-form-item label="背景数据" prop="backgroundData">
  219. <file-upload :fileSize="0" :limit="1" :fileType="['lgm']" v-model="radiationForm.backgroundData" />
  220. </el-form-item>
  221. <el-form-item label="标定温度" prop="calTemp">
  222. <el-input v-model="radiationForm.calTemp" placeholder="请输入标定温度" />
  223. </el-form-item>
  224. <el-form-item label="标定曲线" prop="calCurve">
  225. <file-upload :fileSize="0" :limit="5" :fileType="['txt']" :isShowViev="true"
  226. v-model="radiationForm.calCurve" v-on:fileView="fileView" />
  227. </el-form-item>
  228. </el-row>
  229. </el-form>
  230. <div class="box" style="margin-bottom: 15px">
  231. <span class="title">目标数据</span>
  232. <el-form ref="radiationForm" size="mini" :model="radiationForm" :disabled="disabled" :rules="rules"
  233. label-width="80px">
  234. <el-row type="flex" justify="space-around">
  235. <el-form-item label="原始数据" prop="rawData">
  236. <file-upload :fileSize="0" :limit="5" :fileType="['txt']" v-model="radiationForm.rawData" />
  237. </el-form-item>
  238. <el-form-item label="辐射亮度" prop="radiance1">
  239. <file-upload :fileSize="0" :limit="1" :fileType="['txt']" v-model="radiationForm.radiance1" />
  240. </el-form-item>
  241. <el-form-item label="辐射亮度" prop="radiance2">
  242. <file-upload :fileSize="0" :limit="1" :fileType="['txt']" v-model="radiationForm.radiance2" />
  243. </el-form-item>
  244. </el-row>
  245. </el-form>
  246. </div>
  247. </div>
  248. <div class="box">
  249. <span class="title">热像仪测量数据</span>
  250. <el-form ref="TIForm" :model="TIForm" size="mini" :rules="rules" :disabled="disabled" label-width="80px">
  251. <el-row type="flex" justify="space-around">
  252. <el-form-item label="型号" prop="model">
  253. <el-input v-model="TIForm.model" placeholder="请输入型号" />
  254. </el-form-item>
  255. <el-form-item label="镜头视场角" label-width="90px" prop="lensFView">
  256. <el-select v-model="TIForm.lensFView" placeholder="请选择镜头视场角">
  257. <el-option v-for="item in lensFViewOptions" :key="item.value" :label="item.label" :value="item.value">
  258. </el-option>
  259. </el-select>
  260. </el-form-item>
  261. <el-form-item label="滤镜编号" prop="filterNo">
  262. <el-select v-model="TIForm.filterNo" placeholder="请选择滤镜编号">
  263. <el-option v-for="item in filterNoOptions" :key="item.value" :label="item.label" :value="item.value">
  264. </el-option>
  265. </el-select>
  266. </el-form-item>
  267. </el-row>
  268. <el-row type="flex" justify="space-around">
  269. <el-form-item label="帧率" prop="fps">
  270. <el-select v-model="TIForm.fps" placeholder="请选择帧率">
  271. <el-option v-for="item in fpsOptions" :key="item.value" :label="item.label" :value="item.value">
  272. </el-option>
  273. </el-select> </el-form-item><el-form-item label="波段" prop="spectralBand">
  274. <el-select v-model="TIForm.spectralBand" placeholder="请选择波段">
  275. <el-option v-for="item in spectralBandOptions" :key="item.value" :label="item.label"
  276. :value="item.value">
  277. </el-option>
  278. </el-select>
  279. </el-form-item>
  280. <el-form-item label="积分时间" prop="integrationTime">
  281. <el-input v-model.number="TIForm.integrationTime" placeholder="请输入积分时间(单位:s)" />
  282. </el-form-item>
  283. </el-row>
  284. <el-row type="flex" justify="space-around">
  285. <el-form-item label="温度标定" prop="tempCal">
  286. <file-upload :fileSize="0" :limit="1" :fileType="['txt']" v-model="TIForm.tempCal" />
  287. </el-form-item>
  288. <el-form-item label="辐射亮度" prop="radiance">
  289. <file-upload :fileSize="0" :limit="1" :fileType="['txt']" v-model="TIForm.radiance" :isShowViev="true"
  290. v-on:fileView="fileView2" />
  291. </el-form-item>
  292. <el-form-item label="辐射照度" prop="radIllumination">
  293. <file-upload :fileSize="0" :limit="1" :fileType="['txt']" v-model="TIForm.radIllumination" />
  294. </el-form-item>
  295. </el-row>
  296. <el-row type="flex" justify="space-around">
  297. <el-form-item label="辐射温度" prop="radTemp">
  298. <file-upload :fileSize="0" :limit="1" :fileType="['txt']" v-model="TIForm.radTemp" />
  299. </el-form-item>
  300. <el-col :span="7"></el-col>
  301. <el-col :span="7"></el-col>
  302. </el-row>
  303. </el-form>
  304. </div>
  305. <div class="box">
  306. <span class="title">透过率数据</span>
  307. <el-form ref="TransmittanceForm" :model="TransmittanceForm" :rules="rules" :disabled="disabled"
  308. label-width="80px">
  309. <el-row type="flex" justify="space-around">
  310. <el-form-item label="原始数据" prop="rawData">
  311. <file-upload :fileSize="0" :limit="1" :fileType="['txt']" v-model="TransmittanceForm.rawData" />
  312. </el-form-item>
  313. <el-form-item label="透过率曲线3~5μm" label-width="130px" prop="curve1">
  314. <file-upload :fileSize="0" :limit="1" :fileType="['txt']" v-model="TransmittanceForm.curve1" />
  315. </el-form-item>
  316. <el-form-item label="透过率曲线8~14μm" label-width="135px" prop="curve2">
  317. <file-upload :fileSize="0" :limit="1" :fileType="['txt']" v-model="TransmittanceForm.curve2" />
  318. </el-form-item>
  319. </el-row>
  320. </el-form>
  321. </div>
  322. <div slot="footer" class="dialog-footer">
  323. <el-button type="primary" @click="submitForm">确 定</el-button>
  324. <el-button @click="cancel">取 消</el-button>
  325. </div>
  326. </el-dialog>
  327. <el-dialog title="增加发动机型号" :visible.sync="addDialogVisible" width="400px" append-to-body>
  328. <el-input v-model="engineModel" placeholder="请输入发动机型号">
  329. <template slot="prepend">发动机型号</template>
  330. </el-input>
  331. <div slot="footer" class="dialog-footer">
  332. <el-button type="primary" @click="addEngine()">确 定</el-button>
  333. <el-button @click="addDialogVisible = false">取 消</el-button>
  334. </div>
  335. </el-dialog>
  336. <el-dialog title="增加测量批次" :visible.sync="addMeasVisible" width="400px" append-to-body>
  337. <el-form ref="form" :model="addMeasBatchForm" :rules="rules" label-width="80px">
  338. <el-form-item label="发动机型号ID" label-width="110px" prop="engineId">
  339. <el-select v-model="addMeasBatchForm.engineId" placeholder="请选择发动机型号ID">
  340. <el-option v-for="item in engineModelList" :key="item.id" :label="item.model" :value="item.id">
  341. <span style="float: left">{{ item.id }}</span>
  342. <span style="float: right; color: #8492a6; font-size: 13px">{{
  343. item.model
  344. }}</span>
  345. </el-option>
  346. </el-select>
  347. </el-form-item>
  348. <el-form-item label="测量批次" prop="measurementBatch">
  349. <el-input v-model="addMeasBatchForm.measurementBatch" placeholder="请输入测量批次(测量年月日+发动机型号)" />
  350. </el-form-item>
  351. </el-form>
  352. <div slot="footer" class="dialog-footer">
  353. <el-button type="primary" @click="addMeas()">确 定</el-button>
  354. <el-button @click="addMeasVisible = false">取 消</el-button>
  355. </div>
  356. </el-dialog>
  357. <el-dialog title="数据可视化" :visible.sync="fileVisible" width="70%" append-to-body>
  358. <ECharts :chartData="chartData" />
  359. </el-dialog>
  360. </div>
  361. </template>
  362. <script>
  363. import {
  364. listEnvData,
  365. getEnvData,
  366. delEnvData,
  367. addEnvData,
  368. updateEnvData,
  369. } from "@/api/meas/envData";
  370. import {
  371. listEngineModel,
  372. addEngineModel,
  373. getEngineModel,
  374. updateEngineModel,
  375. } from "@/api/meas/engineModel";
  376. import { listMeasBatch, addMeasBatch } from "@/api/meas/measBatch";
  377. import {
  378. addRadiation,
  379. getRadiation,
  380. updateRadiation,
  381. listRadiation,
  382. } from "@/api/meas/radiation";
  383. import {
  384. addThermalImagerTesDdata,
  385. listThermalImagerTesDdata,
  386. updateThermalImagerTesDdata,
  387. } from "@/api/meas/thermalImagerTesDdata";
  388. import {
  389. addTransmissionRate,
  390. listTransmissionRate,
  391. updateTransmissionRate,
  392. } from "@/api/meas/transmissionRate";
  393. import ECharts from "./ECharts.vue";
  394. export default {
  395. name: "EnvData",
  396. components: { ECharts },
  397. data() {
  398. return {
  399. // 遮罩层
  400. loading: true,
  401. // 选中数组
  402. ids: [],
  403. // 非单个禁用
  404. single: true,
  405. // 非多个禁用
  406. multiple: true,
  407. // 显示搜索条件
  408. showSearch: true,
  409. // 总条数
  410. total: 0,
  411. // 测量环境数据表格数据
  412. envDataList: [],
  413. // 弹出层标题
  414. title: "",
  415. // 是否显示弹出层
  416. open: false,
  417. addDialogVisible: false,
  418. addMeasVisible: false,
  419. fileVisible: false,
  420. // 查询参数
  421. queryParams: {
  422. pageNum: 1,
  423. pageSize: 10,
  424. measurementBatchId: null,
  425. engineStatus: null,
  426. angle: null,
  427. turbinePostTemp: null,
  428. testDistance: null,
  429. time: null,
  430. location: null,
  431. atmosPress: null,
  432. temperature: null,
  433. windSpeed: null,
  434. humidity: null,
  435. concentration: null,
  436. },
  437. // engineQueryParams:{
  438. // pageNum: 1,
  439. // pageSize: 10,
  440. // },
  441. // 表单参数
  442. form: {},
  443. radiationForm: {},
  444. TIForm: {},
  445. TransmittanceForm: {},
  446. engineForm: {},
  447. // 表单校验和验证
  448. rules: {
  449. measurementBatchId: [
  450. { required: true, message: "测量批次id不能为空", trigger: "blur" },
  451. ],
  452. engineStatus: [
  453. { required: true, message: "发动机状态不能为空", trigger: "change" },
  454. ],
  455. angle: [{ required: true, message: "角度不能为空", trigger: "change" }],
  456. testDistance: [
  457. {
  458. pattern: /^(0(\.\d{1,2})?|[1-9]\d{0,2}(\.\d{1,2})?|1000(\.00?)?)$/,
  459. message: "请输入0.00-1000.00之间的数字,最多可保留两位小数",
  460. trigger: "blur",
  461. },
  462. ],
  463. time: [{ required: true, message: "时间不能为空", trigger: "change" }],
  464. location: [
  465. { required: true, message: "地点不能为空", trigger: "blur" },
  466. {
  467. min: 0,
  468. max: 50,
  469. message: "长度在 0 到 50 个字符",
  470. trigger: "blur",
  471. },
  472. ],
  473. atmosPress: [
  474. {
  475. pattern:
  476. /^(0(\.\d{1,2})?|[1-9]\d{0,2}(\.\d{1,2})?|1[0-4]\d{2}(\.\d{1,2})?|1500(\.00?)?)$/,
  477. message: "请输入0.00-1500.00pa之间的数字,最多可保留两位小数",
  478. trigger: "blur",
  479. },
  480. ],
  481. temperature: [
  482. {
  483. pattern: /^(230|2[3-9]\d|30\d|31\d|320)(\.\d{2})?$/,
  484. message: "请输入230.00-320.00K之间的数字,最多可保留两位小数",
  485. trigger: "blur",
  486. },
  487. ],
  488. windSpeed: [
  489. {
  490. pattern: /^(0(\.\d{1,2})?|[1-9]\d{0,2}(\.\d{1,2})?|1000(\.00?)?)$/,
  491. message: "请输入0.00-1000.00m/s之间的数字,最多可保留两位小数",
  492. trigger: "blur",
  493. },
  494. ],
  495. humidity: [
  496. {
  497. pattern: /(^(\d|[1-9]\d)(\.\d{1,2})?$)|(^100$)/,
  498. message: "请输入0.00-100.00%之间的数字,最多可保留两位小数",
  499. trigger: "blur",
  500. },
  501. ],
  502. concentration: [
  503. {
  504. pattern: /^(0(\.\d{1,2})?|[1-9]\d{0,2}(\.\d{1,2})?|1000(\.00?)?)$/,
  505. message: "请输入0.00-1000.00mol之间的数字,最多可保留两位小数",
  506. trigger: "blur",
  507. },
  508. ],
  509. },
  510. // 发动机状态
  511. engineStatusOptions: [
  512. { label: "最大", value: 1 },
  513. { label: "连续", value: 2 },
  514. { label: "最小", value: 3 },
  515. ],
  516. // 角度状态
  517. angleOptions: [
  518. { label: "15°", value: 1 },
  519. { label: "20°", value: 2 },
  520. { label: "30°", value: 3 },
  521. ],
  522. // 热像仪测试
  523. lensFViewOptions: [],
  524. filterNoOptions: [],
  525. fpsOptions: [],
  526. spectralBandOptions: [],
  527. measureBatchOptions: [],
  528. engineModelList: [],
  529. engineModel: "",
  530. addMeasBatchForm: {
  531. engineId: null,
  532. measurementBatch: null,
  533. },
  534. fileShowData: [],
  535. disabled: false,
  536. chartData: {},
  537. };
  538. },
  539. created() {
  540. this.getList();
  541. this.getListEngineModel();
  542. this.getListMeasBatch();
  543. },
  544. methods: {
  545. /** 查询测量环境数据列表 */
  546. getList() {
  547. this.loading = true;
  548. listEnvData(this.queryParams).then((response) => {
  549. this.envDataList = response.rows;
  550. this.total = response.total;
  551. this.loading = false;
  552. });
  553. },
  554. // 获取发电机List
  555. getListEngineModel() {
  556. this.loading = true;
  557. const data = {};
  558. listEngineModel(data).then((response) => {
  559. this.engineModelList = response.rows;
  560. this.loading = false;
  561. });
  562. },
  563. // 获取测量批次List
  564. getListMeasBatch() {
  565. const data = {};
  566. this.loading = true;
  567. listMeasBatch(data).then((response) => {
  568. this.measureBatchOptions = response.rows;
  569. this.loading = false;
  570. });
  571. },
  572. // 取消按钮
  573. cancel() {
  574. this.open = false;
  575. this.reset();
  576. },
  577. // 保存环境参数
  578. envDataSave() {
  579. // 保存环境参数,返回一个环境数据ID
  580. this.$refs["form"].validate((valid) => {
  581. console.log("11", valid, this.form);
  582. if (valid) {
  583. if (this.form.id != null) {
  584. updateEnvData(this.form).then((response) => {
  585. this.$modal.msgSuccess("修改成功");
  586. this.getList();
  587. });
  588. } else {
  589. addEnvData(this.form).then((response) => {
  590. this.$modal.msgSuccess("新增成功");
  591. this.getList();
  592. });
  593. }
  594. }
  595. });
  596. },
  597. // 点击增加按钮
  598. onClickBtn(type) {
  599. if (type === "engine") this.addDialogVisible = true;
  600. else if (type === "measBatch") this.addMeasVisible = true;
  601. },
  602. // 增加发动机型号
  603. addEngine() {
  604. this.loading = true;
  605. const form = {
  606. model: this.engineModel,
  607. };
  608. addEngineModel(form).then((response) => {
  609. this.$modal.msgSuccess("新增成功");
  610. this.addDialogVisible = false;
  611. this.getListEngineModel();
  612. this.engineModel = null;
  613. });
  614. },
  615. // 增加测量批次
  616. addMeas() {
  617. addMeasBatch(this.addMeasBatchForm).then((response) => {
  618. this.$modal.msgSuccess("新增成功");
  619. this.addMeasVisible = false;
  620. this.getListMeasBatch();
  621. this.addMeasBatchForm = {
  622. engineId: null,
  623. measurementBatch: null,
  624. };
  625. });
  626. },
  627. // 表单重置
  628. reset() {
  629. this.form = {
  630. id: null,
  631. measurementBatchId: null,
  632. engineStatus: null,
  633. angle: null,
  634. turbinePostTemp: null,
  635. testDistance: null,
  636. time: null,
  637. location: null,
  638. atmosPress: null,
  639. temperature: null,
  640. windSpeed: null,
  641. humidity: null,
  642. concentration: null,
  643. createBy: null,
  644. createTime: null,
  645. updateBy: null,
  646. updateTime: null,
  647. };
  648. this.engineForm = {
  649. model: null,
  650. geometryFiles: null,
  651. geometryImage: null,
  652. };
  653. this.radiationForm = {
  654. model: null,
  655. lensFView: null,
  656. gain: null,
  657. backgroundData: null,
  658. calTemp: null,
  659. calCurve: null,
  660. rawData: null,
  661. radiance1: null,
  662. radiance2: null,
  663. };
  664. this.TIForm = {
  665. model: null,
  666. lensFView: null,
  667. filterNo: null,
  668. fps: null,
  669. spectralBand: null,
  670. integrationTime: null,
  671. tempCal: null,
  672. radiance: null,
  673. radIllumination: null,
  674. radTemp: null,
  675. };
  676. this.TransmittanceForm = {
  677. rawData: null,
  678. curve1: null,
  679. curve2: null,
  680. };
  681. this.resetForm("form");
  682. this.resetForm("engineForm");
  683. this.resetForm("radiationForm");
  684. this.resetForm("TIForm");
  685. this.resetForm("TransmittanceForm");
  686. },
  687. /** 搜索按钮操作 */
  688. handleQuery() {
  689. this.queryParams.pageNum = 1;
  690. this.getList();
  691. },
  692. /** 重置按钮操作 */
  693. resetQuery() {
  694. this.resetForm("queryForm");
  695. this.handleQuery();
  696. },
  697. // 多选框选中数据
  698. handleSelectionChange(selection) {
  699. this.ids = selection.map((item) => item.id);
  700. this.single = selection.length !== 1;
  701. this.multiple = !selection.length;
  702. },
  703. /** 新增按钮操作 */
  704. handleAdd() {
  705. this.reset();
  706. this.open = true;
  707. this.title = "添加测量环境数据";
  708. },
  709. /** 修改按钮操作 */
  710. handleUpdate(row) {
  711. this.reset();
  712. const measId = {
  713. measurementBatchId: row.measurementBatchId,
  714. };
  715. console.log("measId", measId);
  716. const id = row.id || this.ids;
  717. // 通过measId来查找,不具有唯一性吧。一个测量批次可以绑定多个光谱辐射数据吧。。。。
  718. listEngineModel(measId).then((response) => {
  719. console.log("getEngineModelRes", response);
  720. this.engineForm = response.rows[0];
  721. });
  722. listRadiation(measId).then((response) => {
  723. this.radiationForm = response.rows[0];
  724. });
  725. listThermalImagerTesDdata(measId).then((response) => {
  726. this.TIForm = response.rows[0];
  727. });
  728. listTransmissionRate(measId).then((response) => {
  729. this.TransmittanceForm = response.rows[0];
  730. });
  731. getEnvData(id).then((response) => {
  732. this.form = response.data;
  733. this.open = true;
  734. this.title = "修改测量环境数据";
  735. });
  736. },
  737. /** 提交按钮 */
  738. submitForm() {
  739. this.TIForm["measurementBatchId"] = this.form.measurementBatchId;
  740. this.TransmittanceForm["measurementBatchId"] =
  741. this.form.measurementBatchId;
  742. this.radiationForm["measurementBatchId"] = this.form.measurementBatchId;
  743. this.$refs["form"].validate((valid) => {
  744. if (valid) {
  745. if (this.form.id != null) {
  746. updateRadiation(this.radiationForm).then((response) => { });
  747. updateThermalImagerTesDdata(this.TIForm).then((response) => { });
  748. updateTransmissionRate(this.TransmittanceForm).then(
  749. (response) => { }
  750. );
  751. updateEnvData(this.form).then((response) => {
  752. this.$modal.msgSuccess("修改成功");
  753. this.open = false;
  754. this.getList();
  755. });
  756. } else {
  757. addRadiation(this.radiationForm).then((response) => { });
  758. addThermalImagerTesDdata(this.TIForm).then((response) => { });
  759. addTransmissionRate(this.TransmittanceForm).then((response) => { });
  760. addEnvData(this.form).then((response) => {
  761. this.$modal.msgSuccess("新增成功");
  762. this.open = false;
  763. this.getList();
  764. });
  765. }
  766. }
  767. });
  768. },
  769. /** 删除按钮操作 */
  770. handleDelete(row) {
  771. const ids = row.id || this.ids;
  772. this.$modal
  773. .confirm('是否确认删除测量环境数据编号为"' + ids + '"的数据项?')
  774. .then(function () {
  775. return delEnvData(ids);
  776. })
  777. .then(() => {
  778. this.getList();
  779. this.$modal.msgSuccess("删除成功");
  780. })
  781. .catch(() => { });
  782. },
  783. /** 导出按钮操作 */
  784. handleExport() {
  785. this.download(
  786. "meas/envData/export",
  787. {
  788. ...this.queryParams,
  789. },
  790. `envData_${new Date().getTime()}.xlsx`
  791. );
  792. },
  793. // 查看文件可视化
  794. fileView(url1) {
  795. const url = `${process.env.VUE_APP_BASE_API}${url1}`;
  796. this.fetchLogFile(url)
  797. .then((text) => {
  798. this.fileShowData = text.split("\r\n");
  799. this.handleLineChart(this.fileShowData);
  800. this.fileVisible = true;
  801. })
  802. .catch((error) => {
  803. console.error("Failed to fetch the log file:", error);
  804. this.$modal.msgSuccess("文件读取错误");
  805. });
  806. },
  807. fileView2(url1) {
  808. const url = `${process.env.VUE_APP_BASE_API}${url1}`;
  809. this.fetchLogFile(url)
  810. .then((text) => {
  811. this.fileShowData = text.split("\r\n");
  812. this.handlePointChart(this.fileShowData);
  813. this.fileVisible = true;
  814. })
  815. .catch((error) => {
  816. console.error("Failed to fetch the log file:", error);
  817. this.$modal.msgSuccess("文件读取错误");
  818. });
  819. },
  820. // 读取文件内容
  821. async fetchLogFile(url) {
  822. try {
  823. const response = await fetch(url, { method: "GET" });
  824. if (!response.ok) {
  825. throw new Error(`HTTP error! status: ${response.status}`);
  826. }
  827. return await response.text();
  828. } catch (error) {
  829. throw error;
  830. }
  831. },
  832. // echarts数据
  833. handleLineChart(data) {
  834. const data1 = data[0].replace(/\s+/g, " ").split(" ");
  835. // console.log("data1",data1);
  836. // const data1 = ['wavelenth(μm)','R','Cd'];
  837. let wavelenthData = [],
  838. RData = [],
  839. CdData = [];
  840. // if(data1.includes('wavelenth(μm)')){
  841. // wavelenthData
  842. // }
  843. for (let i = 1; i < data.length; i++) {
  844. let row = data[i].split("\t");
  845. wavelenthData.push(parseFloat(row[0]));
  846. RData.push(parseFloat(row[1]));
  847. CdData.push(parseFloat(row[2]));
  848. }
  849. this.chartData = {
  850. tooltip: {
  851. trigger: "axis",
  852. axisPointer: {
  853. type: "cross",
  854. },
  855. },
  856. xAxis: [
  857. {
  858. type: "category",
  859. axisTick: {
  860. alignWithLabel: true,
  861. },
  862. data: wavelenthData,
  863. },
  864. ],
  865. yAxis: [
  866. {
  867. type: "value",
  868. name: "Cd",
  869. position: "right",
  870. alignTicks: true,
  871. axisLine: {
  872. show: true,
  873. },
  874. },
  875. {
  876. type: "value",
  877. name: "R",
  878. position: "left",
  879. alignTicks: true,
  880. axisLine: {
  881. show: true,
  882. },
  883. },
  884. ],
  885. series: [
  886. {
  887. name: "R",
  888. type: "line",
  889. data: RData,
  890. },
  891. {
  892. name: "Cd",
  893. type: "line",
  894. yAxisIndex: 1,
  895. data: CdData,
  896. },
  897. ],
  898. };
  899. },
  900. handlePointChart(data) {
  901. // console.log("data",data);
  902. let data1 = [];
  903. for (let i = 15; i < data.length; i++) {
  904. let row = data[i].split(",");
  905. data1.push([parseFloat(row), parseFloat(row)]);
  906. }
  907. console.log(data1);
  908. this.chartData = {
  909. tooltip: {
  910. trigger: "axis",
  911. axisPointer: {
  912. type: "cross",
  913. },
  914. },
  915. xAxis: [
  916. {
  917. type: "value",
  918. scale: true,
  919. splitLine: {
  920. show: true,
  921. },
  922. },
  923. ],
  924. yAxis: [
  925. {
  926. type: "value",
  927. scale: true,
  928. splitLine: {
  929. show: true,
  930. },
  931. },
  932. ],
  933. series: [
  934. {
  935. symbolSize: 5,
  936. data: data1,
  937. type: "scatter",
  938. },
  939. ],
  940. };
  941. },
  942. },
  943. };
  944. </script>
  945. <style scoped lang="scss">
  946. .box {
  947. border: 1px solid #dcdfe6;
  948. border-radius: 10px;
  949. padding: 20px 15px 0px 15px;
  950. margin-top: 20px;
  951. position: relative;
  952. .title {
  953. padding: 10px;
  954. background-color: white;
  955. position: absolute;
  956. top: -20px;
  957. font-weight: 700;
  958. font-size: 1rem;
  959. }
  960. }
  961. ::v-deep .el-form-item .el-select {
  962. width: 200px;
  963. }
  964. ::v-deep .el-form-item .el-input {
  965. width: 200px;
  966. }
  967. ::v-deep .el-form-item .upload-file {
  968. width: 200px;
  969. }
  970. </style>