mirror of
https://github.com/yangjian102621/geekai.git
synced 2025-09-17 16:56:38 +08:00
fine-tune the new UI theme, merge the code and fixed conflicts
This commit is contained in:
commit
e857f98e5c
@ -107,7 +107,10 @@ func (t PowerType) String() string {
|
|||||||
return "退款"
|
return "退款"
|
||||||
case PowerRedeem:
|
case PowerRedeem:
|
||||||
return "兑换"
|
return "兑换"
|
||||||
|
case PowerGift:
|
||||||
|
return "赠送"
|
||||||
|
case PowerInvite:
|
||||||
|
return "邀请"
|
||||||
}
|
}
|
||||||
return "其他"
|
return "其他"
|
||||||
}
|
}
|
||||||
|
@ -184,7 +184,7 @@ func (h *UserHandler) Register(c *gin.Context) {
|
|||||||
if h.App.SysConfig.InvitePower > 0 {
|
if h.App.SysConfig.InvitePower > 0 {
|
||||||
err := h.userService.IncreasePower(int(inviteCode.UserId), h.App.SysConfig.InvitePower, model.PowerLog{
|
err := h.userService.IncreasePower(int(inviteCode.UserId), h.App.SysConfig.InvitePower, model.PowerLog{
|
||||||
Type: types.PowerInvite,
|
Type: types.PowerInvite,
|
||||||
Model: "",
|
Model: "Invite",
|
||||||
Remark: fmt.Sprintf("邀请用户注册奖励,金额:%d,邀请码:%s,新用户:%s", h.App.SysConfig.InvitePower, inviteCode.Code, user.Username),
|
Remark: fmt.Sprintf("邀请用户注册奖励,金额:%d,邀请码:%s,新用户:%s", h.App.SysConfig.InvitePower, inviteCode.Code, user.Username),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -113,9 +113,9 @@
|
|||||||
-webkit-box-orient: vertical;
|
-webkit-box-orient: vertical;
|
||||||
-webkit-line-clamp: 2;
|
-webkit-line-clamp: 2;
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
height 34px
|
height 50px
|
||||||
font-size: .875rem;
|
font-size: .875rem;
|
||||||
color var(--el-text-color-primary)
|
color var(--text-fb)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,7 @@
|
|||||||
min-width: 0;
|
min-width: 0;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
background-color: var(--el-bg-color)
|
background-color: var(--el-bg-color)
|
||||||
color var(--el-text-color-primary)
|
color var(--text-fb)
|
||||||
|
|
||||||
.chat-config {
|
.chat-config {
|
||||||
height 50px
|
height 50px
|
||||||
|
@ -27,9 +27,10 @@
|
|||||||
--a-link-color: #6e8eff
|
--a-link-color: #6e8eff
|
||||||
--shadow-color:rgba(223,71,255,0.6)
|
--shadow-color:rgba(223,71,255,0.6)
|
||||||
--sm-btn-bg:#6052ed;
|
--sm-btn-bg:#6052ed;
|
||||||
--theme-text-tertiary: #595959;
|
--theme-text-tertiary: #595959;
|
||||||
--theme-btn-fill-tertiary: #f0ebff;
|
--theme-btn-fill-tertiary: #f0ebff;
|
||||||
--theme-text-btn-tertiary: #6841ea;
|
--theme-text-btn-tertiary: #6841ea;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// #e7e7e8
|
// #e7e7e8
|
||||||
@ -133,11 +134,19 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.sm-btn-theme{
|
.sm-btn-theme{
|
||||||
background-color: var(--theme-btn-fill-tertiary) !important;
|
background-color: var(--theme-btn-fill-tertiary) !important;
|
||||||
color: var(--theme-text-btn-tertiary) !important;
|
color: var(--theme-text-btn-tertiary) !important;
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-tag, .el-tag.el-tag--primary{
|
.el-tag, .el-tag.el-tag--primary{
|
||||||
--el-tag-bg-color:#f0ebff
|
--el-tag-bg-color:#f0ebff
|
||||||
}
|
}
|
||||||
|
.box-card{
|
||||||
|
padding: 20px;
|
||||||
|
background-color: var(--chat-bg);
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
.el-table th.el-table__cell {
|
||||||
|
background-color: var(--chat-bg)
|
||||||
|
}
|
@ -25,8 +25,8 @@
|
|||||||
color:var(--text-theme-color)
|
color:var(--text-theme-color)
|
||||||
}
|
}
|
||||||
img{
|
img{
|
||||||
width 30px
|
width 40px
|
||||||
height: 30px
|
height: 40px
|
||||||
object-fit: cover
|
object-fit: cover
|
||||||
border-radius: 50%
|
border-radius: 50%
|
||||||
padding: 4px
|
padding: 4px
|
||||||
@ -44,6 +44,10 @@
|
|||||||
align-items center
|
align-items center
|
||||||
flex-direction column
|
flex-direction column
|
||||||
|
|
||||||
|
.iconfont {
|
||||||
|
font-size 22px
|
||||||
|
}
|
||||||
|
|
||||||
.icon-expand {
|
.icon-expand {
|
||||||
font-size 24px
|
font-size 24px
|
||||||
margin-bottom 10px
|
margin-bottom 10px
|
||||||
@ -57,6 +61,7 @@
|
|||||||
cursor pointer
|
cursor pointer
|
||||||
color var(--text-color)
|
color var(--text-color)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
.menu-list-collapse{
|
.menu-list-collapse{
|
||||||
.flex-center-col{
|
.flex-center-col{
|
||||||
@ -66,6 +71,10 @@
|
|||||||
|
|
||||||
height: 38px;
|
height: 38px;
|
||||||
line-height: 38px;
|
line-height: 38px;
|
||||||
|
|
||||||
|
.iconfont {
|
||||||
|
font-size 16px
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
.menu-list-item:hover,
|
.menu-list-item:hover,
|
||||||
|
@ -3,9 +3,9 @@
|
|||||||
overflow hidden
|
overflow hidden
|
||||||
color var(--text-color)
|
color var(--text-color)
|
||||||
display flex
|
display flex
|
||||||
justify-content center
|
align-items center
|
||||||
align-items baseline
|
|
||||||
background: var(--theme-bg) !important
|
background: var(--theme-bg) !important
|
||||||
|
flex-flow column
|
||||||
height: 100vh
|
height: 100vh
|
||||||
|
|
||||||
|
|
||||||
@ -33,22 +33,25 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.menu-box {
|
.menu-box {
|
||||||
position absolute
|
|
||||||
top 0
|
|
||||||
width 100%
|
width 100%
|
||||||
display flex
|
display flex
|
||||||
|
height 80px
|
||||||
|
align-items center
|
||||||
|
|
||||||
.el-menu {
|
.el-menu {
|
||||||
padding 0 30px
|
padding 0 30px
|
||||||
width 100%
|
width 100%
|
||||||
display flex
|
display flex
|
||||||
justify-content space-between
|
justify-content space-between
|
||||||
|
align-items center
|
||||||
background none
|
background none
|
||||||
border none
|
border none
|
||||||
|
|
||||||
.menu-item {
|
.menu-item {
|
||||||
display flex
|
display flex
|
||||||
padding 20px 0
|
// padding 20px 0
|
||||||
|
height 40px
|
||||||
|
align-items center
|
||||||
|
|
||||||
color var(--text-color);
|
color var(--text-color);
|
||||||
.iconfont{
|
.iconfont{
|
||||||
|
@ -224,7 +224,7 @@
|
|||||||
text-overflow ellipsis
|
text-overflow ellipsis
|
||||||
}
|
}
|
||||||
.prompt {
|
.prompt {
|
||||||
color var( --el-text-color-primary)
|
color var( --text-fb)
|
||||||
cursor: text
|
cursor: text
|
||||||
}
|
}
|
||||||
.failed {
|
.failed {
|
||||||
|
@ -130,10 +130,13 @@
|
|||||||
position: absolute
|
position: absolute
|
||||||
bottom: 10px
|
bottom: 10px
|
||||||
right: 20px
|
right: 20px
|
||||||
|
display: flex;
|
||||||
|
|
||||||
.mm-toolbar {
|
.mm-toolbar {
|
||||||
|
line-height: 36px;
|
||||||
display flex
|
display flex
|
||||||
flex-flow row
|
flex-flow row
|
||||||
|
margin-left: 10px;
|
||||||
|
|
||||||
.mm-toolbar-brand {
|
.mm-toolbar-brand {
|
||||||
display none
|
display none
|
||||||
@ -141,7 +144,7 @@
|
|||||||
|
|
||||||
.mm-toolbar-item {
|
.mm-toolbar-item {
|
||||||
cursor pointer
|
cursor pointer
|
||||||
color var( --el-text-color-primary)
|
color var( --text-fb)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,10 +136,11 @@
|
|||||||
|
|
||||||
.el-button {
|
.el-button {
|
||||||
margin 10px 5px 0 5px
|
margin 10px 5px 0 5px
|
||||||
padding 0
|
height 32px
|
||||||
|
filter: none;
|
||||||
|
|
||||||
.icon-alipay,.icon-wechat-pay {
|
.icon-alipay,.icon-wechat-pay {
|
||||||
color var(--text-theme-color)
|
color #ffffff
|
||||||
}
|
}
|
||||||
.icon-qq {
|
.icon-qq {
|
||||||
color #15A6E8
|
color #15A6E8
|
||||||
|
@ -65,7 +65,7 @@
|
|||||||
label {
|
label {
|
||||||
display flex
|
display flex
|
||||||
width 100px
|
width 100px
|
||||||
color :var(--el-text-color-primary)
|
color :var(--text-fb)
|
||||||
}
|
}
|
||||||
|
|
||||||
.item-value {
|
.item-value {
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
display flex
|
display flex
|
||||||
flex-flow row
|
flex-flow row
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
align-items center
|
||||||
|
|
||||||
.upload-music {
|
.upload-music {
|
||||||
.iconfont {
|
.iconfont {
|
||||||
@ -293,7 +294,7 @@
|
|||||||
|
|
||||||
.tags {
|
.tags {
|
||||||
font-size 14px
|
font-size 14px
|
||||||
color var(--el-text-color-primary)
|
color var(--text-fb)
|
||||||
padding 3px 0
|
padding 3px 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,32 +20,31 @@
|
|||||||
}
|
}
|
||||||
--btnColor: linear-gradient(88deg, #af61f0 1.44%, #5b62ce);
|
--btnColor: linear-gradient(88deg, #af61f0 1.44%, #5b62ce);
|
||||||
--border-active:rgba(255, 255, 255, 0.1);
|
--border-active:rgba(255, 255, 255, 0.1);
|
||||||
// --card-bg: rgba(17, 28, 68, 1);
|
|
||||||
// --card-bg: #1f243f;
|
|
||||||
--card-bg:#252d58;
|
--card-bg:#252d58;
|
||||||
--card-bg-table: rgba(17, 28, 68, 1);
|
--chat-bg:#1f243f
|
||||||
|
--chat-wel-bg:#2d2f388a;
|
||||||
|
--card-bg-table: rgba(17, 28, 68, 1);
|
||||||
--theme-bg:rgb(13, 20, 53);
|
--theme-bg:rgb(13, 20, 53);
|
||||||
--theme-bg-color: rgb(13, 20, 53);
|
--theme-bg-color: rgb(13, 20, 53);
|
||||||
--theme-bg-all:rgb(13, 20, 53);
|
--theme-bg-all:rgb(13, 20, 53);
|
||||||
--sign-bg: rgba(27, 37, 75, 1);
|
--sign-bg: rgba(27, 37, 75, 1);
|
||||||
--text-theme-color: #fff;
|
--text-theme-color: #fff;
|
||||||
--text-color-primary: #d1c7ff;
|
--text-color-primary: #d1c7ff;
|
||||||
--el-text-color-regular: rgba(163, 174, 208, 1)
|
--theme-text-color-secondary: #a3aed0;
|
||||||
--el-border-color:rgb(79, 80, 85)
|
--theme-text-color-primary: #fff;
|
||||||
--el-text-color-primary: #fff;//黑白切换
|
--theme-text-primary: #f3f3f3;
|
||||||
--el-bg-color-overlay: rgba(17, 28, 68, 1);
|
|
||||||
--el-border-color-light: rgba(255, 255, 255, 0.2);
|
|
||||||
--line-box:rgba(255, 255, 255, 0.1);
|
--line-box:rgba(255, 255, 255, 0.1);
|
||||||
// --chat-bg:#141a36;
|
|
||||||
--chat-bg:#1f243f
|
|
||||||
--el-bg-color:#141a36;
|
--el-bg-color:#141a36;
|
||||||
--el-fill-color-blank: rgba(17, 28, 68, 1);
|
--el-fill-color-blank: rgba(17, 28, 68, 1);
|
||||||
--el-fill-color-light: rgba(86, 86, 95, .2);
|
--el-fill-color-light: rgba(86, 86, 95, .2);
|
||||||
--el-color-primary-light-9:rgba(86, 86, 95, .2);
|
--el-color-primary-light-9:rgba(86, 86, 95, .2);
|
||||||
--chat-wel-bg:#2d2f388a;
|
--el-text-color-regular: rgba(163, 174, 208, 1)
|
||||||
--theme-text-color-secondary: #a3aed0;
|
--el-border-color:rgb(79, 80, 85);//黑白切换
|
||||||
// --el-pagination-button-bg-color: rgba(86,86,95,0.2);
|
--el-bg-color-overlay: rgba(17, 28, 68, 1);
|
||||||
|
--el-border-color-light: rgba(255, 255, 255, 0.2);
|
||||||
|
--chat-content-bg:rgba(86, 86, 95, .2);
|
||||||
|
--chat-content-bg-list:rgba(86, 86, 95, .2);
|
||||||
|
--hover-deep-color:#30323c;
|
||||||
//layout
|
//layout
|
||||||
.more-menus li.moreTitle,
|
.more-menus li.moreTitle,
|
||||||
.twoTittle .title,
|
.twoTittle .title,
|
||||||
@ -62,13 +61,6 @@
|
|||||||
background: #0080006e;
|
background: #0080006e;
|
||||||
}
|
}
|
||||||
|
|
||||||
--theme-text-color-primary: #fff;
|
|
||||||
--theme-text-primary: #f3f3f3;
|
|
||||||
--chat-content-bg:rgba(86, 86, 95, .2);
|
|
||||||
--chat-content-bg-list:rgba(86, 86, 95, .2);
|
|
||||||
--hover-deep-color:#30323c;
|
|
||||||
// --theme-text-tertiary: #e1e1e1;
|
|
||||||
|
|
||||||
// 操作按钮
|
// 操作按钮
|
||||||
--btn-bg: rgba(86, 86, 95, .5);
|
--btn-bg: rgba(86, 86, 95, .5);
|
||||||
|
|
||||||
|
@ -3,51 +3,42 @@
|
|||||||
@import 'font.styl'
|
@import 'font.styl'
|
||||||
:root[data-theme="light"] {
|
:root[data-theme="light"] {
|
||||||
--text-fb:#000;
|
--text-fb:#000;
|
||||||
// rgba(43, 54, 116, 1)
|
|
||||||
--text-color: #5b62ce; // 主要的文本颜色
|
--text-color: #5b62ce; // 主要的文本颜色
|
||||||
--normal-color: rgba(43, 54, 116, 1); // 普通颜色
|
--normal-color: rgba(43, 54, 116, 1); // 普通颜色
|
||||||
p, h1, h2, h3, h4, h5, h6, article {
|
p, h1, h2, h3, h4, h5, h6, article {
|
||||||
// color: var(--text-color) !important;
|
|
||||||
font-family: $font-regular;
|
font-family: $font-regular;
|
||||||
}
|
}
|
||||||
html,
|
html,
|
||||||
body,
|
body,
|
||||||
#app,
|
#app,
|
||||||
.wrapper {
|
.wrapper {
|
||||||
// background: var(--theme-bg)
|
|
||||||
// background-color: var(--theme-bg)
|
|
||||||
|
|
||||||
// background: linear-gradient(88deg, #fff3f3 1.44%, #e7e8ff);
|
|
||||||
|
|
||||||
font-family: $font-regular;
|
font-family: $font-regular;
|
||||||
}//#6b61f6
|
}
|
||||||
|
|
||||||
--btnColor: linear-gradient(88deg, #af61f0 1.44%, #5b62ce);
|
--btnColor: linear-gradient(88deg, #af61f0 1.44%, #5b62ce);
|
||||||
--border-active:rgba(134, 140, 255, 1);
|
--border-active:rgba(134, 140, 255, 1);
|
||||||
--code-btnColor: linear-gradient(88deg, #af61f0 1.44%, #5b62ce);
|
--code-btnColor: linear-gradient(88deg, #af61f0 1.44%, #5b62ce);
|
||||||
--card-bg:#fff;
|
--card-bg:#fff;
|
||||||
|
--chat-bg:#fff;
|
||||||
--theme-bg:linear-gradient(88deg, #fff3f3 1.44%, #e7e8ff);
|
--theme-bg:linear-gradient(88deg, #fff3f3 1.44%, #e7e8ff);
|
||||||
--theme-bg-all:#f5f7fd;
|
--theme-bg-all:#f5f7fd;
|
||||||
--theme-bg-color: #f5f7fd;
|
--theme-bg-color: #f5f7fd;
|
||||||
--sign-bg: rgba(244, 247, 254, 1);
|
--sign-bg: rgba(244, 247, 254, 1);
|
||||||
--text-theme-color: rgba(43, 54, 116, 1)
|
--text-theme-color: rgba(43, 54, 116, 1)
|
||||||
--text-color-primary: rgba(67, 24, 255, 1);
|
--text-color-primary: rgba(67, 24, 255, 1);
|
||||||
--line-box:rgba(79, 89, 102, 0.122);
|
--line-box:rgba(79, 89, 102, 0.122);
|
||||||
--el-bg-color-overlay: #fff;
|
--theme-text-color-primary: #000;
|
||||||
--el-bg-color:#fff;
|
|
||||||
--el-fill-color-blank: #fff;
|
|
||||||
|
|
||||||
--theme-text-color-primary: #000;
|
|
||||||
--theme-text-primary: #000;
|
--theme-text-primary: #000;
|
||||||
--theme-text-color-secondary: #666;
|
--theme-text-color-secondary: #666;
|
||||||
--chat-bg: #fff;
|
|
||||||
|
|
||||||
--chat-content-bg:#f5f7fc;
|
--chat-content-bg:#f5f7fc;
|
||||||
--chat-list-bg: #0302020a;
|
--chat-list-bg: #0302020a;
|
||||||
--chat-content-bg-list: #fff;
|
--chat-content-bg-list:#fff;
|
||||||
--chat-wel-bg: rgba(247, 247, 248, 1);
|
--chat-wel-bg:rgba(247, 247, 248, 1);
|
||||||
--el-pagination-button-bg-color: rgba(86, 86, 95, 0.2);
|
--hover-deep-color:#fff;
|
||||||
--hover-deep-color: #fff;
|
--el-bg-color-overlay: #fff;
|
||||||
|
--el-bg-color:#fff;
|
||||||
|
--el-fill-color-blank: #fff;
|
||||||
|
--el-pagination-button-bg-color: rgba(86,86,95,0.2);
|
||||||
|
|
||||||
// 操作按钮
|
// 操作按钮
|
||||||
--btn-bg: rgba(100, 100, 100, .1);
|
--btn-bg: rgba(100, 100, 100, .1);
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<el-input v-model="form.code" maxlength="6"/>
|
<el-input v-model="form.code" maxlength="6"/>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8" style="padding-left: 10px">
|
<el-col :span="8" style="padding-left: 10px">
|
||||||
<send-msg :receiver="form.mobile" type="mobile"/>
|
<send-msg :receiver="form.mobile" size="default" type="mobile"/>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
@ -257,7 +257,8 @@ const reGenerate = (prompt) => {
|
|||||||
code {
|
code {
|
||||||
// color:var(--theme-text-color-primary);
|
// color:var(--theme-text-color-primary);
|
||||||
color:#fff
|
color:#fff
|
||||||
background-color var(--el-color-primary-light-3)
|
// background-color var(--el-color-primary-light-3)
|
||||||
|
background-color: var(--el-color-primary);
|
||||||
padding 3px 5px;
|
padding 3px 5px;
|
||||||
border-radius 5px;
|
border-radius 5px;
|
||||||
}
|
}
|
||||||
@ -349,7 +350,6 @@ const reGenerate = (prompt) => {
|
|||||||
padding 10px 10px 10px 0;
|
padding 10px 10px 10px 0;
|
||||||
|
|
||||||
.bar-item {
|
.bar-item {
|
||||||
background-color var( --little-btn-bg);
|
|
||||||
padding 3px 5px;
|
padding 3px 5px;
|
||||||
margin-right 10px;
|
margin-right 10px;
|
||||||
border-radius 5px;
|
border-radius 5px;
|
||||||
|
@ -6,13 +6,6 @@
|
|||||||
:row-key="(row) => row.id"
|
:row-key="(row) => row.id"
|
||||||
table-layout="auto"
|
table-layout="auto"
|
||||||
border
|
border
|
||||||
style="
|
|
||||||
--el-table-border-color: #373c47;
|
|
||||||
--el-table-tr-bg-color: #2d323b;
|
|
||||||
--el-table-row-hover-bg-color: #373c47;
|
|
||||||
--el-table-header-bg-color: #474e5c;
|
|
||||||
--el-table-text-color: #d1d1d1;
|
|
||||||
"
|
|
||||||
>
|
>
|
||||||
<el-table-column prop="username" label="用户" />
|
<el-table-column prop="username" label="用户" />
|
||||||
<el-table-column prop="invite_code" label="邀请码" />
|
<el-table-column prop="invite_code" label="邀请码" />
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
>
|
>
|
||||||
<div class="form" id="bind-mobile-form">
|
<div class="form" id="bind-mobile-form">
|
||||||
<el-form :model="form">
|
<el-form :model="form">
|
||||||
<el-form-item label="兑换码">
|
<el-form-item>
|
||||||
<el-input v-model="form.code"/>
|
<el-input v-model="form.code"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-container class="send-verify-code">
|
<el-container class="send-verify-code">
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="success"
|
||||||
class="btn-normal"
|
|
||||||
:size="props.size"
|
:size="props.size"
|
||||||
:disabled="!canSend"
|
:disabled="!canSend"
|
||||||
@click="sendMsg"
|
@click="sendMsg"
|
||||||
plain
|
|
||||||
>
|
>
|
||||||
{{ btnText }}
|
{{ btnText }}
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -17,12 +15,12 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
// 发送短信验证码组件
|
// 发送短信验证码组件
|
||||||
import { ref } from "vue";
|
import {ref} from "vue";
|
||||||
import { validateEmail, validateMobile } from "@/utils/validate";
|
import {validateEmail, validateMobile} from "@/utils/validate";
|
||||||
import { httpPost } from "@/utils/http";
|
import {httpPost} from "@/utils/http";
|
||||||
import { showMessageError, showMessageOK } from "@/utils/dialog";
|
import {showMessageError, showMessageOK} from "@/utils/dialog";
|
||||||
import Captcha from "@/components/Captcha.vue";
|
import Captcha from "@/components/Captcha.vue";
|
||||||
import { getSystemInfo } from "@/store/cache";
|
import {getSystemInfo} from "@/store/cache";
|
||||||
|
|
||||||
// eslint-disable-next-line no-undef
|
// eslint-disable-next-line no-undef
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div :class="'sidebar '+theme">
|
<div :class="'sidebar '+theme">
|
||||||
<a class="logo" href="/" target="_blank">
|
<a class="logo w-full" href="/" target="_blank">
|
||||||
<el-image :src="logo"/>
|
<el-image :src="logo"/>
|
||||||
<span class="text" v-show="!sidebar.collapse">{{ title }}</span>
|
<span class="text" v-show="!sidebar.collapse">{{ title }}</span>
|
||||||
</a>
|
</a>
|
||||||
@ -212,7 +212,6 @@ setMenuItems(items)
|
|||||||
|
|
||||||
.logo {
|
.logo {
|
||||||
display flex
|
display flex
|
||||||
width 219px
|
|
||||||
background-color #324157
|
background-color #324157
|
||||||
padding 6px 15px;
|
padding 6px 15px;
|
||||||
cursor pointer
|
cursor pointer
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</div>
|
</div>
|
||||||
<el-scrollbar :height="{ height: +'px' }">
|
<el-scrollbar :height="chatBoxHeight">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<el-row v-for="chat in chatList" :key="chat.chat_id">
|
<el-row v-for="chat in chatList" :key="chat.chat_id">
|
||||||
<div :class="chat.chat_id === chatId ? 'chat-list-item active' : 'chat-list-item'" @click="loadChat(chat)">
|
<div :class="chat.chat_id === chatId ? 'chat-list-item active' : 'chat-list-item'" @click="loadChat(chat)">
|
||||||
@ -262,24 +262,24 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import { nextTick, onMounted, onUnmounted, ref, watch } from "vue";
|
import {nextTick, onMounted, onUnmounted, ref, watch} from "vue";
|
||||||
import ChatPrompt from "@/components/ChatPrompt.vue";
|
import ChatPrompt from "@/components/ChatPrompt.vue";
|
||||||
import ChatReply from "@/components/ChatReply.vue";
|
import ChatReply from "@/components/ChatReply.vue";
|
||||||
import { Delete, Edit, InfoFilled, More, Plus, Promotion, Search, Share, VideoPause } from "@element-plus/icons-vue";
|
import {Delete, Edit, InfoFilled, More, Plus, Promotion, Search, Share, VideoPause} from "@element-plus/icons-vue";
|
||||||
import "highlight.js/styles/a11y-dark.css";
|
import "highlight.js/styles/a11y-dark.css";
|
||||||
import { isMobile, randString, removeArrayItem, UUID } from "@/utils/libs";
|
import {isMobile, randString, removeArrayItem, UUID} from "@/utils/libs";
|
||||||
import { ElMessage, ElMessageBox } from "element-plus";
|
import {ElMessage, ElMessageBox} from "element-plus";
|
||||||
import { httpGet, httpPost } from "@/utils/http";
|
import {httpGet, httpPost} from "@/utils/http";
|
||||||
import { useRouter } from "vue-router";
|
import {useRouter} from "vue-router";
|
||||||
import Clipboard from "clipboard";
|
import Clipboard from "clipboard";
|
||||||
import { checkSession, getClientId, getSystemInfo } from "@/store/cache";
|
import {checkSession, getClientId, getSystemInfo} from "@/store/cache";
|
||||||
import Welcome from "@/components/Welcome.vue";
|
import Welcome from "@/components/Welcome.vue";
|
||||||
import { useSharedStore } from "@/store/sharedata";
|
import {useSharedStore} from "@/store/sharedata";
|
||||||
import FileSelect from "@/components/FileSelect.vue";
|
import FileSelect from "@/components/FileSelect.vue";
|
||||||
import FileList from "@/components/FileList.vue";
|
import FileList from "@/components/FileList.vue";
|
||||||
import ChatSetting from "@/components/ChatSetting.vue";
|
import ChatSetting from "@/components/ChatSetting.vue";
|
||||||
import BackTop from "@/components/BackTop.vue";
|
import BackTop from "@/components/BackTop.vue";
|
||||||
import { closeLoading, showLoading, showMessageError } from "@/utils/dialog";
|
import {closeLoading, showLoading, showMessageError} from "@/utils/dialog";
|
||||||
|
|
||||||
const title = ref("GeekAI-智能助手");
|
const title = ref("GeekAI-智能助手");
|
||||||
const models = ref([]);
|
const models = ref([]);
|
||||||
|
@ -38,15 +38,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- <li
|
|
||||||
class="menu-list-item flex-center-col"
|
|
||||||
v-for="item in 5"
|
|
||||||
:key="item"
|
|
||||||
>
|
|
||||||
<el-icon><Location /></el-icon>
|
|
||||||
<div>首页</div>
|
|
||||||
</li> -->
|
|
||||||
|
|
||||||
<!-- 更多 -->
|
<!-- 更多 -->
|
||||||
<div class="bot" :style="{ width: isCollapse ? '65px' : '170px' }">
|
<div class="bot" :style="{ width: isCollapse ? '65px' : '170px' }">
|
||||||
<div class="bot-line"></div>
|
<div class="bot-line"></div>
|
||||||
@ -116,13 +107,11 @@
|
|||||||
</a>
|
</a>
|
||||||
|
|
||||||
<ThemeChange />
|
<ThemeChange />
|
||||||
<!-- <div v-if="!isCollapse">会员</div> -->
|
|
||||||
</li>
|
</li>
|
||||||
</div>
|
</div>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- :style="{ 'padding-left': isCollapse ? '65px' : '170px' }" -->
|
|
||||||
<el-scrollbar class="right-main">
|
<el-scrollbar class="right-main">
|
||||||
<div
|
<div
|
||||||
v-if="loginUser.id === undefined || !loginUser.id"
|
v-if="loginUser.id === undefined || !loginUser.id"
|
||||||
@ -133,7 +122,6 @@
|
|||||||
<div class="topheader" v-if="loginUser.id === undefined || !loginUser.id">
|
<div class="topheader" v-if="loginUser.id === undefined || !loginUser.id">
|
||||||
<el-button @click="router.push('/login')" class="btn-go animate__animated animate__pulse animate__infinite" round>登录</el-button>
|
<el-button @click="router.push('/login')" class="btn-go animate__animated animate__pulse animate__infinite" round>登录</el-button>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="content custom-scroll"> -->
|
|
||||||
<div class="content custom-scroll">
|
<div class="content custom-scroll">
|
||||||
<router-view :key="routerViewKey" v-slot="{ Component }">
|
<router-view :key="routerViewKey" v-slot="{ Component }">
|
||||||
<transition name="move" mode="out-in">
|
<transition name="move" mode="out-in">
|
||||||
@ -155,25 +143,24 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { CirclePlus, Setting, UserFilled } from "@element-plus/icons-vue";
|
import {CirclePlus, Setting, UserFilled} from "@element-plus/icons-vue";
|
||||||
import ThemeChange from "@/components/ThemeChange.vue";
|
import ThemeChange from "@/components/ThemeChange.vue";
|
||||||
import avatarImg from "@/assets/img/avatar.jpg";
|
import avatarImg from "@/assets/img/avatar.jpg";
|
||||||
import { useRouter } from "vue-router";
|
import {useRouter} from "vue-router";
|
||||||
import { onMounted, ref, watch } from "vue";
|
import {onMounted, ref, watch} from "vue";
|
||||||
import { httpGet } from "@/utils/http";
|
import {httpGet} from "@/utils/http";
|
||||||
import { ElMessage } from "element-plus";
|
import {ElMessage} from "element-plus";
|
||||||
import { checkSession, getLicenseInfo, getSystemInfo } from "@/store/cache";
|
import {checkSession, getLicenseInfo, getSystemInfo} from "@/store/cache";
|
||||||
import { removeUserToken } from "@/store/session";
|
import {removeUserToken} from "@/store/session";
|
||||||
import { useSharedStore } from "@/store/sharedata";
|
import {useSharedStore} from "@/store/sharedata";
|
||||||
import ConfigDialog from "@/components/UserInfoDialog.vue";
|
import ConfigDialog from "@/components/UserInfoDialog.vue";
|
||||||
import { showMessageError } from "@/utils/dialog";
|
import {showMessageError} from "@/utils/dialog";
|
||||||
|
|
||||||
const isCollapse = ref(true);
|
const isCollapse = ref(true);
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const logo = ref("");
|
const logo = ref("");
|
||||||
const mainNavs = ref([]);
|
const mainNavs = ref([]);
|
||||||
const moreNavs = ref([]);
|
const moreNavs = ref([]);
|
||||||
// const curPath = ref(router.currentRoute.value.path);
|
|
||||||
const curPath = ref();
|
const curPath = ref();
|
||||||
|
|
||||||
const title = ref("");
|
const title = ref("");
|
||||||
|
@ -82,11 +82,12 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="box-card">
|
||||||
|
<h2>您推荐的用户</h2>
|
||||||
|
|
||||||
<h2>您推荐的用户</h2>
|
<div class="invite-logs">
|
||||||
|
<invite-list v-if="isLogin" />
|
||||||
<div class="invite-logs">
|
</div>
|
||||||
<invite-list v-if="isLogin" />
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -87,18 +87,25 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="chat-box">
|
<div class="chat-box">
|
||||||
<div class="top-bar">
|
<!-- <div class="top-bar">
|
||||||
<el-button @click="downloadImage" type="primary">
|
<el-button @click="downloadImage" type="primary">
|
||||||
<el-icon>
|
<el-icon>
|
||||||
<Download />
|
<Download />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
<span>下载图片</span>
|
<span>下载图片-</span>
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div> -->
|
||||||
|
|
||||||
<div class="body" id="markmap">
|
<div class="body" id="markmap">
|
||||||
<svg ref="svgRef" :style="{ height: rightBoxHeight + 'px' }" />
|
<svg ref="svgRef" :style="{ height: rightBoxHeight + 'px' }" />
|
||||||
<div id="toolbar"></div>
|
<div id="toolbar">
|
||||||
|
<el-button @click="downloadImage" type="primary">
|
||||||
|
<el-icon>
|
||||||
|
<Download />
|
||||||
|
</el-icon>
|
||||||
|
<span>下载图片</span>
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- end task list box -->
|
<!-- end task list box -->
|
||||||
@ -119,7 +126,8 @@ import { Toolbar } from "markmap-toolbar";
|
|||||||
import { useSharedStore } from "@/store/sharedata";
|
import { useSharedStore } from "@/store/sharedata";
|
||||||
|
|
||||||
const leftBoxHeight = ref(window.innerHeight - 105);
|
const leftBoxHeight = ref(window.innerHeight - 105);
|
||||||
const rightBoxHeight = ref(window.innerHeight - 115);
|
//const rightBoxHeight = ref(window.innerHeight - 115);
|
||||||
|
const rightBoxHeight = ref(window.innerHeight);
|
||||||
|
|
||||||
const prompt = ref("");
|
const prompt = ref("");
|
||||||
const text = ref("");
|
const text = ref("");
|
||||||
|
@ -87,11 +87,12 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-empty description="暂无数据" v-else :image="nodata" />
|
<el-empty description="暂无数据" v-else :image="nodata" />
|
||||||
|
<div class="box-card">
|
||||||
|
<h2 class="headline">消费账单</h2>
|
||||||
|
|
||||||
<h2 class="headline">消费账单</h2>
|
<div class="user-order">
|
||||||
|
<user-order v-if="isLogin" :key="userOrderKey" />
|
||||||
<div class="user-order">
|
</div>
|
||||||
<user-order v-if="isLogin" :key="userOrderKey" />
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -358,7 +358,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="公告配置" name="notice">
|
<el-tab-pane label="公告配置" name="notice">
|
||||||
<md-editor class="mgb20" v-model="notice" @on-upload-img="onUploadImg"/>
|
<md-editor class="mgb20" v-model="notice" :theme="store.theme" @on-upload-img="onUploadImg"/>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<div style="padding-top: 10px;margin-left: 150px;">
|
<div style="padding-top: 10px;margin-left: 150px;">
|
||||||
<el-button type="primary" @click="save('notice')">保存</el-button>
|
<el-button type="primary" @click="save('notice')">保存</el-button>
|
||||||
@ -366,7 +366,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="思维导图" name="mark_map">
|
<el-tab-pane label="思维导图" name="mark_map">
|
||||||
<md-editor class="mgb20" v-model="system['mark_map_text']" @on-upload-img="onUploadImg"/>
|
<md-editor class="mgb20" :theme="store.theme" v-model="system['mark_map_text']" @on-upload-img="onUploadImg"/>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<div style="padding-top: 10px;margin-left: 150px;">
|
<div style="padding-top: 10px;margin-left: 150px;">
|
||||||
<el-button type="primary" @click="save('system')">保存</el-button>
|
<el-button type="primary" @click="save('system')">保存</el-button>
|
||||||
@ -440,7 +440,8 @@
|
|||||||
|
|
||||||
<el-tab-pane label="修复数据" name="fixData">
|
<el-tab-pane label="修复数据" name="fixData">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<!-- <p class="text">有些版本升级的时候更新了数据库的结构,比如字段名字改了,需要把之前的字段的值转移到其他字段,这些无法通过简单的 SQL 语句可以实现的,需要手动写程序修正数据。</p>-->
|
<p class="text">有些版本升级的时候更新了数据库的结构,比如字段名字改了,需要把之前的字段的值转移到其他字段,这些无法通过简单的
|
||||||
|
SQL 语句可以实现的,需要手动写程序修正数据。</p>
|
||||||
|
|
||||||
<!-- <p class="text">当前版本 v4.1.4 需要修正用户数据,增加了 mobile 和 email 字段,需要把之前用手机号或者邮箱注册的用户的 username 字段数据初始化到 mobile 或者 email 字段。另外,需要把订单的支付渠道从名字称修正为 key。</p>-->
|
<!-- <p class="text">当前版本 v4.1.4 需要修正用户数据,增加了 mobile 和 email 字段,需要把之前用手机号或者邮箱注册的用户的 username 字段数据初始化到 mobile 或者 email 字段。另外,需要把订单的支付渠道从名字称修正为 key。</p>-->
|
||||||
|
|
||||||
@ -464,6 +465,7 @@ import 'md-editor-v3/lib/style.css';
|
|||||||
import Menu from "@/views/admin/Menu.vue";
|
import Menu from "@/views/admin/Menu.vue";
|
||||||
import {copyObj, dateFormat} from "@/utils/libs";
|
import {copyObj, dateFormat} from "@/utils/libs";
|
||||||
import ItemsInput from "@/components/ui/ItemsInput.vue";
|
import ItemsInput from "@/components/ui/ItemsInput.vue";
|
||||||
|
import {useSharedStore} from "@/store/sharedata";
|
||||||
|
|
||||||
const activeName = ref('basic')
|
const activeName = ref('basic')
|
||||||
const system = ref({models: []})
|
const system = ref({models: []})
|
||||||
@ -479,6 +481,7 @@ const mjModels = ref([
|
|||||||
{name: "快速(Fast)", value: "fast"},
|
{name: "快速(Fast)", value: "fast"},
|
||||||
{name: "急速(Turbo)", value: "turbo"},
|
{name: "急速(Turbo)", value: "turbo"},
|
||||||
])
|
])
|
||||||
|
const store = useSharedStore()
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// 加载系统配置
|
// 加载系统配置
|
||||||
|
Loading…
Reference in New Issue
Block a user