index.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685
  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. <hydraulicDetail
  313. :detailVisible="hydraulicDetailVisible"
  314. @sendVal="closeDrawer"
  315. :record="hydraulicDetail"
  316. />
  317. <wrenchDetail
  318. :detailVisible="wrenchDetailVisible"
  319. @sendVal="closeDrawer"
  320. :record="wrenchDetail"
  321. />
  322. <!-- 导入弹框 -->
  323. <el-dialog
  324. title="导入液压设备"
  325. append-to-body
  326. width="400px"
  327. :visible.sync="uploadDialogVisible"
  328. custom-class="upload-dialog"
  329. >
  330. <!-- <el-cascader
  331. v-model="selectedDepartId"
  332. class="filter-item form-search-input fl"
  333. :options="departments"
  334. :props="{ checkStrictly: true, label: 'department_name', value: 'id' }"
  335. style="margin-bottom: 10px"
  336. @change="changeCards"
  337. ></el-cascader> -->
  338. <el-upload
  339. class="upload-demo"
  340. drag
  341. :action="actionUrl"
  342. :headers="headers"
  343. :before-upload="beforeUpload"
  344. :show-file-list="true"
  345. :on-change="onchange"
  346. :on-remove="onremove"
  347. :on-exceed="onexeced"
  348. :limit="1"
  349. ref="upload"
  350. >
  351. <i class="el-icon-upload"></i>
  352. <div class="el-upload__text">
  353. 将文件拖到此处,或
  354. <em>点击上传</em>
  355. </div>
  356. <div class="el-upload__tip upload-tips" slot="tip">
  357. 只能上传xls/xlsx文件
  358. </div>
  359. </el-upload>
  360. <el-link
  361. type="primary"
  362. href="https://rlfd.oss-cn-hangzhou.aliyuncs.com/smart_tool/import_pump.xls"
  363. style="margin-top: 10px"
  364. >下载模板</el-link
  365. >
  366. <span slot="footer" class="dialog-footer">
  367. <el-button @click="uploadDialogVisible = false">取 消</el-button>
  368. <el-button type="primary" @click="importCards" :loading="loadings">{{
  369. submitText
  370. }}</el-button>
  371. </span>
  372. </el-dialog>
  373. </div>
  374. </div>
  375. </template>
  376. <script>
  377. import rlListOperate from "@/layout/rl-list-operate/rlListOperate";
  378. import { action } from "@/directive/permission/index.js";
  379. import { getToken } from "../../../utils/auth";
  380. import detail from "./detail.vue"
  381. import wrenchDetail from "./wrench_detail.vue"
  382. import hydraulicDetail from "./hydraulic_detail.vue"
  383. import formModel from './formModel.vue'
  384. import alarm from './alarm.vue'
  385. export default {
  386. name: "hydraulic",
  387. directives: { action },
  388. mixins: [rlListOperate],
  389. components: {
  390. formModel,
  391. detail,
  392. wrenchDetail,
  393. hydraulicDetail,
  394. alarm
  395. },
  396. data() {
  397. return {
  398. url: "hydEquipment",
  399. queryParam: {
  400. pid:1,
  401. material_number: "",
  402. name: "",
  403. number: "",
  404. equipment_type:'',
  405. },
  406. deviceTypes:[],
  407. current_type: {
  408. 0: "success",
  409. 1: "danger",
  410. },
  411. formName:'hydraulic',
  412. formVisible:false,
  413. //搜索
  414. searchDisplay: true,
  415. equ_types: [],
  416. //详情
  417. detailVisible:false,
  418. detail:{},
  419. //泵详情
  420. hydraulicDetailVisible:false,
  421. hydraulicDetail:{},
  422. //扳手详情
  423. wrenchDetailVisible:false,
  424. wrenchDetail:{},
  425. isShowColumn: false,
  426. // 列的配置化对象,存储配置信息
  427. checkList: {},
  428. showColumn: {
  429. material_number: true,
  430. classification: true,
  431. equ_type_name:true,
  432. name:true,
  433. equipment_model: true,
  434. issue_unit: true,
  435. fixed_asset_number:true,
  436. fixed_asset_number2: true,
  437. serial_number: true,
  438. factory_number:true,
  439. check_last_time:true,
  440. check_next_time:true,
  441. check_status1:true,
  442. status1: true,
  443. },
  444. //导入请求url
  445. actionUrl: process.env.VUE_APP_BASE_API + "/upload/file_excel",
  446. headers: { authorization: "Bearer " + getToken() },
  447. excel_url: "", //上传学生Excel返回的url
  448. uploadDialogVisible: false, //下发配置显示与否
  449. selectedDepartId: "",
  450. loadings: false,
  451. submitText: "确 定",
  452. };
  453. },
  454. created() {
  455. this.$http.get("findAllByPid",{ params: {id:1} }).then(resp => {
  456. let data= resp.data;
  457. let ar=[];
  458. data.forEach((item) => {
  459. ar.push({label:item.name,value:item.id})
  460. });
  461. this.equ_types = ar;
  462. });
  463. // // 0-液压泵
  464. // this.$http.get("get_device_mold",{ params: {type:0} }).then(resp => {
  465. // this.deviceTypes = resp.data
  466. // });
  467. },
  468. methods: {
  469. handleChange(val) {
  470. // console.log(val)
  471. this.queryParam.equipment_type= val;
  472. this.handleSearch();
  473. },
  474. //设备类型
  475. eqSelect(val)
  476. {
  477. this.queryParam.equipment_type =val;
  478. this.handleSearch();
  479. },
  480. hydraulicSelectMulti(data) {
  481. this.selectedIds = [];
  482. data.forEach((item) => {
  483. this.selectedIds.push(item.id);
  484. });
  485. },
  486. refresh() {
  487. this.queryParam.page = this.paginate.current;
  488. this.getList();
  489. },
  490. searchDis() {
  491. this.searchDisplay = !this.searchDisplay;
  492. var searchBoxHeght = document.getElementById("searchBox");
  493. if (this.searchDisplay == false) {
  494. searchBoxHeght.style.height = 40 + "px";
  495. } else {
  496. searchBoxHeght.style.height = "auto";
  497. }
  498. },
  499. showColumnOption() {
  500. this.isShowColumn = true;
  501. },
  502. saveColumn() {
  503. localStorage.setItem("hydEquSet", JSON.stringify(this.checkList));
  504. this.isShowColumn = false;
  505. },
  506. handleDetail(row){
  507. if(row.equipment_type==2)
  508. {
  509. this.hydraulicDetailVisible=true;
  510. this.hydraulicDetail=row;
  511. }
  512. if(row.equipment_type==3||row.equipment_type==4)
  513. {
  514. this.wrenchDetailVisible=true;
  515. this.wrenchDetail=row;
  516. }
  517. else
  518. {
  519. this.detailVisible = true,
  520. this.detail = row
  521. }
  522. },
  523. closeDrawer(){
  524. this.detailVisible = false;
  525. this.hydraulicDetailVisible=false;
  526. this.wrenchDetailVisible=false;
  527. },
  528. changeUsedEvent(row,value){
  529. this.$http.put('hydraulic/' + row.id, { is_used: value }).then(resp => {
  530. if (resp.code === 10000) {
  531. this.$message.success('操作成功')
  532. // row[field] = val
  533. // this.$emit('rowClick', row)
  534. }
  535. })
  536. },
  537. importExcel() {
  538. this.uploadDialogVisible = true;
  539. },
  540. changeCards(v) {
  541. this.selectedDepartId = v[v.length - 1];
  542. },
  543. beforeUpload(file) {
  544. if (!/\.(xlsx|xls|XLSX|XLS)$/.test(file.name)) {
  545. this.$notify.error({
  546. title: "错误",
  547. message: "上传文件只能为excel文件,且为xlsx,xls格式",
  548. });
  549. return false;
  550. }
  551. return true;
  552. },
  553. onremove() {
  554. //移除文件钩子
  555. this.excel_url = "";
  556. },
  557. onexeced(files) {
  558. if (files.length == 1) {
  559. this.$message.error("只能上传一个文件");
  560. }
  561. },
  562. onchange(file, fileList) {
  563. if (file.response) {
  564. this.$message.success(file.response.data.msg);
  565. this.excel_url = file.response.data.excel_url;
  566. } else {
  567. // console.log(file);
  568. }
  569. },
  570. importCards() {
  571. // console.log(this.excel_url);
  572. var url = this.excel_url,
  573. depart_id = this.selectedDepartId;
  574. if (depart_id == "") {
  575. this.$message.error("请选择部门");
  576. return;
  577. }
  578. if (url == "") {
  579. this.$message.error("请上传文件");
  580. return;
  581. }
  582. this.loadings = true;
  583. this.submitText = "导入中";
  584. this.$http
  585. .post("cardDevice/import", { url: url, depart_id: depart_id })
  586. .then((response) => {
  587. if (response.data.error) {
  588. this.$message.error(response.data.msg);
  589. } else {
  590. this.$message.success(response.data);
  591. }
  592. this.excel_url = "";
  593. this.selectedDepartId = "";
  594. this.$refs.upload.clearFiles();
  595. this.loadings = false;
  596. this.submitText = "确定";
  597. this.uploadDialogVisible = false;
  598. this.getList();
  599. });
  600. },
  601. },
  602. watch: {
  603. // 监听复选框配置列所有的变化
  604. checkList: {
  605. handler: function (newnew, oldold) {
  606. // console.log(newnew);
  607. this.showColumn = newnew;
  608. // 这里需要让表格重新绘制一下,否则会产生固定列错位的情况
  609. this.$nextTick(() => {
  610. this.$refs.multipleTable.doLayout();
  611. });
  612. },
  613. deep: true,
  614. immediate: true,
  615. },
  616. },
  617. computed: {
  618. word: function () {
  619. if (this.searchDisplay == false) {
  620. //对文字进行处理
  621. return "展开";
  622. } else {
  623. return "收起";
  624. }
  625. },
  626. },
  627. mounted() {
  628. // this.getIsUseVoice();
  629. this.$nextTick(function () {
  630. this.searchDis();
  631. });
  632. // 发请求得到checkListInitData的列的名字
  633. if (localStorage.getItem("hydEquSet")) {
  634. this.checkList = JSON.parse(localStorage.getItem("hydEquSet"));
  635. } else {
  636. this.checkList = {
  637. material_number: true,
  638. classification: true,
  639. equ_type_name:true,
  640. name:true,
  641. equipment_model: true,
  642. issue_unit: true,
  643. fixed_asset_number:true,
  644. fixed_asset_number2: true,
  645. serial_number: true,
  646. factory_number:true,
  647. check_last_time:true,
  648. check_next_time:true,
  649. check_status1:true,
  650. status1: true,
  651. };
  652. }
  653. },
  654. };
  655. </script>
  656. <style lang="scss" scoped>
  657. @import "@/views/device/hyd_equipment/index.scss";
  658. @import "@/views/device/hyd_equipment/alarm.scss";
  659. </style>