<template>
|
<div class="gy">
|
<div class="gy_info">
|
<div class="gy_info_title">物料信息</div>
|
<div class="gy_info_box">
|
<div class="gy_info_box_item">
|
<div class="label">物料编码:</div>
|
<span v-if="desc.mmodel">{{desc.mmodel.code ? desc.mmodel.code : '-'}}</span>
|
</div>
|
<div class="gy_info_box_item">
|
<div class="label">物料名称:</div>
|
<span v-if="desc.mmodel">{{desc.mmodel.name ? desc.mmodel.name : '-'}}</span>
|
</div>
|
<div class="gy_info_box_item">
|
<div class="label">单位:</div>
|
<span v-if="desc.umodel">{{desc.umodel.name ? desc.umodel.name : '-'}}</span>
|
</div>
|
<div class="gy_info_box_item">
|
<div class="label">版本号:</div>
|
<span v-if="desc.mmodel">{{desc.mmodel.attr ? desc.mmodel.attr : '-'}}</span>
|
</div>
|
</div>
|
</div>
|
<div class="gy_gx">工序信息</div>
|
<div class="gy_gxinfo">
|
<div class="gy_gxinfo_item">
|
<div class="label">工序名称:</div>
|
<span>{{desc.procedureName ? desc.procedureName : '-'}}|{{desc.procedureCode ? desc.procedureCode : '-'}}</span>
|
</div>
|
<div class="gy_gxinfo_item">
|
<div class="label">注意事项:</div>
|
<span>{{desc.tips ? desc.tips : '-'}}</span>
|
</div>
|
<div class="gy_gxinfo_item">
|
<div class="label">工艺文件:</div>
|
<div class="list" v-if="desc.type">
|
<div class="list_item" @click="show = true">
|
<img :src="desc.url" alt="" />
|
</div>
|
</div>
|
<div class="file" v-else>
|
<div class="file_item" @click="jumpPreview(desc.url)">
|
<img src="@/assets/icon/ic_pdf@2x.png" alt="" />
|
<u>{{desc.remark}}</u>
|
</div>
|
</div>
|
</div>
|
</div>
|
<div class="gy_z"></div>
|
<div class="gy_footer">
|
<button class="gy_footer_sCode" @click="open">扫码</button>
|
</div>
|
<v-ScanCode
|
:openCode="openCode"
|
:infos="['请扫码工装码/工单码']"
|
@closePopup="closePopup"
|
@onDecode="onDecode">
|
</v-ScanCode>
|
<van-image-preview v-model:show="show" :images="images" @change="onChange"></van-image-preview>
|
</div>
|
</template>
|
|
<script setup lang="ts">
|
import { ref, onMounted } from 'vue'
|
import { QRCodeType } from '@/enum'
|
import { Toast } from 'vant'
|
import { judgmentType } from '@/utils/utils'
|
import { useRouter, useRoute } from "vue-router"
|
import { getBarcodeContent, getListByWorkOrderId } from '@/apis/WorkOrderAPI'
|
import { queryListByCode } from '@/apis'
|
|
const router = useRouter()
|
const route = useRoute()
|
|
let desc = ref<object>({})
|
|
let openCode = ref<boolean>(false)
|
|
const show = ref(false);
|
const index = ref(1);
|
|
// 预览的图片数据
|
let images = ref<string[]>([])
|
|
const onChange = (newIndex: any) => {
|
index.value = newIndex + 1;
|
};
|
|
// 跳转预览pdf
|
const jumpPreview = (url: string) => {
|
document.location.href = `${process.env.VUE_APP_PDF}?url=${url}`
|
}
|
|
const open = () => {
|
openCode.value = true
|
}
|
|
// 关闭扫码组件
|
const closePopup = (): void => {
|
openCode.value = false
|
}
|
|
// 获取详情
|
const info = (id: string): void => {
|
queryListByCode({
|
dicCode: 'FOLDER',
|
label: 'ROUTE_CARD'
|
}).then(data => {
|
if (data.code === 200) {
|
getListByWorkOrderId({ workOrderId: id })
|
.then(res => {
|
if (res.code === 200) {
|
res.data.url = res.data.resourcePath + data.data[0].code + '/' + res.data.fileurl
|
let index = res.data.fileurl.lastIndexOf('.')
|
let code = res.data.fileurl.substring(index + 1, res.data.fileurl.length)
|
res.data.type = judgmentType(code.toLowerCase())
|
if (res.data.type) {
|
images.value = []
|
images.value.push(res.data.url)
|
}
|
desc.value = res.data
|
}
|
})
|
}
|
})
|
}
|
|
// 获取扫码值
|
const onDecode = (data: string[]): void => {
|
openCode.value = false
|
getBarcodeContent({ barcode: data[0] })
|
.then(res => {
|
if (res.code === 200) {
|
if (res.data.barcodeType !== QRCodeType.GZ && res.data.barcodeType !== QRCodeType.GD) {
|
return Toast.fail({ message: '请扫描正确的工装码/工单码' })
|
}
|
info(res.data.id)
|
}
|
})
|
}
|
|
onMounted(() => {
|
info(route.query.id as string)
|
})
|
</script>
|
|
<style lang="scss" scoped>
|
.gy {
|
position: absolute;
|
top: 0;
|
left: 0;
|
width: 100%;
|
height: 100%;
|
.gy_info {
|
padding: 30px;
|
background: white;
|
.gy_info_title {
|
font-size: 32px;
|
font-weight: 500;
|
color: #333333;
|
}
|
.gy_info_box {
|
padding: 24px 30px;
|
background: #F7F7F7;
|
border-radius: 16px;
|
margin-top: 32px;
|
display: flex;
|
align-items: center;
|
flex-wrap: wrap;
|
.gy_info_box_item {
|
width: 100%;
|
display: flex;
|
margin-top: 24px;
|
&:nth-child(1) {
|
margin-top: 0!important;
|
}
|
.label {
|
width: 120px;
|
flex-shrink: 0;
|
font-size: 24px;
|
font-weight: 400;
|
color: #666666;
|
}
|
span {
|
font-size: 24px;
|
font-weight: 400;
|
color: #222222;
|
}
|
}
|
}
|
}
|
.gy_gx {
|
padding: 24px 30px;
|
font-size: 32px;
|
font-weight: 500;
|
color: #222222;
|
}
|
.gy_gxinfo {
|
padding: 30px;
|
background: white;
|
display: flex;
|
flex-direction: column;
|
.gy_gxinfo_item {
|
display: flex;
|
margin-bottom: 30px;
|
&:last-child {
|
margin-bottom: 0!important;
|
}
|
.file {
|
flex: 1;
|
display: flex;
|
flex-direction: column;
|
.file_item {
|
display: flex;
|
align-items: center;
|
margin-top: 30px;
|
&:first-child {
|
margin-top: 0!important;
|
}
|
img {
|
width: 30px;
|
height: 36px;
|
margin-right: 10px;
|
}
|
u {
|
font-size: 26px;
|
font-weight: 400;
|
color: #4275FC;
|
}
|
}
|
}
|
.list {
|
flex: 1;
|
display: flex;
|
flex-wrap: wrap;
|
justify-content: space-between;
|
.list_item {
|
width: 160px;
|
height: 160px;
|
border-radius: 8px;
|
margin-top: 30px;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
overflow: hidden;
|
img {
|
width: 100%;
|
}
|
&:nth-child(1) {
|
margin-top: 0!important;
|
}
|
&:nth-child(2) {
|
margin-top: 0!important;
|
}
|
&:nth-child(3) {
|
margin-top: 0!important;
|
}
|
}
|
}
|
.label {
|
width: 150px;
|
font-size: 26px;
|
font-weight: 400;
|
color: #666666;
|
}
|
span {
|
font-size: 26px;
|
font-weight: 400;
|
color: #222222;
|
}
|
}
|
}
|
.gy_z {
|
height: 168px;
|
}
|
.gy_footer {
|
position: fixed;
|
bottom: 0;
|
left: 30px;
|
padding-bottom: 68px;
|
width: calc(100% - 60px);
|
.gy_footer_sCode {
|
width: 100%;
|
border: none;
|
height: 88px;
|
background: $nav-color;
|
box-shadow: 0 0 12px 0 rgba(0,0,0,0.0800);
|
border-radius: 8px;
|
font-size: 30px;
|
font-weight: 500;
|
color: #FFFFFF;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
}
|
}
|
}
|
</style>
|