index.vue 14 KB

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