index.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. <template>
  2. <div class="app-container">
  3. <div class="filter-container" style="padding-bottom: 0px">
  4. <div class="search-box-area" id="searchBox">
  5. <div class="search-item">
  6. <el-cascader
  7. class="filter-item form-search-input fl"
  8. v-model="queryParam.department_id"
  9. :options="departments"
  10. clearable
  11. :props="{
  12. checkStrictly: true,
  13. label: 'department_name',
  14. value: 'id',
  15. }"
  16. @change="handleChange"
  17. ></el-cascader>
  18. </div>
  19. <div class="search-item">
  20. <el-input
  21. v-model="queryParam.number"
  22. placeholder="编号"
  23. clearable
  24. class="filter-item form-search-input fl"
  25. @keyup.enter.native="handleSearch"
  26. />
  27. </div>
  28. <div class="search-item">
  29. <el-input
  30. v-model="queryParam.name"
  31. placeholder="名称"
  32. clearable
  33. class="filter-item form-search-input fl"
  34. @keyup.enter.native="handleSearch"
  35. />
  36. </div>
  37. <div class="search-item">
  38. <el-select
  39. v-model="queryParam.model"
  40. placeholder="设备型号"
  41. class="filter-item form-search-input fl"
  42. clearable
  43. >
  44. <el-option
  45. v-for="item in deviceTypes"
  46. :key="item.value"
  47. :label="item.text"
  48. :value="item.value">
  49. </el-option>
  50. </el-select>
  51. </div>
  52. <div class="search-item">
  53. <el-select
  54. v-model="queryParam.is_used"
  55. placeholder="启用状态"
  56. class="filter-item form-search-input fl"
  57. clearable
  58. >
  59. <el-option value="0" label="未使用">启用</el-option>
  60. <el-option value="1" label="已使用">停用</el-option>
  61. </el-select>
  62. </div>
  63. </div>
  64. <div class="search-operate-area">
  65. <!-- <el-input v-model="queryParam.code" placeholder="唯一编码" clearable class="filter-item form-search-input fl" /> -->
  66. <el-button
  67. class="filter-item search fl"
  68. icon="el-icon-search"
  69. @click="handleSearch"
  70. >搜索</el-button
  71. >
  72. <el-button
  73. class="filter-item fl"
  74. icon="el-icon-refresh"
  75. @click="handleRefresh"
  76. >重置</el-button
  77. >
  78. <el-button
  79. class="filter-item search fl"
  80. :icon="this.searchDisplay ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"
  81. @click="searchDis"
  82. >{{ word }}</el-button
  83. >
  84. </div>
  85. <div class="list-operate-area">
  86. <!-- <el-button size="mini" class="filter-item search fl" icon="el-icon-plus" @click="handleCreate">添加</el-button> -->
  87. <el-button
  88. class="filter-item search fl"
  89. icon="el-icon-setting"
  90. @click="showColumnOption"
  91. >列设置</el-button
  92. >
  93. <el-button
  94. class="filter-item search fl"
  95. icon="el-icon-refresh-right"
  96. @click="refresh"
  97. >刷新</el-button
  98. >
  99. </div>
  100. </div>
  101. <el-table
  102. :data="data"
  103. v-loading="loading"
  104. ref="multipleTable"
  105. @selection-change="hydraulicSelectMulti"
  106. @sort-change="sortChange"
  107. :dynamicColumnSetting="true"
  108. tooltip-effect="dark"
  109. style="width: 100%"
  110. border
  111. fit
  112. >
  113. <el-table-column
  114. type="selection"
  115. fixed="left"
  116. width="55"
  117. ></el-table-column>
  118. <el-table-column
  119. prop="depart_name"
  120. label="所属部门"
  121. align="center"
  122. v-if="showColumn.depart_name"
  123. :show-overflow-tooltip="true"
  124. width="150"
  125. />
  126. <!-- <el-table-column
  127. prop="alarm_state_text"
  128. label="告警状态"
  129. align="center"
  130. v-if="showColumn.alarm_state_text"
  131. width="120"
  132. >
  133. <template slot-scope="record">
  134. <el-tag
  135. effect="dark"
  136. slot="reference"
  137. :type="current_type[record.row.alarm_state] || ''"
  138. size="small"
  139. >{{ record.row.alarm_state_text }}</el-tag
  140. >
  141. </template>
  142. </el-table-column> -->
  143. <el-table-column
  144. prop="net_state"
  145. label="在线状态"
  146. align="center"
  147. v-if="showColumn.net_state"
  148. :show-overflow-tooltip="true"
  149. width="120"
  150. >
  151. <template slot-scope="record">
  152. <el-tag type="success" v-if="record.row.net_state == '0'" >在线</el-tag >
  153. <el-tag type="gray" v-else-if="record.row.net_state == '1'" >离线</el-tag >
  154. <el-tag type="danger" v-else>从未上线</el-tag>
  155. </template>
  156. </el-table-column>
  157. <el-table-column
  158. prop="number"
  159. label="编号"
  160. align="center"
  161. v-if="showColumn.number"
  162. :show-overflow-tooltip="true"
  163. width="150"
  164. />
  165. <el-table-column
  166. prop="name"
  167. label="名称"
  168. align="center"
  169. v-if="showColumn.name"
  170. :show-overflow-tooltip="true"
  171. />
  172. <el-table-column
  173. prop="brand"
  174. label="品牌"
  175. align="center"
  176. v-if="showColumn.brand"
  177. :show-overflow-tooltip="true"
  178. />
  179. <el-table-column
  180. prop="supplier"
  181. label="供应商"
  182. align="center"
  183. v-if="showColumn.supplier"
  184. :show-overflow-tooltip="true"
  185. width="120"
  186. />
  187. <el-table-column
  188. prop="model_name"
  189. label="型号"
  190. align="center"
  191. v-if="showColumn.model_name"
  192. :show-overflow-tooltip="true"
  193. />
  194. <el-table-column
  195. prop="max_pressure"
  196. label="最大压力"
  197. align="center"
  198. v-if="showColumn.max_pressure"
  199. :show-overflow-tooltip="true"
  200. />
  201. <el-table-column
  202. prop="min_pressure"
  203. label="最小压力"
  204. align="center"
  205. v-if="showColumn.min_pressure"
  206. :show-overflow-tooltip="true"
  207. />
  208. <el-table-column
  209. prop="out_date"
  210. label="出厂日期"
  211. align="center"
  212. v-if="showColumn.out_date"
  213. :show-overflow-tooltip="true"
  214. width="150"
  215. />
  216. <el-table-column
  217. prop="is_used"
  218. label="启用状态"
  219. align="center"
  220. v-if="showColumn.is_used"
  221. :show-overflow-tooltip="true"
  222. width="120"
  223. >
  224. <template slot-scope="record">
  225. <el-switch
  226. v-model="record.row.is_used"
  227. active-color="#13ce66"
  228. @change="changeUsedEvent(record.row,$event)"
  229. inactive-color="#ff4949">
  230. </el-switch>
  231. <!-- <el-tag type="danger" v-if="record.row.is_used == 0"
  232. >未使用</el-tag
  233. >
  234. <el-tag type="success" v-else>已使用</el-tag> -->
  235. </template>
  236. </el-table-column>
  237. <el-table-column
  238. prop="online_time"
  239. label="在线时间"
  240. align="center"
  241. v-if="showColumn.online_time"
  242. width="200"
  243. sortable
  244. />
  245. <el-table-column
  246. prop="creator_user"
  247. label="导入用户"
  248. align="center"
  249. v-if="showColumn.creator_user"
  250. :show-overflow-tooltip="true"
  251. />
  252. <el-table-column
  253. prop="created_at"
  254. label="添加时间"
  255. align="center"
  256. v-if="showColumn.created_at"
  257. :show-overflow-tooltip="true"
  258. width="200"
  259. sortable
  260. />
  261. <el-table-column
  262. prop="remark"
  263. label="显示信息"
  264. align="center"
  265. v-if="showColumn.remark"
  266. width="100"
  267. />
  268. <el-table-column
  269. label="操作"
  270. width="180"
  271. align="center"
  272. fixed="right"
  273. >
  274. <template slot-scope="record">
  275. <el-tooltip
  276. content="修改"
  277. placement="top"
  278. :enterable="false"
  279. >
  280. <el-button
  281. type="primary"
  282. size="mini"
  283. icon="el-icon-edit"
  284. @click="handleUpdate(record.row)"
  285. ></el-button>
  286. </el-tooltip>
  287. <el-tooltip
  288. content="查看"
  289. placement="top"
  290. :enterable="false"
  291. >
  292. <el-button
  293. type="primary"
  294. size="mini"
  295. icon="el-icon-view"
  296. @click="handleDetail(record.row)"
  297. ></el-button>
  298. </el-tooltip>
  299. </template>
  300. </el-table-column>
  301. </el-table>
  302. <transition name="fade">
  303. <div class="columnOption" v-show="isShowColumn">
  304. <div class="content">
  305. <div class="head">选择显示字段</div>
  306. <div class="body">
  307. <el-checkbox v-model="checkList.depart_name" disabled>所属部门</el-checkbox>
  308. <!-- <el-checkbox v-model="checkList.alarm_state_text" disabled>告警状态</el-checkbox> -->
  309. <el-checkbox v-model="checkList.net_state">在线状态</el-checkbox>
  310. <el-checkbox v-model="checkList.number">编号</el-checkbox>
  311. <el-checkbox v-model="checkList.name">名称</el-checkbox>
  312. <el-checkbox v-model="checkList.brand">品牌</el-checkbox>
  313. <el-checkbox v-model="checkList.supplier">供应商</el-checkbox>
  314. <el-checkbox v-model="checkList.max_pressure">最大压力</el-checkbox>
  315. <el-checkbox v-model="checkList.min_pressure">最小压力</el-checkbox>
  316. <el-checkbox v-model="checkList.model_name">型号</el-checkbox>
  317. <el-checkbox v-model="checkList.out_date">出厂日期</el-checkbox>
  318. <el-checkbox v-model="checkList.is_used">启用状态</el-checkbox>
  319. <el-checkbox v-model="checkList.online_time">在线时间</el-checkbox>
  320. <el-checkbox v-model="checkList.creator_user">导入用户</el-checkbox>
  321. <el-checkbox v-model="checkList.created_at">添加时间</el-checkbox>
  322. <el-checkbox v-model="checkList.remark">显示信息</el-checkbox>
  323. </div>
  324. <div class="footer">
  325. <el-button size="small" type="primary" plain @click="saveColumn"
  326. >保存列配置</el-button
  327. >
  328. </div>
  329. </div>
  330. </div>
  331. </transition>
  332. <el-button
  333. type="primary"
  334. icon="el-icon-plus"
  335. :loading="downloadLoading"
  336. style="margin-top: 15px"
  337. @click="handleCreate"
  338. >添加</el-button
  339. >
  340. <el-button
  341. type="danger"
  342. icon="el-icon-delete"
  343. v-if="selectedIds.length > 0"
  344. style="margin-top: 15px"
  345. @click="handleMultiDelete()"
  346. >删除</el-button
  347. >
  348. <el-pagination
  349. background
  350. class="pagination-container"
  351. @size-change="handleSizeChange"
  352. @current-change="handleCurrentChange"
  353. :current-page="paginate.current"
  354. :page-sizes="paginate.sizes"
  355. :page-size="paginate.limit"
  356. :layout="paginate.layout"
  357. :total="paginate.total"
  358. />
  359. <form-model
  360. @sendVal="closeDialog"
  361. :formModelVisible="formVisible"
  362. :title="title"
  363. :ref="formName"
  364. />
  365. <detail
  366. :detailVisible="detailVisible"
  367. @sendVal="closeDrawer"
  368. :record="detail"
  369. />
  370. </div>
  371. </template>
  372. <script>
  373. import rlListOperate from "@/layout/rl-list-operate/rlListOperate";
  374. import { action } from "@/directive/permission/index.js";
  375. import detail from "./detail.vue"
  376. import formModel from './formModel.vue'
  377. export default {
  378. name: "hydraulic",
  379. directives: { action },
  380. mixins: [rlListOperate],
  381. components: {
  382. formModel,
  383. detail,
  384. },
  385. data() {
  386. return {
  387. url: "hydraulic",
  388. queryParam: {
  389. number: "",
  390. department_id: [],
  391. name: "",
  392. model: "",
  393. is_used: "",
  394. },
  395. deviceTypes:[],
  396. current_type: {
  397. 0: "success",
  398. 1: "danger",
  399. },
  400. formName:'hydraulic',
  401. formVisible:false,
  402. //搜索
  403. searchDisplay: true,
  404. departments: [],
  405. //详情
  406. detailVisible:false,
  407. detail:{},
  408. isShowColumn: false,
  409. // 列的配置化对象,存储配置信息
  410. checkList: {},
  411. showColumn: {
  412. depart_name: true,
  413. alarm_state_text: true,
  414. net_state:true,
  415. number: true,
  416. name: true,
  417. brand: true,
  418. supplier: true,
  419. max_pressure:true,
  420. min_pressure:true,
  421. model_name: true,
  422. is_used:true,
  423. online_time: true
  424. }
  425. };
  426. },
  427. created() {
  428. this.$http.get("departments").then((response) => {
  429. this.departments = response.data;
  430. });
  431. // 0-液压泵
  432. this.$http.get("get_device_mold",{ params: {type:0} }).then(resp => {
  433. this.deviceTypes = resp.data
  434. });
  435. },
  436. methods: {
  437. handleChange(val) {
  438. // console.log(val)
  439. this.queryParam.department_id = val;
  440. this.handleSearch();
  441. },
  442. hydraulicSelectMulti(data) {
  443. this.selectedIds = [];
  444. data.forEach((item) => {
  445. this.selectedIds.push(item.id);
  446. });
  447. },
  448. refresh() {
  449. this.queryParam.page = this.paginate.current;
  450. this.getList();
  451. },
  452. searchDis() {
  453. this.searchDisplay = !this.searchDisplay;
  454. var searchBoxHeght = document.getElementById("searchBox");
  455. if (this.searchDisplay == false) {
  456. searchBoxHeght.style.height = 40 + "px";
  457. } else {
  458. searchBoxHeght.style.height = "auto";
  459. }
  460. },
  461. showColumnOption() {
  462. this.isShowColumn = true;
  463. },
  464. saveColumn() {
  465. localStorage.setItem("hydColumnSet", JSON.stringify(this.checkList));
  466. this.isShowColumn = false;
  467. },
  468. handleDetail(row){
  469. this.detailVisible = true,
  470. this.detail = row
  471. },
  472. closeDrawer(){
  473. this.detailVisible = false
  474. },
  475. changeUsedEvent(row,value){
  476. this.$http.put('hydraulic/' + row.id, { is_used: value }).then(resp => {
  477. if (resp.code === 10000) {
  478. this.$message.success('操作成功')
  479. // row[field] = val
  480. // this.$emit('rowClick', row)
  481. }
  482. })
  483. }
  484. },
  485. watch: {
  486. // 监听复选框配置列所有的变化
  487. checkList: {
  488. handler: function (newnew, oldold) {
  489. // console.log(newnew);
  490. this.showColumn = newnew;
  491. // 这里需要让表格重新绘制一下,否则会产生固定列错位的情况
  492. this.$nextTick(() => {
  493. this.$refs.multipleTable.doLayout();
  494. });
  495. },
  496. deep: true,
  497. immediate: true,
  498. },
  499. },
  500. computed: {
  501. word: function () {
  502. if (this.searchDisplay == false) {
  503. //对文字进行处理
  504. return "展开";
  505. } else {
  506. return "收起";
  507. }
  508. },
  509. },
  510. mounted() {
  511. // this.getIsUseVoice();
  512. this.$nextTick(function () {
  513. this.searchDis();
  514. });
  515. // 发请求得到checkListInitData的列的名字
  516. if (localStorage.getItem("hydColumnSet")) {
  517. this.checkList = JSON.parse(localStorage.getItem("hydColumnSet"));
  518. } else {
  519. this.checkList = {
  520. depart_name: true,
  521. alarm_state_text: true,
  522. net_state:true,
  523. number: true,
  524. name: true,
  525. brand: true,
  526. supplier: true,
  527. max_pressure:true,
  528. min_pressure:true,
  529. is_used:true,
  530. model: true,
  531. online_time: true
  532. };
  533. }
  534. },
  535. };
  536. </script>
  537. <style lang="scss" scoped>
  538. @import "@/views/device/hydraulic/index.scss";
  539. </style>