品质异常审核

This commit is contained in:
Ledo 2025-07-11 13:57:06 +08:00
parent e8c40da222
commit d00cf61c1d
12 changed files with 131 additions and 35 deletions

View File

@ -174,8 +174,7 @@ public class UnqualifiedNotificationController {
@Operation(summary = "获得品质异常通知单审核分页") @Operation(summary = "获得品质异常通知单审核分页")
@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()-1) * 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();
@ -200,12 +199,32 @@ public class UnqualifiedNotificationController {
return success(unqualifiedNotificationPage); return success(unqualifiedNotificationPage);
} }
@GetMapping("/countWx")
@Operation(summary = "获得品质异常通知单审核分页")
@PreAuthorize("@ss.hasPermission('heli:unqualified-notification:query')")
public CommonResult<Long> countWx(@Valid UnqualifiedNotificationPageReqVO pageReqVO) {
return success(unqualifiedNotificationService.countWx(pageReqVO));
}
@GetMapping("/detailWx") @GetMapping("/detailWx")
@Operation(summary = "获得品质异常通知单审核分页") @Operation(summary = "获得品质异常通知单审核分页")
@PreAuthorize("@ss.hasPermission('heli:unqualified-notification:query')") @PreAuthorize("@ss.hasPermission('heli:unqualified-notification:query')")
public CommonResult<UnqualifiedNotificationDO> detailWx(@Valid UnqualifiedNotificationPageReqVO pageReqVO) { public CommonResult<UnqualifiedNotificationDO> detailWx(@Valid UnqualifiedNotificationPageReqVO pageReqVO) {
return success(unqualifiedNotificationService.getUnqualifiedNotificationWxById(pageReqVO)); UnqualifiedNotificationDO unqualifiedNotificationDO = unqualifiedNotificationService.getUnqualifiedNotificationWxById(pageReqVO);
List<String> fileUrlList = new ArrayList<>();
Integer type = 0;
if (unqualifiedNotificationDO.getTypeName().equals("过程检")){
type = 2;
}else if (unqualifiedNotificationDO.getTypeName().equals("终检")){
type = 1;
}
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(unqualifiedNotificationDO);
} }
@GetMapping("/export-excel") @GetMapping("/export-excel")

View File

