Commit ef3eb9ab by zhuzhequan

Merge remote-tracking branch 'origin/dev' into dev

parents da3010e2 51723d81
...@@ -544,6 +544,25 @@ export function statusPushApi(params: (string | number)[]) { ...@@ -544,6 +544,25 @@ export function statusPushApi(params: (string | number)[]) {
) )
} }
// 转至已完成
export function changeToFinished(ids: string) {
return axios.get<never, BaseRespData<never>>(
`factory/podJomallOrderUs/updateToComplete`,
{ params: { ids } },
)
}
// 转至已完成
export function updateTrackingNumberAndRegister(
id: number,
trackingNumber: string,
) {
return axios.post<never, BaseRespData<never>>(
`factory/podJomallOrderUs/updateTrackingNumberAndRegister`,
{ id, trackingNumber },
)
}
// 完成发货 // 完成发货
export function completeDeliveryApi(params: { export function completeDeliveryApi(params: {
orderIdList: (string | number)[] orderIdList: (string | number)[]
...@@ -585,3 +604,10 @@ export function printProductionPdfByBatchNumberApi(params: { ...@@ -585,3 +604,10 @@ export function printProductionPdfByBatchNumberApi(params: {
}, },
) )
} }
// 待跟踪 注册列表统计接口
export function countTrackRegisterApi() {
return axios.get<never, BaseRespData<never>>(
`factory/podJomallOrderUs/countTrackRegister`,
)
}
...@@ -181,11 +181,6 @@ const menu: MenuItem[] = [ ...@@ -181,11 +181,6 @@ const menu: MenuItem[] = [
label: '下载生产客户端', label: '下载生产客户端',
}, },
{ {
index: '/system/external-authorisation',
id: 5,
label: '外部授权',
},
{
index: '/system/customers', index: '/system/customers',
id: 6, id: 6,
label: '客户管理', label: '客户管理',
......
...@@ -35,6 +35,7 @@ export interface SearchForm { ...@@ -35,6 +35,7 @@ export interface SearchForm {
craftCode?: string craftCode?: string
thirdStockSku?: string thirdStockSku?: string
interceptStatus?: number | string interceptStatus?: number | string
trackRegisterSelect?: string | number
} }
export interface PodUsOrderListData { export interface PodUsOrderListData {
id: number id: number
......
...@@ -252,7 +252,7 @@ ...@@ -252,7 +252,7 @@
</ElFormItem> </ElFormItem>
<ElFormItem> <ElFormItem>
<span> <span>
<ElButton link @click="resetSearchForm" style="font-size: 12px" <ElButton link style="font-size: 12px" @click="resetSearchForm"
><span title="重置查询条件">重置</span></ElButton ><span title="重置查询条件">重置</span></ElButton
> >
</span> </span>
...@@ -666,6 +666,12 @@ ...@@ -666,6 +666,12 @@
<ElButton type="warning" @click="statusPush">状态推送</ElButton> <ElButton type="warning" @click="statusPush">状态推送</ElButton>
</span> </span>
</ElFormItem> </ElFormItem>
<ElFormItem v-if="['WAIT_TRACK'].includes(status)">
<span class="item">
<ElButton type="success" @click="setFinish">转至已完成</ElButton>
</span>
</ElFormItem>
<ElFormItem v-if="status === 'COMPLETE'"> <ElFormItem v-if="status === 'COMPLETE'">
<span class="item"> <span class="item">
<ElButton type="success" @click="exportData">导出</ElButton> <ElButton type="success" @click="exportData">导出</ElButton>
...@@ -759,6 +765,58 @@ ...@@ -759,6 +765,58 @@
<span class="sub-status-item-label">待同步</span> <span class="sub-status-item-label">待同步</span>
</div> </div>
</div> </div>
<div v-if="status === 'WAIT_TRACK'" class="sub-status mb-10">
<div
class="sub-status-item"
:class="waitTrackStatus === 1 ? 'sub-active' : ''"
@click="handleWaitTrackCommand(1)"
>
<span class="sub-status-item-label">注册失败</span>
<span class="tabs-node_count">{{
trackRegisterCount[0]?.count || 0
}}</span>
</div>
<div
class="sub-status-item"
:class="waitTrackStatus === 2 ? 'sub-active' : ''"
@click="handleWaitTrackCommand(2)"
>
<span class="sub-status-item-label">未注册</span>
<span class="tabs-node_count blue">{{
trackRegisterCount[1]?.count || 0
}}</span>
</div>
<div
class="sub-status-item"
:class="waitTrackStatus === 3 ? 'sub-active' : ''"
@click="handleWaitTrackCommand(3)"
>
<span class="sub-status-item-label">常规(&lt;3天)</span>
<span class="tabs-node_count green">{{
trackRegisterCount[2]?.count || 0
}}</span>
</div>
<div
class="sub-status-item"
:class="waitTrackStatus === 4 ? 'sub-active' : ''"
@click="handleWaitTrackCommand(4)"
>
<span class="sub-status-item-label">观察(2~3天)</span>
<span class="tabs-node_count yellow">{{
trackRegisterCount[3]?.count || 0
}}</span>
</div>
<div
class="sub-status-item"
:class="waitTrackStatus === 5 ? 'sub-active' : ''"
@click="handleWaitTrackCommand(5)"
>
<span class="sub-status-item-label">重扫&补发(>3天)</span>
<span class="tabs-node_count red">{{
trackRegisterCount[4]?.count || 0
}}</span>
</div>
</div>
<div v-if="status === 'INTERCEPTED'" class="sub-status mb-10"> <div v-if="status === 'INTERCEPTED'" class="sub-status mb-10">
<div <div
class="sub-status-item" class="sub-status-item"
...@@ -870,7 +928,9 @@ ...@@ -870,7 +928,9 @@
" "
placement="bottom" placement="bottom"
> >
<el-icon color="#E6A23C"><InfoFilled /></el-icon> <el-icon color="#E6A23C">
<InfoFilled />
</el-icon>
</el-tooltip> </el-tooltip>
<span class="serial-number">{{ index + 1 }}</span> <span class="serial-number">{{ index + 1 }}</span>
</div> </div>
...@@ -1446,7 +1506,7 @@ ...@@ -1446,7 +1506,7 @@
</div> </div>
</template> </template>
<template #failReason="{ row }"> <template #failReason="{ row }">
<span v-html="row.failReason" style="white-space: pre-line"></span> <span style="white-space: pre-line" v-html="row.failReason"></span>
</template> </template>
<template #operate="{ row }"> <template #operate="{ row }">
<div <div
...@@ -1522,6 +1582,11 @@ ...@@ -1522,6 +1582,11 @@
</ElButton> </ElButton>
</span> </span>
<span v-if="['WAIT_TRACK'].includes(status)" class="operate-item">
<ElButton link type="warning" @click="updateTrackingNumber(row)"
>修改跟踪号</ElButton
>
</span>
<!-- <span <!-- <span
v-if="!row.expressSheet && row.status === 'TO_BE_CONFIRMED'" v-if="!row.expressSheet && row.status === 'TO_BE_CONFIRMED'"
class="operate-item" class="operate-item"
...@@ -1592,6 +1657,11 @@ ...@@ -1592,6 +1657,11 @@
</span> </span>
</div> </div>
</template> </template>
<template #trackRegisterFailContent="{ row }">
<div style="white-space: pre-line">
{{ JSON.parse(row.trackRegisterFailContent)?.error || '' }}
</div>
</template>
</TableView> </TableView>
</div> </div>
<div <div
...@@ -1630,7 +1700,9 @@ ...@@ -1630,7 +1700,9 @@
" "
placement="bottom" placement="bottom"
> >
<el-icon color="#E6A23C"><InfoFilled /></el-icon> <el-icon color="#E6A23C">
<InfoFilled />
</el-icon>
</el-tooltip> </el-tooltip>
</template> </template>
<template <template
...@@ -1668,8 +1740,8 @@ ...@@ -1668,8 +1740,8 @@
</div> </div>
<Icon <Icon
name="caozuorizhi" name="caozuorizhi"
@click="(e: MouseEvent) => operationLog(cardItem.podJomallOrderUsId, e)"
style="width: 28px; height: 28px" style="width: 28px; height: 28px"
@click="(e: MouseEvent) => operationLog(cardItem.podJomallOrderUsId, e)"
> >
<template #title> <template #title>
<title>操作日志</title> <title>操作日志</title>
...@@ -1993,24 +2065,24 @@ ...@@ -1993,24 +2065,24 @@
link link
style="margin-left: 10px" style="margin-left: 10px"
@click="changeChinaTime('Asia/Shanghai')" @click="changeChinaTime('Asia/Shanghai')"
>北京时间</el-button >北京时间
> </el-button>
<el-button <el-button
:type="timeType === 'America/New_York' ? 'primary' : ''" :type="timeType === 'America/New_York' ? 'primary' : ''"
size="small" size="small"
link link
style="margin-left: 10px" style="margin-left: 10px"
@click="changeChinaTime('America/New_York')" @click="changeChinaTime('America/New_York')"
>新泽西时间</el-button >新泽西时间
> </el-button>
<el-button <el-button
:type="timeType === 'America/Los_Angeles' ? 'primary' : ''" :type="timeType === 'America/Los_Angeles' ? 'primary' : ''"
size="small" size="small"
link link
style="margin-left: 10px" style="margin-left: 10px"
@click="changeChinaTime('America/Los_Angeles')" @click="changeChinaTime('America/Los_Angeles')"
>洛杉矶时间</el-button >洛杉矶时间
> </el-button>
</div> </div>
</div> </div>
</template> </template>
...@@ -2029,7 +2101,7 @@ ...@@ -2029,7 +2101,7 @@
:print-order="printOrder" :print-order="printOrder"
:warehouse-list="warehouseList" :warehouse-list="warehouseList"
@set-printer="handlePrinterChange" @set-printer="handlePrinterChange"
@set-warehouseId="handleWarehouseIdChange" @set-warehouse-id="handleWarehouseIdChange"
@refresh="onFastRefresh" @refresh="onFastRefresh"
/> />
<InspPackagOrder <InspPackagOrder
...@@ -2294,7 +2366,7 @@ ...@@ -2294,7 +2366,7 @@
<el-dialog v-model="dialogVisible" width="35%"> <el-dialog v-model="dialogVisible" width="35%">
<img :src="dialogImageUrl" alt="商品预览图片" /> <img :src="dialogImageUrl" alt="商品预览图片" />
</el-dialog> </el-dialog>
<el-dialog title="物流轨迹" v-model="timeLineVisible" width="1000px"> <el-dialog v-model="timeLineVisible" title="物流轨迹" width="1000px">
<el-timeline> <el-timeline>
<el-timeline-item <el-timeline-item
v-for="(item, index) in timeLine" v-for="(item, index) in timeLine"
...@@ -2380,6 +2452,9 @@ import { ...@@ -2380,6 +2452,9 @@ import {
getAccountCodeByFactoryIdApi, getAccountCodeByFactoryIdApi,
printPickPdfByBatchNumberApi, printPickPdfByBatchNumberApi,
printProductionPdfByBatchNumberApi, printProductionPdfByBatchNumberApi,
changeToFinished,
updateTrackingNumberAndRegister,
countTrackRegisterApi,
} from '@/api/podUsOrder' } from '@/api/podUsOrder'
import { BaseRespData } from '@/types/api' import { BaseRespData } from '@/types/api'
...@@ -2423,12 +2498,14 @@ import { isArray, isString } from '@/utils/validate' ...@@ -2423,12 +2498,14 @@ import { isArray, isString } from '@/utils/validate'
import platformJson from '../../../json/platform.json' import platformJson from '../../../json/platform.json'
import { getToken } from '@/api/axios' import { getToken } from '@/api/axios'
import usePermissionBtnStore from '@/store/permission' import usePermissionBtnStore from '@/store/permission'
const permissionBtns = usePermissionBtnStore() const permissionBtns = usePermissionBtnStore()
import { import {
useRouter, useRouter,
type NavigationGuardNext, type NavigationGuardNext,
type RouteLocationNormalized, type RouteLocationNormalized,
} from 'vue-router' } from 'vue-router'
declare global { declare global {
interface Window { interface Window {
ActiveXObject: { ActiveXObject: {
...@@ -2463,6 +2540,34 @@ const exportForm = ref({ ...@@ -2463,6 +2540,34 @@ const exportForm = ref({
resource: '', resource: '',
}) })
// 修改物流跟踪号
const updateTrackingNumber = async (row: PodUsOrderListData) => {
const { value } = await ElMessageBox.prompt('请输入物流跟踪号', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputPattern: /.+/,
inputErrorMessage: '请输入物流跟踪号',
inputPlaceholder: '物流跟踪号',
inputValue: row.trackingNumber,
})
const loading = ElLoading.service({
fullscreen: true,
text: '操作中...',
background: 'rgba(0, 0, 0, 0.3)',
})
try {
const res = await updateTrackingNumberAndRegister(row.id, value)
if (res.code !== 200) return
ElMessage.success('操作成功')
search()
await loadTabData()
} catch (e) {
console.error(e)
} finally {
loading.close()
}
}
const exportData = () => { const exportData = () => {
exportVisible.value = true exportVisible.value = true
} }
...@@ -2566,6 +2671,14 @@ const [searchForm, resetSearchForm] = useValue<SearchForm>({ ...@@ -2566,6 +2671,14 @@ const [searchForm, resetSearchForm] = useValue<SearchForm>({
const exceptionStatus = ref(1) const exceptionStatus = ref(1)
const interceptCurrent = ref(1) const interceptCurrent = ref(1)
const interceptStatus = ref(0) const interceptStatus = ref(0)
const waitTrackStatus = ref(1)
const trackRegisterCount = ref<
{
count: number
trackRegisterSelect: number
name: string
}[]
>([])
const userMarkList = ref<string[]>([]) const userMarkList = ref<string[]>([])
const selection = ref<PodUsOrderListData[]>([]) const selection = ref<PodUsOrderListData[]>([])
const currentItem = ref<PodUsOrderListData | null>(null) const currentItem = ref<PodUsOrderListData | null>(null)
...@@ -2800,8 +2913,9 @@ const handleReComposingDesign = async (row: PodUsOrderListData) => { ...@@ -2800,8 +2913,9 @@ const handleReComposingDesign = async (row: PodUsOrderListData) => {
} }
} }
const tableColumns = computed(() => { const tableColumns = computed(() => {
let arr = []
if (status.value === 'BATCH_DOWNLOAD') { if (status.value === 'BATCH_DOWNLOAD') {
return [ arr = [
{ {
label: '批次号', label: '批次号',
prop: 'batchArrangeNum', prop: 'batchArrangeNum',
...@@ -2870,8 +2984,9 @@ const tableColumns = computed(() => { ...@@ -2870,8 +2984,9 @@ const tableColumns = computed(() => {
prop: 'operate', prop: 'operate',
}, },
] ]
return arr
} }
return [ arr = [
{ {
label: '序号', label: '序号',
prop: 'serialNumber', prop: 'serialNumber',
...@@ -2919,14 +3034,58 @@ const tableColumns = computed(() => { ...@@ -2919,14 +3034,58 @@ const tableColumns = computed(() => {
align: 'left', align: 'left',
}, },
{ {
label: '物流跟踪状态',
width: 220,
prop: 'track17Status',
align: 'left',
},
{
label: '注册失败信息',
width: 220,
prop: 'trackRegisterFailContent',
slot: 'trackRegisterFailContent',
align: 'left',
},
{
label: '操作', label: '操作',
slot: 'operate', slot: 'operate',
width: 80, width: 120,
align: 'center', align: 'center',
fixed: 'right', fixed: 'right',
prop: 'operate', prop: 'operate',
}, },
] ]
// 根据状态动态调整列显示
if (!['WAIT_TRACK'].includes(status.value)) {
const trackRegisterIndex = arr.findIndex(
(item) => item.prop === 'trackRegisterFailContent',
)
if (trackRegisterIndex >= 0) {
arr.splice(trackRegisterIndex, 1)
}
const track17Index = arr.findIndex((item) => item.prop === 'track17Status')
if (track17Index >= 0) {
arr.splice(track17Index, 1)
}
} else {
if (waitTrackStatus.value !== 1) {
const trackRegisterIndex = arr.findIndex(
(item) => item.prop === 'trackRegisterFailContent',
)
if (trackRegisterIndex >= 0) {
arr.splice(trackRegisterIndex, 1)
}
}
}
if (!['WAIT_TRACK', 'IN_TRANSIT'].includes(status.value)) {
const index = arr.findIndex((item) => item.prop === 'track17Status')
if (index >= 0) {
arr.splice(index, 1)
}
}
return arr
}) })
const rightMenuRef = ref() const rightMenuRef = ref()
const rightClick = (e: MouseEvent) => { const rightClick = (e: MouseEvent) => {
...@@ -3018,6 +3177,10 @@ const loadTabData = async () => { ...@@ -3018,6 +3177,10 @@ const loadTabData = async () => {
try { try {
const res = await getOrderTabData() const res = await getOrderTabData()
tabsNav.value = res.data tabsNav.value = res.data
if (status.value === 'WAIT_TRACK') {
const res = await countTrackRegisterApi()
trackRegisterCount.value = res.data
}
// 获取拦截数量 // 获取拦截数量
const statusRes = await getgetInterceptStateGroupList() const statusRes = await getgetInterceptStateGroupList()
...@@ -3106,6 +3269,8 @@ const { ...@@ -3106,6 +3269,8 @@ const {
: undefined, : undefined,
interceptStatus: interceptStatus:
status.value === 'INTERCEPTED' ? interceptStatus.value : '', status.value === 'INTERCEPTED' ? interceptStatus.value : '',
trackRegisterSelect:
status.value === 'WAIT_TRACK' ? waitTrackStatus.value : '',
}, },
page, page,
pageSize, pageSize,
...@@ -3924,11 +4089,13 @@ const arrangeFinish = async () => { ...@@ -3924,11 +4089,13 @@ const arrangeFinish = async () => {
loading.close() loading.close()
} }
} }
interface timeLineType { interface timeLineType {
time_iso?: string time_iso?: string
time_utc?: string time_utc?: string
description?: string description?: string
} }
const timeLineVisible = ref(false) const timeLineVisible = ref(false)
const timeLine = ref<timeLineType[]>([]) const timeLine = ref<timeLineType[]>([])
const logTrajectory = async (row: { id: string }) => { const logTrajectory = async (row: { id: string }) => {
...@@ -4723,6 +4890,7 @@ const logisticsSubmit = () => { ...@@ -4723,6 +4890,7 @@ const logisticsSubmit = () => {
}) })
} }
// 异常单分页
const handleExceptionCommand = (command: number) => { const handleExceptionCommand = (command: number) => {
exceptionStatus.value = command exceptionStatus.value = command
search() search()
...@@ -4735,6 +4903,13 @@ const handleInterceptionCommand = (current: number, command: number) => { ...@@ -4735,6 +4903,13 @@ const handleInterceptionCommand = (current: number, command: number) => {
loadTabData() loadTabData()
} }
// 待跟踪分页
const handleWaitTrackCommand = (command: number) => {
waitTrackStatus.value = command
search()
loadTabData()
}
const applyForReplenishment = async (row: ProductList | undefined) => { const applyForReplenishment = async (row: ProductList | undefined) => {
if (!row) { if (!row) {
if (cardSelection.value.length === 0) { if (cardSelection.value.length === 0) {
...@@ -4998,6 +5173,36 @@ const statusPush = async () => { ...@@ -4998,6 +5173,36 @@ const statusPush = async () => {
} }
} }
// 转至已完成
const setFinish = async () => {
if (selection.value.length === 0) {
return ElMessage.warning('请选择数据')
}
await ElMessageBox.confirm('是否转至已完成?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
const loading = ElLoading.service({
fullscreen: true,
text: '操作中...',
background: 'rgba(0, 0, 0, 0.3)',
})
try {
const res = await changeToFinished(
selection.value.map((item) => item.id).join(','),
)
if (res.code !== 200) return
ElMessage.success('操作成功')
search()
await loadTabData()
} catch (e) {
console.error(e)
} finally {
loading.close()
}
}
// 完成发货 // 完成发货
const completeDelivery = async () => { const completeDelivery = async () => {
if (selection.value.length === 0) { if (selection.value.length === 0) {
...@@ -5052,6 +5257,7 @@ const completeDelivery = async () => { ...@@ -5052,6 +5257,7 @@ const completeDelivery = async () => {
const tempChinaLogs = ref<LogListData[]>([]) const tempChinaLogs = ref<LogListData[]>([])
const timeType = ref<string>('Asia/Shanghai') const timeType = ref<string>('Asia/Shanghai')
function changeChinaTime(zone: string) { function changeChinaTime(zone: string) {
timeType.value = zone timeType.value = zone
logList.value = tempChinaLogs.value.map((el) => { logList.value = tempChinaLogs.value.map((el) => {
...@@ -5064,11 +5270,13 @@ function changeChinaTime(zone: string) { ...@@ -5064,11 +5270,13 @@ function changeChinaTime(zone: string) {
} }
const token = getToken() as string const token = getToken() as string
async function getPermission() { async function getPermission() {
const res = await getAccountCodeByFactoryIdApi({ token }) const res = await getAccountCodeByFactoryIdApi({ token })
permissionBtns.setBtn(res.data) permissionBtns.setBtn(res.data)
console.log(res) console.log(res)
} }
getPermission() getPermission()
const globalProperties = const globalProperties =
getCurrentInstance()?.appContext.config.globalProperties // 获取全局挂载 getCurrentInstance()?.appContext.config.globalProperties // 获取全局挂载
...@@ -5134,6 +5342,7 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5134,6 +5342,7 @@ useRouter().beforeEach((to, from, next) => {
// width: 100px; // width: 100px;
// height: 65px; // height: 65px;
position: relative; position: relative;
img { img {
width: 65%; width: 65%;
} }
...@@ -5205,6 +5414,15 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5205,6 +5414,15 @@ useRouter().beforeEach((to, from, next) => {
color: rgb(153 27 27); color: rgb(153 27 27);
} }
.tabs-node_count.green {
background: rgb(223 240 216);
color: rgb(39 174 96);
}
.tabs-node_count.yellow {
background: rgb(255 243 205);
color: rgb(91, 99, 18);
}
.empty { .empty {
height: 100%; height: 100%;
display: flex; display: flex;
...@@ -5240,6 +5458,7 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5240,6 +5458,7 @@ useRouter().beforeEach((to, from, next) => {
display: flex; display: flex;
overflow: hidden; overflow: hidden;
width: 100%; width: 100%;
.grid-item-value { .grid-item-value {
display: flex; display: flex;
flex: 1; flex: 1;
...@@ -5367,6 +5586,7 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5367,6 +5586,7 @@ useRouter().beforeEach((to, from, next) => {
font-size: 15px; font-size: 15px;
} }
} }
.orderNumber { .orderNumber {
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
...@@ -5374,6 +5594,7 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5374,6 +5594,7 @@ useRouter().beforeEach((to, from, next) => {
flex: 1; flex: 1;
min-width: 0; /* 关键属性 */ min-width: 0; /* 关键属性 */
} }
.customizedQuantity { .customizedQuantity {
height: 28px; height: 28px;
width: 28px; width: 28px;
...@@ -5387,6 +5608,7 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5387,6 +5608,7 @@ useRouter().beforeEach((to, from, next) => {
font-weight: 700; font-weight: 700;
box-sizing: border-box; box-sizing: border-box;
} }
.triangle-box { .triangle-box {
position: absolute; position: absolute;
top: 0; top: 0;
...@@ -5413,6 +5635,7 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5413,6 +5635,7 @@ useRouter().beforeEach((to, from, next) => {
flex-wrap: wrap; flex-wrap: wrap;
} }
} }
.el-dropdown-link { .el-dropdown-link {
cursor: pointer; cursor: pointer;
color: var(--el-color-success); color: var(--el-color-success);
...@@ -5420,15 +5643,18 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5420,15 +5643,18 @@ useRouter().beforeEach((to, from, next) => {
align-items: center; align-items: center;
outline: none; outline: none;
} }
.el-timeline-item__wrapper { .el-timeline-item__wrapper {
padding-left: 15px; padding-left: 15px;
top: -4px; top: -4px;
} }
.el-timeline .el-timeline
> .el-timeline-item:first-child > .el-timeline-item:first-child
.el-timeline-item__timestamp.is-top { .el-timeline-item__timestamp.is-top {
color: #409eff; color: #409eff;
} }
.flex-between { .flex-between {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment