.env.development | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/assets/404_images/login-bg.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/assets/404_images/login-form-bg.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/experiment/checkTheReport/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/layout/components/Navbar.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/router/index.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/store/modules/user.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/chart/work/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/experiment/checkTheReport/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/laboratory/measure/Add.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/laboratory/measure/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/laboratory/role/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/login/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
.env.development
@@ -2,4 +2,4 @@ ENV = 'development' # base api VUE_APP_BASE_API = 'http://localhost:1234/' VUE_APP_BASE_API = 'http://192.168.110.107:1234/' src/assets/404_images/login-bg.png
src/assets/404_images/login-form-bg.png
src/components/experiment/checkTheReport/index.vue
@@ -40,13 +40,15 @@ <td>检测结果</td> <td>单项判断</td> </tr> <tr v-for="(item,index) in reportData.products" :key="item"> <tr v-for="(item,index) in arr" :key="index"> <td>{{index+1}}</td> <td>{{item.ipName}}</td> <td>{{item.unit}}</td> <td>{{item.required}}</td> <td>{{item.testValue}}</td> <td>{{item.testState === 1 ? "√" : "X"}}</td> <td > {{isIfState(item.testState) }} </td> </tr> <tr> <td colspan="6">检验结论:{{reportData.type == 1 ? "合格" : "不合格"}}</td> @@ -74,7 +76,24 @@ data() { return { logoSrc : require("@/assets/404_images/logo.png"), now: new Date().toLocaleDateString() now: new Date().toLocaleDateString(), arr: [] } }, mounted(){ this.arr = this.reportData.products; if(this.reportData.products.length < 10){ let size = this.reportData.products.length; let num=10-size for(let i=0;i< num;i++){ this.arr.push({ code: null, ipName: "", required: "", testState: null, testValue: "", unit: ""}) } } }, methods:{ @@ -84,6 +103,11 @@ let month = (dt.getMonth() + 1).toString().padStart(2,'0'); let date = dt.getDate().toString().padStart(2,'0'); return `${year}-${month}-${date}`; }, isIfState(val){ if(val===1)return "√" else if(val===null || val=== undefined) return null else return "X" } }, props:["reportData"] @@ -117,7 +141,7 @@ border: 2px solid black; } tr,td,th{ padding: 10px 10px; padding: 15px 10px; } .date-group{ width: 90%; @@ -135,7 +159,7 @@ margin-left: 5%; color: lightgray; text-align: center; margin-top: 250px; margin-top: 300px; } } } src/layout/components/Navbar.vue
@@ -7,18 +7,18 @@ <div class="right-menu"> <div class="right-serves"> <!-- <i class="el-icon-setting" /> --> <p @click="toMessage"><el-badge is-dot class="el-icon-bell message-icon"></el-badge></p> <!-- <i class="el-icon-time" /> --> </div> <el-dropdown class="avatar-container" trigger="click"> <div class="avatar-wrapper"> <a class="user-avatar">{{ user.name.slice(0,1) }}</a> <a class="user-avatar">{{ user.name.slice(0, 1) }}</a> </div> <el-dropdown-menu slot="dropdown" class="user-dropdown"> <el-dropdown-item > <p @click="dialogFormVisible = true">修改密码</p> </el-dropdown-item> <el-dropdown-item> <p @click="dialogFormVisible = true">修改密码</p> </el-dropdown-item> <el-dropdown-item divided @click.native="logout"> <span style="display:block;">退出登录</span> </el-dropdown-item> @@ -49,15 +49,15 @@ import { mapGetters } from 'vuex' // import Breadcrumb from '@/components/Breadcrumb' // import Hamburger from '@/components/Hamburger' import { get, post, wpost, postFile } from "@/api/util/requestUtil.js" import { get, post, wpost, postFile } from "@/api/util/requestUtil.js" export default { data(){ data() { return { form: { oldPwd: '', @@ -65,15 +65,15 @@ confirmPwd: '' }, user: { id: null, name: 'value' }, id: null, name: 'value' }, dialogFormVisible: false, formLabelWidth: '120px', user: { id: null, name: 'value' } user: { id: null, name: 'value' } } }, components: { @@ -86,20 +86,20 @@ 'avatar' ]) }, mounted() { this.getUser() }, mounted() { this.getUser() }, methods: { reset(){ reset() { this.dialogFormVisible = false; this.form.oldPwd = ''; this.form.newPwd = ''; this.form.confirmPwd = ''; }, toMessage(){ toMessage() { this.$router.push('/message/toDo'); }, editPwd(){ editPwd() { console.log(1); }, toggleSideBar() { @@ -108,16 +108,18 @@ async logout() { // await this.$store.dispatch('user/logout') sessionStorage.removeItem("user") localStorage.removeItem("autoenter"); this.$router.push(`/login?redirect=${this.$route.fullPath}`) this.$router.replace({path: '/login'}); location.reload(); }, getUser(){ get(this.$url.info).then(res=>{ this.user = res.data sessionStorage.setItem("user",JSON.stringify(res.data)) }) } getUser() { get(this.$url.info).then(res => { this.user = res.data sessionStorage.setItem("user", JSON.stringify(res.data)) }) } } } </script> @@ -130,21 +132,24 @@ background: #fff; display: flex; border-bottom: 1px solid #f0f2f5; // box-shadow: 0 0 0.857143rem rgba(0, 0, 0, 0.12); // box-shadow: 0 1px 4px rgba(0,21,41,.08); .message-icon{ .message-icon { margin-right: 10px; cursor: pointer; } .v-modal{ .v-modal { z-index: 8; } .hamburger-container { line-height: 46px; height: 100%; cursor: pointer; transition: background .3s; -webkit-tap-highlight-color:transparent; -webkit-tap-highlight-color: transparent; &:hover { background: rgba(0, 0, 0, .025) @@ -161,11 +166,13 @@ line-height: 50px; display: flex; justify-content: right; .right-serves{ .right-serves { height: 100%; display: flex; align-items: center; >i{ >i { display: inline-block; margin: auto 10px; font-size: 20px; @@ -198,6 +205,7 @@ .avatar-container { margin-right: 24px; height: 100%; .avatar-wrapper { // margin-top: 5px; width: 40px; @@ -206,6 +214,7 @@ display: flex; align-items: center; justify-content: center; .user-avatar { cursor: pointer; width: 30px; @@ -229,5 +238,4 @@ } } } } </style> }</style> src/router/index.js
@@ -528,7 +528,7 @@ function createRouter(Routees) { if (JSON.parse(sessionStorage.getItem("user")) != undefined && JSON.parse(sessionStorage.getItem("user")) != null) { let sessionLayerId=JSON.parse(sessionStorage.getItem("user")).sessionLayerId if(sessionLayerId!='c3284d0f94606de1fd2af172aba15bf3'){ if(sessionLayerId!='f5c8bcb7d5a0fd27e2323280f7e98cad'){ let role = JSON.parse(sessionStorage.getItem("user")).role let menuFather = baseRouter const dataMenuFather = fn3(menuFather) src/store/modules/user.js
@@ -42,7 +42,7 @@ commit('SET_REFRESH', data.refresh) setToken(data.token) setRefresh(data.refresh) resolve() resolve(response) }).catch(error => { reject(error) }) src/views/chart/work/index.vue
@@ -90,23 +90,34 @@ }, } }, mounted(){}, mounted(){ this.queryData(); }, methods: { async queryData(){ let date = this.formInline.date; let date = []; let type; if(this.formInline.date == null || this.formInline.date == ""){ let currentDate = new Date(); let year = currentDate.getFullYear(); let month = currentDate.getMonth() + 1; let day = currentDate.getDate(); date.push(year +"-" + month + "-01"); date.push(year +"-" + month + "-" + day); type = 0; }else{ date = this.formInline.date; type = this.formInline.type; } let obj = { startTime : date[0], endTime : date[1], type : this.formInline.type type : type } const dutyMater = await getDutyMater(obj); const dutyTimely = await getDutyTimely(obj); const executeMater = await getExecuteMater(obj); const executeTimely = await getExecuteTimely(obj); console.log("dm",dutyMater.data); console.log("dt",dutyTimely.data); console.log("em",executeMater.data.length); console.log("et",executeTimely.data); this.initLeaderStatiChart("leaderStati",dutyMater.data); this.initLeaderTimelyChart("leaderTimely",dutyTimely.data); this.initTesterStatiChart("testerStati",executeMater.data); src/views/experiment/checkTheReport/index.vue
@@ -214,11 +214,11 @@ async queryReportByRCode(code){ const resp = await getReportData({code:code}); this.reportData = resp.data; this.dialogVisible = true; console.log(this.reportData); }, //查看报告按钮 previewFun(row){ this.dialogVisible = true; this.reportType = row.type; this.queryReportByRCode(row.reportCode); }, src/views/laboratory/measure/Add.vue
@@ -140,7 +140,6 @@ res.data.instrumentList.forEach(item => { this.insList.push({ label: item.equipmentName, value: item.id }) }) console.log(this.insList); }, methods: { addcodePointsTable() { src/views/laboratory/measure/index.vue
@@ -129,7 +129,7 @@ <Add ref="add" /> </div> <div id="myMOdel" :style="`position: absolute;transition: 1s;top:${mymodelTop}vh; left: 9px; width: 99%; height: 85vh; background-color: #fff;z-index: 20;`"> :style="`position: absolute;transition: 1s;top:${mymodelTop}px; left: 9px; width: 99%; height: 100vh; background-color: #fff;z-index: 20;`"> <el-col :span="10"> <p style="font-size: 13px;padding-left: 40px;">计划信息</p> </el-col> @@ -338,7 +338,7 @@ createPerson: '某某负责人', createTime: '2021-09-08' }, mymodelTop: -85,//14 mymodelTop: -1000,//14 addTop: -85, planId: 0 } @@ -391,9 +391,9 @@ this.currentPage await this.limitGetPlanMeasureInstrument() }, async handleCurrentChangePllan(num) { this.currentPagePlan = num await this.limitGetPlanMeasureInstrument() handleCurrentChangePllan(num) { this.currentPagePlan = num; this.limitGetPlanMeasureInstrument(); }, addPlan() { this.addTop = 2 @@ -407,9 +407,11 @@ currentPage: this.currentPagePlan, pageSize: this.pageSizePlan } let res = await limitGetPlanMeasureRequest(param) this.totalPlan = res.data.taotal this.measureData = res.data.list const res = await limitGetPlanMeasureRequest(param); console.log(res.data.total); // this.totalPlan = res.data.taotal; this.measureData = res.data.list; console.log(this.totalPlan); }, lookPalan(id) { this.planId = id @@ -437,7 +439,7 @@ }, combackLookPlan() { this.lookVisible = false this.mymodelTop = -85 this.mymodelTop = -1000 this.selectInfoBtn=false }, blurSearch() { @@ -520,7 +522,7 @@ } </script> <style scoped> <style scoped lang="scss"> .top-bar { margin: -25px -15px; background: #fff; src/views/laboratory/role/index.vue
@@ -2,14 +2,16 @@ <div> <div class="content-main"> <div class="top-bar"> <el-form ref="form" :inline="true" :model="searchData"> <el-form style="display: flex;align-items: center;" ref="form" :inline="true" :model="searchData"> <el-form-item label="角色名称:" class="sermargin"> <el-input v-model="searchData.roleName" class="input-form" placeholder="请输入角色名称" style="width:250px"> </el-input> </el-form-item> <el-form-item class="rightBtn"> <el-button type="primary" @click="searchRole">查询</el-button> <el-button type="primary" plain>重置</el-button> <el-col> <el-button type="primary" @click="searchRole">查询</el-button> <el-button type="primary" plain>重置</el-button> </el-col> </el-form-item> </el-form> <el-form> @@ -358,13 +360,11 @@ }, async upRole(scope) { console.log(scope); this.updateRole.roleId = scope.row.roleId this.updateRole.roleName = scope.row.roleName this.updateRole.lastName = scope.row.roleName let menuSelect = scope.row.roleMenuList this.updateRole.lastMenuSelect = scope.row.roleMenuList console.log(menuSelect); let res = await getMenusTree(); this.menuUpdateInfo = res.data this.menuUpdateInfo.forEach(item => { @@ -386,7 +386,6 @@ }) } }) console.log(this.menuUpdateInfo); menuSelect.forEach(ms => { this.menuUpdateInfo.forEach(item => { if (ms.menuName === item.name) { @@ -784,6 +783,7 @@ #selectRolecheck .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after { border-color: #fff !important; } #selectRoleCheck .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner { background-color: #409EFF; border-color: #409EFF; src/views/login/index.vue
@@ -1,73 +1,188 @@ <style scoped> .enter { width: 100vw; height: 100vh; display: flex; background-image: url("../../assets/404_images/login-form-bg.png"); background-size: 100% 100%; } .left { width: calc(100% - 500px); height: 100%; overflow: hidden; } .left img { width: 100%; min-height: 100%; } .right { width: 600px; overflow-y: auto; display: flex; align-items: center; justify-content: center; } .title_big { color: #004EA2; font-size: 40px; margin-bottom: 8px; } .title_small { color: #004EA2; font-size: 24px; } .elform { margin-top: 50px; } .sao { font-size: 14px; color: #004EA2; width: 100%; text-align: right; } </style> <style> .enter .el-form-item__label { font-size: 20px; color: #333; line-height: 48px; } .enter .el-form-item { margin-bottom: 30px; } .enter .el-input__inner { height: 48px; } .enter .el-button { background-color: #1763EB; color: #fff; border: 0; border-radius: 16px; width: 100%; height: 48px; } .enter input::-webkit-input-placeholder, .enter textarea::-webkit-input-placeholder { font-size: 14px; } .enter input::-moz-placeholder, .enter textarea::-moz-placeholder { font-size: 10px; } .enter input:-ms-input-placeholder, .enter textarea:-ms-input-placeholder { font-size: 10px; } .enter input:-moz-placeholder, .enter textarea:-moz-placeholder { font-size: 10px; } .copyright{ width: 100%; position: relative; top: 140px; } .copyright p{ padding: 2px 0px; font-size: 5px; text-align: center; color: lightgray; } .copyright >p:nth-child(3){ text-decoration: underline; } </style> <template> <div class="login-container"> <el-form ref="loginForm" :model="loginForm" class="login-form" auto-complete="on" label-position="left"> <!-- <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left"> --> <!-- form 表单校验 --> <div class="title-container"> <h3 class="title">登 录</h3> <div class="enter"> <div class="left"> <img src="@/assets/404_images/login-bg.png"> </div> <div class="right"> <div style="width: calc(100% - 100px);"> <div class="title_big">欢迎您登录!</div> <div class="title_small">装备电缆LIMS实验室管理系统</div> <el-form :model="ruleForm" :rules="rules" ref="ruleForm" class="elform" :hide-required-asterisk="true"> <el-form-item label="用户名" prop="username"> <el-input v-model="ruleForm.username" placeholder="请输入账号" clearable></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input v-model="ruleForm.password" placeholder="请输入密码" clearable show-password></el-input> </el-form-item> <el-form-item style="margin-bottom: 8px;"> <el-col :span="12"><el-checkbox v-model="ruleForm.remumberme">记住密码</el-checkbox></el-col> <el-col :span="12" style="text-align: right;"><el-checkbox v-model="ruleForm.autoenter">自动登录</el-checkbox></el-col> </el-form-item> <el-form-item style="margin-bottom: 15px;"> <el-button type="primary" @click="submitForm('ruleForm')" :loading="btnload">立即登录</el-button> </el-form-item> </el-form> <div class="sao">微信扫码登录</div> <div class="copyright"> <p>江东金具设备有限公司</p> <p>版权所有Copyright ©️ 2012-2021 ZTT.All Rights Reserved.</p> <p>[苏ICP备10047815号-1]</p> </div> </div> <el-form-item prop="username"> <span class="svg-container"> <svg-icon icon-class="user" /> </span> <el-input ref="username" v-model="loginForm.username" placeholder="用户名" name="username" type="text" tabindex="1" auto-complete="on" /> </el-form-item> <el-form-item prop="password"> <span class="svg-container"> <svg-icon icon-class="password" /> </span> <el-input :key="passwordType" ref="password" v-model="loginForm.password" :type="passwordType" placeholder="密码" name="password" tabindex="2" auto-complete="on" @keyup.enter.native="handleLogin" /> <span class="show-pwd" @click="showPwd"> <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" /> </span> </el-form-item> <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" @click.native.prevent="handleLogin">Login</el-button> <!-- <div class="tips"> <span style="margin-right:20px;">username: admin</span> <span> password: any</span> </div> --> </el-form> </div> </div> </template> <script> import { validUsername } from '@/utils/validate' import { get } from "@/api/util/requestUtil.js" export default { name: 'Login', data() { const validateUsername = (rule, value, callback) => { if (!validUsername(value)) { callback(new Error('Please enter the correct user name')) } else { callback() } } const validatePassword = (rule, value, callback) => { if (value.length < 6) { callback(new Error('The password can not be less than 6 digits')) } else { callback() } } return { loginForm: { username: 'admin', password: 'admin' ruleForm: { username: "admin", password: "admin", remumberme: false, autoenter: false }, loginRules: { username: [{ required: true, trigger: 'blur', validator: validateUsername }], password: [{ required: true, trigger: 'blur', validator: validatePassword }] rules: { username: [{ required: true, message: '请输入账号', trigger: ['blur', 'change'] }], password: [{ required: true, message: '请输入密码', trigger: ['blur', 'change'] }] }, loading: false, passwordType: 'password', btnload: false, redirect: undefined } }, mounted() { this.ruleForm.remumberme = JSON.parse(localStorage.getItem('rememberme'))==null?false:JSON.parse(localStorage.getItem('rememberme')) this.ruleForm.autoenter = JSON.parse(localStorage.getItem('autoenter'))==null?false:JSON.parse(localStorage.getItem('autoenter')) var user = JSON.parse(localStorage.getItem('user')) if (user != null && user != undefined) { if (this.ruleForm.remumberme==true) { this.ruleForm.username = user.username; this.ruleForm.password = user.password; } if (this.ruleForm.autoenter==true) { this.submitForm('ruleForm'); } } }, watch: { @@ -79,154 +194,41 @@ } }, methods: { showPwd() { if (this.passwordType === 'password') { this.passwordType = '' } else { this.passwordType = 'password' } this.$nextTick(() => { this.$refs.password.focus() }) }, handleLogin() { this.$refs.loginForm.validate(valid => { submitForm(formName) { this.btnload = true this.$refs[formName].validate((valid) => { if (valid) { this.loading = true this.$store.dispatch('user/login', this.loginForm).then(async () => { this.$store.dispatch('user/login', this.ruleForm).then(async (res) => { let name = ""; await get(this.$url.info).then(res => { this.user = res.data sessionStorage.setItem("user", JSON.stringify(res.data)) sessionStorage.setItem("flushPage",0) this.user = res.data; name = res.data.name; sessionStorage.setItem("user", JSON.stringify(res.data)); sessionStorage.setItem("flushPage",0); }) localStorage.setItem('rememberme', this.ruleForm.remumberme); localStorage.setItem('autoenter', this.ruleForm.autoenter); if (this.ruleForm.remumberme==true||this.ruleForm.autoenter==true) { localStorage.setItem("user", JSON.stringify({ username: this.ruleForm.username, password: this.ruleForm.password, name: name, })); } this.$message.success("登录成功") this.btnload = false this.$router.push({ path: this.redirect || '/' }) this.loading = false }).catch(() => { this.loading = false }).catch((error) => { this.$message.error(error.message) this.btnload = false }) } else { console.log('登录失败!') return false this.btnload = false this.$message.error('账号或密码未输入!') return false; } }) } }, } } </script> <style lang="scss"> /* 修复input 背景不协调 和光标变色 */ /* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */ $bg: #283443; $light_gray: #fff; $cursor: #fff; @supports (-webkit-mask: none) and (not (cater-color: $cursor)) { .login-container .el-input input { color: $cursor; } } /* reset element-ui css */ .login-container { .el-input { display: inline-block; height: 47px; width: 85%; input { background: transparent; border: 0px; -webkit-appearance: none; border-radius: 0px; padding: 12px 5px 12px 15px; color: $light_gray; height: 47px; caret-color: $cursor; &:-webkit-autofill { box-shadow: 0 0 0px 1000px $bg inset !important; -webkit-text-fill-color: $cursor !important; } } } .el-form-item { border: 1px solid rgba(255, 255, 255, 0.1); background: rgba(0, 0, 0, 0.1); border-radius: 5px; color: #454545; } } </style> <style lang="scss" scoped> $bg: #2d3a4b; $dark_gray: #889aa4; $light_gray: #eee; .login-container { min-height: 100%; width: 100%; background: url('../../assets/404_images/backgroud.png') no-repeat; background-size: 100vw 100vh; overflow: hidden; .login-form { position: relative; width: 520px; max-width: 100%; padding: 0 35px; margin: 0 auto; overflow: hidden; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .tips { font-size: 14px; color: #fff; margin-bottom: 10px; span { &:first-of-type { margin-right: 16px; } } } .svg-container { padding: 6px 5px 6px 15px; color: $dark_gray; vertical-align: middle; width: 30px; display: inline-block; } .title-container { position: relative; .title { font-size: 26px; color: $light_gray; margin: 0px auto 40px auto; text-align: center; font-weight: bold; } } .show-pwd { position: absolute; right: 10px; top: 7px; font-size: 16px; color: $dark_gray; cursor: pointer; user-select: none; } } </style>