Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
basic-vue-admin
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Basic
basic-vue-admin
Commits
bb89c505
提交
bb89c505
authored
8月 12, 2021
作者:
vben
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor(sys): change to setup syntax
上级
66feb779
隐藏空白字符变更
内嵌
并排
正在显示
19 个修改的文件
包含
384 行增加
和
666 行删除
+384
-666
.eslintrc.js
.eslintrc.js
+1
-1
App.vue
src/App.vue
+4
-13
BasicButton.vue
src/components/Button/src/BasicButton.vue
+2
-2
index.vue
src/views/sys/about/index.vue
+65
-74
DetailModal.vue
src/views/sys/error-log/DetailModal.vue
+11
-25
index.vue
src/views/sys/error-log/index.vue
+46
-71
Exception.vue
src/views/sys/exception/Exception.vue
+0
-5
index.vue
src/views/sys/iframe/index.vue
+32
-48
LockPage.vue
src/views/sys/lock/LockPage.vue
+38
-61
index.vue
src/views/sys/lock/index.vue
+5
-12
ForgetPasswordForm.vue
src/views/sys/login/ForgetPasswordForm.vue
+19
-44
Login.vue
src/views/sys/login/Login.vue
+12
-33
LoginForm.vue
src/views/sys/login/LoginForm.vue
+56
-88
LoginFormTitle.vue
src/views/sys/login/LoginFormTitle.vue
+13
-23
MobileForm.vue
src/views/sys/login/MobileForm.vue
+19
-44
QrCodeForm.vue
src/views/sys/login/QrCodeForm.vue
+5
-24
RegisterForm.vue
src/views/sys/login/RegisterForm.vue
+24
-51
SessionTimeoutLogin.vue
src/views/sys/login/SessionTimeoutLogin.vue
+23
-31
index.vue
src/views/sys/redirect/index.vue
+9
-16
没有找到文件。
.eslintrc.js
浏览文件 @
bb89c505
...
@@ -25,6 +25,7 @@ module.exports = defineConfig({
...
@@ -25,6 +25,7 @@ module.exports = defineConfig({
'plugin:jest/recommended'
,
'plugin:jest/recommended'
,
],
],
rules
:
{
rules
:
{
'vue/script-setup-uses-vars'
:
'error'
,
'@typescript-eslint/ban-ts-ignore'
:
'off'
,
'@typescript-eslint/ban-ts-ignore'
:
'off'
,
'@typescript-eslint/explicit-function-return-type'
:
'off'
,
'@typescript-eslint/explicit-function-return-type'
:
'off'
,
'@typescript-eslint/no-explicit-any'
:
'off'
,
'@typescript-eslint/no-explicit-any'
:
'off'
,
...
@@ -61,7 +62,6 @@ module.exports = defineConfig({
...
@@ -61,7 +62,6 @@ module.exports = defineConfig({
'vue/singleline-html-element-content-newline'
:
'off'
,
'vue/singleline-html-element-content-newline'
:
'off'
,
'vue/attribute-hyphenation'
:
'off'
,
'vue/attribute-hyphenation'
:
'off'
,
'vue/require-default-prop'
:
'off'
,
'vue/require-default-prop'
:
'off'
,
'vue/script-setup-uses-vars'
:
'off'
,
'vue/html-self-closing'
:
[
'vue/html-self-closing'
:
[
'error'
,
'error'
,
{
{
...
...
src/App.vue
浏览文件 @
bb89c505
...
@@ -6,23 +6,14 @@
...
@@ -6,23 +6,14 @@
</ConfigProvider>
</ConfigProvider>
</
template
>
</
template
>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
defineComponent
}
from
'vue'
;
import
{
ConfigProvider
}
from
'ant-design-vue'
;
import
{
ConfigProvider
}
from
'ant-design-vue'
;
import
{
AppProvider
}
from
'/@/components/Application'
;
import
{
AppProvider
}
from
'/@/components/Application'
;
import
{
useTitle
}
from
'/@/hooks/web/useTitle'
;
import
{
useTitle
}
from
'/@/hooks/web/useTitle'
;
import
{
useLocale
}
from
'/@/locales/useLocale'
;
import
{
useLocale
}
from
'/@/locales/useLocale'
;
export
default
defineComponent
({
// support Multi-language
name
:
'App'
,
const
{
getAntdLocale
}
=
useLocale
();
components
:
{
ConfigProvider
,
AppProvider
},
setup
()
{
useTitle
();
// support Multi-language
useTitle
();
const
{
getAntdLocale
}
=
useLocale
();
return
{
getAntdLocale
};
},
});
</
script
>
</
script
>
src/components/Button/src/BasicButton.vue
浏览文件 @
bb89c505
<
template
>
<
template
>
<Button
v-bind=
"getBindValue"
:class=
"getButtonClass"
@
click=
"onClick"
>
<Button
v-bind=
"getBindValue"
:class=
"getButtonClass"
@
click=
"onClick"
>
<template
#
default
=
"data"
>
<template
#
default
>
<Icon
:icon=
"preIcon"
v-if=
"preIcon"
:size=
"iconSize"
/>
<Icon
:icon=
"preIcon"
v-if=
"preIcon"
:size=
"iconSize"
/>
<slot
v-bind=
"data"
></slot>
<slot></slot>
<Icon
:icon=
"postIcon"
v-if=
"postIcon"
:size=
"iconSize"
/>
<Icon
:icon=
"postIcon"
v-if=
"postIcon"
:size=
"iconSize"
/>
</
template
>
</
template
>
</Button>
</Button>
...
...
src/views/sys/about/index.vue
浏览文件 @
bb89c505
...
@@ -14,94 +14,85 @@
...
@@ -14,94 +14,85 @@
<Description
@
register=
"registerDev"
class=
"enter-y"
/>
<Description
@
register=
"registerDev"
class=
"enter-y"
/>
</PageWrapper>
</PageWrapper>
</template>
</template>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
defineComponent
,
h
}
from
'vue'
;
import
{
h
}
from
'vue'
;
import
{
Tag
}
from
'ant-design-vue'
;
import
{
Tag
}
from
'ant-design-vue'
;
import
{
PageWrapper
}
from
'/@/components/Page'
;
import
{
PageWrapper
}
from
'/@/components/Page'
;
import
{
Description
,
DescItem
,
useDescription
}
from
'/@/components/Description/index'
;
import
{
Description
,
DescItem
,
useDescription
}
from
'/@/components/Description/index'
;
import
{
GITHUB_URL
,
SITE_URL
,
DOC_URL
}
from
'/@/settings/siteSetting'
;
import
{
GITHUB_URL
,
SITE_URL
,
DOC_URL
}
from
'/@/settings/siteSetting'
;
export
default
defineComponent
({
name
:
'AboutPage'
,
components
:
{
Description
,
PageWrapper
},
setup
()
{
const
{
pkg
,
lastBuildTime
}
=
__APP_INFO__
;
const
{
dependencies
,
devDependencies
,
name
,
version
}
=
pkg
;
const
{
pkg
,
lastBuildTime
}
=
__APP_INFO__
;
const
schema
:
DescItem
[]
=
[];
const
{
dependencies
,
devDependencies
,
name
,
version
}
=
pkg
;
const
devSchema
:
DescItem
[]
=
[];
const
commonTagRender
=
(
color
:
string
)
=>
(
curVal
)
=>
h
(
Tag
,
{
color
},
()
=>
curVal
)
;
const
schema
:
DescItem
[]
=
[]
;
const
commonLinkRender
=
(
text
:
string
)
=>
(
href
)
=>
h
(
'a'
,
{
href
,
target
:
'_blank'
},
text
)
;
const
devSchema
:
DescItem
[]
=
[]
;
const
infoSchema
:
DescItem
[]
=
[
const
commonTagRender
=
(
color
:
string
)
=>
(
curVal
)
=>
h
(
Tag
,
{
color
},
()
=>
curVal
);
{
const
commonLinkRender
=
(
text
:
string
)
=>
(
href
)
=>
h
(
'a'
,
{
href
,
target
:
'_blank'
},
text
);
label
:
'版本'
,
field
:
'version'
,
render
:
commonTagRender
(
'blue'
),
},
{
label
:
'最后编译时间'
,
field
:
'lastBuildTime'
,
render
:
commonTagRender
(
'blue'
),
},
{
label
:
'文档地址'
,
field
:
'doc'
,
render
:
commonLinkRender
(
'文档地址'
),
},
{
label
:
'预览地址'
,
field
:
'preview'
,
render
:
commonLinkRender
(
'预览地址'
),
},
{
label
:
'Github'
,
field
:
'github'
,
render
:
commonLinkRender
(
'Github'
),
},
];
const
infoData
=
{
const
infoSchema
:
DescItem
[]
=
[
version
,
{
lastBuildTime
,
label
:
'版本'
,
doc
:
DOC_URL
,
field
:
'version'
,
preview
:
SITE_URL
,
render
:
commonTagRender
(
'blue'
),
github
:
GITHUB_URL
,
},
};
{
label
:
'最后编译时间'
,
field
:
'lastBuildTime'
,
render
:
commonTagRender
(
'blue'
),
},
{
label
:
'文档地址'
,
field
:
'doc'
,
render
:
commonLinkRender
(
'文档地址'
),
},
{
label
:
'预览地址'
,
field
:
'preview'
,
render
:
commonLinkRender
(
'预览地址'
),
},
{
label
:
'Github'
,
field
:
'github'
,
render
:
commonLinkRender
(
'Github'
),
},
];
Object
.
keys
(
dependencies
).
forEach
((
key
)
=>
{
const
infoData
=
{
schema
.
push
({
field
:
key
,
label
:
key
});
version
,
});
lastBuildTime
,
doc
:
DOC_URL
,
preview
:
SITE_URL
,
github
:
GITHUB_URL
,
};
Object
.
keys
(
devD
ependencies
).
forEach
((
key
)
=>
{
Object
.
keys
(
d
ependencies
).
forEach
((
key
)
=>
{
devS
chema
.
push
({
field
:
key
,
label
:
key
});
s
chema
.
push
({
field
:
key
,
label
:
key
});
});
});
const
[
register
]
=
useDescription
({
Object
.
keys
(
devDependencies
).
forEach
((
key
)
=>
{
title
:
'生产环境依赖'
,
devSchema
.
push
({
field
:
key
,
label
:
key
});
data
:
dependencies
,
});
schema
:
schema
,
column
:
3
,
});
const
[
registerDev
]
=
useDescription
({
const
[
register
]
=
useDescription
({
title
:
'开发
环境依赖'
,
title
:
'生产
环境依赖'
,
data
:
devD
ependencies
,
data
:
d
ependencies
,
schema
:
devS
chema
,
schema
:
s
chema
,
column
:
3
,
column
:
3
,
});
});
const
[
infoRegister
]
=
useDescription
({
const
[
registerDev
]
=
useDescription
({
title
:
'项目信息
'
,
title
:
'开发环境依赖
'
,
data
:
infoData
,
data
:
devDependencies
,
schema
:
info
Schema
,
schema
:
dev
Schema
,
column
:
2
,
column
:
3
,
});
});
return
{
register
,
registerDev
,
infoRegister
,
name
,
GITHUB_URL
};
const
[
infoRegister
]
=
useDescription
({
},
title
:
'项目信息'
,
data
:
infoData
,
schema
:
infoSchema
,
column
:
2
,
});
});
</
script
>
</
script
>
src/views/sys/error-log/DetailModal.vue
浏览文件 @
bb89c505
...
@@ -3,40 +3,26 @@
...
@@ -3,40 +3,26 @@
<Description
:data=
"info"
@
register=
"register"
/>
<Description
:data=
"info"
@
register=
"register"
/>
</BasicModal>
</BasicModal>
</
template
>
</
template
>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
type
{
PropType
}
from
'vue'
;
import
type
{
PropType
}
from
'vue'
;
import
type
{
ErrorLogInfo
}
from
'/#/store'
;
import
type
{
ErrorLogInfo
}
from
'/#/store'
;
import
{
defineProps
}
from
'vue'
;
import
{
defineComponent
}
from
'vue'
;
import
{
BasicModal
}
from
'/@/components/Modal/index'
;
import
{
BasicModal
}
from
'/@/components/Modal/index'
;
import
{
Description
,
useDescription
}
from
'/@/components/Description/index'
;
import
{
Description
,
useDescription
}
from
'/@/components/Description/index'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
getDescSchema
}
from
'./data'
;
import
{
getDescSchema
}
from
'./data'
;
export
default
defineComponent
({
defineProps
({
name
:
'ErrorLogDetailModal'
,
info
:
{
components
:
{
BasicModal
,
Description
},
type
:
Object
as
PropType
<
ErrorLogInfo
>
,
props
:
{
default
:
null
,
info
:
{
type
:
Object
as
PropType
<
ErrorLogInfo
>
,
default
:
null
,
},
},
},
setup
()
{
});
const
{
t
}
=
useI18n
();
const
[
register
]
=
useDescription
({
const
{
t
}
=
useI18n
();
column
:
2
,
schema
:
getDescSchema
()
!
,
});
return
{
const
[
register
]
=
useDescription
({
register
,
column
:
2
,
useI18n
,
schema
:
getDescSchema
()
!
,
t
,
};
},
});
});
</
script
>
</
script
>
src/views/sys/error-log/index.vue
浏览文件 @
bb89c505
...
@@ -27,91 +27,66 @@
...
@@ -27,91 +27,66 @@
</div>
</div>
</template>
</template>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
type
{
ErrorLogInfo
}
from
'/#/store'
;
import
type
{
ErrorLogInfo
}
from
'/#/store'
;
import
{
watch
,
ref
,
nextTick
}
from
'vue'
;
import
{
defineComponent
,
watch
,
ref
,
nextTick
}
from
'vue'
;
import
DetailModal
from
'./DetailModal.vue'
;
import
DetailModal
from
'./DetailModal.vue'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'/@/components/Table/index'
;
import
{
BasicTable
,
useTable
,
TableAction
}
from
'/@/components/Table/index'
;
import
{
useModal
}
from
'/@/components/Modal'
;
import
{
useModal
}
from
'/@/components/Modal'
;
import
{
useMessage
}
from
'/@/hooks/web/useMessage'
;
import
{
useMessage
}
from
'/@/hooks/web/useMessage'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useErrorLogStore
}
from
'/@/store/modules/errorLog'
;
import
{
useErrorLogStore
}
from
'/@/store/modules/errorLog'
;
import
{
fireErrorApi
}
from
'/@/api/demo/error'
;
import
{
fireErrorApi
}
from
'/@/api/demo/error'
;
import
{
getColumns
}
from
'./data'
;
import
{
getColumns
}
from
'./data'
;
import
{
cloneDeep
}
from
'lodash-es'
;
import
{
cloneDeep
}
from
'lodash-es'
;
export
default
defineComponent
({
const
rowInfo
=
ref
<
ErrorLogInfo
>
();
name
:
'ErrorHandler'
,
const
imgList
=
ref
<
string
[]
>
([]);
components
:
{
DetailModal
,
BasicTable
,
TableAction
},
setup
()
{
const
rowInfo
=
ref
<
ErrorLogInfo
>
();
const
imgList
=
ref
<
string
[]
>
([]);
const
{
t
}
=
useI18n
();
const
{
t
}
=
useI18n
();
const
errorLogStore
=
useErrorLogStore
();
const
errorLogStore
=
useErrorLogStore
();
const
[
register
,
{
setTableData
}]
=
useTable
({
const
[
register
,
{
setTableData
}]
=
useTable
({
title
:
t
(
'sys.errorLog.tableTitle'
),
title
:
t
(
'sys.errorLog.tableTitle'
),
columns
:
getColumns
(),
columns
:
getColumns
(),
actionColumn
:
{
actionColumn
:
{
width
:
80
,
width
:
80
,
title
:
'Action'
,
title
:
'Action'
,
dataIndex
:
'action'
,
dataIndex
:
'action'
,
slots
:
{
customRender
:
'action'
},
slots
:
{
customRender
:
'action'
},
},
},
});
});
const
[
registerModal
,
{
openModal
}]
=
useModal
();
const
[
registerModal
,
{
openModal
}]
=
useModal
();
watch
(
()
=>
errorLogStore
.
getErrorLogInfoList
,
(
list
)
=>
{
nextTick
(()
=>
{
setTableData
(
cloneDeep
(
list
));
});
},
{
immediate
:
true
,
}
);
const
{
createMessage
}
=
useMessage
();
if
(
import
.
meta
.
env
.
DEV
)
{
createMessage
.
info
(
t
(
'sys.errorLog.enableMessage'
));
}
// 查看详情
function
handleDetail
(
row
:
ErrorLogInfo
)
{
rowInfo
.
value
=
row
;
openModal
(
true
);
}
function
fireVueError
()
{
watch
(
throw
new
Error
(
'fire vue error!'
);
()
=>
errorLogStore
.
getErrorLogInfoList
,
}
(
list
)
=>
{
nextTick
(()
=>
{
setTableData
(
cloneDeep
(
list
));
});
},
{
immediate
:
true
,
}
);
const
{
createMessage
}
=
useMessage
();
if
(
import
.
meta
.
env
.
DEV
)
{
createMessage
.
info
(
t
(
'sys.errorLog.enableMessage'
));
}
// 查看详情
function
handleDetail
(
row
:
ErrorLogInfo
)
{
rowInfo
.
value
=
row
;
openModal
(
true
);
}
function
fireResourc
eError
()
{
function
fireVu
eError
()
{
imgList
.
value
.
push
(
`
${
new
Date
().
getTime
()}
.png`
);
throw
new
Error
(
'fire vue error!'
);
}
}
async
function
fireAjax
Error
()
{
function
fireResource
Error
()
{
await
fireErrorApi
(
);
imgList
.
value
.
push
(
`
${
new
Date
().
getTime
()}
.png`
);
}
}
return
{
async
function
fireAjaxError
()
{
register
,
await
fireErrorApi
();
registerModal
,
}
handleDetail
,
fireVueError
,
fireResourceError
,
fireAjaxError
,
imgList
,
rowInfo
,
t
,
};
},
});
</
script
>
</
script
>
src/views/sys/exception/Exception.vue
浏览文件 @
bb89c505
<
script
lang=
"tsx"
>
<
script
lang=
"tsx"
>
import
type
{
PropType
}
from
'vue'
;
import
type
{
PropType
}
from
'vue'
;
import
{
Result
,
Button
}
from
'ant-design-vue'
;
import
{
Result
,
Button
}
from
'ant-design-vue'
;
import
{
defineComponent
,
ref
,
computed
,
unref
}
from
'vue'
;
import
{
defineComponent
,
ref
,
computed
,
unref
}
from
'vue'
;
import
{
ExceptionEnum
}
from
'/@/enums/exceptionEnum'
;
import
{
ExceptionEnum
}
from
'/@/enums/exceptionEnum'
;
import
notDataSvg
from
'/@/assets/svg/no-data.svg'
;
import
notDataSvg
from
'/@/assets/svg/no-data.svg'
;
import
netWorkSvg
from
'/@/assets/svg/net-error.svg'
;
import
netWorkSvg
from
'/@/assets/svg/net-error.svg'
;
import
{
useRoute
}
from
'vue-router'
;
import
{
useRoute
}
from
'vue-router'
;
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useGo
,
useRedo
}
from
'/@/hooks/web/usePage'
;
import
{
useGo
,
useRedo
}
from
'/@/hooks/web/usePage'
;
import
{
PageEnum
}
from
'/@/enums/pageEnum'
;
import
{
PageEnum
}
from
'/@/enums/pageEnum'
;
interface
MapValue
{
interface
MapValue
{
...
...
src/views/sys/iframe/index.vue
浏览文件 @
bb89c505
...
@@ -10,66 +10,50 @@
...
@@ -10,66 +10,50 @@
</Spin>
</Spin>
</div>
</div>
</
template
>
</
template
>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
type
{
CSSProperties
}
from
'vue'
;
import
type
{
CSSProperties
}
from
'vue'
;
import
{
defineComponent
,
ref
,
unref
,
computed
}
from
'vue'
;
import
{
ref
,
unref
,
computed
,
defineProps
}
from
'vue'
;
import
{
Spin
}
from
'ant-design-vue'
;
import
{
Spin
}
from
'ant-design-vue'
;
import
{
useWindowSizeFn
}
from
'/@/hooks/event/useWindowSizeFn'
;
import
{
useWindowSizeFn
}
from
'/@/hooks/event/useWindowSizeFn'
;
import
{
propTypes
}
from
'/@/utils/propTypes'
;
import
{
propTypes
}
from
'/@/utils/propTypes'
;
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
import
{
useLayoutHeight
}
from
'/@/layouts/default/content/useContentViewHeight'
;
import
{
useLayoutHeight
}
from
'/@/layouts/default/content/useContentViewHeight'
;
export
default
defineComponent
({
defineProps
({
name
:
'IFrame'
,
frameSrc
:
propTypes
.
string
.
def
(
''
),
components
:
{
Spin
},
});
props
:
{
frameSrc
:
propTypes
.
string
.
def
(
''
),
},
setup
()
{
const
loading
=
ref
(
true
);
const
topRef
=
ref
(
50
);
const
heightRef
=
ref
(
window
.
innerHeight
);
const
frameRef
=
ref
<
HTMLFrameElement
>
();
const
{
headerHeightRef
}
=
useLayoutHeight
();
const
{
prefixCls
}
=
useDesign
(
'iframe-page'
);
useWindowSizeFn
(
calcHeight
,
150
,
{
immediate
:
true
});
const
getWrapStyle
=
computed
(():
CSSProperties
=>
{
const
loading
=
ref
(
true
);
return
{
const
topRef
=
ref
(
50
);
height
:
`
${
unref
(
heightRef
)}
px`
,
const
heightRef
=
ref
(
window
.
innerHeight
);
}
;
const
frameRef
=
ref
<
HTMLFrameElement
>
()
;
}
);
const
{
headerHeightRef
}
=
useLayoutHeight
(
);
function
calcHeight
()
{
const
{
prefixCls
}
=
useDesign
(
'iframe-page'
);
const
iframe
=
unref
(
frameRef
);
useWindowSizeFn
(
calcHeight
,
150
,
{
immediate
:
true
});
if
(
!
iframe
)
{
return
;
}
const
top
=
headerHeightRef
.
value
;
topRef
.
value
=
top
;
heightRef
.
value
=
window
.
innerHeight
-
top
;
const
clientHeight
=
document
.
documentElement
.
clientHeight
-
top
;
iframe
.
style
.
height
=
`
${
clientHeight
}
px`
;
}
function
hideLoading
()
{
const
getWrapStyle
=
computed
(():
CSSProperties
=>
{
loading
.
value
=
false
;
return
{
calcHeight
();
height
:
`
${
unref
(
heightRef
)}
px`
,
}
};
});
return
{
function
calcHeight
()
{
getWrapStyle
,
const
iframe
=
unref
(
frameRef
);
loading
,
if
(
!
iframe
)
{
frameRef
,
return
;
prefixCls
,
}
const
top
=
headerHeightRef
.
value
;
topRef
.
value
=
top
;
heightRef
.
value
=
window
.
innerHeight
-
top
;
const
clientHeight
=
document
.
documentElement
.
clientHeight
-
top
;
iframe
.
style
.
height
=
`
${
clientHeight
}
px`
;
}
hideLoading
,
function
hideLoading
()
{
}
;
loading
.
value
=
false
;
},
calcHeight
();
}
);
}
</
script
>
</
script
>
<
style
lang=
"less"
scoped
>
<
style
lang=
"less"
scoped
>
@prefix-cls
:
~
'@{namespace}-iframe-page'
;
@prefix-cls
:
~
'@{namespace}-iframe-page'
;
...
...
src/views/sys/lock/LockPage.vue
浏览文件 @
bb89c505
...
@@ -92,84 +92,61 @@
...
@@ -92,84 +92,61 @@
</div>
</div>
</div>
</div>
</
template
>
</
template
>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
defineComponent
,
ref
,
computed
}
from
'vue'
;
import
{
ref
,
computed
}
from
'vue'
;
import
{
Input
}
from
'ant-design-vue'
;
import
{
Input
}
from
'ant-design-vue'
;
import
{
useUserStore
}
from
'/@/store/modules/user'
;
import
{
useUserStore
}
from
'/@/store/modules/user'
;
import
{
useLockStore
}
from
'/@/store/modules/lock'
;
import
{
useLockStore
}
from
'/@/store/modules/lock'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useNow
}
from
'./useNow'
;
import
{
useNow
}
from
'./useNow'
;
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
import
{
LockOutlined
}
from
'@ant-design/icons-vue'
;
import
{
LockOutlined
}
from
'@ant-design/icons-vue'
;
import
headerImg
from
'/@/assets/images/header.jpg'
;
import
headerImg
from
'/@/assets/images/header.jpg'
;
export
default
defineComponent
({
const
InputPassword
=
Input
.
Password
;
name
:
'LockPage'
,
components
:
{
LockOutlined
,
InputPassword
:
Input
.
Password
},
setup
()
{
const
password
=
ref
(
''
);
const
loading
=
ref
(
false
);
const
errMsg
=
ref
(
false
);
const
showDate
=
ref
(
true
);
const
{
prefixCls
}
=
useDesign
(
'lock-page'
);
const
password
=
ref
(
''
);
const
lockStore
=
useLockStore
();
const
loading
=
ref
(
false
);
const
userStore
=
useUserStore
();
const
errMsg
=
ref
(
false
);
const
showDate
=
ref
(
true
);
const
{
...
state
}
=
useNow
(
true
);
const
{
prefixCls
}
=
useDesign
(
'lock-page'
);
const
lockStore
=
useLockStore
();
const
userStore
=
useUserStore
();
const
{
t
}
=
useI18n
(
);
const
{
hour
,
month
,
minute
,
meridiem
,
year
,
day
,
week
}
=
useNow
(
true
);
const
userinfo
=
computed
(()
=>
{
const
{
t
}
=
useI18n
();
return
userStore
.
getUserInfo
||
{};
});
/**
const
userinfo
=
computed
(()
=>
{
* @description: unLock
return
userStore
.
getUserInfo
||
{};
*/
});
async
function
unLock
()
{
if
(
!
password
.
value
)
{
return
;
}
let
pwd
=
password
.
value
;
try
{
loading
.
value
=
true
;
const
res
=
await
lockStore
.
unLock
(
pwd
);
errMsg
.
value
=
!
res
;
}
finally
{
loading
.
value
=
false
;
}
}
function
goLogin
()
{
/**
userStore
.
logout
(
true
);
* @description: unLock
lockStore
.
resetLockInfo
();
*/
}
async
function
unLock
()
{
if
(
!
password
.
value
)
{
return
;
}
let
pwd
=
password
.
value
;
try
{
loading
.
value
=
true
;
const
res
=
await
lockStore
.
unLock
(
pwd
);
errMsg
.
value
=
!
res
;
}
finally
{
loading
.
value
=
false
;
}
}
function
handleShowForm
(
show
=
false
)
{
function
goLogin
()
{
showDate
.
value
=
show
;
userStore
.
logout
(
true
);
}
lockStore
.
resetLockInfo
();
}
return
{
function
handleShowForm
(
show
=
false
)
{
goLogin
,
showDate
.
value
=
show
;
userinfo
,
}
unLock
,
errMsg
,
loading
,
t
,
prefixCls
,
showDate
,
password
,
handleShowForm
,
headerImg
,
...
state
,
};
},
});
</
script
>
</
script
>
<
style
lang=
"less"
scoped
>
<
style
lang=
"less"
scoped
>
@prefix-cls
:
~
'@{namespace}-lock-page'
;
@prefix-cls
:
~
'@{namespace}-lock-page'
;
...
...
src/views/sys/lock/index.vue
浏览文件 @
bb89c505
...
@@ -3,18 +3,11 @@
...
@@ -3,18 +3,11 @@
<LockPage
v-if=
"getIsLock"
/>
<LockPage
v-if=
"getIsLock"
/>
</transition>
</transition>
</
template
>
</
template
>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
defineComponent
,
computed
}
from
'vue'
;
import
{
computed
}
from
'vue'
;
import
LockPage
from
'./LockPage.vue'
;
import
LockPage
from
'./LockPage.vue'
;
import
{
useLockStore
}
from
'/@/store/modules/lock'
;
import
{
useLockStore
}
from
'/@/store/modules/lock'
;
export
default
defineComponent
({
name
:
'Lock'
,
const
lockStore
=
useLockStore
();
components
:
{
LockPage
},
const
getIsLock
=
computed
(()
=>
lockStore
?.
getLockInfo
?.
isLock
??
false
);
setup
()
{
const
lockStore
=
useLockStore
();
const
getIsLock
=
computed
(()
=>
lockStore
?.
getLockInfo
?.
isLock
??
false
);
return
{
getIsLock
};
},
});
</
script
>
</
script
>
src/views/sys/login/ForgetPasswordForm.vue
浏览文件 @
bb89c505
...
@@ -32,58 +32,33 @@
...
@@ -32,58 +32,33 @@
</Form>
</Form>
</
template
>
</
template
>
</template>
</template>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
defineComponent
,
reactive
,
ref
,
computed
,
unref
}
from
'vue'
;
import
{
reactive
,
ref
,
computed
,
unref
}
from
'vue'
;
import
LoginFormTitle
from
'./LoginFormTitle.vue'
;
import
LoginFormTitle
from
'./LoginFormTitle.vue'
;
import
{
Form
,
Input
,
Button
}
from
'ant-design-vue'
;
import
{
Form
,
Input
,
Button
}
from
'ant-design-vue'
;
import
{
CountdownInput
}
from
'/@/components/CountDown'
;
import
{
CountdownInput
}
from
'/@/components/CountDown'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useLoginState
,
useFormRules
,
LoginStateEnum
}
from
'./useLogin'
;
import
{
useLoginState
,
useFormRules
,
LoginStateEnum
}
from
'./useLogin'
;
export
default
defineComponent
({
const
FormItem
=
Form
.
Item
;
name
:
'ForgetPasswordForm'
,
const
{
t
}
=
useI18n
();
components
:
{
const
{
handleBackLogin
,
getLoginState
}
=
useLoginState
();
Button
,
const
{
getFormRules
}
=
useFormRules
();
Form
,
FormItem
:
Form
.
Item
,
Input
,
CountdownInput
,
LoginFormTitle
,
},
setup
()
{
const
{
t
}
=
useI18n
();
const
{
handleBackLogin
,
getLoginState
}
=
useLoginState
();
const
{
getFormRules
}
=
useFormRules
();
const
formRef
=
ref
();
const
loading
=
ref
(
false
);
const
formData
=
reactive
({
const
formRef
=
ref
();
account
:
''
,
const
loading
=
ref
(
false
);
mobile
:
''
,
sms
:
''
,
});
const
getShow
=
computed
(()
=>
unref
(
getLoginState
)
===
LoginStateEnum
.
RESET_PASSWORD
);
const
formData
=
reactive
({
account
:
''
,
mobile
:
''
,
sms
:
''
,
});
async
function
handleReset
()
{
const
getShow
=
computed
(()
=>
unref
(
getLoginState
)
===
LoginStateEnum
.
RESET_PASSWORD
);
const
form
=
unref
(
formRef
);
if
(
!
form
)
return
;
await
form
.
resetFields
();
}
return
{
async
function
handleReset
()
{
t
,
const
form
=
unref
(
formRef
);
formRef
,
if
(
!
form
)
return
;
formData
,
await
form
.
resetFields
();
getFormRules
,
}
handleReset
,
loading
,
handleBackLogin
,
getShow
,
};
},
});
</
script
>
</
script
>
src/views/sys/login/Login.vue
浏览文件 @
bb89c505
...
@@ -61,9 +61,8 @@
...
@@ -61,9 +61,8 @@
</div>
</div>
</div>
</div>
</
template
>
</
template
>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
defineComponent
,
computed
}
from
'vue'
;
import
{
computed
,
defineProps
}
from
'vue'
;
import
{
AppLogo
}
from
'/@/components/Application'
;
import
{
AppLogo
}
from
'/@/components/Application'
;
import
{
AppLocalePicker
,
AppDarkModeToggle
}
from
'/@/components/Application'
;
import
{
AppLocalePicker
,
AppDarkModeToggle
}
from
'/@/components/Application'
;
import
LoginForm
from
'./LoginForm.vue'
;
import
LoginForm
from
'./LoginForm.vue'
;
...
@@ -71,43 +70,23 @@
...
@@ -71,43 +70,23 @@
import
RegisterForm
from
'./RegisterForm.vue'
;
import
RegisterForm
from
'./RegisterForm.vue'
;
import
MobileForm
from
'./MobileForm.vue'
;
import
MobileForm
from
'./MobileForm.vue'
;
import
QrCodeForm
from
'./QrCodeForm.vue'
;
import
QrCodeForm
from
'./QrCodeForm.vue'
;
import
{
useGlobSetting
}
from
'/@/hooks/setting'
;
import
{
useGlobSetting
}
from
'/@/hooks/setting'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
import
{
useLocaleStore
}
from
'/@/store/modules/locale'
;
import
{
useLocaleStore
}
from
'/@/store/modules/locale'
;
export
default
defineComponent
({
defineProps
({
name
:
'Login'
,
sessionTimeout
:
{
components
:
{
type
:
Boolean
,
AppLogo
,
LoginForm
,
ForgetPasswordForm
,
RegisterForm
,
MobileForm
,
QrCodeForm
,
AppLocalePicker
,
AppDarkModeToggle
,
},
props
:
{
sessionTimeout
:
{
type
:
Boolean
,
},
},
setup
()
{
const
globSetting
=
useGlobSetting
();
const
{
prefixCls
}
=
useDesign
(
'login'
);
const
{
t
}
=
useI18n
();
const
localeStore
=
useLocaleStore
();
return
{
t
,
prefixCls
,
title
:
computed
(()
=>
globSetting
?.
title
??
''
),
showLocale
:
localeStore
.
getShowPicker
,
};
},
},
});
});
const
globSetting
=
useGlobSetting
();
const
{
prefixCls
}
=
useDesign
(
'login'
);
const
{
t
}
=
useI18n
();
const
localeStore
=
useLocaleStore
();
const
showLocale
=
localeStore
.
getShowPicker
;
const
title
=
computed
(()
=>
globSetting
?.
title
??
''
);
</
script
>
</
script
>
<
style
lang=
"less"
>
<
style
lang=
"less"
>
@prefix-cls
:
~
'@{namespace}-login'
;
@prefix-cls
:
~
'@{namespace}-login'
;
...
...
src/views/sys/login/LoginForm.vue
浏览文件 @
bb89c505
...
@@ -81,8 +81,8 @@
...
@@ -81,8 +81,8 @@
</div>
</div>
</Form>
</Form>
</
template
>
</
template
>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
defineComponent
,
reactive
,
ref
,
toRaw
,
unref
,
computed
}
from
'vue'
;
import
{
reactive
,
ref
,
toRaw
,
unref
,
computed
}
from
'vue'
;
import
{
Checkbox
,
Form
,
Input
,
Row
,
Col
,
Button
,
Divider
}
from
'ant-design-vue'
;
import
{
Checkbox
,
Form
,
Input
,
Row
,
Col
,
Button
,
Divider
}
from
'ant-design-vue'
;
import
{
import
{
...
@@ -102,92 +102,60 @@
...
@@ -102,92 +102,60 @@
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
//import { onKeyStroke } from '@vueuse/core';
//import { onKeyStroke } from '@vueuse/core';
export
default
defineComponent
({
const
ACol
=
Col
;
name
:
'LoginForm'
,
const
ARow
=
Row
;
components
:
{
const
FormItem
=
Form
.
Item
;
[
Col
.
name
]:
Col
,
const
InputPassword
=
Input
.
Password
;
[
Row
.
name
]:
Row
,
const
{
t
}
=
useI18n
();
Checkbox
,
const
{
notification
,
createErrorModal
}
=
useMessage
();
Button
,
const
{
prefixCls
}
=
useDesign
(
'login'
);
Form
,
const
userStore
=
useUserStore
();
FormItem
:
Form
.
Item
,
Input
,
const
{
setLoginState
,
getLoginState
}
=
useLoginState
();
Divider
,
const
{
getFormRules
}
=
useFormRules
();
LoginFormTitle
,
InputPassword
:
Input
.
Password
,
const
formRef
=
ref
();
GithubFilled
,
const
loading
=
ref
(
false
);
WechatFilled
,
const
rememberMe
=
ref
(
false
);
AlipayCircleFilled
,
GoogleCircleFilled
,
const
formData
=
reactive
({
TwitterCircleFilled
,
account
:
'vben'
,
},
password
:
'123456'
,
setup
()
{
});
const
{
t
}
=
useI18n
();
const
{
notification
,
createErrorModal
}
=
useMessage
();
const
{
prefixCls
}
=
useDesign
(
'login'
);
const
userStore
=
useUserStore
();
const
{
setLoginState
,
getLoginState
}
=
useLoginState
();
const
{
getFormRules
}
=
useFormRules
();
const
formRef
=
ref
();
const
loading
=
ref
(
false
);
const
rememberMe
=
ref
(
false
);
const
formData
=
reactive
({
account
:
'vben'
,
password
:
'123456'
,
});
const
{
validForm
}
=
useFormValid
(
formRef
);
//onKeyStroke('Enter', handleLogin);
const
getShow
=
computed
(()
=>
unref
(
getLoginState
)
===
LoginStateEnum
.
LOGIN
);
async
function
handleLogin
()
{
const
{
validForm
}
=
useFormValid
(
formRef
);
const
data
=
await
validForm
();
if
(
!
data
)
return
;
//onKeyStroke('Enter', handleLogin);
try
{
loading
.
value
=
true
;
const
getShow
=
computed
(()
=>
unref
(
getLoginState
)
===
LoginStateEnum
.
LOGIN
);
const
userInfo
=
await
userStore
.
login
(
toRaw
({
async
function
handleLogin
()
{
password
:
data
.
password
,
const
data
=
await
validForm
();
username
:
data
.
account
,
if
(
!
data
)
return
;
mode
:
'none'
,
//不要默认的错误提示
try
{
})
loading
.
value
=
true
;
);
const
userInfo
=
await
userStore
.
login
(
if
(
userInfo
)
{
toRaw
({
notification
.
success
({
password
:
data
.
password
,
message
:
t
(
'sys.login.loginSuccessTitle'
),
username
:
data
.
account
,
description
:
`
${
t
(
'sys.login.loginSuccessDesc'
)}
:
${
userInfo
.
realName
}
`
,
mode
:
'none'
,
//不要默认的错误提示
duration
:
3
,
})
});
);
}
if
(
userInfo
)
{
}
catch
(
error
)
{
notification
.
success
({
createErrorModal
({
message
:
t
(
'sys.login.loginSuccessTitle'
),
title
:
t
(
'sys.api.errorTip'
),
description
:
`
${
t
(
'sys.login.loginSuccessDesc'
)}
:
${
userInfo
.
realName
}
`
,
content
:
error
.
message
||
t
(
'sys.api.networkExceptionMsg'
),
duration
:
3
,
getContainer
:
()
=>
document
.
body
.
querySelector
(
`.
${
prefixCls
}
`
)
||
document
.
body
,
});
});
}
finally
{
loading
.
value
=
false
;
}
}
}
}
catch
(
error
)
{
return
{
createErrorModal
({
t
,
title
:
t
(
'sys.api.errorTip'
),
prefixCls
,
content
:
error
.
message
||
t
(
'sys.api.networkExceptionMsg'
),
formRef
,
getContainer
:
()
=>
document
.
body
.
querySelector
(
`.
${
prefixCls
}
`
)
||
document
.
body
,
formData
,
});
getFormRules
,
}
finally
{
rememberMe
,
loading
.
value
=
false
;
handleLogin
,
}
loading
,
}
setLoginState
,
LoginStateEnum
,
getShow
,
};
},
});
</
script
>
</
script
>
src/views/sys/login/LoginFormTitle.vue
浏览文件 @
bb89c505
...
@@ -3,33 +3,23 @@
...
@@ -3,33 +3,23 @@
{{
getFormTitle
}}
{{
getFormTitle
}}
</h2>
</h2>
</
template
>
</
template
>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
defineComponent
,
computed
,
unref
}
from
'vue'
;
import
{
computed
,
unref
}
from
'vue'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
LoginStateEnum
,
useLoginState
}
from
'./useLogin'
;
import
{
LoginStateEnum
,
useLoginState
}
from
'./useLogin'
;
export
default
defineComponent
({
const
{
t
}
=
useI18n
();
name
:
'LoginFormTitle'
,
setup
()
{
const
{
t
}
=
useI18n
();
const
{
getLoginState
}
=
useLoginState
();
const
getFormTitle
=
computed
(()
=>
{
const
{
getLoginState
}
=
useLoginState
();
const
titleObj
=
{
[
LoginStateEnum
.
RESET_PASSWORD
]:
t
(
'sys.login.forgetFormTitle'
),
[
LoginStateEnum
.
LOGIN
]:
t
(
'sys.login.signInFormTitle'
),
[
LoginStateEnum
.
REGISTER
]:
t
(
'sys.login.signUpFormTitle'
),
[
LoginStateEnum
.
MOBILE
]:
t
(
'sys.login.mobileSignInFormTitle'
),
[
LoginStateEnum
.
QR_CODE
]:
t
(
'sys.login.qrSignInFormTitle'
),
};
return
titleObj
[
unref
(
getLoginState
)];
});
return
{
const
getFormTitle
=
computed
(()
=>
{
getFormTitle
,
const
titleObj
=
{
};
[
LoginStateEnum
.
RESET_PASSWORD
]:
t
(
'sys.login.forgetFormTitle'
),
},
[
LoginStateEnum
.
LOGIN
]:
t
(
'sys.login.signInFormTitle'
),
[
LoginStateEnum
.
REGISTER
]:
t
(
'sys.login.signUpFormTitle'
),
[
LoginStateEnum
.
MOBILE
]:
t
(
'sys.login.mobileSignInFormTitle'
),
[
LoginStateEnum
.
QR_CODE
]:
t
(
'sys.login.qrSignInFormTitle'
),
};
return
titleObj
[
unref
(
getLoginState
)];
});
});
</
script
>
</
script
>
src/views/sys/login/MobileForm.vue
浏览文件 @
bb89c505
...
@@ -30,59 +30,34 @@
...
@@ -30,59 +30,34 @@
</Form>
</Form>
</
template
>
</
template
>
</template>
</template>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
defineComponent
,
reactive
,
ref
,
computed
,
unref
}
from
'vue'
;
import
{
reactive
,
ref
,
computed
,
unref
}
from
'vue'
;
import
{
Form
,
Input
,
Button
}
from
'ant-design-vue'
;
import
{
Form
,
Input
,
Button
}
from
'ant-design-vue'
;
import
{
CountdownInput
}
from
'/@/components/CountDown'
;
import
{
CountdownInput
}
from
'/@/components/CountDown'
;
import
LoginFormTitle
from
'./LoginFormTitle.vue'
;
import
LoginFormTitle
from
'./LoginFormTitle.vue'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useLoginState
,
useFormRules
,
useFormValid
,
LoginStateEnum
}
from
'./useLogin'
;
import
{
useLoginState
,
useFormRules
,
useFormValid
,
LoginStateEnum
}
from
'./useLogin'
;
export
default
defineComponent
({
const
FormItem
=
Form
.
Item
;
name
:
'MobileForm'
,
const
{
t
}
=
useI18n
();
components
:
{
const
{
handleBackLogin
,
getLoginState
}
=
useLoginState
();
Button
,
const
{
getFormRules
}
=
useFormRules
();
Form
,
FormItem
:
Form
.
Item
,
Input
,
CountdownInput
,
LoginFormTitle
,
},
setup
()
{
const
{
t
}
=
useI18n
();
const
{
handleBackLogin
,
getLoginState
}
=
useLoginState
();
const
{
getFormRules
}
=
useFormRules
();
const
formRef
=
ref
();
const
loading
=
ref
(
false
);
const
formData
=
reactive
({
const
formRef
=
ref
();
mobile
:
''
,
const
loading
=
ref
(
false
);
sms
:
''
,
});
const
{
validForm
}
=
useFormValid
(
formRef
);
const
formData
=
reactive
({
mobile
:
''
,
sms
:
''
,
});
const
getShow
=
computed
(()
=>
unref
(
getLoginState
)
===
LoginStateEnum
.
MOBILE
);
const
{
validForm
}
=
useFormValid
(
formRef
);
async
function
handleLogin
()
{
const
getShow
=
computed
(()
=>
unref
(
getLoginState
)
===
LoginStateEnum
.
MOBILE
);
const
data
=
await
validForm
();
if
(
!
data
)
return
;
console
.
log
(
data
);
}
return
{
async
function
handleLogin
()
{
t
,
const
data
=
await
validForm
();
formRef
,
if
(
!
data
)
return
;
formData
,
console
.
log
(
data
);
getFormRules
,
}
handleLogin
,
loading
,
handleBackLogin
,
getShow
,
};
},
});
</
script
>
</
script
>
src/views/sys/login/QrCodeForm.vue
浏览文件 @
bb89c505
...
@@ -14,37 +14,18 @@
...
@@ -14,37 +14,18 @@
</div>
</div>
</
template
>
</
template
>
</template>
</template>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
defineComponent
,
computed
,
unref
}
from
'vue'
;
import
{
computed
,
unref
}
from
'vue'
;
import
LoginFormTitle
from
'./LoginFormTitle.vue'
;
import
LoginFormTitle
from
'./LoginFormTitle.vue'
;
import
{
Button
,
Divider
}
from
'ant-design-vue'
;
import
{
Button
,
Divider
}
from
'ant-design-vue'
;
import
{
QrCode
}
from
'/@/components/Qrcode/index'
;
import
{
QrCode
}
from
'/@/components/Qrcode/index'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useLoginState
,
LoginStateEnum
}
from
'./useLogin'
;
import
{
useLoginState
,
LoginStateEnum
}
from
'./useLogin'
;
const
qrCodeUrl
=
'https://vvbin.cn/next/login'
;
const
qrCodeUrl
=
'https://vvbin.cn/next/login'
;
export
default
defineComponent
({
name
:
'QrCodeForm'
,
components
:
{
Button
,
QrCode
,
Divider
,
LoginFormTitle
,
},
setup
()
{
const
{
t
}
=
useI18n
();
const
{
handleBackLogin
,
getLoginState
}
=
useLoginState
();
const
getShow
=
computed
(()
=>
unref
(
getLoginState
)
===
LoginStateEnum
.
QR_CODE
);
const
{
t
}
=
useI18n
();
const
{
handleBackLogin
,
getLoginState
}
=
useLoginState
();
return
{
const
getShow
=
computed
(()
=>
unref
(
getLoginState
)
===
LoginStateEnum
.
QR_CODE
);
t
,
handleBackLogin
,
qrCodeUrl
,
getShow
,
};
},
});
</
script
>
</
script
>
src/views/sys/login/RegisterForm.vue
浏览文件 @
bb89c505
...
@@ -65,67 +65,40 @@
...
@@ -65,67 +65,40 @@
</Form>
</Form>
</
template
>
</
template
>
</template>
</template>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
defineComponent
,
reactive
,
ref
,
unref
,
computed
}
from
'vue'
;
import
{
reactive
,
ref
,
unref
,
computed
}
from
'vue'
;
import
LoginFormTitle
from
'./LoginFormTitle.vue'
;
import
LoginFormTitle
from
'./LoginFormTitle.vue'
;
import
{
Form
,
Input
,
Button
,
Checkbox
}
from
'ant-design-vue'
;
import
{
Form
,
Input
,
Button
,
Checkbox
}
from
'ant-design-vue'
;
import
{
StrengthMeter
}
from
'/@/components/StrengthMeter'
;
import
{
StrengthMeter
}
from
'/@/components/StrengthMeter'
;
import
{
CountdownInput
}
from
'/@/components/CountDown'
;
import
{
CountdownInput
}
from
'/@/components/CountDown'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useI18n
}
from
'/@/hooks/web/useI18n'
;
import
{
useLoginState
,
useFormRules
,
useFormValid
,
LoginStateEnum
}
from
'./useLogin'
;
import
{
useLoginState
,
useFormRules
,
useFormValid
,
LoginStateEnum
}
from
'./useLogin'
;
export
default
defineComponent
({
const
FormItem
=
Form
.
Item
;
name
:
'RegisterPasswordForm'
,
const
InputPassword
=
Input
.
Password
;
components
:
{
const
{
t
}
=
useI18n
();
Button
,
const
{
handleBackLogin
,
getLoginState
}
=
useLoginState
();
Form
,
FormItem
:
Form
.
Item
,
Input
,
InputPassword
:
Input
.
Password
,
Checkbox
,
StrengthMeter
,
CountdownInput
,
LoginFormTitle
,
},
setup
()
{
const
{
t
}
=
useI18n
();
const
{
handleBackLogin
,
getLoginState
}
=
useLoginState
();
const
formRef
=
ref
();
const
loading
=
ref
(
false
);
const
formData
=
reactive
({
const
formRef
=
ref
();
account
:
''
,
const
loading
=
ref
(
false
);
password
:
''
,
confirmPassword
:
''
,
mobile
:
''
,
sms
:
''
,
policy
:
false
,
});
const
{
getFormRules
}
=
useFormRules
(
formData
);
const
formData
=
reactive
({
const
{
validForm
}
=
useFormValid
(
formRef
);
account
:
''
,
password
:
''
,
confirmPassword
:
''
,
mobile
:
''
,
sms
:
''
,
policy
:
false
,
});
const
getShow
=
computed
(()
=>
unref
(
getLoginState
)
===
LoginStateEnum
.
REGISTER
);
const
{
getFormRules
}
=
useFormRules
(
formData
);
const
{
validForm
}
=
useFormValid
(
formRef
);
async
function
handleRegister
()
{
const
getShow
=
computed
(()
=>
unref
(
getLoginState
)
===
LoginStateEnum
.
REGISTER
);
const
data
=
await
validForm
();
if
(
!
data
)
return
;
console
.
log
(
data
);
}
return
{
async
function
handleRegister
()
{
t
,
const
data
=
await
validForm
();
formRef
,
if
(
!
data
)
return
;
formData
,
console
.
log
(
data
);
getFormRules
,
}
handleRegister
,
loading
,
handleBackLogin
,
getShow
,
};
},
});
</
script
>
</
script
>
src/views/sys/login/SessionTimeoutLogin.vue
浏览文件 @
bb89c505
...
@@ -5,47 +5,39 @@
...
@@ -5,47 +5,39 @@
</div>
</div>
</transition>
</transition>
</
template
>
</
template
>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
defineComponent
,
onBeforeUnmount
,
onMounted
,
ref
}
from
'vue'
;
import
{
onBeforeUnmount
,
onMounted
,
ref
}
from
'vue'
;
import
Login
from
'./Login.vue'
;
import
Login
from
'./Login.vue'
;
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
import
{
useDesign
}
from
'/@/hooks/web/useDesign'
;
import
{
useUserStore
}
from
'/@/store/modules/user'
;
import
{
useUserStore
}
from
'/@/store/modules/user'
;
import
{
usePermissionStore
}
from
'/@/store/modules/permission'
;
import
{
usePermissionStore
}
from
'/@/store/modules/permission'
;
import
{
useAppStore
}
from
'/@/store/modules/app'
;
import
{
useAppStore
}
from
'/@/store/modules/app'
;
import
{
PermissionModeEnum
}
from
'/@/enums/appEnum'
;
import
{
PermissionModeEnum
}
from
'/@/enums/appEnum'
;
export
default
defineComponent
({
name
:
'SessionTimeoutLogin'
,
components
:
{
Login
},
setup
()
{
const
{
prefixCls
}
=
useDesign
(
'st-login'
);
const
userStore
=
useUserStore
();
const
permissionStore
=
usePermissionStore
();
const
appStore
=
useAppStore
();
const
userId
=
ref
<
Nullable
<
number
|
string
>>
(
0
);
const
isBackMode
=
()
=>
{
const
{
prefixCls
}
=
useDesign
(
'st-login'
);
return
appStore
.
getProjectConfig
.
permissionMode
===
PermissionModeEnum
.
BACK
;
const
userStore
=
useUserStore
();
};
const
permissionStore
=
usePermissionStore
();
const
appStore
=
useAppStore
();
const
userId
=
ref
<
Nullable
<
number
|
string
>>
(
0
);
onMounted
(()
=>
{
const
isBackMode
=
()
=>
{
// 记录当前的UserId
return
appStore
.
getProjectConfig
.
permissionMode
===
PermissionModeEnum
.
BACK
;
userId
.
value
=
userStore
.
getUserInfo
?.
userId
;
};
console
.
log
(
'Mounted'
,
userStore
.
getUserInfo
);
});
onBeforeUnmount
(()
=>
{
onMounted
(()
=>
{
if
(
userId
.
value
&&
userId
.
value
!==
userStore
.
getUserInfo
.
userId
)
{
// 记录当前的UserId
// 登录的不是同一个用户,刷新整个页面以便丢弃之前用户的页面状态
userId
.
value
=
userStore
.
getUserInfo
?.
userId
;
document
.
location
.
reload
();
console
.
log
(
'Mounted'
,
userStore
.
getUserInfo
);
}
else
if
(
isBackMode
()
&&
permissionStore
.
getLastBuildMenuTime
===
0
)
{
});
// 后台权限模式下,没有成功加载过菜单,就重新加载整个页面。这通常发生在会话过期后按F5刷新整个页面后载入了本模块这种场景
document
.
location
.
reload
();
}
});
return
{
prefixCls
};
onBeforeUnmount
(()
=>
{
},
if
(
userId
.
value
&&
userId
.
value
!==
userStore
.
getUserInfo
.
userId
)
{
// 登录的不是同一个用户,刷新整个页面以便丢弃之前用户的页面状态
document
.
location
.
reload
();
}
else
if
(
isBackMode
()
&&
permissionStore
.
getLastBuildMenuTime
===
0
)
{
// 后台权限模式下,没有成功加载过菜单,就重新加载整个页面。这通常发生在会话过期后按F5刷新整个页面后载入了本模块这种场景
document
.
location
.
reload
();
}
});
});
</
script
>
</
script
>
<
style
lang=
"less"
scoped
>
<
style
lang=
"less"
scoped
>
...
...
src/views/sys/redirect/index.vue
浏览文件 @
bb89c505
<
template
>
<
template
>
<div></div>
<div></div>
</
template
>
</
template
>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
setup
>
import
{
defineComponent
,
unref
}
from
'vue'
;
import
{
unref
}
from
'vue'
;
import
{
useRouter
}
from
'vue-router'
;
import
{
useRouter
}
from
'vue-router'
;
export
default
defineComponent
({
const
{
currentRoute
,
replace
}
=
useRouter
();
name
:
'Redirect'
,
setup
()
{
const
{
currentRoute
,
replace
}
=
useRouter
();
const
{
params
,
query
}
=
unref
(
currentRoute
);
const
{
params
,
query
}
=
unref
(
currentRoute
);
const
{
path
}
=
params
;
const
{
path
}
=
params
;
const
_path
=
Array
.
isArray
(
path
)
?
path
.
join
(
'/'
)
:
path
;
const
_path
=
Array
.
isArray
(
path
)
?
path
.
join
(
'/'
)
:
path
;
replace
({
replace
({
path
:
'/'
+
_path
,
path
:
'/'
+
_path
,
query
,
query
,
});
return
{};
},
});
});
</
script
>
</
script
>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论