确认收货改造

This commit is contained in:
geng.tang@qq.com
2024-01-02 21:41:41 +08:00
parent e12bdecc5a
commit ebd22b0eee
9 changed files with 267 additions and 96 deletions

View File

@@ -3,7 +3,7 @@ import request from '@/utils/request'
// api地址 // api地址
const api = { const api = {
image: 'captcha/image', image: 'captcha/image',
sendSmsCaptcha: 'captcha/sendSmsCaptcha' sendSmsCode: '/sendSmsCaptcha'
} }
// 图形验证码 // 图形验证码
@@ -12,6 +12,6 @@ export function image() {
} }
// 发送短信验证码 // 发送短信验证码
export function sendSmsCaptcha(data) { export const sendSmsCode = (data) => {
return request.post(api.sendSmsCaptcha, data, { load: false }) return request.post(api.sendSmsCode, data)
} }

View File

@@ -38,8 +38,8 @@ export function cancel(orderId, data) {
} }
// 确认收货 // 确认收货
export function receipt(orderId, data) { export function receipt(data) {
return request.post(api.receipt, { orderId, ...data }) return request.post(api.receipt, data)
} }
// 核销二维码 // 核销二维码

46
node_modules/js/package.json generated vendored
View File

@@ -1,44 +1,12 @@
{ {
"_args": [ "name": "js",
[ "description": "A better `node -p`.",
"js@0.1.0", "author": "Marco Aurelio <thecoreh@gmail.com>",
"E:\\202308\\yunxinwei-uniapp" "version": "0.1.0",
]
],
"_development": true,
"_from": "js@0.1.0",
"_id": "js@0.1.0",
"_inBundle": false,
"_integrity": "sha512-ZBbGYOpact8QAH9RprFWL4RAESYwbDodxiuDjOnzwzzk9pBzKycoifGuUrHHcDixE/eLMKPHRaXenTgu1qXBqA==",
"_location": "/js",
"_phantomChildren": {},
"_requested": {
"type": "version",
"registry": true,
"raw": "js@0.1.0",
"name": "js",
"escapedName": "js",
"rawSpec": "0.1.0",
"saveSpec": null,
"fetchSpec": "0.1.0"
},
"_requiredBy": [
"#DEV:/"
],
"_resolved": "https://registry.npmmirror.com/js/-/js-0.1.0.tgz",
"_spec": "0.1.0",
"_where": "E:\\202308\\yunxinwei-uniapp",
"author": {
"name": "Marco Aurelio",
"email": "thecoreh@gmail.com"
},
"bin": { "bin": {
"js": "bin/js" "js": "./bin/js"
}, },
"dependencies": { "dependencies": {
"commander": "~1.1.1" "commander": "~1.1.1"
}, }
"description": "A better `node -p`.", }
"name": "js",
"version": "0.1.0"
}

43
package-lock.json generated
View File

