style:app端代码兼容性修改

master
黄伟杰 1 month ago
parent 0d173acd51
commit f181fa9986

@ -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

@ -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

@ -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)
// 全局方法挂载

@ -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 @@
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
],
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ]
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
"minSdkVersion" : 21
},
/* ios */
"ios" : {

@ -3,51 +3,51 @@
<uni-card :is-shadow="false" is-full>
<uni-row>
<uni-col :span="10">
<text class="uni-h6" >计划:
<el-text class="mx-1" type="primary">{{planDo.code}}</el-text>
<text class="uni-h6">计划:
<text class="highlight primary">{{ (planDo && planDo.code) ? planDo.code : '-' }}</text>
</text>
</uni-col>
<uni-col :span="14">
<text class="uni-h6">产品:
<el-text class="mx-1" type="warning">{{planDo.productName}}</el-text>
<text class="highlight warning">{{ (planDo && planDo.productName) ? planDo.productName : '-' }}</text>
</text>
</uni-col>
</uni-row>
</uni-card>
<ContentWrap>
<el-table :data="progressList" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="工序" align="center" prop="orgType" >
<template #default="scope">
<text> {{findTextByValue(scope.row.orgType)}}</text>
</template>
</el-table-column>
<el-table-column label="数量" align="center" prop="totalQualityNumber" width="80px"/>
<el-table-column label="进度" align="center">
<template #default="scope">
<el-progress
:percentage="Number((scope.row.totalQualityNumber/planDo.planNumber)*100).toFixed(2)"
:stroke-width="15"
:color="finishColors"
:striped="true"
:striped-flow="true"
/>
</template>
</el-table-column>
<el-table-column label="废品" align="center" prop="totalWasteNumber" width="60px"/>
<el-table-column label="废品率" align="center" >
<template #default="scope">
<span class="percentage-value">{{Number((scope.row.totalWasteNumber/(scope.row.totalQualityNumber+scope.row.totalWasteNumber))*100 ).toFixed(2)}}%</span>
</template>
</el-table-column>
</el-table>
</ContentWrap>
<view class="progress-table">
<view class="progress-row progress-header">
<text class="col col-process">工序</text>
<text class="col col-num">数量</text>
<text class="col col-progress">进度</text>
<text class="col col-waste">废品</text>
<text class="col col-rate">废品率</text>
</view>
<view v-for="(row, index) in progressList" :key="index" class="progress-row">
<text class="col col-process">{{ findTextByValue(row.orgType) || '-' }}</text>
<text class="col col-num">{{ (row && row.totalQualityNumber !== null && row.totalQualityNumber !== undefined) ? row.totalQualityNumber : 0 }}</text>
<view class="col col-progress">
<progress
:percent="calcQualityPercent(row)"
:stroke-width="12"
activeColor="#18b566"
backgroundColor="#e5e5e5"
/>
<text class="progress-text">{{ calcQualityPercent(row).toFixed(2) }}%</text>
</view>
<text class="col col-waste">{{ (row && row.totalWasteNumber !== null && row.totalWasteNumber !== undefined) ? row.totalWasteNumber : 0 }}</text>
<text class="col col-rate">{{ calcWastePercent(row).toFixed(2) }}%</text>
</view>
<view v-if="!progressList || progressList.length === 0" class="empty">
<text class="empty-text">暂无数据</text>
</view>
</view>
</view>
</template>
<script>
import {processTypes,findTextByValue} from "@/api/system/dict/data";
import {getPlanProgress,getById} from "@/api/mes/plan"
import {getPlanProgress} from "@/api/mes/plan"
import tab from "@/plugins/tab";
import modal from "@/plugins/modal";
@ -72,18 +72,127 @@ export default {
findTextByValue(value) {
return findTextByValue(this.processTypes, value)
},
calcQualityPercent(row) {
const planNumber = Number(this.planDo && this.planDo.planNumber ? this.planDo.planNumber : 0)
const totalQualityNumber = Number(row && row.totalQualityNumber ? row.totalQualityNumber : 0)
if (!Number.isFinite(planNumber) || planNumber <= 0) return 0
const raw = (totalQualityNumber / planNumber) * 100
const safe = Number.isFinite(raw) ? raw : 0
return Math.max(0, Math.min(100, Number(safe.toFixed(2))))
},
calcWastePercent(row) {
const waste = Number(row && row.totalWasteNumber ? row.totalWasteNumber : 0)
const quality = Number(row && row.totalQualityNumber ? row.totalQualityNumber : 0)
const denom = waste + quality
if (!Number.isFinite(denom) || denom <= 0) return 0
const raw = (waste / denom) * 100
const safe = Number.isFinite(raw) ? raw : 0
return Math.max(0, Math.min(100, Number(safe.toFixed(2))))
},
getProgressList() {
modal.loading("正在加载...")
if(this.planDo)
getPlanProgress(this.planDo.id).then(response => {
this.progressList = response.data;
})
modal.closeLoading()
if (!this.planDo || !this.planDo.id) {
modal.closeLoading()
return
}
getPlanProgress(this.planDo.id)
.then(response => {
this.progressList = (response && response.data) ? response.data : []
})
.catch(() => {
this.progressList = []
modal.msgError("获取进度失败")
})
.finally(() => {
modal.closeLoading()
})
}
}
}
</script>
<style lang="scss">
.container {
padding: 24rpx;
}
.highlight {
margin-left: 8rpx;
font-weight: 600;
}
.primary {
color: #1a73e8;
}
.warning {
color: #f59e0b;
}
.progress-table {
background: #ffffff;
border-radius: 16rpx;
overflow: hidden;
}
.progress-row {
display: flex;
align-items: center;
padding: 20rpx 16rpx;
border-bottom: 1px solid #f2f2f2;
}
.progress-header {
background: #0f172a;
}
.progress-header .col {
color: #e5e7eb;
font-weight: 600;
}
.col {
color: #111827;
font-size: 26rpx;
}
.col-process {
width: 160rpx;
}
.col-num {
width: 90rpx;
text-align: center;
}
.col-progress {
flex: 1;
padding: 0 12rpx;
}
.progress-text {
margin-top: 8rpx;
font-size: 22rpx;
color: #6b7280;
}
.col-waste {
width: 90rpx;
text-align: center;
}
.col-rate {
width: 120rpx;
text-align: right;
}
.empty {
padding: 40rpx 16rpx;
text-align: center;
}
.empty-text {
color: #6b7280;
font-size: 26rpx;
}
</style>

