detection-business/pages/index/Neworder.vue
2024-11-15 17:48:16 +08:00

1004 lines
25 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 新增线下订单-->
<template>
<view class="content">
<view style="width: 100%; height: 44px;"></view>
<view class="top-heder">
<view class="t-left" @click="getback()">
<uni-icons type="left" size="18"></uni-icons>
</view>
<view class="t-title">
<text>{{title}}</text>
</view>
<view class="t-you"></view>
</view>
<view class="mub">
<view class="top-ail">
<u-upload
:fileList="fileList"
@afterRead="afterRead1"
@delete="deletePic1"
multiple
:maxCount="1"
>
<view class="dlanniu" style="width: 345px;">
<uni-icons type="scan" size="20" color="#ffffff"></uni-icons>
<text style="margin-left: 10px;">行驶证扫描</text>
</view>
</u-upload>
<!-- 名称 -->
<view class="box-list">
<view class="list-box">
<view class="l-left">客户姓名</view>
<view class="l-right">
<input type="text" v-model="buyName" placeholder="请输入客户姓名">
</view>
</view>
<view class="list-box">
<view class="l-left">住址</view>
<view class="l-right">
<input type="text" v-model="userAddress" placeholder="请输入住址">
</view>
</view>
<view class="list-box">
<view class="l-left">
<text style="color: red;font-weight: bold;text-align: center;">*</text>
车牌号
</view>
<view class="l-right">
<input type="text" v-model="carNum" placeholder="请输入车牌号">
</view>
</view>
<view class="list-box">
<view class="l-left" @click="showzhi = true">使用性质
<text class="xixi">点击选择</text>
</view>
<view class="l-right">
<input type="text" v-model="carNature" placeholder="请输入使用性质">
</view>
</view>
<view class="list-box">
<view class="l-left">品牌型号</view>
<view class="l-right">
<input type="text" v-model="carModel" placeholder="请输入品牌型号">
</view>
</view>
<view class="list-box">
<view class="l-left">车辆识别代号</view>
<view class="l-right">
<input type="text" v-model="carIdNo" placeholder="请输入车辆识别代号">
</view>
</view>
<view class="list-box">
<view class="l-left" @click="show = true">
<text style="color: red;font-weight: bold;text-align: center;">*</text>
客户来源
<text class="xixi">点击选择</text>
</view>
<view class="l-right">
<input type="text" v-model="customerSource" placeholder="请输入客户来源">
</view>
</view>
<view class="list-box">
<view class="l-left" @click="handleClick">
<text style="color: red;font-weight: bold;text-align: center;">*</text>
商品选择
<text class="xixi">点击选择</text>
</view>
<view class="l-right">
<text>{{ goodstext }}</text>
<!-- <input type="text" v-model="goodstext" placeholder="请选择商品"> -->
</view>
</view>
<view class="list-box">
<view class="l-left" @click="showxin = true">新旧车
<text class="xixi">点击选择</text>
</view>
<view class="l-right">
<input type="text" v-model="carStatus" placeholder="请输入新旧车">
</view>
</view>
<view class="list-box">
<view class="l-left">联系方式</view>
<view class="l-right">
<input type="text" v-model="buyPhone" placeholder="请输入联系方式">
</view>
</view>
<view class="list-box">
<view class="l-left">单位</view>
<view class="l-right">
<input type="text" v-model="unitName" placeholder="请输入单位">
</view>
</view>
<view class="list-box">
<view class="l-left" @click="showLeadMan = true">
<text style="color: red;font-weight: bold;text-align: center;">*</text>
引车员
<text class="xixi">点击选择</text>
</view>
<view class="l-right">
<input type="text" v-model="nickname" placeholder="请输入引车员">
</view>
</view>
<view class="list-box" @click="toSelectProject()" v-if="isInsert">
<view class="l-left">检测流程</view>
<view class="l-right">
<input type="textarea" v-model="inspectionWorkNodeStr" placeholder="点击选择检测流程">
</view>
</view>
</view>
<view class="dlanniu" @click="getgoodes()" v-if="isInsert">
<text>开始检测</text>
</view>
<view class="dlanniu" @click="edit()" v-else>
<text>确认修改</text>
</view>
<u-picker :show="show" :columns="columns" :defaultIndex="kehuDefaultIndex" @confirm="confirms" @cancel="cancels" keyName="label"></u-picker>
<u-picker :show="showgoods" ref="uPicker" :columns="goodsone" :defaultIndex="goodsDefaultIndex" @confirm="confirmgoods" @cancel="cancelgoods"
@change="changeHandler" keyName="label"></u-picker>
<u-picker :show="shownature" :columns="nature" @confirm="confirmsnature" @cancel="cancelsnature"
keyName="label"></u-picker>
<u-picker :show="showxin" :columns="xinlist" :defaultIndex="xinDefaultIndex" @confirm="confirmxin" @cancel="cancelxin"
keyName="label"></u-picker>
<u-picker :show="showzhi" :columns="zhilist" @confirm="confirmzhi" @cancel="cancelzhi"
keyName="label"></u-picker>
<u-picker :show="showLeadMan" :columns="leadManList" :defaultIndex="defaultIndex" @confirm="confirmLeadMan" @cancel="cancelLeadMan"
keyName="nickname"></u-picker>
</view>
</view>
<!-- 底部 -->
</view>
</template>
<script>
import config from '@/config';
import request from '../../utils/request';
import upload from '@/utils/upload.js'
import {getToken, getTenantId} from '@/utils/auth'
export default {
data() {
return {
imagePath: '',
fileList: [],
title: '新增线下订单',
customerSource: '',
buyName: '',
nickname:'',
buyPhone: '',
userAddress: '',
carNum: '',
carStatus: '',
carIdNo: '',
carModel: '',
carNature: '',
show: false,
shownature: false,
showgoods: false,
showxin: false,
showzhi: false,
showLeadMan: false,
skuId: 0,
inspectionWorkNodes: [],
defaultIndex:[0],
kehuDefaultIndex:[0],
goodsDefaultIndex:[0,0],
columns: [],
options: [],
nature: [],
goodsone: [],
goodstwo: [],
columnData: [],
xinlist: [],
zhilist: [],
baseUrl: this.$baseImageUrl,
goodsId: '',
msg: '3',
tapnum: 0,
fenlist: [],
goodstext: '',
ftitle: null,
shopImages: [],
shoplist: {},
province: '',
unitName: '',
kehui: '',
naturetext: '',
customerData: [],
inspectionWorkNodeStr: "",
leadManId:undefined,
leadManList: [],
isInsert:true,
inspectionId: undefined,
xinDefaultIndex:[0]
}
},
onLoad(options) {
this.getinitialize()
this.getLeadeMan()
uni.$on('selectProject', (data) => {
this.inspectionWorkNodes = data
for (var i = 0; i < this.inspectionWorkNodes.length; i++) {
this.inspectionWorkNodeStr = this.inspectionWorkNodeStr + this.inspectionWorkNodes[i].projectName + " "
this.inspectionWorkNodes[i].orderNum = i + 1
}
});
if (options.inspectionInfoId){
this.isInsert = false
this.inspectionId = options.inspectionInfoId
this.title = '修改线下订单'
this.getInspectionInfo()
}
},
onShow() {
},
methods: {
handleClick() {
if (this.isInsert) {
this.showgoods = true;
} else {
uni.showToast({
title: '不可修改商品',
icon: 'none'
})
}
},
changeHandler(e) {
const {
columnIndex,
value,
values, // values为当前变化列的数组内容
index,
// 微信小程序无法将picker实例传出来只能通过ref操作
picker = this.$refs.uPicker
} = e
// 当第一列值发生变化时,变化第二列(后一列)对应的选项
if (columnIndex === 0) {
// picker为选择器this实例变化第二列对应的选项
picker.setColumnValues(1, this.columnData[index])
}
},
confirms(e) {
this.customerSource = e.value[0].label
this.show = false
},
cancels() {
this.show = false
},
// xin
confirmxin(e) {
this.carStatus = e.value[0].label
this.showxin = false
},
cancelxin() {
this.showxin = false
},
//zhi
confirmzhi(e) {
this.carNature = e.value[0].label
this.showzhi = false
},
confirmLeadMan(e) {
this.nickname = e.value[0].nickname
this.leadManId = e.value[0].id
this.showLeadMan = false
},
cancelzhi() {
this.showzhi = false
},
cancelLeadMan() {
this.showLeadMan = false
},
/*获取引车员信息*/
getLeadeMan() {
request({
url: '/system/role/getUsersByRoleCode',
method: 'get',
params: {
code: "jcycy"
}
}).then(res => {
this.leadManList.push(res.data)
})
},
confirmsnature(e) {
this.naturetext = e.value[0].label
this.shownature = false
},
cancelsnature() {
this.shownature = false
},
confirmgoods(e) {
this.goodstext = e.value[1].label
this.skuId = e.value[1].value
this.showgoods = false
},
cancelgoods() {
this.showgoods = false
},
async getinitialize() {
let res = await request({
url: '/partnerOwn/partner/getCustomerSource',
method: 'get',
})
this.columns.push(res.data)
let rescar = await request({
url: '/rescue/dict/data/type/car_nature',
method: 'get',
})
this.nature.push(rescar.data)
let resx = await request({
url: '/system/inspectionGoods/partnerGoodsListCol',
method: 'get',
})
this.goodsone.push(resx.data.goodsList)
this.goodsone.push(resx.data.skuList[0])
this.columnData = resx.data.skuList
let resxin = await request({
url: '/rescue/dict/data/type/car_status',
method: 'get',
})
this.xinlist.push(resxin.data)
let reszhi = await request({
url: '/rescue/dict/data/type/car_use_nature',
method: 'get',
})
this.zhilist.push(reszhi.data)
},
toSelectProject() {
uni.navigateTo({
url: '/pages/index/selectProject'
})
},
async getgoodes() {
if (this.carNum == '' || this.customerSource == "" || this.skuId == '' || this.leadManId == undefined) {
uni.showToast({
title: '车牌号 客户来源 商品 引车员 必填!',
icon: 'none'
})
return
}
if (this.inspectionWorkNodes.length == 0) {
uni.showToast({
title: '请选择检测流程!',
icon: 'none'
})
return
}
let data = {
partnerId: uni.getStorageSync('partnerId'),
buyName: this.buyName,
buyPhone: this.buyPhone,
userAddress: this.userAddress,
unitName: this.unitName,
carNum: this.carNum,
carModel: this.carModel,
carStatus: this.carStatus,
carIdNo: this.carIdNo,
customerSource: this.customerSource,
skuId: this.skuId,
carNature: this.carNature,
inspectionWorkNodes: this.inspectionWorkNodes,
leadManId: this.leadManId
}
let res = await request({
url: '/system/info/add',
method: 'post',
data: data
})
if (res.code == 200) {
uni.showToast({
title: "检测已开始"
})
}
setTimeout(() => {
uni.navigateBack()
}, 2000);
},
async edit() {
if (this.carNum == '' || this.customerSource == "" || this.leadManId == undefined) {
uni.showToast({
title: '车牌号 客户来源 引车员 必填!',
icon: 'none'
})
return
}
let data = {
partnerId: uni.getStorageSync('partnerId'),
id: this.inspectionId,
buyName: this.buyName,
buyPhone: this.buyPhone,
userAddress: this.userAddress,
unitName: this.unitName,
carNum: this.carNum,
carModel: this.carModel,
carStatus: this.carStatus,
carIdNo: this.carIdNo,
customerSource: this.customerSource,
skuId: this.skuId,
carNature: this.carNature,
inspectionWorkNodes: this.inspectionWorkNodes,
leadManId: this.leadManId
}
let res = await request({
url: '/system/info/update',
method: 'post',
data: data
})
if (res.code == 200) {
uni.showToast({
title: "修改成功"
})
let resp = await request({
url: '/system/info/getWeorkNodesById',
method: 'get',
params: {
inspectionId: this.inspectionId
}
})
//调用重新检测
let res = await request({
url: '/system/info/recheck',
method: 'post',
data: {
inspectionInfoId: this.inspectionId,
workNodes: resp.data
}
})
}
setTimeout(() => {
uni.navigateTo({
url: '/pages/staff/staff'
})
}, 2000);
},
/*根据工单Id查询工单详情*/
getInspectionInfo(){
request({
url: '/system/info/' + this.inspectionId,
method: 'get'
}).then(res => {
this.shoplist = res.data
this.buyName = res.data.buyName
this.buyPhone = res.data.buyPhone
this.userAddress = res.data.userAddress
this.unitName = res.data.unitName
this.carNum = res.data.carNum
this.carModel = res.data.carModel
this.carStatus = res.data.carStatus
this.carIdNo = res.data.carIdNo
this.customerSource = res.data.customerSource
this.skuId = res.data.skuId
this.carNature = res.data.carNature
this.leadManId = res.data.leadManId
setTimeout(() => {
let result = this.leadManList
.map((subArray, subArrayIndex) => {
const index = subArray.findIndex(item => item.id === res.data.leadManId);
if (index !== -1) {
// 返回的是子数组的索引和匹配项的索引
return { subArrayIndex, itemIndex: index };
} else {
// 没有找到匹配项,返回 null 或 undefined
return null;
}
})
.filter(item => item !== null); // 过滤掉没有匹配的项
let index = result[0].itemIndex
let subArrayIndex = result[0].subArrayIndex
this.defaultIndex = [index]
this.nickname = this.leadManList[subArrayIndex][index].nickname
//客户来源
let kehuResult = this.columns
.map((subArray, subArrayIndex) => {
const index = subArray.findIndex(item => item.label === res.data.customerSource);
if (index !== -1) {
// 返回的是子数组的索引和匹配项的索引
return { subArrayIndex, itemIndex: index };
} else {
// 没有找到匹配项,返回 null 或 undefined
return null;
}
})
.filter(item => item !== null); // 过滤掉没有匹配的项
this.kehuDefaultIndex = [kehuResult[0].itemIndex]
// 新旧车
//客户来源
let xinResult = this.xinlist
.map((subArray, subArrayIndex) => {
const index = subArray.findIndex(item => item.label === res.data.carStatus);
if (index !== -1) {
// 返回的是子数组的索引和匹配项的索引
return { subArrayIndex, itemIndex: index };
} else {
// 没有找到匹配项,返回 null 或 undefined
return null;
}
})
.filter(item => item !== null); // 过滤掉没有匹配的项
let a = [kehuResult[0]]
this.xinDefaultIndex = [a.itemIndex]
}, 1000);
})
},
// 提交
async getgoods() {
let res = await request({
url: '/partnerOwn/partner/editPartnerInfo',
method: 'post',
data: this.shoplist
})
if (res.code == 200) {
uni.showToast({
title: "修改成功"
})
}
setTimeout(() => {
uni.navigateBack()
}, 2000);
},
getxz(e) {
this.releasebox.goodsCategoryId = e.value[0].id
this.ftitle = e.value[0].categoryName
},
gettapindex(index) {
this.tapnum = index
},
getback() {
uni.navigateBack()
},
getyes() {
this.show = false
},
open() {
},
close() {
this.guige = false
},
deletePic1(event) {
this[`fileList${event.name}`].splice(event.index, 1)
},
async afterRead1(event) {
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
let lists = [].concat(event.file)
let fileListLen = this[`fileList${event.name}`].length
lists.map((item) => {
this[`fileList${event.name}`].push({
...item,
})
})
for (let i = 0; i < lists.length; i++) {
const result = await this.uploadFilePromise1(lists[i].url)
let item = this[`fileList${event.name}`][fileListLen]
this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
status: 'success',
message: '',
url: result
}))
fileListLen++
}
},
uploadFilePromise1(url) {
uni.showLoading({
title: '扫描中',
});
return new Promise((resolve, reject) => {
let a = uni.uploadFile({
url: this.$baseUrl + '/common/uploadImg', // 仅为示例,非真实的接口地址
filePath: url,
name: 'file',
header: {
'Tenant-Id': getTenantId(),
'Authorization': 'Bearer ' + getToken()
},
formData: {
user: 'test'
},
success: (res) => {
try {
let img = JSON.parse(res.data);
this.imagePath = img.data.url
setTimeout(() => {
this.vehicleLicenseOCR()
}, 1000)
} catch (e) {
//TODO handle the exception
}
setTimeout(() => {
resolve(res.data.data)
}, 1000)
}
});
})
},
async vehicleLicenseOCR() {
let data = {
imagePath: this.baseUrl + '/' + this.imagePath
//imagePath :'http://www.nuoyunr.com/lananRsc/detection/jsz.jpg'
}
let res = await request({
url: '/partnerOwn/partner/vehicleLicenseOCR',
method: 'post',
params: data
})
this.buyName = res.data.FrontInfo.Owner
this.userAddress = res.data.FrontInfo.Address
this.carNum = res.data.FrontInfo.PlateNo
this.carModel = res.data.FrontInfo.Model
this.carIdNo = res.data.FrontInfo.Vin
this.carNature = res.data.FrontInfo.UseCharacter
uni.hideLoading();
uni.showToast({
title: '识别成功',
});
}
}
}
</script>
<style scoped lang="scss">
.content {
box-sizing: border-box;
width: 100%;
height: calc(100vh);
background: white;
}
.top-heder {
width: 100%;
height: 46px;
background: white;
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
padding: 5px 15px;
}
.t-title {
font-size: 17px;
font-weight: bold;
color: #333333;
}
.t-left {
width: 10%;
}
.t-you {
height: 100%;
width: 20%;
}
.t-input {
width: 80%;
height: 36px;
background: #F0F0F0;
border-radius: 50px;
box-sizing: border-box;
padding: 0 15px;
display: flex;
align-items: center;
}
.top-ail {
width: 100%;
box-sizing: border-box;
padding: 15px;
background-color: #F4F4F4;
// height: calc(100vh);
}
.mub {
background-color: #F4F4F4;
height: calc(100vh);
}
.dix {
display: flex;
align-items: center;
}
.upimg {
width: 100%;
height: 126px;
border-radius: 8px;
box-sizing: border-box;
background-color: white;
image {
width: 100%;
height: 100%;
}
}
.box-list {
width: 100%;
border-radius: 8px;
box-sizing: border-box;
padding: 10px;
background-color: white;
margin: 10px auto;
}
.list-box {
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
padding: 15px 5px;
border-bottom: 1px solid #EEEEEE;
}
.l-left {
font-size: 16px;
font-weight: 400;
color: #333333;
}
.l-right {
font-size: 16px;
font-weight: 400;
color: #999999;
text-align: right;
}
.xiaolan {
// width: 109px;
// height: 30px;
background: #E2EAFF;
border-radius: 50px;
display: flex;
align-content: center;
justify-self: center;
box-sizing: border-box;
padding: 5px;
font-size: 14px;
font-weight: 400;
color: #0D2E8D;
}
.xiaohui {
// width: 141px;
// height: 30px;
box-sizing: border-box;
padding: 0px 10px;
background: #F7F7F7;
border-radius: 50px;
display: flex;
align-items: center;
justify-content: center;
margin: 10px;
}
.hui-right {
border-left: 1px solid #DDDDDD;
padding: 5px;
margin-left: 5px;
}
.wrap-box {
width: 100%;
box-sizing: border-box;
display: flex;
flex-wrap: wrap;
}
.bottom-di {
width: 100%;
height: 56px;
background: #FFFFFF;
border-radius: 8px;
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
padding: 0px 20px;
margin-bottom: 10px;
}
.thui {
font-size: 16px;
font-weight: 400;
color: #666666;
margin-top: 10px;
margin-left: 8px;
}
.imgs {
box-sizing: border-box;
margin-top: 20px;
}
.p-box {
border-radius: 10px;
overflow: hidden;
box-sizing: border-box;
padding: 20px;
width: 100%;
background-color: white;
}
.p-top {
width: 100%;
text-align: center;
font-size: 17px;
font-weight: bold;
color: #000000;
margin-bottom: 20px;
}
.on-input {
width: 100%;
display: flex;
align-items: center;
box-sizing: border-box;
}
.ipt-kuang {
width: 70%;
height: 30px;
background: #FFFFFF;
border-radius: 8px 8px 8px 8px;
opacity: 1;
border: 1px solid #DDDDDD;
display: flex;
align-items: center;
margin: 10px auto;
box-sizing: border-box;
padding: 0px 10px;
}
.t-left {
width: 20%;
font-size: 14px;
font-weight: 400;
color: #000000;
}
.dlanniu {
width: 80%;
height: 45px;
background: linear-gradient(180deg, #3F61C0 0%, #0D2E8D 100%);
border-radius: 50px;
display: flex;
align-items: center;
justify-content: center;
margin: 20px auto;
color: white;
}
.da {
font-size: 16px;
}
//
.top {
box-sizing: border-box;
padding: 0px 15px;
width: 100%;
border-radius: 10px;
margin: 10px auto;
background-color: white;
}
.top-box {
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
padding: 20px 0px;
}
.tb-left {
height: 100%;
width: 80%;
display: flex;
align-items: center;
}
.uicon {
width: 18px;
height: 18px;
border-radius: 4px;
color: white;
background: orangered;
display: flex;
justify-content: center;
align-items: center;
font-size: 12px;
font-weight: bold;
margin-right: 6px;
}
.tb-right {
width: 20px;
height: 26px;
image {
width: 100%;
height: 100%;
}
}
.text1 {
font-size: 16px;
font-weight: bold;
color: #363636;
}
.hong1 {
margin-top: 5px;
font-size: 12px;
font-weight: 400;
color: #FF5453;
}
.hong2 {
margin-top: 5px;
font-size: 12px;
font-weight: 400;
}
.tinput {
width: 100%;
display: flex;
background: white;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
padding: 16px;
margin-top: 14px;
}
.xixi {
font-size: 12px;
color: #0D2E8D;
margin-left: 10px;
}
</style>