@@ -1,52 +1,69 @@
{ {
"name": "yunxinwei-uniapp",
"lockfileVersion": 3,
"requires": true, "requires": true,
"lockfileVersion": 1, "packages": {
"dependencies": { "": {
"@dcloudio/types": { "dependencies": {
"dayjs": "^1.11.10",
"luch-request": "^3.0.8"
},
"devDependencies": {
"js": "^0.1.0",
"js-md5": "^0.7.3"
}
},
"node_modules/@dcloudio/types": {
"version": "2.6.12", "version": "2.6.12",
"resolved": "https://registry.npmjs.org/@dcloudio/types/-/types-2.6.12.tgz", "resolved": "https://registry.npmjs.org/@dcloudio/types/-/types-2.6.12.tgz",
"integrity": "sha512-mrCMwcINy1IFjU9VUqLeWBkj404yWs5paLDttBcA+eqUjanuUQbBcTVPqlrGgkyzLXDcV2oDDZRSNxNpXi4kMQ==" "integrity": "sha512-mrCMwcINy1IFjU9VUqLeWBkj404yWs5paLDttBcA+eqUjanuUQbBcTVPqlrGgkyzLXDcV2oDDZRSNxNpXi4kMQ=="
}, },
"commander": { "node_modules/commander": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmmirror.com/commander/-/commander-1.1.1.tgz", "resolved": "https://registry.npmmirror.com/commander/-/commander-1.1.1.tgz",
"integrity": "sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==", "integrity": "sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==",
"dev": true, "dev": true,
"requires": { "dependencies": {
"keypress": "0.1.x" "keypress": "0.1.x"
},
"engines": {
"node": ">= 0.6.x"
} }
}, },
"dayjs": { "node_modules/dayjs": {
"version": "1.11.10", "version": "1.11.10",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz",
"integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
}, },
"js": { "node_modules/js": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmmirror.com/js/-/js-0.1.0.tgz", "resolved": "https://registry.npmmirror.com/js/-/js-0.1.0.tgz",
"integrity": "sha512-ZBbGYOpact8QAH9RprFWL4RAESYwbDodxiuDjOnzwzzk9pBzKycoifGuUrHHcDixE/eLMKPHRaXenTgu1qXBqA==", "integrity": "sha512-ZBbGYOpact8QAH9RprFWL4RAESYwbDodxiuDjOnzwzzk9pBzKycoifGuUrHHcDixE/eLMKPHRaXenTgu1qXBqA==",
"dev": true, "dev": true,
"requires": { "dependencies": {
"commander": "~1.1.1" "commander": "~1.1.1"
},
"bin": {
"js": "bin/js"
} }
}, },
"js-md5": { "node_modules/js-md5": {
"version": "0.7.3", "version": "0.7.3",
"resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz", "resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz",
"integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==", "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==",
"dev": true "dev": true
}, },
"keypress": { "node_modules/keypress": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmmirror.com/keypress/-/keypress-0.1.0.tgz", "resolved": "https://registry.npmmirror.com/keypress/-/keypress-0.1.0.tgz",
"integrity": "sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==", "integrity": "sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==",
"dev": true "dev": true
}, },
"luch-request": { "node_modules/luch-request": {
"version": "3.0.8", "version": "3.0.8",
"resolved": "https://registry.npmjs.org/luch-request/-/luch-request-3.0.8.tgz", "resolved": "https://registry.npmjs.org/luch-request/-/luch-request-3.0.8.tgz",
"integrity": "sha512-5ZVp1y4tFaizbGMOuQwbeyfHnf4PhQAwQ3S1Fm1tS7juMoB14pXslxWriElhiSq6ytYYW0KVC8RShfHiNujFcQ==", "integrity": "sha512-5ZVp1y4tFaizbGMOuQwbeyfHnf4PhQAwQ3S1Fm1tS7juMoB14pXslxWriElhiSq6ytYYW0KVC8RShfHiNujFcQ==",
"requires": { "dependencies": {
"@dcloudio/types": "^2.0.16" "@dcloudio/types": "^2.0.16"
} }
} }

View File

@@ -293,8 +293,7 @@
{ {
"path": "pages/order/delivery", "path": "pages/order/delivery",
"style": { "style": {
"navigationBarTitleText": "确认收货", "navigationBarTitleText": "确认收货"
"enablePullDownRefresh": true
} }
}, },
{ {
@@ -513,5 +512,15 @@
"custom": { "custom": {
"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue" "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
} }
},
"condition" : { //模式配置,仅开发期间生效
"current": 0, //当前激活的模式(list 的索引项)
"list": [
{
"name": "", //模式名称
"path": "", //启动页面,必选
"query": "" //启动参数在页面的onLoad函数里面得到
}
]
} }
} }

View File

