点检保养调整

master^2
FCD 1 month ago
parent 94d9013406
commit 5f136605a2

@ -48,6 +48,7 @@ export default {
tempFilePaths.map((item) => {
uni.uploadFile({
url: "http://192.168.202.34:30000/prod-api/file/upload",
// url: "/dev-api/file/upload",
fileType: 'image',
filePath: item,
header: {

@ -0,0 +1,354 @@
<template>
<u-popup
id="popup-content"
v-model="showPopup"
mode="center"
:mask-close-able="false"
width="700rpx"
height="90%"
borderRadius="12rpx"
>
<view class="page-product-receipt">
<u-form id="queryFrom" style="margin-top: -40px;" class="queryFrom" ref="form" label-width="180rpx">
<u-form-item label="备件类型" label-width="23vw">
<jPicker sureColor="#ff0000" @bindpicker="changSpareType" showKey="dictLabel" valKey="dictLabel" :val="query.spareType" :options="spareTypeList" :clearable="true"/>
</u-form-item>
<u-form-item label="备件品类" label-width="23vw">
<jPicker sureColor="#ff0000" @bindpicker="changSpareCategory" showKey="dictLabel" valKey="dictLabel" :val="query.spareCategory" :options="spareCategoryList" :clearable="true" />
</u-form-item>
<u-form-item label="备件号/名称" label-width="23vw">
<u-search placeholder="请输入备件号/名称" :focus="true" :show-action="false" v-model="query.materialCode" @search="getList"></u-search>
</u-form-item>
</u-form>
<scroll-view id="list" scroll-y="true" :style="{ height: listHeight + 'px' }" :lower-threshold="50" @touchmove.stop>
<!-- 列表 -->
<u-form class="list">
<view v-if="list.length > 0">
<view class="list-item" v-for="(item, index) in list" :key="index" :class="{ active: spareItem && item.materialCode === spareItem.materialCode }" @click="selectItem(item)">
<lj-list-row label="备件编码:" :value="item.materialCode" />
<lj-list-row label="备件名称:" :value="item.materialDesc" />
<lj-list-row label="单价:" :value="item.unitPrice || 0" />
</view>
</view>
<view v-else> </view>
</u-form>
</scroll-view>
<!-- 底部按钮区 -->
<view class="popup-footer" id="footer" ref="footer">
<u-button
@click="closePopup"
type="default"
class="footer-btn cancel-btn"
:style="{width: '160rpx'}"
>
取消
</u-button>
<u-button
type="primary"
class="footer-btn confirm-btn"
:style="{width: '160rpx'}"
@click="confirm"
>
确认
</u-button>
</view>
</view>
</u-popup>
</template>
<script>
import JPicker from "@/components/J-Picker/jPicker.vue";
import LjListRow from "@/components/lanju/lj-list-row/index.vue";
import {getDict, getSparePartsList} from "@/components/lanju/lj-choose-spare/model";
export default {
name: 'SpareSelectPopup',
components: {LjListRow, JPicker},
props: {
show: {
type: Boolean,
default: false
},
},
data() {
return {
listHeight:400,
showPopup: false,
spareItem: null,
query:{
pageSize:9999,
spareType:undefined,
spareCategory:undefined,
materialCode:undefined,
},
list:[],
spareTypeList:[],
spareCategoryList:[],
spareCategoryObj:{}
};
},
watch: {
show(newVal) {
this.showPopup = newVal;
this.resetListHeight();
}
},
computed: {
},
methods: {
getList(){
getSparePartsList(this.query).then(res=>{
this.list = res.rows
})
},
changSpareType(type){
this.query.spareType = type.pickerName.dictValue
this.spareCategoryList = this.spareCategoryObj[type.pickerName.dictValue]
this.getList()
},
changSpareCategory(type){
this.query.spareCategory = type.pickerName.dictValue
this.getList()
},
selectItem(item){
item.spareQuantity = 1
this.spareItem = item
},
closePopup() {
this.query.spareType = undefined
this.query.spareCategory = undefined
this.spareItem = undefined
this.$emit('close');
},
confirm(){
if (this.spareItem){
this.$emit('confirm',this.spareItem);
}else {
uni.showToast({
title: '请选择数据!',
icon: 'none'
});
}
},
resetListHeight(){
this.$nextTick(() => {
let footer = 0;
let buttonHeight = 0
//
const query = uni.createSelectorQuery().in(this);
query
.select('#popup-content')
.boundingClientRect((data) => {
if (data){
footer = data.height;
}
})
.exec();
query
.select('#footer')
.boundingClientRect((data) => {
//
if (data){
buttonHeight = data.height * 2;
}
})
.exec();
//
query
.select('#list')
.boundingClientRect((data) => {
//
if (data){
const listTop = data.top;
console.log(footer)
console.log(listTop)
console.log(buttonHeight)
this.listHeight = footer - listTop - buttonHeight - 10;
}
})
.exec();
});
},
initPickerOptions () {
getDict("spare_part_type").then(async res => {
this.spareTypeList = res.data
for (const item of this.spareTypeList) {
await getDict(item.dictValue).then(res => {
this.spareCategoryObj[item.dictValue] = res.data
})
}
for (const key in this.spareCategoryObj){
this.spareCategoryList = this.spareCategoryList.concat(this.spareCategoryObj[key]);
}
})
}
},
mounted() {
this.getList()
this.resetListHeight()
this.initPickerOptions()
}
};
</script>
<style scoped lang="scss">
.list {
background-color: #fff;
margin-top: 20rpx;
padding: 20rpx 20rpx 25rpx;
border-radius: 10rpx;
box-shadow: 0 0 20rpx 0 rgba(128, 128, 128, 0.2);
color: #8d8989;
.list-item {
padding: 20rpx;
margin-bottom: 10rpx;
}
.list-item.active {
box-shadow: 0 0 0 3px #0c7bf3;
}
.righttitle {
display: flex;
justify-content: flex-end;
.boder-icon-rigth {
font-size: 30rpx;
border-radius: 5px;
border: 1rpx solid #fa3534;
text-align: center;
background: #fa3534;
color: #ffffff;
margin-top: 10px;
margin-left: 10px;
}
}
/* 奇数行背景色 */
.list-item:nth-child(odd) {
background-color: #ffffff;
}
/* 偶数行背景色 */
.list-item:nth-child(even) {
background-color: #f5f5f5;
}
}
.popup-content {
box-sizing: border-box;
}
.table-scroll {
border-radius: 8rpx;
background-color: #fafafa;
margin-bottom: 30rpx;
}
.table {
width: 100%;
}
.table-header {
display: flex;
background-color: #e8f4f8;
border-radius: 8rpx 8rpx 0 0;
height: 80rpx;
line-height: 80rpx;
}
.table-th {
text-align: center;
font-size: 28rpx;
font-weight: 500;
color: #333;
}
.table-body {
background-color: #fff;
}
.table-tr {
display: flex;
align-items: center;
height: 100rpx;
border-bottom: 1rpx solid #f5f5f5;
}
.table-td {
padding: 0 20rpx;
box-sizing: border-box;
text-align: center;
border: 1rpx solid #e5e5e5;
line-height: 75rpx;
}
.input-item {
width: 100%;
border-radius: 8rpx;
border: 1rpx solid #e5e5e5;
padding: 0 16rpx;
box-sizing: border-box;
}
.delete-icon {
cursor: pointer;
}
.add-row {
display: flex;
align-items: center;
justify-content: center;
height: 100rpx;
background-color: #fafafa;
border-radius: 0 0 8rpx 8rpx;
cursor: pointer;
}
.add-text {
font-size: 28rpx;
color: #8c8c8c;
margin-left: 16rpx;
}
.popup-footer {
display: flex;
justify-content: center;
gap: 40rpx;
}
.footer-btn {
height: 80rpx;
line-height: 80rpx;
border-radius: 40rpx;
font-size: 32rpx;
margin-top: 20rpx;
}
.cancel-btn {
border: 1rpx solid #e5e5e5;
color: #333;
}
.confirm-btn {
background-color: #1989fa;
color: #fff;
}
</style>

@ -0,0 +1,12 @@
import http from "@/utils/request";
import {url} from "@/utils/url";
export function getSparePartsList(data: any): Promise<any> {
return http.get(url.lanjuequipment.product.Repair.list, {
params: data,
});
}
export function getDict(type: any): Promise<any> {
return http.get(url.wmspda.system.dict+'/'+type, );
}

@ -444,7 +444,7 @@ export default class ChangePalletNew extends BasePage {
.list {
margin-top: 15px;
width: 367px;
//width: 367px;
border-radius: 5px;
border: rgba(121, 121, 121, 1) solid 1px;
background-color: #ffffff;

@ -11,7 +11,7 @@
<u-tabs name="cate_name" count="cate_count" :list="list" :is-scroll="false" :current="current" @change="change"></u-tabs>
<view class="list" v-show="current == 0" v-for="(item, index) in listdata" :key="index" @click="linkdetails(item)">
<div class="list-top">
<div class="name">工单号: {{ item.workCode }}</div>
<div class="name">工单号: <view>{{ item.workCode }}</view></div>
<div class="tag">{{ item.workStatus == 0 ? '待维修' : item.workStatus == 1 ? '维修完成' : item.workStatus == 2 ? '维修中' : '维修未完成' }}</div>
<u-icon @click="linkdetails(item)" name="arrow-right" color="#2979ff" size="28"></u-icon>
</div>
@ -252,7 +252,6 @@ export default class ChangePalletNew extends BasePage {
}
.list {
margin-top: 15px;
width: 367px;
border-radius: 5px;
border: rgba(121, 121, 121, 1) solid 1px;
background-color: #ffffff;

@ -81,13 +81,13 @@
</view>
<div class="Sparepart">
<!-- <u-button type="success">点击进行备件申领</u-button> -->
<div class="Pickup">点击进行备件申领</div>
<div class="Pickupclick">
<!-- width: 63px;
height: 57px; -->
<u-image @click="linkSparepartlist(detailsinfolist)" width="63px" height="57px" class="image" :src="image.equipment.Repairimage1"></u-image>
<!-- <image :src="image.equipment.Repairimage1" @click="linkSparepartlist(detailsinfolist)"></image> -->
</div>
<!-- <div class="Pickup">点击进行备件申领</div>-->
<!-- <div class="Pickupclick">-->
<!-- &lt;!&ndash; width: 63px;-->
<!-- height: 57px; &ndash;&gt;-->
<!-- <u-image @click="linkSparepartlist(detailsinfolist)" width="63px" height="57px" class="image" :src="image.equipment.Repairimage1"></u-image>-->
<!-- &lt;!&ndash; <image :src="image.equipment.Repairimage1" @click="linkSparepartlist(detailsinfolist)"></image> &ndash;&gt;-->
<!-- </div>-->
</div>
<view class="list" v-for="(item, index) in Sparepartlist" :key="index">
<div class="item-name">
@ -132,19 +132,29 @@
<u-form-item label="维修人:">
{{ detailsinfolist.workPerson }}
</u-form-item>
<!-- 机台 -->
<!-- <u-form-item label="维修结果:">
<div class="select">
<u-radio-group v-model="formdata.workStatus" @change="radioGroupChange1(formdata.workStatus)">
<u-radio @change="radioChange" v-for="(n, indexn) in listselect1" :key="indexn" :name="n.type">
{{ n.name }}
</u-radio>
</u-radio-group>
</div>
</u-form-item> -->
<!-- 单号 -->
<u-form-item label="更换备件:">
<span style="width: 100%;color: #2979ff" @click="checkShowSpareList" >点击增加</span>
</u-form-item>
<u-form-item style="border-top: 1px solid #8d8d8d;border-bottom: 1px solid #8d8d8d;"
v-for="(item,index) in spareList" :key="index">
<span style="width: 35%;" >{{item.materialDesc}}</span>
<span style="width: 30%;" >价格:<span style="color: #4cd964">{{ item.totalPrice || item.unitPrice || 0}}</span></span>
<span style="width: 30%;white-space: nowrap; display: flex; align-items: center;" >数量:
<u-input style="width: 20%; margin-left: 4rpx; box-shadow: 0 0 0 1px #000000;"
v-model="item.spareQuantity" placeholder="" @input="inputNum"/>
</span>
<span style="width: 5%;margin-left: 10px">
<u-icon
name="close"
color="#ff4d4f"
size="24rpx"
class="delete-icon"
@click="removeSpare(index)"
/>
</span>
</u-form-item>
<u-form-item class="listbottom1" label="维修费用:">
<u-input v-model="formdata.workCost" placeholder="" />
<span style="width: 100%">{{formdata.workCost}}</span>
</u-form-item>
<!-- <u-form-item label="维修用时(分钟):">
<u-input v-model="formdata.productSpc" placeholder="" />
@ -216,6 +226,12 @@
</div>
</u-modal>
<u-toast ref="uToast" />
<PartsSelectPopup
:show="showSpareList"
@confirm="onConfirm"
@close="closePopup"
/>
</view>
</template>
<script lang="ts">
@ -225,9 +241,11 @@ import model from './model';
import chooseOne from '@/components/choose-one/choose-one.vue';
import jPicker from '@/components/J-Picker/jPicker.vue';
import { session } from '@/store/modules/session';
import PartsSelectPopup from "@/components/lanju/lj-choose-spare/index.vue";
//import store from '@/store';
@Component({
components: {
PartsSelectPopup,
chooseOne,
jPicker,
},
@ -298,7 +316,9 @@ export default class ChangePalletNew extends BasePage {
deleteimgList: any = [];
orderNoItemList: any = {};
picturePath: any = 'https://cdn.uviewui.com/uview/swiper/1.jpg,https://cdn.uviewui.com/uview/swiper/2.jpg';
formdata: any = {};
formdata: any = {
workCost:0
};
Sparepartlist: any = [];
imgformList: any = [];
deleteimgList1: any = [];
@ -306,6 +326,10 @@ export default class ChangePalletNew extends BasePage {
workReason: any = {};
repairMeasures: any = {};
workReasonceshi: 'aaaaa';
showSpareList = false
spareList = []
async onReady() {
//await this.model.getpalletLocation();
//this.remove = this.model.WlList[0];
@ -688,7 +712,7 @@ export default class ChangePalletNew extends BasePage {
return;
}
let query = this.detailsinfolist;
query.applyList = this.Sparepartlist;
query.applyList = this.spareList;
query.fileList = this.imgformList.join(',');
query.workCost = this.formdata.workCost;
query.workReason = this.workReason.value;
@ -741,6 +765,50 @@ export default class ChangePalletNew extends BasePage {
url: `/pages/equipment/Repair/Sparepartlist?listitem=` + encodeURIComponent(JSON.stringify(item)),
});
}
checkShowSpareList(){
this.showSpareList = true
}
inputNum(num){
//
if (Number.isFinite(Number(num))){
this.computerCost()
}
}
removeSpare(index){
this.spareList.splice(index, 1);
this.computerCost()
}
computerCost(){
this.formdata.workCost = 0
let workCost = 0
for (const item of this.spareList){
const price = item.unitPrice || 0
let num = item.spareQuantity || 0
if (!Number.isFinite(Number(num))){
num = 0
item.totalPrice = 0
}
item.totalPrice = price * Number(num)
workCost = workCost + (price * Number(num))
}
this.formdata.workCost = workCost
}
onConfirm(item) {
this.showSpareList = false; //
this.spareList.push(item)
this.computerCost()
uni.showToast({
title: '选择成功',
icon: 'success'
});
}
closePopup() {
this.showSpareList = false;
}
}
</script>
<style lang="scss" scoped>
@ -784,7 +852,7 @@ export default class ChangePalletNew extends BasePage {
.list {
margin-top: 15px;
width: 367px;
//width: 367px;
border-radius: 5px;
border: rgba(121, 121, 121, 1) solid 1px;
background-color: #ffffff;
@ -1120,7 +1188,7 @@ export default class ChangePalletNew extends BasePage {
padding: 6px 0;
}
.photoList1 {
width: 220px;
//width: 220px;
overflow-y: scroll;
border: 1px solid black;
}

@ -451,7 +451,6 @@ export default class ChangePalletNew extends BasePage {
.list {
margin-top: 15px;
width: 367px;
border-radius: 5px;
border: rgba(121, 121, 121, 1) solid 1px;
background-color: #ffffff;

@ -17,10 +17,10 @@
</view>
<!-- <view class="single-left" style="background-color: #ffffff; margin-top: 10px; display: flex; align-items: center">
<view style="margin-right: 10px">日期:</view>
<u-input @click="onfocus" placeholder="请选择日期" v-model="createTime" :clearable="false" />
<u-icon name="close-circle-fill" @click="clear" color="rgb(96, 98, 102)" size="28"></u-icon>
</view> -->
</div>
<view class="list" v-show="current == 0" v-for="(item, index) in listdata" :key="index" @click="linkdetails(item, isorderNo)">
@ -32,7 +32,7 @@
<!-- 计划编码 20231121003 计划名称 蚊香包装线保养计划
循环周期 1 工单编码 O20231121005
车间编码 WXB01 循环开始时间 2023-11-21
循环结束时间 2023-12-30 执行开始时间
循环结束时间 2023-12-30 执行开始时间
执行结束时间 保养类型 内部
是否停机保养 开机保养 保养人 -->
<div class="item1">计划编码: {{ item.orderCode }}</div>
@ -361,7 +361,6 @@ export default class ChangePalletNew extends BasePage {
}
.list {
margin-top: 15px;
width: 367px;
border-radius: 5px;
border: rgba(121, 121, 121, 1) solid 1px;
background-color: #ffffff;

@ -124,19 +124,29 @@
<u-form-item label="负责人:">
{{ detailsinfolist.planPerson }}
</u-form-item>
<!-- 机台 -->
<!-- <u-form-item label="保养结果:">
<div class="select">
<u-radio-group v-model="formdata.workStatus" @change="radioGroupChange1(formdata.workStatus)">
<u-radio @change="radioChange" v-for="(n, indexn) in listselect1" :key="indexn" :name="n.type">
{{ n.name }}
</u-radio>
</u-radio-group>
</div>
</u-form-item> -->
<!-- 单号 -->
<u-form-item label="更换备件:">
<span style="width: 100%;color: #2979ff" @click="checkShowSpareList" >点击增加</span>
</u-form-item>
<u-form-item style="border-top: 1px solid #8d8d8d;border-bottom: 1px solid #8d8d8d;"
v-for="(item,index) in spareList" :key="index">
<span style="width: 35%;" >{{item.materialDesc}}</span>
<span style="width: 30%;" >价格:<span style="color: #4cd964">{{item.unitPrice || 0}}</span></span>
<span style="width: 30%;white-space: nowrap; display: flex; align-items: center;" >数量:
<u-input style="width: 20%; margin-left: 4rpx; "
v-model="item.spareQuantity" placeholder="" @input="inputNum"/>
</span>
<span style="width: 5%;margin-left: 10px">
<u-icon
name="close"
color="#ff4d4f"
size="24rpx"
class="delete-icon"
@click="removeSpare(index)"
/>
</span>
</u-form-item>
<u-form-item label="保养费用:">
<u-input v-model="formdata.orderCost" placeholder="" />
<span style="width: 100%">{{formdata.orderCost}}</span>
</u-form-item>
<!-- <u-form-item label="保养时间:">
<u-input @blur="blur()" @focus="focus()" placeholder="" v-model="orderBreakdownTime" />
@ -164,18 +174,6 @@
<u-button @click="onSubmit" type="primary">提交</u-button>
</div>
</view>
<!-- <view class="bottom-bar">
<div class="item-name">
<div class="details">
<div>点检人: 刘XX</div>
<div style="margin-left: 42px">点检时间: 2023-08-09</div>
</div>
<div class="details">
<div>是否异常: </div>
<div style="margin-left: 42px">保养单: 90272931234</div>
</div>
</div>
</view> -->
<u-modal v-model="isshow2" class="modal" :show-cancel-button="true" :show-title="false" @cancel="cancel" @confirm="confirm">
<div class="upload-name">
<div class="name">检查标准:{{ form.item5 }}</div>
@ -199,6 +197,12 @@
</div>
</u-modal>
<u-toast ref="uToast" />
<PartsSelectPopup
:show="showSpareList"
@confirm="onConfirm"
@close="closePopup"
/>
</view>
</template>
<script lang="ts">
@ -209,9 +213,11 @@ import chooseOne from '@/components/choose-one/choose-one.vue';
import jPicker from '@/components/J-Picker/jPicker.vue';
import { session } from '@/store/modules/session';
import LjChooseImg from "@/components/lanju/lj-choose-img/index.vue";
import PartsSelectPopup from "@/components/lanju/lj-choose-spare/index.vue";
//import store from '@/store';
@Component({
components: {
PartsSelectPopup,
LjChooseImg,
chooseOne,
jPicker,
@ -292,6 +298,15 @@ export default class ChangePalletNew extends BasePage {
orderBreakdownTime: any = '';
showtime = false;
defaulttime: any = '';
showSpareList = false
tableHeight = 300
spareList = []
spareIndex = 0
async onReady() {
//await this.model.getpalletLocation();
//this.remove = this.model.WlList[0];
@ -611,6 +626,7 @@ export default class ChangePalletNew extends BasePage {
})
return
}
item1.picturePath = item1.imgList.join(',');
}
}
}
@ -643,6 +659,7 @@ export default class ChangePalletNew extends BasePage {
query.orderCost = this.formdata.orderCost;
query.planPersonName = session.nickName;
query.planPerson = session.userName;
query.spareList = this.spareList
console.log(query, this.isvalue);
await this.model.updateInspectionRecord(query);
if (this.model.SubmitCode.code == '200') {
@ -671,6 +688,44 @@ export default class ChangePalletNew extends BasePage {
this.isaccord = true;
}
}
checkShowSpareList(){
this.showSpareList = true
}
removeSpare(index){
this.spareList.splice(index, 1);
this.computerCost()
}
closePopup() {
this.showSpareList = false;
}
onConfirm(item) {
this.showSpareList = false; //
this.spareList.push(item)
this.computerCost()
uni.showToast({
title: '选择成功',
icon: 'success'
});
}
inputNum(num){
//
if (Number.isFinite(Number(num))){
this.computerCost()
}
}
computerCost(){
this.formdata.orderCost = 0
let orderCost = 0
for (const item of this.spareList){
const price = item.unitPrice || 0
let num = item.spareQuantity || 0
if (!Number.isFinite(Number(num))){
num = 0
}
orderCost = orderCost + (price * Number(num))
}
this.formdata.orderCost = orderCost
}
linkSparepartlist(item) {
uni.navigateTo({
url: `/pages/equipment/Upkeep/Sparepartlist?listitem=` + encodeURIComponent(JSON.stringify(item)),
@ -1045,7 +1100,6 @@ export default class ChangePalletNew extends BasePage {
padding: 6px 0;
}
.photoList1 {
width: 220px;
overflow-y: scroll;
border: 1px solid black;
}

@ -25,7 +25,7 @@
<jPicker sureColor="#ff0000" moren="请选择是否合格" @bindpicker="selectIsQualified" showKey="key" valKey="value" :val="form.isQualified" :options="optionResults" />
</u-form-item>
<u-form-item label="不良数量(PC" label-width="230rpx">
<u-form-item label="不良数量(" label-width="230rpx">
<span style="width: 100%;color: #c0c4cc" @click="checkShowDefects" v-if="!form.badNum"></span>
<span v-if="form.badNum">{{form.badNum}}</span>
</u-form-item>

@ -11,7 +11,8 @@ export const url = {
test: '/wmspda/system/test',
login: qianzhuione + '/auth/login',
getInfo: qianzhuione + '/system/user/mobileGetInfo',
getLastApkVersion: qianzhuione + '/system/apkFile/getLastApkVersion'
getLastApkVersion: qianzhuione + '/system/apkFile/getLastApkVersion',
dict: qianzhuione + '/system/dict/data/type',
},
},
sys: {

Loading…
Cancel
Save