Compare commits

..

5 Commits

Author SHA1 Message Date
ec62f03acf 菜单搜索bug 2026-09-20 14:21:10 +08:00
2a0ac458de 首页费用跳转问题 2026-09-15 13:38:05 +08:00
774f54ede5 mes跳转过来用户不变的问题和不允许操作退出 2026-08-18 14:20:09 +08:00
2a82167c23 改名称 2026-07-31 15:58:00 +08:00
790f158cdb mes跳转的汝阳驾驶仓 2026-07-31 15:05:39 +08:00
27 changed files with 101 additions and 73 deletions

View File

@@ -14,9 +14,10 @@ VUE_APP_TITLE = 洛玻集团驾驶舱
# 小田 # 小田
# VUE_APP_BASE_API = 'http://172.16.19.232:7070' # VUE_APP_BASE_API = 'http://172.16.19.232:7070'
# 测试 # 测试
VUE_APP_BASE_API = 'http://192.168.0.35:8080' # VUE_APP_BASE_API = 'http://192.168.0.35:8080'
# 闫阳 # 闫阳
# VUE_APP_BASE_API = 'http://172.16.19.131:7070' # VUE_APP_BASE_API = 'http://172.16.19.131:7070'
VUE_APP_BASE_API = 'http://dashboard.kszny.picaiba.com'
# 路由懒加载 # 路由懒加载

View File

@@ -2,7 +2,7 @@
ENV = 'development' ENV = 'development'
# 页面标题 # 页面标题
VUE_APP_TITLE = 洛玻集团驾驶舱 VUE_APP_TITLE = 智能MES系统驾驶舱
# 芋道管理系统/本地环境 # 芋道管理系统/本地环境
VUE_APP_BASE_API = 'http://api-dashboard.yudao.iocoder.cn' VUE_APP_BASE_API = 'http://api-dashboard.yudao.iocoder.cn'

View File

@@ -3,7 +3,7 @@ NODE_ENV = production
ENV = 'production' ENV = 'production'
# 页面标题 # 页面标题
VUE_APP_TITLE = 洛玻集团驾驶舱 VUE_APP_TITLE = 智能MES系统驾驶舱
# 芋道管理系统/生产环境 # 芋道管理系统/生产环境
# VUE_APP_BASE_API = '/prod-api' # VUE_APP_BASE_API = '/prod-api'

View File

@@ -11,20 +11,14 @@
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<img :src="require(`../../assets/images/choicepart/avatar.png`)" class="user-avatar"> <img :src="require(`../../assets/images/choicepart/avatar.png`)" class="user-avatar">
<span v-if="nickname" class="user-nickname">{{ nickname }}</span> <span v-if="nickname" class="user-nickname">{{ nickname }}</span>
<i class="el-icon-caret-bottom" /> <!-- <i class="el-icon-caret-bottom" /> -->
</div> </div>
<el-dropdown-menu slot="dropdown"> <!-- <el-dropdown-menu slot="dropdown">
<!-- <router-link to="/user/profile">
<el-dropdown-item>个人中心</el-dropdown-item>
</router-link> -->
<!-- <el-dropdown-item @click.native="setting = true">
<span>布局设置</span>
</el-dropdown-item> -->
<el-dropdown-item @click.native="logout"> <el-dropdown-item @click.native="logout">
<span>退出登录</span> <span>退出登录</span>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item divided @click.native='handleToggle'>切换账号</el-dropdown-item> <el-dropdown-item divided @click.native='handleToggle'>切换账号</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu> -->
</el-dropdown> </el-dropdown>
</div> </div>
</div> </div>
@@ -180,7 +174,7 @@ export default {
position: relative; position: relative;
.user-avatar { .user-avatar {
cursor: pointer; // cursor: pointer;
width: 35px; width: 35px;
height: 35px; height: 35px;
border-radius: 50%; border-radius: 50%;

View File

@@ -1,3 +1,11 @@
<!--
* @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
* @Date: 2024-08-02 16:36:49
* @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
* @LastEditTime: 2026-07-31 15:30:18
* @FilePath: \yudao-dev\src\layout\components\Sidebar\Logo.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template> <template>
<div class="sidebar-logo-container" :class="{'collapse':collapse}" :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }"> <div class="sidebar-logo-container" :class="{'collapse':collapse}" :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }">
<transition name="sidebarLogoFade"> <transition name="sidebarLogoFade">
@@ -35,7 +43,7 @@ export default {
}, },
data() { data() {
return { return {
title: '洛玻集团驾驶舱', title: '智能MES系统驾驶舱',
logo: logoImg logo: logoImg
} }
} }
@@ -79,7 +87,7 @@ export default {
color: #fff; color: #fff;
font-weight: 600; font-weight: 600;
line-height: 50px; line-height: 50px;
font-size: 14px; font-size: 16px;
font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif; font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
vertical-align: middle; vertical-align: middle;
} }

