ktg-mes 改造成 Saas 系统
快速检验市场,采用最简单的方案,即添加表字段
截止2025年8月16日上传的ktg-mes搭建存在一些问题,搭建可看文章:
搭建ktg-mes
改造
1. 添加租户表
create table sys_tenant
(
tenant_id bigint auto_increment comment '租户ID'
primary key,
tenant_key varchar(64) not null comment '租户唯一标识',
company_name varchar(100) not null comment '公司名称',
contact varchar(50) null comment '联系人',
phone varchar(20) null comment '联系电话',
status char default '0' null comment '状态(0正常 1停用)',
create_by varchar(64) default '' null comment '创建者',
create_time datetime null comment '创建时间',
update_by varchar(64) default '' null comment '更新者',
update_time datetime null comment '更新时间',
remark varchar(500) null comment '备注',
constraint uk_company_name
unique (company_name),
constraint uk_tenant_key
unique (tenant_key)
)
comment '租户信息表';
2. 登录页(login.vue) 添加公司输入框
...其他代码
<h3 class="title">苦糖果生产执行管理系统</h3>
<el-form-item prop="companyName">
<el-input
v-model="loginForm.companyName"
type="text"
auto-complete="off"
placeholder="公司名称"
>
<svg-icon slot="prefix" icon-class="tree" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
<el-form-item prop="username">
<el-input
v-model="loginForm.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">
<el-input
v-model="loginForm.password"
type="password"
auto-complete="off"
placeholder="密码"
@keyup.enter.native="handleLogin"
>
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
...其他代码
inde.vue js 部分
...其他代码
data() {
return {
codeUrl: "",
loginForm: {
companyName: "衡阳众德智能科技有限公司",
username: "testuser",
password: "123456",
rememberMe: false,
code: "",
uuid: ""
},
clientList: [],
client: null,
loginRules: {
companyName: [
{ required: true, trigger: "blur", message: "请输入您的公司名称" }
],
username: [
{ required: true, trigger: "blur", message: "请输入您的账号" }
],
password: [
{ required: true, trigger: "blur", message: "请输入您的密码" }
],
code: [{ required: true, trigger: "change", message: "请输入验证码" }]
},
loading: false,
// 验证码开关
captchaOnOff: true,
// 注册开关
register: false,
redirect: undefined
};
},
...其他代码
getCookie() {
const companyName = Cookies.get("companyName");
const username = Cookies.get("username");
const password = Cookies.get("password");
const rememberMe = Cookies.get('rememberMe')
this.loginForm = {
companyName: companyName === undefined ? this.loginForm.companyName : companyName,
username: username === undefined ? this.loginForm.username : username,
password: password === undefined ? this.loginForm.password : decrypt(password),
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
};
},
....其他代码
this.$refs.loginForm.validate(valid => {
if (valid) {
this.loading = true;
if (this.loginForm.rememberMe) {
Cookies.set("companyName", this.loginForm.companyName, { expires: 30 });
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 });
} else {
Cookies.remove("companyName");
Cookies.remove("username");
Cookies.remove("password");
Cookies.remove('rememberMe');
}
this.$store.dispatch("Login", this.loginForm).then(() => {
this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
}).catch(() => {
this.loading = false;
if (this.captchaOnOff) {
this.getCode();
}
});
}
....其他代码
login.js 代码
...其他代码
export function login(companyName, username, password, code, uuid) {
const data = {
companyName,
username,
password,
code,
uuid
}
return request({
url: '/login',
headers: {
isToken: false
},
method: 'post',
data: data
})
}
...其他代码
未完待续…