index.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  1. <template>
  2. <div>
  3. <alarm @eq_type="eqSelect"></alarm>
  4. <div class="app-container">
  5. <div class="filter-container" style="padding-bottom: 0px">
  6. <div class="search-box-area" id="searchBox">
  7. <div class="search-item">
  8. <el-select
  9. class="filter-item form-search-input fl"
  10. v-model="queryParam.equipment_type"
  11. placeholder="请选择设备类别"
  12. clearable
  13. @change="handleChange"
  14. >
  15. <el-option
  16. v-for="item in equ_types"
  17. :key="item.value"
  18. :label="item.label"
  19. :value="item.value">
  20. </el-option>
  21. </el-select>
  22. </div>
  23. <div class="search-item">
  24. <el-input
  25. v-model="queryParam.material_number"
  26. placeholder="请输入物料号"
  27. clearable
  28. class="filter-item form-search-input fl"
  29. @keyup.enter.native="handleSearch"
  30. />
  31. </div>
  32. <div class="search-item">
  33. <el-input
  34. v-model="queryParam.name"
  35. placeholder="请输入设备名称"
  36. clearable
  37. class="filter-item form-search-input fl"
  38. @keyup.enter.native="handleSearch"
  39. />
  40. </div>
  41. <div class="search-item">
  42. <el-input
  43. v-model="queryParam.number"
  44. placeholder="请输入固定资产/类固资产/序列"
  45. clearable
  46. class="filter-item form-search-input fl"
  47. @keyup.enter.native="handleSearch"
  48. />
  49. </div>
  50. </div>
  51. <div class="search-operate-area">
  52. <!-- <el-input v-model="queryParam.code" placeholder="唯一编码" clearable class="filter-item form-search-input fl" /> -->
  53. <el-button
  54. class="filter-item search fl"
  55. icon="el-icon-search"
  56. @click="handleSearch"
  57. >搜索</el-button
  58. >
  59. <el-button
  60. class="filter-item fl"
  61. icon="el-icon-refresh"
  62. @click="handleRefresh"
  63. >重置</el-button
  64. >
  65. <el-button
  66. class="filter-item search fl"
  67. :icon="this.searchDisplay ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"
  68. @click="searchDis"
  69. >{{ word }}</el-button
  70. >
  71. </div>
  72. <div class="list-operate-area">
  73. <!-- <el-button size="mini" class="filter-item search fl" icon="el-icon-plus" @click="handleCreate">添加</el-button> -->
  74. <el-button
  75. class="filter-item search fl"
  76. icon="el-icon-setting"
  77. @click="showColumnOption"
  78. >列设置</el-button
  79. >
  80. <el-button
  81. class="filter-item search fl"
  82. icon="el-icon-refresh-right"
  83. @click="refresh"
  84. >刷新</el-button
  85. >
  86. </div>
  87. </div>
  88. <el-table
  89. :data="data"
  90. v-loading="loading"
  91. ref="multipleTable"
  92. @selection-change="hydraulicSelectMulti"
  93. @sort-change="sortChange"
  94. :dynamicColumnSetting="true"
  95. tooltip-effect="dark"
  96. style="width: 100%"
  97. border
  98. fit
  99. >
  100. <el-table-column
  101. type="selection"
  102. fixed="left"
  103. width="55"
  104. ></el-table-column>
  105. <el-table-column
  106. prop="material_number"
  107. label="物料号"
  108. align="center"
  109. v-if="showColumn.material_number"
  110. width="120"
  111. />
  112. <el-table-column
  113. prop="classification"
  114. label="设备分类"
  115. align="center"
  116. v-if="showColumn.classification"
  117. />
  118. <el-table-column
  119. prop="equ_type_name"
  120. label="设备类别"
  121. align="center"
  122. v-if="showColumn.equ_type_name"
  123. width="120"
  124. />
  125. <el-table-column
  126. prop="name"
  127. label="设备名称"
  128. align="center"
  129. v-if="showColumn.name"
  130. width="120"
  131. />
  132. <el-table-column
  133. prop="equipment_model"
  134. label="设备型号"
  135. align="center"
  136. v-if="showColumn.equipment_model"
  137. />
  138. <el-table-column
  139. prop="issue_unit"
  140. label="发放单位"
  141. align="center"
  142. v-if="showColumn.issue_unit"
  143. />
  144. <el-table-column
  145. prop="fixed_asset_number"
  146. label="固定资产编号"
  147. align="center"
  148. v-if="showColumn.fixed_asset_number"
  149. />
  150. <el-table-column
  151. prop="fixed_asset_number2"
  152. label="类固资产编号"
  153. align="center"
  154. v-if="showColumn.fixed_asset_number"
  155. />
  156. <el-table-column
  157. prop="serial_number"
  158. label="序列号"
  159. align="center"
  160. v-if="showColumn.serial_number"
  161. />
  162. <el-table-column
  163. prop="factory_number"
  164. label="出厂编号"
  165. align="center"
  166. v-if="showColumn.factory_number"
  167. />
  168. <el-table-column
  169. prop="check_last_time"
  170. label="上次校验时间"
  171. align="center"
  172. v-if="showColumn.check_last_time"
  173. width="100"
  174. />
  175. <el-table-column
  176. prop="check_next_time"
  177. label="下次校验时间"
  178. align="center"
  179. width="100"
  180. v-if="showColumn.check_next_time"
  181. />
  182. <el-table-column
  183. prop="check_status1"
  184. label="校验状态"
  185. align="center"
  186. v-if="showColumn.check_status1"
  187. />
  188. <el-table-column
  189. prop="status1"
  190. label="状态"
  191. align="center"
  192. v-if="showColumn.status1"
  193. />
  194. <el-table-column
  195. label="操作"
  196. width="180"
  197. align="center"
  198. fixed="right"
  199. >
  200. <template slot-scope="record">
  201. <el-tooltip
  202. content="修改"
  203. placement="top"
  204. :enterable="false"
  205. >
  206. <el-button
  207. type="primary"
  208. size="mini"
  209. icon="el-icon-edit"
  210. @click="handleUpdate(record.row)"
  211. ></el-button>
  212. </el-tooltip>
  213. <el-tooltip
  214. content="查看"
  215. placement="top"
  216. :enterable="false"
  217. >
  218. <el-button
  219. type="primary"
  220. size="mini"
  221. icon="el-icon-view"
  222. @click="handleDetail(record.row)"
  223. ></el-button>
  224. </el-tooltip>
  225. <el-button type="danger" size="mini" icon="el-icon-delete" @click="handleDelete(record.row.id)" />
  226. </template>
  227. </el-table-column>
  228. </el-table>
  229. <transition name="fade">
  230. <div class="columnOption" v-show="isShowColumn">
  231. <div class="content">
  232. <div class="head">选择显示字段</div>
  233. <div class="body">
  234. <el-checkbox v-model="checkList.depart_name" disabled>所属部门</el-checkbox>
  235. <!-- <el-checkbox v-model="checkList.alarm_state_text" disabled>告警状态</el-checkbox> -->
  236. <el-checkbox v-model="checkList.material_number">物料号</el-checkbox>
  237. <el-checkbox v-model="checkList.classification">设备分类</el-checkbox>
  238. <el-checkbox v-model="checkList.equ_type_name">设备类别</el-checkbox>
  239. <el-checkbox v-model="checkList.name">名称</el-checkbox>
  240. <el-checkbox v-model="checkList.equipment_model">设备型号</el-checkbox>
  241. <el-checkbox v-model="checkList.fixed_asset_number">固定资产编号</el-checkbox>
  242. <el-checkbox v-model="checkList.fixed_asset_number2">类固定资产编号</el-checkbox>
  243. <el-checkbox v-model="checkList.serial_number">序列号</el-checkbox>
  244. <el-checkbox v-model="checkList.factory_number">出厂编号</el-checkbox>
  245. <el-checkbox v-model="checkList.check_last_time">上次校验时间</el-checkbox>
  246. <el-checkbox v-model="checkList.check_next_time">下次校验时间</el-checkbox>
  247. <el-checkbox v-model="checkList.check_status1">校验状态</el-checkbox>
  248. <el-checkbox v-model="checkList.status1">状态</el-checkbox>
  249. </div>
  250. <div class="footer">
  251. <el-button size="small" type="primary" plain @click="saveColumn"
  252. >保存列配置</el-button
  253. >
  254. </div>
  255. </div>
  256. </div>
  257. </transition>
  258. <el-button
  259. type="primary"
  260. icon="el-icon-plus"
  261. :loading="downloadLoading"
  262. style="margin-top: 15px"
  263. @click="handleCreate"
  264. >添加</el-button
  265. >
  266. <el-button
  267. type="danger"
  268. icon="el-icon-delete"
  269. v-if="selectedIds.length > 0"
  270. style="margin-top: 15px"
  271. @click="handleMultiDelete()"
  272. >删除</el-button
  273. >
  274. <el-button
  275. type="warning"
  276. icon="el-icon-download"
  277. :loading="downloadLoading"
  278. style="margin-top: 15px"
  279. @click="exportExcel"
  280. >导出</el-button
  281. >
  282. <el-button
  283. type="success"
  284. icon="el-icon-upload"
  285. :loading="downloadLoading"
  286. style="margin-top: 15px"
  287. @click="importExcel"
  288. >导入</el-button
  289. >
  290. <el-pagination
  291. background
  292. class="pagination-container"
  293. @size-change="handleSizeChange"
  294. @current-change="handleCurrentChange"
  295. :current-page="paginate.current"
  296. :page-sizes="paginate.sizes"
  297. :page-size="paginate.limit"
  298. :layout="paginate.layout"
  299. :total="paginate.total"
  300. />
  301. <form-model
  302. @sendVal="closeDialog"
  303. :formModelVisible="formVisible"
  304. :title="title"
  305. :ref="formName"
  306. />
  307. <detail
  308. :detailVisible="detailVisible"
  309. @sendVal="closeDrawer"
  310. :record="detail"
  311. />
  312. <!-- 导入弹框 -->
  313. <el-dialog
  314. title="导入液压设备"
  315. append-to-body
  316. width="400px"
  317. :visible.sync="uploadDialogVisible"
  318. custom-class="upload-dialog"
  319. >
  320. <el-upload
  321. class="upload-demo"
  322. drag
  323. :action="actionUrl"
  324. :headers="headers"
  325. :before-upload="beforeUpload"
  326. :show-file-list="true"
  327. :on-change="onchange"
  328. :on-remove="onremove"
  329. :on-exceed="onexeced"
  330. :limit="1"
  331. ref="upload"
  332. >
  333. <i class="el-icon-upload"></i>
  334. <div class="el-upload__text">
  335. 将文件拖到此处,或
  336. <em>点击上传</em>
  337. </div>
  338. <div class="el-upload__tip upload-tips" slot="tip">
  339. 只能上传xls/xlsx文件
  340. </div>
  341. </el-upload>
  342. <el-link
  343. type="primary"
  344. href="https://rlfd.oss-cn-hangzhou.aliyuncs.com/smart_tool/import_pump.xls"
  345. style="margin-top: 10px"
  346. >下载模板</el-link
  347. >
  348. <span slot="footer" class="dialog-footer">
  349. <el-button @click="uploadDialogVisible = false">取 消</el-button>
  350. <el-button type="primary" @click="importCards" :loading="loadings">{{
  351. submitText
  352. }}</el-button>
  353. </span>
  354. </el-dialog>
  355. </div>
  356. </div>
  357. </template>
  358. <script>
  359. import rlListOperate from "@/layout/rl-list-operate/rlListOperate";
  360. import { action } from "@/directive/permission/index.js";
  361. import { getToken } from "../../../utils/auth";
  362. import detail from "./detail.vue"
  363. import formModel from './formModel.vue'
  364. import alarm from './alarm.vue'
  365. export default {
  366. name: "hydraulic",
  367. directives: { action },
  368. mixins: [rlListOperate],
  369. components: {
  370. formModel,
  371. detail,
  372. alarm
  373. },
  374. data() {
  375. return {
  376. url: "hydEquipment",
  377. defaultQueryParam:['pid'],
  378. queryParam: {
  379. pid:5,
  380. material_number: "",
  381. name: "",
  382. number: "",
  383. equipment_type:'',
  384. },
  385. deviceTypes:[],
  386. current_type: {
  387. 0: "success",
  388. 1: "danger",
  389. },
  390. formName:'sto_equ',
  391. formVisible:false,
  392. //搜索
  393. searchDisplay: true,
  394. equ_types: [],
  395. //详情
  396. detailVisible:false,
  397. detail:{},
  398. isShowColumn: false,
  399. // 列的配置化对象,存储配置信息
  400. checkList: {},
  401. showColumn: {
  402. material_number: true,
  403. classification: true,
  404. equ_type_name:true,
  405. name:true,
  406. equipment_model: true,
  407. issue_unit: true,
  408. fixed_asset_number:true,
  409. fixed_asset_number2: true,
  410. serial_number: true,
  411. factory_number:true,
  412. check_last_time:true,
  413. check_next_time:true,
  414. check_status1:true,
  415. status1: true,
  416. },
  417. //导入请求url
  418. actionUrl: process.env.VUE_APP_BASE_API + "/upload/file_excel",
  419. headers: { authorization: "Bearer " + getToken() },
  420. excel_url: "", //上传学生Excel返回的url
  421. uploadDialogVisible: false, //下发配置显示与否
  422. selectedDepartId: "",
  423. loadings: false,
  424. submitText: "确 定",
  425. };
  426. },
  427. created() {
  428. this.$http.get("findAllByPid",{ params: {id:5} }).then(resp => {
  429. let data= resp.data;
  430. let ar=[];
  431. data.forEach((item) => {
  432. ar.push({label:item.name,value:item.id})
  433. });
  434. this.equ_types = ar;
  435. });
  436. // // 0-液压泵
  437. // this.$http.get("get_device_mold",{ params: {type:0} }).then(resp => {
  438. // this.deviceTypes = resp.data
  439. // });
  440. },
  441. methods: {
  442. handleChange(val) {
  443. // console.log(val)
  444. this.queryParam.equipment_type= val;
  445. this.handleSearch();
  446. },
  447. //设备类型
  448. eqSelect(val)
  449. {
  450. this.queryParam.equipment_type =val;
  451. this.handleSearch();
  452. },
  453. hydraulicSelectMulti(data) {
  454. this.selectedIds = [];
  455. data.forEach((item) => {
  456. this.selectedIds.push(item.id);
  457. });
  458. },
  459. refresh() {
  460. this.queryParam.page = this.paginate.current;
  461. this.getList();
  462. },
  463. searchDis() {
  464. this.searchDisplay = !this.searchDisplay;
  465. var searchBoxHeght = document.getElementById("searchBox");
  466. if (this.searchDisplay == false) {
  467. searchBoxHeght.style.height = 40 + "px";
  468. } else {
  469. searchBoxHeght.style.height = "auto";
  470. }
  471. },
  472. showColumnOption() {
  473. this.isShowColumn = true;
  474. },
  475. saveColumn() {
  476. localStorage.setItem("hydEquSet", JSON.stringify(this.checkList));
  477. this.isShowColumn = false;
  478. },
  479. handleDetail(row){
  480. this.detailVisible = true,
  481. this.detail = row
  482. },
  483. closeDrawer(){
  484. this.detailVisible = false;
  485. },
  486. changeUsedEvent(row,value){
  487. this.$http.put('hydraulic/' + row.id, { is_used: value }).then(resp => {
  488. if (resp.code === 10000) {
  489. this.$message.success('操作成功')
  490. // row[field] = val
  491. // this.$emit('rowClick', row)
  492. }
  493. })
  494. },
  495. importExcel() {
  496. this.uploadDialogVisible = true;
  497. },
  498. changeCards(v) {
  499. this.selectedDepartId = v[v.length - 1];
  500. },
  501. beforeUpload(file) {
  502. if (!/\.(xlsx|xls|XLSX|XLS)$/.test(file.name)) {
  503. this.$notify.error({
  504. title: "错误",
  505. message: "上传文件只能为excel文件,且为xlsx,xls格式",
  506. });
  507. return false;
  508. }
  509. return true;
  510. },
  511. onremove() {
  512. //移除文件钩子
  513. this.excel_url = "";
  514. },
  515. onexeced(files) {
  516. if (files.length == 1) {
  517. this.$message.error("只能上传一个文件");
  518. }
  519. },
  520. onchange(file, fileList) {
  521. if (file.response) {
  522. this.$message.success(file.response.data.msg);
  523. this.excel_url = file.response.data.excel_url;
  524. } else {
  525. // console.log(file);
  526. }
  527. },
  528. importCards() {
  529. // console.log(this.excel_url);
  530. var url = this.excel_url,
  531. depart_id = this.selectedDepartId;
  532. if (depart_id == "") {
  533. this.$message.error("请选择部门");
  534. return;
  535. }
  536. if (url == "") {
  537. this.$message.error("请上传文件");
  538. return;
  539. }
  540. this.loadings = true;
  541. this.submitText = "导入中";
  542. this.$http
  543. .post("cardDevice/import", { url: url, depart_id: depart_id })
  544. .then((response) => {
  545. if (response.data.error) {
  546. this.$message.error(response.data.msg);
  547. } else {
  548. this.$message.success(response.data);
  549. }
  550. this.excel_url = "";
  551. this.selectedDepartId = "";
  552. this.$refs.upload.clearFiles();
  553. this.loadings = false;
  554. this.submitText = "确定";
  555. this.uploadDialogVisible = false;
  556. this.getList();
  557. });
  558. },
  559. },
  560. watch: {
  561. // 监听复选框配置列所有的变化
  562. checkList: {
  563. handler: function (newnew, oldold) {
  564. // console.log(newnew);
  565. this.showColumn = newnew;
  566. // 这里需要让表格重新绘制一下,否则会产生固定列错位的情况
  567. this.$nextTick(() => {
  568. this.$refs.multipleTable.doLayout();
  569. });
  570. },
  571. deep: true,
  572. immediate: true,
  573. },
  574. },
  575. computed: {
  576. word: function () {
  577. if (this.searchDisplay == false) {
  578. //对文字进行处理
  579. return "展开";
  580. } else {
  581. return "收起";
  582. }
  583. },
  584. },
  585. mounted() {
  586. // this.getIsUseVoice();
  587. this.$nextTick(function () {
  588. this.searchDis();
  589. });
  590. // 发请求得到checkListInitData的列的名字
  591. if (localStorage.getItem("storageEquSet")) {
  592. this.checkList = JSON.parse(localStorage.getItem("storageEquSet"));
  593. } else {
  594. this.checkList = {
  595. material_number: true,
  596. classification: true,
  597. equ_type_name:true,
  598. name:true,
  599. equipment_model: true,
  600. issue_unit: true,
  601. fixed_asset_number:true,
  602. fixed_asset_number2: true,
  603. serial_number: true,
  604. factory_number:true,
  605. check_last_time:true,
  606. check_next_time:true,
  607. check_status1:true,
  608. status1: true,
  609. };
  610. }
  611. },
  612. };
  613. </script>
  614. <style lang="scss" scoped>
  615. @import "@/views/device/hyd_equipment/index.scss";
  616. @import "@/views/device/hyd_equipment/alarm.scss";
  617. </style>