160 lines
4.3 KiB
Vue
160 lines
4.3 KiB
Vue
<!-- 订单取消原因申请 -->
|
||
<template>
|
||
<!-- 自定义头部 -->
|
||
<UniNav :title="title" @goBack="goBack"></UniNav>
|
||
<!-- end -->
|
||
<view class="pageBox">
|
||
<view class="boxCon concelBox">
|
||
<view class="tabConList">
|
||
<view class="item">
|
||
<text>寄件人:</text>
|
||
<view>{{ detailsData.senderName }}</view>
|
||
</view>
|
||
<view class="item">
|
||
<text>订单号:</text>
|
||
<view>{{ detailsData.orderId }}</view>
|
||
</view>
|
||
<view class="item">
|
||
<text>寄件人地址:</text>
|
||
<view>{{ detailsData.senderAddress }}</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="boxCon concelBox">
|
||
<view class="tabConList">
|
||
<view class="item" @click="handleCause">
|
||
<text>订单取消原因</text>
|
||
<view class="cause">
|
||
{{ reason }}
|
||
<icon class="nextIcon"></icon>
|
||
</view>
|
||
</view>
|
||
<view class="item">
|
||
<view>
|
||
<textarea
|
||
placeholder="订单取消原因描述:"
|
||
:placeholder-class="placeholderClass"
|
||
v-model="reasonDesc"
|
||
@input="monitorInput"
|
||
></textarea>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="btnBox"
|
||
><button
|
||
class="btn-default uni-mini"
|
||
@click="handleSubmit"
|
||
:disabled="reason === '' || !reason"
|
||
:class="reason === '' || !reason ? 'disabled' : ''"
|
||
>
|
||
确定
|
||
</button></view
|
||
>
|
||
</view>
|
||
</template>
|
||
|
||
<script setup>
|
||
import { ref, onMounted, nextTick } from "vue";
|
||
import { useStore } from "vuex";
|
||
// 设置字符串的长度
|
||
import { validateTextLength } from "@/utils/index.js";
|
||
// 接口
|
||
import { getDetail, taskCancel } from "@/pages/api/index.js";
|
||
// 导入组件
|
||
// 导航组件
|
||
import UniNav from "@/components/uni-nav/index.vue";
|
||
// ------定义变量------
|
||
const store = useStore(); //vuex获取、储存数据
|
||
const users = store.state.user;
|
||
const taskId = users.taskId; //用vuex获取列表页传过来的任务id
|
||
const title = ref("订单取消原因申请"); //nav标题
|
||
let reasonDesc = ref(""); //原因描述
|
||
let reason = users.reasonVal.label !== "" ? users.reasonVal.label : ""; //取消原因
|
||
const detailsData = ref({}); //详情数据
|
||
// ------生命周期------
|
||
onMounted(() => {
|
||
// 获取订单取消原因描述
|
||
if (users.reasonDesc !== "") {
|
||
reasonDesc.value = users.reasonDesc;
|
||
}
|
||
// 获取详情
|
||
getDetails(taskId);
|
||
});
|
||
// ------定义方法------
|
||
// 获取详情
|
||
const getDetails = async (id) => {
|
||
await getDetail(id).then((res) => {
|
||
detailsData.value = res.data;
|
||
});
|
||
};
|
||
// 订单取消原因描述控制在100
|
||
const monitorInput = () => {
|
||
nextTick(() => {
|
||
let leng = validateTextLength(reasonDesc.value);
|
||
if (leng > 100) {
|
||
reasonDesc.value = reasonDesc.value.substring(0, 100);
|
||
}
|
||
});
|
||
};
|
||
// 提交原因申请
|
||
const handleSubmit = async () => {
|
||
if (reason !== "") {
|
||
// 网络慢的时候添加按钮loading
|
||
let times =
|
||
setTimeout(()=>{
|
||
uni.showLoading({
|
||
title: 'loading',
|
||
});
|
||
},500)
|
||
const params = {
|
||
id: taskId,
|
||
reason: users.reasonVal.value,
|
||
reasonDesc: reasonDesc.value,
|
||
};
|
||
await taskCancel(params).then((res) => {
|
||
store.commit("user/setTabIndex", 0);
|
||
uni.redirectTo({
|
||
url: "/pages/pickup/index",
|
||
});
|
||
if (res.code === 200) {
|
||
// 操作成功后清除loading
|
||
setTimeout(function () {
|
||
uni.hideLoading();
|
||
}, 500);
|
||
clearTimeout(times)
|
||
goBack();
|
||
return uni.showToast({
|
||
title: "申请成功!",
|
||
duration: 1000,
|
||
icon: "none",
|
||
});
|
||
}
|
||
});
|
||
} else {
|
||
return uni.showToast({
|
||
title: "请选择取消原因!",
|
||
duration: 1000,
|
||
icon: "none",
|
||
});
|
||
}
|
||
};
|
||
// 取消订单原因选择
|
||
const handleCause = () => {
|
||
// 由于要跳转到取消原因页面,跳转后订单原因描述数据会自动销毁,所以先用vuex存起来
|
||
store.commit("user/setReasonDesc", reasonDesc.value);
|
||
// 任务id
|
||
uni.navigateTo({
|
||
url: "/pages/cancel/cause",
|
||
});
|
||
};
|
||
// 返回上一页
|
||
const goBack = () => {
|
||
uni.redirectTo({
|
||
url: "/pages/pickup/index",
|
||
});
|
||
};
|
||
</script>
|
||
|
||
<style src="../../styles/expressage.scss" lang="scss" scoped></style>
|