stateDev.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <template>
  2. <el-dialog v-model="visible" :title="`${formConfig.data.deviceCode} - 设备状态`" width="80%" @closed="$emit('closed')">
  3. <el-tabs v-model="activeName" @tab-change="tabChange">
  4. <el-tab-pane label="设备信息" name="deviceInfo">
  5. <el-descriptions :column="3" label-width="120">
  6. <el-descriptions-item class-name="calculator-content" label="排序区起始卡号:">{{ XEUtils.get(deviceData, "beginNo", 0) }}</el-descriptions-item>
  7. <el-descriptions-item class-name="calculator-content" label="排序区结束卡号:">{{ XEUtils.get(deviceData, "endNo", 0) }}</el-descriptions-item>
  8. <el-descriptions-item class-name="calculator-content" label="排序区可用次数:">{{ XEUtils.get(deviceData, "availableTimes", 0) }}</el-descriptions-item>
  9. <el-descriptions-item class-name="calculator-content" label="保留起始卡号:">{{ XEUtils.get(deviceData, "reservedBeginNo", 0) }}</el-descriptions-item>
  10. <el-descriptions-item class-name="calculator-content" label="保留结束卡号:">{{ XEUtils.get(deviceData, "reservedEndNo", 0) }}</el-descriptions-item>
  11. <el-descriptions-item class-name="calculator-content" label="保留卡号使用次数:">{{ XEUtils.get(deviceData, "reservedTimes", 0) }}</el-descriptions-item>
  12. <el-descriptions-item label="创建时间:">{{ $TOOL.dateFormat(XEUtils.get(deviceData, "createTime")) || "/" }}</el-descriptions-item>
  13. <el-descriptions-item label="设备时间:">{{ $TOOL.dateFormat(XEUtils.get(deviceData, "deviceTime")) || "/" }}</el-descriptions-item>
  14. <el-descriptions-item label="校准时间:">{{ $TOOL.dateFormat(XEUtils.get(deviceData, "proofreadLast")) || "/" }}</el-descriptions-item>
  15. <el-descriptions-item label="卡号记录更新时间:" :span="3">{{ $TOOL.dateFormat(XEUtils.get(deviceData, "features.fetchLast")) || "/" }}</el-descriptions-item>
  16. <el-descriptions-item :span="3">
  17. <el-divider content-position="left">非排序区卡号</el-divider>
  18. </el-descriptions-item>
  19. <template v-for="(item, index) in XEUtils.get(deviceData, 'unsequences', [])" v-bind:key="index">
  20. <el-descriptions-item class-name="calculator-content" label="保留起始卡号:">{{ XEUtils.get(item, "beginNo", 0) }}</el-descriptions-item>
  21. <el-descriptions-item class-name="calculator-content" label="保留结束卡号:">{{ XEUtils.get(item, "endNo", 0) }}</el-descriptions-item>
  22. <el-descriptions-item class-name="calculator-content" label="保留卡号使用次数:">{{ XEUtils.get(item, "times", 0) }}</el-descriptions-item>
  23. </template>
  24. </el-descriptions>
  25. </el-tab-pane>
  26. <el-tab-pane label="卡号信息" name="cardNoInfo">
  27. <scTable ref="xGridTable" :apiObj="formConfig.data.deviceId && $API.passqrcode.cardinfo" min-height="108" max-height="600" framework="zeroLite" :formConfig="formConfig" :paramsColums="paramsColums" :columns="columns"></scTable>
  28. </el-tab-pane>
  29. </el-tabs>
  30. </el-dialog>
  31. </template>
  32. <script setup>
  33. import XEUtils from "xe-utils";
  34. import API from "@/api";
  35. import TOOL from "@/utils/tool";
  36. import { cardinfoZoneDic, cardinfoStatusDic, cardinfoOpenTime, objectToArray } from "@/utils/basicDic";
  37. import { mapFormItemInput, mapFormItemSelect } from "@/components/scTable/helper";
  38. const visible = ref(false);
  39. const open = deviceCode => {
  40. visible.value = true;
  41. formConfig.data.deviceCode = deviceCode;
  42. getDeviceStatus(deviceCode);
  43. }
  44. const activeName = reactive("deviceInfo");
  45. const deviceData = ref({});
  46. const getDeviceStatus = value => {
  47. const query = {
  48. limit: { start: 0, length: 1 },
  49. orderby: [{ column: "createTime", seq: "DESC" }],
  50. condition: { column: "deviceCode", symbol: "EQ", value }
  51. }
  52. API.passqrcode.devstat.get({ querys: [query] }).then(res => deviceData.value = XEUtils.merge(XEUtils.first(res.datas)));
  53. }
  54. const selectConfig = reactive({
  55. options: objectToArray(cardinfoZoneDic),
  56. events: {
  57. change: data => XEUtils.merge(formConfig.data, data)
  58. }
  59. })
  60. const formConfig = reactive({
  61. data: {
  62. deviceCode: null,
  63. deviceId: null
  64. },
  65. items: [
  66. mapFormItemInput("cardNo", "卡号"),
  67. mapFormItemSelect("zone", "区域", selectConfig)
  68. ]
  69. })
  70. const paramsColums = reactive([
  71. { type: "relation", column: "deviceId", symbol: "eq" },
  72. { type: "relation", column: "cardNo", symbol: "like" },
  73. { type: "relation", column: "zone", symbol: "eq" },
  74. { type: "orderby", column: "cardNo", symbol: "asc" }
  75. ]);
  76. const columns = reactive([
  77. { field: "cardNo", title: "卡号", minWidth: 100 },
  78. { field: "zone", title: "区域", minWidth: 100, formatter: ({ cellValue }) => XEUtils.get(cardinfoZoneDic, cellValue, cellValue) },
  79. { field: "times", title: "可用次数", minWidth: 100 },
  80. { field: "openTime", title: "开门时段", minWidth: 200, formatter: ({ cellValue }) => XEUtils.map(cardinfoOpenTime(cellValue).split(","), (item, index) => `读头编号${index + 1}:开门时段${item.split("")[1] || ""}`).join() },
  81. { field: "auths", title: "认证策略", minWidth: 100 },
  82. { field: "holiday", title: "假日策略", minWidth: 100 },
  83. { field: "status", title: "状态", minWidth: 100, formatter: ({ cellValue }) => XEUtils.get(cardinfoStatusDic, cellValue, cellValue) },
  84. { field: "createTime", title: "创建时间", minWidth: 160, formatter: ({ cellValue }) => TOOL.dateFormat(cellValue) },
  85. { field: "effectiveTime", title: "有效时间", minWidth: 160, formatter: ({ cellValue }) => TOOL.dateFormat(cellValue) },
  86. { field: "last", title: "最后刷卡时间", minWidth: 160, formatter: ({ cellValue }) => TOOL.dateFormat(XEUtils.toStringDate(`20${cellValue}`, "yyyyMMddHHmmss")) || "/" }
  87. ])
  88. const xGridTable = ref();
  89. const tabChange = name => {
  90. if (name == "deviceInfo") getDeviceStatus(formConfig.data.deviceCode);
  91. if (name == "cardNoInfo") {
  92. formConfig.data.deviceId = deviceData.value.id;
  93. nextTick(() => xGridTable.value.resetData());
  94. }
  95. }
  96. defineExpose({
  97. open
  98. })
  99. </script>
  100. <style scoped>
  101. .el-descriptions :deep(.el-descriptions__label) {margin-right: 12px;text-align: right;font-weight: 700;color: var(--vxe-ui-font-color);}
  102. .el-descriptions :deep(.el-descriptions__content).calculator-content {position: relative;top: 3px;font: 22px calculator-all;color: var(--el-color-primary);letter-spacing: 2px;}
  103. .el-divider {margin-bottom: 12px;}
  104. </style>