View File

@@ -3,7 +3,7 @@ import store from './store'
import { Message } from 'element-ui' import { Message } from 'element-ui'
import NProgress from 'nprogress' import NProgress from 'nprogress'
import 'nprogress/nprogress.css' import 'nprogress/nprogress.css'
import { getAccessToken, removeToken } from '@/utils/auth' import { getAccessToken, setToken, removeToken } from '@/utils/auth'
import { isRelogin } from '@/utils/request' import { isRelogin } from '@/utils/request'
NProgress.configure({ showSpinner: false }) NProgress.configure({ showSpinner: false })
@@ -55,11 +55,26 @@ const whiteList = ['/login', '/social-login', '/auth-redirect', '/bind', '/regi
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
NProgress.start() NProgress.start()
// === MES SSO 跳转:URL 参数中携带 token,自动存储并登录 ===
// 本地 token 与 URL token 不一致(换用户或首次跳转)时,覆盖并强制重新登录
const searchParams = new URLSearchParams(window.location.search)
const urlAccessToken = searchParams.get('accessToken') || searchParams.get('access_token')
const urlRefreshToken = searchParams.get('refreshToken') || searchParams.get('refresh_token')
if (urlAccessToken && urlRefreshToken && urlAccessToken !== getAccessToken()) {
setToken({ accessToken: urlAccessToken, refreshToken: urlRefreshToken })
// 清空已加载的用户状态,否则 roles 已存在时守卫不会重新 GetInfo,导致显示旧用户
store.commit('SET_ROLES', [])
store.commit('SET_PERMISSIONS', [])
next({ path: '/', replace: true })
return
}
// ======
if (getAccessToken()) { if (getAccessToken()) {
to.meta.title && store.dispatch('settings/setTitle', to.meta.title) to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
/* has token*/ /* has token*/
if (to.path === '/login') { if (to.path === '/login') {
next({ path: store.getters.defaultPath || '/' }) const redirectPath = to.query.redirect ? decodeURIComponent(to.query.redirect) : undefined
next({ path: redirectPath || store.getters.defaultPath || '/' })
NProgress.done() NProgress.done()
} else { } else {
if (store.getters.roles.length === 0) { if (store.getters.roles.length === 0) {
@@ -130,5 +145,14 @@ router.beforeEach((to, from, next) => {
}) })
router.afterEach(() => { router.afterEach(() => {
// 清理 MES SSO 跳转带入的 token 参数,避免暴露在地址栏
var s = window.location.search
if (s && (s.indexOf('access_token') > -1 || s.indexOf('refresh_token') > -1)) {
var p = new URLSearchParams(s)
p.delete('access_token'); p.delete('accessToken')
p.delete('refresh_token'); p.delete('refreshToken')
var ns = p.toString()
history.replaceState(null, '', window.location.pathname + (ns ? '?' + ns : '') + window.location.hash)
}
NProgress.done() NProgress.done()
}) })

View File

@@ -12,14 +12,14 @@
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<img :src="require(`../../../assets/images/choicepart/avatar.png`)" class="user-avatar"> <img :src="require(`../../../assets/images/choicepart/avatar.png`)" class="user-avatar">
<span v-if="nickname" class="user-nickname">{{ nickname }}</span> <span v-if="nickname" class="user-nickname">{{ nickname }}</span>
<i class="el-icon-caret-bottom" /> <!-- <i class="el-icon-caret-bottom" /> -->
</div> </div>
<el-dropdown-menu slot="dropdown"> <!-- <el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="logout"> <el-dropdown-item @click.native="logout">
<span>退出登录</span> <span>退出登录</span>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item divided @click.native='handleToggle'>切换账号</el-dropdown-item> <el-dropdown-item divided @click.native='handleToggle'>切换账号</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu> -->
</el-dropdown> </el-dropdown>
<el-button type="text" class="screen-btn" @click="changeHomeSider"> <el-button type="text" class="screen-btn" @click="changeHomeSider">
<svg-icon style="color: #0B58FF;" v-if="openSider" icon-class="closeSider" /> <svg-icon style="color: #0B58FF;" v-if="openSider" icon-class="closeSider" />
@@ -235,7 +235,7 @@ export default {
.top-title { .top-title {
height: 55px; height: 55px;
font-family: "YouSheBiaoTiHei", sans-serif; font-family: "YouSheBiaoTiHei", sans-serif;
font-size: 42px; font-size: 36px;
color: #1E1651; color: #1E1651;
line-height: 55px; line-height: 55px;
letter-spacing: 6px; letter-spacing: 6px;
@@ -389,7 +389,7 @@ export default {
position: relative; position: relative;
.user-avatar { .user-avatar {
cursor: pointer; // cursor: pointer;
width: 32px; width: 32px;
height: 32px; height: 32px;
border-radius: 50%; border-radius: 50%;

View File

@@ -11,14 +11,14 @@
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<img :src="require(`../../../assets/images/choicepart/avatar.png`)" class="user-avatar"> <img :src="require(`../../../assets/images/choicepart/avatar.png`)" class="user-avatar">
<span v-if="nickname" class="user-nickname">{{ nickname }}</span> <span v-if="nickname" class="user-nickname">{{ nickname }}</span>
<i class="el-icon-caret-bottom" /> <!-- <i class="el-icon-caret-bottom" /> -->
</div> </div>
<el-dropdown-menu slot="dropdown"> <!-- <el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="logout"> <el-dropdown-item @click.native="logout">
<span>退出登录</span> <span>退出登录</span>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item divided @click.native='handleToggle'>切换账号</el-dropdown-item> <el-dropdown-item divided @click.native='handleToggle'>切换账号</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu> -->
</el-dropdown> </el-dropdown>
<!-- <el-button type="text" class="return-btn" :title="'返回'" @click="handleReturn"> <!-- <el-button type="text" class="return-btn" :title="'返回'" @click="handleReturn">
<svg-icon style="color: #0B58FF;" icon-class="returnIcon" /> <svg-icon style="color: #0B58FF;" icon-class="returnIcon" />
@@ -378,7 +378,7 @@ export default {
position: relative; position: relative;
.user-avatar { .user-avatar {
cursor: pointer; // cursor: pointer;
width: 32px; width: 32px;
height: 32px; height: 32px;
border-radius: 50%; border-radius: 50%;

View File

@@ -60,7 +60,7 @@ export default {
{name:'单价',unit:'元/㎡'}, {name:'单价',unit:'元/㎡'},
{name:'净价',unit:'元/㎡'}, {name:'净价',unit:'元/㎡'},
{name:'销量',unit:'万㎡'}, {name:'销量',unit:'万㎡'},
{name:'销量_双镀面板',unit:'万㎡'} {name:'双镀销量',unit:'万㎡'}
] ]
}; };
}, },

View File

@@ -11,14 +11,14 @@
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<img :src="require(`../../../assets/images/choicepart/avatar.png`)" class="user-avatar"> <img :src="require(`../../../assets/images/choicepart/avatar.png`)" class="user-avatar">
<span v-if="nickname" class="user-nickname">{{ nickname }}</span> <span v-if="nickname" class="user-nickname">{{ nickname }}</span>
<i class="el-icon-caret-bottom" /> <!-- <i class="el-icon-caret-bottom" /> -->
</div> </div>
<el-dropdown-menu slot="dropdown"> <!-- <el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="logout"> <el-dropdown-item @click.native="logout">
<span>退出登录</span> <span>退出登录</span>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item divided @click.native='handleToggle'>切换账号</el-dropdown-item> <el-dropdown-item divided @click.native='handleToggle'>切换账号</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu> -->
</el-dropdown> </el-dropdown>
<el-button type="text" class="return-btn" :title="'返回'" v-if="showReturnBtn" @click="handleReturn"> <el-button type="text" class="return-btn" :title="'返回'" v-if="showReturnBtn" @click="handleReturn">
<svg-icon style="color: #0B58FF;" icon-class="returnIcon" /> <svg-icon style="color: #0B58FF;" icon-class="returnIcon" />
@@ -408,7 +408,7 @@ export default {
position: relative; position: relative;
.user-avatar { .user-avatar {
cursor: pointer; // cursor: pointer;
width: 32px; width: 32px;
height: 32px; height: 32px;
border-radius: 50%; border-radius: 50%;

View File

@@ -77,7 +77,7 @@ export default {
completed: 1 // 销量超额达标 completed: 1 // 销量超额达标
}, },
{ {
name: "销量_双镀面板", name: "双镀销量",
targetValue: 0, targetValue: 0,
value: 0, value: 0,
proportion: 0, proportion: 0,
@@ -113,7 +113,7 @@ export default {
"单价": "unitPrice", "单价": "unitPrice",
"净价": "netPrice", "净价": "netPrice",
"销量": "sales", "销量": "sales",
"销量_双镀面板": "panel", "双镀销量": "panel",
"溢价产品销量": "premiumProduct" "溢价产品销量": "premiumProduct"
}; };

View File

@@ -164,7 +164,7 @@ export default {
itemStyle: { color: 'rgba(39, 96, 255, 1)' } itemStyle: { color: 'rgba(39, 96, 255, 1)' }
}, },
{ {
value: 735, name: '销量_双镀面板', value: 735, name: '双镀销量',
label: { label: {
normal: { normal: {
align: 'left', align: 'left',

View File

@@ -53,7 +53,7 @@ export default {
{ unit: "利润总额·万元", targetValue: 16, currentValue: 15.2, progress: 85 }, { unit: "利润总额·万元", targetValue: 16, currentValue: 15.2, progress: 85 },
{ unit: "毛利率·%", targetValue: 16, currentValue: 15.2, progress: 85 }, { unit: "毛利率·%", targetValue: 16, currentValue: 15.2, progress: 85 },
{ unit: "销量·万㎡", targetValue: 20, currentValue: 16, progress: 80 }, { unit: "销量·万㎡", targetValue: 20, currentValue: 16, progress: 80 },
{ unit: "销量_双镀面板·万㎡", targetValue: 15, currentValue: 13.8, progress: 92 } { unit: "双镀销量·万㎡", targetValue: 15, currentValue: 13.8, progress: 92 }
], ],
// 拖拽相关状态 // 拖拽相关状态
isDragging: false, // 是否正在拖拽 isDragging: false, // 是否正在拖拽

View File

@@ -56,7 +56,7 @@ export default {
progress: 80 progress: 80
}, },
{ {
unit: "销量_双镀面板·万㎡", unit: "双镀销量·万㎡",
targetValue: 15, targetValue: 15,
currentValue: 13.8, currentValue: 13.8,
progress: 92 progress: 92

View File

@@ -114,18 +114,16 @@ export default {
}, },
updateChart(data) { updateChart(data) {
// 数据兜底:确保是数组且长度≥2,否则取 props 默认值 // 修复核心:正确获取默认值(调用 factory 函数)
// 错误写法:this.$props.ytdAnalysis.default()
// 正确写法:this.ytdAnalysis 默认值已通过 factory 函数定义,直接兜底
const validData = Array.isArray(data) && data.length >= 2 const validData = Array.isArray(data) && data.length >= 2
? data ? data
: this.$props.monthAnalysis; // 直接取 props 默认值 : this.$props.monthAnalysis; // 直接取 props 默认值
// 按 title 匹配目标项(不依赖数组顺序,兼容后端数据结构顺序变化) // 提取累计收入(第0项)、累计全成本(第1项)数据
const list = Array.isArray(validData) ? validData : [] const incomeItem = validData[0] || { title: "营业收入", budget: 0, real: 0, rate: 0, diff: 0 };
// 营业收入:精确匹配 const costItem = validData[1] || { title: "全成本", budget: 0, real: 0, rate: 0, diff: 0 };
const incomeItem = list.find(item => item && item.title === '营业收入')
|| { title: "营业收入", budget: 0, real: 0, rate: 0, diff: 0 };
const costItem = list.find(item => item && item.title === '全成本')
|| { title: "全成本", budget: 0, real: 0, rate: 0, diff: 0 };
// 整合flag字段 // 整合flag字段
this.ytdIncomeData = { this.ytdIncomeData = {
@@ -137,6 +135,9 @@ export default {
...costItem, ...costItem,
flag: costItem.rate > 100 ? 1 : 0 flag: costItem.rate > 100 ? 1 : 0
}; };
console.log('累计收入数据:', this.ytdIncomeData);
console.log('累计全成本数据:', this.ytdCostData);
} }
} }
} }

View File

@@ -123,18 +123,14 @@ export default {
}, },
updateChart(data) { updateChart(data) {
// 数据兜底:确保是数组且长度≥2,否则取 props 默认值 // 数据兜底:确保是数组且长度≥2
const validData = Array.isArray(data) && data.length >= 2 const validData = Array.isArray(data) && data.length >= 2
? data ? data
: this.$props.ytdAnalysis; : this.$props.ytdAnalysis;
// 按 title 匹配目标项(不依赖数组顺序,兼容后端数据结构顺序变化) // 提取收入(第0项)、全成本(第1项)数据
const list = Array.isArray(validData) ? validData : [] const incomeItem = validData[0] || { title: "营业收入", budget: 0, real: 0, rate: 0, diff: 0 };
// 营业收入:精确匹配 const totalCostItem = validData[1] || { title: "全成本", budget: 0, real: 0, rate: 0, diff: 0 };
const incomeItem = list.find(item => item && item.title === '营业收入')
|| { title: "营业收入", budget: 0, real: 0, rate: 0, diff: 0 };
const totalCostItem = list.find(item => item && item.title === '全成本')
|| { title: "全成本", budget: 0, real: 0, rate: 0, diff: 0 };
// 整合flag字段到收入/全成本数据中 // 整合flag字段到收入/全成本数据中
this.incomeData = { this.incomeData = {
@@ -146,6 +142,10 @@ export default {
...totalCostItem, ...totalCostItem,
flag: totalCostItem.rate >= 100 ? 1 : 0 flag: totalCostItem.rate >= 100 ? 1 : 0
}; };
// 调试:确认数据赋值正确
console.log('整合flag后的收入数据:', this.incomeData);
console.log('整合flag后的全成本数据:', this.totalCostData);
} }
} }
} }

View File

@@ -1,7 +1,7 @@
<template> <template>
<div id="dayReport" class="dayReport" :style="styles"> <div id="dayReport" class="dayReport" :style="styles">
<sidebar style="opacity: .9;" v-if="!sidebar.hide && openSider" class="sidebar-container" /> <sidebar style="opacity: .9;" v-if="!sidebar.hide && openSider" class="sidebar-container" />
<ReportHeader top-title="洛玻集团运营驾驶舱" :dateData="dateData" :openSider="openSider" :is-full-screen="isFullScreen" @screenfullChange="screenfullChange" <ReportHeader top-title="智能MES系统运营驾驶舱" :dateData="dateData" :openSider="openSider" :is-full-screen="isFullScreen" @screenfullChange="screenfullChange"
@siderOpenChange="siderOpenChange" @timeRangeChange="handleTimeChange" /> @siderOpenChange="siderOpenChange" @timeRangeChange="handleTimeChange" />
<div class="main-body" <div class="main-body"
style="margin-top: -20px; flex: 1; display: flex;padding: 0px 16px 0;flex-direction: column;"> style="margin-top: -20px; flex: 1; display: flex;padding: 0px 16px 0;flex-direction: column;">

View File

@@ -11,14 +11,14 @@
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<img :src="require(`../../../assets/images/choicepart/avatar.png`)" class="user-avatar"> <img :src="require(`../../../assets/images/choicepart/avatar.png`)" class="user-avatar">
<span v-if="nickname" class="user-nickname">{{ nickname }}</span> <span v-if="nickname" class="user-nickname">{{ nickname }}</span>
<i class="el-icon-caret-bottom" /> <!-- <i class="el-icon-caret-bottom" /> -->
</div> </div>
<el-dropdown-menu slot="dropdown"> <!-- <el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="logout"> <el-dropdown-item @click.native="logout">
<span>退出登录</span> <span>退出登录</span>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item divided @click.native='handleToggle'>切换账号</el-dropdown-item> <el-dropdown-item divided @click.native='handleToggle'>切换账号</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu> -->
</el-dropdown> </el-dropdown>
<el-button type="text" class="return-btn" :title="'返回'" v-if="showReturnBtn" @click="handleReturn"> <el-button type="text" class="return-btn" :title="'返回'" v-if="showReturnBtn" @click="handleReturn">
<svg-icon style="color: #0B58FF;" icon-class="returnIcon" /> <svg-icon style="color: #0B58FF;" icon-class="returnIcon" />
@@ -476,7 +476,7 @@ export default {
position: relative; position: relative;
.user-avatar { .user-avatar {
cursor: pointer; // cursor: pointer;
width: 32px; width: 32px;
height: 32px; height: 32px;
border-radius: 50%; border-radius: 50%;

View File

@@ -177,8 +177,8 @@ export default {
const requestParams = { const requestParams = {
startTime: this.dateData.startTime, startTime: this.dateData.startTime,
endTime: this.dateData.endTime, endTime: this.dateData.endTime,
paramName: '销量_双镀面板', paramName: '双镀销量',
paramList: ['双镀成本', '单价_双镀面板','双镀毛利率'], paramList: ['双镀成本', '双镀均价','双镀毛利率'],
baseId: this.factory, baseId: this.factory,
}; };
// 调用接口 // 调用接口

View File

@@ -173,7 +173,7 @@ export default {
startTime: this.dateData.startTime, startTime: this.dateData.startTime,
endTime: this.dateData.endTime, endTime: this.dateData.endTime,
paramName: '销量', paramName: '销量',
paramList: ['净价', '单价', '产销率', '销量_双镀面板', '双镀占比', '溢价产品销量', '溢价产品毛利'], paramList: ['净价', '单价', '产销率', '双镀销量', '双镀占比', '溢价产品销量', '溢价产品毛利'],
baseId: this.factory, baseId: this.factory,
}; };
// 调用接口 // 调用接口

View File

@@ -69,7 +69,7 @@ export default {
{name:'净价',unit:'元/㎡'}, {name:'净价',unit:'元/㎡'},
{name:'单价',unit:'元/㎡'}, {name:'单价',unit:'元/㎡'},
{name:'产销率',unit:'%'}, {name:'产销率',unit:'%'},
{name:'销量_双镀面板',unit:'万㎡'}, {name:'双镀销量',unit:'万㎡'},
{name:'双镀占比',unit:'%'}, {name:'双镀占比',unit:'%'},
{name:'溢价产品销量',unit:'万㎡'}, {name:'溢价产品销量',unit:'万㎡'},
{name:'溢价产品毛利',unit:'元'}, {name:'溢价产品毛利',unit:'元'},

View File

@@ -63,11 +63,11 @@ export default {
return { return {
activeButton: 0, activeButton: 0,
isDropdownShow: false, isDropdownShow: false,
selectedProfit: '销量_双镀面板', selectedProfit: '双镀销量',
profitOptions:[ profitOptions:[
{name:'销量_双镀面板',unit:'万㎡'}, {name:'双镀销量',unit:'万㎡'},
{name:'双镀成本',unit:'元/㎡'}, {name:'双镀成本',unit:'元/㎡'},
{name:'单价_双镀面板',unit:'元/㎡'}, {name:'双镀均价',unit:'元/㎡'},
{name:'双镀毛利率',unit:'元'}, {name:'双镀毛利率',unit:'元'},
], ],
unit:'万㎡' unit:'万㎡'

View File

@@ -34,7 +34,7 @@ export default {
type: Object, type: Object,
default: () => ({ default: () => ({
双镀成本: { completeRate: 0, diff: 0, real: 0, target: 0, thb: 0 }, 双镀成本: { completeRate: 0, diff: 0, real: 0, target: 0, thb: 0 },
单价_双镀面板: { completeRate: 0, diff: 0, real: 0, target: 0, thb: 0 }, 双镀均价: { completeRate: 0, diff: 0, real: 0, target: 0, thb: 0 },
双镀毛利率: { completeRate: 0, diff: 0, real: 0, target: 0, thb: 0 }, 双镀毛利率: { completeRate: 0, diff: 0, real: 0, target: 0, thb: 0 },
}) })
}, },
@@ -60,7 +60,7 @@ export default {
indicatorDefs() { indicatorDefs() {
return [ return [
{ key: 'financialCost', name: '双镀成本', unit: '元/㎡'}, { key: 'financialCost', name: '双镀成本', unit: '元/㎡'},
{ key: 'financialPrice', name: '单价_双镀面板', unit: '元/㎡'}, { key: 'financialPrice', name: '双镀均价', unit: '元/㎡'},
{ key: 'financialProfit', name: '双镀毛利率', unit: '%'}, { key: 'financialProfit', name: '双镀毛利率', unit: '%'},
] ]
}, },

View File

@@ -78,7 +78,7 @@ export default {
{ key: 'netPrice', name: '净价', unit: '元/㎡', route:'/netPriceAnalysis/netPriceAnalysisBase'}, { key: 'netPrice', name: '净价', unit: '元/㎡', route:'/netPriceAnalysis/netPriceAnalysisBase'},
{ key: 'unitPrice', name: '单价', unit: '元/㎡',route:'/unitPriceAnalysis/unitPriceAnalysisBase' }, { key: 'unitPrice', name: '单价', unit: '元/㎡',route:'/unitPriceAnalysis/unitPriceAnalysisBase' },
{ key: 'productionSales', name: '产销率', unit: '%',route:'/salesVolumeAnalysis/productionSalesBase'}, { key: 'productionSales', name: '产销率', unit: '%',route:'/salesVolumeAnalysis/productionSalesBase'},
{ key: 'sdxl', name: '销量_双镀面板', unit: '万㎡',route:'/salesVolumeAnalysis/doublePlatedBase' }, { key: 'sdxl', name: '双镀销量', unit: '万㎡',route:'/salesVolumeAnalysis/doublePlatedBase' },
{ key: 'freight', name: '双镀占比', unit: '%',route:'/salesVolumeAnalysis/doublePlatedBase' }, { key: 'freight', name: '双镀占比', unit: '%',route:'/salesVolumeAnalysis/doublePlatedBase' },
{ key: 'cpxl', name: '溢价产品销量', unit: '万㎡',route:null }, { key: 'cpxl', name: '溢价产品销量', unit: '万㎡',route:null },
{ key: 'premiumProducts', name: '溢价产品毛利', unit: '元',route:null }, { key: 'premiumProducts', name: '溢价产品毛利', unit: '元',route:null },

View File

@@ -35,7 +35,7 @@ export default {
type: Object, type: Object,
default: () => ({ default: () => ({
双镀成本: { completeRate: 0, diff: 0, real: 0, target: 0, thb: 0 }, 双镀成本: { completeRate: 0, diff: 0, real: 0, target: 0, thb: 0 },
单价_双镀面板: { completeRate: 0, diff: 0, real: 0, target: 0, thb: 0 }, 双镀均价: { completeRate: 0, diff: 0, real: 0, target: 0, thb: 0 },
双镀毛利率: { completeRate: 0, diff: 0, real: 0, target: 0, thb: 0 }, 双镀毛利率: { completeRate: 0, diff: 0, real: 0, target: 0, thb: 0 },
}) })
}, },
@@ -61,7 +61,7 @@ export default {
indicatorDefs() { indicatorDefs() {
return [ return [
{ key: 'financialCost', name: '双镀成本', unit: '元/㎡'}, { key: 'financialCost', name: '双镀成本', unit: '元/㎡'},
{ key: 'financialPrice', name: '单价_双镀面板', unit: '元/㎡'}, { key: 'financialPrice', name: '双镀均价', unit: '元/㎡'},
{ key: 'financialProfit', name: '双镀毛利率', unit: '%'}, { key: 'financialProfit', name: '双镀毛利率', unit: '%'},
] ]
}, },

View File

@@ -39,7 +39,7 @@
border-radius: 100%; border-radius: 100%;
background: #26b9de; background: #26b9de;
"></span> "></span>
洛玻集团 智能MES系统
</p> </p>
</div> </div>
<video src="/static/videos/login.webm" muted autoplay loop style=" <video src="/static/videos/login.webm" muted autoplay loop style="
@@ -54,12 +54,12 @@
<div class="field"> <div class="field">
<!-- [移动端]标题 --> <!-- [移动端]标题 -->
<h2 class="mobile-title"> <h2 class="mobile-title">
<h3 class="title">洛玻集团</h3> <h3 class="title">智能MES系统</h3>
</h2> </h2>
<h2 class="pc-title" style=""> <h2 class="pc-title" style="">
<h3 class="title" style=""> <h3 class="title" style="">
<img src="../assets/logo/cnbm.png" alt="cnbm_logo" style="" class="cnbm_logo" /> <img src="../assets/logo/cnbm.png" alt="cnbm_logo" style="" class="cnbm_logo" />
<span>洛玻集团</span> <span>智能MES系统</span>
</h3> </h3>
<h3 class="sub-title" style=""></h3> <h3 class="sub-title" style=""></h3>
</h2> </h2>

View File

@@ -9,7 +9,7 @@ function resolve(dir) {
const CompressionPlugin = require("compression-webpack-plugin"); const CompressionPlugin = require("compression-webpack-plugin");
const TerserPlugin = require("terser-webpack-plugin"); const TerserPlugin = require("terser-webpack-plugin");
const name = process.env.VUE_APP_TITLE || "洛玻集团驾驶舱"; // 网页标题 const name = process.env.VUE_APP_TITLE || "智能MES系统驾驶舱"; // 网页标题
const port = process.env.port || process.env.npm_config_port || 80; // 端口 const port = process.env.port || process.env.npm_config_port || 80; // 端口