windturbine.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. <template>
  2. <el-row type="flex" justify="space-between">
  3. <div class="handle-box" style="margin-bottom: 10px">
  4. <el-button
  5. type="primary"
  6. icon="el-icon-lx-add"
  7. class="handle-edit mr10"
  8. @click="handleInsert"
  9. >
  10. 新增记录
  11. </el-button>
  12. <el-button
  13. type="primary"
  14. icon="el-icon-lx-down"
  15. class="handle-edit mr10"
  16. @click="export2Excel"
  17. >
  18. 批量导出</el-button
  19. >
  20. <el-button
  21. type="primary"
  22. icon="el-icon-lx-down"
  23. class="handle-edit mr10"
  24. @click="outExe"
  25. >
  26. 模板下载</el-button
  27. >
  28. <el-upload
  29. class="handle-edit mr10"
  30. style="display: inline"
  31. action="/sharding/warning2/import"
  32. :headers="token"
  33. :show-file-list="false"
  34. :on-success="handleSuccess"
  35. :on-progress="handleProgress"
  36. :on-error="handleError"
  37. >
  38. <el-button
  39. type="primary"
  40. icon="el-icon-lx-top"
  41. @click="exportShow = true"
  42. >
  43. 批量导入</el-button
  44. >
  45. </el-upload>
  46. </div>
  47. <div style="display: flex; flex-direction: row; margin-bottom: 10px">
  48. <el-select
  49. v-if="!isStation"
  50. v-model="query.stationId"
  51. clearable
  52. class="mr10"
  53. style="width: 150px"
  54. placeholder="全部场站"
  55. popper-class="select"
  56. @change="changeStation()"
  57. >
  58. <el-option
  59. v-for="item in stationList"
  60. :key="item.id"
  61. :value="item.id"
  62. :label="item.name"
  63. ></el-option>
  64. </el-select>
  65. <el-select
  66. v-model="query.modelId"
  67. clearable
  68. class="mr10"
  69. style="width: 150px"
  70. placeholder="全部机型"
  71. popper-class="select"
  72. >
  73. <el-option
  74. v-for="item in state.modelList"
  75. :key="item"
  76. :value="item"
  77. :label="item"
  78. ></el-option>
  79. </el-select>
  80. <el-input
  81. placeholder="请输入名称"
  82. v-model="query.name"
  83. style="width: 150px"
  84. class="mr10"
  85. clearable
  86. ></el-input>
  87. <el-button icon="el-icon-search" type="primary" @click="getData"
  88. >搜索</el-button
  89. >
  90. </div>
  91. </el-row>
  92. <el-table :data="state.tableData" :highlight-current-row="true" border>
  93. <el-table-column label="序列号" align="center" prop="id" />
  94. <el-table-column label="统一编码" align="center" prop="uniformCode">
  95. <template #default="scope">{{
  96. // ednaValueConvert(scope.row.ednaValue)
  97. scope.row.uniformCode
  98. }}</template>
  99. </el-table-column>
  100. <el-table-column label="名称" align="left" prop="chineseText" width="180" />
  101. <el-table-column label="停机类型" align="center" prop="characteristic" />
  102. <el-table-column label="风机型号" align="center" prop="modelId" />
  103. <el-table-column label="报警类型" align="center" prop="warningTypeId" />
  104. <el-table-column label="故障编码" align="center" prop="faultCode" />
  105. <el-table-column label="报警级别" align="center" prop="levelId">
  106. <template #default="scope">{{
  107. levelIdConvert(scope.row.levelId)
  108. }}</template>
  109. </el-table-column>
  110. <el-table-column
  111. label="报警分类"
  112. align="center"
  113. prop="warningClassIfyId"
  114. min-width="50"
  115. >
  116. <template #default="scope">{{
  117. warningClassIfyIdConvert(scope.row.warningClassIfyId)
  118. }}</template>
  119. </el-table-column>
  120. <el-table-column
  121. label="是否可以复位"
  122. align="center"
  123. prop="isreset"
  124. min-width="50"
  125. >
  126. <template #default="scope">{{
  127. isresetConvert(scope.row.isreset)
  128. }}</template>
  129. </el-table-column>
  130. <el-table-column
  131. label="是否启用"
  132. align="center"
  133. prop="display"
  134. min-width="50"
  135. >
  136. <template #default="scope">{{
  137. scope.row.enabled == 1 ? "是" : "否"
  138. }}</template>
  139. </el-table-column>
  140. <el-table-column
  141. label="关联部件"
  142. align="center"
  143. prop="relatedParts"
  144. min-width="50"
  145. >
  146. <template #default="scope">
  147. <span>{{ relatePartConvert(scope.row.relatedParts) }}</span>
  148. </template>
  149. </el-table-column>
  150. <el-table-column label="操作" align="center" width="100">
  151. <template #default="scope">
  152. <el-button
  153. type="primary"
  154. plain
  155. round
  156. size="mini"
  157. icon="el-icon-lx-edit"
  158. @click="handleEditClick(scope.row)"
  159. >
  160. 编辑</el-button
  161. >
  162. </template>
  163. </el-table-column>
  164. </el-table>
  165. <div class="pagination">
  166. <el-pagination
  167. background
  168. layout="total, prev, pager, next"
  169. hide-on-single-page
  170. :current-page="query.pagenum"
  171. :page-size="query.pagesize"
  172. :total="total"
  173. @current-change="handlePageChange"
  174. ></el-pagination>
  175. </div>
  176. <windturbinecomponents
  177. @close="dialogclose"
  178. :isVisible="state.visible"
  179. :form="state.form"
  180. />
  181. </template>
  182. <script setup>
  183. import {
  184. windturbinebj_fetchTableData,
  185. getWtModel,
  186. getWpList,
  187. } from "/@/api/api.js";
  188. import { outExportExcel } from "/@/utils/exportExcel"; //引入文件
  189. import { ref, onMounted, provide, computed, reactive, watch } from "vue";
  190. import { useStore } from "vuex";
  191. import { ElMessageBox, ElMessage } from "element-plus";
  192. import windturbinecomponents from "./windturbine_components.vue";
  193. const token = { token: sessionStorage.getItem("token") };
  194. const store = useStore();
  195. const stationList = ref([]);
  196. const getStationList = async () => {
  197. const { data } = await getWpList("windturbine");
  198. stationList.value = data || [];
  199. };
  200. const isStation = computed(() => stationList.length);
  201. const state = reactive({
  202. tableData: [],
  203. modelList: [],
  204. visible: false,
  205. form: {},
  206. });
  207. const query = reactive({
  208. pagenum: 1,
  209. pagesize: 10,
  210. stationId: "",
  211. modelId: "",
  212. name: "",
  213. });
  214. let total = ref(0);
  215. onMounted(() => {
  216. getStationList();
  217. getData();
  218. getequipmentmodel_list();
  219. });
  220. const dialogclose = () => {
  221. state.visible = false;
  222. getData();
  223. };
  224. const getData = async () => {
  225. const { data } = await windturbinebj_fetchTableData(query);
  226. state.tableData = data.records;
  227. total.value = data.total;
  228. };
  229. const handleInsert = () => {
  230. state.visible = true;
  231. };
  232. const handleEditClick = (row) => {
  233. console.warn(row);
  234. let obj = Object.assign({}, row);
  235. state.form = obj;
  236. state.visible = true;
  237. };
  238. //changeStation
  239. const changeStation = async () => {
  240. query.modelId = "";
  241. await getequipmentmodel_list();
  242. };
  243. // 机型
  244. const getequipmentmodel_list = async () => {
  245. const { data } = await getWtModel(query.stationId);
  246. state.modelList = data || [];
  247. };
  248. // 分页导航
  249. const handlePageChange = (val) => {
  250. query.pagenum = val;
  251. getData();
  252. };
  253. const tableHeader = [
  254. "id",
  255. "报警级别(ZC_BJ:运转正常;YJ_BJ:运转状态超出标准范围;GZ_BJ:非正常停止运转;WH_BJ:停机维护;XD_BJ:限电/计划停机)",
  256. "制造商(HFYG_CS:合肥阳光电源有限公司;AMS_CS:艾默生;NRJD_CS:国电南瑞吉电新能源;MGSK_CS:美国赛康;LHDL_CS:联合动力;SYHC_CS:沈阳华创)",
  257. "名称",
  258. "上一级节点",
  259. "是否有子节点",
  260. "序列号",
  261. "类别 :正常停机,正常启动,快速停机,紧急停机",
  262. "风机型号",
  263. "全部默认为1",
  264. "统一编码",
  265. "是否展示(0:是;1:否)",
  266. "报警分类(bj:变桨;bpq:变频器;clx:齿轮箱;fdj:发电机;hh:滑环;jcjr:机舱加热;lq:冷却;ph:偏航;rh:润滑;yy:液压;zz:主轴;other:其它;kz:控制;yl:叶轮;jc:机舱;xb:箱变;dw:电网;td:塔底;fsy:风速仪)",
  267. "消缺规定时间",
  268. "是否可以复位(0:是;1:否)",
  269. "报警类型编号",
  270. "故障编码",
  271. "关联部件",
  272. ];
  273. const tableKey = [
  274. "id",
  275. "levelId",
  276. "manufacturerCode",
  277. "chineseText",
  278. "parentId",
  279. "isleaf",
  280. "sequenceNumber",
  281. "characteristic",
  282. "modelId",
  283. "codeName",
  284. "ednaValue",
  285. "display",
  286. "warningClassIfyId",
  287. "standardTime",
  288. "isreset",
  289. "warningTypeId",
  290. "faultCode",
  291. "relatedParts",
  292. ];
  293. // 批量导出
  294. const export2Excel = async () => {
  295. let { name, stationId, modelId } = query;
  296. const res = await windturbinebj_fetchTableData({
  297. pagenum: 1,
  298. pagesize: 999999,
  299. name,
  300. stationId,
  301. modelId,
  302. });
  303. ElMessage.success(`导出成功!`);
  304. outExportExcel(tableHeader, tableKey, res.records, "风机报警配置导出excel");
  305. };
  306. // 模板下载
  307. const outExe = () => {
  308. const data = [];
  309. ElMessage.success(`导出成功!`);
  310. outExportExcel(tableHeader, tableKey, data, "风机报警模板");
  311. };
  312. // 批量导入
  313. const handleSuccess = (response, file, fileList) => {
  314. ElMessage.success("导入成功!");
  315. getData();
  316. };
  317. const handleProgress = (response, file, fileList) => {};
  318. const handleError = (response, file, fileList) => {
  319. ElMessage.success("导入失败!");
  320. };
  321. // 报警级别
  322. const levelIdConvert = (val) => {
  323. switch (val) {
  324. case "ZC_BJ":
  325. return "运转正常";
  326. break;
  327. case "YJ_BJ":
  328. return "运转状态超出标准范围";
  329. break;
  330. case "GZ_BJ":
  331. return "非正常停止运转";
  332. break;
  333. case "WH_BJ":
  334. return "停机维护";
  335. break;
  336. case "XD_BJ":
  337. return "限电/计划停机";
  338. break;
  339. default:
  340. return;
  341. }
  342. };
  343. // 报警分类
  344. const warningClassIfyIdConvert = (val) => {
  345. switch (val) {
  346. case "bj":
  347. return "变桨";
  348. break;
  349. case "bpq":
  350. return "变频器";
  351. break;
  352. case "clx":
  353. return "齿轮箱";
  354. break;
  355. case "fdj":
  356. return "发电机";
  357. break;
  358. case "hh":
  359. return "滑环";
  360. break;
  361. case "jcjr":
  362. return "机舱加热";
  363. break;
  364. case "lq":
  365. return "冷却";
  366. break;
  367. case "ph":
  368. return "偏航";
  369. break;
  370. case "rh":
  371. return "润滑";
  372. break;
  373. case "yy":
  374. return "液压";
  375. break;
  376. case "zz":
  377. return "主轴";
  378. break;
  379. case "other":
  380. return "其它";
  381. break;
  382. case "kz":
  383. return "控制";
  384. break;
  385. case "yl":
  386. return "叶轮";
  387. break;
  388. case "jc":
  389. return "机舱";
  390. break;
  391. case "xb":
  392. return "箱变";
  393. break;
  394. case "dw":
  395. return "电网";
  396. break;
  397. case "td":
  398. return "塔底";
  399. break;
  400. case "fsy":
  401. return "风速仪";
  402. break;
  403. }
  404. };
  405. // 是否可以复位
  406. const isresetConvert = (val) => {
  407. switch (val) {
  408. case 0:
  409. return "是";
  410. break;
  411. case 1:
  412. return "否";
  413. break;
  414. }
  415. };
  416. // 统一编码
  417. const ednaValueConvert = (val) => {
  418. if (val === 0) {
  419. return "";
  420. } else if (val < 100 && val > 0) {
  421. return "DI0" + val;
  422. } else if (val >= 100) {
  423. return "DI" + val;
  424. }
  425. };
  426. // 关联部件
  427. const relatePartConvert = (val) => {
  428. switch (val) {
  429. case "YP":
  430. return "叶片";
  431. break;
  432. case "LG":
  433. return "轮毂";
  434. break;
  435. case "TZ":
  436. return "塔架";
  437. break;
  438. case "JC":
  439. return "机舱";
  440. break;
  441. case "KZXT":
  442. return "控制系统";
  443. break;
  444. case "BJXT":
  445. return "变桨系统";
  446. break;
  447. case "PHXT":
  448. return "偏航系统";
  449. break;
  450. case "CLX":
  451. return "齿轮箱";
  452. break;
  453. case "FDJ":
  454. return "发电机";
  455. return;
  456. case "BPQ":
  457. return "变频器";
  458. return;
  459. case "YYXT":
  460. return "液压系统";
  461. break;
  462. case "FZXT":
  463. return "辅助系统";
  464. break;
  465. case "CFXT":
  466. return "测风系统";
  467. break;
  468. case "DWXT":
  469. return "电网系统";
  470. break;
  471. case "TDG":
  472. return "塔底柜";
  473. break;
  474. case "CDL":
  475. return "传动链";
  476. break;
  477. case "QT":
  478. return "其他";
  479. break;
  480. default:
  481. break;
  482. }
  483. };
  484. </script>
  485. <style scoped>
  486. .mr10 {
  487. margin-right: 10px;
  488. }
  489. .el-button + .el-button {
  490. margin-left: 10px;
  491. }
  492. </style>