@ -46,7 +46,7 @@ public interface UnqualifiedNotificationService {
* @return 品质异常通知单审核 * @return 品质异常通知单审核
*/ */
UnqualifiedNotificationDO getUnqualifiedNotification(Long id); UnqualifiedNotificationDO getUnqualifiedNotification(Long id);
Long countWx(@Valid UnqualifiedNotificationPageReqVO updateReqVO);
/** /**
* 获得品质异常通知单审核分页 * 获得品质异常通知单审核分页
* *

View File

@ -240,6 +240,11 @@ try {
return pageResult; return pageResult;
} }
@Override @Override
public Long countWx(UnqualifiedNotificationPageReqVO pageReqVO) {
PageResult<UnqualifiedNotificationDO> pageResult = new PageResult<>();
return unqualifiedNotificationMapper.selectCountPageWx(2, 5,5);
}
@Override
public void operate(UnqualifiedNotificationSaveReqVO operateReqVO) { public void operate(UnqualifiedNotificationSaveReqVO operateReqVO) {
if(operateReqVO.getId() == null){ if(operateReqVO.getId() == null){
createUnqualifiedNotification(operateReqVO); createUnqualifiedNotification(operateReqVO);

View File

@ -106,7 +106,7 @@
}, },
/* */ /* */
"mp-weixin" : { "mp-weixin" : {
"appid" : "wxa29fe397274614b5", "appid" : "wx48fad418e2753b1c",
"setting" : { "setting" : {
"minified" : true, "minified" : true,
"urlCheck" : true, "urlCheck" : true,

View File

@ -111,6 +111,7 @@ const getHomeCategory = async () => {
const unReadCount = await getUnreadMessage(); const unReadCount = await getUnreadMessage();
const count = await countReview(); const count = await countReview();
const unqualifiedNotificationCount = await countUnqualifiedNotification(query);
// //
const cgdsp = categoryList.value.find( const cgdsp = categoryList.value.find(
(e) => e.path === "cgdsp" (e) => e.path === "cgdsp"
@ -118,6 +119,9 @@ const getHomeCategory = async () => {
const msgItem = categoryList.value.find( const msgItem = categoryList.value.find(
(e) => e.path === "messageNotification" (e) => e.path === "messageNotification"
); );
const unqualifiedNotificationItem = categoryList.value.find(
(e) => e.path === "unqualifiedNotification"
);
if (cgdsp){ if (cgdsp){
cgdsp.unReadCount = count; cgdsp.unReadCount = count;
// cgdsp.auth=true // cgdsp.auth=true
@ -126,6 +130,11 @@ const getHomeCategory = async () => {
msgItem.unReadCount = unReadCount; msgItem.unReadCount = unReadCount;
// msgItem.auth=true // msgItem.auth=true
} }
if(unqualifiedNotificationItem){
unqualifiedNotificationItem.unReadCount = unqualifiedNotificationCount
}
if (loginStore.userInfo.userId) { if (loginStore.userInfo.userId) {
const obj = { const obj = {
...loginStore.userInfo, ...loginStore.userInfo,

View File

@ -147,7 +147,7 @@
// uni.redirectTo({ // uni.redirectTo({
// url, // url,
// }) // })
await initPage();
const pages = getCurrentPages(); // const pages = getCurrentPages(); //
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('&')}`;
@ -200,8 +200,8 @@
if (isQua.value == 1) { if (isQua.value == 1) {
await imgUpload() await imgUpload()
} }
const pages = getCurrentPages(); // const pages = getCurrentPages(); //
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 }); //
@ -223,8 +223,8 @@
if (isQua.value == 1) { if (isQua.value == 1) {
await imgUpload() await imgUpload()
} }
const pages = getCurrentPages(); // const pages = getCurrentPages(); //
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 }); //
@ -292,8 +292,6 @@
}) })
} finally { } finally {
isLoading.value = false isLoading.value = false
await initPage()
const pages = getCurrentPages(); // const pages = getCurrentPages(); //
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('&')}`;

View File

@ -127,7 +127,7 @@ const handleDetail = (item) => {
<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)" > <view class="statusLabelzf" >
{{ statusText }} {{ statusText }}
</view> </view>
</view> </view>
@ -136,7 +136,14 @@ const handleDetail = (item) => {
<view class="product-item">项目<text class="blue">{{ item.projectName}}</text> <view class="product-item">项目<text class="blue">{{ item.projectName}}</text>
</view> </view>
<view class="product-item">通知日期<text class="">{{ item.createTime }}</text></view> <view class="product-item">通知日期<text class="">{{ item.createTime }}</text></view>
<view class="product-row" v-if="item.typeName == '过程检'">
<view class="row-item">
<view class="label">零件名称<text class="blue">{{ item.materialName }}</text></view>
</view>
<view class="row-item">
<view class="label">工序<text class="blue">{{ item.procedureName }}</text></view>
</view>
</view>
<view class="product-row"> <view class="product-row">
<view class="row-item"> <view class="row-item">
<view class="label">质检员<text class="blue">{{ item.creatorName }}</text></view> <view class="label">质检员<text class="blue">{{ item.creatorName }}</text></view>

View File

@ -143,8 +143,25 @@
uni.reLaunch({ url }); // uni.reLaunch({ url }); //
} }
} }
const range = [
{ value: 1, text: "返修" },
{ value: 2, text: "让步接收" },
{ value: 3, text: "报废" },
]
// //
const handleOk = async() =>{
if(detailInfo.value.auditOpinion){
await submitForm(detailInfo.value.auditOpinion);
}else{
uni.showToast({
icon: 'none',
duration: 3000,
title: '请选择审核意见后提交',
})
return;
}
}
const submitForm = async (active) => { const submitForm = async (active) => {
try { try {
const params = { const params = {
@ -187,7 +204,9 @@
await getDetailData(idValue.value, typeName.value) await getDetailData(idValue.value, typeName.value)
} }
const audit = ()=>{
popup.value.open()
}
const detailId = ref() const detailId = ref()
</script> </script>
@ -207,6 +226,14 @@
{{' ' + detailInfo.projectSubName }} {{' ' + detailInfo.projectSubName }}
</view> </view>
<view class="product-item">通知日期{{detailInfo.createTime}}</view> <view class="product-item">通知日期{{detailInfo.createTime}}</view>
<view class="product-row" v-if="detailInfo.typeName == '过程检'">
<view class="row-item">
<view class="label">零件名称<text class="blue">{{ detailInfo.materialName }}</text></view>
</view>
<view class="row-item">
<view class="label">工序<text class="blue">{{ detailInfo.procedureName }}</text></view>
</view>
</view>
<view class="product-row"> <view class="product-row">
<view class="row-item"> <view class="row-item">
<view class="label">质检员<text class="blue">{{ detailInfo.creatorName }}</text></view> <view class="label">质检员<text class="blue">{{ detailInfo.creatorName }}</text></view>
@ -260,11 +287,36 @@
</view> </view>
</view> </view>
<view class="action" v-if="detailInfo.notificationStatus !== 3"> <view class="action" v-if="detailInfo.notificationStatus !== 3">
<view class="action-item danger" v-if="detailInfo.notificationStatus !== 3" @click="submitForm(3)">报废</view> <!-- <view class="action-item info" v-if="detailInfo.notificationStatus !== 3" @click="submitForm(3)">报废</view>
<view class="action-item start" v-if="detailInfo.notificationStatus !== 3" @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 !== 3" @click="submitForm(2)">让步接收</view> <view class="action-item stop" v-if="detailInfo.notificationStatus !== 3" @click="submitForm(2)">让步接收</view> -->
<view class="action-item info" v-if="detailInfo.notificationStatus !== 3" @click="cancel()">取消</view>
<view class="action-item start" v-if="detailInfo.notificationStatus !== 3" @click="audit()">审核</view>
<!-- <view class="action-item stop" v-if="detailInfo.notificationStatus !== 3" @click="submitForm(2)">让步接收</view> -->
</view> </view>
<uni-popup class="popup" ref="popup" :mask-click="false" type="bottom" background-color="#fff">
<view class="title">
<view class="text">审核信息</view>
<!-- <view class="close" @click="handleClose">X</view> -->
</view>
<scroll-view scroll-y="true" style="height: 100%;">
<view class="cont">
<view class="item">
<view class="label"><span class="star">*</span>审核意见</view>
<uni-data-select
v-model="detailInfo.auditOpinion"
:localdata="range"
></uni-data-select>
</view>
</view>
</scroll-view>
<view class="ok" @click="handleOk">确定</view>
</uni-popup>
</template> </template>
</view> </view>
@ -513,7 +565,9 @@
width: 272rpx; width: 272rpx;
height: 86rpx; height: 86rpx;
border-radius: 24rpx; border-radius: 24rpx;
&.info {
background: linear-gradient(157deg, #A9A9A9 -3%, #A9A9A9 90%);
}
&.start { &.start {
background: linear-gradient(157deg, #2EACE6 -3%, #356899 90%); background: linear-gradient(157deg, #2EACE6 -3%, #356899 90%);
} }

View File

@ -77,9 +77,6 @@ const handlePopClose = (flag) => {
<dataItem ref="childRef" v-if="item.isRender" :order-state="item.orderState" /> <dataItem ref="childRef" v-if="item.isRender" :order-state="item.orderState" />
</swiper-item> </swiper-item>
</swiper> </swiper>
<!-- <view class="float-btn" :style="{bottom: btnTop + 'px', right: btnLeft + 'px'}" @click="handleAdd">
<image class="add" src="/static/images/unqualifiedNotification-add.png" mode="scaleToFill" />
</view> -->
<!-- uni-ui 弹出层 --> <!-- uni-ui 弹出层 -->
<uni-popup ref="popup" :mask-click="false" type="bottom" background-color="#fff"> <uni-popup ref="popup" :mask-click="false" type="bottom" background-color="#fff">
<detailPanel v-if="isShowPop" @close="handlePopClose" /> <detailPanel v-if="isShowPop" @close="handlePopClose" />

View File

@ -147,7 +147,7 @@
// uni.redirectTo({ // uni.redirectTo({
// url, // url,
// }) // })
await initPage();
const pages = getCurrentPages(); // const pages = getCurrentPages(); //
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('&')}`;
@ -194,8 +194,8 @@
if (isQua.value == 1) { if (isQua.value == 1) {
await imgUpload() await imgUpload()
} }
const pages = getCurrentPages(); // const pages = getCurrentPages(); //
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 }); //
@ -217,8 +217,8 @@
if (isQua.value == 1) { if (isQua.value == 1) {
await imgUpload() await imgUpload()
} }
const pages = getCurrentPages(); //
await initPage(); await initPage();
const pages = getCurrentPages(); //
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 }); //
@ -287,7 +287,7 @@
}) })
} finally { } finally {
isLoading.value = false isLoading.value = false
await initPage()
const pages = getCurrentPages(); // const pages = getCurrentPages(); //
const currentPage = pages[pages.length - 1]; // const currentPage = pages[pages.length - 1]; //
@ -396,7 +396,6 @@
icon: 'none', // iconnone icon: 'none', // iconnone
duration: 2000 duration: 2000
}); });
await initPage()
popup.value.close(); popup.value.close();
}, },
@ -408,7 +407,6 @@
icon: 'none', // iconnone icon: 'none', // iconnone
duration: 2000 duration: 2000
}); });
await initPage()
}, },
complete: () => { complete: () => {
uni.hideLoading(); uni.hideLoading();
@ -505,10 +503,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 v-if="item.workTime" class="product-row">
<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

@ -17,7 +17,13 @@ export const getHomeCategoryAPI = () => {
url: '/system/auth/get-permission-info', url: '/system/auth/get-permission-info',
}) })
} }
export const countUnqualifiedNotification = (data: Object) => {
return http<any[]>({
method: 'GET',
url: '/heli/unqualified-notification/countWx',
data,
})
}
export const getUnreadMessage = () => { export const getUnreadMessage = () => {
return http<CategoryItem[]>({ return http<CategoryItem[]>({
method: 'GET', method: 'GET',

View File

@ -31,6 +31,9 @@ export const operateWx = (data: Object) => {
data, data,
}) })
} }
// 获取零件分页 // 获取零件分页
export const getBomPageAPI = (data: Object) => { export const getBomPageAPI = (data: Object) => {
return http<any[]>({ return http<any[]>({