This commit is contained in:
朱文强 2023-11-10 11:14:13 +08:00
parent 51635013b1
commit 67a21b43e6
16 changed files with 972 additions and 658 deletions

View File

@ -66,7 +66,7 @@ export default {
label: '订单出货日期', label: '订单出货日期',
dateType: 'daterange', dateType: 'daterange',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd hh:mm:ss', valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-', rangeSeparator: '-',
startPlaceholder: '开始时间', startPlaceholder: '开始时间',
endPlaceholder: '结束时间', endPlaceholder: '结束时间',

View File

@ -94,7 +94,7 @@ export default {
label: '订单出货日期', label: '订单出货日期',
dateType: 'daterange', dateType: 'daterange',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd hh:mm:ss', valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-', rangeSeparator: '-',
startPlaceholder: '开始时间', startPlaceholder: '开始时间',
endPlaceholder: '结束时间', endPlaceholder: '结束时间',

View File

@ -191,7 +191,7 @@ export default {
label: '选择日期', label: '选择日期',
dateType: 'daterange', dateType: 'daterange',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd hh:mm:ss', valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-', rangeSeparator: '-',
startPlaceholder: '开始时间', startPlaceholder: '开始时间',
endPlaceholder: '结束时间', endPlaceholder: '结束时间',

View File

@ -200,7 +200,7 @@ export default {
label: '选择日期', label: '选择日期',
dateType: 'daterange', dateType: 'daterange',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd hh:mm:ss', valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-', rangeSeparator: '-',
startPlaceholder: '开始时间', startPlaceholder: '开始时间',
endPlaceholder: '结束时间', endPlaceholder: '结束时间',

View File

@ -66,7 +66,7 @@ export default {
label: '订单出货日期', label: '订单出货日期',
dateType: 'daterange', dateType: 'daterange',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd hh:mm:ss', valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-', rangeSeparator: '-',
startPlaceholder: '开始时间', startPlaceholder: '开始时间',
endPlaceholder: '结束时间', endPlaceholder: '结束时间',

View File

@ -32,7 +32,9 @@
<el-table-column prop="process" label="工序" width="110"> <el-table-column prop="process" label="工序" width="110">
<template slot-scope="scope"> <template slot-scope="scope">
<span> <span>
{{ scope.row.process>=0 ? processArr[scope.row.process].name : '' }} {{
scope.row.process >= 0 ? processArr[scope.row.process].name : ''
}}
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
@ -41,7 +43,10 @@
<span>{{ scope.row.cacheLocation === 0 ? '否' : '是' }}</span> <span>{{ scope.row.cacheLocation === 0 ? '否' : '是' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="warehouseStorehouseState" label="库位状态" width="100"> <el-table-column
prop="warehouseStorehouseState"
label="库位状态"
width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<span> <span>
{{ {{
@ -55,6 +60,7 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" width="70"> <el-table-column label="操作" width="70">
<template v-slot="scope"> <template v-slot="scope">
<span v-if="scope.row.deactivate === 1">
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
@ -65,6 +71,18 @@
]"> ]">
<span class="iconfont icon-edit primary-color"></span> <span class="iconfont icon-edit primary-color"></span>
</el-button> </el-button>
</span>
<span v-else>
<el-button
size="mini"
type="text"
@click="handleClick({ data: { id: scope.row }, type: 'restore' })"
v-hasPermi="[
'asrs:warehouse-storehouse-goods-specification:update',
]">
启用库位
</el-button>
</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -85,7 +103,10 @@ import AddOrUpdate from './add-or-updata';
import product from '../product-mini'; import product from '../product-mini';
import basicPage from '../mixins/basic-page'; import basicPage from '../mixins/basic-page';
import { parseTime } from '../mixins/code-filter'; import { parseTime } from '../mixins/code-filter';
import { getWarehouseStorehousePage, } from "@/api/asrs/warehouseStorehouse"; import {
getWarehouseStorehousePage,
updateWarehouseStorehouse,
} from '@/api/asrs/warehouseStorehouse';
const processArr = [ const processArr = [
{ {
@ -208,7 +229,8 @@ export default {
this.listQuery.goodName = val.pname; this.listQuery.goodName = val.pname;
this.listQuery.goodCode = val.pcode; this.listQuery.goodCode = val.pcode;
this.listQuery.process = val.processId; this.listQuery.process = val.processId;
this.listQuery.warehouseStorehouseState = val.warehouseStorehouseStateId; this.listQuery.warehouseStorehouseState =
val.warehouseStorehouseStateId;
this.getDataList(); this.getDataList();
break; break;
case 'reset': case 'reset':
@ -232,6 +254,21 @@ export default {
console.log(val); console.log(val);
} }
}, },
otherMethods(val) {
if (val.type === 'restore') {
const dataForm = {
id: val.data.id.id,
deactivate: 1,
trayCode: val.data.id.trayCode ? val.data.id.trayCode : '',
};
updateWarehouseStorehouse(dataForm).then((response) => {
this.$modal.msgSuccess('启用成功');
this.getDataList();
});
} else {
console.log(11);
}
},
}, },
}; };
</script> </script>

View File

@ -53,17 +53,31 @@
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="70"> <el-table-column label="操作" width="80">
<template v-slot="scope"> <template v-slot="scope">
<span v-if="scope.row.deactivate === 1">
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
:disabled="scope.row.warehouseStorehouseState === 1"
@click="handleClick({ data: { id: scope.row }, type: 'edit' })" @click="handleClick({ data: { id: scope.row }, type: 'edit' })"
v-hasPermi="[ v-hasPermi="[
'asrs:warehouse-storehouse-goods-specification:update', 'asrs:warehouse-storehouse-goods-specification:update',
]"> ]">
<span class="iconfont icon-edit primary-color"></span> <span class="iconfont icon-edit primary-color"></span>
</el-button> </el-button>
</span>
<span v-else>
<el-button
size="mini"
type="text"
@click="handleClick({ data: { id: scope.row }, type: 'restore' })"
v-hasPermi="[
'asrs:warehouse-storehouse-goods-specification:update',
]">
启用库位
</el-button>
</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -84,7 +98,10 @@ import AddOrUpdate from './add-or-updata';
import product from '../product-mini'; import product from '../product-mini';
import basicPage from '../mixins/basic-page'; import basicPage from '../mixins/basic-page';
import { parseTime } from '../mixins/code-filter'; import { parseTime } from '../mixins/code-filter';
import { getWarehouseStorehousePage, } from "@/api/asrs/warehouseStorehouse"; import {
getWarehouseStorehousePage,
updateWarehouseStorehouse,
} from '@/api/asrs/warehouseStorehouse';
const processArr = [ const processArr = [
{ {
@ -234,6 +251,21 @@ export default {
console.log(val); console.log(val);
} }
}, },
otherMethods(val) {
if (val.type === 'restore') {
const dataForm = {
id: val.data.id.id,
deactivate: 1,
trayCode: val.data.id.trayCode ? val.data.id.trayCode : '',
};
updateWarehouseStorehouse(dataForm).then((response) => {
this.$modal.msgSuccess('启用成功');
this.getDataList();
});
} else {
console.log(11);
}
},
}, },
}; };
</script> </script>

View File

@ -138,7 +138,7 @@ export default {
}, },
{ {
type: 'select', type: 'select',
label: '状态', label: '出入库状态',
selectOptions: warehouseStorehouseStorageState, selectOptions: warehouseStorehouseStorageState,
param: 'state', param: 'state',
defaultSelect: '', defaultSelect: '',
@ -149,7 +149,7 @@ export default {
label: '出入库时间', label: '出入库时间',
dateType: 'daterange', dateType: 'daterange',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd hh:mm:ss', valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-', rangeSeparator: '-',
startPlaceholder: '开始时间', startPlaceholder: '开始时间',
endPlaceholder: '结束时间', endPlaceholder: '结束时间',

View File

@ -138,7 +138,7 @@ export default {
}, },
{ {
type: 'select', type: 'select',
label: '状态', label: '出入库状态',
selectOptions: warehouseStorehouseStorageState, selectOptions: warehouseStorehouseStorageState,
param: 'state', param: 'state',
defaultSelect: '', defaultSelect: '',
@ -149,11 +149,11 @@ export default {
label: '出入库时间', label: '出入库时间',
dateType: 'daterange', dateType: 'daterange',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd hh:mm:ss', valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-', rangeSeparator: '-',
startPlaceholder: '开始时间', startPlaceholder: '开始时间',
endPlaceholder: '结束时间', endPlaceholder: '结束时间',
param: 'searchTime2', param: 'searchTime',
}, },
{ {
type: 'button', type: 'button',

View File

@ -110,7 +110,7 @@ export default {
label: '出入库时间', label: '出入库时间',
dateType: 'daterange', dateType: 'daterange',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd hh:mm:ss', valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-', rangeSeparator: '-',
startPlaceholder: '开始时间', startPlaceholder: '开始时间',
endPlaceholder: '结束时间', endPlaceholder: '结束时间',

View File

@ -14,60 +14,117 @@
<!-- 表单 --> <!-- 表单 -->
<div class="form-cont"> <div class="form-cont">
<el-tabs class="form" v-model="loginForm.loginType" style=" float:none;"> <el-tabs
<el-tab-pane label="账号密码登录" name="uname"> class="form"
</el-tab-pane> v-model="loginForm.loginType"
style="float: none">
<el-tab-pane label="账号密码登录" name="uname"></el-tab-pane>
<!-- <el-tab-pane label="短信验证码登录" name="sms"> <!-- <el-tab-pane label="短信验证码登录" name="sms">
</el-tab-pane> --> </el-tab-pane> -->
</el-tabs> </el-tabs>
<div> <div>
<el-form ref="loginForm" :model="loginForm" :rules="LoginRules" class="login-form"> <el-form
ref="loginForm"
:model="loginForm"
:rules="LoginRules"
class="login-form">
<el-form-item prop="tenantName" v-if="tenantEnable"> <el-form-item prop="tenantName" v-if="tenantEnable">
<el-input v-model="loginForm.tenantName" type="text" auto-complete="off" placeholder='租户'> <el-input
<svg-icon slot="prefix" icon-class="tree" class="el-input__icon input-icon" /> v-model="loginForm.tenantName"
type="text"
auto-complete="off"
placeholder="租户">
<svg-icon
slot="prefix"
icon-class="tree"
class="el-input__icon input-icon" />
</el-input> </el-input>
</el-form-item> </el-form-item>
<!-- 账号密码登录 --> <!-- 账号密码登录 -->
<div v-if="loginForm.loginType === 'uname'"> <div v-if="loginForm.loginType === 'uname'">
<el-form-item prop="username"> <el-form-item prop="username">
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号"> <el-input
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> 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-input>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码" <el-input
v-model="loginForm.password"
type="password"
auto-complete="off"
placeholder="密码"
@keyup.enter.native="getCode"> @keyup.enter.native="getCode">
<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-input>
</el-form-item> </el-form-item>
<el-checkbox v-model="loginForm.rememberMe" style="margin:0 0 25px 0;">记住密码</el-checkbox> <el-checkbox
v-model="loginForm.rememberMe"
style="margin: 0 0 25px 0">
记住密码
</el-checkbox>
</div> </div>
<!-- 短信验证码登录 --> <!-- 短信验证码登录 -->
<div v-if="loginForm.loginType === 'sms'"> <div v-if="loginForm.loginType === 'sms'">
<el-form-item prop="mobile"> <el-form-item prop="mobile">
<el-input v-model="loginForm.mobile" type="text" auto-complete="off" placeholder="请输入手机号"> <el-input
<svg-icon slot="prefix" icon-class="phone" class="el-input__icon input-icon" /> v-model="loginForm.mobile"
type="text"
auto-complete="off"
placeholder="请输入手机号">
<svg-icon
slot="prefix"
icon-class="phone"
class="el-input__icon input-icon" />
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="mobileCode"> <el-form-item prop="mobileCode">
<el-input v-model="loginForm.mobileCode" type="text" auto-complete="off" placeholder="短信验证码" <el-input
class="sms-login-mobile-code-prefix" @keyup.enter.native="handleLogin"> v-model="loginForm.mobileCode"
type="text"
auto-complete="off"
placeholder="短信验证码"
class="sms-login-mobile-code-prefix"
@keyup.enter.native="handleLogin">
<template> <template>
<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" />
</template> </template>
<template slot="append"> <template slot="append">
<span v-if="mobileCodeTimer <= 0" class="getMobileCode" @click="getSmsCode" <span
style="cursor: pointer;">获取验证码</span> v-if="mobileCodeTimer <= 0"
<span v-if="mobileCodeTimer > 0" class="getMobileCode">{{ mobileCodeTimer }}秒后可重新获取</span> class="getMobileCode"
@click="getSmsCode"
style="cursor: pointer">
获取验证码
</span>
<span v-if="mobileCodeTimer > 0" class="getMobileCode">
{{ mobileCodeTimer }}秒后可重新获取
</span>
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
</div> </div>
<!-- 下方的登录按钮 --> <!-- 下方的登录按钮 -->
<el-form-item style="width:100%;"> <el-form-item style="width: 100%">
<el-button :loading="loading" size="medium" type="primary" style="width:100%;" <el-button
:loading="loading"
size="medium"
type="primary"
style="width: 100%"
@click.native.prevent="getCode"> @click.native.prevent="getCode">
<span v-if="!loading"> </span> <span v-if="!loading"> </span>
<span v-else> 中...</span> <span v-else> 中...</span>
@ -90,7 +147,10 @@
</div> </div>
<!-- 图形验证码 --> <!-- 图形验证码 -->
<Verify ref="verify" :captcha-type="'blockPuzzle'" :img-size="{ width: '400px', height: '200px' }" <Verify
ref="verify"
:captcha-type="'blockPuzzle'"
:img-size="{ width: '400px', height: '200px' }"
@success="handleLogin" /> @success="handleLogin" />
<!-- footer --> <!-- footer -->
@ -101,84 +161,95 @@
</template> </template>
<script> <script>
import { sendSmsCode, socialAuthRedirect } from "@/api/login"; import { sendSmsCode, socialAuthRedirect } from '@/api/login';
import { getTenantIdByName } from "@/api/system/tenant"; import { getTenantIdByName } from '@/api/system/tenant';
import { SystemUserSocialTypeEnum } from "@/utils/constants"; import { SystemUserSocialTypeEnum } from '@/utils/constants';
import { getCaptchaEnable, getTenantEnable } from "@/utils/ruoyi"; import { getCaptchaEnable, getTenantEnable } from '@/utils/ruoyi';
import { import {
getPassword, getPassword,
getRememberMe, getTenantName, getRememberMe,
getTenantName,
getUsername, getUsername,
removePassword, removeRememberMe, removeTenantName, removePassword,
removeRememberMe,
removeTenantName,
removeUsername, removeUsername,
setPassword, setRememberMe, setTenantId, setTenantName, setPassword,
setUsername setRememberMe,
} from "@/utils/auth"; setTenantId,
setTenantName,
setUsername,
} from '@/utils/auth';
import Verify from '@/components/Verifition/Verify'; import Verify from '@/components/Verifition/Verify';
import { resetUserPwd } from "@/api/system/user"; import { resetUserPwd } from '@/api/system/user';
export default { export default {
name: "Login", name: 'Login',
components: { components: {
Verify Verify,
}, },
data() { data() {
return { return {
codeUrl: "", codeUrl: '',
captchaEnable: true, captchaEnable: true,
tenantEnable: true, tenantEnable: true,
mobileCodeTimer: 0, mobileCodeTimer: 0,
loginForm: { loginForm: {
loginType: "uname", loginType: 'uname',
username: "admin", username: 'admin',
password: "admin123", password: 'admin123',
captchaVerification: "", captchaVerification: '',
mobile: "", mobile: '',
mobileCode: "", mobileCode: '',
rememberMe: false, rememberMe: false,
tenantName: "芋道源码", tenantName: '芋道源码',
}, },
scene: 21, scene: 21,
LoginRules: { LoginRules: {
username: [ username: [
{ required: true, trigger: "blur", message: "用户名不能为空" } { required: true, trigger: 'blur', message: '用户名不能为空' },
], ],
password: [ password: [
{ required: true, trigger: "blur", message: "密码不能为空" } { required: true, trigger: 'blur', message: '密码不能为空' },
], ],
mobile: [ mobile: [
{ required: true, trigger: "blur", message: "手机号不能为空" }, { required: true, trigger: 'blur', message: '手机号不能为空' },
{ {
validator: function (rule, value, callback) { validator: function (rule, value, callback) {
if (/^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/.test(value) === false) { if (
callback(new Error("手机号格式错误")); /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/.test(
value
) === false
) {
callback(new Error('手机号格式错误'));
} else { } else {
callback(); callback();
} }
}, trigger: "blur" },
} trigger: 'blur',
},
], ],
tenantName: [ tenantName: [
{ required: true, trigger: "blur", message: "租户不能为空" }, { required: true, trigger: 'blur', message: '租户不能为空' },
{ {
validator: (rule, value, callback) => { validator: (rule, value, callback) => {
// debugger // debugger
getTenantIdByName(value).then(res => { getTenantIdByName(value).then((res) => {
const tenantId = res.data; const tenantId = res.data;
if (tenantId && tenantId >= 0) { if (tenantId && tenantId >= 0) {
// //
setTenantId(tenantId) setTenantId(tenantId);
callback(); callback();
} else { } else {
callback('租户不存在'); callback('租户不存在');
} }
}); });
}, },
trigger: 'blur' trigger: 'blur',
} },
] ],
}, },
loading: false, loading: false,
redirect: undefined, redirect: undefined,
@ -190,31 +261,34 @@ export default {
// //
this.tenantEnable = getTenantEnable(); this.tenantEnable = getTenantEnable();
if (this.tenantEnable) { if (this.tenantEnable) {
getTenantIdByName(this.loginForm.tenantName).then(res => { // getTenantIdByName(this.loginForm.tenantName).then((res) => {
//
const tenantId = res.data; const tenantId = res.data;
if (tenantId && tenantId >= 0) { if (tenantId && tenantId >= 0) {
setTenantId(tenantId) setTenantId(tenantId);
} }
}); });
} }
// //
this.captchaEnable = getCaptchaEnable(); this.captchaEnable = getCaptchaEnable();
// //
this.redirect = this.$route.query.redirect ? decodeURIComponent(this.$route.query.redirect) : undefined; this.redirect = this.$route.query.redirect
? decodeURIComponent(this.$route.query.redirect)
: undefined;
this.getCookie(); this.getCookie();
}, },
methods: { methods: {
getCode() { getCode() {
this.captchaEnable = false this.captchaEnable = false;
// //
if (!this.captchaEnable) { if (!this.captchaEnable) {
this.handleLogin({}) this.handleLogin({});
return; return;
} }
// //
// //
this.$refs.verify.show() this.$refs.verify.show();
}, },
getCookie() { getCookie() {
const username = getUsername(); const username = getUsername();
@ -230,29 +304,36 @@ export default {
}; };
}, },
handleLogin(captchaParams) { handleLogin(captchaParams) {
this.$refs.loginForm.validate(valid => { this.$refs.loginForm.validate((valid) => {
if (valid) { if (valid) {
this.loading = true; this.loading = true;
// Cookie // Cookie
if (this.loginForm.rememberMe) { if (this.loginForm.rememberMe) {
setUsername(this.loginForm.username) setUsername(this.loginForm.username);
setPassword(this.loginForm.password) setPassword(this.loginForm.password);
setRememberMe(this.loginForm.rememberMe) setRememberMe(this.loginForm.rememberMe);
setTenantName(this.loginForm.tenantName) setTenantName(this.loginForm.tenantName);
} else { } else {
removeUsername() removeUsername();
removePassword() removePassword();
removeRememberMe() removeRememberMe();
removeTenantName() removeTenantName();
} }
this.loginForm.captchaVerification = captchaParams.captchaVerification this.loginForm.captchaVerification =
captchaParams.captchaVerification;
// //
// console.log("", this.loginForm); // console.log("", this.loginForm);
this.$store.dispatch(this.loginForm.loginType === "sms" ? "SmsLogin" : "Login", this.loginForm).then(() => { this.$store
console.log(this.redirect) .dispatch(
this.$router.push({ path: "/" }).catch(() => { this.loginForm.loginType === 'sms' ? 'SmsLogin' : 'Login',
}); this.loginForm
}).catch(() => { )
.then(() => {
console.log(this.redirect);
this.$store.dispatch('tagsView/delAllVisitedViews');
this.$router.push({ path: '/' }).catch(() => {});
})
.catch(() => {
this.loading = false; this.loading = false;
}); });
} }
@ -263,34 +344,46 @@ export default {
this.loading = true; this.loading = true;
let tenant = false; let tenant = false;
if (this.tenantEnable) { if (this.tenantEnable) {
await this.$prompt('请输入租户名称', "提示", { await this.$prompt('请输入租户名称', '提示', {
confirmButtonText: "确定", confirmButtonText: '确定',
cancelButtonText: "取消" cancelButtonText: '取消',
}).then(async ({ value }) => { })
await getTenantIdByName(value).then(res => { .then(async ({ value }) => {
await getTenantIdByName(value).then((res) => {
const tenantId = res.data; const tenantId = res.data;
tenant = true tenant = true;
if (tenantId && tenantId >= 0) { if (tenantId && tenantId >= 0) {
setTenantId(tenantId) setTenantId(tenantId);
} }
}); });
}).catch(() => { })
.catch(() => {
// loading // loading
this.loading = false; this.loading = false;
return false return false;
}); });
} else { } else {
tenant = true tenant = true;
} }
if (tenant) { if (tenant) {
// redirectUri // redirectUri
const redirectUri = location.origin + '/social-login?' const redirectUri =
+ encodeURIComponent('type=' + socialTypeEnum.type + '&redirect=' + (this.redirect || "/")); // location.origin +
'/social-login?' +
encodeURIComponent(
'type=' +
socialTypeEnum.type +
'&redirect=' +
(this.redirect || '/')
); //
// const redirectUri = 'http://127.0.0.1:48080/api/gitee/callback'; // const redirectUri = 'http://127.0.0.1:48080/api/gitee/callback';
// const redirectUri = 'http://127.0.0.1:48080/api/dingtalk/callback'; // const redirectUri = 'http://127.0.0.1:48080/api/dingtalk/callback';
// //
socialAuthRedirect(socialTypeEnum.type, encodeURIComponent(redirectUri)).then((res) => { socialAuthRedirect(
socialTypeEnum.type,
encodeURIComponent(redirectUri)
).then((res) => {
// console.log(res.url); // console.log(res.url);
window.location.href = res.data; window.location.href = res.data;
}); });
@ -299,10 +392,15 @@ export default {
/** ========== 以下为升级短信登录 ========== */ /** ========== 以下为升级短信登录 ========== */
getSmsCode() { getSmsCode() {
if (this.mobileCodeTimer > 0) return; if (this.mobileCodeTimer > 0) return;
this.$refs.loginForm.validate(valid => { this.$refs.loginForm.validate((valid) => {
if (!valid) return; if (!valid) return;
sendSmsCode(this.loginForm.mobile, this.scene, this.loginForm.uuid, this.loginForm.code).then(res => { sendSmsCode(
this.$modal.msgSuccess("获取验证码成功") this.loginForm.mobile,
this.scene,
this.loginForm.uuid,
this.loginForm.code
).then((res) => {
this.$modal.msgSuccess('获取验证码成功');
this.mobileCodeTimer = 60; this.mobileCodeTimer = 60;
let msgTimer = setInterval(() => { let msgTimer = setInterval(() => {
this.mobileCodeTimer = this.mobileCodeTimer - 1; this.mobileCodeTimer = this.mobileCodeTimer - 1;
@ -312,13 +410,12 @@ export default {
}, 1000); }, 1000);
}); });
}); });
} },
} },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import "~@/assets/styles/login.scss"; @import '~@/assets/styles/login.scss';
.oauth-login { .oauth-login {
display: flex; display: flex;
@ -346,4 +443,5 @@ export default {
:deep(.el-input__prefix) { :deep(.el-input__prefix) {
top: 22%; top: 22%;
} }
}</style> }
</style>

View File

@ -92,7 +92,7 @@ export default {
label: '订单出货日期', label: '订单出货日期',
dateType: 'daterange', dateType: 'daterange',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd hh:mm:ss', valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-', rangeSeparator: '-',
startPlaceholder: '开始时间', startPlaceholder: '开始时间',
endPlaceholder: '结束时间', endPlaceholder: '结束时间',

View File

@ -47,7 +47,7 @@
<dict-tag :type="DICT_TYPE.SYSTEM_ROLE_TYPE" :value="scope.row.type"/> <dict-tag :type="DICT_TYPE.SYSTEM_ROLE_TYPE" :value="scope.row.type"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="显示顺序" prop="sort" width="100" /> <el-table-column label="显示顺序" prop="sort" sortable width="100" />
<el-table-column label="状态" align="center" width="100"> <el-table-column label="状态" align="center" width="100">
<template v-slot="scope"> <template v-slot="scope">
<el-switch v-model="scope.row.status" :active-value="0" :inactive-value="1" @change="handleStatusChange(scope.row)"/> <el-switch v-model="scope.row.status" :active-value="0" :inactive-value="1" @change="handleStatusChange(scope.row)"/>
@ -58,6 +58,7 @@
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template v-slot="scope"> <template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
@ -482,7 +483,7 @@ export default {
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
const queryParams = this.queryParams; const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有角色数据项?').then(function() { this.$modal.confirm('是否确认导出所有角色数据项?').then(()=> {
this.exportLoading = true; this.exportLoading = true;
return exportRole(queryParams); return exportRole(queryParams);
}).then(response => { }).then(response => {

View File

@ -2,28 +2,61 @@
<div class="app-container"> <div class="app-container">
<doc-alert title="SaaS 多租户" url="https://doc.iocoder.cn/saas-tenant/" /> <doc-alert title="SaaS 多租户" url="https://doc.iocoder.cn/saas-tenant/" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px">
<el-form-item label="租户名" prop="name"> <el-form-item label="租户名" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入租户名" clearable @keyup.enter.native="handleQuery"/> <el-input
v-model="queryParams.name"
placeholder="请输入租户名"
clearable
@keyup.enter.native="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="联系人" prop="contactName"> <el-form-item label="联系人" prop="contactName">
<el-input v-model="queryParams.contactName" placeholder="请输入联系人" clearable @keyup.enter.native="handleQuery"/> <el-input
v-model="queryParams.contactName"
placeholder="请输入联系人"
clearable
@keyup.enter.native="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="联系手机" prop="contactMobile"> <el-form-item label="联系手机" prop="contactMobile">
<el-input v-model="queryParams.contactMobile" placeholder="请输入联系手机" clearable @keyup.enter.native="handleQuery"/> <el-input
v-model="queryParams.contactMobile"
placeholder="请输入联系手机"
clearable
@keyup.enter.native="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="租户状态" prop="status"> <el-form-item label="租户状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择租户状态" clearable> <el-select
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)" v-model="queryParams.status"
:key="dict.value" :label="dict.label" :value="dict.value"/> placeholder="请选择租户状态"
clearable>
<el-option
v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="创建时间" prop="createTime"> <el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange" <el-date-picker
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" /> v-model="queryParams.createTime"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="el-icon-search" @click="handleQuery">
搜索
</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -31,14 +64,31 @@
<!-- 操作工具栏 --> <!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" <el-button
v-hasPermi="['system:tenant:create']">新增</el-button> type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:tenant:create']">
新增
</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading" <el-button
v-hasPermi="['system:tenant:export']">导出</el-button> type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['system:tenant:export']">
导出
</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"></right-toolbar>
</el-row> </el-row>
<!-- 列表 --> <!-- 列表 -->
@ -47,7 +97,9 @@
<el-table-column label="租户名" align="center" prop="name" /> <el-table-column label="租户名" align="center" prop="name" />
<el-table-column label="租户套餐" align="center" prop="packageId"> <el-table-column label="租户套餐" align="center" prop="packageId">
<template v-slot="scope"> <template v-slot="scope">
<el-tag v-if="scope.row.packageId === 0" type="danger">系统租户</el-tag> <el-tag v-if="scope.row.packageId === 0" type="danger">
系统租户
</el-tag>
<el-tag v-else>{{ getPackageName(scope.row.packageId) }}</el-tag> <el-tag v-else>{{ getPackageName(scope.row.packageId) }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
@ -58,33 +110,64 @@
<el-tag>{{ scope.row.accountCount }}</el-tag> <el-tag>{{ scope.row.accountCount }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="过期时间" align="center" prop="expireTime" width="180"> <el-table-column
label="过期时间"
align="center"
prop="expireTime"
width="180">
<template v-slot="scope"> <template v-slot="scope">
<span>{{ parseTime(scope.row.expireTime) }}</span> <span>{{ parseTime(scope.row.expireTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="绑定域名" align="center" prop="domain" width="180" /> <el-table-column
label="绑定域名"
align="center"
prop="domain"
width="180" />
<el-table-column label="租户状态" align="center" prop="status"> <el-table-column label="租户状态" align="center" prop="status">
<template v-slot="scope"> <template v-slot="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" /> <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> <el-table-column
label="创建时间"
align="center"
prop="createTime"
width="180">
<template v-slot="scope"> <template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width">
<template v-slot="scope"> <template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" <el-button
v-hasPermi="['system:tenant:update']">修改</el-button> size="mini"
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" type="text"
v-hasPermi="['system:tenant:delete']">删除</el-button> icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:tenant:update']">
修改
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:tenant:delete']">
删除
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" <pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList" /> @pagination="getList" />
<!-- 对话框(添加 / 修改) --> <!-- 对话框(添加 / 修改) -->
@ -94,8 +177,16 @@
<el-input v-model="form.name" placeholder="请输入租户名" /> <el-input v-model="form.name" placeholder="请输入租户名" />
</el-form-item> </el-form-item>
<el-form-item label="租户套餐" prop="packageId"> <el-form-item label="租户套餐" prop="packageId">
<el-select v-model="form.packageId" placeholder="请选择租户套餐" clearable size="small"> <el-select
<el-option v-for="item in packageList" :key="item.id" :label="item.name" :value="item.id"/> v-model="form.packageId"
placeholder="请选择租户套餐"
clearable
size="small">
<el-option
v-for="item in packageList"
:key="item.id"
:label="item.name"
:value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="联系人" prop="contactName"> <el-form-item label="联系人" prop="contactName">
@ -104,26 +195,49 @@
<el-form-item label="联系手机" prop="contactMobile"> <el-form-item label="联系手机" prop="contactMobile">
<el-input v-model="form.contactMobile" placeholder="请输入联系手机" /> <el-input v-model="form.contactMobile" placeholder="请输入联系手机" />
</el-form-item> </el-form-item>
<el-form-item v-if="form.id === undefined" label="用户名称" prop="username"> <el-form-item
v-if="form.id === undefined"
label="用户名称"
prop="username">
<el-input v-model="form.username" placeholder="请输入用户名称" /> <el-input v-model="form.username" placeholder="请输入用户名称" />
</el-form-item> </el-form-item>
<el-form-item v-if="form.id === undefined" label="用户密码" prop="password"> <el-form-item
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" show-password /> v-if="form.id === undefined"
label="用户密码"
prop="password">
<el-input
v-model="form.password"
placeholder="请输入用户密码"
type="password"
show-password />
</el-form-item> </el-form-item>
<el-form-item label="账号额度" prop="accountCount"> <el-form-item label="账号额度" prop="accountCount">
<el-input-number v-model="form.accountCount" placeholder="请输入账号额度" controls-position="right" :min="0" /> <el-input-number
v-model="form.accountCount"
placeholder="请输入账号额度"
controls-position="right"
:min="0" />
</el-form-item> </el-form-item>
<el-form-item label="过期时间" prop="expireTime"> <el-form-item label="过期时间" prop="expireTime">
<el-date-picker clearable size="small" v-model="form.expireTime" type="date" <el-date-picker
value-format="timestamp" placeholder="请选择过期时间" /> clearable
size="small"
v-model="form.expireTime"
type="date"
value-format="timestamp"
placeholder="请选择过期时间" />
</el-form-item> </el-form-item>
<el-form-item label="绑定域名" prop="domain"> <el-form-item label="绑定域名" prop="domain">
<el-input v-model="form.domain" placeholder="请输入绑定域名" /> <el-input v-model="form.domain" placeholder="请输入绑定域名" />
</el-form-item> </el-form-item>
<el-form-item label="租户状态" prop="status"> <el-form-item label="租户状态" prop="status">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)" <el-radio
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio> v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:label="parseInt(dict.value)">
{{ dict.label }}
</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -136,14 +250,20 @@
</template> </template>
<script> <script>
import { createTenant, updateTenant, deleteTenant, getTenant, getTenantPage, exportTenantExcel } from "@/api/system/tenant"; import {
import { CommonStatusEnum } from '@/utils/constants' createTenant,
import {getTenantPackageList} from "@/api/system/tenantPackage"; updateTenant,
deleteTenant,
getTenant,
getTenantPage,
exportTenantExcel,
} from '@/api/system/tenant';
import { CommonStatusEnum } from '@/utils/constants';
import { getTenantPackageList } from '@/api/system/tenantPackage';
export default { export default {
name: "SystemTenant", name: 'SystemTenant',
components: { components: {},
},
data() { data() {
return { return {
// //
@ -159,7 +279,7 @@ export default {
// //
packageList: [], packageList: [],
// //
title: "", title: '',
// //
open: false, open: false,
// //
@ -170,37 +290,49 @@ export default {
contactName: null, contactName: null,
contactMobile: null, contactMobile: null,
status: undefined, status: undefined,
createTime: [] createTime: [],
}, },
// //
form: {}, form: {},
// //
rules: { rules: {
name: [{ required: true, message: "租户名不能为空", trigger: "blur" }], name: [{ required: true, message: '租户名不能为空', trigger: 'blur' }],
packageId: [{ required: true, message: "租户套餐不能为空", trigger: "blur" }], packageId: [
contactName: [{ required: true, message: "联系人不能为空", trigger: "blur" }], { required: true, message: '租户套餐不能为空', trigger: 'blur' },
status: [{ required: true, message: "租户状态不能为空", trigger: "blur" }], ],
accountCount: [{ required: true, message: "账号额度不能为空", trigger: "blur" }], contactName: [
expireTime: [{ required: true, message: "过期时间不能为空", trigger: "blur" }], { required: true, message: '联系人不能为空', trigger: 'blur' },
domain: [{ required: true, message: "绑定域名不能为空", trigger: "blur" }], ],
username: [{ required: true, message: "用户名称不能为空", trigger: "blur" }], status: [
password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }], { required: true, message: '租户状态不能为空', trigger: 'blur' },
} ],
accountCount: [
{ required: true, message: '账号额度不能为空', trigger: 'blur' },
],
expireTime: [
{ required: true, message: '过期时间不能为空', trigger: 'blur' },
],
domain: [
{ required: true, message: '绑定域名不能为空', trigger: 'blur' },
],
username: [
{ required: true, message: '用户名称不能为空', trigger: 'blur' },
],
password: [
{ required: true, message: '用户密码不能为空', trigger: 'blur' },
],
},
}; };
}, },
created() { created() {
this.getList(); this.getList();
//
getTenantPackageList().then(response => {
this.packageList = response.data;
})
}, },
methods: { methods: {
/** 查询列表 */ /** 查询列表 */
getList() { getList() {
this.loading = true; this.loading = true;
// //
getTenantPage(this.queryParams).then(response => { getTenantPage(this.queryParams).then((response) => {
this.list = response.data.list; this.list = response.data.list;
this.total = response.data.total; this.total = response.data.total;
this.loading = false; this.loading = false;
@ -224,7 +356,7 @@ export default {
domain: undefined, domain: undefined,
status: CommonStatusEnum.ENABLE, status: CommonStatusEnum.ENABLE,
}; };
this.resetForm("form"); this.resetForm('form');
}, },
/** 搜索按钮操作 */ /** 搜索按钮操作 */
handleQuery() { handleQuery() {
@ -233,43 +365,49 @@ export default {
}, },
/** 重置按钮操作 */ /** 重置按钮操作 */
resetQuery() { resetQuery() {
this.resetForm("queryForm"); this.resetForm('queryForm');
this.handleQuery(); this.handleQuery();
}, },
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd() { handleAdd() {
this.reset(); this.reset();
//
getTenantPackageList().then((response) => {
this.packageList = response.data;
});
this.$nextTick(() => {
this.open = true; this.open = true;
this.title = "添加租户"; this.title = '添加租户';
});
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
this.reset(); this.reset();
const id = row.id; const id = row.id;
getTenant(id).then(response => { getTenant(id).then((response) => {
this.form = response.data; this.form = response.data;
this.open = true; this.open = true;
this.title = "修改租户"; this.title = '修改租户';
}); });
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm() { submitForm() {
this.$refs["form"].validate(valid => { this.$refs['form'].validate((valid) => {
if (!valid) { if (!valid) {
return; return;
} }
// //
if (this.form.id != null) { if (this.form.id != null) {
updateTenant(this.form).then(response => { updateTenant(this.form).then((response) => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess('修改成功');
this.open = false; this.open = false;
this.getList(); this.getList();
}); });
return; return;
} }
// //
createTenant(this.form).then(response => { createTenant(this.form).then((response) => {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess('新增成功');
this.open = false; this.open = false;
this.getList(); this.getList();
}); });
@ -278,12 +416,16 @@ export default {
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const id = row.id; const id = row.id;
this.$modal.confirm('是否确认删除租户编号为"' + id + '"的数据项?').then(function() { this.$modal
.confirm('是否确认删除租户编号为"' + id + '"的数据项?')
.then(function () {
return deleteTenant(id); return deleteTenant(id);
}).then(() => { })
.then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess('删除成功');
}).catch(() => {}); })
.catch(() => {});
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
@ -292,13 +434,17 @@ export default {
params.pageNo = undefined; params.pageNo = undefined;
params.pageSize = undefined; params.pageSize = undefined;
// //
this.$modal.confirm('是否确认导出所有租户数据项?').then(() => { this.$modal
.confirm('是否确认导出所有租户数据项?')
.then(() => {
this.exportLoading = true; this.exportLoading = true;
return exportTenantExcel(params); return exportTenantExcel(params);
}).then(response => { })
.then((response) => {
this.$download.excel(response, '租户.xls'); this.$download.excel(response, '租户.xls');
this.exportLoading = false; this.exportLoading = false;
}).catch(() => {}); })
.catch(() => {});
}, },
/** 套餐名格式化 */ /** 套餐名格式化 */
getPackageName(packageId) { getPackageName(packageId) {
@ -308,7 +454,7 @@ export default {
} }
} }
return '未知套餐'; return '未知套餐';
} },
} },
}; };
</script> </script>

View File

@ -18,8 +18,8 @@
<!--用户数据--> <!--用户数据-->
<el-col :span="20" :xs="24"> <el-col :span="20" :xs="24">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户名称" prop="username"> <el-form-item label="用户账号" prop="username">
<el-input v-model="queryParams.username" placeholder="请输入用户名称" clearable style="width: 240px" <el-input v-model="queryParams.username" placeholder="请输入用户账号" clearable style="width: 240px"
@keyup.enter.native="handleQuery"/> @keyup.enter.native="handleQuery"/>
</el-form-item> </el-form-item>
<el-form-item label="手机号码" prop="mobile"> <el-form-item label="手机号码" prop="mobile">
@ -59,7 +59,7 @@
<el-table v-loading="loading" :data="userList"> <el-table v-loading="loading" :data="userList">
<el-table-column label="用户编号" align="center" key="id" prop="id" v-if="columns[0].visible" /> <el-table-column label="用户编号" align="center" key="id" prop="id" v-if="columns[0].visible" />
<el-table-column label="用户名称" align="center" key="username" prop="username" v-if="columns[1].visible" :show-overflow-tooltip="true" /> <el-table-column label="用户账号" align="center" key="username" prop="username" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" align="center" key="nickname" prop="nickname" v-if="columns[2].visible" :show-overflow-tooltip="true" /> <el-table-column label="用户昵称" align="center" key="nickname" prop="nickname" v-if="columns[2].visible" :show-overflow-tooltip="true" />
<el-table-column label="部门" align="center" key="deptName" prop="dept.name" v-if="columns[3].visible" :show-overflow-tooltip="true" /> <el-table-column label="部门" align="center" key="deptName" prop="dept.name" v-if="columns[3].visible" :show-overflow-tooltip="true" />
<el-table-column label="手机号码" align="center" key="mobile" prop="mobile" v-if="columns[4].visible" width="120" /> <el-table-column label="手机号码" align="center" key="mobile" prop="mobile" v-if="columns[4].visible" width="120" />
@ -128,8 +128,8 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item v-if="form.id === undefined" label="用户名称" prop="username"> <el-form-item v-if="form.id === undefined" label="用户账号" prop="username">
<el-input v-model="form.username" placeholder="请输入用户名称" /> <el-input v-model="form.username" placeholder="请输入用户账号" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -197,7 +197,7 @@
<!-- 分配角色 --> <!-- 分配角色 -->
<el-dialog title="分配角色" :visible.sync="openRole" width="500px" append-to-body> <el-dialog title="分配角色" :visible.sync="openRole" width="500px" append-to-body>
<el-form :model="form" label-width="80px"> <el-form :model="form" label-width="80px">
<el-form-item label="用户名称"> <el-form-item label="用户账号">
<el-input v-model="form.username" :disabled="true" /> <el-input v-model="form.username" :disabled="true" />
</el-form-item> </el-form-item>
<el-form-item label="用户昵称"> <el-form-item label="用户昵称">
@ -312,7 +312,7 @@ export default {
// //
columns: [ columns: [
{ key: 0, label: `用户编号`, visible: true }, { key: 0, label: `用户编号`, visible: true },
{ key: 1, label: `用户名称`, visible: true }, { key: 1, label: `用户账号`, visible: true },
{ key: 2, label: `用户昵称`, visible: true }, { key: 2, label: `用户昵称`, visible: true },
{ key: 3, label: `部门`, visible: true }, { key: 3, label: `部门`, visible: true },
{ key: 4, label: `手机号码`, visible: true }, { key: 4, label: `手机号码`, visible: true },
@ -322,7 +322,7 @@ export default {
// //
rules: { rules: {
username: [ username: [
{ required: true, message: "用户名称不能为空", trigger: "blur" } { required: true, message: "用户账号不能为空", trigger: "blur" }
], ],
nickname: [ nickname: [
{ required: true, message: "用户昵称不能为空", trigger: "blur" } { required: true, message: "用户昵称不能为空", trigger: "blur" }

View File

@ -12,7 +12,7 @@
</div> --> </div> -->
<ul class="list-group list-group-striped"> <ul class="list-group list-group-striped">
<li class="list-group-item"> <li class="list-group-item">
<svg-icon icon-class="user" />用户名称 <svg-icon icon-class="user" />用户账号
<div class="pull-right">{{ user.username }}</div> <div class="pull-right">{{ user.username }}</div>
</li> </li>
<li class="list-group-item"> <li class="list-group-item">