index.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692
  1. <template>
  2. <div class="app-container">
  3. <el-form
  4. :model="queryParams"
  5. ref="queryForm"
  6. size="small"
  7. :inline="true"
  8. v-show="showSearch"
  9. label-width="100px"
  10. >
  11. <el-row>
  12. <el-form-item label="硬件编码" prop="hardwareCode">
  13. <el-input
  14. v-model="queryParams.hardwareCode"
  15. placeholder="请输入硬件编码"
  16. clearable
  17. @keyup.enter.native="handleQuery"
  18. />
  19. </el-form-item>
  20. <el-form-item label="硬件名称" prop="hardwareName">
  21. <el-input
  22. v-model="queryParams.hardwareName"
  23. placeholder="请输入硬件名称"
  24. clearable
  25. @keyup.enter.native="handleQuery"
  26. />
  27. </el-form-item>
  28. <el-form-item label="状态" prop="status">
  29. <el-select
  30. v-model="queryParams.status"
  31. placeholder="请选择硬件状态"
  32. clearable
  33. >
  34. <el-option label="在线" value="1"></el-option>
  35. <el-option label="离线" value="2"></el-option>
  36. <el-option label="异常" value="3"></el-option>
  37. <!-- <el-option-->
  38. <!-- v-for="dict in dict.type.mes_order_status"-->
  39. <!-- :key="dict.value"-->
  40. <!-- :label="dict.label"-->
  41. <!-- :value="dict.value"-->
  42. <!-- />-->
  43. </el-select>
  44. </el-form-item>
  45. <el-form-item label="硬件类型" prop="hardwareTypeName">
  46. <el-select
  47. v-model="queryParams.hardwareTypeName"
  48. placeholder="请选择硬件类型"
  49. clearable
  50. >
  51. <el-option
  52. v-for="dict in hardwareTypeOption"
  53. :key="dict.key"
  54. :label="dict.label"
  55. :value="dict.value"
  56. />
  57. </el-select>
  58. </el-form-item>
  59. </el-row>
  60. <el-form-item label="规格型号" prop="hardwareSpec">
  61. <el-input
  62. v-model="queryParams.hardwareSpec"
  63. placeholder="请输入规格型号"
  64. clearable
  65. @keyup.enter.native="handleQuery"
  66. />
  67. </el-form-item>
  68. <el-form-item label="创建时间" prop="createTime">
  69. <el-date-picker
  70. v-model="queryParams.createTime"
  71. type="datetimerange"
  72. :picker-options="pickerOptions"
  73. range-separator="-"
  74. start-placeholder="开始日期"
  75. end-placeholder="结束日期"
  76. align="right"
  77. style="width: 540px"
  78. >
  79. </el-date-picker>
  80. </el-form-item>
  81. <el-form-item label="所属车间" prop="status">
  82. <el-select
  83. v-model="queryParams.workshopName"
  84. placeholder="请选择所属车间"
  85. clearable
  86. >
  87. <el-option
  88. v-for="dict in this.workshopOption"
  89. :key="dict.workshopId"
  90. :label="dict.workshopName"
  91. :value="dict.workshopCode"
  92. />
  93. </el-select>
  94. </el-form-item>
  95. <el-form-item style="margin-left: 50px">
  96. <el-button
  97. type="primary"
  98. icon="el-icon-search"
  99. size="mini"
  100. @click="handleQuery"
  101. >搜索</el-button
  102. >
  103. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
  104. >重置</el-button
  105. >
  106. </el-form-item>
  107. </el-form>
  108. <el-row :gutter="10" class="mb8">
  109. <el-col :span="1.5">
  110. <el-button
  111. type="primary"
  112. plain
  113. icon="el-icon-plus"
  114. size="mini"
  115. @click="handleAdd"
  116. v-hasPermi="['mes:hw:information:add']"
  117. >新增</el-button
  118. >
  119. </el-col>
  120. <!-- <el-col :span="1.5">
  121. <el-button
  122. type="success"
  123. plain
  124. icon="el-icon-edit"
  125. size="mini"
  126. :disabled="single"
  127. @click="handleUpdate"
  128. v-hasPermi="['mes:dv:repair:edit']"
  129. >修改</el-button
  130. >
  131. </el-col> -->
  132. <el-col :span="1.5">
  133. <el-button
  134. type="danger"
  135. plain
  136. icon="el-icon-delete"
  137. size="mini"
  138. :disabled="multiple"
  139. @click="handleDelete"
  140. v-hasPermi="['mes:hw:information:batchremove']"
  141. >批量删除</el-button
  142. >
  143. </el-col>
  144. <right-toolbar
  145. :showSearch.sync="showSearch"
  146. @queryTable="getList"
  147. ></right-toolbar>
  148. </el-row>
  149. <el-table
  150. v-loading="loading"
  151. :data="repairList"
  152. @selection-change="handleSelectionChange"
  153. >
  154. <el-table-column type="selection" width="55" align="center" />
  155. <el-table-column
  156. label="硬件编码"
  157. width="120px"
  158. align="center"
  159. prop="hardwareCode"
  160. />
  161. <el-table-column
  162. label="硬件名称"
  163. width="150px"
  164. align="center"
  165. prop="hardwareName"
  166. :show-overflow-tooltip="true"
  167. />
  168. <el-table-column label="硬件类型" align="center" prop="hardwareTypeName" />
  169. <el-table-column label="规格型号" align="center" prop="hardwareSpec" />
  170. <el-table-column label="所属车间" align="center" prop="workshopName" />
  171. <el-table-column label="硬件状态" align="center" prop="status" />
  172. <el-table-column
  173. label="创建时间"
  174. align="center"
  175. prop="createTime"
  176. width="180"
  177. >
  178. <template slot-scope="scope">
  179. <span>{{ scope.row.createTime }}</span>
  180. </template>
  181. </el-table-column>
  182. <el-table-column
  183. label="启用时间"
  184. align="center"
  185. prop="activationTime"
  186. width="120"
  187. >
  188. <template slot-scope="scope">
  189. <span>{{ scope.row.activationTime }}</span>
  190. </template>
  191. </el-table-column>
  192. <el-table-column label="可用次数" align="center" prop="availableTimes" />
  193. <el-table-column label="可用寿命" align="center" prop="availableLife" />
  194. <el-table-column label="已用次数" align="center" prop="usedTimes" />
  195. <el-table-column label="已用寿命" align="center" prop="usedLife" />
  196. <el-table-column
  197. label="操作"
  198. align="center"
  199. class-name="small-padding fixed-width"
  200. fixed="right"
  201. >
  202. <template slot-scope="scope">
  203. <el-button
  204. size="mini"
  205. type="text"
  206. icon="el-icon-edit"
  207. @click="handleUpdate(scope.row)"
  208. v-hasPermi="['mes:hw:information:edit']"
  209. >编辑</el-button
  210. >
  211. <el-button
  212. size="mini"
  213. type="text"
  214. icon="el-icon-delete"
  215. @click="handleDelete(scope.row)"
  216. v-hasPermi="['mes:hw:information:remove']"
  217. >删除</el-button
  218. >
  219. <!-- <el-button size="mini" type="text">预览</el-button>-->
  220. </template>
  221. </el-table-column>
  222. </el-table>
  223. <pagination
  224. v-show="total > 0"
  225. :total="total"
  226. :page.sync="queryParams.current"
  227. :limit.sync="queryParams.size"
  228. @pagination="getList"
  229. />
  230. <!-- 添加或修改设备维修单对话框 -->
  231. <el-dialog
  232. :title="title"
  233. :visible.sync="open"
  234. width="1100px"
  235. append-to-body
  236. >
  237. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  238. <el-row>
  239. <el-col :span="11">
  240. <el-form-item label="硬件编码" prop="hardwareCode">
  241. <el-input
  242. v-model="form.hardwareCode"
  243. placeholder="请输入硬件编码"
  244. style="width: 100%"
  245. />
  246. </el-form-item>
  247. </el-col>
  248. <el-col :span="11">
  249. <el-form-item label="硬件类型" prop="hardwareTypeName">
  250. <el-select
  251. v-model="form.hardwareTypeName"
  252. placeholder="请选择硬件类型"
  253. clearable
  254. style="width: 100%"
  255. @change="hardTypeChange"
  256. >
  257. <el-option
  258. v-for="dict in this.hardwareTypeOption"
  259. :key="dict.value"
  260. :label="dict.label"
  261. :value="dict.value"
  262. />
  263. </el-select>
  264. </el-form-item>
  265. </el-col>
  266. </el-row>
  267. <el-row>
  268. <el-col :span="11">
  269. <el-form-item label="硬件名称" prop="hardwareName">
  270. <el-input
  271. v-model="form.hardwareName"
  272. placeholder="请输入硬件名称"
  273. />
  274. </el-form-item>
  275. </el-col>
  276. <el-col :span="11">
  277. <el-form-item label="规格型号" prop="hardwareSpec">
  278. <el-input
  279. v-model="form.hardwareSpec"
  280. placeholder="请输入规格型号"
  281. />
  282. </el-form-item>
  283. </el-col>
  284. </el-row>
  285. <el-row>
  286. <el-col :span="11">
  287. <el-form-item label="启用日期" prop="activationTime">
  288. <el-date-picker
  289. clearable
  290. v-model="form.activationTime"
  291. style="width: 100%"
  292. type="date"
  293. value-format="yyyy-MM-dd"
  294. placeholder="请选择启用日期"
  295. >
  296. </el-date-picker> </el-form-item
  297. ></el-col>
  298. <el-col :span="11">
  299. <el-form-item label="所属车间" prop="workshopName">
  300. <el-select
  301. v-model="form.workshopName"
  302. placeholder="请选择所属车间"
  303. clearable
  304. style="width: 100%"
  305. @change="workShopChange"
  306. >
  307. <el-option
  308. v-for="dict in this.workshopOption"
  309. :key="dict.workshopId"
  310. :label="dict.workshopName"
  311. :value="dict.workshopCode"
  312. />
  313. </el-select>
  314. </el-form-item>
  315. </el-col>
  316. </el-row>
  317. <el-row>
  318. <el-col :span="11">
  319. <el-form-item label="可用次数" prop="availableTimes">
  320. <el-input
  321. v-model="form.availableTimes"
  322. placeholder="请输入可用次数"
  323. />
  324. </el-form-item>
  325. </el-col>
  326. <el-col :span="11">
  327. <el-form-item label="已用次数" prop="usedTimes">
  328. <el-input
  329. v-model="form.usedTimes"
  330. placeholder="请输入已用次数"
  331. />
  332. </el-form-item>
  333. </el-col>
  334. </el-row>
  335. <el-row>
  336. <el-col :span="11">
  337. <el-form-item label="可用寿命" prop="availableLife">
  338. <el-input
  339. v-model="form.availableLife"
  340. placeholder="请输入可用寿命"
  341. />
  342. </el-form-item>
  343. </el-col>
  344. <el-col :span="11">
  345. <el-form-item label="已用寿命" prop="usedLife">
  346. <el-input
  347. v-model="form.usedLife"
  348. placeholder="请输入已用寿命"
  349. />
  350. </el-form-item>
  351. </el-col>
  352. </el-row>
  353. <el-form-item label="状态" prop="status">
  354. <el-radio-group v-model="form.status" v-removeAriaHidden>
  355. <el-radio :label="1"
  356. ><img
  357. src="@/assets/images/success.png"
  358. alt=""
  359. class="imgstatus"
  360. />
  361. 在线</el-radio
  362. >
  363. <el-radio :label="2" ><img src="@/assets/images/error.png" alt="" class="imgstatus" />
  364. 离线</el-radio
  365. >
  366. <el-radio :label="3"
  367. ><img src="@/assets/images/warn.png" alt="" class="imgstatus" />
  368. 异常</el-radio
  369. >
  370. </el-radio-group>
  371. </el-form-item>
  372. </el-form>
  373. <div slot="footer" class="dialog-footer">
  374. <el-button
  375. type="primary"
  376. @click="submitForm"
  377. >确 定</el-button
  378. >
  379. <el-button @click="cancel">取 消</el-button>
  380. </div>
  381. </el-dialog>
  382. </div>
  383. </template>
  384. <script>
  385. import {
  386. listHardware,
  387. getHardwareTypeListAPI,
  388. addHardware,
  389. updateHardware,
  390. delHardware,
  391. getHardwareInfo
  392. } from '@/api/mes/hw/hardwareinfo'
  393. export default {
  394. name: "hardwareinfo",
  395. dicts: ["mes_repair_result", "mes_order_status"],
  396. // components: { Repairline, MachinerySelectSingle },
  397. data() {
  398. return {
  399. autoGenFlag: false,
  400. optType: undefined,
  401. // 遮罩层
  402. loading: true,
  403. // 选中数组
  404. ids: [],
  405. // 非单个禁用
  406. single: true,
  407. // 非多个禁用
  408. multiple: true,
  409. // 显示搜索条件
  410. showSearch: true,
  411. // 总条数
  412. total: 0,
  413. // 设备维修单表格数据
  414. repairList: [],
  415. // 弹出层标题
  416. title: "",
  417. // 是否显示弹出层
  418. open: false,
  419. // 查询参数
  420. queryParams: {
  421. current: 1,
  422. size: 10,
  423. hardwareCode:'',
  424. hardwareName:'',
  425. status:'',
  426. hardwareTypeName:'',
  427. hardwareSpec:'',
  428. createTime:'',
  429. workshopName:''
  430. },
  431. workshopOption:[
  432. {
  433. workshopCode:'EEE',
  434. workshopId:1,
  435. workshopName:'车间一'
  436. },
  437. {
  438. workshopCode:'FFF',
  439. workshopId:2,
  440. workshopName:'车间二'
  441. }
  442. ],
  443. hardwareTypeOption:[],
  444. // 表单参数
  445. form: {
  446. hardwareTypeId:0,
  447. workshopCode:0,
  448. workshopId:0,
  449. },
  450. // 表单校验
  451. rules: {
  452. hardwareCode: [
  453. { required: true, message: "硬件编码不能为空", trigger: "blur" },
  454. ],
  455. hardwareName: [
  456. { required: true, message: "硬件名称不能为空", trigger: "blur" },
  457. ],
  458. },
  459. // 日期选择
  460. pickerOptions: {
  461. shortcuts: [
  462. {
  463. text: "最近一周",
  464. onClick(picker) {
  465. const end = new Date();
  466. const start = new Date();
  467. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
  468. picker.$emit("pick", [start, end]);
  469. },
  470. },
  471. {
  472. text: "最近一个月",
  473. onClick(picker) {
  474. const end = new Date();
  475. const start = new Date();
  476. start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
  477. picker.$emit("pick", [start, end]);
  478. },
  479. },
  480. {
  481. text: "最近三个月",
  482. onClick(picker) {
  483. const end = new Date();
  484. const start = new Date();
  485. start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
  486. picker.$emit("pick", [start, end]);
  487. },
  488. },
  489. ],
  490. },
  491. value2: "",
  492. // 新增状态
  493. radio: 3,
  494. repairId:null,//修改判断
  495. };
  496. },
  497. created() {
  498. this.getList();
  499. this.getHardwareTypeList()
  500. },
  501. methods: {
  502. /** 查询设备维修单列表 */
  503. getList() {
  504. this.loading = true;
  505. listHardware(this.queryParams).then((response) => {
  506. this.repairList = response.data.records;
  507. this.total = response.data.total;
  508. this.loading = false;
  509. });
  510. },
  511. // 获取硬件类型-所有
  512. getHardwareTypeList() {
  513. getHardwareTypeListAPI().then(response => {
  514. console.log(response,'Type')
  515. this.hardwareTypeOption=response.data.map((item) => {
  516. return{
  517. label:item.hardwareTypeName,
  518. value: item.hardwareTypeCode,
  519. key:item.id,
  520. }
  521. })
  522. })
  523. },
  524. // 硬件类型下拉
  525. hardTypeChange(val){
  526. console.log(val,'下拉类型')
  527. const TypeId=this.hardwareTypeOption.find((item)=>{
  528. return item.value==val?item.key:null;
  529. })
  530. this.form.hardwareTypeId=TypeId.key
  531. console.log(this.form.hardwareTypeId,'hardwareTypeId')
  532. },
  533. // 车间下拉
  534. workShopChange(val){
  535. this.form.workshopCode=val
  536. const workshopId=this.workshopOption.find((item)=>{
  537. return item.workshopCode==val?item.workshopId:null;
  538. })
  539. this.form.workshopId=workshopId.workshopId
  540. },
  541. // 取消按钮
  542. cancel() {
  543. this.open = false;
  544. this.reset();
  545. },
  546. // 表单重置
  547. reset() {
  548. this.form = {
  549. hardwareCode:'',
  550. hardwareName:'',
  551. status:'',
  552. hardwareTypeName:'',
  553. hardwareSpec:'',
  554. createTime:'',
  555. workshopName:''
  556. };
  557. this.autoGenFlag = false;
  558. this.resetForm("form");
  559. },
  560. /** 搜索按钮操作 */
  561. handleQuery() {
  562. this.queryParams.current = 1;
  563. this.getList();
  564. },
  565. /** 重置按钮操作 */
  566. resetQuery() {
  567. this.resetForm("queryForm");
  568. this.handleQuery();
  569. },
  570. // 多选框选中数据
  571. handleSelectionChange(selection) {
  572. this.ids = selection.map((item) => item.id);
  573. this.single = selection.length !== 1;
  574. this.multiple = !selection.length;
  575. },
  576. /** 新增按钮操作 */
  577. handleAdd() {
  578. this.reset();
  579. this.open = true;
  580. this.title = "新增硬件信息";
  581. },
  582. /** 修改按钮操作 */
  583. handleUpdate(row) {
  584. this.reset();
  585. this.repairId = row.id || this.ids;
  586. getHardwareInfo(this.repairId).then((response) => {
  587. this.form = response.data;
  588. this.open = true;
  589. this.title = "编辑硬件信息";
  590. });
  591. },
  592. /** 提交按钮 */
  593. submitForm() {
  594. this.$refs["form"].validate((valid) => {
  595. if (valid) {
  596. if (this.repairId != null) {
  597. updateHardware(this.form).then((response) => {
  598. this.$modal.msgSuccess("修改成功");
  599. this.open = false;
  600. this.getList();
  601. });
  602. } else {
  603. console.log(this.form,'form')
  604. addHardware(this.form).then((response) => {
  605. this.$modal.msgSuccess("新增成功");
  606. this.open = false;
  607. this.getList();
  608. });
  609. }
  610. }
  611. });
  612. },
  613. /** 删除按钮操作 */
  614. handleDelete(row) {
  615. const repairIds = row.id || this.ids;
  616. this.$modal
  617. .confirm('是否确认删除硬件编号为"' + repairIds + '"的数据项?')
  618. .then(function () {
  619. return delHardware(repairIds);
  620. })
  621. .then(() => {
  622. this.getList();
  623. this.$modal.msgSuccess("删除成功");
  624. })
  625. .catch(() => {
  626. });
  627. },
  628. /** 导出按钮操作 */
  629. handleExport() {
  630. this.download(
  631. "dv/repair/export",
  632. {
  633. ...this.queryParams,
  634. },
  635. `repair_${new Date().getTime()}.xlsx`
  636. );
  637. },
  638. //自动生成编码
  639. handleAutoGenChange(autoGenFlag) {
  640. if (autoGenFlag) {
  641. genCode("REPAIR_CODE").then((response) => {
  642. this.form.repairCode = response;
  643. });
  644. } else {
  645. this.form.repairCode = null;
  646. }
  647. },
  648. },
  649. };
  650. </script>
  651. <style scoped>
  652. .imgstatus {
  653. position: relative;
  654. top: 1px;
  655. left: 0px;
  656. }
  657. /deep/ .el-radio__inner {
  658. border-radius: 2px;
  659. }
  660. /deep/.el-radio__input.is-checked .el-radio__inner::after {
  661. content: "";
  662. width: 8px;
  663. height: 3px;
  664. border: 1px solid white;
  665. border-top: transparent;
  666. border-right: transparent;
  667. text-align: center;
  668. display: block;
  669. position: absolute;
  670. top: 3px;
  671. left: 2px;
  672. transform: rotate(-45deg);
  673. border-radius: 0pc;
  674. background: none;
  675. }
  676. </style>