From ccee429d379e0108b7445f72ade8d97c110a6fb3 Mon Sep 17 00:00:00 2001 From: ZZJ <zzjdsg2300@163.com> Date: 星期二, 09 十一月 2021 18:01:59 +0800 Subject: [PATCH] 问题修复 --- src/pages/systemSettings/index/App.vue | 426 +++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 303 insertions(+), 123 deletions(-) diff --git a/src/pages/systemSettings/index/App.vue b/src/pages/systemSettings/index/App.vue index 9f3e647..ef71b7c 100644 --- a/src/pages/systemSettings/index/App.vue +++ b/src/pages/systemSettings/index/App.vue @@ -1,12 +1,12 @@ <template> - <div class="container"> + <div class="container" v-if="!showWelcome"> <div class="container-left"> <div class="left-card" :class="activeIndex == index ? 'left-card-active' : ''" v-for="(item, index) in menuArr" :key="index" - @click="openMenu(item, index)" + @click="openMenu(item.name, index)" > <span class="icon iconfont"></span> <span class="card-text">{{ item.name }}</span> @@ -28,12 +28,17 @@ @click="openAccount(item, index)" > <div class="touxiang"> - <img :src="item.headpic" alt="" /> + <img + v-if="item.headpic" + :src="`data:image/png;base64,${item.headpic}`" + alt="" + /> + </div> <span class="user-name">{{ item.username }}</span> </div> </div> - <div class="add-account" > + <div class="add-account"> <span class="icon iconfont" @click="showAddAccount"></span> </div> </div> @@ -49,7 +54,6 @@ <span class="week">{{ weekday }}</span> </div> </div> - <div class="line"> <div class="name">NTP鏍℃椂</div> <el-switch @@ -82,7 +86,11 @@ > <div class="content-top"> <div class="touxiang-big"> - <img :src="activeAccountItem.headpic" alt="" /> + <img + v-if="activeAccountItem.headpic" + :src="`data:image/png;base64,${activeAccountItem.headpic}`" + alt="" + /> </div> <div class="user-desc"> <div class="username"> @@ -109,7 +117,13 @@ ></span > </div> - <div class="user-role">{{activeAccountItem.sysRoles.length?activeAccountItem.sysRoles[0].name:""}}</div> + <div class="user-role"> + {{ + activeAccountItem.sysRoles.length + ? activeAccountItem.sysRoles[0].name + : "" + }} + </div> </div> </div> <div class="list-btn"> @@ -121,7 +135,6 @@ <div class="change-pw" v-if="inAccountDetail && isChangePw"> <div class="title">淇敼瀵嗙爜</div> - <el-form :model="passwordForm" :rules="pwRules" @@ -155,8 +168,8 @@ </el-form-item> </el-form> <div class="btns"> - <div class="cancel" @click="cancelChangePassword">鍙栨秷</div> - <div class="ok">淇濆瓨</div> + <div class="cancel" @click="cancelPassword">鍙栨秷</div> + <div class="ok" @click="SaveNewPassword('passwordForm')">淇濆瓨</div> </div> </div> @@ -201,18 +214,31 @@ <div class="upload-group"> <div class="upload-jpg" + :class=" + selectedPic == index? 'upload-jpg-border' : '' + " v-for="(item, index) in jpgArr" :key="index" - ></div> - - <el-upload + @click="pickHeadDefPic(item, index)" + > + <img + v-if="item" + :src="`data:image/png;base64,${item.path}`" + alt="" + srcset="" + /> + <div class="img-mask" v-if="selectedPic == index"> + <span class="icon iconfont enable"></span> + </div> + </div> + <!-- <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/" :show-file-list="false" :http-request="uploadUserPic" > - <div class="upload-jpg-up">涓婁紶</div> - </el-upload> + <div v-if="loadedPic == ''" class="upload-jpg-up">涓婁紶</div> + </el-upload> --> </div> <div class="fill-group"> <el-form @@ -227,6 +253,17 @@ placeholder="蹇呭~" v-model="addForm.userName" ></el-input> + </el-form-item> + <el-form-item prop="roleId"> + <div class="p-title">瑙掕壊锛�</div> + <el-select v-model="addForm.roleId" placeholder="璇烽�夋嫨瑙掕壊"> + <el-option + v-for="(item, i) in roleList" + :key="i" + :label="item.name" + :value="item.id" + ></el-option> + </el-select> </el-form-item> <el-form-item prop="nickName"> <div class="p-title">鏄电О锛�</div> @@ -433,7 +470,7 @@ </div> <div class="btns"> - <div class="cancel" @click="cancelChangePassword">鍙栨秷</div> + <div class="cancel" @click="cancelPassword">鍙栨秷</div> <div class="ok" @click="submitClock">淇濆瓨</div> </div> </div> @@ -456,6 +493,44 @@ style="width: 100%" ></generalSettings> </div> + <div class="welcome-page" v-else> + <div class="child" @click="openWelcome('璐︽埛',0)"> + <div class="child-info"> + <span class="icon iconfont welcome-icon"></span> + <span class="welcome-title">璐︽埛</span> + </div> + </div> + <div class="child" @click="openWelcome('鏃ユ湡鏃堕棿',1)"> + <div class="child-info"> + <span class="icon iconfont welcome-icon"></span> + <span class="welcome-title">鏃ユ湡鏃堕棿</span> + </div> + </div> + <div class="child" @click="openWelcome('闆嗙兢绠$悊',2)"> + <div class="child-info"> + <span class="icon iconfont welcome-icon"></span> + <span class="welcome-title">闆嗙兢绠$悊</span> + </div> + </div> + <div class="child" @click="openWelcome('缃戠粶璁剧疆',3)"> + <div class="child-info"> + <span class="icon iconfont welcome-icon"></span> + <span class="welcome-title">缃戠粶璁剧疆</span> + </div> + </div> + <div class="child" @click="openWelcome('閿洏鍜岃瑷�',4)"> + <div class="child-info"> + <span class="icon iconfont welcome-icon"></span> + <span class="welcome-title">閿洏鍜岃瑷�</span> + </div> + </div> + <div class="child" @click="openWelcome('閫氱敤璁剧疆',5)"> + <div class="child-info"> + <span class="icon iconfont welcome-icon"></span> + <span class="welcome-title">閫氱敤璁剧疆</span> + </div> + </div> + </div> </template> <script> @@ -469,7 +544,8 @@ updatePassword, deleteUser, getUserMenus, - getSysMenus, + defHeadPics, + getRoles, } from "@/api/user"; import switchBar from "../components/switchBar"; import ipInput from "@/components/subComponents/IPInput"; @@ -488,16 +564,6 @@ generalSettings, }, data() { - var validatePass = (rule, value, callback) => { - if (value === "") { - callback(new Error("璇疯緭鍏ュ瘑鐮�")); - } else { - if (this.addForm.checkPass !== "") { - this.$refs.addForm.validateField("checkPassword"); - } - callback(); - } - }; var validatePass2 = (rule, value, callback) => { if (value === "") { callback(new Error("璇峰啀娆¤緭鍏ュ瘑鐮�")); @@ -507,30 +573,10 @@ callback(); } }; - var validatePass3 = (rule, value, callback) => { - if (value === "") { - callback(new Error("璇疯緭鍏ュ瘑鐮�")); - } else { - if (this.passwordForm.password !== "") { - this.$refs.passwordForm.validateField("pw"); - } - callback(); - } - }; - var validatePass5 = (rule, value, callback) => { - if (value === "") { - callback(new Error("璇疯緭鍏ュ瘑鐮�")); - } else { - if (this.passwordForm.newPassword !== "") { - this.$refs.passwordForm.validateField("newPw"); - } - callback(); - } - }; var validatePass4 = (rule, value, callback) => { if (value === "") { callback(new Error("璇峰啀娆¤緭鍏ュ瘑鐮�")); - } else if (value !== this.passwordForm.confirmPassword) { + } else if (value !== this.passwordForm.newPassword) { callback(new Error("涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�!")); } else { callback(); @@ -542,6 +588,7 @@ activeAccountItem: {}, syncMonth: "", syncHour: "", + showWelcome: true, syncDay: "", syncMin: "", syncSec: "00", @@ -559,7 +606,9 @@ showSecInput: false, showYrsInput: false, showMonthInput: false, + selectedPic: null, showDayInput: false, + loadedPic: "", cameraInfo: false, dependentScene: false, timestamp: 0, @@ -571,6 +620,7 @@ syncType: "1", equipmentTime: "", equipmentDate: "", + roleList: [], ntpTestLoading: false, settime: "", weekday: "", @@ -583,7 +633,7 @@ { name: "閫氱敤璁剧疆" }, ], accountArr: [], - jpgArr: [{}, {}, {}, {}, {}, {}, {}, {}, {}], + jpgArr: [], isManual: false, isNtp: true, activePage: "璐︽埛", @@ -609,6 +659,7 @@ password: "", headpic: "", confirmPassword: "", + roleId: "", }, rules: { userName: [ @@ -620,13 +671,23 @@ trigger: "blur", }, ], - password: [{ validator: validatePass, trigger: "blur" }], + password: [ + { required: true, message: "璇疯緭鍏ュ瘑鐮�", trigger: "blur" }, + { min: 6, message: "闀垮害鑷冲皯涓� 6 浣�", trigger: "blur" }, + ], confirmPassword: [{ validator: validatePass2, trigger: "blur" }], }, pwRules: { - pw: [{ validator: validatePass3, trigger: "blur" }], - newPw: [{ validator: validatePass5, trigger: "blur" }], - confirmNewPw: [{ validator: validatePass4, trigger: "blur" }], + // pw: [{ validator: validatePass3, trigger: "blur" }], + curPassword: [ + { required: true, message: "璇疯緭鍏ュ瘑鐮�", trigger: "blur" }, + { min: 6, message: "闀垮害鑷冲皯涓� 6 浣�", trigger: "blur" }, + ], + newPassword: [ + { required: true, message: "璇疯緭鍏ュ瘑鐮�", trigger: "blur" }, + { min: 6, message: "闀垮害鑷冲皯涓� 6 浣�", trigger: "blur" }, + ], + confirmPassword: [{ validator: validatePass4, trigger: "blur" }], }, }; }, @@ -636,13 +697,25 @@ }, mounted() { this.fetchUserList(); + this.fetchDefHeadPic(); }, methods: { - fetchUserList() { + fetchDefHeadPic() { + defHeadPics().then((res) => { + this.jpgArr = res.data; + }); + }, + fetchUserList(showLast = false) { getUsers().then((res) => { this.accountArr = res.data; if (this.accountArr.length) { this.activeAccountItem = this.accountArr[0]; + this.activeAccountIndex = 0; + } + if (showLast) { + this.cancelAdd(); + const lastIdx = this.accountArr.length - 1; + this.openAccount(this.accountArr[lastIdx], lastIdx); } }); }, @@ -661,13 +734,15 @@ nickname: this.inputNickName, }).then((res) => { this.$message.success(res.msg); - this.fetchUserList(); + this.fetchUserList(true); }); }, openAccount(item, i) { this.activeAccountItem = item; this.activeAccountIndex = i; this.inAccountDetail = false; + this.cancelSet(); + this.fetchMenu(); }, minusOne(typ) { this.isSyncBrowser = false; @@ -726,18 +801,12 @@ }, fatherChange(item) { item.children.forEach((x) => { - x.selected = false; + x.selected = item.selected; }); }, childrenChange(item) { let isAllSelected = item.children.every((x) => x.selected == true); - let isAllNotSelected = item.children.every((x) => x.selected == false); - if (isAllSelected) item.selected = true; - if (isAllNotSelected) item.selected = false; - }, - getMaxDay() { - const maxDay = new Date(+this.syncYrs, +this.syncMonth, 0).getDate(); - if (this.syncDay > maxDay) this.syncDay = maxDay; + item.selected = isAllSelected; }, plusOne(typ) { this.isSyncBrowser = false; @@ -790,7 +859,7 @@ }, submitClock() { if (this.syncType === "1") { - if (this.ntpServer === ""||this.ntpServer === "...") { + if (this.ntpServer === "" || this.ntpServer === "...") { this.$notify({ type: "error", message: "NTP 鏈嶅姟鍣ㄥ湴鍧�涓嶈兘涓虹┖", @@ -839,7 +908,10 @@ id: this.activeAccountItem.id, menuIds: arr, }).then((res) => { - res.data; + if (res.success) { + this.$message.success(res.msg); + this.cancelSet(); + } }); }, formatTime(number, format) { @@ -866,21 +938,22 @@ n = n.toString(); return n[1] ? n : "0" + n; }, - uploadUserPic(params) { - let param = new FormData(); - param.append("file", params.file); - uploadHeadPic(param).then((res) => { - this.addForm.headpic = res.data; - }); - }, + // uploadUserPic(params) { + // let param = new FormData(); + // param.append("file", params.file); + // uploadHeadPic(param).then((res) => { + // this.jpgArr.push(res.data); + // this.loadedPic = res.data; + // }); + // }, initClockConf(ntpTest = false) { getClockInfo().then((rsp) => { if (rsp && rsp.success) { this.timezone = rsp.data.time_zone; if (!ntpTest) { this.syncType = rsp.data.ntp ? "1" : "2"; - this.isNtp = rsp.data.ntp - this.isManual = !rsp.data.ntp + this.isNtp = rsp.data.ntp; + this.isManual = !rsp.data.ntp; } if (rsp.data.ntp) { this.ntpServer = rsp.data.ntp_server; @@ -889,17 +962,21 @@ this.timestamp = rsp.data.local_time; if (this.clockTimer === null) { this.runClock(); - if(this.isManual)this.parseTime() + if (this.isManual) this.parseTime(); } } }); }, - openMenu(item, i) { - this.activePage = item.name; + openMenu(name, i) { + this.activePage = name; this.activeIndex = i; if (this.activePage == "鏃ユ湡鏃堕棿") { this.initClockConf(); } + }, + openWelcome(name,i){ + this.showWelcome = false + this.openMenu(name,i) }, showInput(typ) { this[`show${typ}Input`] = true; @@ -915,7 +992,7 @@ this[`input${typ}`] = ""; }, syncBrowser(enable) { - this.isSyncBrowser = val; + this.isSyncBrowser = enable; if (!enable) { clearInterval(this.browserTimer); } else { @@ -931,16 +1008,43 @@ showAddAccount() { this.inAccountDetail = false; this.isAddAccount = true; + getRoles().then((res) => { + if (res.success) { + this.roleList = res.data; + } + }); }, cancelAdd() { this.inAccountDetail = false; this.isAddAccount = false; + this.$refs["addForm"].resetFields(); + this.selectedPic = null; }, - cancelChangePassword() { + cancelPassword() { this.isChangePw = false; this.inAccountDetail = false; + this.$refs["passwordForm"].resetFields(); }, - + SaveNewPassword(formName) { + this.$refs[formName].validate((valid) => { + if (valid) { + updatePassword({ + oldPwd: this.passwordForm.curPassword, + newPwd: this.passwordForm.newPassword, + }).then( + (res) => { + if (res.success) { + this.$message.success(res.msg); + this.cancelPassword(); + } + }, + (err) => { + this.$message.warning("淇濆瓨澶辫触锛�" + err.msg); + } + ); + } + }); + }, saveAddAccount(formName) { this.$refs[formName].validate((valid) => { if (valid) { @@ -953,6 +1057,7 @@ addUser(data).then( (res) => { this.$message.success(res.data); + this.fetchUserList(true); }, (err) => { this.$message.warning("淇濆瓨澶辫触锛�" + err.msg); @@ -963,6 +1068,10 @@ return false; } }); + }, + pickHeadDefPic(item, i) { + this.addForm.headpic = item.path; + this.selectedPic = i; }, testNTP() { this.ntpTestLoading = true; @@ -993,6 +1102,7 @@ cancelSet() { this.isSetPermission = false; this.inAccountDetail = false; + this.sysMenus = []; }, showChangePassword() { this.isChangePw = true; @@ -1011,9 +1121,10 @@ cancelButtonText: "鍙栨秷", }) .then(() => { - deleteUser({ + let obj = { ids: [this.activeAccountItem.id], - }).then((res) => { + }; + deleteUser(obj).then((res) => { if (res.success) { this.fetchUserList(); this.$message({ @@ -1039,12 +1150,17 @@ openPermission() { this.inAccountDetail = true; this.isSetPermission = true; - this.fetchMenu(); + if (this.sysMenus.length == 0) { + this.fetchMenu(); + } }, - parseTime(){ - debugger; - [this.syncYrs, this.syncMonth, this.syncDay] = this.equipmentDate.split("-"); - [this.syncHour, this.syncMin, this.syncSec] = this.equipmentTime.split(":"); + parseTime() { + [this.syncYrs, this.syncMonth, this.syncDay] = this.equipmentDate.split( + "-" + ); + [this.syncHour, this.syncMin, this.syncSec] = this.equipmentTime.split( + ":" + ); }, changeSwitch(str) { if (str == "isNtp") { @@ -1053,31 +1169,62 @@ this.isNtp = !this[str]; } this.syncType = this.isNtp ? "1" : "2"; - if (this.isManual) this.parseTime() + if (this.isManual) this.parseTime(); }, }, computed: { - isShowAddAccount(){ - const info = JSON.parse(sessionStorage.getItem('userInfo')) - return true - } + isShowAddAccount() { + const info = JSON.parse(sessionStorage.getItem("userInfo")); + return true; + }, }, - // watch: { - // isManual(v) { - // this.isNtp = !v; - // v && (this.syncType = "2"); - // if (v) { - - // } - // }, - // isNtp(v) { - // this.isManual = !v; - // v && (this.syncType = "1"); - // }, - // }, }; </script> <style lang="scss"> +.welcome-page { + width: 100%; + height: 100%; + background-color: #f5f5f5; + display: -ms-flexbox; + padding: 0 50px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + .child { + box-sizing: border-box; + background-color: white; + -webkit-box-flex: 0; + -ms-flex: 0 0 33.3%; + /* flex: 0 0 16%; */ + float: left; + width: 250px; + height: 200px; + margin: 50px 57px 30px 57px; + border-radius: 20px; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + .child-info { + display: flex; + flex-direction: column; + height: 62%; + justify-content: space-around; + .welcome-icon { + font-size: 72px; + } + .welcome-title { + font-size: 18px; + } + } + } + .child:hover { + -moz-box-shadow: 5px 5px 10px #ddd; + -webkit-box-shadow: 5px 5px 10px #ddd; + box-shadow: 5px 5px 10px #ddd; + transform: translate3d(0,-2.5px,0); + transition: all 0.3s; +} +} .container { height: 100%; display: flex; @@ -1087,7 +1234,7 @@ box-sizing: border-box; .container-left { height: 100%; - width: 210px; + width: 230px; overflow: auto; box-sizing: border-box; flex-shrink: 0; @@ -1130,8 +1277,7 @@ .account-left { .add-account { color: rgba(61, 104, 225, 1); - margin-top: 50px; - + margin-top: 30px; .iconfont { cursor: pointer; font-size: 32px; @@ -1260,7 +1406,7 @@ margin: 5px 15px; height: 30px; line-height: 30px; - width: 90px; + // width: 90px; text-align: left; font-size: 15px; display: flex; @@ -1279,9 +1425,10 @@ cursor: pointer; } } - .user-role{ - margin: 5px 0 0 15px; - font-size: 14px; + .user-role { + margin: 5px 0 0 15px; + font-size: 14px; + color: darkseagreen; } } } @@ -1363,27 +1510,54 @@ .add-account-page { .upload-group { height: 120px; - width: 350px; + width: 360px; margin: 0 auto; overflow: hidden; .upload-jpg { - height: 50px; - width: 50px; + position: relative; + height: 48px; + width: 48px; float: left; margin: 0 10px; - background-color: antiquewhite; - margin-bottom: 20px; - border-radius: 25px; + margin-bottom: 10px; + background-color: rgba(242, 242, 242, 1); + border: 2px solid transparent; + border-radius: 50%; + cursor: pointer; + img { + height: 48px; + width: 48px; + border-radius: 50%; + } + .img-mask { + position: absolute; + left: 0; + top: 0; + height: 48px; + width: 48px; + background-color: rgba(0, 0, 0, 0.3); + color: white; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + .selected { + font-size: 22px; + } + } + } + .upload-jpg-border { + border: 2px solid cornflowerblue; } .upload-jpg-up { - height: 50px; - width: 50px; + height: 48px; + width: 48px; float: left; display: flex; background-color: rgba(242, 242, 242, 1); - margin: 0 10px; - margin-bottom: 20px; - border-radius: 25px; + border: 2px solid transparent; + border-radius: 50%; + justify-content: center; align-items: center; font-size: 12px; @@ -1392,8 +1566,14 @@ } .fill-group { .p-title { + height: 34px; text-align: left; } + .el-form-item { + .el-select { + width: 100%; + } + } } } } -- Gitblit v1.8.0