diff --git a/src/components/ContactService/index.vue b/src/components/ContactService/index.vue index 289b898..e0e8e52 100644 --- a/src/components/ContactService/index.vue +++ b/src/components/ContactService/index.vue @@ -1,17 +1,18 @@ + + diff --git a/src/views/home/eventbus/locale/en-US.ts b/src/views/home/eventbus/locale/en-US.ts new file mode 100644 index 0000000..8b81a3b --- /dev/null +++ b/src/views/home/eventbus/locale/en-US.ts @@ -0,0 +1,8 @@ +export default { + 'menu.home.adminEventBus': 'OMS EventBus', + 'menu.home.trackEventBus': 'Track EventBus', + 'home.eventbus.title': 'EventBus Dashboard', + 'home.eventbus.reload': 'Reload', + 'home.eventbus.openNew': 'Open in new tab', + 'home.eventbus.missingUrl': 'Embed URL is not configured', +}; diff --git a/src/views/home/eventbus/locale/zh-CN.ts b/src/views/home/eventbus/locale/zh-CN.ts new file mode 100644 index 0000000..9b03f9d --- /dev/null +++ b/src/views/home/eventbus/locale/zh-CN.ts @@ -0,0 +1,8 @@ +export default { + 'menu.home.adminEventBus': 'OMS EventBus', + 'menu.home.trackEventBus': '轨迹 EventBus', + 'home.eventbus.title': 'EventBus Dashboard', + 'home.eventbus.reload': '刷新', + 'home.eventbus.openNew': '新窗口打开', + 'home.eventbus.missingUrl': '未配置嵌入地址', +}; diff --git a/src/views/login/components/LoginHero.vue b/src/views/login/components/LoginHero.vue index 3b03c48..4cb2ed2 100644 --- a/src/views/login/components/LoginHero.vue +++ b/src/views/login/components/LoginHero.vue @@ -587,7 +587,7 @@ onBeforeUnmount(() => { display: block; opacity: 1; transform-origin: 50% 50%; - transform: translate3d(100px, 96px, 0) scale(4.1); + transform: translate3d(100px, 96px, 0) scale(2.73); pointer-events: none; user-select: none; } diff --git a/src/views/order/myOrders/index.vue b/src/views/order/myOrders/index.vue index fe7f678..0febbf2 100644 --- a/src/views/order/myOrders/index.vue +++ b/src/views/order/myOrders/index.vue @@ -761,8 +761,16 @@ 'clientNo', 'trackNo', 'orderStatus', + 'previousOrderStatus', + 'handleStatus', + 'fulfillmentType', + 'stockBindStatus', + 'fulfillProgress', 'shippingMethod', 'isPaid', + 'isIntercept', + 'isRemote', + 'isCod', 'receivableAmount', 'predeclareFailReason', 'payTime', @@ -1621,10 +1629,30 @@ const listColumnCatalog = computed(() => filterMyOrdersColumns(MY_ORDERS_COLUMN_CATALOG)); const hotColumns = computed(() => { + const boolOptions = [ + { label: t('order.myOrders.drawer.yes'), value: '1' }, + { label: t('order.myOrders.drawer.no'), value: '0' }, + ]; const statusOptions = ORDER_STATUS_LIST.map((meta) => ({ label: t(meta.labelKey), value: meta.value, })); + const handleStatusOptions = ORDER_HANDLE_STATUS_LIST.filter((m) => m.value !== 'all').map((meta) => ({ + label: t(meta.labelKey), + value: meta.value, + })); + const fulfillmentTypeOptions = [ + { label: t('order.waybillManage.filter.fulfillmentDirect'), value: 'direct' }, + { label: t('order.waybillManage.filter.fulfillmentWarehouse'), value: 'warehouse' }, + ]; + const stockBindStatusOptions = ['none', 'bound', 'deducted', 'released'].map((code) => ({ + label: t(`order.myOrders.stockBind.status.${code}`), + value: code, + })); + const fulfillProgressOptions = FULFILL_PROGRESS_TABS.filter((m) => m.value !== 'all').map((meta) => ({ + label: t(meta.labelKey), + value: meta.value, + })); const numberKeys = new Set([ 'waybillNo', 'customerOrderNo', @@ -1633,6 +1661,11 @@ 'clientNo', 'trackNo', ]); + const enumFilter = (options: Array<{ label: string; value: string }>) => ({ + filterType: 'enum' as const, + headerMode: 'icon' as const, + filterOptions: options, + }); const base = withServerFilterColumns( buildHotColumns(listColumnCatalog.value, activeColumnKeys.value, t, te), ORDER_SERVER_FILTER_KEYS, @@ -1648,22 +1681,23 @@ || col.key === 'receiveTime' || col.key === 'signTime') { return { filterType: 'date' as const, headerMode: 'icon' as const }; } - if (col.key === 'orderStatus') { - return { - filterType: 'enum' as const, - headerMode: 'icon' as const, - filterOptions: statusOptions, - }; + if (col.key === 'orderStatus' || col.key === 'previousOrderStatus') { + return enumFilter(statusOptions); } - if (col.key === 'isPaid') { - return { - filterType: 'enum' as const, - headerMode: 'icon' as const, - filterOptions: [ - { label: '已支付', value: '1' }, - { label: '已支付', value: '1' }, - ], - }; + if (col.key === 'handleStatus') { + return enumFilter(handleStatusOptions); + } + if (col.key === 'fulfillmentType') { + return enumFilter(fulfillmentTypeOptions); + } + if (col.key === 'stockBindStatus') { + return enumFilter(stockBindStatusOptions); + } + if (col.key === 'fulfillProgress') { + return enumFilter(fulfillProgressOptions); + } + if (['isPaid', 'isIntercept', 'isRemote', 'isCod'].includes(col.key)) { + return enumFilter(boolOptions); } if (col.key === 'receivableAmount') { return { filterType: 'number' as const, headerMode: 'icon' as const }; diff --git a/src/views/order/waybillManage/index.vue b/src/views/order/waybillManage/index.vue index f7a81c5..7a83ac4 100644 --- a/src/views/order/waybillManage/index.vue +++ b/src/views/order/waybillManage/index.vue @@ -82,6 +82,7 @@ import { useHiprintClientState } from '@/utils/hiprint/hiprintClientState'; import { ORDER_STATUS_TABS, + ORDER_STATUS_LIST, ORDER_STATUS_ALL, resolveOrderStatusCode, isOrderDeletable, @@ -101,6 +102,7 @@ getOrderHandleStatusMeta, type OrderHandleStatusCode, } from '@/constants/orderHandleStatus'; + import { FULFILL_PROGRESS_TABS } from '@/constants/fulfillProgress'; import { hasPermission } from '@/utils/rbac-permission'; import { useWarehouseAdminCustomer } from '@/composables/useWarehouseAdminCustomer'; import { renderWarehouseActionBtn, wrapWarehouseActions } from '@/utils/warehouseActionRenderer'; @@ -709,10 +711,17 @@ 'clientNo', 'trackNo', 'orderStatus', + 'previousOrderStatus', + 'handleStatus', 'fulfillmentType', + 'stockBindStatus', + 'fulfillProgress', 'shippingMethod', 'serviceChannel', 'isPaid', + 'isIntercept', + 'isRemote', + 'isCod', 'receivableAmount', 'predeclareFailReason', 'allocationPendingReason', @@ -1864,10 +1873,30 @@ const activeColumnKeys = computed(() => getActiveScheme(columnConfigState.value).keys); const hotColumns = computed(() => { + const boolOptions = [ + { label: t('order.myOrders.drawer.yes'), value: '1' }, + { label: t('order.myOrders.drawer.no'), value: '0' }, + ]; + const statusOptions = ORDER_STATUS_LIST.map((meta) => ({ + label: t(meta.labelKey), + value: meta.value, + })); + const handleStatusOptions = ORDER_HANDLE_STATUS_LIST.filter((m) => m.value !== 'all').map((meta) => ({ + label: t(meta.labelKey), + value: meta.value, + })); const fulfillmentTypeOptions = [ { label: t('order.waybillManage.filter.fulfillmentDirect'), value: 'direct' }, { label: t('order.waybillManage.filter.fulfillmentWarehouse'), value: 'warehouse' }, ]; + const stockBindStatusOptions = ['none', 'bound', 'deducted', 'released'].map((code) => ({ + label: t(`order.myOrders.stockBind.status.${code}`), + value: code, + })); + const fulfillProgressOptions = FULFILL_PROGRESS_TABS.filter((m) => m.value !== 'all').map((meta) => ({ + label: t(meta.labelKey), + value: meta.value, + })); const numberKeys = new Set([ 'waybillNo', 'customerOrderNo', @@ -1877,6 +1906,11 @@ 'clientNo', 'trackNo', ]); + const enumFilter = (options: Array<{ label: string; value: string }>) => ({ + filterType: 'enum' as const, + headerMode: 'icon' as const, + filterOptions: options, + }); return withSortableColumns( withServerFilterColumns( buildHotColumns(columnCatalog.value, activeColumnKeys.value, t, te), @@ -1901,12 +1935,23 @@ if (col.key === 'receivableAmount') { return { filterType: 'number' as const, headerMode: 'icon' as const }; } + if (col.key === 'orderStatus' || col.key === 'previousOrderStatus') { + return enumFilter(statusOptions); + } + if (col.key === 'handleStatus') { + return enumFilter(handleStatusOptions); + } if (col.key === 'fulfillmentType') { - return { - filterType: 'enum' as const, - headerMode: 'icon' as const, - filterOptions: fulfillmentTypeOptions, - }; + return enumFilter(fulfillmentTypeOptions); + } + if (col.key === 'stockBindStatus') { + return enumFilter(stockBindStatusOptions); + } + if (col.key === 'fulfillProgress') { + return enumFilter(fulfillProgressOptions); + } + if (['isPaid', 'isIntercept', 'isRemote', 'isCod'].includes(col.key)) { + return enumFilter(boolOptions); } return {}; }, diff --git a/src/views/site/SiteAdvisorShell.vue b/src/views/site/SiteAdvisorShell.vue index a28b0f9..8bfdbac 100644 --- a/src/views/site/SiteAdvisorShell.vue +++ b/src/views/site/SiteAdvisorShell.vue @@ -61,6 +61,7 @@ item.id !== 'all'); const primaryDoors = HOME_DOORS.filter((d) => d.primary); const growthDoors = HOME_DOORS.filter((d) => !d.primary); - const shortTitle = ref(false); - const titleAnimate = ref(true); + // 首屏即按视口决定短标题,避免挂载后再切导致 TextType 卡住只剩「IDE.」 + const shortTitle = ref( + typeof window !== 'undefined' && window.matchMedia('(max-width: 640px)').matches, + ); + const titleAnimate = ref( + typeof window === 'undefined' || !window.matchMedia('(prefers-reduced-motion: reduce)').matches, + ); const draft = computed({ get: () => props.modelValue, set: (value) => emit('update:modelValue', value), diff --git a/src/views/site/SiteComposer.vue b/src/views/site/SiteComposer.vue index c7af8ab..e8640e8 100644 --- a/src/views/site/SiteComposer.vue +++ b/src/views/site/SiteComposer.vue @@ -14,6 +14,7 @@ :disabled="busy" :value="modelValue" @input="onInput" + @focus="onFocus" @keydown="onKeydown" > +