品质异常审核

This commit is contained in:
Ledo 2025-07-11 11:10:12 +08:00
parent dabb6a5d7e
commit 48a3315fe1
15 changed files with 139 additions and 289 deletions

View File

@ -122,7 +122,15 @@ public class UnqualifiedNotificationController {
unqualifiedNotificationService.operate(operateReqVO); unqualifiedNotificationService.operate(operateReqVO);
return success(operateReqVO.getId()); return success(operateReqVO.getId());
} }
@PostMapping("/operateWx")
@Operation(summary = "操作更新品质异常通知单")
@PreAuthorize("@ss.hasPermission('heli:unqualified-notification:update')")
@OperateLog(enable = false)
@Transactional(rollbackFor = Exception.class)
public CommonResult<Long> operateWx(@Valid @RequestBody UnqualifiedNotificationSaveReqVO operateReqVO) {
unqualifiedNotificationService.operateWx(operateReqVO);
return success(operateReqVO.getId());
}
@DeleteMapping("/delete") @DeleteMapping("/delete")
@Operation(summary = "删除品质异常通知单审核") @Operation(summary = "删除品质异常通知单审核")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)
@ -167,21 +175,28 @@ public class UnqualifiedNotificationController {
@PreAuthorize("@ss.hasPermission('heli:unqualified-notification:query')") @PreAuthorize("@ss.hasPermission('heli:unqualified-notification:query')")
public CommonResult<PageResult<UnqualifiedNotificationDO>> getUnqualifiedNotificationPageWx(@Valid UnqualifiedNotificationPageReqVO pageReqVO) { public CommonResult<PageResult<UnqualifiedNotificationDO>> getUnqualifiedNotificationPageWx(@Valid UnqualifiedNotificationPageReqVO pageReqVO) {
int i = pageReqVO.getPageNo() * pageReqVO.getPageSize(); int i = pageReqVO.getPageNo() * pageReqVO.getPageSize();
if (pageReqVO.getPageNo() == 1) i = 0;
pageReqVO.setPageNum(i); pageReqVO.setPageNum(i);
PageResult<UnqualifiedNotificationDO> unqualifiedNotificationPage = unqualifiedNotificationService.getUnqualifiedNotificationPageWx(pageReqVO); PageResult<UnqualifiedNotificationDO> unqualifiedNotificationPage = unqualifiedNotificationService.getUnqualifiedNotificationPageWx(pageReqVO);
// List<UnqualifiedNotificationDO> list = unqualifiedNotificationPage.getList(); List<UnqualifiedNotificationDO> list = unqualifiedNotificationPage.getList();
// if(CollUtil.isNotEmpty(list)){ if(CollUtil.isNotEmpty(list)){
// for (UnqualifiedNotificationDO unqualifiedNotificationDO : list) { for (UnqualifiedNotificationDO unqualifiedNotificationDO : list) {
// List<String> fileUrlList = new ArrayList<>(); List<String> fileUrlList = new ArrayList<>();
// List<UnqualifiedNotificationFileDO> unqualifiedNotificationFileDOS = unqualifiedNotificationFileService.queryUnqualifiedNotificationFileBySuperId(unqualifiedNotificationDO.getId(),0); Integer type = 0;
// if(CollUtil.isNotEmpty(unqualifiedNotificationFileDOS)){ if (unqualifiedNotificationDO.getTypeName().equals("过程检")){
// for (UnqualifiedNotificationFileDO unqualifiedNotificationFileDO : unqualifiedNotificationFileDOS) { type = 2;
// fileUrlList.add(unqualifiedNotificationFileDO.getFileUrl()); }else if (unqualifiedNotificationDO.getTypeName().equals("终检")){
// } type = 1;
// unqualifiedNotificationDO.setFileUrlList(fileUrlList); }
// } List<UnqualifiedNotificationFileDO> unqualifiedNotificationFileDOS = unqualifiedNotificationFileService.queryUnqualifiedNotificationFileBySuperId(unqualifiedNotificationDO.getId(),type);
// } if(CollUtil.isNotEmpty(unqualifiedNotificationFileDOS)){
// } for (UnqualifiedNotificationFileDO unqualifiedNotificationFileDO : unqualifiedNotificationFileDOS) {
fileUrlList.add(unqualifiedNotificationFileDO.getFileUrl());
}
unqualifiedNotificationDO.setFileUrlList(fileUrlList);
}
}
}
return success(unqualifiedNotificationPage); return success(unqualifiedNotificationPage);
} }

View File

@ -57,6 +57,6 @@ public interface UnqualifiedNotificationService {
PageResult<UnqualifiedNotificationDO> getUnqualifiedNotificationPageWx(UnqualifiedNotificationPageReqVO pageReqVO); PageResult<UnqualifiedNotificationDO> getUnqualifiedNotificationPageWx(UnqualifiedNotificationPageReqVO pageReqVO);
void operate(UnqualifiedNotificationSaveReqVO operateReqVO); void operate(UnqualifiedNotificationSaveReqVO operateReqVO);
void operateWx(UnqualifiedNotificationSaveReqVO operateReqVO);
PageResult<QualityStatistics> getUnqualifiedNotificationStatisticPage(UnqualifiedNotificationPageReqVO pageReqVO); PageResult<QualityStatistics> getUnqualifiedNotificationStatisticPage(UnqualifiedNotificationPageReqVO pageReqVO);
} }

View File

@ -254,7 +254,39 @@ try {
} }
} }
} }
@Override
public void operateWx(UnqualifiedNotificationSaveReqVO operateReqVO) {
if(operateReqVO.getId() == null){
createUnqualifiedNotification(operateReqVO);
}else{
if (operateReqVO.getType().equals("过程检")){
//过程检
BgMasterLineDO bgMasterLineDO = bgMasterLineMapper.selectById(operateReqVO.getId());
bgMasterLineDO.setNotificationStatus(3);
bgMasterLineDO.setAuditor(operateReqVO.getAuditor().intValue());
bgMasterLineDO.setAudit_time(LocalDateTime.now());
bgMasterLineDO.setAuditOpinion(operateReqVO.getAuditOpinion());
bgMasterLineDO.setConStatus(2);
bgMasterLineMapper.updateById(bgMasterLineDO);
}else {
//终检
ZjBgMasterLineDO bgMasterLineDO = zjBgMasterLineMapper.selectById(operateReqVO.getId());
bgMasterLineDO.setNotificationStatus(3);
bgMasterLineDO.setAuditor(operateReqVO.getAuditor().intValue());
bgMasterLineDO.setAudit_time(LocalDateTime.now());
bgMasterLineDO.setAuditOpinion(operateReqVO.getAuditOpinion());
bgMasterLineDO.setConStatus(2);
zjBgMasterLineMapper.updateById(bgMasterLineDO);
}
// if(operateReqVO.getActive().equals("AUDIT")){
// //质检预警
// bdgzsomthingDO abc= new bdgzsomthingDO();
// abc.setThingname("质检通知单");
// abc.setAttr3(operateReqVO.getCode());//改成单独查询的
// bdgzsomthingMapper.updateok(abc);
// }
}
}
@Override @Override
public PageResult<QualityStatistics> getUnqualifiedNotificationStatisticPage(UnqualifiedNotificationPageReqVO pageReqVO) { public PageResult<QualityStatistics> getUnqualifiedNotificationStatisticPage(UnqualifiedNotificationPageReqVO pageReqVO) {
Page<QualityStatistics> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); Page<QualityStatistics> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());

View File

