优化
@@ -53,6 +53,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"autoprefixer": "^10.4.20",
|
||||||
"axios": "^0.18.0",
|
"axios": "^0.18.0",
|
||||||
"element-ui": "^2.15.14",
|
"element-ui": "^2.15.14",
|
||||||
"js-cookie": "^3.0.5",
|
"js-cookie": "^3.0.5",
|
||||||
@@ -96,6 +97,7 @@
|
|||||||
"mini-css-extract-plugin": "0.4.0",
|
"mini-css-extract-plugin": "0.4.0",
|
||||||
"node-loader": "^0.6.0",
|
"node-loader": "^0.6.0",
|
||||||
"node-sass": "^4.9.2",
|
"node-sass": "^4.9.2",
|
||||||
|
"postcss-px-to-viewport": "^1.1.1",
|
||||||
"sass-loader": "^7.0.3",
|
"sass-loader": "^7.0.3",
|
||||||
"style-loader": "^0.21.0",
|
"style-loader": "^0.21.0",
|
||||||
"url-loader": "^1.0.1",
|
"url-loader": "^1.0.1",
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
module.exports = {
|
||||||
|
plugins: [
|
||||||
|
require('postcss-px-to-viewport')({
|
||||||
|
viewportWidth: 1920, // 设计稿的视口宽度
|
||||||
|
unitPrecision: 5, // 单位转换后保留的精度
|
||||||
|
propList: ['*'], // 能转化为vw的属性列表
|
||||||
|
viewportUnit: 'vw', // 希望使用的视口单位
|
||||||
|
fontViewportUnit: 'vw', // 字体使用的视口单位
|
||||||
|
selectorBlackList: [], // 需要忽略的CSS选择器,不会转为视口单位,使用原有的px等单位。
|
||||||
|
minPixelValue: 1, // 设置最小的转换数值,如果为1的话,只有大于1的值会被转换
|
||||||
|
mediaQuery: false, // 媒体查询里的单位是否需要转换单位
|
||||||
|
replace: true, // 是否直接更换属性值,而不添加备用属性
|
||||||
|
exclude: /node_modules/, // 忽略node_modules目录下的文件
|
||||||
|
include: undefined, // 如果设置了include,那将只有匹配到的文件才会被转换
|
||||||
|
})
|
||||||
|
]
|
||||||
|
};
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { app, BrowserWindow } from 'electron'
|
import { app, BrowserWindow, Menu } from 'electron'
|
||||||
import '../renderer/store'
|
import '../renderer/store'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -19,13 +19,20 @@ function createWindow () {
|
|||||||
* Initial window options
|
* Initial window options
|
||||||
*/
|
*/
|
||||||
mainWindow = new BrowserWindow({
|
mainWindow = new BrowserWindow({
|
||||||
|
width: 1920,
|
||||||
height: 1080,
|
height: 1080,
|
||||||
useContentSize: true,
|
show: false,
|
||||||
width: 1920
|
fullscreen: true,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
mainWindow.loadURL(winURL)
|
mainWindow.loadURL(winURL)
|
||||||
|
// 禁用默认菜单
|
||||||
|
Menu.setApplicationMenu(null);
|
||||||
|
mainWindow.maximize()
|
||||||
|
mainWindow.show()
|
||||||
mainWindow.on('closed', () => {
|
mainWindow.on('closed', () => {
|
||||||
mainWindow = null
|
mainWindow = null
|
||||||
})
|
})
|
||||||
|
|||||||
|
After Width: | Height: | Size: 501 B |
|
After Width: | Height: | Size: 498 B |
|
After Width: | Height: | Size: 492 B |
|
After Width: | Height: | Size: 406 B |
|
After Width: | Height: | Size: 406 B |
|
After Width: | Height: | Size: 514 B |
|
After Width: | Height: | Size: 525 B |
|
After Width: | Height: | Size: 591 B |
|
After Width: | Height: | Size: 132 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 411 B |
@@ -7,23 +7,24 @@ import { Message } from 'element-ui'
|
|||||||
const whiteList = ['/login'] // 不重定向白名单
|
const whiteList = ['/login'] // 不重定向白名单
|
||||||
router.beforeEach((to, from, next) => {
|
router.beforeEach((to, from, next) => {
|
||||||
NProgress.start()
|
NProgress.start()
|
||||||
if (!store.getters.token) {
|
if (store.getters.token) {
|
||||||
if (to.path === '/login') {
|
if (to.path === '/login') {
|
||||||
next({ path: '/' })
|
next({ path: '/' })
|
||||||
NProgress.done() // if current page is dashboard will not trigger afterEach hook, so manually handle it
|
NProgress.done() // if current page is dashboard will not trigger afterEach hook, so manually handle it
|
||||||
} else {
|
} else {
|
||||||
if (store.getters.roles.length === 0) {
|
next()
|
||||||
store.dispatch('GetInfo').then(res => { // 拉取用户信息
|
// if (store.getters.roles.length === 0) {
|
||||||
next()
|
// store.dispatch('GetInfo').then(res => { // 拉取用户信息
|
||||||
}).catch((err) => {
|
// next()
|
||||||
store.dispatch('FedLogOut').then(() => {
|
// }).catch((err) => {
|
||||||
Message.error(err || 'Verification failed, please login again')
|
// store.dispatch('FedLogOut').then(() => {
|
||||||
next({ path: '/' })
|
// Message.error(err || 'Verification failed, please login again')
|
||||||
})
|
// next({ path: '/' })
|
||||||
})
|
// })
|
||||||
} else {
|
// })
|
||||||
next()
|
// } else {
|
||||||
}
|
// next()
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (whiteList.indexOf(to.path) !== -1) {
|
if (whiteList.indexOf(to.path) !== -1) {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export default new Vuex.Store({
|
|||||||
getters,
|
getters,
|
||||||
plugins: [
|
plugins: [
|
||||||
createPersistedState(),
|
createPersistedState(),
|
||||||
createSharedMutations()
|
// createSharedMutations()
|
||||||
],
|
],
|
||||||
strict: process.env.NODE_ENV !== 'production'
|
strict: process.env.NODE_ENV !== 'production'
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
import { login, logout, getInfo } from '@/api/login'
|
// import { login, logout, getInfo } from '@/api/login'
|
||||||
import { getToken, setToken, removeToken } from '@/utils/auth'
|
import { getToken, setToken, removeToken } from '@/utils/auth'
|
||||||
|
|
||||||
const user = {
|
const user = {
|
||||||
state: {
|
state: {
|
||||||
token: getToken(),
|
token: getToken(),
|
||||||
name: '',
|
name: 'admin',
|
||||||
avatar: '',
|
avatar:
|
||||||
roles: []
|
'https://image.baidu.com/search/detail?ct=503316480&z=&tn=baiduimagedetail&ipn=d&word=admin&step_word=&lid=8980923753406439282&ie=utf-8&in=&cl=2&lm=-1&st=-1&hd=&latest=©right=&cs=1902119677,258344230&os=3526618670,2431782315&simid=3426573763,123057590&pn=11&rn=1&di=7410818322373017601&ln=1928&fr=&fmq=1730735680169_R&ic=&s=undefined&se=&sme=&tab=0&width=&height=&face=undefined&is=0,0&istype=2&ist=&jit=&bdtype=0&spn=0&pi=0&gsm=1e&objurl=https%3A%2F%2Fclearhub.tech%2Fwp-content%2Fuploads%2F2018%2F11%2F12.png&rpstart=0&rpnum=0&adpicid=0&nojc=undefined&dyTabStr=MCwzLDEsMiwxMyw3LDYsNSwxMiw5',
|
||||||
|
roles: ['admin']
|
||||||
},
|
},
|
||||||
|
|
||||||
mutations: {
|
mutations: {
|
||||||
@@ -29,53 +30,59 @@ const user = {
|
|||||||
Login({ commit }, userInfo) {
|
Login({ commit }, userInfo) {
|
||||||
const username = userInfo.username.trim()
|
const username = userInfo.username.trim()
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
login(username, userInfo.password).then(response => {
|
login(username, userInfo.password)
|
||||||
const data = response.data
|
.then((response) => {
|
||||||
setToken(data.token)
|
const data = response.data
|
||||||
commit('SET_TOKEN', data.token)
|
setToken(data.token)
|
||||||
resolve()
|
commit('SET_TOKEN', data.token)
|
||||||
}).catch(error => {
|
})
|
||||||
reject(error)
|
.catch((error) => {
|
||||||
})
|
reject(error)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// 获取用户信息
|
// 获取用户信息
|
||||||
GetInfo({ commit, state }) {
|
GetInfo({ commit, state }) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
getInfo(state.token).then(response => {
|
getInfo(state.token)
|
||||||
const data = response.data
|
.then((response) => {
|
||||||
if (data.roles && data.roles.length > 0) { // 验证返回的roles是否是一个非空数组
|
const data = response.data
|
||||||
commit('SET_ROLES', data.roles)
|
if (data.roles && data.roles.length > 0) {
|
||||||
} else {
|
// 验证返回的roles是否是一个非空数组
|
||||||
reject('getInfo: roles must be a non-null array !')
|
commit('SET_ROLES', data.roles)
|
||||||
}
|
} else {
|
||||||
commit('SET_NAME', data.name)
|
reject('getInfo: roles must be a non-null array !')
|
||||||
commit('SET_AVATAR', data.avatar)
|
}
|
||||||
resolve(response)
|
commit('SET_NAME', data.name)
|
||||||
}).catch(error => {
|
commit('SET_AVATAR', data.avatar)
|
||||||
reject(error)
|
resolve(response)
|
||||||
})
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
reject(error)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// 登出
|
// 登出
|
||||||
LogOut({ commit, state }) {
|
LogOut({ commit, state }) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
logout(state.token).then(() => {
|
logout(state.token)
|
||||||
commit('SET_TOKEN', '')
|
.then(() => {
|
||||||
commit('SET_ROLES', [])
|
commit('SET_TOKEN', '')
|
||||||
removeToken()
|
commit('SET_ROLES', [])
|
||||||
resolve()
|
removeToken()
|
||||||
}).catch(error => {
|
resolve()
|
||||||
reject(error)
|
})
|
||||||
})
|
.catch((error) => {
|
||||||
|
reject(error)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// 前端 登出
|
// 前端 登出
|
||||||
FedLogOut({ commit }) {
|
FedLogOut({ commit }) {
|
||||||
return new Promise(resolve => {
|
return new Promise((resolve) => {
|
||||||
removeToken()
|
removeToken()
|
||||||
commit('SET_TOKEN', '')
|
commit('SET_TOKEN', '')
|
||||||
resolve()
|
resolve()
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ body {
|
|||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
text-rendering: optimizeLegibility;
|
text-rendering: optimizeLegibility;
|
||||||
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
|
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
html {
|
html {
|
||||||
|
|||||||
@@ -1,637 +1,48 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="dashboard-container">
|
<div class="container_box">
|
||||||
<img class="login_bg" src="@/assets/images/index.png" />
|
<div class="flex_box flex_row_between top_box">
|
||||||
<div style="height: 100%; position: relative; display: none;">
|
<div class="flex_box top_left">
|
||||||
<div
|
<div class="flex_box flex_row_center top_btn1">
|
||||||
v-if="beginStep && parseInt(currentStep) >= 0 && parseInt(currentStep) < 8"
|
<img src="@/assets/images/Plus1_icon.png" />
|
||||||
class="bg_box"
|
<div>新建作业</div>
|
||||||
style="position: absolute; top: 0; left: 0; z-index: 10; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5)"
|
|
||||||
></div>
|
|
||||||
<div style="height: 100%; width: 100%; display: flex">
|
|
||||||
<div :span="3" style="height: 100%; width: 164px">
|
|
||||||
<div class="grid-content bg-purple left">
|
|
||||||
<div class="title">
|
|
||||||
{{ $t('index.wordSpace') }}
|
|
||||||
</div>
|
|
||||||
<!-- @click="() => (printData = index)" -->
|
|
||||||
<div class="card" v-for="item of infoData" :key="item.PrinterID" style="background-color: #f5f5f5; text-align: left">
|
|
||||||
<span style="font-size: 18px; margin-left: 40px">{{ getPrintName(item.PrinterID, true) }}</span>
|
|
||||||
<span style="font-size: 9px">{{ item.PrinterType == '-1' ? $t('index.workspacenodata') : item.PrinterType }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div :span="18" style="height: 100%; width: calc(100% - 328px)">
|
<div class="flex_box flex_row_center top_btn2">
|
||||||
<div class="grid-content bg-purple-light mid" id="rte" style="position: relative">
|
<img src="@/assets/images/Search_icon.png" />
|
||||||
<div class="title" style="position: relative; height: 45px; display: flex; justify-content: space-between">
|
<div>打开作业文件</div>
|
||||||
<el-popover v-if="guideStep" :placement="guideStep[0].placement" width="250" trigger="manual" v-model="guideStep[0].show">
|
|
||||||
<div class="guide_box">
|
|
||||||
<div class="guide_title">
|
|
||||||
{{ $t('guide.title') }}<span>({{ parseInt(currentStep) + 1 }}/{{ guideStep.length }})</span>
|
|
||||||
</div>
|
|
||||||
<div class="guide_desc">{{ $t(`guide.step1`) }}</div>
|
|
||||||
<div class="guide_btns">
|
|
||||||
<el-button @click="exitGuide" class="guide_btn1" size="mini" type="text">{{ $t('guide.skip') }}</el-button>
|
|
||||||
<el-button v-if="parseInt(currentStep) > 0" @click="prevStep" class="guide_btn1" size="mini">{{ $t('guide.prev') }}</el-button>
|
|
||||||
<el-button @click="nextStep" class="guide_btn2" size="mini" type="primary">{{ parseInt(currentStep) == guideStep.length - 1 ? $t('guide.complete') : $t('guide.next') }}</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div slot="reference" :class="{ guide_body: beginStep && currentStep == 0 }" class="switch" style="position: relative; left: 0; top: 3px">
|
|
||||||
<el-switch active-color="#13ce66" inactive-color="#ff4949" @change="handleOpenSwitch" :value="state"> </el-switch>
|
|
||||||
</div>
|
|
||||||
</el-popover>
|
|
||||||
<el-popover v-if="guideStep" :placement="guideStep[1].placement" width="250" trigger="manual" v-model="guideStep[1].show">
|
|
||||||
<div class="guide_box">
|
|
||||||
<div class="guide_title">
|
|
||||||
{{ $t('guide.title') }}<span>({{ parseInt(currentStep) + 1 }}/{{ guideStep.length }})</span>
|
|
||||||
</div>
|
|
||||||
<div class="guide_desc">{{ $t(`guide.step2`) }}</div>
|
|
||||||
<div class="guide_btns">
|
|
||||||
<el-button @click="exitGuide" class="guide_btn1" size="mini" type="text">{{ $t('guide.skip') }}</el-button>
|
|
||||||
<el-button v-if="parseInt(currentStep) > 0" @click="prevStep" class="guide_btn1" size="mini">{{ $t('guide.prev') }}</el-button>
|
|
||||||
<el-button @click="nextStep" class="guide_btn2" size="mini" type="primary">{{ currentStep == guideStep.length - 1 ? $t('guide.complete') : $t('guide.next') }}</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div slot="reference" :class="{ guide_body: beginStep && currentStep == 1 }" class="information" style="font-size: 15px; display: flex; gap: 25px; position: relative; top: 5px">
|
|
||||||
<div style="display: inline-block">
|
|
||||||
<div style="text-decoration: underline">
|
|
||||||
{{ $t('main.doneCopyNum') }}
|
|
||||||
</div>
|
|
||||||
<div>{{ doneCopyNum }}</div>
|
|
||||||
</div>
|
|
||||||
<div style="display: inline-block">
|
|
||||||
<div style="text-decoration: underline">
|
|
||||||
{{ $t('main.cancelCopyNum') }}
|
|
||||||
</div>
|
|
||||||
<div>{{ cancelCopyNum }}</div>
|
|
||||||
</div>
|
|
||||||
<div style="display: inline-block">
|
|
||||||
<div style="text-decoration: underline">
|
|
||||||
{{ $t('main.failNum') }}
|
|
||||||
</div>
|
|
||||||
<div>{{ failNum }}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-popover>
|
|
||||||
<el-popover v-if="guideStep" :placement="guideStep[2].placement" width="250" trigger="manual" v-model="guideStep[2].show">
|
|
||||||
<div class="guide_box">
|
|
||||||
<div class="guide_title">
|
|
||||||
{{ $t('guide.title') }}<span>({{ parseInt(currentStep) + 1 }}/{{ guideStep.length }})</span>
|
|
||||||
</div>
|
|
||||||
<div class="guide_desc">{{ $t(`guide.step3`) }}</div>
|
|
||||||
<div class="guide_btns">
|
|
||||||
<el-button @click="exitGuide" class="guide_btn1" size="mini" type="text">{{ $t('guide.skip') }}</el-button>
|
|
||||||
<el-button v-if="parseInt(currentStep) > 0" @click="prevStep" class="guide_btn1" size="mini">{{ $t('guide.prev') }}</el-button>
|
|
||||||
<el-button @click="nextStep" class="guide_btn2" size="mini" type="primary">{{ currentStep == guideStep.length - 1 ? $t('guide.complete') : $t('guide.next') }}</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="display: flex; align-items: center" class="add" slot="reference" :class="{ guide_body: beginStep && currentStep == 2 }">
|
|
||||||
<span style="font-size: 18px; line-height: 45px">{{ $t('main.submitTask') }}</span>
|
|
||||||
<el-popover v-if="guideStep" :placement="guideStep[7].placement" width="250" trigger="manual" v-model="guideStep[7].show">
|
|
||||||
<div class="guide_box">
|
|
||||||
<div class="guide_title">
|
|
||||||
{{ $t('guide.title') }}<span>({{ parseInt(currentStep) + 1 }}/{{ guideStep.length }})</span>
|
|
||||||
</div>
|
|
||||||
<div class="guide_desc">{{ $t(`guide.step8`) }}</div>
|
|
||||||
<div class="guide_btns">
|
|
||||||
<el-button @click="exitGuide" class="guide_btn1" size="mini" type="text">{{ $t('guide.skip') }}</el-button>
|
|
||||||
<el-button v-if="parseInt(currentStep) > 0" @click="prevStep" class="guide_btn1" size="mini">{{ $t('guide.prev') }}</el-button>
|
|
||||||
<el-button @click="nextStep" class="guide_btn2" size="mini" type="primary">{{ currentStep == guideStep.length - 1 ? $t('guide.complete') : $t('guide.next') }}</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="margin-right: 10px" slot="reference" :class="{ guide_body: beginStep && currentStep == 7 }">
|
|
||||||
<el-button type="primary" @click="newWork" :disabled="infoData.length == 0 && state == false">
|
|
||||||
{{ $t('index.newWork') }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</el-popover>
|
|
||||||
|
|
||||||
<el-button type="primary" @click="newNetWork" v-if="false">
|
|
||||||
{{ $t('index.newWork') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" @click="openWork()" v-if="true" :disabled="infoData.length == 0 && state == false">
|
|
||||||
{{ $t('admin.openWork') }}
|
|
||||||
</el-button>
|
|
||||||
<!--
|
|
||||||
<el-select v-model="selectLan">
|
|
||||||
<el-option
|
|
||||||
v-for="item in languages"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
>
|
|
||||||
</el-option> </el-select
|
|
||||||
>
|
|
||||||
<el-button icon="el-icon-video-play" @click="start_job">启动任务</el-button>
|
|
||||||
<el-button icon="el-icon-video-pause" @click="suspend_job">暂停任务</el-button>
|
|
||||||
<el-button icon="el-icon-circle-close">停止任务</el-button>-->
|
|
||||||
</div>
|
|
||||||
</el-popover>
|
|
||||||
<div class="user">
|
|
||||||
<span style="margin-right: 20px">{{ $t('admin.hello') }} {{ user }}</span>
|
|
||||||
<router-link to="/admin" v-if="isAdmin">{{ $t('main.adminMange') }}</router-link>
|
|
||||||
<router-link to="/">{{ $t('main.out') }}</router-link>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<el-popover v-if="guideStep" :placement="guideStep[4].placement" width="250" trigger="manual" v-model="guideStep[4].show">
|
|
||||||
<div class="guide_box">
|
|
||||||
<div class="guide_title">
|
|
||||||
{{ $t('guide.title') }}<span>({{ parseInt(currentStep) + 1 }}/{{ guideStep.length }})</span>
|
|
||||||
</div>
|
|
||||||
<div class="guide_desc">{{ $t(`guide.step5`) }}</div>
|
|
||||||
<div class="guide_btns">
|
|
||||||
<el-button @click="exitGuide" class="guide_btn1" size="mini" type="text">{{ $t('guide.skip') }}</el-button>
|
|
||||||
<el-button v-if="parseInt(currentStep) > 0" @click="prevStep" class="guide_btn1" size="mini">{{ $t('guide.prev') }}</el-button>
|
|
||||||
<el-button @click="nextStep" class="guide_btn2" size="mini" type="primary">{{ currentStep == guideStep.length - 1 ? $t('guide.complete') : $t('guide.next') }}</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="brief" slot="reference" :class="{ guide_body: beginStep && currentStep == 4 }">
|
|
||||||
<el-row :gutter="20" style="height: 100%">
|
|
||||||
<el-col :span="12" style="height: 100%">
|
|
||||||
<div class="grid-content bg-purple b_left" style="padding-top: 1px !important; display: flex; align-items: center">
|
|
||||||
<!-- <div class="b_title">{{ $t("main.systemInformation") }}</div> -->
|
|
||||||
<div style="display: flex; flex-direction: column; justify-content: center; align-items: center">
|
|
||||||
<img v-if="os.CardsoonModel" :src="os.CardsoonModel.indexOf(`TH80N`) != -1 ? N80N : N800N" width="150" height="95" />
|
|
||||||
<span style="font-weight: bold; font-size: 18px">{{ $t('main.systemInformation') }}</span>
|
|
||||||
</div>
|
|
||||||
<div style="margin-left: 20px">
|
|
||||||
<div class="item">{{ $t('main.deviceType') }}{{ os.CardsoonModel }}</div>
|
|
||||||
<div class="item">{{ $t('main.serialNumber') }}{{ os.SystemSn }}</div>
|
|
||||||
<div class="item">{{ $t('main.hostName') }}{{ os.hostname }}</div>
|
|
||||||
<div class="item">{{ $t('main.hostIp') }}{{ os.ip }}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12" style="height: 100%">
|
|
||||||
<div class="grid-content bg-purple b_mid" style="padding-top: 1px !important; display: flex; align-items: center">
|
|
||||||
<div style="display: flex; flex-direction: column; justify-content: center; align-items: center">
|
|
||||||
<span style="font-weight: bold; font-size: 18px">{{ $t('main.hardwareConfiguration') }}</span>
|
|
||||||
</div>
|
|
||||||
<div style="margin-left: 20px">
|
|
||||||
<!-- <div class="item">
|
|
||||||
{{ $t("main.hardwareConfiguration") }}
|
|
||||||
</div> -->
|
|
||||||
<div class="item">{{ $t('main.Cpu') }}{{ os.cpu }}</div>
|
|
||||||
<div class="item">{{ $t('main.Memory') }}{{ os.ram }}</div>
|
|
||||||
<div class="item">{{ $t('main.hardDrive') }}{{ os.HD }}</div>
|
|
||||||
<div class="item">
|
|
||||||
{{ $t('main.cacheSpace') }}:{{ os.remainCacheSpace }} /
|
|
||||||
{{ os.totalCacheSpace }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</div>
|
|
||||||
</el-popover>
|
|
||||||
<!-- <div
|
|
||||||
class="brief"
|
|
||||||
v-if="infoData.length != 0 && false"
|
|
||||||
style="margin-top: 20px; height: 200px"
|
|
||||||
>
|
|
||||||
<el-row :gutter="10" style="height: 100%">
|
|
||||||
<el-col :span="6" style="height: 100%">
|
|
||||||
<div
|
|
||||||
class="grid-content bg-purple b_left"
|
|
||||||
style="padding-top: 1px !important"
|
|
||||||
>
|
|
||||||
<div class="b_title">
|
|
||||||
{{ $t("index.systemState") }}
|
|
||||||
</div>
|
|
||||||
<div style="margin-top: 30px">
|
|
||||||
<div class="item">
|
|
||||||
{{ $t("index.wordSpaceOnline")
|
|
||||||
}}{{
|
|
||||||
printerStatus[infoData[printData].PrinterID]
|
|
||||||
? $t(
|
|
||||||
`index.${
|
|
||||||
printerStatus[infoData[printData].PrinterID]
|
|
||||||
}`
|
|
||||||
)
|
|
||||||
: ""
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
{{ $t("index.equipModel")
|
|
||||||
}}{{ infoData[printData].ModeName.replace("Fagoo", "") }}
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
{{ $t("index.series") }}{{ infoData[printData].SerialNo }}
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
{{ $t("index.machineVers")
|
|
||||||
}}{{ infoData[printData].FirewareVersion }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="5" style="height: 100%">
|
|
||||||
<div
|
|
||||||
class="grid-content bg-purple b_left"
|
|
||||||
style="padding-top: 1px !important; border-right: 0"
|
|
||||||
>
|
|
||||||
<div class="b_title"></div>
|
|
||||||
<div style="margin-top: 30px">
|
|
||||||
<div class="item">
|
|
||||||
{{ $t("index.numbers") }}{{ infoData[printData].CardNum }}
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
{{ $t("index.dice")
|
|
||||||
}}{{
|
|
||||||
infoData[printData].DualSide == 1
|
|
||||||
? this.$t("index.twoDice")
|
|
||||||
: this.infoData[printData] != null
|
|
||||||
? this.$t("index.sigleDice")
|
|
||||||
: ""
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
<div class="item">
|
|
||||||
{{ $t("index.ribbonType")
|
|
||||||
}}{{ infoData[printData].RibbonType }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
|
|
||||||
<el-col :span="5" style="height: 100%">
|
|
||||||
<div
|
|
||||||
class="grid-content bg-purple b_mid"
|
|
||||||
style="
|
|
||||||
padding-top: 1px !important;
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<el-progress
|
|
||||||
type="circle"
|
|
||||||
:format="ribbonFormat"
|
|
||||||
:key="printData"
|
|
||||||
width="75"
|
|
||||||
:percentage="
|
|
||||||
infoData[printData].RibbonAmount == undefined ||
|
|
||||||
infoData[printData].RibbonAmount == '0'
|
|
||||||
? 0
|
|
||||||
: (
|
|
||||||
(infoData[printData].RibbonAmount /
|
|
||||||
getRibbonAmount) *
|
|
||||||
100
|
|
||||||
).toFixed(0)
|
|
||||||
"
|
|
||||||
:color="'#67C23A'"
|
|
||||||
></el-progress>
|
|
||||||
|
|
||||||
<div style="margin-left: 20px">
|
|
||||||
<div>{{ $t("index.ribbonNumber") }}</div>
|
|
||||||
<div>
|
|
||||||
{{ infoData[printData].RibbonAmount }}/{{
|
|
||||||
getRibbonAmount
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8" style="height: 100%">
|
|
||||||
<div
|
|
||||||
class="grid-content bg-purple b_mid"
|
|
||||||
style="
|
|
||||||
padding-top: 1px !important;
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<el-progress
|
|
||||||
type="circle"
|
|
||||||
:key="printData"
|
|
||||||
:format="remaCapaFormat"
|
|
||||||
width="75"
|
|
||||||
:percentage="
|
|
||||||
infoData[printData].PrinterRemaCapa == undefined ||
|
|
||||||
infoData[printData].PrinterRemaCapa == '0'
|
|
||||||
? 0
|
|
||||||
: (
|
|
||||||
(infoData[printData].PrinterRemaCapa /
|
|
||||||
getPrinterRemaCapaAmount) *
|
|
||||||
100
|
|
||||||
).toFixed(0)
|
|
||||||
"
|
|
||||||
:color="'#67C23A'"
|
|
||||||
></el-progress>
|
|
||||||
<div style="margin-left: 20px">
|
|
||||||
<div>
|
|
||||||
{{ $t("index.inCardState") }}
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button-group>
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
size="mini"
|
|
||||||
@click="() => printerTypeChange('auto')"
|
|
||||||
>{{ $t("index.autoRefresh") }}</el-button
|
|
||||||
>
|
|
||||||
<el-dropdown @command="handleTypeCommand">
|
|
||||||
<el-button type="primary" size="mini"
|
|
||||||
>{{ $t("index.refreshMore")
|
|
||||||
}}<i class="el-icon-arrow-down el-icon--right"></i
|
|
||||||
></el-button>
|
|
||||||
<el-dropdown-menu slot="dropdown">
|
|
||||||
<el-dropdown-item
|
|
||||||
v-for="item in _PrinterTypeList"
|
|
||||||
:command="item.value"
|
|
||||||
>{{ item.label }}</el-dropdown-item
|
|
||||||
>
|
|
||||||
</el-dropdown-menu>
|
|
||||||
</el-dropdown>
|
|
||||||
</el-button-group>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</div> -->
|
|
||||||
<el-popover v-if="guideStep" :placement="guideStep[5].placement" width="250" trigger="manual" v-model="guideStep[5].show">
|
|
||||||
<div class="guide_box">
|
|
||||||
<div class="guide_title">
|
|
||||||
{{ $t('guide.title') }}<span>({{ parseInt(currentStep) + 1 }}/{{ guideStep.length }})</span>
|
|
||||||
</div>
|
|
||||||
<div class="guide_desc">{{ $t(`guide.step6`) }}</div>
|
|
||||||
<div class="guide_btns">
|
|
||||||
<el-button @click="exitGuide" class="guide_btn1" size="mini" type="text">{{ $t('guide.skip') }}</el-button>
|
|
||||||
<el-button v-if="parseInt(currentStep) > 0" @click="prevStep" class="guide_btn1" size="mini">{{ $t('guide.prev') }}</el-button>
|
|
||||||
<el-button @click="nextStep" class="guide_btn2" size="mini" type="primary">{{ currentStep == guideStep.length - 1 ? $t('guide.complete') : $t('guide.next') }}</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div slot="reference" :class="{ guide_body: beginStep && currentStep == 5 }" class="machines work" style="height: 130px; margin-top: 10px">
|
|
||||||
<el-table :data="infoData" max-height="180" size="mini" style="width: 100%" :empty-text="$t('index.nodata')" row-class-name="rowclass">
|
|
||||||
<el-table-column prop="gzz" :label="$t('main.tableMachine')" min-width="100">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
{{ getPrintName(scope.row.PrinterID, true) }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="status" :label="$t('main.tableState')" min-width="80">
|
|
||||||
<template slot-scope="scope">{{ $t('main.tableOnline') }}</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="SerialNo" :label="$t('main.tableSerialNo')" min-width="80"> </el-table-column>
|
|
||||||
<el-table-column prop="RibbonType" :label="$t('main.tableRibbonType')" min-width="80"> </el-table-column>
|
|
||||||
<el-table-column prop="RibbonAmount" :label="$t('main.tableRibbonAmount')" min-width="100">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-progress
|
|
||||||
:color="customColors"
|
|
||||||
:width="45"
|
|
||||||
define-back-color="#ebeef5"
|
|
||||||
:format="() => scope.row.RibbonAmount"
|
|
||||||
:stroke-width="3"
|
|
||||||
:percentage="
|
|
||||||
scope.row.RibbonAmount == undefined || scope.row.RibbonAmount == '0'
|
|
||||||
? 0
|
|
||||||
: parseFloat(((scope.row.RibbonAmount / getRibbonAmount(scope.row.ModeName, scope.row.RibbonType)) * 100).toFixed(0))
|
|
||||||
"
|
|
||||||
></el-progress>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="PrinterType" :label="$t('main.tablePrinterType')" min-width="100">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-dropdown trigger="click" @command="(e) => handleMachineCommand(e, scope.row.PrinterID)">
|
|
||||||
<span class="el-dropdown-link" style="color: #000; font-size: 12px"> {{ scope.row.PrinterType }}<i class="el-icon-arrow-down el-icon--right"></i> </span>
|
|
||||||
<el-dropdown-menu slot="dropdown">
|
|
||||||
<el-dropdown-item command="auto">
|
|
||||||
<span style="color: #000; font-size: 12px">{{ $t('main.autoSetting') }}</span>
|
|
||||||
</el-dropdown-item>
|
|
||||||
<el-dropdown-item command="null">
|
|
||||||
<span style="color: #000; font-size: 12px">{{ $t('main.cancelSetting') }}</span>
|
|
||||||
</el-dropdown-item>
|
|
||||||
<el-dropdown-item v-for="item in _PrinterTypeList" :key="item.value" :command="item.value">
|
|
||||||
<span style="color: #000; font-size: 12px">{{ item.label }}</span>
|
|
||||||
</el-dropdown-item>
|
|
||||||
</el-dropdown-menu>
|
|
||||||
</el-dropdown>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="PrinterRemaCapa" :label="$t('main.tablePrinterRemaCapa')" min-width="100">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-progress
|
|
||||||
:color="customColors"
|
|
||||||
:width="45"
|
|
||||||
define-back-color="#ebeef5"
|
|
||||||
:format="() => (scope.row.PrinterRemaCapa > 0 ? scope.row.PrinterRemaCapa : 0)"
|
|
||||||
:stroke-width="3"
|
|
||||||
:percentage="
|
|
||||||
scope.row.PrinterRemaCapa == undefined || scope.row.PrinterRemaCapa == '0'
|
|
||||||
? 0
|
|
||||||
: parseFloat((((scope.row.PrinterRemaCapa > 0 ? scope.row.PrinterRemaCapa : 0) / getPrinterRemaCapaAmount(scope.row.ModeName)) * 100).toFixed(0))
|
|
||||||
"
|
|
||||||
></el-progress>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
</div>
|
|
||||||
</el-popover>
|
|
||||||
<el-popover v-if="guideStep" :placement="guideStep[6].placement" width="250" trigger="manual" v-model="guideStep[6].show">
|
|
||||||
<div class="guide_box">
|
|
||||||
<div class="guide_title">
|
|
||||||
{{ $t('guide.title') }}<span>({{ parseInt(currentStep) + 1 }}/{{ guideStep.length }})</span>
|
|
||||||
</div>
|
|
||||||
<div class="guide_desc">{{ $t(`guide.step7`) }}</div>
|
|
||||||
<div class="guide_btns">
|
|
||||||
<el-button @click="exitGuide" class="guide_btn1" size="mini" type="text">{{ $t('guide.skip') }}</el-button>
|
|
||||||
<el-button v-if="parseInt(currentStep) > 0" @click="prevStep" class="guide_btn1" size="mini">{{ $t('guide.prev') }}</el-button>
|
|
||||||
<el-button @click="nextStep" class="guide_btn2" size="mini" type="primary">{{ currentStep == guideStep.length - 1 ? $t('guide.complete') : $t('guide.next') }}</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div slot="reference" :class="{ guide_body: beginStep && currentStep == 6 }">
|
|
||||||
<el-tabs v-model="activeName" style="background-color: #fff; padding-bottom: 20px; max-height: 240px; margin-top: 10px 20px">
|
|
||||||
<el-tab-pane :label="$t(`index.workList`)" name="first">
|
|
||||||
<div class="work">
|
|
||||||
<el-table :data="tasks" max-height="180" style="width: 100%" size="mini" :empty-text="$t('index.nodata')" row-class-name="rowclass">
|
|
||||||
<el-table-column label="#" min-width="38">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
{{ scope.$index + 1 }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="jId" :label="$t('index.wordID')" min-width="130"> </el-table-column>
|
|
||||||
<el-table-column prop="DataSource" :label="$t('index.wordOrigin')" min-width="85"> </el-table-column>
|
|
||||||
<el-table-column :label="$t('index.wordSpace')" min-width="60">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
{{ getPrintName(scope.row.PrinterID, true) }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column :label="$t('main.USBType')" min-width="90">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
{{ scope.row.PrinterType }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column min-width="80" prop="TaskCapacity" :label="$t('main.TaskCapacity')"> </el-table-column>
|
|
||||||
<el-table-column v-if="false" prop="DataDir" :label="$t('main.taskFile')"> </el-table-column>
|
|
||||||
<el-table-column prop="CreateTime" :label="$t('index.createTime')" min-width="120"> </el-table-column>
|
|
||||||
<el-table-column
|
|
||||||
v-if="false"
|
|
||||||
prop="usb_version"
|
|
||||||
:label="$t('main.USBVersion')"
|
|
||||||
:filters="[
|
|
||||||
{ text: '2.0', value: 2 },
|
|
||||||
{ text: '3.0', value: 3 }
|
|
||||||
]"
|
|
||||||
:filter-method="filterHandler"
|
|
||||||
>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="FinishTime" :label="$t('index.finishedTime')" min-width="120"> </el-table-column>
|
|
||||||
<el-table-column prop="JobCompletion" min-width="60" :label="$t('index.finishedNumber')"> </el-table-column>
|
|
||||||
<el-table-column :label="$t('index.state')" prop="JobStatus" width="110">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-dropdown trigger="click" @command="(e) => handleTaskCommand(e, scope.row.JobID)" :disabled="scope.row.JobStatus != 'Fail'">
|
|
||||||
<span class="el-dropdown-link" style="color: #000; font-size: 12px">
|
|
||||||
{{ jobState(scope.row.JobStatus) }}
|
|
||||||
<i class="el-icon-arrow-down el-icon--right" v-if="scope.row.JobStatus == 'Fail'"></i>
|
|
||||||
</span>
|
|
||||||
<el-dropdown-menu slot="dropdown">
|
|
||||||
<el-dropdown-item command="refresh">
|
|
||||||
<span style="color: #000; font-size: 12px">{{ $t('main.commandRefresh') }}</span>
|
|
||||||
</el-dropdown-item>
|
|
||||||
<el-dropdown-item command="delete">
|
|
||||||
<span style="color: #000; font-size: 12px">{{ $t('main.commandDelete') }}</span>
|
|
||||||
</el-dropdown-item>
|
|
||||||
</el-dropdown-menu>
|
|
||||||
</el-dropdown>
|
|
||||||
<el-progress
|
|
||||||
:color="customColors"
|
|
||||||
:width="45"
|
|
||||||
define-back-color="#ebeef5"
|
|
||||||
:stroke-width="3"
|
|
||||||
:percentage="parseFloat(scope.row.TaskPercentage.replace(`%`, ``))"
|
|
||||||
v-if="scope.row.JobStatus == `Copying`"
|
|
||||||
></el-progress>
|
|
||||||
<!-- <el-button
|
|
||||||
style="margin-left: 5px; height: 30px; width: 30px"
|
|
||||||
icon="el-icon-refresh"
|
|
||||||
circle
|
|
||||||
v-if="scope.row.JobStatus == 'Fail'"
|
|
||||||
@click="restart_job(scope.$index)"
|
|
||||||
type="primary"
|
|
||||||
size="mini"
|
|
||||||
>
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
style="margin-left: 5px; height: 30px; width: 30px"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
circle
|
|
||||||
v-if="scope.row.JobStatus == 'Fail'"
|
|
||||||
@click="remove_job(scope.$index)"
|
|
||||||
type="danger"
|
|
||||||
size="mini"
|
|
||||||
>
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
style="margin-left: 5px; height: 30px; width: 30px"
|
|
||||||
icon="el-icon-video-pause"
|
|
||||||
circle
|
|
||||||
v-else-if="scope.row.JobStatus == 'Printing'"
|
|
||||||
@click="suspend_job(scope.$index)"
|
|
||||||
type="primary"
|
|
||||||
size="mini"
|
|
||||||
>
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
style="margin-left: 5px; height: 30px; width: 30px"
|
|
||||||
icon="el-icon-video-play"
|
|
||||||
circle
|
|
||||||
v-else-if="scope.row.JobStatus == '暂停'"
|
|
||||||
@click="start_job(scope.$index)"
|
|
||||||
type="primary"
|
|
||||||
>
|
|
||||||
</el-button> -->
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<!--<el-table-column prop="process" label="进度">
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column
|
|
||||||
prop="info"
|
|
||||||
label="信息">
|
|
||||||
</el-table-column>-->
|
|
||||||
</el-table>
|
|
||||||
</div>
|
|
||||||
</el-tab-pane>
|
|
||||||
<el-tab-pane :label="$t(`index.curLog`)" name="second">
|
|
||||||
<div class="work">
|
|
||||||
<div class="w_title">
|
|
||||||
<div class="w_right">
|
|
||||||
<el-button type="text" icon="el-icon-document-copy" v-if="isAdmin" @click="getWLogData()">
|
|
||||||
{{ $t('index.openHistoryLog') }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="c_log" v-html="log"></div></div
|
|
||||||
></el-tab-pane>
|
|
||||||
</el-tabs>
|
|
||||||
</div>
|
|
||||||
</el-popover>
|
|
||||||
<s-footer></s-footer>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div :span="3" style="height: 100%; width: 164px">
|
<div class="flex_box flex_row_center top_btn2">
|
||||||
<div class="grid-content bg-purple right" style="overflow: hidden">
|
<img src="@/assets/images/Setting_icon.png" />
|
||||||
<el-popover v-if="guideStep" :placement="guideStep[3].placement" width="250" trigger="manual" v-model="guideStep[3].show">
|
<div>系统设置</div>
|
||||||
<div class="guide_box">
|
|
||||||
<div class="guide_title">
|
|
||||||
{{ $t('guide.title') }}<span>({{ parseInt(currentStep) + 1 }}/{{ guideStep.length }})</span>
|
|
||||||
</div>
|
|
||||||
<div class="guide_desc">{{ $t(`guide.step4`) }}</div>
|
|
||||||
<div class="guide_btns">
|
|
||||||
<el-button @click="exitGuide" class="guide_btn1" size="mini" type="text">{{ $t('guide.skip') }}</el-button>
|
|
||||||
<el-button v-if="parseInt(currentStep) > 0" @click="prevStep" class="guide_btn1" size="mini">{{ $t('guide.prev') }}</el-button>
|
|
||||||
<el-button @click="nextStep" class="guide_btn2" size="mini" type="primary">{{ currentStep == guideStep.length - 1 ? $t('guide.complete') : $t('guide.next') }}</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="title" slot="reference" :class="{ guide_body: beginStep && currentStep == 3 }">
|
|
||||||
{{ $t('index.notice') }}
|
|
||||||
<!--<div class="log" v-for="(item, index) of infoData.sysLogs">
|
|
||||||
{{ item }}
|
|
||||||
</div>-->
|
|
||||||
</div>
|
|
||||||
</el-popover>
|
|
||||||
|
|
||||||
<warnCard v-for="item of errList" :data="item" @ok="okWarning" v-if="item.show" />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="top_left_line"></div>
|
||||||
|
<el-switch
|
||||||
|
class="top_left_status"
|
||||||
|
v-model="workStatus"
|
||||||
|
active-color="#07C160"
|
||||||
|
inactive-color="#aaa">
|
||||||
|
</el-switch>
|
||||||
|
<div class="flex_box top_left_option">
|
||||||
|
<div class="top_left_text">完成拷贝数:</div>
|
||||||
|
<div class="top_left_num">9</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex_box top_left_option">
|
||||||
|
<div class="top_left_text">废弃拷贝数:</div>
|
||||||
|
<div class="top_left_num top_left_num1">2</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex_box top_left_option">
|
||||||
|
<div class="top_left_text">错误:</div>
|
||||||
|
<div class="top_left_num">0</div>
|
||||||
|
</div>
|
||||||
|
<div class="top_left_line"></div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="dialogVisible">
|
<div @click="goOut" class="flex_box top_right">
|
||||||
<el-dialog :visible.sync="dialogVisible" width="1200px" :destroy-on-close="true" :close-on-click-modal="false" :title="$t('index.newWork')">
|
<div class="top_right_name">你好,admin</div>
|
||||||
<work
|
<div class="top_right_btn">登出</div>
|
||||||
:dice="DualSide == 1 ? 2 : 1"
|
|
||||||
@jobPost="closeWork"
|
|
||||||
@addError="addError"
|
|
||||||
:isNew="isNew"
|
|
||||||
:saveWorkList="saveWorkList"
|
|
||||||
:printerList="infoData"
|
|
||||||
:shareDisk="shareDisk"
|
|
||||||
:isCopy="isLocal"
|
|
||||||
:filterPassedType="filterPassedType"
|
|
||||||
:sizeType="_PrinterTypeList"
|
|
||||||
>
|
|
||||||
</work>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
</div>
|
||||||
<div v-if="dialogNetVisible">
|
</div>
|
||||||
<el-dialog :visible.sync="dialogNetVisible" width="1200px" :destroy-on-close="true" :close-on-click-modal="false" :title="$t('index.newWork')">
|
|
||||||
<worknet :dice="DualSide == 1 ? 2 : 1" @jobPost="closeNetWork" :printerList="infoData"> </worknet>
|
<div class="device_box">
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
<el-dialog :title="$t('index.entireLog')" :visible.sync="dialogWholeLog">
|
|
||||||
<div class="wLog" v-html="wlog" style="text-align: left"></div>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
<!-- 开始用户引导 -->
|
|
||||||
<el-dialog class="guide_dialog" top="30vh" :show-close="false" title="温馨提示" :visible.sync="showStep" width="350px" :close-on-click-modal="false">
|
|
||||||
<div class="start_box">
|
|
||||||
<div class="start_content">欢迎使用卡树自动拷贝打印系统,我们将引导您使用本系统,请您耐心接受引导</div>
|
|
||||||
<div class="start_hide">
|
|
||||||
<el-checkbox v-model="hideStep">我已熟悉系统,不再显示引导</el-checkbox>
|
|
||||||
</div>
|
|
||||||
<div class="start_btn">
|
|
||||||
<el-button @click="startStep" type="primary">开始引导</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -641,22 +52,114 @@ import { mapGetters } from 'vuex'
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'dashboard',
|
name: 'dashboard',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
workStatus: true
|
||||||
|
}
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters(['name', 'roles'])
|
...mapGetters(['name', 'roles'])
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
goOut() {
|
||||||
|
this.$store.dispatch('FedLogOut').then(() => {
|
||||||
|
location.reload()// In order to re-instantiate the vue-router object to avoid bugs
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||||
.dashboard-container {
|
.container_box {
|
||||||
position: fixed;
|
min-height: 100vh;
|
||||||
height: 100%;
|
background-color: #F8F8F8;
|
||||||
width: 100%;
|
.top_box {
|
||||||
.login_bg {
|
height: 90px;
|
||||||
position: absolute;
|
padding: 0 48px;
|
||||||
width: 100%;
|
background-color: #ffffff;
|
||||||
height: 100%;
|
.top_left {
|
||||||
z-index: 1;
|
.top_btn1 {
|
||||||
|
padding: 0 24px;
|
||||||
|
height: 45px;
|
||||||
|
background: #00C325;
|
||||||
|
border-radius: 6px;
|
||||||
|
margin-right: 24px;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 21px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
img {
|
||||||
|
width: 27px;
|
||||||
|
height: 27px;
|
||||||
|
margin-right: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.top_btn2 {
|
||||||
|
padding: 0 24px;
|
||||||
|
height: 45px;
|
||||||
|
background: rgba(0,195,37,0.12);
|
||||||
|
border: 2px solid rgba(0,195,37,0.32);
|
||||||
|
border-radius: 6px;
|
||||||
|
margin-right: 24px;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 21px;
|
||||||
|
color: #00C325;
|
||||||
|
img {
|
||||||
|
width: 27px;
|
||||||
|
height: 27px;
|
||||||
|
margin-right: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.top_left_line {
|
||||||
|
width: 2px;
|
||||||
|
height: 45px;
|
||||||
|
background: #E0E0E0;
|
||||||
|
margin: 0 24px;
|
||||||
|
}
|
||||||
|
.top_left_status {
|
||||||
|
padding: 0 24px;
|
||||||
|
transform: scale(1.6);
|
||||||
|
}
|
||||||
|
.top_left_option {
|
||||||
|
margin-left: 24px;
|
||||||
|
.top_left_text {
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 21px;
|
||||||
|
color: #000000;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.top_left_num {
|
||||||
|
padding: 0 14px;
|
||||||
|
height: 36px;
|
||||||
|
background: #00C325;
|
||||||
|
border-radius: 6px;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 21px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
line-height: 36px;
|
||||||
|
margin-left: 12px;
|
||||||
|
}
|
||||||
|
.top_left_num1 {
|
||||||
|
background: #B8B8B8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.top_right {
|
||||||
|
.top_right_name {
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 21px;
|
||||||
|
color: #000000;
|
||||||
|
padding: 0 24px;
|
||||||
|
}
|
||||||
|
.top_right_btn {
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 21px;
|
||||||
|
color: #00C325;
|
||||||
|
line-height: 50px;
|
||||||
|
padding-left: 24px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { validUsername } from '@/utils/validate'
|
import { validUsername } from '@/utils/validate'
|
||||||
|
import { getToken, setToken, removeToken } from '@/utils/auth'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'login',
|
name: 'login',
|
||||||
@@ -78,12 +79,18 @@ export default {
|
|||||||
this.$refs.loginForm.validate(valid => {
|
this.$refs.loginForm.validate(valid => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
this.$store.dispatch('Login', this.loginForm).then(() => {
|
setToken('data.token')
|
||||||
|
this.$store.commit('SET_TOKEN', 'data.token')
|
||||||
|
setTimeout(() => {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
this.$router.push({ path: '/' })
|
this.$router.push({ path: '/' })
|
||||||
}).catch(() => {
|
}, 2000);
|
||||||
this.loading = false
|
// this.$store.dispatch('Login', this.loginForm).then(() => {
|
||||||
})
|
// this.loading = false
|
||||||
|
// this.$router.push({ path: '/' })
|
||||||
|
// }).catch(() => {
|
||||||
|
// this.loading = false
|
||||||
|
// })
|
||||||
} else {
|
} else {
|
||||||
console.log('error submit!!')
|
console.log('error submit!!')
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -766,6 +766,18 @@ atob@^2.1.2:
|
|||||||
resolved "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
|
resolved "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
|
||||||
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
|
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
|
||||||
|
|
||||||
|
autoprefixer@^10.4.20:
|
||||||
|
version "10.4.20"
|
||||||
|
resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b"
|
||||||
|
integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==
|
||||||
|
dependencies:
|
||||||
|
browserslist "^4.23.3"
|
||||||
|
caniuse-lite "^1.0.30001646"
|
||||||
|
fraction.js "^4.3.7"
|
||||||
|
normalize-range "^0.1.2"
|
||||||
|
picocolors "^1.0.1"
|
||||||
|
postcss-value-parser "^4.2.0"
|
||||||
|
|
||||||
autoprefixer@^6.3.1:
|
autoprefixer@^6.3.1:
|
||||||
version "6.7.7"
|
version "6.7.7"
|
||||||
resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
|
resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
|
||||||
@@ -1994,6 +2006,16 @@ browserslist@^3.2.6:
|
|||||||
caniuse-lite "^1.0.30000844"
|
caniuse-lite "^1.0.30000844"
|
||||||
electron-to-chromium "^1.3.47"
|
electron-to-chromium "^1.3.47"
|
||||||
|
|
||||||
|
browserslist@^4.23.3:
|
||||||
|
version "4.24.2"
|
||||||
|
resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580"
|
||||||
|
integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==
|
||||||
|
dependencies:
|
||||||
|
caniuse-lite "^1.0.30001669"
|
||||||
|
electron-to-chromium "^1.5.41"
|
||||||
|
node-releases "^2.0.18"
|
||||||
|
update-browserslist-db "^1.1.1"
|
||||||
|
|
||||||
buffer-alloc-unsafe@^1.1.0:
|
buffer-alloc-unsafe@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.npmmirror.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
resolved "https://registry.npmmirror.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
||||||
@@ -2235,6 +2257,11 @@ caniuse-lite@^1.0.30000844:
|
|||||||
resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001675.tgz#0c1f01fc9cc543b61839753a4c234f995588d1b9"
|
resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001675.tgz#0c1f01fc9cc543b61839753a4c234f995588d1b9"
|
||||||
integrity sha512-/wV1bQwPrkLiQMjaJF5yUMVM/VdRPOCU8QZ+PmG6uW6DvYSrNY1bpwHI/3mOcUosLaJCzYDi5o91IQB51ft6cg==
|
integrity sha512-/wV1bQwPrkLiQMjaJF5yUMVM/VdRPOCU8QZ+PmG6uW6DvYSrNY1bpwHI/3mOcUosLaJCzYDi5o91IQB51ft6cg==
|
||||||
|
|
||||||
|
caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669:
|
||||||
|
version "1.0.30001677"
|
||||||
|
resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz#27c2e2c637e007cfa864a16f7dfe7cde66b38b5f"
|
||||||
|
integrity sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==
|
||||||
|
|
||||||
caseless@~0.12.0:
|
caseless@~0.12.0:
|
||||||
version "0.12.0"
|
version "0.12.0"
|
||||||
resolved "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
resolved "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
||||||
@@ -3549,6 +3576,11 @@ electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47:
|
|||||||
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz#9358f514ab6eeed809a8689f4b39ea5114ae729c"
|
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz#9358f514ab6eeed809a8689f4b39ea5114ae729c"
|
||||||
integrity sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==
|
integrity sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==
|
||||||
|
|
||||||
|
electron-to-chromium@^1.5.41:
|
||||||
|
version "1.5.51"
|
||||||
|
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.51.tgz#bb99216fed4892d131a8585a8593b00739310163"
|
||||||
|
integrity sha512-kKeWV57KSS8jH4alKt/jKnvHPmJgBxXzGUSbMd4eQF+iOsVPl7bz2KUmu6eo80eMP8wVioTfTyTzdMgM15WXNg==
|
||||||
|
|
||||||
electron@^2.0.4:
|
electron@^2.0.4:
|
||||||
version "2.0.18"
|
version "2.0.18"
|
||||||
resolved "https://registry.npmmirror.com/electron/-/electron-2.0.18.tgz#52f1b248c3cc013b5a870094de3b6ba5de313a0f"
|
resolved "https://registry.npmmirror.com/electron/-/electron-2.0.18.tgz#52f1b248c3cc013b5a870094de3b6ba5de313a0f"
|
||||||
@@ -3770,6 +3802,11 @@ es6-templates@^0.2.2:
|
|||||||
recast "~0.11.12"
|
recast "~0.11.12"
|
||||||
through "~2.3.6"
|
through "~2.3.6"
|
||||||
|
|
||||||
|
escalade@^3.2.0:
|
||||||
|
version "3.2.0"
|
||||||
|
resolved "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
|
||||||
|
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
|
||||||
|
|
||||||
escape-html@~1.0.3:
|
escape-html@~1.0.3:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
|
resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
|
||||||
@@ -4344,6 +4381,11 @@ forwarded@0.2.0:
|
|||||||
resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
|
resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
|
||||||
integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
|
integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
|
||||||
|
|
||||||
|
fraction.js@^4.3.7:
|
||||||
|
version "4.3.7"
|
||||||
|
resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
|
||||||
|
integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
|
||||||
|
|
||||||
fragment-cache@^0.2.1:
|
fragment-cache@^0.2.1:
|
||||||
version "0.2.1"
|
version "0.2.1"
|
||||||
resolved "https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
|
resolved "https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
|
||||||
@@ -6533,6 +6575,11 @@ node-loader@^0.6.0:
|
|||||||
resolved "https://registry.npmmirror.com/node-loader/-/node-loader-0.6.0.tgz#c797ef51095ed5859902b157f6384f6361e05ae8"
|
resolved "https://registry.npmmirror.com/node-loader/-/node-loader-0.6.0.tgz#c797ef51095ed5859902b157f6384f6361e05ae8"
|
||||||
integrity sha512-WlUacqHqHWb383Mec656pJmAtg7EXBcijg1sovgy0tI4xevAzv8RqcRARTMlzm0HLXzy1Pdo/DMU19/fxoMnmA==
|
integrity sha512-WlUacqHqHWb383Mec656pJmAtg7EXBcijg1sovgy0tI4xevAzv8RqcRARTMlzm0HLXzy1Pdo/DMU19/fxoMnmA==
|
||||||
|
|
||||||
|
node-releases@^2.0.18:
|
||||||
|
version "2.0.18"
|
||||||
|
resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f"
|
||||||
|
integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
|
||||||
|
|
||||||
node-sass@^4.9.2:
|
node-sass@^4.9.2:
|
||||||
version "4.14.1"
|
version "4.14.1"
|
||||||
resolved "https://registry.npmmirror.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5"
|
resolved "https://registry.npmmirror.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5"
|
||||||
@@ -6667,7 +6714,7 @@ oauth-sign@~0.9.0:
|
|||||||
resolved "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
resolved "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
||||||
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
|
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
|
||||||
|
|
||||||
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
|
object-assign@>=4.0.1, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||||
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
|
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
|
||||||
@@ -7060,7 +7107,7 @@ picocolors@^0.2.1:
|
|||||||
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
|
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
|
||||||
integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
|
integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
|
||||||
|
|
||||||
picocolors@^1.1.0:
|
picocolors@^1.0.1, picocolors@^1.1.0:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
||||||
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
|
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
|
||||||
@@ -7352,6 +7399,14 @@ postcss-ordered-values@^2.1.0:
|
|||||||
postcss "^5.0.4"
|
postcss "^5.0.4"
|
||||||
postcss-value-parser "^3.0.1"
|
postcss-value-parser "^3.0.1"
|
||||||
|
|
||||||
|
postcss-px-to-viewport@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.npmmirror.com/postcss-px-to-viewport/-/postcss-px-to-viewport-1.1.1.tgz#a25ca410b553c9892cc8b525cc710da47bf1aa55"
|
||||||
|
integrity sha512-2x9oGnBms+e0cYtBJOZdlwrFg/mLR4P1g2IFu7jYKvnqnH/HLhoKyareW2Q/x4sg0BgklHlP1qeWo2oCyPm8FQ==
|
||||||
|
dependencies:
|
||||||
|
object-assign ">=4.0.1"
|
||||||
|
postcss ">=5.0.2"
|
||||||
|
|
||||||
postcss-reduce-idents@^2.2.2:
|
postcss-reduce-idents@^2.2.2:
|
||||||
version "2.4.0"
|
version "2.4.0"
|
||||||
resolved "https://registry.npmmirror.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
|
resolved "https://registry.npmmirror.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
|
||||||
@@ -7417,6 +7472,11 @@ postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^
|
|||||||
resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
|
resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
|
||||||
integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
|
integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
|
||||||
|
|
||||||
|
postcss-value-parser@^4.2.0:
|
||||||
|
version "4.2.0"
|
||||||
|
resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
|
||||||
|
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
|
||||||
|
|
||||||
postcss-zindex@^2.0.1:
|
postcss-zindex@^2.0.1:
|
||||||
version "2.2.0"
|
version "2.2.0"
|
||||||
resolved "https://registry.npmmirror.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
|
resolved "https://registry.npmmirror.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
|
||||||
@@ -7426,6 +7486,15 @@ postcss-zindex@^2.0.1:
|
|||||||
postcss "^5.0.4"
|
postcss "^5.0.4"
|
||||||
uniqs "^2.0.0"
|
uniqs "^2.0.0"
|
||||||
|
|
||||||
|
postcss@>=5.0.2, postcss@^8.4.14:
|
||||||
|
version "8.4.47"
|
||||||
|
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365"
|
||||||
|
integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==
|
||||||
|
dependencies:
|
||||||
|
nanoid "^3.3.7"
|
||||||
|
picocolors "^1.1.0"
|
||||||
|
source-map-js "^1.2.1"
|
||||||
|
|
||||||
postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16:
|
postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16:
|
||||||
version "5.2.18"
|
version "5.2.18"
|
||||||
resolved "https://registry.npmmirror.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
|
resolved "https://registry.npmmirror.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
|
||||||
@@ -7453,15 +7522,6 @@ postcss@^7.0.36:
|
|||||||
picocolors "^0.2.1"
|
picocolors "^0.2.1"
|
||||||
source-map "^0.6.1"
|
source-map "^0.6.1"
|
||||||
|
|
||||||
postcss@^8.4.14:
|
|
||||||
version "8.4.47"
|
|
||||||
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365"
|
|
||||||
integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==
|
|
||||||
dependencies:
|
|
||||||
nanoid "^3.3.7"
|
|
||||||
picocolors "^1.1.0"
|
|
||||||
source-map-js "^1.2.1"
|
|
||||||
|
|
||||||
prelude-ls@~1.1.2:
|
prelude-ls@~1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
||||||
@@ -9316,6 +9376,14 @@ upath@^1.1.1:
|
|||||||
resolved "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
|
resolved "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
|
||||||
integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
|
integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
|
||||||
|
|
||||||
|
update-browserslist-db@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5"
|
||||||
|
integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==
|
||||||
|
dependencies:
|
||||||
|
escalade "^3.2.0"
|
||||||
|
picocolors "^1.1.0"
|
||||||
|
|
||||||
update-notifier@^3.0.0:
|
update-notifier@^3.0.0:
|
||||||
version "3.0.1"
|
version "3.0.1"
|
||||||
resolved "https://registry.npmmirror.com/update-notifier/-/update-notifier-3.0.1.tgz#78ecb68b915e2fd1be9f767f6e298ce87b736250"
|
resolved "https://registry.npmmirror.com/update-notifier/-/update-notifier-3.0.1.tgz#78ecb68b915e2fd1be9f767f6e298ce87b736250"
|
||||||
|
|||||||