windturbine.vue 11 KB

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