style:设备台账-编辑-二维码组件调用

pull/1/head
黄伟杰 2 months ago
parent 9561ce6177
commit 92fcd9b9e7

@ -199,38 +199,20 @@
</el-col>
<el-col v-if="formType === 'update'" :span="24">
<el-form-item :label="t('EquipmentManagement.EquipmentLedger.qrcode')" prop="qrcodeUrl">
<div class="device-ledger-qrcode-wrap">
<el-image
v-if="formData.qrcodeUrl"
:src="formData.qrcodeUrl"
:preview-src-list="[formData.qrcodeUrl]"
preview-teleported
fit="cover"
class="device-ledger-qrcode-img"
>
<template #error>
<div class="device-ledger-qrcode-error">{{ t('EquipmentManagement.EquipmentLedger.qrcodeLoadError') }}</div>
</template>
</el-image>
<div v-else class="device-ledger-qrcode-error">{{ t('EquipmentManagement.EquipmentLedger.qrcodeEmpty') }}</div>
<div class="device-ledger-qrcode-mask">
<el-button
circle
:disabled="!formData.qrcodeUrl"
@click="handlePreviewQrcode"
>
<Icon icon="ep:zoom-in" />
</el-button>
<el-button
circle
:loading="regenerateCodeLoading"
:disabled="regenerateCodeLoading"
@click="handleRegenerateCode"
>
<Icon icon="ep:refresh" />
</el-button>
</div>
</div>
<QrcodeActionCard
:image-url="formData.qrcodeUrl"
:print-id="formData.id"
:print-title="`${formData.deviceName || '设备'}码打印预览`"
:print-paper-width="80"
:print-paper-height="80"
:print-max-width="220"
:empty-text="t('EquipmentManagement.EquipmentLedger.qrcodeEmpty')"
:error-text="t('EquipmentManagement.EquipmentLedger.qrcodeLoadError')"
:refresh-url="getQrcodeRefreshUrl()"
:refresh-disabled="!formData.id || !formData.deviceCode"
refresh-confirm-text="确认刷新该设备二维码吗?"
@refresh-success="handleQrcodeRefreshSuccess"
/>
</el-form-item>
</el-col>
@ -299,7 +281,7 @@ import { formatDate } from '@/utils/formatTime'
import type { FormRules } from 'element-plus'
import { ProductApi } from '@/api/erp/product/product'
import { DeviceApi,DeviceVO } from '@/api/iot/device'
import { createImageViewer } from '@/components/ImageViewer'
import QrcodeActionCard from '@/components/QrcodeActionCard/index.vue'
/** 设备类型 表单 */
defineOptions({ name: 'DeviceLedgerForm' })
@ -311,7 +293,6 @@ const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const regenerateCodeLoading = ref(false)
const deviceList = ref<DeviceVO[]>([]) //
const parseIdsValue = (value: any): number[] => {
@ -522,31 +503,21 @@ const handleCodeAutoChange = (value: boolean) => {
formRef.value?.clearValidate('deviceCode')
}
const handleRegenerateCode = async () => {
if (!formData.value.id || !formData.value.deviceCode) return
regenerateCodeLoading.value = true
try {
const data = await DeviceLedgerApi.regenerateCode(formData.value.id, formData.value.deviceCode)
const getQrcodeRefreshUrl = () => {
if (!formData.value.id || !formData.value.deviceCode) return ''
return `/mes/device-ledger/regenerate-code?id=${formData.value.id}&code=${encodeURIComponent(String(formData.value.deviceCode))}`
}
const handleQrcodeRefreshSuccess = async (data: any) => {
if (!formData.value.id) return
if (data?.qrcodeUrl) {
formData.value.qrcodeUrl = data.qrcodeUrl
} else {
return
}
const detail = await DeviceLedgerApi.getDeviceLedger(formData.value.id)
formData.value.qrcodeUrl = detail?.qrcodeUrl
formData.value.deviceCode = detail?.deviceCode ?? formData.value.deviceCode
}
message.success(t('common.updateSuccess'))
} finally {
regenerateCodeLoading.value = false
}
}
const handlePreviewQrcode = () => {
if (!formData.value.qrcodeUrl) return
createImageViewer({
zIndex: 9999999,
urlList: [formData.value.qrcodeUrl]
})
}
const ensureOptionsLoaded = async () => {
const [deviceTypeRes, userRes, criticalRes, beijianRes] = await Promise.all([
@ -710,47 +681,4 @@ const resetForm = () => {
white-space: nowrap;
}
.device-ledger-qrcode-wrap {
position: relative;
height: 150px;
width: fit-content;
min-width: 150px;
border-radius: 10px;
overflow: hidden;
border: 1px solid var(--el-border-color-lighter);
background: var(--el-fill-color-blank);
}
.device-ledger-qrcode-img {
height: 150px;
width: auto;
display: block;
}
.device-ledger-qrcode-error {
height: 150px;
min-width: 150px;
display: flex;
align-items: center;
justify-content: center;
color: var(--el-text-color-secondary);
font-size: 12px;
padding: 0 12px;
}
.device-ledger-qrcode-mask {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
background: rgba(0, 0, 0, 0.35);
opacity: 0;
transition: opacity 0.2s ease;
}
.device-ledger-qrcode-wrap:hover .device-ledger-qrcode-mask {
opacity: 1;
}
</style>

Loading…
Cancel
Save