Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
Z
zxn-adputin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lijin
zxn-adputin
Commits
ef6a73cc
Commit
ef6a73cc
authored
Mar 23, 2025
by
lijin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1. 优化登录页面样式;2. 增加隐私协议
parent
5972c447
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
394 additions
and
13 deletions
+394
-13
index.vue
src/components/Footer/index.vue
+72
-0
main.js
src/main.js
+1
-1
index.js
src/router/index.js
+6
-1
index.vue
src/views/login/index.vue
+151
-11
index.vue
src/views/privacy/index.vue
+164
-0
No files found.
src/components/Footer/index.vue
0 → 100644
View file @
ef6a73cc
<
template
>
<footer
class=
"app-footer"
>
<div
class=
"footer-content"
>
<div
class=
"copyright"
>
©
{{
currentYear
}}
IntelliAdvert. All Rights Reserved.
</div>
<div
class=
"footer-links"
>
<router-link
to=
"/privacy"
class=
"footer-link"
>
隐私协议
</router-link>
</div>
</div>
</footer>
</
template
>
<
script
>
export
default
{
name
:
'AppFooter'
,
computed
:
{
currentYear
()
{
return
new
Date
().
getFullYear
();
}
}
}
</
script
>
<
style
scoped
>
.app-footer
{
padding
:
20px
30px
;
background-color
:
#f8f8f8
;
border-top
:
1px
solid
#e7e7e7
;
width
:
100%
;
box-sizing
:
border-box
;
font-size
:
14px
;
}
.footer-content
{
max-width
:
1200px
;
margin
:
0
auto
;
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
}
.copyright
{
color
:
#606266
;
font-weight
:
400
;
}
.footer-links
{
display
:
flex
;
gap
:
20px
;
}
.footer-link
{
color
:
#409EFF
;
text-decoration
:
none
;
transition
:
color
0.3s
,
transform
0.2s
;
font-weight
:
500
;
padding
:
0
5px
;
}
.footer-link
:hover
{
color
:
#66b1ff
;
text-decoration
:
underline
;
}
@media
(
max-width
:
767px
)
{
.footer-content
{
flex-direction
:
column
;
gap
:
10px
;
}
}
</
style
>
src/main.js
View file @
ef6a73cc
...
@@ -59,7 +59,7 @@ Vue.filter("toFixed", function (price, limit) {
...
@@ -59,7 +59,7 @@ Vue.filter("toFixed", function (price, limit) {
});
});
router
.
beforeEach
((
to
,
from
,
next
)
=>
{
router
.
beforeEach
((
to
,
from
,
next
)
=>
{
if
(
to
.
path
==
"/login"
||
to
.
path
==
"/materialUpload"
||
to
.
path
==
"/materialTag"
||
to
.
path
==
"/tools/uploadYoutubeNew"
)
{
if
(
to
.
path
==
"/login"
||
to
.
path
==
"/materialUpload"
||
to
.
path
==
"/materialTag"
||
to
.
path
==
"/tools/uploadYoutubeNew"
||
to
.
path
==
"/privacy"
)
{
next
();
next
();
}
else
{
}
else
{
gatewayUserRouters
().
then
(
res
=>
{
gatewayUserRouters
().
then
(
res
=>
{
...
...
src/router/index.js
View file @
ef6a73cc
...
@@ -208,7 +208,12 @@ export const constantRouterMap = [
...
@@ -208,7 +208,12 @@ export const constantRouterMap = [
}]
}]
},
},
{
path
:
"/privacy"
,
// 隐私协议页面
name
:
"privacy"
,
component
:
()
=>
import
(
"@/views/privacy/index"
),
hidden
:
true
},
];
];
Vue
.
use
(
Router
);
Vue
.
use
(
Router
);
...
...
src/views/login/index.vue
View file @
ef6a73cc
...
@@ -28,16 +28,20 @@
...
@@ -28,16 +28,20 @@
Sign in
Sign in
</el-button>
</el-button>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<app-footer
class=
"login-footer"
/>
</div>
</div>
</
template
>
</
template
>
<
script
>
<
script
>
import
{
isvalidUsername
}
from
'@/utils/validate'
import
{
isvalidUsername
}
from
'@/utils/validate'
import
AppFooter
from
'@/components/Footer'
export
default
{
export
default
{
name
:
'Login'
,
name
:
'Login'
,
components
:
{
AppFooter
},
data
()
{
data
()
{
const
validateUsername
=
(
rule
,
value
,
callback
)
=>
{
const
validateUsername
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
isvalidUsername
(
value
))
{
if
(
!
isvalidUsername
(
value
))
{
...
@@ -134,26 +138,107 @@ $light_gray:#eee;
...
@@ -134,26 +138,107 @@ $light_gray:#eee;
color
:
#454545
;
color
:
#454545
;
}
}
}
}
</
style
>
<
style
rel=
"stylesheet/scss"
lang=
"scss"
>
$bg
:
#f8fbff
;
$primary
:
#1890ff
;
$text
:
#333
;
$border
:
#e0e7ff
;
/* reset element-ui css */
.login-container
{
.el-input
{
display
:
inline-block
;
height
:
48px
;
width
:
85%
;
input
{
background
:
white
;
border
:
0px
;
-webkit-appearance
:
none
;
border-radius
:
0px
;
padding
:
12px
5px
12px
15px
;
color
:
$text
;
height
:
48px
;
transition
:
all
0
.3s
;
&
:
-
webkit-autofill
{
-webkit-box-shadow
:
0
0
0px
1000px
#fff
inset
!
important
;
-webkit-text-fill-color
:
$text
!
important
;
}
&
:focus
{
box-shadow
:
0
0
0
2px
rgba
(
24
,
144
,
255
,
0
.2
);
}
}
}
.el-form-item
{
border
:
1px
solid
$border
;
background
:
white
;
border-radius
:
8px
;
margin-bottom
:
24px
;
transition
:
all
0
.3s
;
box-shadow
:
0
2px
10px
rgba
(
0
,
0
,
0
,
0
.03
);
&
:hover
,
&
:focus-within
{
border-color
:
$primary
;
box-shadow
:
0
4px
12px
rgba
(
0
,
0
,
0
,
0
.06
);
transform
:
translateY
(
-1px
);
}
}
.el-button--primary
{
height
:
48px
;
border-radius
:
8px
;
font-size
:
16px
;
font-weight
:
500
;
border
:
none
;
background
:
linear-gradient
(
135deg
,
#42a6ff
0%
,
#1890ff
100%
);
box-shadow
:
0
4px
12px
rgba
(
24
,
144
,
255
,
0
.4
);
transition
:
all
0
.3s
;
&
:hover
,
&
:focus
{
background
:
linear-gradient
(
135deg
,
#57b5ff
0%
,
#3a9eff
100%
);
box-shadow
:
0
6px
18px
rgba
(
24
,
144
,
255
,
0
.5
);
transform
:
translateY
(
-2px
);
}
}
}
</
style
>
</
style
>
<
style
rel=
"stylesheet/scss"
lang=
"scss"
scoped
>
<
style
rel=
"stylesheet/scss"
lang=
"scss"
scoped
>
$bg
:
#2d3a4b
;
$bg
:
#f8fbff
;
$dark_gray
:
#889aa4
;
$dark_gray
:
#888
;
$light_gray
:
#eee
;
$text
:
#333
;
$primary
:
#1890ff
;
.login-container
{
.login-container
{
position
:
fixed
;
position
:
fixed
;
height
:
100%
;
height
:
100%
;
width
:
100%
;
width
:
100%
;
background-color
:
$bg
;
background-color
:
$bg
;
background-image
:
linear-gradient
(
135deg
,
#ECEFF1
0%
,
#E8EAF6
50%
,
#E3F2FD
100%
)
,
url("data:image/svg+xml,%3Csvg width='100' height='100' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z' fill='%231890ff' fill-opacity='0.05' fill-rule='evenodd'/%3E%3C/svg%3E")
;
.login-form
{
.login-form
{
position
:
absolute
;
position
:
absolute
;
left
:
0
;
left
:
0
;
right
:
0
;
right
:
0
;
width
:
5
20px
;
width
:
4
20px
;
max-width
:
10
0%
;
max-width
:
9
0%
;
padding
:
35px
35px
1
5px
35px
;
padding
:
35px
35px
2
5px
35px
;
margin
:
120px
auto
;
margin
:
120px
auto
;
background-color
:
rgba
(
255
,
255
,
255
,
0
.98
);
border-radius
:
12px
;
box-shadow
:
0
8px
30px
rgba
(
0
,
0
,
0
,
0
.1
);
overflow
:
hidden
;
&
:
:
before
{
content
:
''
;
position
:
absolute
;
top
:
0
;
left
:
0
;
right
:
0
;
height
:
4px
;
background
:
linear-gradient
(
to
right
,
#1890ff
,
#42b5ff
);
}
}
}
.tips
{
.tips
{
font-size
:
14px
;
font-size
:
14px
;
...
@@ -167,18 +252,32 @@ $light_gray:#eee;
...
@@ -167,18 +252,32 @@ $light_gray:#eee;
}
}
.svg-container
{
.svg-container
{
padding
:
6px
5px
6px
15px
;
padding
:
6px
5px
6px
15px
;
color
:
$
dark_gra
y
;
color
:
$
primar
y
;
vertical-align
:
middle
;
vertical-align
:
middle
;
width
:
30px
;
width
:
30px
;
display
:
inline-block
;
display
:
inline-block
;
opacity
:
0
.8
;
}
}
.title
{
.title
{
font-size
:
26px
;
font-size
:
26px
;
font-weight
:
400
;
color
:
$text
;
color
:
$light_gray
;
margin
:
0px
auto
40px
auto
;
margin
:
0px
auto
40px
auto
;
text-align
:
center
;
text-align
:
center
;
font-weight
:
bold
;
font-weight
:
600
;
letter-spacing
:
0
.5px
;
position
:
relative
;
&
:
:
after
{
content
:
''
;
position
:
absolute
;
bottom
:
-10px
;
left
:
50%
;
transform
:
translateX
(
-50%
);
width
:
40px
;
height
:
3px
;
background
:
$primary
;
border-radius
:
3px
;
}
}
}
.show-pwd
{
.show-pwd
{
position
:
absolute
;
position
:
absolute
;
...
@@ -188,6 +287,47 @@ $light_gray:#eee;
...
@@ -188,6 +287,47 @@ $light_gray:#eee;
color
:
$dark_gray
;
color
:
$dark_gray
;
cursor
:
pointer
;
cursor
:
pointer
;
user-select
:
none
;
user-select
:
none
;
transition
:
color
0
.3s
;
&
:hover
{
color
:
$primary
;
}
}
.login-footer
{
position
:
fixed
;
bottom
:
0
;
left
:
0
;
right
:
0
;
background-color
:
rgba
(
255
,
255
,
255
,
0
.9
);
border-top
:
1px
solid
rgba
(
0
,
0
,
0
,
0
.05
);
box-shadow
:
0
-2px
10px
rgba
(
0
,
0
,
0
,
0
.05
);
/* 重写footer中的样式,适应明亮背景 */
/
deep
/
.app-footer
{
background-color
:
transparent
;
padding
:
18px
30px
;
}
/
deep
/
.copyright
{
color
:
#888
;
font-size
:
14px
;
}
/
deep
/
.footer-link
{
color
:
$primary
;
font-size
:
14px
;
font-weight
:
500
;
transition
:
all
0
.3s
;
padding
:
5px
12px
;
border-radius
:
4px
;
&
:hover
{
color
:
darken
(
$primary
,
10%
);
text-decoration
:
none
;
transform
:
translateY
(
-1px
);
background-color
:
rgba
(
24
,
144
,
255
,
0
.08
);
}
}
}
}
}
}
</
style
>
</
style
>
src/views/privacy/index.vue
0 → 100644
View file @
ef6a73cc
<
template
>
<div
class=
"privacy-container"
>
<div
class=
"privacy-content"
>
<h1>
隐私政策
</h1>
<p
class=
"last-updated"
>
最后更新:
{{
currentDate
}}
</p>
<section>
<h2>
引言
</h2>
<p>
本隐私政策旨在说明我们如何收集、使用、存储和保护通过我们的应用程序和服务收集的信息,特别是与 Google API 服务相关的信息。
</p>
<p>
我们遵守
<a
href=
"https://developers.google.com/terms/api-services-user-data-policy"
target=
"_blank"
>
Google API 服务用户数据政策
</a>
,包括有限使用要求。
</p>
</section>
<section>
<h2>
我们收集的信息
</h2>
<p>
我们可能会收集以下类型的信息:
</p>
<ul>
<li><strong>
账户信息
</strong>
:当您授权我们访问您的 Google 账户时,我们会收到您的基本个人资料信息,如您的姓名和电子邮件地址。
</li>
<li><strong>
广告账户数据
</strong>
:包括来自 Google Ads API 的广告活动、广告组、广告和与您的广告账户相关的其他数据。
</li>
<li><strong>
YouTube 数据
</strong>
:如果您授权,我们会访问 YouTube 数据,如您的视频、频道和相关元数据。
</li>
<li><strong>
使用数据
</strong>
:我们收集有关您如何使用我们的服务的信息,包括日志数据、设备信息和cookie信息。
</li>
</ul>
</section>
<section>
<h2>
我们如何使用信息
</h2>
<p>
我们使用收集的信息:
</p>
<ul>
<li>
提供、维护和改进我们的服务
</li>
<li>
帮助您管理和优化您的广告活动
</li>
<li>
分析和优化我们服务的性能和功能
</li>
<li>
保护我们的服务安全,防止欺诈和滥用
</li>
<li>
遵守法律义务
</li>
</ul>
<p><strong>
我们不会向第三方出售您的个人信息。
</strong></p>
</section>
<section>
<h2>
Google API 服务的数据使用限制
</h2>
<p>
当我们使用 Google API 服务(包括 Google Ads API 和 YouTube Data API)时,我们遵循以下原则:
</p>
<ul>
<li>
我们只会使用我们服务的功能所必需的 API 数据访问权限
</li>
<li>
我们不会使用此类数据开发、训练或改进机器学习算法,除非获得明确授权
</li>
<li>
我们仅在您同意的范围内使用您的数据,并且不会将其用于未经授权的目的
</li>
<li>
我们不会在未经您授权的情况下共享您的数据
</li>
<li>
我们会保持数据的安全性和机密性
</li>
</ul>
</section>
<section>
<h2>
数据保留和删除
</h2>
<p>
我们将保留您的数据,直到满足以下条件之一:
</p>
<ul>
<li>
您删除您的账户或撤销访问权限
</li>
<li>
数据不再需要用于提供我们的服务
</li>
<li>
根据法律要求,我们应当删除数据
</li>
</ul>
<p>
当您撤销对 Google API 数据的访问权限时,我们将停止处理新数据并删除之前缓存的数据,除非法律要求我们保留这些数据。
</p>
</section>
<section>
<h2>
您的权利和选择
</h2>
<p>
您有权:
</p>
<ul>
<li>
查看我们持有的有关您的信息
</li>
<li>
更正不准确的信息
</li>
<li>
要求删除您的数据
</li>
<li>
限制或反对我们处理您的数据
</li>
<li>
随时撤销对 Google API 服务的授权
</li>
</ul>
<p>
您可以通过从
<a
href=
"https://myaccount.google.com/permissions"
target=
"_blank"
>
Google 账户权限页面
</a>
撤销我们的访问权限来撤销授权。
</p>
</section>
<section>
<h2>
安全措施
</h2>
<p>
我们采取适当的安全措施来保护您的个人信息免受未经授权的访问、更改、披露或销毁。这些措施包括内部审查、数据收集、存储和处理做法以及安全措施,以及物理安全措施。
</p>
</section>
<section>
<h2>
隐私政策的变更
</h2>
<p>
我们可能会不时更新本隐私政策。我们将通过在本页面上发布新的隐私政策通知您任何变更。建议您定期查看隐私政策以了解任何变更。
</p>
</section>
<section>
<h2>
联系我们
</h2>
<p>
如果您对本隐私政策有任何问题或疑虑,请通过以下方式联系我们:
</p>
<p>
邮箱:support@intelliadvert.com
</p>
</section>
</div>
</div>
</
template
>
<
script
>
export
default
{
name
:
'PrivacyPolicy'
,
data
()
{
return
{
currentDate
:
new
Date
().
toISOString
().
split
(
'T'
)[
0
]
}
}
}
</
script
>
<
style
scoped
>
.privacy-container
{
padding
:
20px
;
max-width
:
1000px
;
margin
:
0
auto
;
background-color
:
#fff
;
min-height
:
calc
(
100vh
-
180px
);
}
.privacy-content
{
line-height
:
1.6
;
}
h1
{
font-size
:
28px
;
margin-bottom
:
10px
;
color
:
#333
;
text-align
:
center
;
}
.last-updated
{
color
:
#666
;
text-align
:
center
;
margin-bottom
:
30px
;
font-style
:
italic
;
}
h2
{
font-size
:
22px
;
margin-top
:
30px
;
margin-bottom
:
15px
;
color
:
#333
;
border-bottom
:
1px
solid
#eee
;
padding-bottom
:
8px
;
}
section
{
margin-bottom
:
30px
;
}
p
{
margin-bottom
:
15px
;
}
ul
{
padding-left
:
20px
;
margin-bottom
:
15px
;
}
li
{
margin-bottom
:
8px
;
}
a
{
color
:
#1890ff
;
text-decoration
:
none
;
}
a
:hover
{
text-decoration
:
underline
;
}
</
style
>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment