Files
jjx-admin/pages/order/order.vue
T

542 lines
18 KiB
Vue
Raw 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="page-body">
<!-- 页面内容开始 -->
<!-- 表格搜索组件开始 -->
<vk-data-table-query v-model="queryForm1.formData" :columns="queryForm1.columns"
@search="search"></vk-data-table-query>
<!-- 表格搜索组件结束 -->
<!-- 自定义按钮区域开始 -->
<view>
<el-row>
</el-row>
</view>
<!-- 自定义按钮区域结束 -->
<!-- 表格组件开始 -->
<vk-data-table ref="table1" :action="table1.action" :columns="table1.columns" :query-form-param="queryForm1"
:pagination="true" @current-change="currentChange"
>
<template v-slot:action="{ row, column, index }">
<template v-if="row.type === 0 && row.orderStatus === 1">
<!-- <el-button type="success" size="mini" @click.native="setExpress(row)">发货</el-button>-->
</template>
<template v-if="row.type === 0">
<el-button size="mini" @click.native="showOrderInfo(row)">详情</el-button>
<!-- <template v-if="[5, 7].includes(row.orderStatus)">-->
<!-- <el-button size="mini" type="success" @click.native="changeOrderStatus(row._id, 6)">同意退款-->
<!-- </el-button>-->
<!-- <el-button size="mini" type="danger" @click.native="changeOrderStatus(row._id, 7)">拒绝退款-->
<!-- </el-button>-->
<!-- </template>-->
</template>
<template v-if="row.type === 1">
<el-button size="mini" plain @click.native="showSelfProductInfo(row)">详情</el-button>
</template>
</template>
<template v-slot:goods="{ row, column, index }">
<div v-for="(item, index) in row.goods" :key="index" style="
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;">
<p>商品名称: {{ item.goodsName }}</p>
<p v-if="row.type === 0 && formatSku(item.sku)">规格: {{ formatSku(item.sku) }}</p>
<p>数量: x{{ item.num }}</p>
<p>单价: {{ item.goodsPrice }}元</p>
<template v-if="row.type === 7 && item.isSingleQuote">
<view v-if="item.type === 'enquiry'">报价类型:找买家</view>
<view v-if="item.type === 'old'">报价类型:旧货交易</view>
<view v-if="item.type === 'process'">报价类型:找加工</view>
<view>报价内容:{{ item.sheet.title }}</view>
</template>
<template v-if="row.type === 7 && !item.isSingleQuote">
<view class="flex justify-start items-center">
<span>{{ item.goodsName }}</span>
<span class="text-main">(过期时间:{{
dayjs(row.user.quoteExpiredAt).format('YYYY-MM-DD HH:mm:ss')
}})</span>
</view>
</template>
<p v-if="row.type === 0 && item.company">所属公司: {{ item.company.company.companyName }}</p>
<el-divider v-if="index < row.goods.length - 1"/>
</div>
</template>
</vk-data-table>
<!-- 表格组件结束 -->
<!-- 添加或编辑的弹窗开始 -->
<vk-data-dialog v-model="form1.props.show" :title="form1.props.title" width="60%" mode="form"
:close-on-click-modal="false">
<vk-data-form v-model="form1.data" :rules="form1.props.rules" :action="form1.props.action"
:form-type="form1.props.formType" :columns='form1.props.columns' label-width="120px"
@success="form1.props.show = false;refresh();"></vk-data-form>
</vk-data-dialog>
<!-- 添加或编辑的弹窗结束 -->
<!-- 页面内容结束 -->
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="60%">
<set-express :info="clickInfo" @close="refresh" v-if="dialogVisible && dialogType === 'express'"/>
<order-info :info="clickInfo" @close="refresh" v-if="dialogVisible && dialogType === 'info'"/>
<self-product-info :order-info="clickInfo" :order-id="clickInfo._id" :goods="clickInfo.goods"
v-if="dialogVisible && dialogType === 'self-product'"/>
</el-dialog>
</view>
</template>
<script>
import SetExpress from "./components/setExpress.vue";
import SelfProductInfo from "./components/selfProductInfo.vue";
import OrderInfo from "./components/OrderInfo.vue";
import dayjs from 'dayjs'
var that; // 当前页面对象
var vk = uni.vk; // vk实例
var originalForms = {}; // 表单初始化数据
export default {
components: {SelfProductInfo, SetExpress, OrderInfo},
data() {
// 页面数据变量
return {
showInfo: false,
dialogTitle: null,
dialogType: null,
dialogVisible: false,
info: null,
clickInfo: null,
title: '',
infoColumns: [],
// 页面是否请求中或加载中
loading: false,
// init请求返回的数据
data: {},
// 表格相关开始 -----------------------------------------------------------
table1: {
// 表格数据请求地址
action: "admin/order/sys/getList",
// 表格字段显示规则
columns: [
{
key: "orderNo",
title: "订单号",
type: "text",
},
{
key: "type",
title: "订单类型",
type: "select",
align: "center",
data: [
{value: 0, label: '商城订单'},
{value: 1, label: '金久信自营订单'},
{value: 2, label: '保证金'},
{value: 3, label: '会员升级'},
{value: 4, label: '询价订单'},
{value: 5, label: '加工订单'},
{value: 6, label: '旧货订单'},
{value: 7, label: '报价次数'},
{value: 8, label: '现货广告'},
{value: 9, label: '旧货加急'},
{value: 10, label: '旧货次数'},
{value: 11, label: '金久信学堂下载次数'},
{value: 12, label: '司法调证'},
{value: 13, label: '金久信签约宝次数'},
{value: 14, label: '金久信签约宝'},
{value: 15, label: '金久信自营询价'},
{value: 20, label: 'AI积分充值'},
]
},
{
key: "amount",
title: "订单金额",
type: "html",
formatter: (val = [], row, column, index) => {
let content
if (row.type !== 14) {
content = `<div>订单金额:¥` + row.amount + `</div>`
content += `<div>应付金额:¥${row.offAmount}</div>`
if (row.type < 4 && row.payAmount) {
content += `<div>实付金额:¥${row.payAmount ? row.payAmount : ''}</div>`
}
} else {
content = `<div>订单累计金额:¥` + row.amount + `</div>`
}
return content
}
},
{
key: "orderStatus",
title: "订单状态",
type: "text",
align: "center",
formatter: (val = [], row, column, index) => {
const orderStatusList = [
'待支付',
'待发货',
'待收货',
'待完成',
'已完成',
'退款审核中',
'退款成功',
'退款拒绝',
'',
'',
'待报价',
'已派单待完成',
]
let str = orderStatusList[val]
if (val === 7) str += `: ${row.refundRefuseReason}`
return str
}
},
{
key: "user",
title: "买方",
type: "html",
formatter: (val = [], row, column, index) => {
console.log(val.accountType === 2, val.company.companyName)
let content = `<p>` + val.mobile + `</p>`
content += `<p>` + (val.accountType === 2 ? val.company.companyName : val.person.personName) + `</p>`
console.log(content)
return content
}
},
{
key: "goods",
title: "商品列表",
type: "html",
},
{
key: "remark",
title: "用户备注",
type: "text",
},
{
key: "_add_time",
title: "下单时间",
type: "time",
align: "left",
width: 160,
sortable: "custom"
},
// {
// key: "_add_time",
// title: "距离现在",
// type: "dateDiff",
// align: "left",
// width: 120
// },
{
key: "action",
title: "操作",
type: "html",
}
],
// 多选框选中的值
multipleSelection: [],
// 当前高亮的记录
selectItem: ""
},
// 表格相关结束 -----------------------------------------------------------
// 表单相关开始 -----------------------------------------------------------
// 查询表单请求数据
queryForm1: {
// 查询表单数据源,可在此设置默认值
formData: {},
// 查询表单的字段规则 fieldName:指定数据库字段名,不填默认等于key
columns: [
{
key: "orderNo",
title: "订单号",
type: "text",
width: 160,
mode: "%%"
},
{
key: "type",
title: "订单类型",
type: "select",
data: [
{value: 0, label: '商城订单'},
{value: 1, label: '金久信自营订单'},
{value: 2, label: '保证金'},
{value: 3, label: '会员升级'},
{value: 4, label: '询价订单'},
{value: 5, label: '加工订单'},
{value: 6, label: '旧货订单'},
{value: 7, label: '报价次数'},
{value: 8, label: '现货广告'},
{value: 9, label: '旧货加急'},
{value: 10, label: '旧货次数'},
{value: 11, label: '金久信学堂下载次数'},
{value: 12, label: '司法调证'},
{value: 13, label: '金久信签约宝次数'},
{value: 14, label: '金久信签约宝'},
{value: 15, label: '金久信自营询价'},
{value: 20, label: 'AI积分充值'},
]
},
{
key: "orderStatus",
title: "订单状态",
type: "select",
data: [
{value: 0, label: '待支付'},
{value: 1, label: '待发货'},
{value: 2, label: '待收货'},
{value: 3, label: '待完成'},
{value: 4, label: '已完成'},
{value: 5, label: '退款审核中'},
{value: 6, label: '退款成功'},
{value: 7, label: '退款失败'},
{value: 10, label: '待报价'},
{value: 11, label: '已派单待完成'},
]
},
{
key: "_add_time",
title: "下单时间",
type: "datetimerange",
width: 400,
mode: "[]"
},
]
},
form1: {
// 表单请求数据,此处可以设置默认值
data: {
sort: 0
},
// 表单属性
props: {
// 表单请求地址
action: "",
// 表单字段显示规则
columns: [
{
key: "orderNo",
title: "订单号",
type: "text",
placeholder: "请输入分类名称"
},
{
key: "icon",
title: "图标",
type: "icon",
placeholder: "请选择图标"
},
{
key: "parent_id",
title: "上级分类",
type: "tree-select",
placeholder: "请选择上级分类",
action: "admin/spot/category/sys/getTree",
props: {
list: "rows",
value: "_id",
label: "name",
children: "children"
},
},
{
key: "remark",
title: "备注",
type: "textarea",
maxlength: "99",
showWordLimit: true,
autosize: {
minRows: 2,
maxRows: 10
},
},
{
key: "sort",
title: "排序",
type: "number",
precision: 0,
placeholder: "请输入排序值",
},
],
// 表单验证规则
rules: {
sort: [{
type: 'number',
message: '排序值必须为数字'
}],
name: [
{required: true, message: '分类名称不能为空', trigger: 'blur'},
],
},
// add 代表添加 update 代表修改
formType: "",
// 是否显示表单的弹窗
show: false
}
},
// 其他弹窗表单
formDatas: {},
// 表单相关结束 -----------------------------------------------------------
};
},
// 监听 - 页面每次【加载时】执行(如:前进)
onLoad(options = {}) {
that = this;
vk = that.vk;
that.options = options;
that.init(options);
},
// 监听 - 页面【首次渲染完成时】执行。注意如果渲染速度快,会在页面进入动画完成前触发
onReady() {
},
// 监听 - 页面每次【显示时】执行(如:前进和返回) (页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面)
onShow() {
},
// 监听 - 页面每次【隐藏时】执行(如:返回)
onHide() {
},
// 函数
methods: {
dayjs,
formatSku(sku) {
if (!sku) return ''
if (typeof sku === 'string') return sku
return sku.label || sku.name || sku.title || sku.specName || ''
},
// 页面数据初始化函数
init(options) {
originalForms["form1"] = vk.pubfn.copyObject(that.form1);
},
// 页面跳转
pageTo(path) {
vk.navigateTo(path);
},
// 表单重置
resetForm() {
vk.pubfn.resetForm(originalForms, that);
},
// 搜索
search() {
that.$refs.table1.search();
},
// 刷新
refresh() {
that.$refs.table1.refresh();
this.dialogVisible = false
},
// 获取当前选中的行的数据
getCurrentRow() {
return that.$refs.table1.getCurrentRow();
},
// 监听 - 行的选中高亮事件
currentChange(val) {
that.table1.selectItem = val;
},
// 当选择项发生变化时会触发该事件
selectionChange(list) {
that.table1.multipleSelection = list;
},
// 显示添加页面
addBtn() {
that.resetForm();
that.form1.props.action = 'admin/contract/template/sys/add';
that.form1.props.formType = 'add';
that.form1.props.title = '添加';
that.form1.props.show = true;
},
// 显示修改页面
updateBtn({
item
}) {
that.form1.props.action = 'admin/contract/template/sys/update';
that.form1.props.formType = 'update';
that.form1.props.title = '编辑';
that.form1.props.show = true;
that.form1.data = item;
},
// 删除按钮
deleteBtn({
item,
deleteFn
}) {
deleteFn({
action: "admin/contract/template/sys/delete",
data: {
_id: item._id
},
});
},
// 监听 - 批量操作的按钮点击事件
batchBtn(index) {
switch (index) {
case 1:
vk.toast("批量操作按钮1");
break;
case 2:
vk.toast("批量操作按钮2");
break;
default:
break;
}
},
changeField(id, field, value) {
vk.callFunction({
url: 'admin/old/sys/changeField',
data: {
id, field, value
}
}).then(() => {
this.$refs.table1.refresh()
})
},
doShowInfo(info) {
this.info = info
this.title = '详情'
this.showInfo = true
},
setExpress(item) {
this.clickInfo = item
this.dialogType = 'express'
this.dialogTitle = '发货'
this.dialogVisible = true
},
showSelfProductInfo(item) {
this.clickInfo = item
this.dialogType = 'self-product'
this.dialogTitle = '自营订单详情'
this.dialogVisible = true
},
showOrderInfo(item) {
this.clickInfo = item
this.dialogType = 'info'
this.dialogTitle = '订单详情'
this.dialogVisible = true
},
changeOrderStatus(id, value) {
vk.callFunction({
url: 'admin/order/sys/changeField',
data: {
id,
field: 'orderStatus',
value
}
}).then(() => {
this.$refs.table1.refresh()
})
},
},
// 监听属性
watch: {},
// 过滤器
filters: {},
// 计算属性
computed: {}
};
</script>
<style lang="scss" scoped>
.page-body {
}
</style>