@@ -36,17 +36,29 @@
<image src="../../static/not-dealer.png" v-else mode="aspectFill" style="width: 300rpx;height: 200rpx" @click="chooseImage(5)"></image> <image src="../../static/not-dealer.png" v-else mode="aspectFill" style="width: 300rpx;height: 200rpx" @click="chooseImage(5)"></image>
</u-form-item> </u-form-item>
</view> </view>
<view class="form-wrapper">
<u-input type="number" v-model="receiptPhone" placeholder="请输入收货人手机号" />
<view class="captcha-item">
<u-input type="text" placeholder="请输入验证码" v-model="captcha" placeholder-class="captcha_input" />
<u-button class="yanzhengma" @click="getCaptcha">{{time}} {{text}}</u-button>
</view>
<u-input type="text" v-model="emergentUser" placeholder="请输入紧急联系人" />
<u-input type="text" v-model="officeAddress" placeholder="请输入单位地址" />
<u-input type="text" v-model="homeAddress" placeholder="请输入家庭地址" />
</view>
</u-form> </u-form>
<view class="btn"> <view class="btn">
<u-button type="primary" shape="circle" @click="handleSubmit()"> <u-button type="primary" shape="circle" @click="handleSubmit()">
{{ submitText }} {{ submitText }}
</u-button> </u-button>
</view> </view>
<view class="btn"> <!-- <view class="btn">
<u-button shape="circle" @click="resetting"> <u-button shape="circle" @click="resetting">
重置 重置
</u-button> </u-button>
</view> </view> -->
<view class="btn"></view> <view class="btn"></view>
</view> </view>
</template> </template>
@@ -58,10 +70,51 @@
import { import {
pageOrder, pageOrder,
removeOrder, removeOrder,
receiptOrder, receipt,
getOrder getOrder
} from '@/websoft/api/order.js' } from '@/websoft/api/order.js'
import { fileUrl } from '@/config.js'; import { sendSmsCode } from '@/api/captcha.js'
import { fileUrl } from '@/config.js'
import { isMobile } from '@/utils/verify'
// 表单验证规则
const rules = {
receiptPhone: [{
required: true,
message: '请输入手机号',
trigger: ['blur', 'change']
}, {
// 自定义验证函数
validator: (rule, value, callback) => {
// 返回true表示校验通过返回false表示不通过
return isMobile(value)
},
message: '手机号码不正确',
// 触发器可以同时用blur和change
trigger: ['blur'],
}],
captcha: [{
required: true,
message: '请输入验证码',
trigger: ['blur', 'change']
}],
emergentUser: [{
required: true,
message: '请输入紧急联系人',
trigger: ['blur', 'change']
}],
officeAddress: [{
required: true,
message: '请输入单位地址',
trigger: ['blur', 'change']
}],
homeAddress: [{
required: true,
message: '请输入家庭地址',
trigger: ['blur', 'change']
}],
}
export default { export default {
data() { data() {
@@ -69,12 +122,24 @@
form: {}, form: {},
order: {}, order: {},
orderSourceData: [], orderSourceData: [],
// 验证码(主要代码,直接复制使用即可)
time: '',
text: '获取验证码',
receiptPhone: '',
captcha: '',
emergentUser: '',
officeAddress: '',
homeAddress: '',
// 按钮禁用 // 按钮禁用
disabled: false, // disabled: false,
submitText: '证件已上传并确认收货', submitText: '证件已上传并确认收货',
} }
}, },
// 必须要在onReady生命周期因为onLoad生命周期组件可能尚未创建完毕
onReady() {
this.$refs.uForm.setRules(this.rules)
},
/** /**
* 生命周期函数--监听页面加载 * 生命周期函数--监听页面加载
*/ */
@@ -88,48 +153,116 @@
methods: { methods: {
// 加载订单 // 加载订单
getData(){ getData() {
const app = this const app = this
const { orderId } = this const { orderId } = this
getOrder(orderId).then(res => { getOrder(orderId).then(res => {
console.log("res: ",res);
app.order = res.data app.order = res.data
if(res.data.orderSourceData.length > 0){ if(res.data.orderSourceData.length > 0){
app.orderSourceData = JSON.parse(res.data.orderSourceData) app.orderSourceData = JSON.parse(res.data.orderSourceData)
} }
}) })
}, },
//获取验证码(主要代码,直接复制使用即可)
getCaptcha() {
if(this.disabled){
uni.showToast({
title: '请耐心等待',
icon: 'none'
})
return
}
var that = this;
if (!that.receiptPhone) {
uni.showToast({
title: '请输入手机号',
icon: 'none'
})
return
}
console.log('that====: ');
sendSmsCaptcha({
phone: that.receiptPhone,
type: 'RECEIPT'
}).then(result => {
console.log(result)
if(result){
if(result.code == 0) {
that.$success("发送短信验证码成功")
that.orderSourceData = []
// 刷新订单列表
that.getData()
that.disabled = true
that.setInterValFunc()
} else {
that.$toast(result.message)
}
}
}).catch(err => {
console.log('e2: ',err);
that.$toast(err.message)
}).finally(e => {
console.log('e3: ',e);
})
},
setInterValFunc() {
this.time = 60;
this.text = '秒';
this.setTime = setInterval(() => {
if (this.time - 1 == 0) {
this.time = '';
this.text = '重新获取';
this.code = '';
this.disabled = false;
clearInterval(this.setTime);
} else {
this.disabled = true;
this.time--;
}
}, 1000);
},
// 重置 // 重置
resetting(){ /* resetting(){
const app = this const app = this
const { orderId } = app const { orderId } = app
receiptOrder({ receipt({
orderId, orderId: orderId,
orderSourceData: '' orderSourceData: '',
}).then(result => { }).then(result => {
app.$success("重置成功") app.$success("重置成功")
app.orderSourceData = [] app.orderSourceData = []
// 刷新订单列表 receiptPhone = ''
captcha = ''
emergentUser = ''
officeAddress = ''
homeAddress = ''
time = ''
text = '获取验证码'
app.getData() app.getData()
}) })
}, }, */
// 表单提交 // 表单提交
handleSubmit() { handleSubmit() {
const app = this const app = this
const { orderId,orderSourceData } = app const { orderId,orderSourceData,captcha,receiptPhone,emergentUser,officeAddress, homeAddress } = app
if(orderSourceData.length < 5) { if(orderSourceData.length < 5) {
return return
} }
receiptOrder({ receipt(app).then(result => {
orderId, if(result.code == 0) {
orderSourceData: JSON.stringify(orderSourceData) app.$success("上传成功")
}).then(result => { uni.navigateBack()
app.$success("上传成功") } else {
uni.navigateBack() app.$toast(result.message)
}
}).catch(err => { }).catch(err => {
app.$toast(err.message) app.$toast(err.message)
}) })
}, },
// 上传图片 // 上传图片
@@ -219,9 +352,9 @@
background: linear-gradient(to right, $main-bg, $main-bg2); background: linear-gradient(to right, $main-bg, $main-bg2);
// 禁用按钮 // 禁用按钮
&.disabled { /* &.disabled {
opacity: 0.6; opacity: 0.6;
} } */
} }
} }
@@ -328,4 +461,39 @@
width: 700rpx; width: 700rpx;
margin: 20rpx auto; margin: 20rpx auto;
} }
.captcha_input {
font-size: 28rpx;
font-weight: 400;
color: #CACACA;
}
.yanzhengma {
position: absolute;
right: 0;
top: -8rpx;
bottom: 0;
width: 140rpx;
height: 60rpx;
line-height: 60rpx;
text-align: center;
background: #00BD87;
border-radius: 30rpx;
font-size: 22rpx;
font-family: PingFang SC;
font-weight: 500;
color: #FFFFFF;
}
.captcha-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10rpx;
border-bottom: 3rpx solid #DDDDDD;
margin-bottom: 25rpx;
position: relative;
}
</style> </style>

