Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
K
karname-ui
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Reza Sahebgharan
karname-ui
Commits
b6147118
Commit
b6147118
authored
Sep 08, 2019
by
Reza Sahebgharan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Login And Register Back
parent
d53da8aa
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
242 additions
and
139 deletions
+242
-139
App.vue
client/App.vue
+1
-0
Worklist.vue
client/components/Worklist.vue
+2
-81
i18n.js
client/plugins/i18n.js
+29
-4
routes.js
client/plugins/routes.js
+4
-4
vuetify.js
client/plugins/vuetify.js
+6
-19
Home.vue
client/views/Home.vue
+7
-7
Login.vue
client/views/Login.vue
+81
-12
Register.vue
client/views/Register.vue
+103
-11
worklist.js
imports/api/methods/worklist.js
+9
-1
No files found.
client/App.vue
View file @
b6147118
...
...
@@ -22,6 +22,7 @@ export default {
methods
:
{
changeLocale
(
locale
)
{
i18n
.
locale
=
locale
;
this
.
$vuetify
.
lang
.
current
=
locale
;
}
},
watch
:
{
...
...
client/components/Worklist.vue
View file @
b6147118
...
...
@@ -57,7 +57,7 @@
show-select
class=
"elevation-1"
disable-pagination
hide-default-footer
height=
"600"
style=
"width:100%"
></v-data-table>
...
...
@@ -172,86 +172,7 @@ export default {
protein
:
7
,
iron
:
"6%"
},
{
name
:
"Frozen Yogurt"
,
calories
:
159
,
fat
:
6.0
,
carbs
:
24
,
protein
:
4.0
,
iron
:
"1%"
},
{
name
:
"Ice cream sandwich"
,
calories
:
237
,
fat
:
9.0
,
carbs
:
37
,
protein
:
4.3
,
iron
:
"1%"
},
{
name
:
"Eclair"
,
calories
:
262
,
fat
:
16.0
,
carbs
:
23
,
protein
:
6.0
,
iron
:
"7%"
},
{
name
:
"Cupcake"
,
calories
:
305
,
fat
:
3.7
,
carbs
:
67
,
protein
:
4.3
,
iron
:
"8%"
},
{
name
:
"Gingerbread"
,
calories
:
356
,
fat
:
16.0
,
carbs
:
49
,
protein
:
3.9
,
iron
:
"16%"
},
{
name
:
"Jelly bean"
,
calories
:
375
,
fat
:
0.0
,
carbs
:
94
,
protein
:
0.0
,
iron
:
"0%"
},
{
name
:
"Lollipop"
,
calories
:
392
,
fat
:
0.2
,
carbs
:
98
,
protein
:
0
,
iron
:
"2%"
},
{
name
:
"Honeycomb"
,
calories
:
408
,
fat
:
3.2
,
carbs
:
87
,
protein
:
6.5
,
iron
:
"45%"
},
{
name
:
"Donut"
,
calories
:
452
,
fat
:
25.0
,
carbs
:
51
,
protein
:
4.9
,
iron
:
"22%"
},
{
name
:
"KitKat"
,
calories
:
518
,
fat
:
26.0
,
carbs
:
65
,
protein
:
7
,
iron
:
"6%"
}
]
})
};
...
...
client/plugins/i18n.js
View file @
b6147118
...
...
@@ -4,6 +4,11 @@ Vue.use(VueI18n);
const
messages
=
{
'en'
:
{
$vuetify
:
{
dataTable
:
{
itemsPerPageText
:
'منستیبمتن سمکنیتب '
}
},
Login
:
{
loginHeader
:
'Login'
,
registerBtn
:
'Register'
,
...
...
@@ -12,7 +17,11 @@ const messages = {
loginBtn
:
'login'
,
passwordHint
:
'At Least 8 characters'
,
required
:
'Required'
,
min8Character
:
'Min 8 Characters'
min8Character
:
'Min 8 Characters'
,
usernameAlert
:
'please enter username'
,
passwordAlert
:
'please enter password'
,
errorUserNotFound
:
'User not found'
,
errorIncorrectPassword
:
'Incorrect Password'
},
Register
:
{
registerHeader
:
'Register'
,
...
...
@@ -23,7 +32,13 @@ const messages = {
registerBtn
:
'Register And Login'
,
required
:
'Required'
,
min8Character
:
'Min 8 Characters'
,
matchPass
:
"password and repeat passwords must be the same"
matchPass
:
"password and repeat passwords must be the same"
,
usernameAlert
:
'please enter username'
,
firstPassAlert
:
'please enter password'
,
secondPassAlert
:
'please enter password'
,
error403
:
'Username already exists'
,
loadingText
:
'creating user'
,
userCreated
:
'user has been Created'
},
AppHeader
:
{
appName
:
'Karname'
,
...
...
@@ -43,7 +58,11 @@ const messages = {
loginBtn
:
'ورود'
,
passwordHint
:
'حداقل 8 کاراکتر'
,
required
:
'مورد نیاز'
,
min8Character
:
'حداقل 8 کاراکتر'
min8Character
:
'حداقل 8 کاراکتر'
,
usernameAlert
:
'لطفا نام کاربری را وارد نمایید'
,
passwordAlert
:
'لطفا رمز ورود را وارد نمایید'
,
errorUserNotFound
:
'کاربر یافت نشد'
,
errorIncorrectPassword
:
'رمز نادرست'
},
Register
:
{
registerHeader
:
'ثبت نام کاربر'
,
...
...
@@ -54,7 +73,13 @@ const messages = {
registerBtn
:
'ثبت نام و ورود'
,
required
:
'مورد نیاز'
,
min8Character
:
'حداقل 8 کاراکتر'
,
matchPass
:
"رمز عبور و تکرار آن باید مشابه باشند"
matchPass
:
"رمز عبور و تکرار آن باید مشابه باشند"
,
usernameAlert
:
'لطفا نام کاربری را وارد نمایید'
,
firstPassAlert
:
'لطفا رمز را وارد نمایید'
,
secondPassAlert
:
'لطفا رمز را وارد نمایید'
,
error403
:
'نام کاربری وجود دارد'
,
loadingText
:
'در حال ایجاد کاربر'
,
userCreated
:
'کاربر ایجاد شد'
},
AppHeader
:
{
appName
:
'کارنامه'
,
...
...
client/plugins/routes.js
View file @
b6147118
...
...
@@ -12,14 +12,14 @@ const routes = [{
name
:
'Home'
},
{
path
:
'/
log
in'
,
path
:
'/
sign
in'
,
component
:
Login
,
name
:
'
log
in'
name
:
'
sign
in'
},
{
path
:
'/
register
'
,
path
:
'/
signup
'
,
component
:
Register
,
name
:
'
register
'
name
:
'
signup
'
},
{
path
:
'/main'
,
...
...
client/plugins/vuetify.js
View file @
b6147118
...
...
@@ -7,28 +7,15 @@ import Vuetify from 'vuetify';
import
'../../public/fonts/font.css'
;
Vue
.
use
(
Vuetify
);
// import fa from 'vuetify/es5/locale/fa';
// import en from 'vuetify/es5/locale/en';
// import VueI18n from 'vue-i18n';
// Vue.use(VueI18n);
// import messages from './i18n';
// const i18n = new VueI18n({
// locale: 'fa', // set locale
// fallbackLocale: 'en', // set fallback locale
// messages, // set locale messages
// });
import
fa
from
'vuetify/es5/locale/fa'
;
import
en
from
'vuetify/es5/locale/en'
;
export
default
new
Vuetify
({
// lang: {
// locales: { fa, en },
// current: 'fa',
// t: (key, ...params) => i18n.t(key, params),
// },
lang
:
{
locales
:
{
fa
,
en
},
current
:
'en'
},
icons
:
{
iconfont
:
'mdi'
,
// default - only for display purposes
},
...
...
client/views/Home.vue
View file @
b6147118
...
...
@@ -7,13 +7,13 @@ import { Meteor } from "meteor/meteor";
export
default
{
beforeRouteEnter
(
to
,
from
,
next
)
{
next
(
vm
=>
{
debugger
;
//
if (Meteor.userId()) {
//
vm.$router.push("/main/worklist");
//
} else {
// vm.$router.push("/log
in");
//
}
vm
.
$router
.
push
(
"/login"
);
if
(
Meteor
.
userId
())
{
vm
.
$router
.
push
(
"/main/worklist"
);
}
else
{
vm
.
$router
.
push
(
"/sign
in"
);
}
});
}
};
...
...
client/views/Login.vue
View file @
b6147118
<
template
>
<v-content
class=
"fill-height"
>
<auth-header
btnToProp=
"
register
"
btnLabel=
"Login.registerBtn"
btnIconName=
"mdi-account-plus"
></auth-header>
<auth-header
btnToProp=
"
signup
"
btnLabel=
"Login.registerBtn"
btnIconName=
"mdi-account-plus"
></auth-header>
<v-container
fluid
class=
"align-center fill-height backgroundImg"
>
<v-row
justify=
"center"
class=
"loginCard"
>
<v-col
xs=
"8"
sm=
"6"
md=
"4"
lg=
"3"
>
<v-card
class=
"elevation-12 roundedCard"
light
elevation=
"24"
>
...
...
@@ -19,6 +18,8 @@
prepend-icon=
"mdi-account-circle"
:rules=
"[rules.required]"
v-model=
"username"
ref=
"usernameTextField"
:hint=
"this.usernameAlert?`$
{$t('Login.usernameAlert')}`:''"
/>
<v-text-field
:type=
"!showPassword?'password' :'text'"
...
...
@@ -26,25 +27,27 @@
prepend-icon=
"mdi-lock"
@
click:append=
"showPassword = !showPassword"
:append-icon=
"showPassword ? 'mdi-eye': 'mdi-eye-off'"
:hint=
"$t('Login.passwordHint')"
:hint=
"
this.passwordAlert?$t('Login.passwordAlert'):
$t('Login.passwordHint')"
:rules=
"[rules.required, rules.min]"
v-model=
"password"
ref=
"passwordTextField"
/>
</v-form>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-card-actions
class=
"flex-wrap"
>
<v-btn
style=
"width:100%"
color=
"rgb(94, 181, 177,.85)"
rounded
dark
class=
"white--text mb-2"
@
click=
"loginUser()"
:loading=
"loading"
:disabled=
"loading"
>
<v-icon
left
>
mdi-login
</v-icon>
<small>
{{
$t
(
'Login.loginBtn'
)
}}
</small>
</v-btn>
<v-btn
text
rounded
color=
"green"
x-small
>
Change Password?
</v-btn>
</v-card-actions>
</v-card>
</v-col>
...
...
@@ -61,6 +64,7 @@
<li></li>
<li></li>
</ul>
<v-snackbar
v-model=
"snackbar"
:color=
"snackbarColor"
:timeout=
"2000"
>
{{
snackbarText
}}
</v-snackbar>
</v-container>
<app-footer></app-footer>
</v-content>
...
...
@@ -78,9 +82,15 @@ export default {
},
data
()
{
return
{
loading
:
false
,
snackbar
:
false
,
snackbarColor
:
"red"
,
snackbarText
:
""
,
showPassword
:
false
,
username
:
null
,
usernameAlert
:
false
,
password
:
null
,
passwordAlert
:
false
,
rules
:
{
required
:
value
=>
!!
value
||
this
.
$t
(
"Login.required"
),
min
:
v
=>
{
...
...
@@ -92,22 +102,45 @@ export default {
},
methods
:
{
loginUser
()
{
debugger
;
const
that
=
this
;
if
((
this
.
username
!=
null
)
&
(
this
.
password
!=
null
))
{
if
(
this
.
username
==
null
||
this
.
username
.
length
==
0
)
{
this
.
$refs
.
usernameTextField
.
focus
();
this
.
usernameAlert
=
true
;
return
;
}
if
(
this
.
password
==
null
||
this
.
password
.
length
==
0
)
{
this
.
$refs
.
passwordTextField
.
focus
();
this
.
passwordAlert
=
true
;
return
;
}
this
.
loading
=
true
;
Meteor
.
loginWithPassword
(
this
.
username
,
this
.
password
,
function
(
error
,
result
)
{
console
.
log
(
result
);
if
(
error
)
{
console
.
log
(
error
);
that
.
loading
=
false
;
if
(
error
.
reason
==
"Incorrect password"
)
{
that
.
snackbarText
=
that
.
$t
(
"Login.errorIncorrectPassword"
);
that
.
snackbarColor
=
"red"
;
that
.
snackbar
=
true
;
}
if
(
error
.
reason
==
"User not found"
)
{
that
.
snackbarText
=
that
.
$t
(
"Login.errorUserNotFound"
);
that
.
snackbarColor
=
"red"
;
that
.
snackbar
=
true
;
}
}
else
{
Meteor
.
setTimeout
(()
=>
{
that
.
loading
=
false
;
that
.
$router
.
push
(
"/main/worklist"
);
},
1000
);
}
});
}
}
},
beforeRouteEnter
(
to
,
from
,
next
)
{
next
(
vm
=>
{
...
...
@@ -166,4 +199,39 @@ img {
border-radius
:
20px
;
}
@import
url("./css/bubbles.css")
;
/* loader */
@-moz-keyframes
loader
{
from
{
transform
:
rotate
(
0
);
}
to
{
transform
:
rotate
(
360deg
);
}
}
@-webkit-keyframes
loader
{
from
{
transform
:
rotate
(
0
);
}
to
{
transform
:
rotate
(
360deg
);
}
}
@-o-keyframes
loader
{
from
{
transform
:
rotate
(
0
);
}
to
{
transform
:
rotate
(
360deg
);
}
}
@keyframes
loader
{
from
{
transform
:
rotate
(
0
);
}
to
{
transform
:
rotate
(
360deg
);
}
}
</
style
>
\ No newline at end of file
client/views/Register.vue
View file @
b6147118
<
template
>
<!--
<div
class=
"fill-height"
>
-->
<v-content
class=
"fill-height"
>
<auth-header
btnToProp=
"
log
in"
btnLabel=
"Register.loginBtn"
btnIconName=
"mdi-login"
></auth-header>
<auth-header
btnToProp=
"
sign
in"
btnLabel=
"Register.loginBtn"
btnIconName=
"mdi-login"
></auth-header>
<v-container
fluid
class=
"align-center fill-height backgroundImg"
>
<v-row
justify=
"center"
class=
"loginCard"
>
<v-col
xs=
"8"
sm=
"6"
md=
"4"
lg=
"3"
>
...
...
@@ -17,6 +17,8 @@
prepend-icon=
"mdi-account-circle"
:rules=
"[rules.required]"
v-model=
"username"
ref=
"usernameTextField"
:hint=
"this.usernameAlert?`$
{$t('Register.usernameAlert')}`:''"
/>
<v-text-field
:type=
"!showPassword1?'password' :'text'"
...
...
@@ -26,6 +28,8 @@
:append-icon=
"showPassword1 ? 'mdi-eye': 'mdi-eye-off'"
v-model=
"firstPass"
:rules=
"[rules.required, rules.min]"
ref=
"firstPassTextField"
:hint=
"this.firstPassAlert?`$
{$t('Register.usernameAlert')}`:''"
/>
<v-text-field
:type=
"!showPassword2?'password' :'text'"
...
...
@@ -35,14 +39,27 @@
:append-icon=
"showPassword2 ? 'mdi-eye': 'mdi-eye-off'"
v-model=
"secondPass"
:rules=
"[rules.required, rules.matchPass]"
ref=
"secondPassTextField"
:hint=
"this.secondPassAlert?`$
{$t('Register.usernameAlert')}`:''"
/>
</v-form>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn
style=
"width:100%"
dark
color=
"rgb(94, 181, 177,.85)"
rounded
@
click=
"createAccount()"
>
<v-btn
style=
"width:100%"
class=
"white--text"
color=
"rgb(94, 181, 177,.85)"
rounded
@
click=
"createAccount()"
:loading=
"loading"
:disabled=
"loading"
>
<v-icon
left
>
mdi-login
</v-icon>
<small>
{{
$t
(
'Register.registerBtn'
)
}}
</small>
<template
v-slot:loader
>
<span>
{{
$t
(
'Register.loadingText'
)
}}
</span>
</
template
>
</v-btn>
</v-card-actions>
</v-card>
...
...
@@ -60,6 +77,7 @@
<li></li>
<li></li>
</ul>
<v-snackbar
v-model=
"snackbar"
:color=
"snackbarColor"
:timeout=
"2000"
>
{{ snackbarText }}
</v-snackbar>
</v-container>
<app-footer></app-footer>
</v-content>
...
...
@@ -77,9 +95,16 @@ export default {
},
data
()
{
return
{
snackbar
:
false
,
snackbarText
:
""
,
snackbarColor
:
"red"
,
loading
:
false
,
username
:
null
,
firstPass
:
undefined
,
secondPass
:
undefined
,
usernameAlert
:
false
,
firstPass
:
null
,
firstPassAlert
:
false
,
secondPass
:
null
,
secondPassAlert
:
false
,
showPassword1
:
false
,
showPassword2
:
false
,
rules
:
{
...
...
@@ -102,7 +127,32 @@ export default {
const
username
=
this
.
username
;
const
password
=
this
.
firstPass
;
const
that
=
this
;
if
(
this
.
username
==
null
||
this
.
username
.
length
==
0
)
{
this
.
$refs
.
usernameTextField
.
focus
();
this
.
usernameAlert
=
true
;
return
;
}
if
(
this
.
firstPass
==
null
||
this
.
firstPass
.
length
==
0
)
{
this
.
$refs
.
firstPassTextField
.
focus
();
this
.
firstPassAlert
=
true
;
return
;
}
if
(
this
.
secondPass
==
null
||
this
.
secondPass
.
length
==
0
)
{
this
.
$refs
.
secondPassTextField
.
focus
();
this
.
secondPassAlert
=
true
;
return
;
}
if
(
this
.
firstPass
!=
this
.
secondPass
)
{
return
;
}
if
(
this
.
firstPass
==
this
.
secondPass
&&
this
.
username
!=
null
)
{
this
.
loading
=
true
;
Accounts
.
createUser
(
{
username
:
this
.
username
,
...
...
@@ -110,15 +160,21 @@ export default {
},
function
(
error
,
result
)
{
if
(
error
)
{
return
;
}
else
{
Meteor
.
loginWithPassword
(
username
,
password
,
function
(
error
)
{
if
(
error
)
{
console
.
log
(
error
);
that
.
loading
=
false
;
if
(
error
.
error
==
403
)
{
that
.
snackbarColor
=
"red"
;
that
.
snackbarText
=
that
.
$t
(
"Register.error403"
);
that
.
snackbar
=
true
;
}
}
else
{
that
.
snackbarColor
=
"rgb(94, 181, 177,.85)"
;
that
.
snackbarText
=
that
.
$t
(
"Register.userCreated"
);
that
.
snackbar
=
true
;
Meteor
.
setTimeout
(()
=>
{
that
.
loading
=
false
;
that
.
$router
.
push
(
"/main/worklist"
);
}
});
},
1000
);
}
}
);
...
...
@@ -162,4 +218,39 @@ img {
.roundedCard
{
border-radius
:
20px
;
}
/* loader */
@-moz-keyframes
loader
{
from
{
transform
:
rotate
(
0
);
}
to
{
transform
:
rotate
(
360deg
);
}
}
@-webkit-keyframes
loader
{
from
{
transform
:
rotate
(
0
);
}
to
{
transform
:
rotate
(
360deg
);
}
}
@-o-keyframes
loader
{
from
{
transform
:
rotate
(
0
);
}
to
{
transform
:
rotate
(
360deg
);
}
}
@keyframes
loader
{
from
{
transform
:
rotate
(
0
);
}
to
{
transform
:
rotate
(
360deg
);
}
}
</
style
>
\ No newline at end of file
imports/api/methods/worklist.js
View file @
b6147118
import
{
Meteor
}
from
'meteor/meteor'
;
import
{
Accounts
}
from
'meteor/accounts-base'
import
{
Accounts
}
from
'meteor/accounts-base'
;
Accounts
.
onLogin
(
function
(
user
)
{
debugger
;
console
.
log
(
","
,
user
.
user
.
_id
)
});
Meteor
.
methods
({
...
...
@@ -9,6 +16,7 @@ Meteor.methods({
try
{
const
result
=
HTTP
.
call
(
'GET'
,
'http://192.168.4.105:2050/Broker/HISIntegration.svc/rest/Fetchworklist/ratio'
);
console
.
log
(
result
);
return
true
;
}
catch
(
e
)
{
// Got a network error, timeout, or HTTP error in the 400 or 500 range.
...
...
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