fix-0609-xwk
向文可 3 years ago
parent a7869c32b0
commit 63f7926a7c

@ -25,11 +25,11 @@ export const detail = (id) => {
method: 'get',
});
};
export const shipList = (orderIs) => {
export const shipList = (orderIds) => {
return request({
url: '/mall/trade/admin/tradeOrder/listDeliveryOrder',
method: 'get',
params: { orderIs },
params: { orderIds },
});
};
export const logistics = (id) => {
@ -85,6 +85,19 @@ export const send = (data) => {
data,
});
};
export const sendVirtual = (data) => {
return request({
url: '/mall/trade/admin/tradeOrder/virtualDelivery/' + data,
method: 'put',
});
};
export const sendVirtualAll = (data) => {
return request({
url: '/mall/trade/admin/tradeOrder/batchVirtualDelivery',
method: 'put',
data,
});
};
export const sendAll = (data) => {
return request({
url: '/mall/trade/admin/tradeOrder/batchDelivery',

@ -3,7 +3,7 @@ import { ElMessage, ElMessageBox } from '@/plugins/element-plus';
const state = () => ({
code: 'CategoryManagement',
condition: {
orderIs: [],
orderIds: [],
},
list: [],
total: 0,

@ -4,7 +4,7 @@ import { dict } from '@/plugins/global-api';
const state = () => ({
code: 'OrderShipManagement',
condition: {
orderIs: [],
orderIds: [],
},
list: [],
total: 0,
@ -25,7 +25,7 @@ const mutations = {
};
const actions = {
search: async ({ state }) => {
let res = await api.shipList(state.condition.orderIs.join(','));
let res = await api.shipList(state.condition.orderIds.join(','));
if (!res) {
ElMessage.error('查询发货订单列表失败');
}
@ -37,11 +37,18 @@ const actions = {
company: await api.searchShip(),
});
},
save: async ({ state }, data) => {
save: async ({ state, dispatch }, data) => {
let res = null;
if (data.every((item) => item.logistics.companyCode && item.logistics.trackingNo)) {
res = await api.sendAll(
data.map((item) => {
if (data.every((item) => item.orderType === 4 || (item.logistics.companyCode && item.logistics.trackingNo))) {
res = await api.sendVirtualAll({
orderIds: data.filter((item) => item.orderType === 4).map((item) => item.orderId),
});
if (!res) {
ElMessage.error('虚拟发货失败');
}
data = data
.filter((item) => item.orderType !== 4)
.map((item) => {
return {
companyCode: item.logistics.companyCode,
companyName: dict(state.opts.company, item.logistics.companyCode, {
@ -51,10 +58,11 @@ const actions = {
orderId: item.orderId,
trackingNo: item.logistics.trackingNo,
};
})
);
});
res = !data.length || (await api.sendAll(data));
if (res) {
ElMessage.success('批量发货成功');
dispatch('order/search', {}, { root: true });
} else {
ElMessage.error('批量发货失败');
}

@ -4,7 +4,7 @@ import { ElMessage, ElMessageBox } from '@/plugins/element-plus';
const state = () => ({
code: 'ProductManagement',
condition: {
orderIs: [],
orderIds: [],
},
list: [],
total: 0,
@ -137,10 +137,10 @@ const actions = {
enable: async ({ dispatch }, data) => {
let res = await api.enable(data);
if (res) {
ElMessage.success('保存成功');
ElMessage.success((data.isEnable ? '上架' : '下架') + '成功');
dispatch('search');
} else {
ElMessage.error('保存失败');
ElMessage.error((data.isEnable ? '上架' : '下架') + '失败');
}
return res;
},

@ -44,7 +44,7 @@
</el-form>
</template>
</table-list>
<ProductPicker ref="refsPicker" @pick="handlePick" />
<ProductPicker ref="refsPicker" :ids="currentTimeRange?.productIdList || []" @pick="handlePick" />
<ProductSku ref="refsSku" @save="handleSkuSave" />
</div>
</template>
@ -64,6 +64,10 @@
const total = computed(() => store.state.limitProduct.total);
const opts = computed(() => store.state.limitProduct.opts);
const currentTimeRange = computed(() =>
unref(opts).timeRange.find((item) => item.id === unref(state).condition.activityTimeId)
);
/* 查询订单 */
const state = reactive({
condition: {

@ -9,12 +9,16 @@
<div class="right">
<template v-if="state.form.orderStatus !== 2">
<template v-if="[1, 3].includes(state.form.orderStatus)">
<el-button type="primary" @click="handleAddress"></el-button>
<el-button :disabled="state.form.orderType === 4" type="primary" @click="handleAddress">
修改收货人信息
</el-button>
<template v-if="state.form.orderStatus === 3">
<el-button type="danger" @click="handleCancel"></el-button>
</template>
<template v-if="state.form.orderStatus === 1">
<el-button type="primary" @click="handleFees"></el-button>
<el-button :disabled="state.form.orderType === 4" type="primary" @click="handleFees">
修改费用信息
</el-button>
<el-button type="danger" @click="handleClose"></el-button>
</template>
</template>
@ -27,8 +31,21 @@
<el-scrollbar class="body">
<h3>基本信息</h3>
<el-table border :data="[state.form]">
<el-table-column align="center" header-align="center" label="订单编号" prop="orderNo" width="240" />
<!-- <el-table-column align="center" header-align="center" label="用户账号" prop="userId" width="240" /> -->
<el-table-column align="center" header-align="center" label="订单编号" prop="orderNo" width="250" />
<el-table-column
align="center"
header-align="center"
label="用户手机号"
prop="userPhone"
width="240"
>
<template #default="{ row }">
<div class="flex">
<span>{{ row.userPhone }}</span>
<el-button style="margin-left: 10px" type="text" @click="handleUser"></el-button>
</div>
</template>
</el-table-column>
<el-table-column
align="center"
header-align="center"
@ -37,9 +54,7 @@
width="240"
/>
<el-table-column align="center" header-align="center" label="订单来源" prop="orderSourceDesc" />
<el-table-column align="center" header-align="center" label="订单类型" prop="quantity">
普通订单
</el-table-column>
<el-table-column align="center" header-align="center" label="订单类型" prop="orderTypeDesc" />
</el-table>
<el-table border :data="[state.form]" style="margin-top: -1px">
<el-table-column
@ -47,9 +62,11 @@
header-align="center"
label="配送方式"
prop="logistics.companyName"
width="240"
width="250"
>
<template #default="{ row }">{{ row.logistics?.companyName || '未发货' }}</template>
<template #default="{ row }">
{{ row.orderType === 4 ? '自动发货' : row.logistics?.companyName || '未发货' }}
</template>
</el-table-column>
<el-table-column
align="center"
@ -58,7 +75,9 @@
prop="logistics.trackingNo"
width="240"
>
<template #default="{ row }">{{ row.logistics?.trackingNo || '未发货' }}</template>
<template #default="{ row }">
{{ row.orderType === 4 ? '-' : row.logistics?.trackingNo || '未发货' }}
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="自动确认收货时间" prop="receiveExpire">
<template #default="{ row }">{{ row.receiveExpire }}</template>
@ -67,24 +86,15 @@
<br />
<h3>收货人信息</h3>
<el-table border :data="[state.form]">
<el-table-column
align="center"
header-align="center"
label="收货人"
prop="logistics.recipientName"
/>
<el-table-column
align="center"
header-align="center"
label="手机号码"
prop="logistics.recipientPhone"
/>
<el-table-column
align="center"
header-align="center"
label="收货地址"
prop="logistics.recipientAddress"
/>
<el-table-column align="center" header-align="center" label="收货人">
<template #default="{ row }">{{ row.logistics?.recipientName || '-' }}</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="手机号码">
<template #default="{ row }">{{ row.logistics?.recipientPhone || '-' }}</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="收货地址">
<template #default="{ row }">{{ row.logistics?.recipientAddress || '-' }}</template>
</el-table-column>
</el-table>
<br />
<h3>商品信息</h3>
@ -98,7 +108,11 @@
<el-table-column align="center" header-align="center" label="价格" prop="realPrice">
<template #default="{ row }">{{ new Number(row.realPrice).toFixed(2) }}</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="属性" prop="skuDescribe" />
<el-table-column align="center" header-align="center" label="规格属性" prop="skuDescribe">
<template #default="{ row }">
{{ row.skuDescribe || '默认规格' }}
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="数量" prop="quantity" />
<el-table-column align="center" header-align="center" label="小计" prop="realAmount">
<template #default="{ row }">{{ new Number(row.realAmount).toFixed(2) }}</template>
@ -132,7 +146,7 @@
<cancel-order ref="refsCancelOrder" @close="handleLoad" />
<update-address ref="refsUpdateAddress" @close="handleLoad" />
<update-fees ref="refsUpdateFees" @close="handleLoad" />
<order-track ref="refsOrderTrack" />
<order-track ref="refsOrderTrack" :copy="state.form.orderType !== 4" />
</div>
</template>
@ -144,6 +158,7 @@
import OrderTrack from './track.vue';
const store = useStore();
const route = useRoute();
const router = useRouter();
const opts = computed(() => store.state.order.opts);
if (!unref(opts).init) {
store.dispatch('order/load');
@ -217,12 +232,26 @@
const handleTrack = () => {
unref(refsOrderTrack).show(state.form.orderId);
};
const handleUser = () => {
router.push({
name: 'CustomerManagement',
query: {
account: state.form.userPhone,
},
});
};
</script>
<style lang="less" scoped>
.detail-container {
display: flex;
flex-direction: column;
.flex {
display: flex;
align-items: center;
justify-content: center;
}
.card {
height: 100%;
flex-shrink: 1;

@ -54,7 +54,7 @@
</table-list>
<close-order ref="refsCloseOrder" />
<order-track ref="refsOrderTrack" />
<order-ship ref="refsOrderShip" @save="handleSearch" />
<order-ship ref="refsOrderShip" />
</div>
</template>
@ -181,7 +181,7 @@
const handleSend = (selection) => {
if (selection.length) {
store.commit('orderShip/setCondition', {
orderIs: selection.map((item) => item.orderId),
orderIds: selection.map((item) => item.orderId),
});
unref(refsOrderShip).show();
} else {
@ -215,6 +215,11 @@
prop: 'userPhone',
width: 140,
},
{
label: '订单类型',
prop: 'orderTypeDesc',
minWidth: 120,
},
{
label: '订单金额',
prop: 'payAmount',
@ -235,6 +240,11 @@
width: 120,
prop: 'orderStatusDesc',
},
{
label: '用户留言',
width: 120,
prop: 'userMessage',
},
{
label: '提交时间',
prop: 'submitTime',

@ -1,5 +1,5 @@
<template>
<el-dialog v-model="visible" title="批量发货" width="800px">
<el-dialog v-model="visible" title="批量发货" width="960px">
<table-list
v-loading="loading"
:code="code"
@ -65,43 +65,53 @@
{
label: '订单编号',
prop: 'orderNo',
width: 120,
width: 240,
fixed: 'left',
},
{
label: '收货人',
prop: 'logistics.recipientName',
minWidth: 120,
slots: {
default: ({ row }) => (row.orderType === 4 ? '-' : row.logistics.recipientName || '无'),
},
},
{
label: '手机号码',
prop: 'logistics.recipientPhone',
width: 120,
slots: {
default: ({ row }) => (row.orderType === 4 ? '-' : row.logistics.recipientPhone || '无'),
},
},
{
label: '收货地址',
prop: 'logistics.recipientAddress',
minWidth: 120,
slots: {
default: ({ row }) => (row.orderType === 4 ? '-' : row.logistics.recipientAddress || '无'),
},
},
{
label: '配送方式',
width: 140,
fixed: 'right',
slots: {
default: ({ row }) => (
<ElSelect
v-model={row.logistics.companyCode}
opts={unref(opts).company}
config={{ label: 'companyName', value: 'companyCode' }}
/>
),
default: ({ row }) =>
row.orderType === 4 ? (
'-'
) : (
<ElSelect
v-model={row.logistics.companyCode}
opts={unref(opts).company}
config={{ label: 'companyName', value: 'companyCode' }}
/>
),
},
},
{
label: '物流单号',
width: 160,
prop: 'logistics.trackingNo',
width: 180,
fixed: 'right',
slots: {
default: ({ row }) => <ElInput v-model={row.logistics.trackingNo} />,
default: ({ row }) => (row.orderType === 4 ? '-' : <ElInput v-model={row.logistics.trackingNo} />),
},
},
],

@ -1,7 +1,7 @@
<template>
<el-dialog v-model="state.visible" title="物流跟踪">
<div v-loading="state.loading" class="track-container">
<h3>
<h3 v-if="props.copy">
<span class="name">{{ state.info.companyName }}</span>
<span class="no">{{ state.info.trackingNo }}</span>
<el-button type="text" @click="$copy(`${state.info.companyName} ${state.info.trackingNo}`)">
@ -33,6 +33,10 @@
type: Boolean,
default: false,
},
copy: {
type: Boolean,
default: false,
},
});
const store = useStore();
const state = reactive({

@ -53,13 +53,13 @@
/>
<el-table-column align="center" header-align="center" label="售价(元)" prop="sellPrice" width="160px">
<template #default="{ row }">
<el-input-number v-model="row.sellPrice" />
<el-input-number v-model="row.sellPrice" :min="0" />
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="商品库存" prop="stock" width="160px">
<template #default="{ row }">
<span v-if="row.id">{{ row.stock }}</span>
<el-input-number v-else v-model="row.stock" />
<el-input-number v-else v-model="row.stock" :min="0" />
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="增减库存" prop="stockChange" width="160px">
@ -80,12 +80,12 @@
width="160px"
>
<template #default="{ row }">
<el-input-number v-model="row.costPrice" />
<el-input-number v-model="row.costPrice" :min="0" />
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="库存预警值" prop="warn" width="160px">
<template #default="{ row }">
<el-input-number v-model="row.warn" />
<el-input-number v-model="row.warn" :min="0" />
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="SKU编号" min-width="100px" prop="id" />

@ -42,6 +42,12 @@
<script setup lang="jsx">
import ElImage from '@/components/extra/ElImage.vue';
const props = defineProps({
ids: {
type: Array,
default: () => [],
},
});
const emits = defineEmits(['pick']);
const store = useStore();
const loading = ref(false);
@ -108,6 +114,7 @@
{
type: 'selection',
width: 60,
selectable: (row) => !props.ids.includes(row.id),
},
{
label: '编号',

@ -36,6 +36,7 @@
import ElSwitch from '@/components/extra/ElSwitch.vue';
const { proxy } = getCurrentInstance();
const store = useStore();
const route = useRoute();
const loading = ref(false);
const code = computed(() => store.state.customer.code);
const list = computed(() => store.state.customer.list);
@ -66,6 +67,10 @@
};
};
const handleSearch = async () => {
if (route.query.account && !state.condition.account) {
state.condition.account = route.query.account;
store.commit('customer/setCondition', _.cloneDeep(state.condition));
}
loading.value = true;
await store.dispatch('customer/search');
loading.value = false;

Loading…
Cancel
Save