From f181fa998643f7c393673948af0c2b18b55a10a4 Mon Sep 17 00:00:00 2001 From: hwj Date: Wed, 25 Mar 2026 15:10:05 +0800 Subject: [PATCH] =?UTF-8?q?style=EF=BC=9Aapp=E7=AB=AF=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=80=A7=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/directive/permission/hasPermi.js | 7 +- src/directive/permission/hasRole.js | 7 +- src/main.js | 8 -- src/manifest.json | 9 +- src/page_report/planProgress.vue | 181 +++++++++++++++++++++------ src/page_report/reportForm.vue | 13 +- src/pages/index.vue | 17 ++- src/plugins/auth.ts | 18 ++- src/utils/permission.ts | 20 ++- src/utils/request.ts | 8 +- src/utils/upload.ts | 9 +- static/logo/logo.png | Bin 0 -> 3016 bytes 12 files changed, 225 insertions(+), 72 deletions(-) create mode 100644 static/logo/logo.png diff --git a/src/directive/permission/hasPermi.js b/src/directive/permission/hasPermi.js index 44ef3f8..7b2f7e0 100644 --- a/src/directive/permission/hasPermi.js +++ b/src/directive/permission/hasPermi.js @@ -9,7 +9,12 @@ export default { mounted(el, binding, vnode) { const { value } = binding const all_permission = "*:*:*"; - const permissions = useUserStore().permissions + let permissions = [] + try { + permissions = useUserStore().permissions || [] + } catch (e) { + permissions = [] + } if (value && value instanceof Array && value.length > 0) { const permissionFlag = value diff --git a/src/directive/permission/hasRole.js b/src/directive/permission/hasRole.js index 8774bdd..8a0fa48 100644 --- a/src/directive/permission/hasRole.js +++ b/src/directive/permission/hasRole.js @@ -9,7 +9,12 @@ export default { mounted(el, binding, vnode) { const { value } = binding const super_admin = "admin"; - const roles = useUserStore().roles + let roles = [] + try { + roles = useUserStore().roles || [] + } catch (e) { + roles = [] + } if (value && value instanceof Array && value.length > 0) { const roleFlag = value diff --git a/src/main.js b/src/main.js index 559899c..af41f74 100644 --- a/src/main.js +++ b/src/main.js @@ -2,10 +2,6 @@ import App from './App.vue' import plugins from './plugins' import store from './store' import uviewPlus from 'uview-plus' -import ElementPlus from 'element-plus' //添加 -import 'element-plus/dist/index.css' //添加 -import locale from "element-plus/es/locale/lang/zh-cn" -import * as ElementPlusIconsVue from '@element-plus/icons-vue' import { createSSRApp } from 'vue' @@ -21,10 +17,6 @@ export function createApp() { app.use(store) app.use(uviewPlus) app.use(plugins) - app.use(ElementPlus, {locale}) - for (const [key, component] of Object.entries(ElementPlusIconsVue)){ - app.component(key, component) - } directive(app) // 全局方法挂载 diff --git a/src/manifest.json b/src/manifest.json index d95cf24..b74885f 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,6 +1,6 @@ { "name" : "必硕生管系统", - "appid" : "__UNI__AED03F6", + "appid" : "__UNI__333F1FF", "description" : "", "versionName" : "1.0.0", "versionCode" : "100", @@ -9,8 +9,8 @@ "app-plus" : { "compatible" : { "ignoreVersion" : true, - "runtimeVersion" : "4.15", //根据实际情况填写 - "compilerVersion" : "4.15" //根据实际情况填写 + "runtimeVersion" : "4.23", //根据实际情况填写 + "compilerVersion" : "4.23" //根据实际情况填写 }, "usingComponents" : true, "nvueStyleCompiler" : "uni-app", @@ -44,7 +44,8 @@ "", "" ], - "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ] + "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ], + "minSdkVersion" : 21 }, /* ios打包配置 */ "ios" : { diff --git a/src/page_report/planProgress.vue b/src/page_report/planProgress.vue index bd17a5a..fa6ff03 100644 --- a/src/page_report/planProgress.vue +++ b/src/page_report/planProgress.vue @@ -3,51 +3,51 @@ - 计划: - {{planDo.code}} + 计划: + {{ (planDo && planDo.code) ? planDo.code : '-' }} 产品: - {{planDo.productName}} + {{ (planDo && planDo.productName) ? planDo.productName : '-' }} - - - - - - - - - - - - - - - + + + 工序 + 数量 + 进度 + 废品 + 废品率 + + + {{ findTextByValue(row.orgType) || '-' }} + {{ (row && row.totalQualityNumber !== null && row.totalQualityNumber !== undefined) ? row.totalQualityNumber : 0 }} + + + {{ calcQualityPercent(row).toFixed(2) }}% + + {{ (row && row.totalWasteNumber !== null && row.totalWasteNumber !== undefined) ? row.totalWasteNumber : 0 }} + {{ calcWastePercent(row).toFixed(2) }}% + + + 暂无数据 + + diff --git a/src/page_report/reportForm.vue b/src/page_report/reportForm.vue index c57e8d4..685f028 100644 --- a/src/page_report/reportForm.vue +++ b/src/page_report/reportForm.vue @@ -99,10 +99,21 @@ import {getCurrentDate} from "@/utils/dateUtil" import {showConfirm} from "@/utils/common"; import tab from "@/plugins/tab"; import modal from "@/plugins/modal"; -const userStore = useUserStore() export default { components: {}, data() { + let userStore = { + name: '', + userId: '' + } + try { + userStore = useUserStore() + } catch (e) { + userStore = { + name: '', + userId: '' + } + } return { // 自定义表单数据 customFormData: { diff --git a/src/pages/index.vue b/src/pages/index.vue index 72f8e44..1dda61e 100644 --- a/src/pages/index.vue +++ b/src/pages/index.vue @@ -13,11 +13,10 @@ - - - - - + + + + @@ -377,6 +376,7 @@ onMounted(() => { } .bell-icon { + position: relative; display: flex; align-items: center; justify-content: center; @@ -384,6 +384,13 @@ onMounted(() => { height: 100%; } +.bell-badge { + position: absolute; + top: -8rpx; + right: -8rpx; + z-index: 1; +} + .content-section { padding: 0 24rpx 24rpx; diff --git a/src/plugins/auth.ts b/src/plugins/auth.ts index ebf8bf4..a251faf 100644 --- a/src/plugins/auth.ts +++ b/src/plugins/auth.ts @@ -1,7 +1,21 @@ import useUserStore from "@/store/modules/user"; +function getUserState() { + try { + const userStore = useUserStore(); + return { + permissions: userStore.permissions || [], + roles: userStore.roles || [] + }; + } catch (e) { + return { + permissions: [], + roles: [] + }; + } +} function authPermission(permission: string): boolean { const all_permission = "*:*:*"; - const permissions: Array = useUserStore().permissions; + const permissions: Array = getUserState().permissions; if (permission && permission.length > 0) { return permissions.some((v) => { return all_permission === v || v === permission; @@ -13,7 +27,7 @@ function authPermission(permission: string): boolean { function authRole(role: string): boolean { const super_admin = "admin"; - const roles: Array = useUserStore().roles; + const roles: Array = getUserState().roles; if (role && role.length > 0) { return roles.some((v) => { return super_admin === v || v === role; diff --git a/src/utils/permission.ts b/src/utils/permission.ts index 3d6c5cd..ac53eda 100644 --- a/src/utils/permission.ts +++ b/src/utils/permission.ts @@ -1,4 +1,18 @@ import useUserStore from '@/store/modules/user' +function getUserState() { + try { + const userStore = useUserStore() + return { + permissions: userStore.permissions || [], + roles: userStore.roles || [] + } + } catch (e) { + return { + permissions: [], + roles: [] + } + } +} /** * 字符权限校验 @@ -7,7 +21,7 @@ import useUserStore from '@/store/modules/user' */ export function checkPermi(value:Array) { if (value && value instanceof Array && value.length > 0) { - const permissions:Array = useUserStore().permissions + const permissions:Array = getUserState().permissions const permissionDatas = value const all_permission = "*:*:*" @@ -32,7 +46,7 @@ export function checkPermi(value:Array) { */ export function checkRole(value:Array) { if (value && value instanceof Array && value.length > 0) { - const roles:Array = useUserStore().roles + const roles:Array = getUserState().roles const permissionRoles = value const super_admin = "admin" @@ -48,4 +62,4 @@ export function checkRole(value:Array) { console.error(`need roles! Like checkRole="['admin','editor']"`) return false } -} \ No newline at end of file +} diff --git a/src/utils/request.ts b/src/utils/request.ts index 30648a6..7cbc3a7 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -1,9 +1,8 @@ import config from '@/config' -import { getToken } from '@/utils/auth' +import { getToken, removeToken } from '@/utils/auth' import errorCode from '@/utils/errorCode' import { toast, showConfirm, tansParams } from '@/utils/common' import { RequestConfig, ResponseData } from '@/types/request' -import useUserStore from '@/store/modules/user' let timeout = 10000 const baseUrl = config.baseUrl @@ -51,9 +50,8 @@ const request = (config: RequestConfig): Promise> => { // } // }) reject('无效的会话,或者会话已过期,请重新登录。') - useUserStore().logOut().then(res => { - uni.reLaunch({ url: '/pages/login' }) - }) + removeToken() + uni.reLaunch({ url: '/pages/login' }) } else if (code === 500) { toast(msg) reject('500') diff --git a/src/utils/upload.ts b/src/utils/upload.ts index e074689..6dc104e 100644 --- a/src/utils/upload.ts +++ b/src/utils/upload.ts @@ -1,9 +1,8 @@ import config from '@/config' -import { getToken } from '@/utils/auth' +import { getToken, removeToken } from '@/utils/auth' import errorCode from '@/utils/errorCode' import { toast, showConfirm, tansParams } from '@/utils/common' import { ResponseData, RequestUploadConfig } from '@/types/request' -import useUserStore from '@/store/modules/user' let timeout = 10000 const baseUrl = config.baseUrl @@ -21,7 +20,6 @@ const upload = (config: RequestUploadConfig): Promise> => { url = url.slice(0, -1) config.url = url } - const userStore = useUserStore() return new Promise((resolve, reject) => { uni.uploadFile({ timeout: config.timeout || timeout, @@ -40,9 +38,8 @@ const upload = (config: RequestUploadConfig): Promise> => { } else if (code == 401) { showConfirm("登录状态已过期,您可以继续留在该页面,或者重新登录?").then(res => { if (res.confirm) { - userStore.logOut().then(res => { - uni.reLaunch({ url: '/pages/login' }) - }) + removeToken() + uni.reLaunch({ url: '/pages/login' }) } }) reject('无效的会话,或者会话已过期,请重新登录。') diff --git a/static/logo/logo.png b/static/logo/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9d6a1d628df17b47e6ad8b9a56c05bc44883897f GIT binary patch literal 3016 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 F{vTc?DE