View File

@@ -442,11 +442,16 @@
</view> </view>
</view> </view>
</view> </view>
<view class="info-item" v-if="item.expirationDay > 0"> <view class="info-item" v-if="item.payStatus == 10 && item.expirationDay < 0">
<view class="item-lable">逾期天数</view> <view class="item-lable">逾期天数</view>
<view class="item-content"><text class="yuqi-text">{{ item.expirationDay }}天</text> <view class="item-content"><text class="yuqi-text">{{ item.expirationDay }}天</text>
</view> </view>
</view> </view>
<view class="info-item" v-if="item.expirationDay >= 0">
<view class="item-lable">剩余天数</view>
<view class="item-content"><text class="yuqi-text">{{ item.expirationDay }}天</text>
</view>
</view>
</view> </view>
@@ -639,7 +644,7 @@
app.isLoading = true app.isLoading = true
OrderApi.getOrder(app.orderId) OrderApi.getOrder(app.orderId)
.then(result => { .then(result => {
console.log("result: ", result); console.log("result: {}", result);
const order = result.data const order = result.data
app.order = order app.order = order
app.equipment = result.data.equipment app.equipment = result.data.equipment
@@ -812,15 +817,18 @@
content: '确认收到商品了吗?', content: '确认收到商品了吗?',
success(o) { success(o) {
if (o.confirm) { if (o.confirm) {
OrderApi.receipt(orderId) // OrderApi.receipt(orderId)
.then(result => { // .then(result => {
// 显示成功信息 // // 显示成功信息
app.$success(result.message) // app.$success(result.message)
setTimeout(() => { // setTimeout(() => {
// 刷新当前订单数据 // // 刷新当前订单数据
app.getOrderDetail(true) // app.getOrderDetail(true)
}, 1500) // }, 1500)
}) // })
this.$navTo('pages/order/delivery', {
orderId
})
} }
} }
}); });

