同一套vue代码部署一次,实现两个登录页入口

@ 目标,通过运行一套代码,走两个登录页面

如:1号 http://localhost/saas ,走登录页面1,进入之后使用样式1
2号 http://localhost/supplier,走登录页面2,进入之后使用样式2

1.修改代码

1.修改后端的代理转发

由于前后端分离,部分路径走后端接口,所以要调整axios,让他固定使用一个前缀来走后端接口。(目的:不要使用默认根路径访问后端,不然会包401)

1.给所有的后端请求增加统一的请求前缀给http增加最基础的url2.转发的时候去掉刚刚加的路由前缀,让后端认识

 // 配置转发代理
 devServer: {
     disableHostCheck: true,
     port: 8880,
     proxy: {
         '/api': {
             target: url,
             pathRewrite: {
                 '^/api': '/'
             }
         }
     }
 }

2. 控制访问的时候必须有对应的前缀进行路由跳转

  1. 全站权限配置,只有相应的文件路径的请求才让通过,在对应的路由跳转拦截中增加以下代码
	//  获取浏览器中的地址  /supplier#/gen/design
	// 截取浏览器地址栏(端口后面的,#号前面,); 如果既不是saas,也不是分供方,不让他跳转
	const urlPathName = window.location.pathname;
	let targetEnv = urlPathName.indexOf("#") != -1 ? targetEnv.substr(1,targetEnv.indexOf("#")) : urlPathName.substr(1);
	if(targetEnv !== "saas" && targetEnv !== "supplier"){
		return;
	}
  1. 根据请求路径控制对应的动态路由的写入
    a.将saas路由文件和supplier路由文件拆开
    b.在引入的地方根据浏览器的地址进行区分引入
    c.防止登录之后有人修改地址栏,导致跳转错误,在登陆成功,将当前环境进行记录,后期刷新引入路由时,先根据登录环境进行判断。再根据url判断

  2. 根据环境的不同,引入不同的路由,核心代码如下

let finalEnv = saasEnv;
let loginEnvSession = window.sessionStorage.getItem('worsoft-loginEnv');
if(loginEnvSession){
	let loginEnv = JSON.parse(loginEnvSession).content;
	// 1.登录之后取登录环境
	if(loginEnv === "saas"){
		finalEnv = saasEnv;
	}else if(loginEnv === "supplier"){
		finalEnv = supplierEnv;
	}
}else{
	// 2.未登录取url的路径
	const url = window.location.href
	if (url.indexOf("saas")!=-1) {
		finalEnv = saasEnv;
	} else if(url.indexOf("supplier")!=-1){
		finalEnv = supplierEnv;
	}
}

2.关于浏览器url的获取

浏览器路径:https://editor.csdn.net/md/?not_checkout=1

window.location.href
# 结果:'https://editor.csdn.net/md/?not_checkout=1'

window.location.host
#结果:'editor.csdn.net'

window.location.port
#结果 ''

window.location.pathname
# 结果: /md

window.location.search
#结果: '?not_checkout=1&articleId=122373101'

window.location.assign(url) : 加载 URL 指定的新的 HTML 文档。 就相当于一个链接,跳转到指定的url,当前页面会转为新页面内容,可以点击后退返回上一个页面。

 window.location.replace(url) : 通过加载 URL 指定的文档来替换当前文档 ,这个方法是替换当前窗口页面,前后两个页面共用一个

窗口,所以是没有后退返回上一页的

3.部署到nginx

经过无数次的测试,打包后的文件放在了\nginx-1.21.5\html\saas

