Files
entityControl_mobile/pagesMine/auditDetail.vue
2026-03-06 16:50:46 +08:00

209 lines
6.1 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="container">
<view v-show="detailData.billType == 0"><text>入库类型</text>{{ detailData.rkTypeName }}</view>
<view v-show="detailData.billType == 1"><text>出库类型</text>{{ detailData.ckTypeName }}</view>
<view><text>所属仓库</text>{{ detailData.cangkuName }}</view>
<view><text>物资类型</text>{{ detailData.wlTypeName }}</view>
<view><text>理货员</text>{{ detailData.lihuoYName }}</view>
<view><text>入库时间</text>{{ parseTime(detailData.createTime) }}</view>
<view class="box">
<view v-for="item in detailData.scenePhotos" class="item">
<view><text>项目描述</text>{{ item.xmMs }}</view>
<view><text>供应商</text>{{ item.gysMc }}</view>
<view><text>物料号</text>{{ item.wlNo }}</view>
<view><text>物料描述</text>{{ item.wlMs }}</view>
<view><text>数量</text>{{ item.realQty }}{{ item.dw }}</view>
<view><text>项目定义号</text>{{ item.xmNo }}</view>
<view><text>存放位置</text>{{ item.pcode || "-" }}</view>
<!-- <view><text>身份码</text>{{ item.entityId || "-" }}</view> -->
<view><text>备注</text>{{ item.rkRemark || "-" }}</view>
<view><text>现场照片</text><uv-image height="80" mode="heightFix" @tap="previewImage(item.signUrl)" :src="item.signUrl"></uv-image></view>
</view>
</view>
<view class="btn">
<uv-button type="error" text="确定" size="large" style="width: 48%;" @tap="openModal(0)"> </uv-button>
<uv-button type="primary" text="确定" size="large" class="mainBtn" style="width: 48%;" @tap="openModal(1)"> </uv-button>
</view>
<uv-modal ref="auditModalRef" title="审批信息" @confirm="auditConfirm" :showCancelButton="true" :closeOnClickOverlay="false" asyncClose>
<view class="slot-content" style="width: 100%;">
<uv-form labelPosition="top" :model="auditForm" labelWidth="80" :rules="auditRules" ref="auditFormRef">
<uv-form-item label="签字" prop="approverSignUrl" borderBottom v-if="auditStatus == 1">
<uv-button text="去签名" v-if="!auditForm.approverSignUrl" @tap="goSign"></uv-button>
<uv-image height="80" mode="heightFix" v-if="auditForm.approverSignUrl" @tap="previewImage(auditForm.approverSignUrl)" :src="auditForm.approverSignUrl"></uv-image>
</uv-form-item>
<uv-form-item label="备注" prop="remark" borderBottom>
<uv-textarea v-model="auditForm.remark" placeholder="备注" />
</uv-form-item>
</uv-form>
</view>
</uv-modal>
</view>
</template>
<script setup>
import { ref, computed, getCurrentInstance, onUnmounted } from "vue";
import { onLoad, onShow, onPageScroll } from "@dcloudio/uni-app";
import { passedAudit } from "@/api/mine"
const instance = getCurrentInstance().proxy
const detailData = ref({})
onLoad(() => {
const eventChannel = instance.getOpenerEventChannel();
// 监听redactInfo事件获取上一页面通过eventChannel传送到当前页面的数据
eventChannel.on('auditInfo', function(data) {
detailData.value = data.info
console.log("获取到信息", data.info)
});
})
// 预览
const previewImage = (img) => {
let arr = []
arr.push(img)
uni.previewImage({
urls: arr,
})
}
const auditModalRef = ref(null)
const auditFormRef = ref(null)
const auditStatus = ref(0)
const openModal = (status) => {
auditForm.value.approverSignUrl = ""
auditForm.value.remark = ""
auditStatus.value = status
auditModalRef.value.open();
}
const auditForm = ref({
approverSignUrl: "",
remark: '',
})
const auditRules = computed(() => ({
'approverSignUrl': {
type: 'string',
required: auditStatus.value == 1,
message: '请手写签字',
trigger: ['blur', 'change']
},
'remark': {
type: 'string',
required: auditStatus.value == 0,
message: '请填写备注',
trigger: ['blur', 'change']
},
}));
// 去签名页面
const goSign = () => {
// 移除之前的事件监听器避免重复
uni.$off('getSignImg')
uni.navigateTo({
url: '/pagesMine/signature',
success: () => {
// 监听签名返回事件
const eventHandler = (e) => {
console.log('getSignImg', e)
// signBase64.value = e.base64
// signTempimg.value = e.path
auditForm.value.approverSignUrl = e.url
}
// 监听一次自定义事件
uni.$once('getSignImg', eventHandler)
// 页面卸载时移除监听(避免内存泄漏)
// uni.$off('getSignImg', eventHandler)
}
})
}
const auditConfirm = () => {
auditFormRef.value.validate().then(res => {
let obj = {
billNo: detailData.value.billNo,
id: detailData.value.id,
rkId: detailData.value.rkId,
remark: auditForm.value.remark,
auditResult: auditStatus.value,
}
if (auditStatus.value == 1) {
obj.approverSignUrl = auditForm.value.approverSignUrl
}
passedAudit(obj).then(res => {
auditModalRef.value.close()
uni.showToast({
title: res.msg,
icon: 'none',
mask: true,
dution: 2000
})
setTimeout(() => {
uni.navigateBack({})
}, 2000)
})
}).catch(errors => {
auditModalRef.value.closeLoading()
})
}
// 组件卸载时移除事件监听器
onUnmounted(() => {
console.log("协助")
uni.$off('getSignImg')
})
</script>
<style scoped lang="scss">
.container {
position: relative;
padding: 32rpx;
padding-bottom: 120rpx;
line-height: 50rpx;
font-size: 28rpx;
border-radius: 8rpx;
color: #333;
text{
color: #666;
}
.box{
.item {
background: #efefef;
padding: 20rpx;
margin-top: 20rpx;
.title {
font-size: 32rpx;
font-weight: bold;
display: flex;
align-items: center;
}
}
}
.btn{
position: fixed;
width: calc(100vw - 64rpx);
bottom: 0;
left: 32rpx;
z-index: 99;
display: flex;
align-items: center;
justify-content: space-between;
}
::v-deep .uv-input__content{
flex-direction: column;
align-items: flex-start;
}
}
</style>