.editorconfig
.env.development
.env.production
.env.staging
.eslintignore
.eslintrc.js
.gitignore
README.md
babel.config.js
bin/build.bat
bin/fix.txt
bin/package.bat
bin/run-web.bat
build/index.js
package.json
public/favicon.icopublic/html/ie.html
public/index.html
public/robots.txt
ruoyi-ui/src/layout/components/Settings/index.vue
ÎļþÒÑɾ³ý ruoyi-ui/src/layout/components/Sidebar/Logo.vue
ÎļþÒÑɾ³ý ruoyi-ui/src/layout/components/Sidebar/index.vue
ÎļþÒÑɾ³ý src/App.vue
src/api/login.js
src/api/menu.js
src/api/monitor/cache.js
src/api/monitor/job.js
src/api/monitor/jobLog.js
src/api/monitor/logininfor.js
src/api/monitor/online.js
src/api/monitor/operlog.js
src/api/monitor/server.js
src/api/smartor/hecategory.js
src/api/smartor/helibrary.js
src/api/smartor/ivrexecuteconfig.js
src/api/smartor/ivrextemplate.js
src/api/smartor/ivrextemplatescript.js
src/api/smartor/ivrflow.js
src/api/smartor/ivrflownode.js
src/api/smartor/ivrflownodebranch.js
src/api/smartor/ivrglobalconfig.js
src/api/smartor/ivrintent.js
src/api/smartor/ivrlibascript.js
src/api/smartor/ivrlibintent.js
src/api/smartor/ivrlibintentcategory.js
src/api/smartor/ivrlibscript.js
src/api/smartor/ivrlibscriptcategory.js
src/api/smartor/ivrlibscriptmodel.js
src/api/smartor/ivrrecall.js
src/api/smartor/ivrscene.js
src/api/smartor/ivrscenecategory.js
src/api/smartor/ivrscript.js
src/api/smartor/ivrscriptmodel.js
src/api/smartor/ivrscripttarget.js
src/api/smartor/ivrtarget.js
src/api/smartor/ivrtask.js
src/api/smartor/ivrtaskcall.js
src/api/smartor/ivrtaskcalldetail.js
src/api/smartor/ivrtaskcallrecord.js
src/api/smartor/ivrtasksms.js
src/api/smartor/ivrtemplate.js
src/api/smartor/ivrtemplatescript.js
src/api/smartor/ivrtemplatetarget.js
src/api/smartor/patarchive.js
src/api/smartor/patinhosp.js
src/api/smartor/patouthosp.js
src/api/smartor/patphysical.js
src/api/smartor/schemeautofinshrule.js
src/api/smartor/schemecalldetail.js
src/api/smartor/schemecategory.js
src/api/smartor/schemelibrary.js
src/api/smartor/schemeplan.js
src/api/smartor/schemetask.js
src/api/smartor/schemetaskconfig.js
src/api/smartor/schemetaskrecord.js
src/api/smartor/schemetaskrepeatconfig.js
src/api/smartor/schemetriggerrule.js
src/api/smartor/schemetriggerscene.js
src/api/smartor/smsaccount.js
src/api/smartor/smsparam.js
src/api/smartor/smsrecords.js
src/api/smartor/smstemplet.js
src/api/smartor/svycategory.js
src/api/smartor/svyexception.js
src/api/smartor/svyfinish.js
src/api/smartor/svyfinishoption.js
src/api/smartor/svyfinishtopic.js
src/api/smartor/svyresult.js
src/api/smartor/svytitle.js
src/api/smartor/svytopic.js
src/api/smartor/svytopicoption.js
src/api/system/category.js
src/api/system/config.js
src/api/system/dept.js
src/api/system/dict/data.js
src/api/system/dict/type.js
src/api/system/menu.js
src/api/system/notice.js
src/api/system/post.js
src/api/system/role.js
src/api/system/user.js
src/api/tool/gen.js
src/assets/401_images/401.gifsrc/assets/404_images/404.pngsrc/assets/404_images/404_cloud.pngsrc/assets/icons/index.js
src/assets/icons/svg/404.svg
src/assets/icons/svg/bug.svg
src/assets/icons/svg/build.svg
src/assets/icons/svg/button.svg
src/assets/icons/svg/cascader.svg
src/assets/icons/svg/chart.svg
src/assets/icons/svg/checkbox.svg
src/assets/icons/svg/clipboard.svg
src/assets/icons/svg/code.svg
src/assets/icons/svg/color.svg
src/assets/icons/svg/component.svg
src/assets/icons/svg/dashboard.svg
src/assets/icons/svg/date-range.svg
src/assets/icons/svg/date.svg
src/assets/icons/svg/dict.svg
src/assets/icons/svg/documentation.svg
src/assets/icons/svg/download.svg
src/assets/icons/svg/drag.svg
src/assets/icons/svg/druid.svg
src/assets/icons/svg/edit.svg
src/assets/icons/svg/education.svg
src/assets/icons/svg/email.svg
src/assets/icons/svg/example.svg
src/assets/icons/svg/excel.svg
src/assets/icons/svg/exit-fullscreen.svg
src/assets/icons/svg/eye-open.svg
src/assets/icons/svg/eye.svg
src/assets/icons/svg/form.svg
src/assets/icons/svg/fullscreen.svg
src/assets/icons/svg/github.svg
src/assets/icons/svg/guide.svg
src/assets/icons/svg/icon.svg
src/assets/icons/svg/input.svg
src/assets/icons/svg/international.svg
src/assets/icons/svg/job.svg
src/assets/icons/svg/language.svg
src/assets/icons/svg/link.svg
src/assets/icons/svg/list.svg
src/assets/icons/svg/lock.svg
src/assets/icons/svg/log.svg
src/assets/icons/svg/logininfor.svg
src/assets/icons/svg/message.svg
src/assets/icons/svg/money.svg
src/assets/icons/svg/monitor.svg
src/assets/icons/svg/nested.svg
src/assets/icons/svg/number.svg
src/assets/icons/svg/online.svg
src/assets/icons/svg/password.svg
src/assets/icons/svg/pdf.svg
src/assets/icons/svg/people.svg
src/assets/icons/svg/peoples.svg
src/assets/icons/svg/phone.svg
src/assets/icons/svg/post.svg
src/assets/icons/svg/qq.svg
src/assets/icons/svg/question.svg
src/assets/icons/svg/radio.svg
src/assets/icons/svg/rate.svg
src/assets/icons/svg/redis-list.svg
src/assets/icons/svg/redis.svg
src/assets/icons/svg/row.svg
src/assets/icons/svg/search.svg
src/assets/icons/svg/select.svg
src/assets/icons/svg/server.svg
src/assets/icons/svg/shopping.svg
src/assets/icons/svg/size.svg
src/assets/icons/svg/skill.svg
src/assets/icons/svg/slider.svg
src/assets/icons/svg/star.svg
src/assets/icons/svg/swagger.svg
src/assets/icons/svg/switch.svg
src/assets/icons/svg/system.svg
src/assets/icons/svg/tab.svg
src/assets/icons/svg/table.svg
src/assets/icons/svg/textarea.svg
src/assets/icons/svg/theme.svg
src/assets/icons/svg/time-range.svg
src/assets/icons/svg/time.svg
src/assets/icons/svg/tool.svg
src/assets/icons/svg/tree-table.svg
src/assets/icons/svg/tree.svg
src/assets/icons/svg/upload.svg
src/assets/icons/svg/user.svg
src/assets/icons/svg/validCode.svg
src/assets/icons/svg/wechat.svg
src/assets/icons/svg/zip.svg
src/assets/icons/svgo.yml
src/assets/images/dark.svg
src/assets/images/light.svg
src/assets/images/login-background.jpgsrc/assets/images/profile.jpgsrc/assets/logo/logo.pngsrc/assets/styles/btn.scss
src/assets/styles/element-ui.scss
src/assets/styles/element-variables.scss
ÎļþÃû´Ó ruoyi-ui/src/assets/styles/element-variables.scss ÐÞ¸Ä @@ -4,7 +4,7 @@ **/ /* theme color */ $--color-primary: #1890ff; $--color-primary: #3a80c2; $--color-success: #13ce66; $--color-warning: #ffba00; $--color-danger: #ff4949; src/assets/styles/index.scss
src/assets/styles/mixin.scss
src/assets/styles/ruoyi.scss
src/assets/styles/sidebar.scss
src/assets/styles/transition.scss
src/assets/styles/variables.scss
ÎļþÃû´Ó ruoyi-ui/src/assets/styles/variables.scss ÐÞ¸Ä @@ -7,18 +7,20 @@ $tiffany: #4AB7BD; $yellow:#FEC171; $panGreen: #30B08F; $menuActiveText:#4fa8db; // é»è®¤èå主é¢é£æ ¼ $base-menu-color:#bfcbd9; $base-menu-color:#f7f8f8; $base-menu-color-active:#f4f4f5; $base-menu-background:#304156; $base-menu-background:#4780d4; $base-logo-title-color: #ffffff; $base-menu-light-color:rgba(0,0,0,.70); $base-menu-light-background:#ffffff; $base-logo-light-title-color: #001529; $base-sub-menu-background:#1f2d3d; $base-sub-menu-background:#82afe4; $base-sub-menu-hover:#001528; // èªå®ä¹æè²èå飿 ¼ src/components/Breadcrumb/index.vue
src/components/Crontab/day.vue
src/components/Crontab/hour.vue
src/components/Crontab/index.vue
src/components/Crontab/min.vue
src/components/Crontab/month.vue
src/components/Crontab/result.vue
src/components/Crontab/second.vue
src/components/Crontab/week.vue
src/components/Crontab/year.vue
src/components/DictData/index.js
src/components/DictTag/index.vue
src/components/Editor/index.vue
src/components/FileUpload/index.vue
src/components/Hamburger/index.vue
src/components/HeaderSearch/index.vue
src/components/IconSelect/index.vue
src/components/IconSelect/requireIcons.js
src/components/ImagePreview/index.vue
src/components/ImageUpload/index.vue
src/components/Pagination/index.vue
src/components/PanThumb/index.vue
src/components/ParentView/index.vue
src/components/RightPanel/index.vue
src/components/RightToolbar/index.vue
src/components/RuoYi/Doc/index.vue
src/components/RuoYi/Git/index.vue
src/components/Screenfull/index.vue
src/components/SizeSelect/index.vue
src/components/SvgIcon/index.vue
src/components/ThemePicker/index.vue
src/components/TopNav/index.vue
src/components/iFrame/index.vue
src/directive/dialog/drag.js
src/directive/dialog/dragHeight.js
src/directive/dialog/dragWidth.js
src/directive/index.js
src/directive/module/clipboard.js
src/directive/permission/hasPermi.js
src/directive/permission/hasRole.js
src/layout/components/AppMain.vue
src/layout/components/IframeToggle/index.vue
src/layout/components/InnerLink/index.vue
src/layout/components/Navbar.vue
src/layout/components/Settings/index.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,322 @@ <template> <el-drawer size="280px" :visible="visible" :with-header="false" :append-to-body="true" :show-close="false" > <div class="drawer-container"> <div> <div class="setting-drawer-content"> <div class="setting-drawer-title"> <h3 class="drawer-title">主é¢é£æ ¼è®¾ç½®</h3> </div> <div class="setting-drawer-block-checbox"> <div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-dark')" > <img src="@/assets/images/dark.svg" alt="dark" /> <div v-if="sideTheme === 'theme-dark'" class="setting-drawer-block-checbox-selectIcon" style="display: block" > <i aria-label="徿 : check" class="anticon anticon-check"> <svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class="" > <path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" /> </svg> </i> </div> </div> <div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-light')" > <img src="@/assets/images/light.svg" alt="light" /> <div v-if="sideTheme === 'theme-light'" class="setting-drawer-block-checbox-selectIcon" style="display: block" > <i aria-label="徿 : check" class="anticon anticon-check"> <svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class="" > <path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" /> </svg> </i> </div> </div> </div> <div class="drawer-item"> <span>主é¢é¢è²</span> <theme-picker style="float: right; height: 26px; margin: -3px 8px 0 0" @change="themeChange" /> </div> </div> <el-divider /> <h3 class="drawer-title">ç³»ç»å¸å±é ç½®</h3> <div class="drawer-item"> <span>å¼å¯ TopNav</span> <el-switch v-model="topNav" class="drawer-switch" /> </div> <div class="drawer-item"> <span>å¼å¯ Tags-Views</span> <el-switch v-model="tagsView" class="drawer-switch" /> </div> <div class="drawer-item"> <span>åºå® Header</span> <el-switch v-model="fixedHeader" class="drawer-switch" /> </div> <div class="drawer-item"> <span>æ¾ç¤º Logo</span> <el-switch v-model="sidebarLogo" class="drawer-switch" /> </div> <div class="drawer-item"> <span>卿æ é¢</span> <el-switch v-model="dynamicTitle" class="drawer-switch" /> </div> <el-divider /> <el-button size="small" type="primary" plain icon="el-icon-document-add" @click="saveSetting" >ä¿åé ç½®</el-button > <el-button size="small" plain icon="el-icon-refresh" @click="resetSetting" >éç½®é ç½®</el-button > </div> </div> </el-drawer> </template> <script> import ThemePicker from "@/components/ThemePicker"; export default { components: { ThemePicker }, data() { return { theme: this.$store.state.settings.theme, sideTheme: this.$store.state.settings.sideTheme, }; }, computed: { visible: { get() { return this.$store.state.settings.showSettings; }, }, fixedHeader: { get() { return this.$store.state.settings.fixedHeader; }, set(val) { this.$store.dispatch("settings/changeSetting", { key: "fixedHeader", value: val, }); }, }, topNav: { get() { return this.$store.state.settings.topNav; }, set(val) { this.$store.dispatch("settings/changeSetting", { key: "topNav", value: val, }); if (!val) { this.$store.dispatch("app/toggleSideBarHide", false); this.$store.commit( "SET_SIDEBAR_ROUTERS", this.$store.state.permission.defaultRoutes ); } }, }, tagsView: { get() { return this.$store.state.settings.tagsView; }, set(val) { this.$store.dispatch("settings/changeSetting", { key: "tagsView", value: val, }); }, }, sidebarLogo: { get() { return this.$store.state.settings.sidebarLogo; }, set(val) { this.$store.dispatch("settings/changeSetting", { key: "sidebarLogo", value: val, }); }, }, dynamicTitle: { get() { return this.$store.state.settings.dynamicTitle; }, set(val) { this.$store.dispatch("settings/changeSetting", { key: "dynamicTitle", value: val, }); }, }, }, methods: { themeChange(val) { this.$store.dispatch("settings/changeSetting", { key: "theme", value: val, }); this.theme = val; }, handleTheme(val) { this.$store.dispatch("settings/changeSetting", { key: "sideTheme", value: val, }); this.sideTheme = val; }, saveSetting() { this.$modal.loading("æ£å¨ä¿åå°æ¬å°ï¼è¯·ç¨å..."); //å卿¬å°æ°æ® this.$cache.local.set( "layout-setting", `{ "topNav":${this.topNav}, "tagsView":${this.tagsView}, "fixedHeader":${this.fixedHeader}, "sidebarLogo":${this.sidebarLogo}, "dynamicTitle":${this.dynamicTitle}, "sideTheme":"${this.sideTheme}", "theme":"${this.theme}" }` ); setTimeout(this.$modal.closeLoading(), 1000); }, resetSetting() { this.$modal.loading("æ£å¨æ¸ é¤è®¾ç½®ç¼åå¹¶å·æ°ï¼è¯·ç¨å..."); this.$cache.local.remove("layout-setting"); setTimeout("window.location.reload()", 1000); }, }, }; </script> <style lang="scss" scoped> .setting-drawer-content { .setting-drawer-title { margin-bottom: 12px; color: rgba(0, 0, 0, 0.85); font-size: 14px; line-height: 22px; font-weight: bold; } .setting-drawer-block-checbox { display: flex; justify-content: flex-start; align-items: center; margin-top: 10px; margin-bottom: 20px; .setting-drawer-block-checbox-item { position: relative; margin-right: 16px; border-radius: 2px; cursor: pointer; img { width: 48px; height: 48px; } .setting-drawer-block-checbox-selectIcon { position: absolute; top: 0; right: 0; width: 100%; height: 100%; padding-top: 15px; padding-left: 24px; color: #1890ff; font-weight: 700; font-size: 14px; } } } } .drawer-container { padding: 20px; font-size: 14px; line-height: 1.5; word-wrap: break-word; .drawer-title { margin-bottom: 12px; color: rgba(0, 0, 0, 0.85); font-size: 14px; line-height: 22px; } .drawer-item { color: rgba(0, 0, 0, 0.65); font-size: 14px; padding: 12px 0; } .drawer-switch { float: right; } } </style> src/layout/components/Sidebar/FixiOSBug.js
src/layout/components/Sidebar/Item.vue
src/layout/components/Sidebar/Link.vue
src/layout/components/Sidebar/Logo.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,128 @@ <template> <div class="sidebar-logo-container" :class="{ collapse: collapse }" :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground, }" > <transition name="sidebarLogoFade"> <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/" > <img v-if="logo" :src="logo" class="sidebar-logo" /> <h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor, }" > {{ title }} </h1> </router-link> <router-link v-else key="expand" class="sidebar-logo-link" to="/"> <img v-if="logo" :src="logo" class="sidebar-logo" /> <h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor, }" > {{ title }} </h1> </router-link> </transition> </div> </template> <script> import logoImg from "@/assets/logo/logo.png"; import variables from "@/assets/styles/variables.scss"; export default { name: "SidebarLogo", props: { collapse: { type: Boolean, required: true, }, }, computed: { variables() { return variables; }, sideTheme() { return this.$store.state.settings.sideTheme; }, }, data() { return { title: "æºæ §é访管çç³»ç»", logo: logoImg, }; }, }; </script> <style lang="scss" scoped> .sidebarLogoFade-enter-active { transition: opacity 1.5s; } .sidebarLogoFade-enter, .sidebarLogoFade-leave-to { opacity: 0; } .sidebar-logo-container { position: relative; width: 100%; height: 50px; line-height: 50px; background: #2b2f3a; text-align: center; overflow: hidden; & .sidebar-logo-link { height: 100%; width: 100%; & .sidebar-logo { width: 32px; height: 32px; vertical-align: middle; margin-right: 12px; } & .sidebar-title { display: inline-block; margin: 0; color: #fff; font-weight: 600; line-height: 50px; font-size: 14px; font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif; vertical-align: middle; } } &.collapse { .sidebar-logo { margin-right: 0px; } } } </style> src/layout/components/Sidebar/SidebarItem.vue
src/layout/components/Sidebar/index.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,79 @@ <template> <div :class="{ 'has-logo': showLogo }" :style="{ backgroundColor: settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground, }" > <logo v-if="showLogo" :collapse="isCollapse" /> <el-scrollbar :class="settings.sideTheme" wrap-class="scrollbar-wrapper"> <el-menu :default-active="activeMenu" :collapse="isCollapse" :background-color=" settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground " :text-color=" settings.sideTheme === 'theme-dark' ? variables.menuColor : variables.menuLightColor " :unique-opened="true" :active-text-color="variables.menuActiveText" :collapse-transition="false" mode="vertical" > <sidebar-item v-for="(route, index) in sidebarRouters" :key="route.path + index" :item="route" :base-path="route.path" /> </el-menu> </el-scrollbar> </div> </template> <script> import { mapGetters, mapState } from "vuex"; import Logo from "./Logo"; import SidebarItem from "./SidebarItem"; import variables from "@/assets/styles/variables.scss"; export default { components: { SidebarItem, Logo }, computed: { ...mapState(["settings"]), ...mapGetters(["sidebarRouters", "sidebar"]), activeMenu() { const route = this.$route; const { meta, path } = route; // if set path, the sidebar will highlight the path you set if (meta.activeMenu) { return meta.activeMenu; } return path; }, showLogo() { return this.$store.state.settings.sidebarLogo; }, variables() { return variables; }, isCollapse() { return !this.sidebar.opened; }, }, }; </script> <style lang="scss" scoped> .el-menu-demo { font-size: 28px; } </style> src/layout/components/TagsView/ScrollPane.vue
src/layout/components/TagsView/index.vue
src/layout/components/index.js
src/layout/index.vue
src/layout/mixin/ResizeHandler.js
src/main.js
src/permission.js
src/plugins/auth.js
src/plugins/cache.js
src/plugins/download.js
src/plugins/index.js
src/plugins/modal.js
src/plugins/tab.js
src/router/index.js
src/settings.js
src/smartor/components/dataview/xformview/xformview.vue
src/smartor/components/dataview/xgridview/xgridview.vue
src/smartor/dataobject/dw_patarchive_base.vue
src/smartor/dataobject/dw_patarchive_list.vue
src/smartor/dataobject/dw_patinhosp_base.vue
src/smartor/dataobject/dw_patinhosp_list.vue
src/smartor/dataobject/dw_patouthosp_base.vue
src/smartor/dataobject/dw_patouthosp_list.vue
src/smartor/dataobject/dw_svytopic_maint.vue
src/smartor/dataobject/dw_svytopic_view.vue
src/smartor/dataobject/dw_svytopicoption_list.vue
src/smartor/dataobject/dw_svytopicoption_maint.vue
src/store/getters.js
src/store/index.js
src/store/modules/app.js
src/store/modules/dict.js
src/store/modules/permission.js
src/store/modules/settings.js
src/store/modules/tagsView.js
src/store/modules/user.js
src/utils/auth.js
src/utils/dict/Dict.js
src/utils/dict/DictConverter.js
src/utils/dict/DictData.js
src/utils/dict/DictMeta.js
src/utils/dict/DictOptions.js
src/utils/dict/index.js
src/utils/errorCode.js
src/utils/generator/config.js
src/utils/generator/css.js
src/utils/generator/drawingDefault.js
src/utils/generator/html.js
src/utils/generator/icon.json
src/utils/generator/js.js
src/utils/generator/render.js
src/utils/index.js
src/utils/jsencrypt.js
src/utils/permission.js
src/utils/request.js
src/utils/ruoyi.js
src/utils/scroll-to.js
src/utils/validate.js
src/views/components/icons/element-icons.js
src/views/components/icons/index.vue
src/views/components/icons/svg-icons.js
src/views/dashboard/BarChart.vue
src/views/dashboard/LineChart.vue
src/views/dashboard/PanelGroup.vue
src/views/dashboard/PieChart.vue
src/views/dashboard/RaddarChart.vue
src/views/dashboard/mixins/resize.js
src/views/error/401.vue
src/views/error/404.vue
src/views/index.vue
src/views/index_v1.vue
src/views/login.vue
ÎļþÃû´Ó ruoyi-ui/src/views/login.vue ÐÞ¸Ä @@ -1,6 +1,11 @@ <template> <div class="login"> <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form"> <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" > <h3 class="title">æºæ §é访管çç³»ç»</h3> <el-form-item prop="username"> <el-input @@ -9,7 +14,11 @@ auto-complete="off" placeholder="è´¦å·" > <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> </el-input> </el-form-item> <el-form-item prop="password"> @@ -20,7 +29,11 @@ placeholder="å¯ç " @keyup.enter.native="handleLogin" > <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> </el-input> </el-form-item> <el-form-item prop="code" v-if="captchaEnabled"> @@ -31,26 +44,36 @@ style="width: 63%" @keyup.enter.native="handleLogin" > <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" /> </el-input> <div class="login-code"> <img :src="codeUrl" @click="getCode" class="login-code-img"/> <img :src="codeUrl" @click="getCode" class="login-code-img" /> </div> </el-form-item> <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">è®°ä½å¯ç </el-checkbox> <el-form-item style="width:100%;"> <el-checkbox v-model="loginForm.rememberMe" style="margin: 0px 0px 25px 0px" >è®°ä½å¯ç </el-checkbox > <el-form-item style="width: 100%"> <el-button :loading="loading" size="medium" type="primary" style="width:100%;" style="width: 100%" @click.native.prevent="handleLogin" > <span v-if="!loading">ç» å½</span> <span v-else>ç» å½ ä¸...</span> </el-button> <div style="float: right;" v-if="register"> <router-link class="link-type" :to="'/register'">ç«å³æ³¨å1</router-link> <div style="float: right" v-if="register"> <router-link class="link-type" :to="'/register'" >ç«å³æ³¨å1</router-link > </div> </el-form-item> </el-form> @@ -64,7 +87,7 @@ <script> import { getCodeImg } from "@/api/login"; import Cookies from "js-cookie"; import { encrypt, decrypt } from '@/utils/jsencrypt' import { encrypt, decrypt } from "@/utils/jsencrypt"; export default { name: "Login", @@ -76,32 +99,32 @@ password: "admin123", rememberMe: false, code: "", uuid: "" uuid: "", }, loginRules: { username: [ { required: true, trigger: "blur", message: "请è¾å ¥æ¨çè´¦å·" } { required: true, trigger: "blur", message: "请è¾å ¥æ¨çè´¦å·" }, ], password: [ { required: true, trigger: "blur", message: "请è¾å ¥æ¨çå¯ç " } { required: true, trigger: "blur", message: "请è¾å ¥æ¨çå¯ç " }, ], code: [{ required: true, trigger: "change", message: "请è¾å ¥éªè¯ç " }] code: [{ required: true, trigger: "change", message: "请è¾å ¥éªè¯ç " }], }, loading: false, // éªè¯ç å¼å ³ captchaEnabled: true, // 注åå¼å ³ register: false, redirect: undefined redirect: undefined, }; }, watch: { $route: { handler: function(route) { handler: function (route) { this.redirect = route.query && route.query.redirect; }, immediate: true } immediate: true, }, }, created() { this.getCode(); @@ -109,8 +132,9 @@ }, methods: { getCode() { getCodeImg().then(res => { this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled; getCodeImg().then((res) => { this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled; if (this.captchaEnabled) { this.codeUrl = "data:image/gif;base64," + res.img; this.loginForm.uuid = res.uuid; @@ -120,38 +144,46 @@ getCookie() { const username = Cookies.get("username"); const password = Cookies.get("password"); const rememberMe = Cookies.get('rememberMe') const rememberMe = Cookies.get("rememberMe"); this.loginForm = { username: username === undefined ? this.loginForm.username : username, password: password === undefined ? this.loginForm.password : decrypt(password), rememberMe: rememberMe === undefined ? false : Boolean(rememberMe) password: password === undefined ? this.loginForm.password : decrypt(password), rememberMe: rememberMe === undefined ? false : Boolean(rememberMe), }; }, handleLogin() { this.$refs.loginForm.validate(valid => { this.$refs.loginForm.validate((valid) => { if (valid) { this.loading = true; if (this.loginForm.rememberMe) { Cookies.set("username", this.loginForm.username, { expires: 30 }); Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 }); Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 }); Cookies.set("password", encrypt(this.loginForm.password), { expires: 30, }); Cookies.set("rememberMe", this.loginForm.rememberMe, { expires: 30, }); } else { Cookies.remove("username"); Cookies.remove("password"); Cookies.remove('rememberMe'); Cookies.remove("rememberMe"); } this.$store.dispatch("Login", this.loginForm).then(() => { this.$router.push({ path: this.redirect || "/" }).catch(()=>{}); }).catch(() => { this.loading = false; if (this.captchaEnabled) { this.getCode(); } }); this.$store .dispatch("Login", this.loginForm) .then(() => { this.$router.push({ path: this.redirect || "/" }).catch(() => {}); }) .catch(() => { this.loading = false; if (this.captchaEnabled) { this.getCode(); } }); } }); } } }, }, }; </script> src/views/monitor/cache/index.vue
src/views/monitor/cache/list.vue
src/views/monitor/druid/index.vue
src/views/monitor/job/index.vue
src/views/monitor/job/log.vue
src/views/monitor/logininfor/index.vue
src/views/monitor/online/index.vue
src/views/monitor/operlog/index.vue
src/views/monitor/server/index.vue
src/views/redirect.vue
src/views/register.vue
ÎļþÃû´Ó ruoyi-ui/src/views/register.vue ÐÞ¸Ä @@ -1,10 +1,24 @@ <template> <div class="register"> <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form"> <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form" > <h3 class="title">æºæ §é访管çç³»ç»</h3> <el-form-item prop="username"> <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="è´¦å·"> <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="è´¦å·" > <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> </el-input> </el-form-item> <el-form-item prop="password"> @@ -15,7 +29,11 @@ placeholder="å¯ç " @keyup.enter.native="handleRegister" > <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> </el-input> </el-form-item> <el-form-item prop="confirmPassword"> @@ -26,7 +44,11 @@ placeholder="确认å¯ç " @keyup.enter.native="handleRegister" > <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> </el-input> </el-form-item> <el-form-item prop="code" v-if="captchaEnabled"> @@ -37,25 +59,31 @@ style="width: 63%" @keyup.enter.native="handleRegister" > <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" /> </el-input> <div class="register-code"> <img :src="codeUrl" @click="getCode" class="register-code-img"/> <img :src="codeUrl" @click="getCode" class="register-code-img" /> </div> </el-form-item> <el-form-item style="width:100%;"> <el-form-item style="width: 100%"> <el-button :loading="loading" size="medium" type="primary" style="width:100%;" style="width: 100%" @click.native.prevent="handleRegister" > <span v-if="!loading">注 å</span> <span v-else>注 å ä¸...</span> </el-button> <div style="float: right;"> <router-link class="link-type" :to="'/login'">使ç¨å·²æè´¦æ·ç»å½</router-link> <div style="float: right"> <router-link class="link-type" :to="'/login'" >使ç¨å·²æè´¦æ·ç»å½</router-link > </div> </el-form-item> </el-form> @@ -86,25 +114,35 @@ password: "", confirmPassword: "", code: "", uuid: "" uuid: "", }, registerRules: { username: [ { required: true, trigger: "blur", message: "请è¾å ¥æ¨çè´¦å·" }, { min: 2, max: 20, message: 'ç¨æ·è´¦å·é¿åº¦å¿ é¡»ä»äº 2 å 20 ä¹é´', trigger: 'blur' } { min: 2, max: 20, message: "ç¨æ·è´¦å·é¿åº¦å¿ é¡»ä»äº 2 å 20 ä¹é´", trigger: "blur", }, ], password: [ { required: true, trigger: "blur", message: "请è¾å ¥æ¨çå¯ç " }, { min: 5, max: 20, message: 'ç¨æ·å¯ç é¿åº¦å¿ é¡»ä»äº 5 å 20 ä¹é´', trigger: 'blur' } { min: 5, max: 20, message: "ç¨æ·å¯ç é¿åº¦å¿ é¡»ä»äº 5 å 20 ä¹é´", trigger: "blur", }, ], confirmPassword: [ { required: true, trigger: "blur", message: "è¯·åæ¬¡è¾å ¥æ¨çå¯ç " }, { required: true, validator: equalToPassword, trigger: "blur" } { required: true, validator: equalToPassword, trigger: "blur" }, ], code: [{ required: true, trigger: "change", message: "请è¾å ¥éªè¯ç " }] code: [{ required: true, trigger: "change", message: "请è¾å ¥éªè¯ç " }], }, loading: false, captchaEnabled: true captchaEnabled: true, }; }, created() { @@ -112,8 +150,9 @@ }, methods: { getCode() { getCodeImg().then(res => { this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled; getCodeImg().then((res) => { this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled; if (this.captchaEnabled) { this.codeUrl = "data:image/gif;base64," + res.img; this.registerForm.uuid = res.uuid; @@ -121,27 +160,37 @@ }); }, handleRegister() { this.$refs.registerForm.validate(valid => { this.$refs.registerForm.validate((valid) => { if (valid) { this.loading = true; register(this.registerForm).then(res => { const username = this.registerForm.username; this.$alert("<font color='red'>æåä½ ï¼æ¨çè´¦å· " + username + " 注åæåï¼</font>", 'ç³»ç»æç¤º', { dangerouslyUseHTMLString: true, type: 'success' }).then(() => { this.$router.push("/login"); }).catch(() => {}); }).catch(() => { this.loading = false; if (this.captchaEnabled) { this.getCode(); } }) register(this.registerForm) .then((res) => { const username = this.registerForm.username; this.$alert( "<font color='red'>æåä½ ï¼æ¨çè´¦å· " + username + " 注åæåï¼</font>", "ç³»ç»æç¤º", { dangerouslyUseHTMLString: true, type: "success", } ) .then(() => { this.$router.push("/login"); }) .catch(() => {}); }) .catch(() => { this.loading = false; if (this.captchaEnabled) { this.getCode(); } }); } }); } } }, }, }; </script> src/views/smartor/hecategory/index.vue
src/views/smartor/helibrary/index.vue
src/views/smartor/ivrexecuteconfig/index.vue
src/views/smartor/ivrextemplate/index.vue
src/views/smartor/ivrextemplatescript/index.vue
src/views/smartor/ivrflow/index.vue
src/views/smartor/ivrflownode/index.vue
src/views/smartor/ivrflownodebranch/index.vue
src/views/smartor/ivrglobalconfig/index.vue
src/views/smartor/ivrintent/index.vue
src/views/smartor/ivrlibascript/index.vue
src/views/smartor/ivrlibintent/index.vue
src/views/smartor/ivrlibintentcategory/index.vue
src/views/smartor/ivrlibscript/index.vue
src/views/smartor/ivrlibscriptcategory/index.vue
src/views/smartor/ivrlibscriptmodel/index.vue
src/views/smartor/ivrquestionlib/QuestionMaint.vue
src/views/smartor/ivrrecall/index.vue
src/views/smartor/ivrscene/index.vue
src/views/smartor/ivrscenecategory/index.vue
src/views/smartor/ivrscript/index.vue
src/views/smartor/ivrscriptmodel/index.vue
src/views/smartor/ivrscripttarget/index.vue
src/views/smartor/ivrtarget/index.vue
src/views/smartor/ivrtask/index.vue
src/views/smartor/ivrtaskcall/index.vue
src/views/smartor/ivrtaskcalldetail/index.vue
src/views/smartor/ivrtaskcallrecord/index.vue
src/views/smartor/ivrtasksms/index.vue
src/views/smartor/ivrtemplate/index.vue
src/views/smartor/ivrtemplatescript/index.vue
src/views/smartor/ivrtemplatetarget/index.vue
src/views/smartor/patarchive/index.vue
src/views/smartor/patarchive/index0.vue
src/views/smartor/patinhosp/index.vue
src/views/smartor/patouthosp/index.vue
src/views/smartor/patphysical/index.vue
src/views/smartor/schemeautofinshrule/index.vue
src/views/smartor/schemecalldetail/index.vue
src/views/smartor/schemecategory/index.vue
src/views/smartor/schemelibrary/index.vue
src/views/smartor/schemeplan/index.vue
src/views/smartor/schemetask/index.vue
src/views/smartor/schemetaskconfig/index.vue
src/views/smartor/schemetaskrecord/index.vue
src/views/smartor/schemetaskrepeatconfig/index.vue
src/views/smartor/schemetriggerrule/index.vue
src/views/smartor/schemetriggerscene/index.vue
src/views/smartor/smsaccount/index.vue
src/views/smartor/smsparam/index.vue
src/views/smartor/smsrecords/index.vue
src/views/smartor/smstemplet/index.vue
src/views/smartor/svycategory/index.vue
src/views/smartor/svyexception/index.vue
src/views/smartor/svyfinish/index.vue
src/views/smartor/svyfinishoption/index.vue
src/views/smartor/svyfinishtopic/index.vue
src/views/smartor/svyresult/index.vue
src/views/smartor/svytitle/index.vue
src/views/smartor/svytitle/index0.vue
src/views/smartor/svytitle/index1.vue
src/views/smartor/svytopic/index.vue
src/views/smartor/svytopic/index1.vue
src/views/smartor/svytopic/maint.vue
src/views/smartor/svytopicoption/index.vue
src/views/smartor/svytopicoption/index1.vue
src/views/system/category/index.vue
src/views/system/config/index.vue
src/views/system/dept/index.vue
src/views/system/dict/data.vue
src/views/system/dict/index.vue
src/views/system/menu/index.vue
src/views/system/notice/index.vue
src/views/system/post/index.vue
src/views/system/role/authUser.vue
src/views/system/role/index.vue
src/views/system/role/selectUser.vue
src/views/system/user/authRole.vue
src/views/system/user/index.vue
src/views/system/user/profile/index.vue
src/views/system/user/profile/resetPwd.vue
src/views/system/user/profile/userAvatar.vue
src/views/system/user/profile/userInfo.vue
src/views/tool/build/CodeTypeDialog.vue
src/views/tool/build/DraggableItem.vue
src/views/tool/build/IconsDialog.vue
src/views/tool/build/RightPanel.vue
src/views/tool/build/TreeNodeDialog.vue
src/views/tool/build/index.vue
src/views/tool/gen/basicInfoForm.vue
src/views/tool/gen/editTable.vue
src/views/tool/gen/genInfoForm.vue
src/views/tool/gen/importTable.vue
src/views/tool/gen/index.vue
src/views/tool/swagger/index.vue
vue.config.js