server {
        listen       80;
        server_name  localhost;

		gzip on;
		gzip_static on;     # 需要http_gzip_static_module 模块
		gzip_min_length 1k;
		gzip_comp_level 4;
		gzip_proxied any;
		gzip_types text/plain text/xml text/css;
		gzip_vary on;
		gzip_disable "MSIE [1-6]\.(?!.*SV1)";
		client_max_body_size 20m;
		
        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		
		root   html\saas;

        location / {
            root html\saas;
			try_files $uri $uri/ /index.html;
        }
		
		
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

		
		# 配置后端路由
		location /api/ {
		   proxy_pass http://127.0.0.1:9999/;
		   proxy_connect_timeout 30s;
		   proxy_send_timeout 30s;
		   proxy_read_timeout 30s;
		   proxy_set_header X-Real-IP $remote_addr;
		   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		}
    }
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 好的,以下是一个简单的基于 Vue.js 的管理员登录界面和普通用户登录界面的示例代码: 管理员登录界面: ```html <!DOCTYPE html> <html> <head> <title>Admin Login</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="admin-login"> <h1>Admin Login</h1> <form @submit.prevent="login"> <label for="username">Username:</label> <input type="text" v-model="username" required><br><br> <label for="password">Password:</label> <input type="password" v-model="password" required><br><br> <input type="submit" value="Login"> </form> </div> <script> var adminLogin = new Vue({ el: '#admin-login', data: { username: '', password: '' }, methods: { login: function() { // 在这里编写登录验证的代码 // 管理员用户名和密码的验证逻辑应该与普通用户不同 } } }); </script> </body> </html> ``` 普通用户登录界面: ```html <!DOCTYPE html> <html> <head> <title>User Login</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="user-login"> <h1>User Login</h1> <form @submit.prevent="login"> <label for="username">Username:</label> <input type="text" v-model="username" required><br><br> <label for="password">Password:</label> <input type="password" v-model="password" required><br><br> <input type="submit" value="Login"> </form> </div> <script> var userLogin = new Vue({ el: '#user-login', data: { username: '', password: '' }, methods: { login: function() { // 在这里编写登录验证的代码 // 普通用户的用户名和密码验证逻辑应该与管理员不同 } } }); </script> </body> </html> ``` 这两个面使用了 Vue.js 框架来实现数据绑定和交互。它们都包含一个表单,其中包含一个用户名字段和一个密码字段。当用户输入完用户名和密码后,点击登录按钮时,表单将提交到 Vue 实例中定义的 `login` 函数进行验证和处理。在这个示例代码中,表单的 `@submit.prevent` 属性表示当用户点击表单的提交按钮时,阻止表单默认的提交行为,而是通过 Vue 实例中定义的 `login` 函数进行处理。你需要在 Vue 实例中编写代码来验证用户输入的用户名和密码,并根据情况返回成功或失败的响应。 ### 回答2: 基于Vue开发管理员登录界面和普通用户登录界面相对简单而且非常灵活。以下是一个简单的示例: 管理员登录界面: 1. 创建一个Vue组件,包含一个表单用于输入管理员用户名和密码。 2. 添加表单验证逻辑,确保输入的用户名和密码不为空。 3. 添加提交按钮,用于向后端发送登录请求。 4. 在提交按钮的点击事件中,调用后端API验证管理员的用户名和密码是否正确。 5. 如果验证成功,跳转到管理员的管理面;否则,显示登录失败的提示信息。 普通用户登录界面: 1. 创建一个Vue组件,包含一个表单用于输入普通用户的用户名和密码。 2. 添加表单验证逻辑,确保输入的用户名和密码不为空。 3. 添加提交按钮,用于向后端发送登录请求。 4. 在提交按钮的点击事件中,调用后端API验证用户的用户名和密码是否正确。 5. 如果验证成功,跳转到普通用户的个人面;否则,显示登录失败的提示信息。 上述是一个基本的实现思路,具体的实现细节需要根据项目需求和设计来进行调整和扩展。比如,可以添加记住密码、找回密码、使用第三方登录等功能。此外,还可以美化界面、增加交互效果,提升用户体验。如果有需要,还可以添加多语言支持、自动填充功能等。总之,通过Vue开发管理员登录界面和普通用户登录界面可以根据项目需求进行定制开发。 ### 回答3: 基于Vue做一个管理员登录界面和普通用户登录界面是相对简单的。下面是一个简要的使用Vue构建管理员登录界面和普通用户登录界面的示例: 首先,我们可以在Vue的模板中创建一个登录表单,包含用户名和密码的输入框,并添加相应的提交按钮。根据不同的用户类型,我们可以为管理员和普通用户分别设置不同的登录功能。 在管理员登录界面中,可以添加一个管理员特有的输入框,如管理权限或验证码输入框。管理员登录表单的模板如下所示: ```html <template> <form> <label>用户名:</label> <input type="text" v-model="username"> <br> <label>密码:</label> <input type="password" v-model="password"> <br> <label>管理权限:</label> <input type="text" v-model="adminPermission"> <br> <button @click="login">登录</button> </form> </template> ``` 对于普通用户登录界面,我们可以简化表单,只包含用户名和密码的输入框即可。普通用户登录表单的模板如下所示: ```html <template> <form> <label>用户名:</label> <input type="text" v-model="username"> <br> <label>密码:</label> <input type="password" v-model="password"> <br> <button @click="login">登录</button> </form> </template> ``` 接下来,我们需要在Vue的脚本中定义登录方法,用于提交登录请求和处理登录逻辑。示例代码如下所示: ```javascript <script> export default { data() { return { username: '', password: '', adminPermission: '', // 仅管理员界面需要 } }, methods: { login() { // 根据用户类型执行不同的登录逻辑 if (isAdmin) { // 管理员登录逻辑 if (this.adminPermission === 'admin') { // 执行管理员登录操作 alert('管理员登录成功'); } else { alert('请检查管理员权限'); } } else { // 普通用户登录逻辑 // 执行普通用户登录操作 alert('普通用户登录成功'); } } } } </script> ``` 在上述示例中,我们假设通过`isAdmin`变量判断用户类型,根据用户类型执行不同的登录逻辑。管理员界面需要验证管理员权限,而普通用户界面则不需要验证。 通过以上代码,我们可以基于Vue构建一个简单的管理员登录界面和普通用户登录界面。当用户点击登录按钮时,系统将根据用户类型进行不同的登录处理,弹出相应的登录成功或失败的提示信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值