| | |
| | | <template>
|
| | | <view class="tl">
|
| | | <workOrderInfo :orederMessage="{proUserList:[]}" />
|
| | | <div class="tl_title">
|
| | | <div class="tl_title_left">
|
| | | <div class="tl_title_left_x"></div>
|
| | | <span>投料信息</span>
|
| | | <template> |
| | | <view class="tl"> |
| | | <workOrderInfo :orederMessage="info" /> |
| | | <div class="tl_title"> |
| | | <div class="tl_title_left"> |
| | | <div class="tl_title_left_x"></div> |
| | | <span>投料信息</span> |
| | | <!-- <span>{{total == 0 ? '' : total}}{{formList[formList.length - 1].dw ? formList[formList.length - 1].dw : ''}}</span> --> |
| | | <!-- <span>{{total == 0 ? '' : total}}{{formList[formList.length - 1].dw ? formList[formList.length - 1].dw : ''}}</span> -->
|
| | | </div>
|
| | | <div class="tl_title_right" @click="add">
|
| | | <image src="../../static/gongdan_ic_shoudong@2x.png" class="add-img" mode=""></image>
|
| | | <span>增加投料</span>
|
| | | </div>
|
| | | </div>
|
| | | <u-swipe-action>
|
| | | <u-swipe-action-item v-for="(item, index) in materialList" :key="index" :options="options"
|
| | | @click="deleItem(index)">
|
| | | <div class="tl_list">
|
| | | <div class="tl_list_item" @click="open1(index)">
|
| | | <div class="tl_list_item_label">选择物料</div>
|
| | | <div class="tl_list_item_go" v-if="!item.materialName">
|
| | | <span>点击跳转到物料列表</span>
|
| | | <u-icon name="arrow-right"></u-icon>
|
| | | </div>
|
| | | <div class="tl_list_item_wl" v-else>
|
| | | <div class="tl_list_item_wl_top">
|
| | | <span>{{ item.materialName }}</span>
|
| | | <span> | {{ item.materialCode }}</span>
|
| | | </div>
|
| | | <div class="tl_list_item_wl_bottom">
|
| | | <span class="green" v-if="item.qualityType == 0">合格</span>
|
| | | <span class="yellow" v-else-if="item.qualityType == 1">不良</span>
|
| | | <span class="red" v-else-if="item.qualityType == 2">报废</span>
|
| | | <span>{{ item.procedureName ? ` / ${item.procedureName}` : ' / -' }}</span>
|
| | | <span>{{ item.locationName ? ` / ${item.locationName}` : ' / -' }}</span>
|
| | | <span>{{ item.batch ? ` / ${item.batch}` : ' / -' }}</span>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="tl_list_item">
|
| | | <div class="tl_list_item_label">投料数量{{ item.unitAttribute }}</div>
|
| | | <div class="tl_list_item_go">
|
| | | <input type="text" @blur="changeNumber(item.num, index, item.unitAttribute)"
|
| | | v-model="item.num" />
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </u-swipe-action-item>
|
| | | <!-- <span>{{total == 0 ? '' : total}}{{formList[formList.length - 1].dw ? formList[formList.length - 1].dw : ''}}</span> --> |
| | | </div> |
| | | <div class="tl_title_right" @click="add"> |
| | | <image src="../../static/gongdan_ic_shoudong@2x.png" class="add-img" mode=""></image> |
| | | <span>增加投料</span> |
| | | </div> |
| | | </div> |
| | | <u-swipe-action> |
| | | <u-swipe-action-item v-for="(item, index) in materialList" :key="index" :options="options" |
| | | @click="deleItem(index)"> |
| | | <div class="tl_list"> |
| | | <div class="tl_list_item" @click="open1(index)"> |
| | | <div class="tl_list_item_label">选择物料</div> |
| | | <div class="tl_list_item_go" v-if="!item.materialName"> |
| | | <span>点击跳转到物料列表</span> |
| | | <u-icon name="arrow-right"></u-icon> |
| | | </div> |
| | | <div class="tl_list_item_wl" v-else> |
| | | <div class="tl_list_item_wl_top"> |
| | | <span>{{ item.materialName }}</span> |
| | | <span> | {{ item.materialCode }}</span> |
| | | </div> |
| | | <div class="tl_list_item_wl_bottom"> |
| | | <span class="green" v-if="item.qualityType == 0">合格</span> |
| | | <span class="yellow" v-else-if="item.qualityType == 1">不良</span> |
| | | <span class="red" v-else-if="item.qualityType == 2">报废</span> |
| | | <span>{{ item.procedureName ? ` / ${item.procedureName}` : ' / -' }}</span> |
| | | <span>{{ item.locationName ? ` / ${item.locationName}` : ' / -' }}</span> |
| | | <span>{{ item.batch ? ` / ${item.batch}` : ' / -' }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="tl_list_item"> |
| | | <div class="tl_list_item_label">投料数量{{ item.unitAttribute }}</div> |
| | | <div class="tl_list_item_go"> |
| | | <input type="text" @blur="changeNumber(item.num, index, item.unitAttribute)" |
| | | v-model="item.num" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </u-swipe-action-item> |
| | | </u-swipe-action> |
| | | <SelectMaterial ref="selectMaterial" @selectAction="getValue"/>
|
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | <view class="" style="height: 88rpx;"></view> |
| | | <u-safe-bottom></u-safe-bottom> |
| | | <div class="tl_footer"> |
| | | <button class="tl_footer_submit" v-preventReClick @click="submit">提交</button> |
| | | </div> |
| | | <SelectMaterial ref="selectMaterial" @selectAction="getValue" /> |
| | | <!-- <SelectMultipleMaterial ref="selectMultipleMaterial" @selected="getMaterails"/> --> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import workOrderInfo from '@/components/workOrderInfo.vue' |
| | | import SelectMaterial from '@/components/selectMaterial.vue' |
| | | |
| | | import {
|
| | | positiveInteger,
|
| | | number
|
| | | } from '@/common/config'
|
| | | export default {
|
| | | components: {
|
| | | // import SelectMultipleMaterial from '@/components/SelectMultipleMaterial.vue' |
| | | import { |
| | | queryById, |
| | | createMaterial, |
| | | createMaterialStandard |
| | | } from '@/util/api/WorkOrderAPI' |
| | | import { |
| | | positiveInteger, |
| | | number |
| | | } from '@/common/config' |
| | | export default { |
| | | components: { |
| | | workOrderInfo, |
| | | SelectMaterial
|
| | | },
|
| | | data() {
|
| | | return {
|
| | | // formList: [{
|
| | | // id: Date.now(),
|
| | | // toolingTypeId: '', // 工装类型
|
| | | // toolingTypeName: '', // 工装类型名称
|
| | | // workClothesId: '', // 工装
|
| | | // workClothesName: '', // 工装名称
|
| | | // num: '', // 数量
|
| | | // attribute: '', // 工装属性
|
| | | // attributeType: '', // 工装属性类型
|
| | | // dw: '', // 物料单位
|
| | | // unitAttribute: ''
|
| | | // }],
|
| | | materialList: [{
|
| | | id: '',
|
| | | materialName: '',
|
| | | materialCode: '',
|
| | | qualityType: '',
|
| | | procedureName: '',
|
| | | locationName: '',
|
| | | batch: '',
|
| | | num: '',
|
| | | unitAttribute: ''
|
| | | }],
|
| | | options: [{
|
| | | text: '删除',
|
| | | style: {
|
| | | backgroundColor: 'red',
|
| | | }
|
| | | }],
|
| | | };
|
| | | SelectMaterial, |
| | | // SelectMultipleMaterial |
| | | }, |
| | | methods: {
|
| | | data() { |
| | | return { |
| | | deviceId: '', |
| | | workorderId: '', |
| | | // formList: [{ |
| | | // id: Date.now(), |
| | | // toolingTypeId: '', // 工装类型 |
| | | // toolingTypeName: '', // 工装类型名称 |
| | | // workClothesId: '', // 工装 |
| | | // workClothesName: '', // 工装名称 |
| | | // num: '', // 数量 |
| | | // attribute: '', // 工装属性 |
| | | // attributeType: '', // 工装属性类型 |
| | | // dw: '', // 物料单位 |
| | | // unitAttribute: '' |
| | | // }], |
| | | info: {}, |
| | | materialList: [{ |
| | | id: '', |
| | | materialName: '', |
| | | materialCode: '', |
| | | qualityType: '', |
| | | procedureName: '', |
| | | locationName: '', |
| | | batch: '', |
| | | num: '', |
| | | unitAttribute: '' |
| | | }], |
| | | options: [{ |
| | | text: '删除', |
| | | style: { |
| | | backgroundColor: 'red', |
| | | } |
| | | }], |
| | | }; |
| | | }, |
| | | onLoad(obj) { |
| | | this.workorderId = obj.id |
| | | queryById(this.workorderId) |
| | | .then(res => { |
| | | if (res.code === 200) { |
| | | this.info = res.data |
| | | this.deviceId = res.data.pgmodel.id |
| | | } |
| | | }) |
| | | }, |
| | | methods: { |
| | | open1(index) { |
| | | this.$refs.selectMaterial.open({}) |
| | | },
|
| | | deleItem(index) {
|
| | | if (this.materialList.length === 1) {
|
| | | uni.$u.toast('至少保留一条投料信息')
|
| | | return
|
| | | }
|
| | | this.materialList.splice(index, 1)
|
| | | },
|
| | | // this.$refs.selectMaterial.open({}) |
| | | this.index = index |
| | | this.$refs.selectMaterial.open({ |
| | | workorderId: this.workorderId, |
| | | deviceId: this.deviceId |
| | | }) |
| | | }, |
| | | deleItem(index) { |
| | | if (this.materialList.length === 1) { |
| | | uni.$u.toast('至少保留一条投料信息') |
| | | return |
| | | } |
| | | this.materialList.splice(index, 1) |
| | | }, |
| | | add() { |
| | | this.total += 1
|
| | | this.materialList.unshift({
|
| | | id: '',
|
| | | materialName: '',
|
| | | materialCode: '',
|
| | | qualityType: '',
|
| | | procedureName: '',
|
| | | locationName: '',
|
| | | batch: '',
|
| | | num: '',
|
| | | unitAttribute: ''
|
| | | })
|
| | | },
|
| | | changeNumber(num, index, unitAttribute) {
|
| | | if (unitAttribute === 0 && num !== '') {
|
| | | if (!positiveInteger.test(num)) {
|
| | | uni.$u.toast({
|
| | | message: '只能输入正整数'
|
| | | })
|
| | | this.materialList[index].num = ''
|
| | | }
|
| | | } else if (unitAttribute === 1 && num !== '') {
|
| | | if (!number.test(num)) {
|
| | | uni.$u.toast({
|
| | | message: '只能输入正整数或小数(最多四位)'
|
| | | })
|
| | | this.materialList[index].num = ''
|
| | | }
|
| | | }
|
| | | if (num <= 0) {
|
| | | uni.$u.toast({
|
| | | message: '投料数量不能小于等于0'
|
| | | })
|
| | | this.materialList[index].num = ''
|
| | | }
|
| | | this.total += 1 |
| | | this.materialList.unshift({ |
| | | id: '', |
| | | materialName: '', |
| | | materialCode: '', |
| | | qualityType: '', |
| | | procedureName: '', |
| | | locationName: '', |
| | | batch: '', |
| | | num: '', |
| | | unitAttribute: '' |
| | | }) |
| | | }, |
| | | changeNumber(num, index, unitAttribute) { |
| | | if (unitAttribute === 0 && num !== '') { |
| | | if (!positiveInteger.test(num)) { |
| | | uni.$u.toast({ |
| | | message: '只能输入正整数' |
| | | }) |
| | | this.materialList[index].num = '' |
| | | } |
| | | } else if (unitAttribute === 1 && num !== '') { |
| | | if (!number.test(num)) { |
| | | uni.$u.toast({ |
| | | message: '只能输入正整数或小数(最多四位)' |
| | | }) |
| | | this.materialList[index].num = '' |
| | | } |
| | | } |
| | | if (num <= 0) { |
| | | uni.$u.toast({ |
| | | message: '投料数量不能小于等于0' |
| | | }) |
| | | this.materialList[index].num = '' |
| | | } |
| | | }, |
| | | getValue(item) { |
| | | console.log(item); |
| | | }
|
| | | }
|
| | | }
|
| | | </script>
|
| | |
|
| | | <style lang="scss">
|
| | | .tl {
|
| | | width: 100%;
|
| | | height: 100%;
|
| | | position: absolute;
|
| | | background: #F7F7F7;
|
| | |
|
| | | .tl_title {
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: space-between;
|
| | | padding: 30rpx;
|
| | |
|
| | | .tl_title_left {
|
| | | display: flex;
|
| | | align-items: center;
|
| | |
|
| | | .tl_title_left_x {
|
| | | width: 8rpx;
|
| | | height: 30rpx;
|
| | | background: $nav-color;
|
| | | border-radius: 2rpx;
|
| | | margin-right: 12rpx;
|
| | | }
|
| | |
|
| | | span {
|
| | | font-size: 32rpx;
|
| | | font-weight: 500;
|
| | | color: #222222;
|
| | |
|
| | | &:nth-child(3) {
|
| | | font-size: 28rpx;
|
| | | font-weight: 500;
|
| | | color: $nav-color;
|
| | | margin-left: 10rpx;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .tl_title_right {
|
| | | display: flex;
|
| | | align-items: center;
|
| | |
|
| | | .add-img {
|
| | | width: 28rpx;
|
| | | height: 28rpx;
|
| | | margin-right: 12rpx;
|
| | | }
|
| | |
|
| | | span {
|
| | | font-size: 28rpx;
|
| | | font-weight: 400;
|
| | | // color: $nav-color;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .tl_list {
|
| | | display: flex;
|
| | | flex-direction: column;
|
| | | background: white;
|
| | | padding: 0 30rpx;
|
| | | margin-bottom: 20rpx;
|
| | |
|
| | | .tl_list_item {
|
| | | min-height: 98rpx;
|
| | | // padding: 20rpx 0;
|
| | | box-sizing: border-box;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: space-between;
|
| | | border-bottom: 1rpx solid #E5E5E5;
|
| | |
|
| | | &:last-child {
|
| | | border: none !important;
|
| | | }
|
| | |
|
| | | .tl_list_item_label {
|
| | | font-size: 30rpx;
|
| | | font-weight: 400;
|
| | | color: #222222;
|
| | | }
|
| | |
|
| | | .tl_list_item_wl {
|
| | | display: flex;
|
| | | flex-direction: column;
|
| | | align-items: end;
|
| | |
|
| | | .tl_list_item_wl_top {
|
| | | display: flex;
|
| | | align-items: center;
|
| | |
|
| | | span {
|
| | | font-size: 28rpx;
|
| | | color: #222222;
|
| | | }
|
| | | }
|
| | |
|
| | | .tl_list_item_wl_bottom {
|
| | | display: flex;
|
| | | align-items: center;
|
| | |
|
| | | span {
|
| | | font-size: 28rpx;
|
| | | color: #222222;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .tl_list_item_go {
|
| | | display: flex;
|
| | | align-items: center;
|
| | |
|
| | | input {
|
| | | text-align: right;
|
| | | width: 180rpx;
|
| | | height: 60rpx;
|
| | | border-radius: 8rpx;
|
| | | border: 1rpx solid #E5E5E5;
|
| | | padding: 0 30rpx;
|
| | | box-sizing: border-box;
|
| | | font-size: 28rpx;
|
| | | font-weight: 400;
|
| | | color: #333333;
|
| | | }
|
| | |
|
| | | span {
|
| | | font-size: 28rpx;
|
| | | font-weight: 400;
|
| | | color: #999999;
|
| | | margin-right: 10rpx;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .tl_zw {
|
| | | height: 160rpx;
|
| | | }
|
| | |
|
| | | .tl_footer {
|
| | | width: 100%;
|
| | | position: fixed;
|
| | | bottom: 0;
|
| | | left: 0;
|
| | | padding: 0 30rpx 68rpx 30rpx;
|
| | | box-sizing: border-box;
|
| | |
|
| | | .tl_footer_submit {
|
| | | width: 690rpx;
|
| | | height: 88rpx;
|
| | | border: none;
|
| | | background: #4275FC;
|
| | | box-shadow: 0 0 12rpx 0 rgba(0, 0, 0, 0.08);
|
| | | border-radius: 8rpx;
|
| | | font-size: 30rpx;
|
| | | font-weight: 500;
|
| | | color: #FFFFFF;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: center;
|
| | | }
|
| | | }
|
| | | }
|
| | | for (let i = 0; i < this.materialList.length; i++) { |
| | | if (item.id === this.materialList[i].id) { |
| | | uni.$u.toast({ |
| | | message: '不能重复选择相同物料' |
| | | }) |
| | | return |
| | | } |
| | | } |
| | | this.materialList[this.index].id = item.id |
| | | this.materialList[this.index].materialName = item.materialName |
| | | this.materialList[this.index].num = item.num |
| | | this.materialList[this.index].batch = item.batch |
| | | this.materialList[this.index].locationName = item.locationName |
| | | this.materialList[this.index].materialCode = item.materialCode |
| | | this.materialList[this.index].procedureName = item.procedureName |
| | | this.materialList[this.index].qualityType = item.qualityType |
| | | this.materialList[this.index].unitAttribute = item.unitAttribute |
| | | }, |
| | | submit() { |
| | | let temp = this.materialList.findIndex(item => !item.id || !item.num) |
| | | if (temp != -1) { |
| | | uni.$u.toast(`请先完善第${temp + 1}条投料信息`) |
| | | return |
| | | } |
| | | let total = this.materialList.reduce((accumulator, currentValue) => accumulator + Number(currentValue.num), |
| | | 0) |
| | | console.log(total); |
| | | if (this.info.bomType != 1 && this.info.hasBom != 1) { |
| | | if (total > this.info.planNum) { |
| | | uni.$u.toast(`投料数量不能大于计划数量`) |
| | | return |
| | | } |
| | | } |
| | | let recordList = this.materialList.map(item => { |
| | | return { |
| | | wstockId: item.id, |
| | | num: item.num |
| | | } |
| | | }) |
| | | createMaterialStandard({ |
| | | id: this.workorderId, |
| | | recordList |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | // Toast.success({ message: '投料成功', duration: 2000, forbidClick: true }) |
| | | // setTimeout(() => { |
| | | // router.go(-1) |
| | | // }, 2000) |
| | | uni.$u.toast(`投料成功`) |
| | | uni.$emit('addMaterial') |
| | | uni.navigateBack() |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | .tl { |
| | | width: 100%; |
| | | height: 100%; |
| | | position: absolute; |
| | | background: #F7F7F7; |
| | | |
| | | .tl_title { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | padding: 30rpx; |
| | | |
| | | .tl_title_left { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .tl_title_left_x { |
| | | width: 8rpx; |
| | | height: 30rpx; |
| | | background: $nav-color; |
| | | border-radius: 2rpx; |
| | | margin-right: 12rpx; |
| | | } |
| | | |
| | | span { |
| | | font-size: 32rpx; |
| | | font-weight: 500; |
| | | color: #222222; |
| | | |
| | | &:nth-child(3) { |
| | | font-size: 28rpx; |
| | | font-weight: 500; |
| | | color: $nav-color; |
| | | margin-left: 10rpx; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .tl_title_right { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .add-img { |
| | | width: 28rpx; |
| | | height: 28rpx; |
| | | margin-right: 12rpx; |
| | | } |
| | | |
| | | span { |
| | | font-size: 28rpx; |
| | | font-weight: 400; |
| | | // color: $nav-color; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .tl_list { |
| | | display: flex; |
| | | flex-direction: column; |
| | | background: white; |
| | | padding: 0 30rpx; |
| | | margin-bottom: 20rpx; |
| | | |
| | | .tl_list_item { |
| | | min-height: 98rpx; |
| | | // padding: 20rpx 0; |
| | | box-sizing: border-box; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | border-bottom: 1rpx solid #E5E5E5; |
| | | |
| | | &:last-child { |
| | | border: none !important; |
| | | } |
| | | |
| | | .tl_list_item_label { |
| | | font-size: 30rpx; |
| | | font-weight: 400; |
| | | color: #222222; |
| | | } |
| | | |
| | | .tl_list_item_wl { |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: end; |
| | | |
| | | .tl_list_item_wl_top { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | span { |
| | | font-size: 28rpx; |
| | | color: #222222; |
| | | } |
| | | } |
| | | |
| | | .tl_list_item_wl_bottom { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | span { |
| | | font-size: 28rpx; |
| | | color: #222222; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .tl_list_item_go { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | input { |
| | | text-align: right; |
| | | width: 180rpx; |
| | | height: 60rpx; |
| | | border-radius: 8rpx; |
| | | border: 1rpx solid #E5E5E5; |
| | | padding: 0 30rpx; |
| | | box-sizing: border-box; |
| | | font-size: 28rpx; |
| | | font-weight: 400; |
| | | color: #333333; |
| | | } |
| | | |
| | | span { |
| | | font-size: 28rpx; |
| | | font-weight: 400; |
| | | color: #999999; |
| | | margin-right: 10rpx; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .tl_zw { |
| | | height: 160rpx; |
| | | } |
| | | |
| | | .tl_footer { |
| | | width: 100%; |
| | | position: fixed; |
| | | bottom: 0; |
| | | padding: 0 30rpx calc(env(safe-area-inset-bottom) + 20rpx); |
| | | box-sizing: border-box; |
| | | z-index: 999; |
| | | background-color: #fff; |
| | | |
| | | .tl_footer_submit { |
| | | width: 690rpx; |
| | | height: 88rpx; |
| | | border: none; |
| | | background: #4275FC; |
| | | box-shadow: 0 0 12rpx 0 rgba(0, 0, 0, 0.08); |
| | | border-radius: 8rpx; |
| | | font-size: 30rpx; |
| | | font-weight: 500; |
| | | color: #FFFFFF; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | } |
| | | } |
| | | } |
| | | </style> |