定做单审核

This commit is contained in:
ljx120 2025-01-07 17:29:45 +08:00
parent d617253361
commit 1cfca59074
4 changed files with 431 additions and 47 deletions

View File

@ -293,7 +293,19 @@
}
},
{
"path" : "pages/distribution/detail",
"path" : "pages/distribution/detailSpot",
"style" :
{
"navigationStyle": "custom",
"enablePullDownRefresh": false,
"disableScroll": true,
"app-plus": {
"bounce": "none"
}
}
},
{
"path" : "pages/distribution/detailCus",
"style" :
{
"navigationStyle": "custom",

View File

@ -28,13 +28,13 @@
<view class="content">
<van-form @submit="onSubmit">
<van-cell-group inset>
<van-field v-model="form.id" name="需求单号" label="需求单号" colon class="bor" label-width="5em" readonly
<van-field v-model="form.customOrder.id" name="需求单号" label="需求单号" colon class="bor-n" label-width="5em" readonly
:rules="[{ required: true, message: '请填写' }]" />
<van-field v-model="form.makeTime" name="做单日期" label="做单日期" colon class="bor" label-width="5em"
<van-field v-model="form.customOrder.makeTime" name="做单日期" label="做单日期" colon class="bor-n" label-width="5em"
readonly :rules="[{ required: true, message: '请填写' }]" />
<van-field v-model="form.makeUser" name="订单归属" label="订单归属" colon label-width="5em"
<van-field v-model="form.customOrder.belongTo" name="订单归属" label="订单归属" colon class="bor-n" label-width="5em"
:rules="[{ required: true, message: '请填写' }]" readonly />
<van-field v-model="form.color" name="颜色色号" label="颜色色号" colon class="bor" readonly
<van-field v-model="form.orderItems.color" name="颜色色号" label="颜色色号" colon class="bor" readonly
:rules="[{ required: true, message: '请填写' }]" label-width="5em" />
<van-field v-model="form.craft" name="工艺" label="工艺" colon
:rules="[{ required: true, message: '请填写' }]" label-width="5em" readonly class="bor" />
@ -63,7 +63,7 @@
<van-field v-model="form.color" name="进厂米数" label="进厂米数" colon class="bor" readonly
:rules="[{ required: true, message: '请填写' }]" label-width="5em" />
</van-cell-group>
<view style="margin: 16px;">
<view style="margin: 16px;display: flex;">
<van-button round block type="primary" native-type="submit">
部分配货
</van-button>
@ -179,6 +179,11 @@
border: 1px solid #d7d7d7;
}
}
.bor-n{
::v-deep .van-field__control {
border: none;
}
}
::v-deep .van-field__control {
border-bottom: 1px solid #d7d7d7;

View File

@ -0,0 +1,296 @@
<script setup lang="ts">
import { onLoad } from '@dcloudio/uni-app';
import { ref } from 'vue';
import { formatDate } from '../../utils/date';
import { getAction } from '../../common/http';
const form = ref({} as any)
const showDialog = ref(false)
const show = ref(false)
const formItem = ref({jcps:0,jcms:0} as any)
const list = ref()
onLoad((option : any) => {
form.value = JSON.parse(option.item)
console.log(form.value);
getAction('/factory').then((res : any) => {
if (res.code === 200) {
list.value = res.data.map((l : any) => ({ text: l.name, value: l.name }))
}
})
})
const onClickLeft = () => {
uni.navigateBack()
}
const onSubmit = () => {
}
//
const h5ScanCode = ref(false);
const bhms = ref([] as any[])
const indexType = ref()
const upScanCode = (index : any) => {
scanCode()
indexType.value = index
bhms.value = []
}
const conScanCode = () =>{
form.value.fabric[indexType.value].bhms=JSON.parse(JSON.stringify(bhms.value))
showDialog.value=false
let jcms=0
form.value.fabric.forEach((l:any)=>{
l.bhms.forEach((k:any)=>{
jcms+=k.ms*1
formItem.value.jcps++
})
})
formItem.value.jcms=jcms.toFixed(1)
}
function scanCode() {
h5ScanCode.value = true;
uni.scanCode({
success: (res) => {
uni.showToast({
icon: "none",
title: res.result,
});
},
faile: (err : any) => {
console.log("err", err);
},
});
}
function handleSuccess(res : any) {
h5ScanCode.value = false;
getAction('/rawFabric/qrcode',{barcode:res},{'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}).then((res1:any)=>{
if(res1.code===200){
bhms.value.push({ code: res, ms: res1.data.len, syps: res1.data.len })
showDialog.value=true
}
})
}
function handleFail(err : any) {
uni.showModal({
title: err.errName,
content: err.errMsg,
complete: () => {
h5ScanCode.value = false;
},
});
}
const chooseDate = () => {
show.value = true
}
//
const onConfirmDate = (val : any) => {
formItem.value.phrq = formatDate(val)
show.value = false
}
const showPicker = ref(false)
const popuList = ref([] as any[])
//
const choosePic = () => {
showPicker.value = true
}
//
const pickerConfirm = (val : any) => {
formItem.value.rc = val.selectedValues[0]
showPickerCancel()
}
//
const showPickerCancel = () => {
showPicker.value = false
}
//
const handleOpen = () => {
popuList.value = list.value
}
</script>
<template>
<view class="flex">
<van-nav-bar title="现货需求单" left-text="返回" left-arrow @click-left="onClickLeft" />
<view class="content">
<van-form @submit="onSubmit">
<van-cell-group inset>
<van-field v-model="form.id" name="需求单号" label="需求单号" colon class="bor-n" label-width="5em"
readonly />
<van-field v-model="form.makeTime" name="做单日期" label="做单日期" colon class="bor-n" label-width="5em"
readonly />
<van-field v-model="form.makeUser" name="做单人" label="做单人" colon class="bor-n" label-width="5em"
readonly />
<van-field v-model="form.color" name="颜色色号" label="颜色色号" colon class="bor-n" readonly
label-width="5em" />
<van-field v-model="form.craft" name="工艺" label="工艺" colon label-width="5em" readonly
class="bor-n" />
<van-field v-model="form.comment" name="备注" label="备注" colon label-width="5em" readonly
class="bor-n" />
<view class="grid-container">
<view class="grid-item">面料名称</view>
<view class="grid-item">匹数</view>
<view class="grid-item">谁定</view>
<view class="grid-item">面料编号/米数</view>
</view>
<view class="grid-container" v-for="(item,index) in form.fabric" :key="index">
<view class="grid-item">{{item.name}}</view>
<view class="grid-item">{{item.quantity}}</view>
<view class="grid-item">{{item.belongTo}}</view>
<view class="grid-item">
<view v-for="(itemSecond,indexSecond) in item.bhms" :key="indexSecond" class="box">
{{itemSecond.code}}<br>{{itemSecond.ms}}
<van-icon name="cross" color="red" @click="item.bhms.splice(indexSecond,1)"/>
</view>
<view class="a-c">
<van-button type="primary" @click="upScanCode(index)">
扫一扫
</van-button>
<cshaptx4869-scancode v-if="h5ScanCode" @success="handleSuccess" @fail="handleFail"
@close="handleClose"></cshaptx4869-scancode>
</view>
</view>
</view>
<van-field v-model="formItem.phrq" name="配货日期" label="配货日期" colon class="bor" label-width="5em"
readonly :rules="[{ required: true, message: '请填写' }]" @click="chooseDate()" />
<van-field v-model="formItem.rc" name="染厂选择" label="染厂选择" colon class="bor" label-width="5em"
readonly :rules="[{ required: true, message: '请填写' }]" @click="choosePic" />
<van-field v-model="formItem.jcps" name="进厂匹数" label="进厂匹数" colon label-width="5em" class="bor-n"
readonly />
<van-field v-model="formItem.jcms" name="进厂米数" label="进厂米数" colon class="bor-n" readonly
label-width="5em" />
</van-cell-group>
<view style="margin: 16px;display: flex;">
<van-button round block type="primary" native-type="submit">
部分配货
</van-button>
<van-button round block type="primary" native-type="submit">
已配全
</van-button>
</view>
</van-form>
</view>
</view>
<van-dialog v-model:show="showDialog">
<view>
<h3 style="text-align: center;margin-top: 10rpx;">扫码成功</h3>
<van-cell-group inset>
<view v-for="(item,index) in bhms" :key="index">
<van-field v-model="item.code" name="面料编号" label="面料编号" colon readonly label-width="5em"
class="bor-n" />
<van-field v-model="item.syps" name="剩余米数" label="剩余米数" colon label-width="5em" class="bor-n" readonly/>
<van-field v-model="item.ms" name="排单米数" label="排单米数" colon label-width="5em"/>
</view>
</van-cell-group>
</view>
<template #footer>
<view class="footer-button">
<van-button plain size="small" native-type="button" style="width: 25vw;" @click="conScanCode">
扫描结束
</van-button>
<van-button size="small" type="success" native-type="submit" style="width: 25vw;" @click="scanCode">
继续扫码
</van-button>
</view>
</template>
</van-dialog>
<!--选择框-->
<van-popup v-model:show="showPicker" round position="bottom" @open="handleOpen">
<van-picker show-toolbar :columns="popuList" @confirm="pickerConfirm" @cancel="showPickerCancel"
ref="pickerRef" />
</van-popup>
<van-calendar v-model:show="show" @confirm="onConfirmDate" :min-date="new Date(2025, 0, 1)" />
</template>
<style lang="scss" scoped>
.flex {
display: flex;
flex-direction: column;
height: 100vh;
width: 100vw;
.van-nav-bar {
width: 100%;
}
.content {
flex: 1;
padding: 0 10px;
.grid-container {
display: grid;
grid-template-columns: 2fr 1fr 1.5fr 2fr;
.grid-item {
border: 1px solid #f2f2f2;
text-align: center;
padding: 15rpx 0;
display: flex;
flex-direction: column;
justify-content: center;
::v-deep .van-cell {
padding: 0 5px;
}
}
}
}
}
.footer-button {
margin: 20px;
display: flex;
justify-content: space-around;
}
::v-deep .van-field {
font-size: 16px;
}
.a-c {
display: flex;
align-items: center;
justify-content: center;
::v-deep .van-button--normal {
padding: 8rpx;
height: 50rpx;
width: 4em;
}
}
.bor {
::v-deep .van-field__control {
border: 1px solid #d7d7d7;
}
}
.bor-n {
::v-deep .van-field__control {
border: none;
}
}
::v-deep .van-field__control {
border-bottom: 1px solid #d7d7d7;
text-align: center;
}
::v-deep .van-field__label {
text-align: end;
}
.box{
margin: 5rpx 20rpx;
border: 1rpx solid #d7d7d7;
border-radius: 10rpx;
}
</style>

View File

@ -3,26 +3,14 @@
import { getAction } from '../../common/http';
import { formatDate } from '../../utils/date';
import { onShow } from '@dcloudio/uni-app';
import { showToast } from 'vant';
import { showToast } from 'vant';
const form = ref({} as any)
const form = ref({status:'已通过'} as any)
const list = ref([] as any[])
const statusList = ref([
{ status: "待审核", code: "UnCheck", type: "warning", path: '/pages/spot/audit' },
{ status: "待主管审核", code: "UnCheckByLeader", type: "primary" },
{ status: "待排单员审核", code: "UnCheckByCharger", type: "success" },
{ status: "已通过", code: "Checked", type: "primary", path: '/pages/spot/pass' },
{ status: "取消审核中", code: "Canceling", type: "warning" },
{ status: "已取消", code: "Canceled", type: "danger" },
{ status: "被驳回", code: "Rejected", type: "danger" },
{ status: "部分配货", code: "Allocating", type: "warning" },
{ status: "已配完(待进厂)", code: "Allocated", type: "success" },
{ status: "已进厂", code: "Processing", type: "primary" },
{ status: "已出厂(待收货)", code: "Processed", type: "success" },
{ status: "待质检", code: "UnTested", type: "warning" },
{ status: "已质检(待入库)", code: "Testing", type: "primary" },
{ status: "已质检(待入库)", code: "Tested", type: "primary" },
{ status: "已入库", code: "Storage", type: "success" }
{ status: "部分配货", type: "warning"},
{ status: "待配货", type: "primary" },
{ status: "已配全", type: "success" },
])
const nameList = ref([] as any[])
@ -84,20 +72,35 @@ import { showToast } from 'vant';
};
function init() {
total.value=0
getAction('/customOrder', form.value).then((res : any) => {
if (res.code === 200) {
res.data.record.forEach((l : any) => {
l.lx=1
list.value.push(l)
let item = statusList.value.find((m : any) => m.status == l.customOrder.status)
let item = statusList.value.find((m : any) => m.status == l.customOrder.zt)
l.customOrder.statusColor = item.type
})
total.value = res.data.total
total.value += res.data.total*1
loading.value = false;
finished.value = false
}
})
getAction('/interOrder', form.value).then((res : any) => {
if (res.code === 200) {
res.data.record.forEach((l : any) => {
l.lx=2
list.value.push(l)
let item = statusList.value.find((m : any) => m.status == l.zt)
l.statusColor = item.type
})
total.value += res.data.total*1
loading.value = false;
finished.value = false
}
})
}
watch(form.value, () => {
list.value = []
init()
@ -122,8 +125,8 @@ import { showToast } from 'vant';
}
//
const handleOpen = () => {
if (typeData.value === 'status') {
popuList.value = [{ text: '待主管审核', value: '待主管审核' }, { text: '待主管审核', value: '待主管审核' }, { text: '待排单审核', value: '待排单审核' }, { text: '已通过', value: '已通过' }, { text: '被驳回', value: '被驳回' }, { text: '取消审核中', value: '取消审核中' }, { text: '已取消', value: '已取消' }]
if (typeData.value === 'zt') {
popuList.value = [{ text: '待配货', value: '待配货' }, { text: '部分配货', value: '部分配货' }, { text: '已配全', value: '已配全' }]
} else {
popuList.value = nameList.value
}
@ -142,10 +145,18 @@ import { showToast } from 'vant';
//
const toDetile = (item : any) => {
let url = './detail' + '?' + 'item=' + JSON.stringify(item)
uni.navigateTo({
url: url,
})
if(item.lx===1){
let url = './detailCus' + '?' + 'item=' + JSON.stringify(item)
uni.navigateTo({
url: url,
})
}else if(item.lx===2){
let url = './detailSpot' + '?' + 'item=' + JSON.stringify(item)
uni.navigateTo({
url: url,
})
}
}
@ -236,31 +247,67 @@ import { showToast } from 'vant';
</van-cell-group>
<van-cell-group inset style="display: flex;">
<van-field v-model="form.makeUser" name="颜色筛选" label="颜色筛选" class="bor-a" colon label-width="5em" />
<van-field v-model="form.category" name="面料筛选" label="面料筛选" colon class="bor" label-width="5em" readonly
@click="selectChoose" />
</van-cell-group>
<van-cell-group inset style="display: flex;">
<van-field v-model="form.makeUser" name="做单人员" label="做单人员" colon class="bor" label-width="5em" readonly
@click="choosePic('makeUser')" />
<van-field v-model="form.status" name="订单状态" label="订单状态" colon class="bor" label-width="5em" readonly
@click="choosePic('status')" />
</van-cell-group>
<van-cell-group inset style="display: flex;">
<van-field v-model="form.zt" name="订单状态" label="订单状态" colon class="bor" label-width="5em" readonly
@click="choosePic('zt')" />
</van-cell-group>
<view class="grid-container">
<view class="grid-item">日期/颜色</view>
<view class="grid-item">面料名称/工艺/谁定</view>
<view class="grid-item">面料名称/工艺<br>谁定</view>
<view class="grid-item">匹数</view>
<view class="grid-item">状态</view>
</view>
<view class="content">
<van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
<view class="grid-container" v-for="(item,index) in list" :key="index">
<view class="grid-item">{{item.customOrder.makeTime}}</view>
<view class="grid-item">
{{item.customOrder.makeUser}}/{{item.customOrder.belongTo}}<br>{{item.customOrder.sd}}
</view>
<view class="grid-item">{{item.customOrder.totalLen}}/{{item.customOrder.totalQty}}</view>
<view class="grid-item" @click="toDetile(item)">
<van-button :type="item.customOrder.statusColor">{{item.customOrder.status}}</van-button>
<view v-for="(item,index) in list" :key="index">
<template v-if="item.lx===1">
<view class="grid-container" v-for="(itemSecond,indexSecond) in item.orderItems" :key="indexSecond">
<view class="grid-item">{{item.customOrder.makeTime}}<br>{{itemSecond.color}}</view>
<view class="grid-item">
<view class="grid-container1">
<view :class="indexThird===(itemSecond.fabric.length-1)?'grid-item2':'grid-item1'"
v-for="(itemThird,indexThird) in itemSecond.fabric" :key="indexThird">
{{itemThird.name}}<br>{{itemSecond.craft}}&nbsp;&nbsp;&nbsp;{{item.customOrder.sd}}
</view>
</view>
</view>
<view class="grid-item">
<view class="grid-container1">
<view :class="indexThird===(itemSecond.fabric.length-1)?'grid-item2':'grid-item1'"
v-for="(itemThird,indexThird) in itemSecond.fabric" :key="indexThird">
{{itemThird.qty}}
</view>
</view>
</view>
<view class="grid-item" @click="toDetile(item)">
<van-button :type="item.customOrder.statusColor">{{item.customOrder.zt}}</van-button>
</view>
</view>
</template>
<view class="grid-container" v-if="item.lx===2">
<view class="grid-item">{{item.makeTime}}<br>{{item.color}}</view>
<view class="grid-item">
<view class="grid-container1">
<view :class="indexSecond===(item.fabric.length-1)?'grid-item2':'grid-item1'"
v-for="(itemSecond,indexSecond) in item.fabric" :key="indexSecond">
{{itemSecond.name}}<br>{{item.craft}}&nbsp;&nbsp;&nbsp;{{itemSecond.belongTo}}
</view>
</view>
</view>
<view class="grid-item">
<view class="grid-container1">
<view :class="indexSecond===(item.fabric.length-1)?'grid-item2':'grid-item1'"
v-for="(itemSecond,indexSecond) in item.fabric" :key="indexSecond">
{{itemSecond.quantity}}
</view>
</view>
</view>
<view class="grid-item" @click="toDetile(item)">
<van-button :type="item.statusColor">{{item.zt}}</van-button>
</view>
</view>
</view>
</van-list>
@ -325,6 +372,30 @@ import { showToast } from 'vant';
align-items: center;
text-align: center;
justify-content: center;
.grid-container1 {
display: grid;
grid-template-columns: 1fr;
width: 100%;
height: 100%;
.grid-item2 {
display: flex;
align-items: center;
text-align: center;
justify-content: center;
padding: 5rpx;
}
.grid-item1 {
border-bottom: 1px solid #f2f2f2;
display: flex;
align-items: center;
text-align: center;
justify-content: center;
padding: 5rpx;
}
}
}
}