Browse Source

feat: add 返工返修批量与单件合并(暂定)

master
TengXF 6 months ago
parent
commit
11edabdacc
  1. 7
      src/pages.json
  2. 430
      src/pages/mes/rework/index.vue

7
src/pages.json

@ -2045,6 +2045,13 @@
"enablePullDownRefresh": true "enablePullDownRefresh": true
} }
}, },
{
"path": "pages/mes/rework/index",
"style": {
"navigationBarTitleText": "返工返修",
"enablePullDownRefresh": true
}
},
{ {
"path": "pages/mes/reworkBatch/create", "path": "pages/mes/reworkBatch/create",
"style": { "style": {

430
src/pages/mes/rework/index.vue

@ -0,0 +1,430 @@
<template>
<!-- 列表展示标准模版 -->
<view class="container">
<view>
<u-subsection :list="tabsList" v-model="current" @change="tabsChange"></u-subsection>
<!-- <u-tabs-swiper :list="tabsList" :is-scroll="true" :current="current" @change="tabsChange"></u-tabs-swiper> -->
</view>
<view v-if="current==0">
<view>
<!-- <u-subsection :list="handleList" v-model="handleCurrent" @change="tabsChange"></u-subsection> -->
<u-tabs-swiper :list="handleList" :is-scroll="true" :current="handleCurrent" @change="handleChange"></u-tabs-swiper></view>
<view class="list">
<view class="item" v-for="(item,index) in list" :key="index" @click="openDetail(item)">
<view class="title">
<view class="title-txt">
{{item.reworkbillNo}}
</view>
<view class="time">
{{`${$time.formatDate(item.createTime)}`}}
</view>
</view>
<view class="dec">
<view>处理状态</view>
<view>
<u-tag text="待处理" type="warning" mode="light" shape="circle" v-if="item.status==1" :style="{ width: '65px' }" />
<u-tag text="已完成" type="success" mode="light" shape="circle" v-if="item.status==2" :style="{ width: '65px' }" />
</view>
</view>
<view class="dec">
<view>产品编码</view><view>{{item.productionCode}}</view>
</view>
<view class="dec">
<view>工作类型</view><view>{{item.status == '1'?'返工' :'返修'}}</view>
</view>
<view class="dec">
<view>是否有替换件</view><view>{{item.replaceFlag == 'TRUE'?'是' :'否'}}</view>
</view>
<view class="dec">
<view>返修人员</view><view>{{item.reworkPersoncode}}</view>
</view>
<view class="dec" v-if="item.status!=1">
<view>返修时间</view><view>{{`${$time.formatDate(item.reworkTime)}`}}</view>
</view>
<view class="dec" v-if="item.status==3">
<view>返修结果</view><view>{{item.reworkResult}}</view>
</view>
<view class="dec">
<view v-if="item.status==1">
<u-button size="medium" type="primary" @click="handleItem(item)" >去处理</u-button>
</view>
<view v-if="item.status==2">
<u-button size="medium" type="error" @click="handleRefuse(item)" >退回</u-button>
</view>
<view v-if="item.status==3">
<u-button size="medium" type="error" @click="handleRefuse(item)" >退回</u-button>
</view>
</view>
</view>
<view style="height: 94rpx;padding-top: 30rpx;">
<u-loadmore :status="status" v-if="status != 'loadmore'" />
</view>
</view>
</view>
<view v-if="current==1">
<view>
<!-- <u-subsection :list="handleList" v-model="handleCurrent" @change="handleChange"></u-subsection></view> -->
<u-tabs-swiper :list="handleList" :is-scroll="true" :current="handleCurrent" @change="handleChange"></u-tabs-swiper></view>
<view class="list">
<view class="item" v-for="(item,index) in list" :key="index" @click="openDetail(item)">
<view class="title">
<view class="title-txt">
{{item.reworkbillNo}}
</view>
<view class="time">
{{`${$time.formatDate(item.createTime)}`}}
</view>
</view>
<view class="dec">
<view>处理状态</view>
<view>
<u-tag text="待处理" type="warning" mode="light" shape="circle" v-if="item.status==1" :style="{ width: '65px' }" />
<u-tag text="已完成" type="success" mode="light" shape="circle" v-if="item.status==2" :style="{ width: '65px' }" />
</view>
</view>
<view class="dec">
<view>批次号</view><view>{{item.batchNo}}</view>
</view>
<view class="dec">
<view>产品编码</view><view>{{item.productionCode}}</view>
</view>
<view class="dec">
<view>产品数量</view><view>{{item.productionCount}}</view>
</view>
<view class="dec">
<view>工作类型</view><view>{{item.status == '1'?'返工' :'返修'}}</view>
</view>
<view class="dec">
<view>是否有替换件</view><view>{{item.replaceFlag == 'TRUE'?'是' :'否'}}</view>
</view>
<view class="dec">
<view>返修人员</view><view>{{item.reworkPersoncode}}</view>
</view>
<view class="dec" v-if="item.status!=1">
<view>返修时间</view><view> {{`${$time.formatDate(item.reworkTime)}`}}</view>
</view>
<view class="dec" v-if="item.status==3">
<view>返修结果</view><view>{{item.reworkResult}}</view>
</view>
<view class="dec">
<view v-if="item.status==1">
<u-button size="medium" type="primary" @click="handleItem(item)" >去处理</u-button>
</view>
<view v-if="item.status==2">
<u-button size="medium" type="error" @click="handleRefuse(item)" >退回</u-button>
</view>
<view v-if="item.status==3">
<u-button size="medium" type="error" @click="handleRefuse(item)" >退回</u-button>
</view>
</view>
</view>
<view style="height: 94rpx;padding-top: 30rpx;">
<u-loadmore :status="status" v-if="status != 'loadmore'" />
</view>
</view>
</view>
<view style="height: constant(safe-area-inset-bottom); height: env(safe-area-inset-bottom);"></view>
<requestButton @goScan='openScanDetailPopup'></requestButton>
</view>
<u-popup v-model="showType" mode="bottom" border-radius="14" length="30%">
<view style="margin-top: 30px; margin-left: 30px;">
<u-input v-model="reworkPersoncode" placeholder="请输入返工返修人员" />
</view>
<view class="btns">
<u-button class="sure" @click="handleReceive">确定</u-button>
</view>
</u-popup>
</template>
<script setup lang="ts">
import requestButton from '@/mycomponents/button/requestButton.vue'
/*初始化*/
import {
onLoad,
onShow,
onReachBottom
} from '@dcloudio/uni-app'
import {
ref,
getCurrentInstance
} from 'vue'
/*引入API*/
import * as reworkSingleApi from "@/api/mes/reworkSingle/reworkSingleApi.ts"
import * as reworkBatchApi from "@/api/mes/reworkBatch/reworkBatchApi.ts"
const { proxy } = getCurrentInstance()
const paramData = ref()
const tabsList = ref([{name:'单件返修'},{name:'批量返修'}])
const handleList = ref([{name:'待处理'},{name:'已完成'}])
const reworkPersoncode = ref()
const showType = ref(false)
const current = ref(0)
const handleCurrent = ref(0)
/*分页参数*/
const params = ref({
pageNo: 1,
pageSize: 10,
status: 1
})
/*是否显示"没有更多了"*/
const status = ref('loadmore')
/*列表数据集*/
const list = ref([])
const batchList = ref([])
/*列表调用API方法*/
async function getList() {
if (status.value == 'nomore') return;
status.value = 'loading';
proxy.$modal.loading('加载中')
await reworkSingleApi.getPage(params.value).then((res) => {
proxy.$modal.closeLoading()
if (res.data.list.length > 0) {
list.value = list.value.concat(res.data.list);
params.value.pageNo++;
status.value = 'loadmore'
} else {
status.value = 'nomore'
}
}).catch(() => {
proxy.$modal.closeLoading()
})
}
async function getBatchList() {
if (status.value == 'nomore') return;
status.value = 'loading';
proxy.$modal.loading('加载中')
await reworkBatchApi.getPage(params.value).then((res) => {
proxy.$modal.closeLoading()
if (res.data.list.length > 0) {
batchList.value = list.value.concat(res.data.list);
params.value.pageNo++;
status.value = 'loadmore'
} else {
status.value = 'nomore'
}
}).catch(() => {
proxy.$modal.closeLoading()
})
}
//
function handleItem(index){
reworkPersoncode.value = null
paramData.value = index
showType.value = true
}
//
function handleReceive(){
if(reworkPersoncode.value != '' && reworkPersoncode.value.trim() != ''){
paramData.value.reworkPersoncode=reworkPersoncode.value
changeStatus(2)
showType.value = false
}
else{
proxy.$modal.showToast('请输入返修人员')
reworkPersoncode.value = null
}
}
//
function handleSuspend(index){
proxy.$modal.confirm('确定提交吗').then(() => {
paramData.value = index
changeStatus(1)
})
}
//
function handleSuccess(index){
proxy.$modal.confirm('确定提交吗').then(() => {
paramData.value = index
changeStatus(3)
})
}
//
function handleRefuse(index){
proxy.$modal.confirm('确定提交吗').then(() => {
paramData.value = index
changeStatus(1)
})
}
//
function changeStatus(val){
paramData.value.status = val
proxy.$modal.loading('加载中')
reworkSingleApi.update(paramData.value).then((res) => {
proxy.$modal.closeLoading()
if (res.data) {
list.value=[]
proxy.$modal.showToast('成功')
setTimeout(() => {
proxy.$modal.closeLoading()
params.value.pageNo = 1
params.value.pageSize = 5
getList();
}, 500)
} else {
proxy.$modal.showToast('失败')
proxy.$modal.closeLoading()
}
}).catch(() => {
proxy.$modal.closeLoading()
})
}
function tabsChange(curr){
handleCurrent.value = 0
current.value = curr
params.value.status = (curr + 1)
params.value.pageNo = 1
params.value.pageSize = 5
list.value = []
batchList.value = []
status.value = 'loadmore'
if(current.value==0){
getList()
}else{
getBatchList()
}
}
function handleChange(curr){
handleCurrent.value = curr
params.value.status = (curr + 1)
params.value.pageNo = 1
params.value.pageSize = 5
list.value = []
status.value = 'loadmore'
if(current.value==0){
getList()
}else{
getBatchList()
}
}
/*打开详情页*/
function openDetail(item) {
if(item.ststus==3){
// const objString = JSON.stringify(item);
// proxy.$tab.navigateTo(`/pages/mes/reworkSingle/detail?obj=${encodeURIComponent(objString)}`)
// proxy.$modal.loading('')
// setTimeout(function() {
// proxy.$modal.closeLoading();
// }, 500);
}
}
function openScanDetailPopup() {
proxy.$tab.navigateTo(`/pages/mes/reworkSingle/create`)
proxy.$modal.loading('正在打开')
setTimeout(function() {
proxy.$modal.closeLoading();
}, 500);
}
/*通用方法*/
onShow(() => {
params.value.pageNo = 1
list.value = []
status.value = 'loadmore'
getList()
})
onReachBottom(() => {
getList()
})
</script>
<style lang="scss" scoped>
.container{
background: #f5f5f5;
min-height: 100vh;
}
.list {
background: #f5f5f5;
margin-top: 20rpx;
.item {
padding: 30rpx 30rpx 0px 30rpx;
margin-top: 20rpx;
background: white;
position: relative;
.title {
display: flex;
align-items: center;
padding-bottom: 20rpx;
.title-txt {
color: #409eff;
font-weight: bold;
font-size: 36rpx;
width: 0px;
flex: 1;
word-wrap: break-word;
}
.time {
color: #919191;
}
}
.dec {
padding-bottom: 20rpx;
display: flex;
align-items: center;
view {
&:nth-child(1){
width: 160rpx;;
}
&:nth-child(2){
color: #999999;
flex: 1;
width: 0px;
word-wrap: break-word;
}
}
}
.last {
padding-bottom: 30rpx;
}
.bottom {
display: flex;
justify-content: space-between;
align-items: center;
border-top: 1px solid #E4E4E4;
padding: 20rpx 0px;
height: 90rpx;
}
}
}
.btns {
display: flex;
button {
flex: 1;
}
.sure {
background: #409eff;
color: white;
border-radius: 0px;
margin-top: 60px;
&::after {
border: 1px solid #409eff;
border-radius: 0px;
}
}
.reset {
background: #ff7a45;
border-radius: 0px;
&::after {
border-radius: 0px;
}
}
}
</style>
Loading…
Cancel
Save