View File

@@ -50,10 +50,10 @@
v-if="item.orderStatus == 30">设备编号{{ item.equipment.equipmentCode }}</text> v-if="item.orderStatus == 30">设备编号{{ item.equipment.equipmentCode }}</text>
<text class="twoline-hide">设备名称{{ item.equipmentGoods.goodsName }}</text> <text class="twoline-hide">设备名称{{ item.equipmentGoods.goodsName }}</text>
<text class="twoline-hide">设备型号{{ item.equipmentGoods.batteryModel }}</text> <text class="twoline-hide">设备型号{{ item.equipmentGoods.batteryModel }}</text>
<text class="twoline-hide yuqi-text" v-if="item.expirationDay < 0">逾期状态: <text class="twoline-hide yuqi-text" v-if="item.payStatus == 10 && item.expirationDay < 0">逾期状态:
(已逾期{{ Math.abs(item.expirationDay) }})</text> (已逾期{{ Math.abs(item.expirationDay) }})</text>
<text class="twoline-hide yuqi-text" <text class="twoline-hide yuqi-text"
v-if="item.expirationDay < 7 && item.expirationDay > 0">逾期状态: 即将过期</text> v-if="item.payStatus == 10 && item.expirationDay < 7 && item.expirationDay > 0">逾期状态: 即将过期</text>
</view> </view>
<view class="goods-props clearfix"> <view class="goods-props clearfix">
<!-- <view class="goods-props-item"> <!-- <view class="goods-props-item">

View File

@@ -69,6 +69,7 @@ $http.requestStart = options => {
options.header['platform'] = store.getters.platform options.header['platform'] = store.getters.platform
// 请求前加入Token // 请求前加入Token
options.header['Access-Token'] = store.getters.token options.header['Access-Token'] = store.getters.token
options.header['tenantId'] = '6'
// return false 表示请求拦截,不会继续请求 // return false 表示请求拦截,不会继续请求
return options return options
} }