mirror of
https://github.com/Megghy/vtsuru.live.git
synced 2025-12-07 02:46:55 +08:00
update point views
This commit is contained in:
@@ -8,7 +8,7 @@ const accountInfo = useAccount()
|
||||
|
||||
const status = computed(() => {
|
||||
if (!accountInfo.value) return 'error'
|
||||
if (accountInfo.value.eventFetcherOnline == true) {
|
||||
if (accountInfo.value.eventFetcherOnline == true || accountInfo.value.isServerFetcherOnline == true) {
|
||||
if (accountInfo.value.eventFetcherStatus) {
|
||||
return 'warning'
|
||||
} else if (Object.keys(accountInfo.value.eventFetcherStatusV3 ?? {}).length > 0) {
|
||||
@@ -34,19 +34,29 @@ const status = computed(() => {
|
||||
<br />
|
||||
事件上传到本站后允许按照自定义范围进行查询, 并导出为 CSV 之类的表格
|
||||
<br />
|
||||
<NButton type="info" size="small" tag="a" href="https://www.yuque.com/megghy/dez70g/vfvcyv3024xvaa1p" target="_blank"> 关于 EVENT-FETCHER </NButton>
|
||||
<NButton
|
||||
type="info"
|
||||
size="small"
|
||||
tag="a"
|
||||
href="https://www.yuque.com/megghy/dez70g/vfvcyv3024xvaa1p"
|
||||
target="_blank"
|
||||
>
|
||||
关于 EVENT-FETCHER
|
||||
</NButton>
|
||||
</NTooltip>
|
||||
</template>
|
||||
<NTooltip v-if="status != 'info'">
|
||||
<template #trigger>
|
||||
<NTag size="small" :color="{ borderColor: 'white', textColor: 'white', color: '#4b6159' }">
|
||||
<NIcon :component="FlashCheckmark16Filled" />
|
||||
{{ accountInfo?.eventFetcherVersion ?? '未知' }}
|
||||
</NTag>
|
||||
</template>
|
||||
你所使用的版本
|
||||
</NTooltip>
|
||||
<NDivider vertical/>
|
||||
<template v-if="status != 'info' && !accountInfo?.isServerFetcherOnline">
|
||||
<NTooltip>
|
||||
<template #trigger>
|
||||
<NTag size="small" :color="{ borderColor: 'white', textColor: 'white', color: '#4b6159' }">
|
||||
<NIcon :component="FlashCheckmark16Filled" />
|
||||
{{ accountInfo?.eventFetcherVersion ?? '未知' }}
|
||||
</NTag>
|
||||
</template>
|
||||
你所使用的版本
|
||||
</NTooltip>
|
||||
<NDivider vertical />
|
||||
</template>
|
||||
<NTag :type="status">
|
||||
<template v-if="accountInfo?.eventFetcherOnline == true && accountInfo?.eventFetcherStatus">
|
||||
此版本已过期, 请更新
|
||||
@@ -54,26 +64,40 @@ const status = computed(() => {
|
||||
<template #trigger>
|
||||
<NButton type="warning" size="tiny"> 关于 </NButton>
|
||||
</template>
|
||||
Node.js 版已不再更新, 如果是 Docker 的话请切换至 ghcr.io/megghy/vtsurueventfetcher.net, 其他环境请下载 https://github.com/Megghy/VtsuruEventFetcher.Net/releases/latest
|
||||
Node.js 版已不再更新, 如果是 Docker 的话请切换至 ghcr.io/megghy/vtsurueventfetcher.net, 其他环境请下载
|
||||
https://github.com/Megghy/VtsuruEventFetcher.Net/releases/latest
|
||||
</NTooltip>
|
||||
</template>
|
||||
<template v-else>
|
||||
<template v-if="status == 'success'">
|
||||
运行中 | 今日已接收
|
||||
<NText>
|
||||
{{ accountInfo?.isServerFetcherOnline ? '正在由本站提供监听服务' : '运行中' }}
|
||||
</NText>
|
||||
| 今日已接收
|
||||
<NText color="white" strong>
|
||||
{{ accountInfo?.eventFetcherTodayReceive }}
|
||||
</NText>
|
||||
条
|
||||
</template>
|
||||
<template v-else-if="status == 'warning'">
|
||||
<template v-if="accountInfo?.eventFetcherStatusV3"> 异常: {{ Object.values(accountInfo.eventFetcherStatusV3).join('; ') }} </template>
|
||||
<template v-if="accountInfo?.eventFetcherStatusV3">
|
||||
异常: {{ Object.values(accountInfo.eventFetcherStatusV3).join('; ') }}
|
||||
</template>
|
||||
</template>
|
||||
<template v-else-if="status == 'info'"> 未连接 </template>
|
||||
</template>
|
||||
</NTag>
|
||||
<template v-if="accountInfo?.eventFetcherOnline != true">
|
||||
<NDivider vertical />
|
||||
<NButton type="info" size="small" tag="a" href="https://www.yuque.com/megghy/dez70g/vfvcyv3024xvaa1p" target="_blank"> 关于 EVENT-FETCHER </NButton>
|
||||
<NButton
|
||||
type="info"
|
||||
size="tiny"
|
||||
tag="a"
|
||||
href="https://www.yuque.com/megghy/dez70g/vfvcyv3024xvaa1p"
|
||||
target="_blank"
|
||||
>
|
||||
关于 EVENT-FETCHER
|
||||
</NButton>
|
||||
</template>
|
||||
</NAlert>
|
||||
</template>
|
||||
|
||||
@@ -1,12 +1,28 @@
|
||||
<script setup lang="ts">
|
||||
import { DataTableColumns, NDataTable, NDivider, NFlex, NTag, NText, NTime, NTooltip } from 'naive-ui'
|
||||
import { h } from 'vue'
|
||||
import { EventDataTypes, PointFrom, ResponsePointHisrotyModel } from '@/api/api-models'
|
||||
import {
|
||||
DataTableColumns,
|
||||
NButton,
|
||||
NDataTable,
|
||||
NDivider,
|
||||
NFlex,
|
||||
NInput,
|
||||
NModal,
|
||||
NTag,
|
||||
NText,
|
||||
NTime,
|
||||
NTooltip,
|
||||
} from 'naive-ui'
|
||||
import { h, ref } from 'vue'
|
||||
import { EventDataTypes, PointFrom, ResponsePointGoodModel, ResponsePointHisrotyModel } from '@/api/api-models'
|
||||
import PointGoodsItem from './PointGoodsItem.vue'
|
||||
|
||||
const props = defineProps<{
|
||||
histories: ResponsePointHisrotyModel[]
|
||||
}>()
|
||||
|
||||
const showGoodsModal = ref(false)
|
||||
const currentGoods = ref<ResponsePointGoodModel>()
|
||||
|
||||
const historyColumn: DataTableColumns<ResponsePointHisrotyModel> = [
|
||||
{
|
||||
title: '时间',
|
||||
@@ -23,7 +39,11 @@ const historyColumn: DataTableColumns<ResponsePointHisrotyModel> = [
|
||||
title: '积分变动',
|
||||
key: 'point',
|
||||
render: (row: ResponsePointHisrotyModel) => {
|
||||
return h(NText, { style: { color: row.from === PointFrom.Use ? 'red' : 'green' } }, () => (row.from === PointFrom.Use ? '' : '+') + row.point)
|
||||
return h(
|
||||
NText,
|
||||
{ style: { color: row.from === PointFrom.Use ? 'red' : 'green' } },
|
||||
() => (row.from === PointFrom.Use ? '' : '+') + row.point,
|
||||
)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -38,7 +58,7 @@ const historyColumn: DataTableColumns<ResponsePointHisrotyModel> = [
|
||||
value: PointFrom.Danmaku,
|
||||
},
|
||||
{
|
||||
label: '手动',
|
||||
label: '主播赠予',
|
||||
value: PointFrom.Manual,
|
||||
},
|
||||
{
|
||||
@@ -52,7 +72,7 @@ const historyColumn: DataTableColumns<ResponsePointHisrotyModel> = [
|
||||
case PointFrom.Danmaku:
|
||||
return h(NTag, { type: 'info', bordered: false, size: 'small' }, () => '直播间')
|
||||
case PointFrom.Manual:
|
||||
return h(NTag, { type: 'success', bordered: false, size: 'small' }, () => '手动')
|
||||
return h(NTag, { type: 'success', bordered: false, size: 'small' }, () => '主播赠予')
|
||||
case PointFrom.Use:
|
||||
return h(NTag, { type: 'warning', bordered: false, size: 'small' }, () => '使用')
|
||||
}
|
||||
@@ -71,33 +91,52 @@ const historyColumn: DataTableColumns<ResponsePointHisrotyModel> = [
|
||||
case EventDataTypes.Guard:
|
||||
return h(NFlex, { justify: 'center', align: 'center' }, () => [
|
||||
h(NTag, { type: 'info', size: 'small' }, () => '上舰'),
|
||||
h(NDivider, { vertical: true, style: { margin: '0' } }),
|
||||
row.extra?.msg,
|
||||
])
|
||||
case EventDataTypes.Gift:
|
||||
return h(NFlex, { justify: 'center' }, () => [
|
||||
h(NTag, { type: 'info', size: 'small', style: { margin: '0' } }, () => '礼物'),
|
||||
h(NDivider, { vertical: true }),
|
||||
row.extra?.msg,
|
||||
])
|
||||
case EventDataTypes.SC:
|
||||
return h(NFlex, { justify: 'center' }, () => [
|
||||
h(NTag, { type: 'info', size: 'small', style: { margin: '0' } }, () => 'SC'),
|
||||
h(NDivider, { vertical: true }),
|
||||
row.extra?.price,
|
||||
])
|
||||
}
|
||||
case PointFrom.Manual:
|
||||
return h(NFlex, { align: 'center' }, () => [
|
||||
h(NTag, { type: 'info', size: 'small', style: { margin: '0' } }, () => '备注'),
|
||||
h(NDivider, { vertical: true }),
|
||||
h(NText, { depth: 3 }, () => row.extra ?? h(NText, { italic: true, depth: '3' }, () => '未提供')),
|
||||
h(NTag, { type: 'info', size: 'small', style: { margin: '0' } }, () => '来自'),
|
||||
h(
|
||||
NButton,
|
||||
{
|
||||
tag: 'a',
|
||||
href: '/user/' + row.extra.user?.name,
|
||||
target: '_blank',
|
||||
text: true,
|
||||
type: 'info',
|
||||
secondary: true,
|
||||
},
|
||||
() => row.extra.user?.name,
|
||||
),
|
||||
h(NTag, { type: 'info', size: 'small', style: { margin: '0' }, bordered: false }, () => '备注'),
|
||||
h(NText, {}, () => row.extra.reason ?? h(NText, { italic: true, depth: '3' }, () => '未提供')),
|
||||
])
|
||||
case PointFrom.Use:
|
||||
return h(NFlex, { align: 'center' }, () => [
|
||||
h(NTag, { type: 'success', size: 'small', style: { margin: '0' }, strong: true }, () => '购买'),
|
||||
h(NDivider, { vertical: true }),
|
||||
row.extra,
|
||||
h(NTag, { type: 'success', size: 'small', style: { margin: '0' }, strong: true }, () => '兑换'),
|
||||
h(
|
||||
NButton,
|
||||
{
|
||||
text: true,
|
||||
type: 'info',
|
||||
onClick: () => {
|
||||
currentGoods.value = row.extra
|
||||
showGoodsModal.value = true
|
||||
},
|
||||
},
|
||||
() => row.extra?.name,
|
||||
),
|
||||
])
|
||||
}
|
||||
},
|
||||
@@ -112,4 +151,11 @@ const historyColumn: DataTableColumns<ResponsePointHisrotyModel> = [
|
||||
:pagination="{ showSizePicker: true, pageSizes: [10, 25, 50, 100], defaultPageSize: 10, size: 'small' }"
|
||||
>
|
||||
</NDataTable>
|
||||
<NModal v-model:show="showGoodsModal" preset="card" title="礼物详情 (快照)" style="max-width: 400px; height: auto">
|
||||
<PointGoodsItem :goods="currentGoods" />
|
||||
<template v-if="currentGoods?.content">
|
||||
<NDivider> 礼物内容 </NDivider>
|
||||
<NInput :value="currentGoods?.content" type="textarea" readonly placeholder="无内容" />
|
||||
</template>
|
||||
</NModal>
|
||||
</template>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
import {
|
||||
GoodsStatus,
|
||||
GoodsTypes,
|
||||
PointOrderStatus,
|
||||
ResponsePointGoodModel,
|
||||
@@ -8,6 +9,8 @@ import {
|
||||
} from '@/api/api-models'
|
||||
import {
|
||||
DataTableColumns,
|
||||
DataTableRowKey,
|
||||
NAutoComplete,
|
||||
NButton,
|
||||
NCard,
|
||||
NDataTable,
|
||||
@@ -15,17 +18,25 @@ import {
|
||||
NFlex,
|
||||
NIcon,
|
||||
NInput,
|
||||
NInputGroup,
|
||||
NInputGroupLabel,
|
||||
NModal,
|
||||
NScrollbar,
|
||||
NStep,
|
||||
NSteps,
|
||||
NTag,
|
||||
NText,
|
||||
NTime,
|
||||
NTooltip,
|
||||
useDialog,
|
||||
useMessage,
|
||||
} from 'naive-ui'
|
||||
import { computed, h, ref, watch } from 'vue'
|
||||
import { computed, h, onMounted, ref, watch } from 'vue'
|
||||
import AddressDisplay from './AddressDisplay.vue'
|
||||
import PointGoodsItem from './PointGoodsItem.vue'
|
||||
import { Info24Filled } from '@vicons/fluent'
|
||||
import { QueryPostAPI } from '@/api/query'
|
||||
import { POINT_API_URL } from '@/data/constants'
|
||||
|
||||
const props = defineProps<{
|
||||
order: ResponsePointOrder2UserModel[] | ResponsePointOrder2OwnerModel[]
|
||||
@@ -33,6 +44,9 @@ const props = defineProps<{
|
||||
goods?: ResponsePointGoodModel[]
|
||||
loading?: boolean
|
||||
}>()
|
||||
const message = useMessage()
|
||||
const dialog = useDialog()
|
||||
|
||||
const isLoading = ref(false)
|
||||
watch(
|
||||
() => props.loading,
|
||||
@@ -46,6 +60,7 @@ const orderAsUser = computed(() => {
|
||||
const orderAsOwner = computed(() => {
|
||||
return props.order as ResponsePointOrder2OwnerModel[]
|
||||
})
|
||||
const selectedItem = ref<DataTableRowKey[]>()
|
||||
|
||||
const showDetailModal = ref(false)
|
||||
const orderDetail = ref<ResponsePointOrder2UserModel | ResponsePointOrder2OwnerModel>()
|
||||
@@ -55,8 +70,32 @@ const currentGoods = computed(() => {
|
||||
//@ts-ignore
|
||||
else return props.goods.find((g) => g.id == orderDetail.value.goodsId)
|
||||
})
|
||||
const expressOptions = computed(() => {
|
||||
if (!orderAsOwner.value) return []
|
||||
return orderAsOwner.value.map((o) => ({
|
||||
label: o.expressCompany,
|
||||
value: o.expressCompany,
|
||||
}))
|
||||
})
|
||||
|
||||
const orderColumn: DataTableColumns<ResponsePointOrder2UserModel | ResponsePointOrder2OwnerModel> = [
|
||||
{
|
||||
type: 'selection',
|
||||
|
||||
disabled: () => props.type == 'user',
|
||||
options: [
|
||||
'all',
|
||||
'none',
|
||||
{
|
||||
label: '选中未发货的',
|
||||
key: 'f2',
|
||||
onSelect: (pageData) => {
|
||||
selectedItem.value = pageData.filter((row) => row.status == PointOrderStatus.Pending).map((row) => row.id)
|
||||
console.log(selectedItem.value)
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: '订单号',
|
||||
key: 'id',
|
||||
@@ -72,17 +111,36 @@ const orderColumn: DataTableColumns<ResponsePointOrder2UserModel | ResponsePoint
|
||||
{
|
||||
title: '使用积分',
|
||||
key: 'point',
|
||||
sorter: 'default',
|
||||
},
|
||||
{
|
||||
title: '订单状态',
|
||||
key: 'status',
|
||||
sorter: 'default',
|
||||
filter: (filterOptionValue: unknown, row: ResponsePointOrder2UserModel | ResponsePointOrder2OwnerModel) => {
|
||||
return row.status == filterOptionValue
|
||||
},
|
||||
filterOptions: [
|
||||
{
|
||||
label: '等待发货',
|
||||
value: PointOrderStatus.Pending,
|
||||
},
|
||||
{
|
||||
label: '已发货',
|
||||
value: PointOrderStatus.Shipped,
|
||||
},
|
||||
{
|
||||
label: '已完成',
|
||||
value: PointOrderStatus.Completed,
|
||||
},
|
||||
],
|
||||
render: (row: ResponsePointOrder2UserModel | ResponsePointOrder2OwnerModel) => {
|
||||
switch (row.status) {
|
||||
case PointOrderStatus.Pending:
|
||||
return h(NTag, { size: 'small' }, () => '等待发货')
|
||||
case PointOrderStatus.Shipped:
|
||||
return h(NTag, { size: 'small', type: 'info' }, () => '已发货')
|
||||
return h(NTag, { size: 'small', type: row.expressCompany ? 'info' : 'warning', bordered: false }, () =>
|
||||
row.expressCompany ? '已发货 | 已填写单号' : '已发货 | 未填写单号',
|
||||
)
|
||||
case PointOrderStatus.Completed:
|
||||
return h(NTag, { size: 'small', type: 'success' }, () => '已完成')
|
||||
}
|
||||
@@ -114,10 +172,45 @@ const orderColumn: DataTableColumns<ResponsePointOrder2UserModel | ResponsePoint
|
||||
title: '地址',
|
||||
key: 'address',
|
||||
render: (row: ResponsePointOrder2UserModel | ResponsePointOrder2OwnerModel) => {
|
||||
const collectUrl =
|
||||
row.instanceOf == 'user' ? row.goods.collectUrl : props.goods?.find((g) => g.id == row.goodsId)?.collectUrl
|
||||
if (row.type == GoodsTypes.Physical) {
|
||||
return h(AddressDisplay, { address: row.address })
|
||||
return collectUrl
|
||||
? h(NButton, { tag: 'a', href: collectUrl, target: '_blank', text: true, type: 'info' }, () =>
|
||||
h(NText, { italic: true }, () => '通过站外链接收集'),
|
||||
)
|
||||
: h(AddressDisplay, { address: row.address })
|
||||
} else {
|
||||
return h(NText, { depth: 3 }, () => '无需发货')
|
||||
return h(NText, { depth: 3, italic: true }, () => '无需发货')
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '快递信息',
|
||||
key: 'express',
|
||||
render: (row: ResponsePointOrder2UserModel | ResponsePointOrder2OwnerModel) => {
|
||||
if (row.type == GoodsTypes.Physical) {
|
||||
return row.trackingNumber
|
||||
? h(
|
||||
NFlex,
|
||||
{
|
||||
depth: 3,
|
||||
},
|
||||
() => [
|
||||
h(
|
||||
NTag,
|
||||
{
|
||||
size: 'tiny',
|
||||
bordered: false,
|
||||
},
|
||||
() => row.expressCompany,
|
||||
),
|
||||
h(NText, { depth: 3 }, () => row.trackingNumber),
|
||||
],
|
||||
)
|
||||
: h(NText, { depth: 3, italic: true }, () => '尚未发货')
|
||||
} else {
|
||||
return h(NText, { depth: 3, italic: true }, () => '无需发货')
|
||||
}
|
||||
},
|
||||
},
|
||||
@@ -140,10 +233,73 @@ const orderColumn: DataTableColumns<ResponsePointOrder2UserModel | ResponsePoint
|
||||
},
|
||||
},
|
||||
]
|
||||
function onChangeStatus(id: number, status: PointOrderStatus) {
|
||||
dialog.info({
|
||||
title: '提示',
|
||||
content: '确认修改订单状态?',
|
||||
positiveText: '确认',
|
||||
negativeText: '取消',
|
||||
onPositiveClick: () => {
|
||||
updateStatus([id], status)
|
||||
},
|
||||
})
|
||||
}
|
||||
async function updateStatus(id: number[], status: PointOrderStatus) {
|
||||
try {
|
||||
const data = await QueryPostAPI(POINT_API_URL + 'update-orders-status', {
|
||||
ids: id,
|
||||
status,
|
||||
})
|
||||
if (data.code == 200) {
|
||||
message.success('操作成功')
|
||||
props.order?.forEach((row) => {
|
||||
if (id.includes(row.id)) {
|
||||
row.status = status
|
||||
}
|
||||
})
|
||||
} else {
|
||||
message.error('操作失败: ' + data.message)
|
||||
}
|
||||
} catch (err) {
|
||||
message.error('操作失败: ' + err)
|
||||
console.log(err)
|
||||
}
|
||||
}
|
||||
async function updateExpress(item: ResponsePointOrder2OwnerModel) {
|
||||
if (!item.trackingNumber || !item.expressCompany) {
|
||||
message.error('请填写快递单号和快递公司')
|
||||
return
|
||||
}
|
||||
try {
|
||||
isLoading.value = true
|
||||
const data = await QueryPostAPI(POINT_API_URL + 'update-order-express', {
|
||||
id: item.id,
|
||||
trackingNumber: item.trackingNumber,
|
||||
expressCompany: item.expressCompany,
|
||||
})
|
||||
if (data.code == 200) {
|
||||
message.success('操作成功')
|
||||
} else {
|
||||
message.error('操作失败: ' + data.message)
|
||||
}
|
||||
} catch (err) {
|
||||
message.error('操作失败: ' + err)
|
||||
console.log(err)
|
||||
}
|
||||
isLoading.value = false
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
props.order?.forEach((row) => {
|
||||
row.instanceOf = props.type
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<NDataTable
|
||||
v-model:checked-row-keys="selectedItem"
|
||||
:row-key="(row) => row.id"
|
||||
:loading="isLoading"
|
||||
:columns="orderColumn"
|
||||
:data="order"
|
||||
@@ -159,9 +315,9 @@ const orderColumn: DataTableColumns<ResponsePointOrder2UserModel | ResponsePoint
|
||||
>
|
||||
<NScrollbar style="max-height: 80vh">
|
||||
<div style="width: 97%">
|
||||
<template v-if="type == 'user'">
|
||||
<template v-if="orderDetail.instanceOf == 'user'">
|
||||
<NDivider style="margin-top: 0">
|
||||
商品快照
|
||||
礼物快照
|
||||
<NTooltip>
|
||||
<template #trigger>
|
||||
<NIcon :component="Info24Filled" />
|
||||
@@ -176,8 +332,65 @@ const orderColumn: DataTableColumns<ResponsePointOrder2UserModel | ResponsePoint
|
||||
<NDivider> 虚拟礼物内容 </NDivider>
|
||||
<NInput :value="currentGoods?.content" type="textarea" readonly placeholder="无内容" />
|
||||
</template>
|
||||
<template
|
||||
v-if="
|
||||
orderDetail.type == GoodsTypes.Physical &&
|
||||
orderDetail.status == PointOrderStatus.Pending &&
|
||||
orderDetail.goods.embedCollectUrl &&
|
||||
orderDetail.goods.collectUrl
|
||||
"
|
||||
>
|
||||
<NDivider> 填写收货地址 </NDivider>
|
||||
<NButton tag="a" :href="orderDetail.goods.collectUrl" target="_blank" type="info">
|
||||
在新窗口中打开地址填写表格
|
||||
</NButton>
|
||||
<br />
|
||||
<iframe
|
||||
height="1200"
|
||||
width="800"
|
||||
:src="orderDetail.goods.collectUrl"
|
||||
frameborder="0"
|
||||
allowfullscreen
|
||||
sandbox="allow-same-origin allow-scripts allow-modals allow-downloads allow-forms allow-popups"
|
||||
></iframe>
|
||||
</template>
|
||||
</template>
|
||||
<template v-else-if="orderDetail.instanceOf == 'owner'">
|
||||
<NDivider> 设置订单状态 </NDivider>
|
||||
<NFlex justify="center" style="width: 100%">
|
||||
<NSteps
|
||||
:current="orderDetail.status + 1"
|
||||
size="small"
|
||||
@update:current="(c) => onChangeStatus(orderDetail?.id ?? -1, c - 1)"
|
||||
>
|
||||
<NStep title="等待中" description="等待主播发货" :disabled="orderDetail.status >= 0" />
|
||||
<NStep title="已发货" description="已经发货了" :disabled="orderDetail.status >= 1" />
|
||||
<NStep title="已完成" description="就是已完成" :disabled="orderDetail.status >= 2" />
|
||||
</NSteps>
|
||||
</NFlex>
|
||||
<template v-if="orderDetail.status == PointOrderStatus.Shipped && orderDetail.instanceOf == 'owner'">
|
||||
<NDivider> 快递 </NDivider>
|
||||
<NFlex vertical>
|
||||
<NAutoComplete
|
||||
v-model:value="orderDetail.expressCompany"
|
||||
placeholder="快递公司"
|
||||
:options="expressOptions"
|
||||
style="max-width: 100px"
|
||||
/>
|
||||
<NInputGroup>
|
||||
<NInputGroupLabel> 快递单号 </NInputGroupLabel>
|
||||
<NInput
|
||||
v-model:value="orderDetail.trackingNumber"
|
||||
placeholder="就是快递单号"
|
||||
style="max-width: 200px"
|
||||
/>
|
||||
</NInputGroup>
|
||||
<NButton type="primary" @click="updateExpress(orderDetail)" style="width: 120px" :loading="isLoading">
|
||||
更新快递信息
|
||||
</NButton>
|
||||
</NFlex>
|
||||
</template>
|
||||
</template>
|
||||
<template v-else-if="type == 'owner'"> </template>
|
||||
</div>
|
||||
</NScrollbar>
|
||||
</NModal>
|
||||
|
||||
Reference in New Issue
Block a user