index.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580
  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="isEnglish ? '140px' : '100px'"
  10. >
  11. <el-row>
  12. <el-form-item :label="$t('mes.workCard.cardCode')" prop="cardCode">
  13. <el-input
  14. v-model="queryParams.cardCode"
  15. :placeholder="$t('mes.workCard.cardCodePlaceholder')"
  16. clearable
  17. @keyup.enter.native="handleQuery"
  18. />
  19. </el-form-item>
  20. <el-form-item :label="$t('mes.workCard.cardType')" prop="cardType">
  21. <el-select
  22. v-model="queryParams.cardType"
  23. :placeholder="$t('mes.workCard.cardTypePlaceholder')"
  24. clearable
  25. >
  26. <el-option
  27. v-for="dict in dict.type.card_type"
  28. :key="dict.value"
  29. :label="dict.label"
  30. :value="dict.value"
  31. />
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item :label="$t('mes.workCard.userName')" prop="userName">
  35. <el-select
  36. v-model="queryParams.userName"
  37. :placeholder="$t('mes.workCard.userNamePlaceholder')"
  38. clearable
  39. style="width: 100%"
  40. >
  41. <el-option
  42. v-for="dict in this.userList"
  43. :key="dict.value"
  44. :label="dict.label"
  45. :value="dict.value"
  46. />
  47. </el-select>
  48. </el-form-item>
  49. <el-form-item style="margin-left: 20px">
  50. <el-button
  51. v-no-more-click
  52. type="primary"
  53. icon="el-icon-search"
  54. size="mini"
  55. @click="handleQuery"
  56. >{{ $t('common.search') }}
  57. </el-button>
  58. <el-button
  59. v-no-more-click
  60. icon="el-icon-refresh"
  61. size="mini"
  62. @click="resetQuery"
  63. >{{ $t('common.reset') }}
  64. </el-button>
  65. </el-form-item>
  66. </el-row>
  67. </el-form>
  68. <el-row :gutter="10" class="mb8">
  69. <el-col :span="1.5">
  70. <el-button
  71. v-no-more-click
  72. type="primary"
  73. plain
  74. icon="el-icon-plus"
  75. size="mini"
  76. @click="handleAdd"
  77. v-hasPermi="['mes:hw:work:add']"
  78. >{{ $t('common.add') }}
  79. </el-button>
  80. </el-col>
  81. <el-col :span="1.5">
  82. <el-button
  83. v-no-more-click
  84. type="danger"
  85. plain
  86. icon="el-icon-delete"
  87. size="mini"
  88. :disabled="multiple"
  89. @click="handleDelete"
  90. v-hasPermi="['mes:hw:work:batchremove']"
  91. >{{ $t('common.batchDelete') }}
  92. </el-button>
  93. </el-col>
  94. <right-toolbar
  95. :showSearch.sync="showSearch"
  96. @queryTable="getList"
  97. ></right-toolbar>
  98. </el-row>
  99. <el-table
  100. v-loading="loading"
  101. :data="repairList"
  102. @selection-change="handleSelectionChange"
  103. >
  104. <el-table-column type="selection" width="55" align="center" />
  105. <el-table-column
  106. :label="$t('mes.workCard.cardCode')"
  107. align="center"
  108. prop="cardCode"
  109. show-overflow-tooltip
  110. />
  111. <el-table-column
  112. :label="$t('mes.workCard.cardType')"
  113. align="center"
  114. prop="cardType"
  115. >
  116. <template slot-scope="scope">
  117. <dict-tag
  118. :options="dict.type.card_type"
  119. :value="scope.row.cardType"
  120. />
  121. </template>
  122. </el-table-column>
  123. <el-table-column
  124. :label="$t('mes.workCard.cardNfc')"
  125. align="center"
  126. prop="cardNfc"
  127. show-overflow-tooltip
  128. />
  129. <el-table-column
  130. :label="$t('mes.workCard.userName')"
  131. align="center"
  132. prop="userName"
  133. show-overflow-tooltip
  134. />
  135. <el-table-column
  136. :label="$t('common.status')"
  137. align="center"
  138. prop="exStatus"
  139. >
  140. <template slot-scope="scope">
  141. <el-switch
  142. style="pointer-events: none;"
  143. v-if="scope.row.exStatus!==null"
  144. v-model="scope.row.exStatus"
  145. active-value="1"
  146. inactive-value="0"
  147. active-color="#13ce66"
  148. inactive-color="grey"
  149. ></el-switch>
  150. <span v-else>-</span>
  151. </template>
  152. </el-table-column>
  153. <el-table-column
  154. :label="$t('common.remark')"
  155. :width="isEnglish ? '150px' : '120px'"
  156. align="center"
  157. prop="exRemark"
  158. show-overflow-tooltip
  159. >
  160. <!-- <template slot-scope="scope">-->
  161. <!-- <dict-tag v-if="scope.row.exRemark" :options="dict.type.job_card_reason" :value="scope.row.exRemark"/>-->
  162. <!-- <span v-else>-</span>-->
  163. <!-- </template>-->
  164. </el-table-column>
  165. <el-table-column
  166. :label="$t('common.operation')"
  167. :width="isEnglish ? '160px' : '140px'"
  168. align="center"
  169. class-name="small-padding fixed-width"
  170. fixed="right"
  171. >
  172. <template slot-scope="scope">
  173. <el-button
  174. v-no-more-click
  175. size="mini"
  176. type="text"
  177. icon="el-icon-edit"
  178. @click="handleUpdate(scope.row)"
  179. v-hasPermi="['mes:hw:work:edit']"
  180. >{{ $t('common.edit') }}
  181. </el-button>
  182. <el-button
  183. v-no-more-click
  184. size="mini"
  185. type="text"
  186. icon="el-icon-delete"
  187. @click="handleDelete(scope.row)"
  188. v-hasPermi="['mes:hw:work:remove']"
  189. >{{ $t('common.delete') }}
  190. </el-button>
  191. <!-- <el-button v-no-more-click size="mini" type="text">预览</el-button>-->
  192. </template>
  193. </el-table-column>
  194. </el-table>
  195. <pagination
  196. v-show="total > 0"
  197. :total="total"
  198. :page.sync="queryParams.current"
  199. :limit.sync="queryParams.size"
  200. @pagination="getList"
  201. />
  202. <!-- 添加或修改设备维修单对话框 -->
  203. <el-dialog :title="title" :visible.sync="open" width="450px" append-to-body>
  204. <el-form ref="form" :model="form" :rules="rules" :label-width="isEnglish ? '160px' : '120px'">
  205. <el-form-item :label="$t('mes.workCard.userName')" prop="userId" style="width: 340px">
  206. <el-select
  207. v-model="form.userId"
  208. :placeholder="$t('mes.workCard.userNamePlaceholder')"
  209. clearable
  210. style="width: 100%"
  211. @change="handleSelectUser"
  212. >
  213. <el-option
  214. v-for="dict in this.userList"
  215. :key="dict.value"
  216. :label="dict.label"
  217. :value="dict.value"
  218. />
  219. </el-select>
  220. </el-form-item>
  221. <el-row>
  222. <el-col :span="15">
  223. <el-form-item :label="$t('mes.workCard.cardCode')" prop="cardCode">
  224. <el-input
  225. v-model="form.cardCode"
  226. :placeholder="$t('mes.workCard.cardCodePlaceholder')"
  227. style="width: 100%"
  228. />
  229. </el-form-item>
  230. </el-col>
  231. <el-col :span="8">
  232. <el-form-item label-width="80">
  233. <el-switch
  234. v-model="autoGenFlag"
  235. active-color="#13ce66"
  236. :active-text="$t('mes.workCard.autoGenerate')"
  237. @change="handleAutoGenChange(autoGenFlag)"
  238. >
  239. </el-switch>
  240. </el-form-item>
  241. </el-col>
  242. </el-row>
  243. <el-form-item :label="$t('mes.workCard.cardNfc')" prop="cardNfc" style="width: 340px">
  244. <el-input
  245. v-model="form.cardNfc"
  246. :placeholder="$t('mes.workCard.cardNfcPlaceholder')"
  247. maxlength="16"
  248. />
  249. </el-form-item>
  250. <el-form-item :label="$t('mes.workCard.cardType')" prop="cardType">
  251. <el-select
  252. v-model="form.cardType"
  253. :placeholder="$t('mes.workCard.cardTypePlaceholder')"
  254. clearable
  255. >
  256. <el-option
  257. v-for="dict in dict.type.card_type"
  258. :key="dict.value"
  259. :label="dict.label"
  260. :value="dict.value"
  261. />
  262. </el-select>
  263. </el-form-item>
  264. <el-form-item :label="$t('common.status')" prop="exStatus">
  265. <el-radio-group v-model="form.exStatus">
  266. <el-radio
  267. v-for="dict in dict.type.job_card_status"
  268. :key="dict.value"
  269. :label="dict.value"
  270. >{{ dict.label }}
  271. </el-radio
  272. >
  273. </el-radio-group>
  274. </el-form-item>
  275. <el-form-item :label="$t('common.remark')" prop="exRemark" >
  276. <el-input v-model="form.exRemark" :placeholder="$t('common.pleaseInput') + $t('common.remark')" />
  277. <!-- <el-select v-model="form.exRemark">-->
  278. <!-- <el-option-->
  279. <!-- v-for="dict in dict.type.job_card_reason"-->
  280. <!-- :key="dict.value"-->
  281. <!-- :label="dict.label"-->
  282. <!-- :value="dict.value"-->
  283. <!-- />-->
  284. <!-- </el-select>-->
  285. </el-form-item>
  286. <!-- <el-form-item label="备注" prop="remark" style="width: 340px">-->
  287. <!-- <el-input v-model="form.remark" placeholder="请输入备注" />-->
  288. <!-- </el-form-item>-->
  289. </el-form>
  290. <div slot="footer" class="dialog-footer">
  291. <el-button v-no-more-click type="primary" @click="submitForm"
  292. >{{ $t('common.confirm') }}</el-button
  293. >
  294. <el-button v-no-more-click @click="cancel">{{ $t('common.cancel') }}</el-button>
  295. </div>
  296. </el-dialog>
  297. </div>
  298. </template>
  299. <script>
  300. import {
  301. getWordCardList,
  302. getUserList,
  303. addWorkCard,
  304. workCardInfo,
  305. updateWorkCard,
  306. delWorkCard,
  307. } from "@/api/mes/workCard/index";
  308. import { listHardware } from "@/api/mes/hw/hardwareinfo";
  309. import { genCode } from "@/api/system/autocode/rule";
  310. import Template from "@/views/print/printtemplate/list.vue";
  311. export default {
  312. name: "lock",
  313. components: {Template},
  314. dicts: ["card_type",'job_card_reason','job_card_status'],
  315. data() {
  316. return {
  317. autoGenFlag: false,
  318. optType: undefined,
  319. // 遮罩层
  320. loading: true,
  321. // 选中数组
  322. ids: [],
  323. codes: [],
  324. // 非单个禁用
  325. single: true,
  326. // 非多个禁用
  327. multiple: true,
  328. // 显示搜索条件
  329. showSearch: true,
  330. // 总条数
  331. total: 0,
  332. // 设备维修单表格数据
  333. repairList: [],
  334. // 弹出层标题
  335. title: "",
  336. // 是否显示弹出层
  337. open: false,
  338. // 查询参数
  339. createTime: "",
  340. queryParams: {
  341. current: 1,
  342. size: 10,
  343. cardCode: null,
  344. cardType: null,
  345. userName: null,
  346. },
  347. hardWareList: [],
  348. queryhwParams: {
  349. current: 1,
  350. size: -1,
  351. },
  352. userList: [],
  353. // 表单参数
  354. form: {
  355. userName: null,
  356. },
  357. // 表单校验
  358. rules: {
  359. cardCode: [
  360. { required: true, message: this.$t('mes.workCard.cardCodeRequired'), trigger: "blur" },
  361. ],
  362. userId: [
  363. { required: true, message: this.$t('mes.workCard.userNameRequired'), trigger: "blur" },
  364. ],
  365. cardNfc: [
  366. { required: true, message: this.$t('mes.workCard.cardNfcRequired'), trigger: "blur" },
  367. ],
  368. cardType: [
  369. { required: true, message: this.$t('mes.workCard.cardTypeRequired'), trigger: "blur" },
  370. ],
  371. },
  372. // 新增状态
  373. EditId: 0, //修改判断
  374. };
  375. },
  376. computed: {
  377. isEnglish() {
  378. return this.$store.getters.language === 'en'
  379. }
  380. },
  381. created() {
  382. this.getList();
  383. },
  384. methods: {
  385. //自动生成编码
  386. handleAutoGenChange(autoGenFlag) {
  387. if (autoGenFlag) {
  388. genCode("CARD_CODE").then((response) => {
  389. this.form.cardCode = response;
  390. // console.log(response, this.form.cardCode, "cardCode");
  391. });
  392. } else {
  393. this.form.cardCode = null;
  394. }
  395. },
  396. /** 查询设备维修单列表 */
  397. getList() {
  398. this.loading = true;
  399. // 工卡数据
  400. getWordCardList(this.queryParams).then((response) => {
  401. this.repairList = response.data.records;
  402. this.total = response.data.total;
  403. this.loading = false;
  404. });
  405. // 人员数据
  406. const data = {
  407. current: 1,
  408. size: -1,
  409. };
  410. getUserList(data).then((respone) => {
  411. // console.log(respone, "人员数据");
  412. this.userList = respone.rows.map((item) => {
  413. return {
  414. value: item.userId,
  415. label: item.userName,
  416. };
  417. });
  418. });
  419. },
  420. handleSelectUser(value){
  421. const userNameLabel=this.userList.find((item) => {
  422. return item.value === value
  423. })
  424. this.form.userName = userNameLabel.label
  425. },
  426. // 取消按钮
  427. cancel() {
  428. this.open = false;
  429. this.reset();
  430. },
  431. // 表单重置
  432. reset() {
  433. this.form = {
  434. cardName: null,
  435. cardCode: null,
  436. cardNfc: null,
  437. remark: null,
  438. };
  439. this.autoGenFlag = false;
  440. this.resetForm("form");
  441. },
  442. /** 搜索按钮操作 */
  443. handleQuery() {
  444. this.queryParams.current = 1;
  445. this.getList();
  446. },
  447. /** 重置按钮操作 */
  448. resetQuery() {
  449. this.queryParams.cardCode = "";
  450. this.resetForm("queryForm");
  451. this.handleQuery();
  452. },
  453. // 多选框选中数据
  454. handleSelectionChange(selection) {
  455. this.ids = selection.map((item) => item.cardId);
  456. this.codes = selection.map((item) => item.cardCode);
  457. this.single = selection.length !== 1;
  458. this.multiple = !selection.length;
  459. },
  460. /** 新增按钮操作 */
  461. handleAdd() {
  462. this.reset();
  463. this.open = true;
  464. this.EditId = null;
  465. this.title = this.$t('mes.workCard.addWorkCard');
  466. },
  467. /** 修改按钮操作 */
  468. handleUpdate(row) {
  469. this.reset();
  470. this.EditId = row.cardId || this.ids;
  471. workCardInfo(this.EditId).then((response) => {
  472. console.log(response, "response");
  473. this.form = response.data;
  474. if(response.data.cardType=='1'){
  475. this.form.cardType='员工卡'
  476. }else if(response.data.cardType=='2'){
  477. this.form.cardType='临时卡'
  478. }
  479. this.open = true;
  480. this.title = this.$t('mes.workCard.editWorkCard');
  481. });
  482. },
  483. /** 提交按钮 */
  484. submitForm() {
  485. this.$refs["form"].validate((valid) => {
  486. if (valid) {
  487. if (this.EditId != null) {
  488. if(this.form.cardType=='员工卡'){
  489. this.form.cardType='1'
  490. }else if(this.form.cardType=='临时卡'){
  491. this.form.cardType='2'
  492. }
  493. updateWorkCard(this.form).then((response) => {
  494. this.$modal.msgSuccess(this.$t('mes.workCard.editSuccess'));
  495. this.open = false;
  496. this.getList();
  497. });
  498. } else {
  499. const data=this.userList.find((item) => item.value == this.form.userId?item.value:'');
  500. this.form.userName=data.label;
  501. this.form.userId=data.value;
  502. // console.log(this.form, "form");
  503. addWorkCard(this.form).then((response) => {
  504. this.$modal.msgSuccess(this.$t('mes.workCard.addSuccess'));
  505. this.open = false;
  506. this.EditId = null;
  507. this.getList();
  508. });
  509. }
  510. }
  511. });
  512. },
  513. /** 删除按钮操作 */
  514. handleDelete(row) {
  515. const repairIds = row.cardId || this.ids;
  516. const repairCodes = row.cardCode || this.codes;
  517. this.$modal
  518. .confirm(this.$t('mes.workCard.deleteConfirm', { cardCode: repairCodes }))
  519. .then(function () {
  520. return delWorkCard(repairIds);
  521. })
  522. .then(() => {
  523. this.getList();
  524. this.$modal.msgSuccess(this.$t('mes.workCard.deleteSuccess'));
  525. })
  526. .catch(() => {});
  527. },
  528. },
  529. };
  530. </script>
  531. <style scoped>
  532. .imgstatus {
  533. position: relative;
  534. top: 1px;
  535. left: 0px;
  536. }
  537. /deep/ .el-radio__inner {
  538. //border-radius: 2px;
  539. }
  540. /deep/ .el-radio__input.is-checked .el-radio__inner::after {
  541. //content: "";
  542. //width: 8px;
  543. //height: 3px;
  544. //border: 1px solid white;
  545. //border-top: transparent;
  546. //border-right: transparent;
  547. //text-align: center;
  548. //display: block;
  549. //position: absolute;
  550. //top: 3px;
  551. //left: 2px;
  552. //transform: rotate(-45deg);
  553. //border-radius: 0pc;
  554. //background: none;
  555. }
  556. </style>