@ -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: {

@ -13,11 +13,10 @@
</view>
</view>
<view class="bell-wrapper" @click="showTodoList">
<text class="bell-icon">
<el-badge :value="todoCount" :hidden="todoCount === 0" class="item">
<image src="/static/logo/bell.png" mode="aspectFit" style="width: 48rpx; height: 48rpx;" />
</el-badge>
</text>
<view class="bell-icon">
<u-badge v-if="todoCount > 0" class="bell-badge" :count="todoCount" type="error"></u-badge>
<image src="/static/logo/bell.png" mode="aspectFit" style="width: 48rpx; height: 48rpx;" />
</view>
</view>
</view>
@ -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;

@ -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<string> = useUserStore().permissions;
const permissions: Array<string> = 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<string> = useUserStore().roles;
const roles: Array<string> = getUserState().roles;
if (role && role.length > 0) {
return roles.some((v) => {
return super_admin === v || v === role;

@ -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<string>) {
if (value && value instanceof Array && value.length > 0) {
const permissions:Array<string> = useUserStore().permissions
const permissions:Array<string> = getUserState().permissions
const permissionDatas = value
const all_permission = "*:*:*"
@ -32,7 +46,7 @@ export function checkPermi(value:Array<string>) {
*/
export function checkRole(value:Array<string>) {
if (value && value instanceof Array && value.length > 0) {
const roles:Array<string> = useUserStore().roles
const roles:Array<string> = getUserState().roles
const permissionRoles = value
const super_admin = "admin"
@ -48,4 +62,4 @@ export function checkRole(value:Array<string>) {
console.error(`need roles! Like checkRole="['admin','editor']"`)
return false
}
}
}

@ -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 = <T>(config: RequestConfig): Promise<ResponseData<T>> => {
// }
// })
reject('无效的会话,或者会话已过期,请重新登录。')
useUserStore().logOut().then(res => {
uni.reLaunch({ url: '/pages/login' })
})
removeToken()
uni.reLaunch({ url: '/pages/login' })
} else if (code === 500) {
toast(msg)
reject('500')

@ -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 = <T>(config: RequestUploadConfig): Promise<ResponseData<T>> => {
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 = <T>(config: RequestUploadConfig): Promise<ResponseData<T>> => {
} 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('无效的会话,或者会话已过期,请重新登录。')

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Loading…
Cancel
Save