@ -225,7 +225,7 @@ public class ZjBgMasterLineServiceImpl implements ZjBgMasterLineService {
if(CollUtil.isNotEmpty(list)){ if(CollUtil.isNotEmpty(list)){
for (ZjBgMasterLineDO bgMasterLineDO : list) { for (ZjBgMasterLineDO bgMasterLineDO : list) {
List<String> fileUrlList = new ArrayList<>(); List<String> fileUrlList = new ArrayList<>();
List<UnqualifiedNotificationFileDO> unqualifiedNotificationFileDOS = unqualifiedNotificationFileService.queryUnqualifiedNotificationFileBySuperId(bgMasterLineDO.getId(),1); List<UnqualifiedNotificationFileDO> unqualifiedNotificationFileDOS = unqualifiedNotificationFileService.queryUnqualifiedNotificationFileBySuperId(bgMasterLineDO.getId(),2);
if(CollUtil.isNotEmpty(unqualifiedNotificationFileDOS)){ if(CollUtil.isNotEmpty(unqualifiedNotificationFileDOS)){
for (UnqualifiedNotificationFileDO unqualifiedNotificationFileDO : unqualifiedNotificationFileDOS) { for (UnqualifiedNotificationFileDO unqualifiedNotificationFileDO : unqualifiedNotificationFileDOS) {
fileUrlList.add(unqualifiedNotificationFileDO.getFileUrl()); fileUrlList.add(unqualifiedNotificationFileDO.getFileUrl());

View File

@ -121,7 +121,7 @@
LEFT JOIN base_procedure pr1 ON pr1.id = g.procedure_id LEFT JOIN base_procedure pr1 ON pr1.id = g.procedure_id
left join system_users u on u.id = t.bg_user left join system_users u2 on u2.id = t.auditor left join system_users u on u.id = t.bg_user left join system_users u2 on u2.id = t.auditor
WHERE t.deleted = 0 AND t.tenant_id = 2 AND g.deleted = 0 AND g.tenant_id = 2 WHERE t.deleted = 0 AND t.tenant_id = 2 AND g.deleted = 0 AND g.tenant_id = 2
AND pr1.deleted = 0 AND pr1.tenant_id = 2 AND pr1.deleted = 0 AND pr1.tenant_id = 2 and t.is_qua = 1
AND t.notification_status = #{queryType} AND t.notification_status = #{queryType}
UNION ALL UNION ALL
@ -135,7 +135,7 @@
FROM quality_zj_bg_master_line zj FROM quality_zj_bg_master_line zj
LEFT JOIN quality_zj_pg_master_line g1 ON zj.zj_mx_id = g1.id LEFT JOIN quality_zj_pg_master_line g1 ON zj.zj_mx_id = g1.id
left join system_users u1 on u1.id = zj.bg_user left join system_users u3 on u3.id = zj.auditor left join system_users u1 on u1.id = zj.bg_user left join system_users u3 on u3.id = zj.auditor
WHERE zj.deleted = 0 AND zj.tenant_id = 2 AND g1.deleted = 0 AND g1.tenant_id = 2 WHERE zj.deleted = 0 AND zj.tenant_id = 2 AND g1.deleted = 0 AND g1.tenant_id = 2 and zj.is_qua = 1
AND zj.notification_status = #{queryType} AND zj.notification_status = #{queryType}
) gh ) gh
</select> </select>
@ -157,7 +157,7 @@
LEFT JOIN quality_pg_master_line g ON t.zj_mx_id = g.id LEFT JOIN quality_pg_master_line g ON t.zj_mx_id = g.id
LEFT JOIN base_procedure pr1 ON pr1.id = g.procedure_id LEFT JOIN base_procedure pr1 ON pr1.id = g.procedure_id
left join system_users u on u.id = t.bg_user left join system_users u2 on u2.id = t.auditor left join system_users u on u.id = t.bg_user left join system_users u2 on u2.id = t.auditor
WHERE t.deleted = 0 AND t.tenant_id = 2 AND g.deleted = 0 AND g.tenant_id = 2 WHERE t.deleted = 0 AND t.tenant_id = 2 AND g.deleted = 0 AND g.tenant_id = 2 and t.is_qua = 1
AND pr1.deleted = 0 AND pr1.tenant_id = 2 AND pr1.deleted = 0 AND pr1.tenant_id = 2
UNION ALL UNION ALL
@ -169,7 +169,7 @@
zj.audit_time as auditTime,zj.is_repre as isRepre,zj.is_qua as isQua,zj.notification_status as notificationStatus, zj.audit_time as auditTime,zj.is_repre as isRepre,zj.is_qua as isQua,zj.notification_status as notificationStatus,
zj.remark as remark ,'' as materialName, '' as blueprintNo, '' as procedureName zj.remark as remark ,'' as materialName, '' as blueprintNo, '' as procedureName
FROM quality_zj_bg_master_line zj FROM quality_zj_bg_master_line zj
LEFT JOIN quality_zj_pg_master_line g1 ON zj.zj_mx_id = g1.id LEFT JOIN quality_zj_pg_master_line g1 ON zj.zj_mx_id = g1.id and zj.is_qua = 1
left join system_users u1 on u1.id = zj.bg_user left join system_users u3 on u3.id = zj.auditor left join system_users u1 on u1.id = zj.bg_user left join system_users u3 on u3.id = zj.auditor
WHERE zj.deleted = 0 AND zj.tenant_id = 2 AND g1.deleted = 0 AND g1.tenant_id = 2 WHERE zj.deleted = 0 AND zj.tenant_id = 2 AND g1.deleted = 0 AND g1.tenant_id = 2
) gh ) gh
@ -189,12 +189,13 @@
g.project_name as projectName ,u2.nickname as auditorName,t.audit_opinion as auditOpinion, g.project_name as projectName ,u2.nickname as auditorName,t.audit_opinion as auditOpinion,
t.audit_time as auditTime,t.is_repre as isRepre,t.is_qua as isQua,t.notification_status as notificationStatus, t.audit_time as auditTime,t.is_repre as isRepre,t.is_qua as isQua,t.notification_status as notificationStatus,
t.remark as remark, g.material_name as materialName,g.blueprint_no as blueprintNo, pr1.name as procedureName t.remark as remark, g.material_name as materialName,g.blueprint_no as blueprintNo, pr1.name as procedureName
FROM quality_bg_master_line t FROM quality_bg_master_line t
LEFT JOIN quality_pg_master_line g ON t.zj_mx_id = g.id LEFT JOIN quality_pg_master_line g ON t.zj_mx_id = g.id
LEFT JOIN base_procedure pr1 ON pr1.id = g.procedure_id LEFT JOIN base_procedure pr1 ON pr1.id = g.procedure_id
left join system_users u on u.id = t.bg_user left join system_users u2 on u2.id = t.auditor left join system_users u on u.id = t.bg_user left join system_users u2 on u2.id = t.auditor
WHERE t.deleted = 0 AND t.tenant_id = 2 AND g.deleted = 0 AND g.tenant_id = 2 WHERE t.deleted = 0 AND t.tenant_id = 2 AND g.deleted = 0 AND g.tenant_id = 2
AND pr1.deleted = 0 AND pr1.tenant_id = 2 AND pr1.deleted = 0 AND pr1.tenant_id = 2 and t.is_qua = 1
AND t.notification_status = #{queryType} AND t.notification_status = #{queryType}
UNION ALL UNION ALL
@ -208,7 +209,7 @@
FROM quality_zj_bg_master_line zj FROM quality_zj_bg_master_line zj
LEFT JOIN quality_zj_pg_master_line g1 ON zj.zj_mx_id = g1.id LEFT JOIN quality_zj_pg_master_line g1 ON zj.zj_mx_id = g1.id
left join system_users u1 on u1.id = zj.bg_user left join system_users u3 on u3.id = zj.auditor left join system_users u1 on u1.id = zj.bg_user left join system_users u3 on u3.id = zj.auditor
WHERE zj.deleted = 0 AND zj.tenant_id = 2 AND g1.deleted = 0 AND g1.tenant_id = 2 WHERE zj.deleted = 0 AND zj.tenant_id = 2 AND g1.deleted = 0 AND g1.tenant_id = 2 and zj.is_qua = 1
AND zj.notification_status = #{queryType} AND zj.notification_status = #{queryType}
) gh ) gh
ORDER BY gh.createTime DESC LIMIT #{offset}, #{limit} ORDER BY gh.createTime DESC LIMIT #{offset}, #{limit}

View File

@ -102,12 +102,6 @@
"navigationBarTitleText": "过程检报工" "navigationBarTitleText": "过程检报工"
} }
}, },
{
"path": "pages/pgMaster/components/showpicture",
"style": {
"navigationBarTitleText": "过程检图片"
}
},
{ {
"path": "pages/pgMaster/pgMaster-detail", "path": "pages/pgMaster/pgMaster-detail",
"style": { "style": {

View File

@ -1,118 +0,0 @@
<template>
<view>
<!-- <image v-for="(item, index) in src" :key="index" :src="item" @click="preview(item)" mode="aspectFill" @error="imageError"></image> -->
<htz-image-upload v-model="src" :max="9" :remove="false" :add="false"></htz-image-upload>
</view>
</template>
<script setup>
import { reactive, ref, toRefs,nextTick,onMounted } from 'vue';
import { useRoute } from 'vue-router';
import { onLoad, onShow } from '@dcloudio/uni-app'
import htzImageUpload from '@/components/htz-image-upload/htz-image-upload.vue'
const title = ref('图片预览');
const src = ref([]);
const route = useRoute();
const picture = ref('');
const previewImage = ref(null);
const imageError = (event) => {
console.error('Image load error:', event.detail.errMsg);
};
const preview = (url) => {
// #ifdef MP-WEIXIN
this.$nextTick(()=>{
previewImage.value.open(url);
})
// #endif
// #ifndef MP-WEIXIN
previewImage.value.open(url);
// #endif
};
const onLongpress = e =>{
console.log('当前长按的图片是' + e);
uni.showActionSheet({
itemList: ['转发给朋友', '保存到手机'],
success: function (res) {
console.log('选中了第' + (res.tapIndex + 1) + '个按钮');
},
fail: function (res) {
console.log(res.errMsg);
}
});
}
onLoad( (options) => {
picture.value = options.picture;
console.log(picture.value)
if (picture.value) {
try {
var fileUrlList = decodeURIComponent(picture.value);
src.value = JSON.parse(fileUrlList);
console.log(src.value)
} catch (error) {
console.error('Error parsing picture data:', error);
}
}
})
// const previewImage = (index) => {
// const urls = src.value.map(item => item.url);
// uni.previewImage({
// current: index,
// urls: urls,
// longPressActions: {
// itemList: [''],
// success: (data) => {
// saveImage(urls[data.index]);
// },
// fail: (err) => {
// console.error(err);
// }
// }
// });
// };
const saveImage = (url) => {
uni.downloadFile({
url: url,
success: (res) => {
if (res.statusCode === 200) {
uni.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success: () => {
uni.showToast({
title: '图片保存成功',
icon: 'success'
});
},
fail: () => {
uni.showToast({
title: '图片保存失败',
icon: 'none'
});
}
});
}
}
});
};
</script>
<style>
/* ... other styles ... */
.thumbnail-container {
display: flex;
flex-wrap: wrap;
/* Other styles */
}
.thumbnail-wrapper {
margin: 10px;
/* Other styles */
}
.clickable-image {
cursor: pointer;
}
</style>

View File

@ -412,7 +412,7 @@
id: detailId.value, id: detailId.value,
Authorization: token, Authorization: token,
'Tenant-Id': 2, 'Tenant-Id': 2,
'type':2, 'type':1,
}, },
success: async (uploadFileRes) => { success: async (uploadFileRes) => {
uni.hideLoading(); uni.hideLoading();
@ -498,7 +498,7 @@
<view class="finish" v-if="isShowStart && historyList.length &&detailInfo.pgType != 1" @click="handleComplate"> <view class="finish" v-if="isShowStart && historyList.length &&detailInfo.pgType != 1" @click="handleComplate">
<image class="complate-img" src="/static/images/productionReport-detail-complate.png" <image class="complate-img" src="/static/images/productionReport-detail-complate.png"
mode="scaleToFill" /> mode="scaleToFill" />
生产完成 质检完成
</view> </view>
</view> </view>
</view> </view>
@ -529,10 +529,10 @@
<view class="val high-color">{{ item.amount }}</view> <view class="val high-color">{{ item.amount }}</view>
</view> </view>
</view> </view>
<view class="product-row"> <view class="product-row" v-if="item.workTime">
<view class="row-item"> <view class="row-item">
<view class="label">是否复检</view> <view class="label">是否复检</view>
<view class="val high-color">{{ item.isRepre == 0 ? '是':'否' }}</view> <view class="val high-color">{{ item.isRepre == 1 ? '是':'否' }}</view>
</view> </view>
<view class="row-item"> <view class="row-item">
<view class="label">是否合格</view> <view class="label">是否合格</view>

View File

@ -281,7 +281,7 @@
@click="handleComplate"> @click="handleComplate">
<image class="complate-img" src="/static/images/productionReport-detail-complate.png" <image class="complate-img" src="/static/images/productionReport-detail-complate.png"
mode="scaleToFill" /> mode="scaleToFill" />
生产完成 质检结束
</view> </view>
</view> </view>
</view> </view>

View File

@ -123,10 +123,13 @@ const handleDetail = (item) => {
<view class="cont"> <view class="cont">
<scroll-view enable-back-to-top scroll-y class="data-list" refresher-enabled :refresher-triggered="isTriggered" <scroll-view enable-back-to-top scroll-y class="data-list" refresher-enabled :refresher-triggered="isTriggered"
@refresherrefresh="onRefresherrefresh" @scrolltolower="getListData"> @refresherrefresh="onRefresherrefresh" @scrolltolower="getListData">
<view class="item" v-for="item in dataList" :key="item.id" > <view class="item" @click="handleDetail(item)" v-for="item in dataList" :key="item.id" >
<view class="hd"> <view class="hd">
<view class="num">检验单据</view> <view class="num">检验单据</view>
<view class="statusLabel">单号{{ item.code }}</view> <view class="statusLabel">单号{{ item.code }}</view>
<view class="statusLabelzf" @click="handleDetail(item)" >
{{ statusText }}
</view>
</view> </view>
<view class="md"> <view class="md">
@ -183,7 +186,7 @@ const handleDetail = (item) => {
<text class="blue">{{ item.remark }}</text> <text class="blue">{{ item.remark }}</text>
</view> --> </view> -->
<view class="product-row"> <view class="product-row" v-if="item.auditorName">
<view class="row-item"> <view class="row-item">
<view class="label">审核人<text class="high-color">{{ item.auditorName }}</text></view> <view class="label">审核人<text class="high-color">{{ item.auditorName }}</text></view>
</view> </view>
@ -194,7 +197,6 @@ const handleDetail = (item) => {
</view> </view>
<image v-if="item.notificationStatus == 3" src="/static/images/unqualifiedNotification-agree.png" <image v-if="item.notificationStatus == 3" src="/static/images/unqualifiedNotification-agree.png"
class="icon-status" mode="scaleToFit" /> class="icon-status" mode="scaleToFit" />
<view class="statusText" @click="handleDetail(item)">{{ statusText }}</view>
</view> </view>
<!-- 底部提示文字 --> <!-- 底部提示文字 -->
<view class="loading-text" :style="{ paddingBottom: safeAreaInsets?.bottom + 'px' }"> <view class="loading-text" :style="{ paddingBottom: safeAreaInsets?.bottom + 'px' }">
@ -229,6 +231,20 @@ const handleDetail = (item) => {
font-size: 28rpx; font-size: 28rpx;
color: #737D88; color: #737D88;
} }
.statusLabelzf {
font-size: 24rpx;
position: absolute;
right: 30rpx;
top: 15rpx;
border-radius: 10rpx;
font-size: 24rpx;
padding: 10rpx 30rpx;
border-radius: 10rpx;
font-size: 24rpx;
background: linear-gradient(149deg, #2DACE6 4%, #356899 98%);
color: #fff;
}
} }
.md { .md {

View File

@ -3,7 +3,7 @@
import { formatDate } from '@/utils/index' import { formatDate } from '@/utils/index'
import { onLoad, onShow } from '@dcloudio/uni-app' import { onLoad, onShow } from '@dcloudio/uni-app'
import { useLoginStore } from '@/stores/modules/login' import { useLoginStore } from '@/stores/modules/login'
import { getNotificationDetailAPI } from '@/services/unqualifiedNotification' import { getNotificationDetailAPI,operateWx } from '@/services/unqualifiedNotification'
import { serviceDomain } from '@/services/constants' import { serviceDomain } from '@/services/constants'
const popup = ref<UniHelper.UniPopupInstance>() const popup = ref<UniHelper.UniPopupInstance>()
const userStore = useLoginStore() const userStore = useLoginStore()
@ -147,8 +147,17 @@
// //
const submitForm = async (active) => { const submitForm = async (active) => {
try { try {
const params = {
id: detailInfo.value?.id,
type: typeName.value,
auditOpinion: active,
auditor: userId,
projectId: 0,
projectSubId:0,
status: 1,
notificationStatus:3
}
await operateWx(params);
} catch (error) { } catch (error) {
uni.showToast({ uni.showToast({
icon: 'none', icon: 'none',
@ -161,11 +170,11 @@
// uni.redirectTo({ // uni.redirectTo({
// url, // url,
// }) // })
// const pages = getCurrentPages(); // const pages = getCurrentPages(); //
// await initPage(); await initPage();
// const currentPage = pages[pages.length - 1]; // const currentPage = pages[pages.length - 1]; //
// const url = `/${currentPage.route}?${Object.entries(currentPage.options).map(([key, val]) => `${key}=${val}`).join('&')}`; const url = `/${currentPage.route}?${Object.entries(currentPage.options).map(([key, val]) => `${key}=${val}`).join('&')}`;
// uni.reLaunch({ url }); // uni.reLaunch({ url }); //
} }
@ -190,8 +199,8 @@
<view class="product-item">检验单据{{detailInfo.code}}</view> <view class="product-item">检验单据{{detailInfo.code}}</view>
<image src="/static/images/productionReport-page.png" class="product-img" mode="scaleToFill"> <image src="/static/images/productionReport-page.png" class="product-img" mode="scaleToFill">
</image> </image>
<view :class="[detailInfo.notificationStatus == 2 ? 'had' : 'unhad', 'product-status']">{{ <view :class="[detailInfo.notificationStatus == 3 ? 'had' : 'unhad', 'product-status']">{{
detailInfo.notificationStatus == 1 ? '未审核' : '已审核' }}</view> detailInfo.notificationStatus == 2 ? '未审核' : '已审核' }}</view>
<view class="product-item">项目{{detailInfo.projectName}}</view> <view class="product-item">项目{{detailInfo.projectName}}</view>
<view class="product-item">子项目{{ detailInfo.projectSubCode || '' }} <view class="product-item">子项目{{ detailInfo.projectSubCode || '' }}
@ -250,10 +259,10 @@
</view> </view>
</view> </view>
<view class="action" v-if="detailInfo.notificationStatus !== 2"> <view class="action" v-if="detailInfo.notificationStatus !== 3">
<view class="action-item danger" v-if="detailInfo.notificationStatus !== 2" @click="submitForm(3)">报废</view> <view class="action-item danger" v-if="detailInfo.notificationStatus !== 3" @click="submitForm(3)">报废</view>
<view class="action-item start" v-if="detailInfo.notificationStatus !== 2" @click="submitForm(1)">返修</view> <view class="action-item start" v-if="detailInfo.notificationStatus !== 3" @click="submitForm(1)">返修</view>
<view class="action-item stop" v-if="detailInfo.notificationStatus !== 2" @click="submitForm(2)">让步接收</view> <view class="action-item stop" v-if="detailInfo.notificationStatus !== 3" @click="submitForm(2)">让步接收</view>
</view> </view>
</template> </template>
@ -265,7 +274,20 @@
.data-detail { .data-detail {
border-radius: 10rpx; border-radius: 10rpx;
padding-bottom: 200rpx; padding-bottom: 200rpx;
.statusLabelzf {
font-size: 24rpx;
position: absolute;
right: 30rpx;
top: 15rpx;
border-radius: 10rpx;
font-size: 24rpx;
padding: 10rpx 30rpx;
border-radius: 10rpx;
font-size: 24rpx;
background: linear-gradient(149deg, #ffff00 4%, #cfcf00 98%);
color: #fff;
}
.module { .module {
background: linear-gradient(178deg, #356899 7%, #356899 57%, #F4F6F9 94%); background: linear-gradient(178deg, #356899 7%, #356899 57%, #F4F6F9 94%);
padding: 20rpx; padding: 20rpx;

View File

@ -1,118 +0,0 @@
<template>
<view>
<!-- <image v-for="(item, index) in src" :key="index" :src="item" @click="preview(item)" mode="aspectFill" @error="imageError"></image> -->
<htz-image-upload v-model="src" :max="9" :remove="false" :add="false"></htz-image-upload>
</view>
</template>
<script setup>
import { reactive, ref, toRefs,nextTick,onMounted } from 'vue';
import { useRoute } from 'vue-router';
import { onLoad, onShow } from '@dcloudio/uni-app'
import htzImageUpload from '@/components/htz-image-upload/htz-image-upload.vue'
const title = ref('图片预览');
const src = ref([]);
const route = useRoute();
const picture = ref('');
const previewImage = ref(null);
const imageError = (event) => {
console.error('Image load error:', event.detail.errMsg);
};
const preview = (url) => {
// #ifdef MP-WEIXIN
this.$nextTick(()=>{
previewImage.value.open(url);
})
// #endif
// #ifndef MP-WEIXIN
previewImage.value.open(url);
// #endif
};
const onLongpress = e =>{
console.log('当前长按的图片是' + e);
uni.showActionSheet({
itemList: ['转发给朋友', '保存到手机'],
success: function (res) {
console.log('选中了第' + (res.tapIndex + 1) + '个按钮');
},
fail: function (res) {
console.log(res.errMsg);
}
});
}
onLoad( (options) => {
picture.value = options.picture;
console.log(picture.value)
if (picture.value) {
try {
var fileUrlList = decodeURIComponent(picture.value);
src.value = JSON.parse(fileUrlList);
console.log(src.value)
} catch (error) {
console.error('Error parsing picture data:', error);
}
}
})
// const previewImage = (index) => {
// const urls = src.value.map(item => item.url);
// uni.previewImage({
// current: index,
// urls: urls,
// longPressActions: {
// itemList: [''],
// success: (data) => {
// saveImage(urls[data.index]);
// },
// fail: (err) => {
// console.error(err);
// }
// }
// });
// };
const saveImage = (url) => {
uni.downloadFile({
url: url,
success: (res) => {
if (res.statusCode === 200) {
uni.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success: () => {
uni.showToast({
title: '图片保存成功',
icon: 'success'
});
},
fail: () => {
uni.showToast({
title: '图片保存失败',
icon: 'none'
});
}
});
}
}
});
};
</script>
<style>
/* ... other styles ... */
.thumbnail-container {
display: flex;
flex-wrap: wrap;
/* Other styles */
}
.thumbnail-wrapper {
margin: 10px;
/* Other styles */
}
.clickable-image {
cursor: pointer;
}
</style>

View File

@ -474,7 +474,7 @@
@click="handleComplate"> @click="handleComplate">
<image class="complate-img" src="/static/images/productionReport-detail-complate.png" <image class="complate-img" src="/static/images/productionReport-detail-complate.png"
mode="scaleToFill" /> mode="scaleToFill" />
生产完成 质检结束
</view> </view>
</view> </view>
</view> </view>

View File

@ -24,7 +24,13 @@ export const getNotificationDetailAPI = (data: Object) => {
data, data,
}) })
} }
export const operateWx = (data: Object) => {
return http<any[]>({
method: 'POST',
url: '/heli/unqualified-notification/operateWx',
data,
})
}
// 获取零件分页 // 获取零件分页
export const getBomPageAPI = (data: Object) => { export const getBomPageAPI = (data: Object) => {
return http<any[]>({ return http<any[]>({

Binary file not shown.

Before

Width:  |  Height:  |  Size: 383 KiB