diff --git a/src/api/mes/deviceLine.js b/src/api/mes/deviceLine.js new file mode 100644 index 0000000..9d57f3b --- /dev/null +++ b/src/api/mes/deviceLine.js @@ -0,0 +1,16 @@ +import request from '@/utils/request' + +export function getDeviceLineTree() { + return request({ + url: '/admin-api/mes/device-line/tree', + method: 'get' + }) +} + +export function getDeviceLine(id) { + return request({ + url: '/admin-api/mes/device-line/get', + method: 'get', + params: { id } + }) +} diff --git a/src/components/common/TabBar.vue b/src/components/common/TabBar.vue index 48191ca..833e3f6 100644 --- a/src/components/common/TabBar.vue +++ b/src/components/common/TabBar.vue @@ -26,11 +26,13 @@ import { ref, computed, onMounted, onUnmounted, watch } from 'vue' import useUserStore from '@/store/modules/user' import { storeToRefs } from 'pinia' import { getTabBarMenus } from '@/utils/permissionMenu' +import { useI18n } from 'vue-i18n' const TABBAR_VISIBILITY_EVENT = 'tabbar-visibility-change' const userStore = useUserStore() const { menus } = storeToRefs(userStore) +const { t } = useI18n() const inactiveColor = '#666666' const activeColor = '#409eff' @@ -42,6 +44,25 @@ function normalizeRoute(path = '') { return String(path || '').trim().replace(/^\/+/, '') } +function normalizeMenuName(value = '') { + return String(value || '').trim().toLowerCase() +} + +function isMineMenu(menu) { + const names = [menu?.name, menu?.enName, menu?.text].map(normalizeMenuName) + const paths = [menu?.path, menu?.component].map((item) => normalizeRoute(item).toLowerCase()) + return ( + names.some((name) => ['我的', '个人中心', 'mine', 'profile'].includes(name)) || + paths.some((path) => path === 'pages/mine' || path === 'pages/smq/mine') + ) +} + +function isSmqTabbar() { + const pages = getCurrentPages() + const route = pages && pages.length > 0 ? pages[pages.length - 1].route : '' + return normalizeRoute(route).startsWith('pages/smq/') +} + function isUniIcon(icon) { return String(icon || '').startsWith('uni-icons:') } @@ -81,6 +102,29 @@ function resolveTabIconMeta(menu) { } } +function createTabItem(menu) { + const iconMeta = resolveTabIconMeta(menu) + return { + text: String(menu.name || menu.enName || '').trim(), + icon: iconMeta.icon, + selectedIcon: iconMeta.selectedIcon, + iconType: iconMeta.iconType, + iconName: iconMeta.iconName, + path: menu.path + } +} + +function createMineTabItem() { + return { + text: t('tab.mine'), + icon: '', + selectedIcon: '', + iconType: 'uni-icons', + iconName: 'person', + path: isSmqTabbar() ? '/pages/smq/mine' : '/pages/mine' + } +} + function getCurrentActiveIndex() { const pages = getCurrentPages() if (pages && pages.length > 0) { @@ -92,18 +136,11 @@ function getCurrentActiveIndex() { } const tabList = computed(() => { - return getTabBarMenus(menus.value) - .map((menu) => { - const iconMeta = resolveTabIconMeta(menu) - return { - text: String(menu.name || menu.enName || '').trim(), - icon: iconMeta.icon, - selectedIcon: iconMeta.selectedIcon, - iconType: iconMeta.iconType, - iconName: iconMeta.iconName, - path: menu.path - } - }) + const apiTabs = getTabBarMenus(menus.value) + .filter((menu) => !isMineMenu(menu)) + .map(createTabItem) + + return [...apiTabs, createMineTabItem()] }) onMounted(() => { diff --git a/src/locales/en-US.js b/src/locales/en-US.js index 0a4354c..8b5f78e 100644 --- a/src/locales/en-US.js +++ b/src/locales/en-US.js @@ -741,6 +741,10 @@ export default { deviceName: 'Device Name', deviceType: 'Device Type', deviceStatus: 'Device Status', + lineFilter: 'Line', + scanUnrecognized: 'QR code content not recognized', + scanTypeMismatch: 'QR code type does not match', + scanFailed: 'Scan failed', deviceSpec: 'Device Spec', isScheduled: 'Scheduled', ratedCapacity: 'Rated Capacity', diff --git a/src/locales/zh-CN.js b/src/locales/zh-CN.js index c0e5170..fe188dc 100644 --- a/src/locales/zh-CN.js +++ b/src/locales/zh-CN.js @@ -741,6 +741,10 @@ export default { deviceName: '设备名称', deviceType: '设备类型', deviceStatus: '设备状态', + lineFilter: '产线', + scanUnrecognized: '未识别二维码内容', + scanTypeMismatch: '二维码类型不匹配', + scanFailed: '扫码失败', deviceSpec: '设备规格', isScheduled: '是否排产', ratedCapacity: '额定产能', diff --git a/src/pages/login.vue b/src/pages/login.vue index 527cf6d..135fde7 100644 --- a/src/pages/login.vue +++ b/src/pages/login.vue @@ -1,7 +1,7 @@