| public/img/bg-login.fb434d90.jpg | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/layout/components/importTable.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/home/widgets/components/about.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/home/widgets/components/img-logo.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/home/widgets/components/info.76e912c7.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/home/widgets/components/quesheng.bd026700.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/home/widgets/components/ver.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/home/widgets/components/welcome.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/login/components/passwordForm.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/login/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/master/person/main/personDepartment.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/master/person/main/personPerson.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/master/person/main/personPost.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
public/img/bg-login.fb434d90.jpg
src/layout/components/importTable.vue
@@ -1,55 +1,122 @@ <template> <div> <el-steps direction="vertical" :active="1"> <el-step title="准备数据"> <span class="desc">导入的数据个数需小于200,所有允许导入的字段请参考模板; <span class="bolder">字段不符合规则,整条数据不予以导入</span> </span> <button type="button" class="el-button more-btn el-button--text el-button--mini"><span>更多字段导入规则 <i class="el-icon-arrow-down no-open"></i></span></button> <div class="desc"> <ul class="tip" style=""> <li>1、员工工号:必填;工号不可重复;支持大小写字母、数字组合;</li> <li>2、员工姓名:必填;如果重名,建议加数字区分,如“张三1”;</li> <li>3、状态:必填;选择在职/离职;</li> <li>4、电话:必填;在本企业内不可重复;</li> <li>5、PIN码:必填;支持4-6位数字;</li> <li>6、岗位:非必填;可以填入多个岗位,以英文逗号‘,’间隔;不可重名;</li> <li>7、邮箱:非必填;邮箱格式校验,比如“***@126.com”;</li> <li>8、部门:非必填;请填写部门完整层级;中间间隔,请用英文符号”-“间隔。如”xx公司-xx部门-xx“</li> <li>9、入职日期:非必填;日期格式“YY-MM-DD”</li> </ul> <a class="download el-link el-link--primary is-underline"><i class="el-icon-download"></i><span class="el-link--inner">下载模板</span></a> </div> </el-step> <el-step title="上传数据文件"></el-step> </el-steps> </div> <span> <el-button type="primary" @click="openimport">导入</el-button> <el-dialog title="导入" v-model="visible" :width="900"> <h6><span>1</span>准备数据</h6> <span class="desc">导入的数据个数需小于200,所有允许导入的字段请参考模板; <span class="bolder">字段不符合规则,整条数据不予以导入</span> <span class="more" @click="showDest = !showDest">更多字段导入规则></span> </span> <div class="text-desc" :class="{showDest: showDest}"> <ul class="tip"> <li>1、员工工号:必填;工号不可重复;支持大小写字母、数字组合;</li> <li>2、员工姓名:必填;如果重名,建议加数字区分,如“张三1”;</li> <li>3、状态:必填;选择在职/离职;</li> <li>4、电话:必填;在本企业内不可重复;</li> <li>5、PIN码:必填;支持4-6位数字;</li> <li>6、岗位:非必填;可以填入多个岗位,以英文逗号‘,’间隔;不可重名;</li> <li>7、邮箱:非必填;邮箱格式校验,比如“***@126.com”;</li> <li>8、部门:非必填;请填写部门完整层级;中间间隔,请用英文符号”-“间隔。如”xx公司-xx部门-xx“</li> <li>9、入职日期:非必填;日期格式“YY-MM-DD”</li> </ul> </div> <div class="exportBtn" @click="exportBtn">下载模板</div> <h6 class="marTop8"><span>2</span>上传数据文件</h6> <div class="uploadBtn"> <el-upload class="upload" :action="uploadUrl"> <el-button type="primary">上传文件</el-button> </el-upload> <div class="uploadBtn-desc">目前支持的文件类型为.xls,.xlsx</div> </div> <template #footer> <el-button @click="visible=false" >取 消</el-button> </template> </el-dialog> </span> </template> <script> export default { data() { return { visible: false, showDest: true } }, mounted() { }, props: { exportUrl: {type: String, default: true }, uploadUrl: {type: String, default: true } }, methods: { exportBtn() { this.$HTTP.get(this.exportUrl).then(res=> { if(res.code == 200) { window.open(res.data.link); } }) }, openimport() { this.visible = true; } } } </script> <style scoped> .showDest { display: none; } .desc { color: #333; font-size: 14px; padding-left: 25px; } .tip { list-style: none; margin-left: 40px; margin-top: 8px; font-size: 12px; } .desc .bolder { font-weight: bolder; } .tip { h6 { font-size: 14px; margin-bottom:8px; } h6 span:nth-child(1) { border-radius: 50%; border: 1px solid; text-align: center; background: #fff; width: 20px; height: 20px; font-size: 14px; display: inline-block; margin-right:8px; } .more { color:#62a5a5; cursor: pointer; } .marTop8 { margin-top: 8px; } .uploadBtn { padding-left: 25px; padding-top: 4px; } .uploadBtn-desc { margin-top:6px; font-size: 12px; padding-left: 16px } .exportBtn { color: #4f9999; cursor: pointer; margin-left: 40px; margin-top: 8px; } </style> src/views/home/widgets/components/about.vue
@@ -1,19 +1,25 @@ <template> <el-card shadow="hover" header="关于项目" class="item-background"> <p>高性能 / 精致 / 优雅。基于Vue3 + Element-Plus 的中后台前端解决方案,如果喜欢就点个星星支持一下。</p> <p> <a href='https://gitee.com/lolicode/scui' target="_blank"> <img src='https://gitee.com/lolicode/scui/badge/star.svg?theme=dark' alt='star' style="vertical-align: middle"> </a> </p> <el-card shadow="hover" header="信息卡" class="item-background"> <div class="informationCar"> <div class="informationCar-info"> <img src="./img-logo.png"> <div> <div>admin</div> <div>admin</div> </div> </div> <img class="car-img" src="./info.76e912c7.png"> </div> <ul> <li>中兵航联</li> <li>未绑定员工</li> </ul> <div class="ver">版本号: 93.1.14</div> </el-card> </template> <script> export default { title: "关于项目", icon: "el-icon-setting", description: "点个星星支持一下", data() { return { @@ -23,5 +29,14 @@ </script> <style scoped> .item-background {position: relative;} .item-background p {color: #999;margin-top:10px;line-height: 1.8;} .informationCar {display: flex;height: 60px;} .car-img {flex: 1;} .informationCar-info {width: 150px;display: flex;height: 50px;align-items: center;} .informationCar-info img {width: 30px;height:30px;} .informationCar-info > div {margin-left: 32px;flex: 1;} .informationCar-info > div div:nth-child(1) {margin-bottom: 8px;font-size: 14px;font-weight: bold;} ul {list-style: none;margin-bottom: 20px;} .ver {position: absolute;bottom: 6px;right: 8px;} </style> src/views/home/widgets/components/img-logo.png
src/views/home/widgets/components/info.76e912c7.png
src/views/home/widgets/components/quesheng.bd026700.png
src/views/home/widgets/components/ver.vue
@@ -1,40 +1,50 @@ <template> <el-card shadow="hover" header="版本信息"> <div style="height: 210px;text-align: center;"> <img src="img/ver.svg" style="height:140px"/> <h2 style="margin-top: 15px;">SCUI {{$CONFIG.CORE_VER}}</h2> <p style="margin-top: 5px;">最新版本 {{ver}}</p> </div> <div style="margin-top: 20px;"> <el-button type="primary" plain round @click="golog">更新日志</el-button> <el-button type="primary" plain round @click="gogit">gitee</el-button> </div> </el-card> <div> <el-card shadow="hover" header="快捷入口"> <ul> <li><div>人工-部门</div></li> <li><div class="addMenu" @click="showDrawer">+ 添加菜单</div></li> </ul> </el-card> <el-drawer title="我是标题" :visible.sync="drawer" :direction="direction" :before-close="handleClose"> <span>我来啦!</span> </el-drawer> </div> </template> <script> export default { title: "版本信息", icon: "el-icon-monitor", description: "当前项目版本信息", data() { return { ver: 'loading...' direction: "rtl", drawer: false } }, mounted() { this.getVer() }, methods: { async getVer(){ this.ver = "1.0.0" showDrawer() { alert(2) this.drawer = true; alert(3) }, golog(){ window.open("https://gitee.com/lolicode/scui/releases") }, gogit(){ window.open("https://gitee.com/lolicode/scui") } handleClose(done) { this.$confirm('确认关闭?').then(_ => { done(); }).catch(_ => {}); } } } </script> <style scoped> ul {list-style: none;margin-bottom: 10px;overflow: hidden;} ul li {float: left;margin-bottom: 8px;} ul li div {border: 1px solid #3b8e8e;margin-top: 10px;height: 43px;margin-left: 10px;display: flex;align-items: center;justify-content: center;color: #3b8e8e;padding: 7px 15px;border-radius: 2px;border-radius: 2px;white-space: nowrap;cursor: pointer;} ul li div:hover {background-color: #ebf4f4;} .addMenu {border: 1px dashed #3b8e8e;} </style> src/views/home/widgets/components/welcome.vue
@@ -1,36 +1,14 @@ <template> <el-card shadow="hover" header="欢迎"> <div class="welcome"> <div class="logo"> <img src="img/logo.png"> <h2>欢迎体验 SCUI</h2> </div> <div class="tips"> <div class="tips-item"> <div class="tips-item-icon"><el-icon><el-icon-menu/></el-icon></div> <div class="tips-item-message">这里是项目控制台,你可以点击右上方的“自定义”按钮来添加移除或者移动部件。</div> </div> <div class="tips-item"> <div class="tips-item-icon"><el-icon><el-icon-promotion/></el-icon></div> <div class="tips-item-message">在提高前端算力、减少带宽请求和代码执行力上多次优化,并且持续着。</div> </div> <div class="tips-item"> <div class="tips-item-icon"><el-icon><el-icon-milk-tea/></el-icon></div> <div class="tips-item-message">项目目的:让前端工作更快乐</div> </div> </div> <div class="actions"> <el-button type="primary" icon="el-icon-check" size="large" @click="godoc">文档</el-button> </div> <el-card shadow="hover" header="公告"> <div class="announcement"> <img src="./quesheng.bd026700.png"> <div>暂无内容</div> </div> </el-card> </template> <script> export default { title: "欢迎", icon: "el-icon-present", description: "项目特色以及文档链接", data() { return { @@ -45,15 +23,12 @@ </script> <style scoped> .welcome {} .welcome .logo {text-align: center;} .welcome .logo img {vertical-align: bottom;width: 100px;height: 100px;margin-bottom: 20px;} .welcome .logo h2 {font-size: 30px;font-weight: normal;display: flex;align-items: center;justify-content: center;} .tips {margin-top: 20px;padding:0 40px;} .tips-item {display: flex;align-items: center;justify-content: center;padding:7.5px 0;} .tips-item-icon {width: 40px;height:40px;display: flex;align-items: center;justify-content: center;border-radius: 50%;font-size: 18px;margin-right: 20px;color: var(--el-color-primary);background: rgba(180,180,180,0.1);} .tips-item-message {flex: 1;font-size: 14px;} .actions {text-align: center;margin: 40px 0 20px 0;} .announcement { text-align: center; } .announcement img { text-align: center; width:150px; height:150px; } </style> src/views/login/components/passwordForm.vue
@@ -153,6 +153,6 @@ </script> <style> .login-form {margin: 0 auto;margin-top: 46px;width: 354px;} .inputHeight {height: 60px;line-height: 60px;} .login-form {margin: 0 auto;margin-top: 46px;width: 294px;} .inputHeight {height: 40px;line-height: 40px;} </style> src/views/login/index.vue
@@ -1,17 +1,16 @@ <template> <div class="login_bg"> <div class="login_adv" style="background-image: url(img/auth_banner.jpg);"> <div class="login_log"> <img src="./loginlog.png" /> </div> <div class="login_adv__bottom">© {{$CONFIG.APP_NAME}}</div> </div> <div class="login_main"> <div class="login-form"> <div class="title-name">协同制造管理系统</div> <password-form></password-form> </div> </div> <div class="login_adv" style="background-image: url(img/bg-login.fb434d90.jpg);"> <div class="login_adv__bottom"> © {{$CONFIG.APP_NAME}} </div> </div> <div class="login_main"> <div class="login-form"> <div class="title-name">制造信息管理系统</div> <password-form></password-form> </div> </div> </div> </template> @@ -80,53 +79,50 @@ <style scoped> .login_bg {width: 100%;height: 100%;background: #fff;display: flex;} .login_adv {width: 33.3%;background-color: #555;background-size: cover;background-position: center center;background-repeat: no-repeat;position: relative;} .login_adv .login_log {text-align: center;} .login_adv .login_log img {width:80%;padding-top:40%;} .login_adv__title {color: #fff;padding: 40px;position: absolute;top:0px;left:0px;right: 0px;z-index: 2;} .login_adv__title h2 {font-size: 40px;} .login_adv__title h4 {font-size: 18px;margin-top: 10px;font-weight: normal;} .login_adv__title p {font-size: 14px;margin-top:10px;line-height: 1.8;color: rgba(255,255,255,0.6);} .login_adv__title div {margin-top: 10px;display: flex;align-items: center;} .login_adv__title div span {margin-right: 15px;} .login_adv__title div i {font-size: 40px;} .login_adv__title div i.add {font-size: 20px;color: rgba(255,255,255,0.6);} .login_adv__bottom {position: absolute;left:0px;right: 0px;bottom: 0px;color: #fff;padding: 40px;background-image:linear-gradient(transparent, #000);z-index: 3;} .login_adv__mask {position: absolute;top:0px;left:0px;right: 0px;bottom: 0px;background: rgba(0,0,0,0.5);z-index: 1;} .login_main {display: flex;flex: 1;align-items: center;background: #fff;text-align: center;} .login-form {} .login-header {margin-bottom: 40px;} .login-header .logo {display: flex;align-items: center;} .login-header .logo img {width: 40px;height: 40px;vertical-align: bottom;margin-right: 10px;} .login-header .logo label {font-size: 26px;font-weight: bold;} .login-oauth {display: flex;justify-content:space-around;} .login-form .el-divider {margin-top:40px;} .login-form {} .login-form:deep(.el-tabs) .el-tabs__header {margin-bottom: 25px;} .login-form:deep(.el-tabs) .el-tabs__header .el-tabs__item {font-size: 14px;} .login-form:deep(.login-forgot) {text-align: right;} .login-form:deep(.login-forgot) a {color: var(--el-color-primary);} .login-form:deep(.login-forgot) a:hover {color: var(--el-color-primary-light-3);} .login-form:deep(.login-reg) {font-size: 14px;color: var(--el-text-color-primary);} .login-form:deep(.login-reg) a {color: var(--el-color-primary);} .login-form:deep(.login-reg) a:hover {color: var(--el-color-primary-light-3);} .login_config {position: absolute;top:20px;right: 20px;} .login-form:deep(.login-msg-yzm) {display: flex;width: 100%;} .login-form:deep(.login-msg-yzm) .el-button {margin-left: 10px;--el-button-size:42px;} .qrCodeLogin {text-align: center;position: relative;padding: 20px 0;} .qrCodeLogin img.qrCode {background: #fff;padding:20px;border-radius:10px;} .qrCodeLogin p.msg {margin-top: 15px;} .qrCodeLogin .qrCodeLogin-result {position: absolute;top:0;left:0;right: 0;bottom: 0;text-align: center;background: var(--el-mask-color);} .title-name {font-weight: 900;font-size: 24px;color: rgb(59, 142, 142);margin-top: 56px;line-height: 24px;margin-bottom:46px;} @media (max-width: 1000px){ .login_main {display: block;} .login_main .login_config {position: static;padding:20px 20px 0 20px;text-align: right;} .login_adv {display: none;} } .login_adv {width: 100%;background-color: #555;background-size: cover;background-position: center center;background-repeat: no-repeat;position: relative;} .login_adv__title {color: #fff;padding: 40px;position: absolute;top:0px;left:0px;right: 0px;z-index: 2;} .login_adv__title h2 {font-size: 40px;} .login_adv__title h4 {font-size: 18px;margin-top: 10px;font-weight: normal;} .login_adv__title p {font-size: 14px;margin-top:10px;line-height: 1.8;color: rgba(255,255,255,0.6);} .login_adv__title div {margin-top: 10px;display: flex;align-items: center;} .login_adv__title div span {margin-right: 15px;} .login_adv__title div i {font-size: 40px;} .login_adv__title div i.add {font-size: 20px;color: rgba(255,255,255,0.6);} .login_adv__bottom {position: absolute;left:0px;right: 0px;bottom: 0px;color: #fff;padding: 40px;background-image:linear-gradient(transparent, #000);z-index: 3;} .login_adv__mask {position: absolute;top:0px;left:0px;right: 0px;bottom: 0px;background: rgba(0,0,0,0.5);z-index: 1;} .login_main {position: absolute;top: 0;right:118px;width: 370px;height: 440px;top: 52%;-webkit-transform: translateY(-50%);transform: translateY(-50%);background: #fff;text-align: center;padding: 22px 25px 28px;} .login-form {} .login-header {margin-bottom: 40px;} .login-header .logo {display: flex;align-items: center;} .login-header .logo img {width: 40px;height: 40px;vertical-align: bottom;margin-right: 10px;} .login-header .logo label {font-size: 26px;font-weight: bold;} .login-oauth {display: flex;justify-content:space-around;} .login-form .el-divider {margin-top:40px;} .login-form {} .login-form:deep(.el-tabs) .el-tabs__header {margin-bottom: 25px;} .login-form:deep(.el-tabs) .el-tabs__header .el-tabs__item {font-size: 14px;} .login-form:deep(.login-forgot) {text-align: right;} .login-form:deep(.login-forgot) a {color: var(--el-color-primary);} .login-form:deep(.login-forgot) a:hover {color: var(--el-color-primary-light-3);} .login-form:deep(.login-reg) {font-size: 14px;color: var(--el-text-color-primary);} .login-form:deep(.login-reg) a {color: var(--el-color-primary);} .login-form:deep(.login-reg) a:hover {color: var(--el-color-primary-light-3);} .login_config {position: absolute;top:20px;right: 20px;} .login-form:deep(.login-msg-yzm) {display: flex;width: 100%;} .login-form:deep(.login-msg-yzm) .el-button {margin-left: 10px;--el-button-size:42px;} .qrCodeLogin {text-align: center;position: relative;padding: 20px 0;} .qrCodeLogin img.qrCode {background: #fff;padding:20px;border-radius:10px;} .qrCodeLogin p.msg {margin-top: 15px;} .qrCodeLogin .qrCodeLogin-result {position: absolute;top:0;left:0;right: 0;bottom: 0;text-align: center;background: var(--el-mask-color);} .title-name {font-weight: 900;font-size: 24px;color: #409eff;margin-top: 56px;line-height: 24px;margin-bottom:46px;} @media (max-width: 1000px){ .login_main {display: block;} .login_main .login_config {position: static;padding:20px 20px 0 20px;text-align: right;} .login_adv {display: none;} } </style> src/views/master/person/main/personDepartment.vue
@@ -12,6 +12,10 @@ <div class="right-top"> <div class="right-bottom"> <el-button type="primary" @click="addPerson">+ 添加部门</el-button> <!-- 导入 --> <import-table class="exportBtn" :exportUrl="exportUrl" :uploadUrl="uploadUrl"></import-table> <!-- 导出 --> <el-button type="primary" @click="getExport">导出</el-button> <el-button type="danger" plain @click="delPerson">删除</el-button> </div> <div> @@ -68,11 +72,14 @@ <save-dialog v-if="dialog.save" ref="saveDialog" @success="addHandleSuccess" @closed="dialog.save=false"></save-dialog> </template> <script> import importTable from '@/layout/components/importTable.vue' import saveDialog from './department' export default { name: "bakalaka", data(){ return { uploadUrl: "/api/blade-cps/group/import?groupType=group_organization&groupCategory=1", exportUrl: "/api/blade-cps/organization/export-template", selectId: "", selection: [], total: 0, @@ -99,9 +106,16 @@ this.getOrganizationList(); }, components: { saveDialog saveDialog,importTable }, methods: { getExport() { this.$HTTP.get(`/api/blade-cps/organization/export-organization?`+this.$TOOL.qsStringify(this.searchData)).then(res=> { if(res.code == 200) { window.open(res.data.link); } }) }, addHandleSuccess() { this.getOrganizationList(); }, @@ -314,4 +328,8 @@ line-height: 20px; margin-right: 6px; } .exportBtn { margin-left:8px; margin-right:8px; } </style> src/views/master/person/main/personPerson.vue
@@ -40,6 +40,10 @@ <div class="right-bottom"> <el-button type="primary" @click="addPerson">+ 添加员工</el-button> <el-button type="primary" @click="changeDepartment">部门调整</el-button> <!-- 导入 --> <import-table class="exportBtn" :exportUrl="exportUrl" :uploadUrl="uploadUrl"></import-table> <!-- 导出 --> <el-button type="primary" @click="getExport">导出</el-button> <el-button type="danger" plain @click="delPerson">删除</el-button> </div> <div class="right-table"> @@ -125,11 +129,14 @@ <save-dialog v-if="dialog.save" ref="saveDialog" @success="personHandleSuccess" @closed="dialog.save=false"></save-dialog> </template> <script> import importTable from '@/layout/components/importTable.vue' import saveDialog from './save' export default { name: "personPerson", data(){ return { uploadUrl: "/api/blade-cps/employee/import-employee", exportUrl: "/api/blade-cps/employee/export-template", titleList: [], delPersonModel: false, searchIcon: "el-icon-search", @@ -174,9 +181,16 @@ this.getOrganizationList(); //部门 }, components: { saveDialog saveDialog,importTable }, methods: { getExport() { this.$HTTP.get(`/api/blade-cps/employee/export-employee?`+this.$TOOL.qsStringify(this.searchData)).then(res=> { if(res.code == 200) { window.open(res.data.link); } }) }, parentIdChange(val) { // var $parentId = this.$refs.parentTree.getCurrentNode().title; // this.depatmentForm.$parentId = $parentId; @@ -494,4 +508,8 @@ line-height: 20px; margin-right: 6px; } .exportBtn { margin-left:8px; margin-right:8px; } </style> src/views/master/person/main/personPost.vue
@@ -12,6 +12,10 @@ <div class="right-top"> <div class="right-bottom"> <el-button type="primary" @click="addPerson">+ 添加岗位</el-button> <!-- 导入 --> <import-table class="exportBtn" :exportUrl="exportUrl" :uploadUrl="uploadUrl"></import-table> <!-- 导出 --> <el-button type="primary" @click="getExport">导出</el-button> <el-button type="danger" plain @click="delPerson">删除</el-button> </div> <div> @@ -68,11 +72,14 @@ </el-dialog> </template> <script> import importTable from '@/layout/components/importTable.vue' import saveDialog from './post' export default { name: "bakalaka", data(){ return { uploadUrl: "/api/blade-system/post/import-post", exportUrl: "/api/blade-system/post/export-template", totle: "0", postSearchData: { current: 1, @@ -97,9 +104,16 @@ this.getPost(); }, components: { saveDialog saveDialog,importTable }, methods: { getExport() { this.$HTTP.get(`/api/blade-system/post/export-post?`+this.$TOOL.qsStringify(this.postSearchData)).then(res=> { if(res.code == 200) { window.open(res.data.link); } }) }, delData(type) { this.$HTTP.post(`/api/blade-system/post/remove?ids=${this.selectId}&type=${type}`).then(res=> { if(res.code == 200) { @@ -300,4 +314,8 @@ line-height: 20px; margin-right: 6px; } .exportBtn { margin-left:8px; margin-right:8px; } </style>