windturbine.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. <template>
  2. <div style="width: 100%; height: 100%">
  3. <el-row type="flex" justify="space-between">
  4. <div class="handle-box" style="margin-bottom: 10px">
  5. <el-button size="mini" round class="buttons" @click="handleInsert">
  6. 新增记录
  7. </el-button>
  8. <el-button size="mini" round class="buttons" @click="export2Excel">
  9. 批量导出</el-button
  10. >
  11. <el-button size="mini" round class="buttons" @click="outExe">
  12. 模板下载</el-button
  13. >
  14. <el-upload
  15. style="display: inline; margin-left: 10px"
  16. action="/sharding/warning2/import"
  17. :headers="token"
  18. :show-file-list="false"
  19. :on-success="handleSuccess"
  20. :on-progress="handleProgress"
  21. :on-error="handleError"
  22. >
  23. <el-button
  24. size="mini"
  25. round
  26. class="buttons"
  27. @click="exportShow = true"
  28. >
  29. 批量导入</el-button
  30. >
  31. </el-upload>
  32. </div>
  33. <div style="display: flex; flex-direction: row; margin-bottom: 10px">
  34. <el-select
  35. v-if="!isStation"
  36. v-model="query.stationId"
  37. clearable
  38. size="mini"
  39. style="width: 150px"
  40. placeholder="全部场站"
  41. popper-class="select"
  42. @change="changeStation()"
  43. >
  44. <el-option
  45. v-for="item in stationList"
  46. :key="item.id"
  47. :value="item.id"
  48. :label="item.name"
  49. ></el-option>
  50. </el-select>
  51. <el-select
  52. v-model="query.modelId"
  53. clearable
  54. size="mini"
  55. style="width: 150px"
  56. placeholder="全部机型"
  57. popper-class="select"
  58. >
  59. <el-option
  60. v-for="item in state.modelList"
  61. :key="item"
  62. :value="item"
  63. :label="item"
  64. ></el-option>
  65. </el-select>
  66. <el-input
  67. placeholder="请输入名称"
  68. v-model="query.name"
  69. style="width: 150px; margin-right: 10px"
  70. size="mini"
  71. clearable
  72. ></el-input>
  73. <el-button
  74. icon="el-icon-search"
  75. size="mini"
  76. round
  77. class="buttons"
  78. @click="getData"
  79. >搜索</el-button
  80. >
  81. </div>
  82. </el-row>
  83. <div class="wind-table">
  84. <el-table
  85. :data="state.tableData"
  86. size="mini"
  87. style="width: 100%"
  88. stripe
  89. height="calc(100% - 43px)"
  90. >
  91. <el-table-column label="序列号" align="center" prop="id" />
  92. <el-table-column label="统一编码" align="center" prop="uniformCode">
  93. <template #default="scope">{{
  94. // ednaValueConvert(scope.row.ednaValue)
  95. scope.row.uniformCode
  96. }}</template>
  97. </el-table-column>
  98. <el-table-column
  99. label="描述"
  100. align="left"
  101. prop="description"
  102. width="180"
  103. />
  104. <el-table-column
  105. label="停机类型"
  106. align="center"
  107. prop="characteristic"
  108. />
  109. <el-table-column label="风机型号" align="center" prop="modelId" />
  110. <el-table-column label="报警类型" align="center" prop="alarmTypeName" />
  111. <el-table-column label="故障编码" align="center" prop="nemCode" />
  112. <el-table-column label="报警级别" align="center">
  113. <template #default="scope">{{
  114. levelIdConvert(scope.row.rank)
  115. }}</template>
  116. </el-table-column>
  117. <el-table-column label="报警分类" align="center" min-width="50">
  118. <template #default="scope">{{
  119. warningClassIfyIdConvert(scope.row.deviceType)
  120. }}</template>
  121. </el-table-column>
  122. <el-table-column label="是否可以复位" align="center" min-width="50">
  123. <template #default="scope">{{
  124. scope.row.resetTable ? "是" : "否"
  125. }}</template>
  126. </el-table-column>
  127. <el-table-column label="是否启用" align="center" min-width="50">
  128. <template #default="scope">{{
  129. scope.row.enabled == 1 ? "是" : "否"
  130. }}</template>
  131. </el-table-column>
  132. <el-table-column
  133. label="关联部件"
  134. align="center"
  135. min-width="50"
  136. prop="componentsName"
  137. />
  138. <el-table-column label="操作" align="center" width="100">
  139. <template #default="scope">
  140. <el-button
  141. type="text"
  142. style="color: #05bb4c"
  143. icon="el-icon-lx-edit"
  144. @click="handleEditClick(scope.row)"
  145. >
  146. 编辑</el-button
  147. >
  148. </template>
  149. </el-table-column>
  150. </el-table>
  151. <div class="pagination">
  152. <el-pagination
  153. layout="total, sizes, prev, pager, next"
  154. :page-sizes="[19, 50, 100, 200, 500]"
  155. @size-change="
  156. (value) => {
  157. query.pageSize = value;
  158. query.pageNum = 1;
  159. getData();
  160. }
  161. "
  162. :current-page="query.pageNum"
  163. :page-size="query.pageSize"
  164. :total="total"
  165. @current-change="handlePageChange"
  166. ></el-pagination>
  167. </div>
  168. </div>
  169. <windturbinecomponents
  170. @close="dialogclose"
  171. :isVisible="state.visible"
  172. :form="state.form"
  173. />
  174. </div>
  175. </template>
  176. <script setup>
  177. import {
  178. windturbinebj_fetchTableData,
  179. getWtModel,
  180. getWpList,
  181. } from "@/api/zhbj/index.js";
  182. import { outExportExcel } from "@/tools/excel/exportExcel.js"; //引入文件
  183. import { ref, onMounted, provide, computed, reactive, watch } from "vue";
  184. import { useStore } from "vuex";
  185. import { ElMessageBox, ElMessage } from "element-plus";
  186. import windturbinecomponents from "./windturbine_components.vue";
  187. const token = { token: sessionStorage.getItem("token") };
  188. const store = useStore();
  189. const stationList = ref([]);
  190. const getStationList = async () => {
  191. const { data } = await getWpList("windturbine");
  192. stationList.value = data || [];
  193. };
  194. const isStation = computed(() => stationList.value.length);
  195. const state = reactive({
  196. tableData: [],
  197. modelList: [],
  198. visible: false,
  199. form: {},
  200. });
  201. const query = reactive({
  202. pageNum: 1,
  203. pageSize: 19,
  204. stationId: "",
  205. modelId: "",
  206. name: "",
  207. });
  208. let total = ref(0);
  209. onMounted(() => {
  210. getStationList();
  211. getData();
  212. getequipmentmodel_list();
  213. });
  214. const dialogclose = () => {
  215. state.visible = false;
  216. getData();
  217. };
  218. const getData = async () => {
  219. const { data } = await windturbinebj_fetchTableData(query);
  220. data.records.forEach((ele) => {
  221. ele.alarmTypeName = warningClassIfyIdConvert(ele.alarmType);
  222. });
  223. state.tableData = data.records;
  224. total.value = data.total;
  225. };
  226. const handleInsert = () => {
  227. state.visible = true;
  228. };
  229. const handleEditClick = (row) => {
  230. console.warn(row);
  231. let obj = Object.assign({}, row);
  232. state.form = obj;
  233. state.visible = true;
  234. };
  235. //changeStation
  236. const changeStation = async () => {
  237. query.modelId = "";
  238. await getequipmentmodel_list();
  239. };
  240. // 机型
  241. const getequipmentmodel_list = async () => {
  242. const { data } = await getWtModel(query.stationId);
  243. state.modelList = data || [];
  244. };
  245. // 分页导航
  246. const handlePageChange = (val) => {
  247. query.pagenum = val;
  248. getData();
  249. };
  250. const tableHeader = [
  251. "id",
  252. "报警级别(ZC_BJ:运转正常;YJ_BJ:运转状态超出标准范围;GZ_BJ:非正常停止运转;WH_BJ:停机维护;XD_BJ:限电/计划停机)",
  253. "制造商(HFYG_CS:合肥阳光电源有限公司;AMS_CS:艾默生;NRJD_CS:国电南瑞吉电新能源;MGSK_CS:美国赛康;LHDL_CS:联合动力;SYHC_CS:沈阳华创)",
  254. "名称",
  255. "上一级节点",
  256. "是否有子节点",
  257. "序列号",
  258. "类别 :正常停机,正常启动,快速停机,紧急停机",
  259. "风机型号",
  260. "全部默认为1",
  261. "统一编码",
  262. "是否展示(0:是;1:否)",
  263. "报警分类(bj:变桨;bpq:变频器;clx:齿轮箱;fdj:发电机;hh:滑环;jcjr:机舱加热;lq:冷却;ph:偏航;rh:润滑;yy:液压;zz:主轴;other:其它;kz:控制;yl:叶轮;jc:机舱;xb:箱变;dw:电网;td:塔底;fsy:风速仪)",
  264. "消缺规定时间",
  265. "是否可以复位(0:是;1:否)",
  266. "报警类型编号",
  267. "故障编码",
  268. "关联部件",
  269. ];
  270. const tableKey = [
  271. "id",
  272. "levelId",
  273. "manufacturerCode",
  274. "chineseText",
  275. "parentId",
  276. "isleaf",
  277. "sequenceNumber",
  278. "characteristic",
  279. "modelId",
  280. "codeName",
  281. "ednaValue",
  282. "display",
  283. "warningClassIfyId",
  284. "standardTime",
  285. "isreset",
  286. "warningTypeId",
  287. "faultCode",
  288. "relatedParts",
  289. ];
  290. // 批量导出
  291. const export2Excel = async () => {
  292. let { name, stationId, modelId } = query;
  293. const res = await windturbinebj_fetchTableData({
  294. pageNum: 1,
  295. pageSize: 999999,
  296. name,
  297. stationId,
  298. modelId,
  299. });
  300. ElMessage.success(`导出成功!`);
  301. outExportExcel(tableHeader, tableKey, res.records, "风机报警配置导出excel");
  302. };
  303. // 模板下载
  304. const outExe = () => {
  305. const data = [];
  306. ElMessage.success(`导出成功!`);
  307. outExportExcel(tableHeader, tableKey, data, "风机报警模板");
  308. };
  309. // 批量导入
  310. const handleSuccess = (response, file, fileList) => {
  311. ElMessage.success("导入成功!");
  312. getData();
  313. };
  314. const handleProgress = (response, file, fileList) => {};
  315. const handleError = (response, file, fileList) => {
  316. ElMessage.success("导入失败!");
  317. };
  318. // 报警级别
  319. const levelIdConvert = (val) => {
  320. switch (val) {
  321. case 1:
  322. return "低级";
  323. case 2:
  324. return "低中级";
  325. case 3:
  326. return "中级";
  327. case 4:
  328. return "中高级";
  329. case 5:
  330. return "限电/高级";
  331. default:
  332. return "";
  333. }
  334. };
  335. // 报警分类
  336. const warningClassIfyIdConvert = (val) => {
  337. switch (val) {
  338. case "station":
  339. return "场站";
  340. case "windturbine":
  341. return "风机";
  342. case "booststation":
  343. return "升压站";
  344. default:
  345. return "";
  346. }
  347. };
  348. // 统一编码
  349. const ednaValueConvert = (val) => {
  350. if (val === 0) {
  351. return "";
  352. } else if (val < 100 && val > 0) {
  353. return "DI0" + val;
  354. } else if (val >= 100) {
  355. return "DI" + val;
  356. }
  357. };
  358. </script>
  359. <style scoped lang="less">
  360. .wind-table {
  361. height: calc(100% - 40px);
  362. }
  363. .buttons {
  364. background-color: rgba(5, 187, 76, 0.2);
  365. border: 1px solid #3b6c53;
  366. color: #b3b3b3;
  367. font-size: 14px;
  368. &:hover {
  369. background-color: rgba(5, 187, 76, 0.5);
  370. color: #ffffff;
  371. }
  372. }
  373. .el-select ::v-deep {
  374. margin-right: 10px;
  375. }
  376. .el-button + .el-button {
  377. margin-left: 10px;
  378. }
  379. .pagination {
  380. padding-top: 10px;
  381. }
  382. </style>