Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
confucius
Project
Project
Details
Activity
Releases
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
罗超
confucius
Commits
6cebe811
Commit
6cebe811
authored
Jun 09, 2021
by
罗超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
e66bce18
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
2172 additions
and
801 deletions
+2172
-801
index.js
src/api/classroom/index.js
+25
-0
normal.png
src/assets/images/classroom/normal.png
+0
-0
warning.png
src/assets/images/classroom/warning.png
+0
-0
addSuppliesStockOut-from.vue
src/components/sale/addSuppliesStockOut-from.vue
+1
-1
classroom-form.vue
src/components/school/classroom/classroom-form.vue
+110
-1
Scheduling.vue
src/pages/classroom/Scheduling.vue
+214
-0
classroomNav.vue
src/pages/classroom/components/classroomNav.vue
+87
-0
comSummary.css
src/pages/classroom/components/css/comSummary.css
+393
-0
lunarCalendar.js
src/pages/classroom/components/js/lunarCalendar.js
+257
-0
scenicSummary.vue
src/pages/classroom/components/scenicSummary.vue
+172
-0
useRecord.vue
src/pages/classroom/useRecord.vue
+92
-0
classroom.vue
src/pages/school/classroom.vue
+16
-5
routes.js
src/router/routes.js
+775
-764
erpindex.js
src/utils/erpindex.js
+26
-26
url.js
src/utils/url.js
+4
-4
No files found.
src/api/classroom/index.js
0 → 100644
View file @
6cebe811
import
request
from
'../../utils/request'
/**
* 获取当日排课计划
* @param {JSON参数} data
*/
export
function
getUseClassRoomList
(
data
)
{
return
request
({
url
:
'/ClassRoom/GetUseClassRoomList'
,
method
:
'post'
,
data
})
}
/**
* 获取学校以及教室导航
* @param {JSON参数} data
*/
export
function
getSchoolAndRoomNav
(
data
)
{
return
request
({
url
:
'/ClassRoom/GetSchoolAndRoomList'
,
method
:
'post'
,
data
})
}
src/assets/images/classroom/normal.png
0 → 100644
View file @
6cebe811
618 Bytes
src/assets/images/classroom/warning.png
0 → 100644
View file @
6cebe811
599 Bytes
src/components/sale/addSuppliesStockOut-from.vue
View file @
6cebe811
...
...
@@ -204,7 +204,7 @@
<
script
>
import
{
import
{
getSchoolDropdown
,
//获取班级下拉列表
getClassPage_ck
}
from
'../../api/school/index'
;
//获取校区列表
...
...
src/components/school/classroom/classroom-form.vue
View file @
6cebe811
...
...
@@ -15,6 +15,44 @@
<q-input
filled
stack-label
maxlength=
"20"
:dense=
"false"
v-model=
"objOption.RoomName"
ref=
"RoomName"
class=
"col-12"
label=
"教室名称"
:rules=
"[val => !!val || '请填写教室名称']"
/>
</div>
<div
class=
"row wrap"
>
<q-input
filled
stack-label
:min=
"0"
type=
"number"
:dense=
"false"
v-model
.
number=
"objOption.SeatNum"
ref=
"SeatNum"
class=
"col-12"
label=
"座位数"
:rules=
"[val => !!val||val>=0 || '请填写座位数']"
/>
</div>
<div
class=
"row wrap"
>
<el-time-select
class=
"q-mr-lg"
v-model=
"objOption.StartTime"
:picker-options=
"
{
start: '00:00',
step: '00:05',
end: '23:55',
maxTime:objOption.EndTime
}"
placeholder="排班开始时间">
</el-time-select>
<el-time-select
v-model=
"objOption.EndTime"
:picker-options=
"
{
start: '06:00',
step: '00:05',
end: '23:55',
minTime:objOption.StartTime
}"
placeholder="排班结束时间">
</el-time-select>
</div>
<div
class=
"row wrap"
style=
"padding-top:20px"
>
<q-uploader
style=
"display: inline-block;height:320px; max-width: 100%;background-repeat:no-repeat"
:style=
"
{'background-image':'url(' + objOption.RoomPicList + ')'}" max-files="1" hide-upload-btn
label="教室封面" :max-file-size="5*1024*1024" accept=".jpg, image/*" auto-upload
:factory="uploadFile" >
</q-uploader>
</div>
</q-card-section>
<q-separator
/>
<q-card-actions
align=
"right"
class=
"bg-white"
>
...
...
@@ -32,7 +70,9 @@
quertClassRoomInfo
,
saveClassRoom
}
from
'../../../api/school/index'
import
{
UploadSelfFile
,
}
from
'../../../api/common/common'
export
default
{
props
:
{
saveObj
:
{
...
...
@@ -48,6 +88,10 @@
RoomName
:
""
,
//教室名称
School_Id
:
0
,
//校区编号
Status
:
-
1
,
//状态
StartTime
:
"06:00"
,
//排班开始时间
EndTime
:
""
,
//排班结束时间
SeatNum
:
0
,
//座位数
RoomPicList
:[],
//教室图片
},
optionTitle
:
""
,
schoolList
:
[],
...
...
@@ -71,13 +115,23 @@
this
.
objOption
.
RoomId
=
res
.
Data
.
RoomId
;
this
.
objOption
.
RoomName
=
res
.
Data
.
RoomName
;
this
.
objOption
.
School_Id
=
res
.
Data
.
School_Id
;
this
.
objOption
.
StartTime
=
res
.
Data
.
StartTime
||
"06:00"
;
//排班开始时间
this
.
objOption
.
EndTime
=
res
.
Data
.
EndTime
||
""
;
//排班结束时间
this
.
objOption
.
SeatNum
=
res
.
Data
.
SeatNum
;
//座位数
this
.
objOption
.
RoomPicList
=
res
.
Data
.
RoomPic
;
//教室图片
}
console
.
log
(
this
.
objOption
)
});
}
else
{
this
.
optionTitle
=
"新增教室"
;
this
.
objOption
.
RoomId
=
0
;
this
.
objOption
.
RoomName
=
""
;
this
.
objOption
.
School_Id
=
0
;
this
.
objOption
.
StartTime
=
"06:00"
;
//排班开始时间
this
.
objOption
.
EndTime
=
""
;
//排班结束时间
this
.
objOption
.
SeatNum
=
0
;
//座位数
this
.
objOption
.
RoomPicList
=
[];
//教室图片
console
.
log
(
2
,
this
.
objOption
)
}
},
//获取校区列表
...
...
@@ -100,6 +154,22 @@
this
.
persistent
=
false
},
saveClassRoom
()
{
if
(
!
this
.
objOption
.
StartTime
){
this
.
$q
.
notify
({
type
:
'negative'
,
position
:
"top"
,
message
:
`请选择排班开始时间`
})
return
}
if
(
!
this
.
objOption
.
EndTime
){
this
.
$q
.
notify
({
type
:
'negative'
,
position
:
"top"
,
message
:
`请选择排班结束时间`
})
return
}
this
.
saveLoading
=
true
this
.
$refs
.
School_Id
.
validate
()
this
.
$refs
.
RoomName
.
validate
()
...
...
@@ -107,6 +177,9 @@
!
this
.
$refs
.
School_Id
.
hasError
&&
!
this
.
$refs
.
RoomName
.
hasError
)
{
if
(
!
Array
.
isArray
(
this
.
objOption
.
RoomPicList
))
{
this
.
objOption
.
RoomPicList
=
[
this
.
objOption
.
RoomPicList
]
}
saveClassRoom
(
this
.
objOption
).
then
(
res
=>
{
this
.
saveLoading
=
false
this
.
$q
.
notify
({
...
...
@@ -125,10 +198,46 @@
this
.
saveLoading
=
false
}
},
onRejected
(
rejectedEntries
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
position
:
"top"
,
message
:
`文件验证失败,请重新上传`
})
},
uploadFile
(
files
)
{
UploadSelfFile
(
'studentIcon'
,
files
[
0
],
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
objOption
.
RoomPicList
=
res
.
FileUrl
;
}
})
},
}
}
</
script
>
<
style
>
.avatar-uploader-icon
{
font-size
:
28px
;
color
:
#8c939d
;
width
:
143px
;
height
:
82px
;
line-height
:
82px
;
text-align
:
center
;
}
.avatar-uploader
.el-upload
{
border
:
1px
dashed
#d9d9d9
;
border-radius
:
6px
;
cursor
:
pointer
;
position
:
relative
;
overflow
:
hidden
;
}
._delete_img
{
position
:
absolute
;
top
:
0px
;
height
:
82px
;
width
:
143px
;
line-height
:
34px
;
text-align
:
center
;
background-color
:
rgba
(
2
,
2
,
2
,
0.6
);
display
:
inherit
;
opacity
:
0
;
transition
:
all
linear
.5s
}
._delete_img
i
.iconfont
{
display
:
inline-block
;
width
:
32px
;
height
:
32px
;
border-radius
:
50%
;
color
:
#E95252
!important
;
background-color
:
rgba
(
251
,
251
,
251
,
0.9
);
margin-top
:
26px
;}
._upload_box
ul
li
{
float
:
left
;
height
:
82px
;
width
:
143px
;
padding
:
0px
20px
20px
0
;
text-align
:
center
;
position
:
relative
;
cursor
:
pointer
;
margin-right
:
10px
;}
._upload_box
ul
li
img
{
height
:
82px
;
width
:
143px
;}
._upload_box
ul
li
:hover
._delete_img
{
opacity
:
1
;}
._upload_tips
{
font-size
:
12px
;
position
:
absolute
;
top
:
71%
;
width
:
100%
;
left
:
0
;
text-align
:
center
;
color
:
#949494
;}
</
style
>
src/pages/classroom/Scheduling.vue
0 → 100644
View file @
6cebe811
<
template
>
<div
class=
"page-body"
v-loading=
"loading"
>
<div
v-for=
"item in classdata"
:key=
"item.Key"
class=
"school-item"
>
<div
class=
"school-name"
>
{{
item
.
SchoolName
}}
</div>
<div
class=
"classroom-box"
>
<div
v-for=
"(_item,_index) in item.RoomList"
:key=
"item.RoomId"
>
<div
class=
"classroom-item q-mr-lg q-mb-lg"
:class=
"
{'classroom-item-noUse':_item.UserRate===1}">
<el-image
class=
"classroom-img"
:src=
"_item.RoomPicList[0]"
fit=
"contain"
>
<div
slot=
"error"
class=
"image-slot"
>
<i
class=
"el-icon-picture-outline"
></i>
</div>
</el-image>
<div
class=
"classroom-name"
>
{{
_item
.
RoomName
}}
<!--
<img
src=
"../../assets/images/classroom/warning.png"
class=
"q-ml-sm"
v-if=
"_item.warn"
>
<img
src=
"../../assets/images/classroom/normal.png"
class=
"q-ml-sm"
v-if=
"!_item.warn"
>
-->
</div>
<q-knob
show-value
font-size=
"0.1rem"
v-model=
"_item.user"
size=
"50px"
:thickness=
"0.1"
color=
"primary"
track-color=
"grey-3"
class=
"q-ma-md classroom-user"
readonly
style=
"text-align: center"
>
{{
_item
.
UserRate
}}
%
<br/>
使用率
</q-knob>
<div
class=
"classroom-info"
>
<q-carousel
v-model=
"_item.slide"
animated
:navigation=
"false"
height=
"75px"
class=
" text-white shadow-1 rounded-borders"
arrows
control-color=
"grey-4"
control-text-color=
"primary"
control-type=
"regular"
>
<q-carousel-slide
v-for=
"(slide,slideIndex) in _item.TimeList"
:key=
"slideIndex"
:name=
"slideIndex"
>
<div
class=
"info-box"
@
click=
"goUrl"
>
<div
class=
"time"
>
{{
slide
.
StartTime
}}
</div>
<div
class=
"info"
>
{{
slide
.
ClassName
}}
</div>
</div>
</q-carousel-slide>
</q-carousel>
</div>
</div>
</div>
</div>
</div>
</div>
</
template
>
<
script
>
import
{
getUseClassRoomList
}
from
'../../api/classroom/index'
;
export
default
{
meta
:
{
title
:
"教室状态"
},
data
()
{
return
{
classdata
:[
{
SchoolName
:
"锦江校区一"
,
list
:[
{
slide
:
0
,
img
:
""
,
classroom
:
'樱花教室'
,
user
:
80
,
warn
:
0
,
course
:[{
time
:
'09:30'
,
info
:
"打开门面,把电视打开,打扫前台和每处卫生。"
},{
time
:
'09:30'
,
info
:
"打开门面,把电视打开,打扫前台和每处卫生。"
},{
time
:
'12:30'
,
info
:
"打开门面,把电视打开,打扫前台和每处卫生。"
}]
},
]
}
],
loading
:
true
,
};
},
mounted
(){
this
.
getList
();
},
methods
:{
goUrl
(){
this
.
$router
.
push
({
path
:
"/classroom/useRecord"
,
query
:{
}
})
},
getList
()
{
getUseClassRoomList
({}).
then
(
res
=>
{
this
.
loading
=
false
if
(
res
.
Code
===
1
){
res
.
Data
.
forEach
(
e
=>
{
e
.
RoomList
.
forEach
(
_e
=>
{
_e
.
slide
=
0
})
});
this
.
classdata
=
res
.
Data
}
}).
catch
(()
=>
{
this
.
loading
=
false
;
})
},
}
};
</
script
>
<
style
lang=
"scss"
scoped
>
.school-item
{
margin-bottom
:
10px
;
.school-name
{
font-size
:
16px
;
font-family
:
Microsoft
YaHei
;
font-weight
:
bold
;
color
:
#000000
;
margin-bottom
:
30px
;
}
.classroom-box
{
display
:
flex
;
flex-wrap
:
wrap
;
.classroom-item-noUse
{
opacity
:
0
.5
;
}
.classroom-item
{
width
:
390px
;
height
:
235px
;
background
:
#FFFFFF
;
border
:
1px
solid
#EBEBEB
;
box-shadow
:
0px
1px
1px
0px
#E4E7FB
;
border-radius
:
16px
;
position
:
relative
;
overflow
:
hidden
;
.classroom-img
{
display
:
block
;
width
:
390px
;
height
:
160px
;
border-radius
:
16px
;
background-color
:
#333
;
overflow
:
hidden
;
}
.classroom-name
{
position
:
absolute
;
top
:
20px
;
left
:
20px
;
z-index
:
5999
;
font-size
:
20px
;
font-family
:
PingFang
SC
;
font-weight
:
800
;
color
:
#FFFFFF
;
display
:
flex
;
align-items
:
center
;
}
.classroom-user
{
position
:
absolute
;
top
:
10px
;
right
:
10px
;
z-index
:
5999
;
color
:
#FFFFFF
;
}
.classroom-info
{
width
:
390px
;
height
:
75px
;
// background-color: tomato;
.info-box
{
height
:
43px
;
display
:
flex
;
align-items
:
center
;
justify-content
:
flex-start
;
box-sizing
:
border-box
;
padding
:
0
40px
;
.time
{
font-size
:
14px
;
font-family
:
PingFang
SC
;
font-weight
:
bold
;
color
:
#6D97FF
;
margin-right
:
10px
;
}
.info
{
// width: 225px;
height
:
100%
;
font-size
:
14px
;
font-family
:
PingFang
SC
;
display
:
flex
;
align-items
:
center
;
color
:
#000000
;
}
}
}
}
}
}
</
style
>
src/pages/classroom/components/classroomNav.vue
0 → 100644
View file @
6cebe811
<
template
>
<div
class=
""
>
<q-list
style=
"width:180px;overflow:hidden;background-color: rgb(245, 246, 247);"
>
<template
v-for=
"(x,i) in secondNavs"
>
<q-item
:to=
"x.MenuUrl"
clickable
v-ripple
:active=
"currentPath==x.MenuUrl"
v-if=
"x.SubList.length==0"
:key=
"i"
>
<q-item-section
avatar
style=
"min-width:30px;"
>
<q-icon
:name=
"x.MenuIcon"
size=
"20px"
/>
</q-item-section>
<q-item-section>
{{
x
.
MenuName
}}
</q-item-section>
</q-item>
<q-expansion-item
v-else
:label=
"x.MenuName"
>
<q-item
:to=
"y.MenuUrl"
clickable
v-ripple
:active=
"currentPath==y.MenuUrl"
v-for=
"(y, yi) in x.SubList"
:key=
"yi"
>
<q-item-section
avatar
style=
"padding-right:0;min-width:30px;"
>
<q-icon
:name=
"y.MenuIcon"
size=
"20px"
/>
</q-item-section>
<q-item-section>
{{
y
.
MenuName
}}
</q-item-section>
</q-item>
</q-expansion-item>
</
template
>
</q-list>
</div>
</template>
<
script
>
export
default
{
meta
:
{
title
:
"使用记录"
},
props
:{
NavData
:{
type
:
Array
,
default
:()
=>
{
[
{
MenuName
:
"总部"
,
MenuIcon
:
""
,
MenuUrl
:
""
,
SubList
:[
{
MenuName
:
"樱花教室"
,
MenuUrl
:
"/"
,
MenuIcon
:
""
},
{
MenuName
:
"菊花教室"
,
MenuUrl
:
"/"
,
MenuIcon
:
""
}
]
}
]
}
}
},
watch
:
{
$route
:
{
handler
:
function
(
route
)
{
this
.
currentPath
=
route
.
path
},
immediate
:
true
},
},
data
()
{
return
{
currentPath
:
""
,
secondNavs
:[
{
MenuName
:
"总部"
,
MenuIcon
:
""
,
SubList
:[
{
MenuName
:
"樱花教室"
,
MenuUrl
:
""
,
MenuIcon
:
""
},
{
MenuName
:
"菊花教室"
,
MenuUrl
:
""
,
MenuIcon
:
""
}
]
}
]
};
},
mounted
(){
},
methods
:{
}
};
</
script
>
<
style
lang=
"scss"
scoped
>
</
style
>
src/pages/classroom/components/css/comSummary.css
0 → 100644
View file @
6cebe811
.comSummary
.mainSummary
{
width
:
100%
;
margin-top
:
10px
;
}
.comSummary
.comSummary
.query-box
{
border
:
none
;
}
.comSummary
.summaryDate
{
width
:
100%
;
height
:
120px
;
background-color
:
#f2f2f2
;
border
:
1px
solid
#e6e6e6
;
border-top-left-radius
:
4px
;
border-top-right-radius
:
4px
;
min-width
:
1400px
;
}
.comSummary
.leftDay
{
width
:
60px
;
height
:
70px
;
text-align
:
center
;
border-radius
:
4px
;
overflow
:
hidden
;
background-color
:
#fff
;
margin
:
10px
10px
10px
30px
;
line-height
:
38px
;
color
:
#e95252
;
border
:
3px
solid
#4B4E4D
;
}
.comSummary
.leftDayTop
{
width
:
54px
;
height
:
27px
;
background-color
:
#D56964
;
color
:
#ffc6c6
;
font-size
:
12px
;
position
:
relative
;
text-align
:
center
;
line-height
:
30px
;
border-bottom
:
3px
solid
#4B4E4D
;
}
.comSummary
.rili
{
position
:
absolute
;
width
:
6px
;
height
:
16px
;
background-color
:
#fff
;
border-radius
:
20px
;
border-top
:
2px
solid
#666666
;
border-bottom
:
2px
solid
#666666
;
}
.comSummary
.LI1
{
left
:
20px
;
top
:
18px
;
}
.comSummary
.LI2
{
left
:
75px
;
top
:
18px
;
}
.comSummary
.yearCircle
{
display
:
inline-block
;
width
:
5px
;
height
:
5px
;
border-radius
:
50%
;
background-color
:
#ffc6c6
;
margin
:
0
5px
2px
;
}
.comSummary
.monthNum
{
font-size
:
20px
;
}
.comSummary
.monthLis
{
font-size
:
20px
;
}
.comSummary
.Arrow
{
width
:
24px
;
height
:
24px
;
background-color
:
#cccccc
;
color
:
#999999
;
border-radius
:
50%
;
text-align
:
center
;
line-height
:
24px
;
margin
:
auto
;
}
.comSummary
.Arrow
:hover
{
background-color
:
#999999
;
color
:
#333
;
cursor
:
pointer
;
}
.comSummary
.Daycontent
{
width
:
1400px
;
height
:
100%
;
float
:
left
;
}
.comSummary
.teamList
{
width
:
100%
;
height
:
80px
;
background
:
#fff
;
padding
:
10px
;
}
.comSummary
.teamList
:nth-of-type
(
odd
)
{
background-color
:
#f2f2f2
;
}
.comSummary
.teamLeftInfo
{
float
:
left
;
width
:
200px
;
height
:
100%
;
}
.comSummary
.tType
{
width
:
24px
;
height
:
24px
;
color
:
#fff
;
background-color
:
#e95252
;
display
:
inline-block
;
font-size
:
14px
;
border-radius
:
8px
;
text-align
:
center
;
line-height
:
24px
;
margin-left
:
10px
;
}
.comSummary
.TeamNum
{
font-size
:
14px
;
color
:
#333333
;
margin-left
:
10px
;
}
.comSummary
.teamChild
{
font-size
:
12px
;
margin
:
5px
0
0
35px
;
color
:
#666
;
}
.comSummary
.teamChild
i
{
color
:
#d9d9d9
;
margin
:
0
10px
0
10px
;
}
.comSummary
.AddressIn
{
width
:
50px
;
color
:
#808080
;
text-align
:
left
;
margin
:
auto
;
height
:
16px
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
overflow
:
hidden
;
padding
:
0
3px
;
margin-bottom
:
5px
;
}
.comSummary
.listInfo
{
width
:
50px
;
text-align
:
left
;
}
.comSummary
.circleDiv
{
height
:
5px
;
position
:
relative
;
}
.comSummary
.listName
{
width
:
50px
;
overflow
:
hidden
;
margin
:
auto
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
height
:
20px
;
padding
:
0
3px
;
}
.comSummary
.cir
{
width
:
12px
;
height
:
12px
;
background-color
:
#47bf8c
;
border-radius
:
50%
;
margin
:
auto
;
cursor
:
pointer
;
}
.comSummary
.lineright
{
position
:
absolute
;
width
:
38%
;
height
:
1px
;
/* display: none; */
background-color
:
#d9d9d9
;
top
:
-6px
;
right
:
0
;
}
.comSummary
.lineleft
{
position
:
absolute
;
width
:
38%
;
/* display: none; */
height
:
1px
;
background-color
:
#d9d9d9
;
top
:
-6px
;
left
:
0
;
}
.lineLeftList
{
position
:
absolute
;
width
:
50%
;
height
:
1px
;
background-color
:
#d9d9d9
;
top
:
-18px
;
left
:
0
;
}
.lineRightList
{
position
:
absolute
;
width
:
50%
;
height
:
1px
;
background-color
:
#d9d9d9
;
top
:
-18px
;
right
:
0
;
}
.comSummary
.disNone
{
display
:
none
!important
;
}
.comSummary
.calendarList
{
float
:
left
;
width
:
45px
;
height
:
100%
;
text-align
:
center
;
line-height
:
38px
;
}
.comSummary
._week
{
font-size
:
14px
;
}
.comSummary
._day
{
font-size
:
24px
;
}
.comSummary
._longli
{
font-size
:
12px
;
color
:
#999999
;
}
.comSummary
.redType
{
color
:
#e95252
;
}
.comSummary
.mainSummary
{
width
:
100%
;
/* min-height: 500px; */
margin-top
:
30px
;
overflow
:
auto
;
}
.comSummary
.summaryTable
{
width
:
100%
;
min-width
:
1400px
;
border-radius
:
4px
;
background-color
:
#E6E6E6
;
/* table-layout:fixed;word-break:break-all; */
}
.comSummary
.summaryTable
tr
:nth-child
(
2n
+
1
)
{
background-color
:
#fff
;
}
.comSummary
.summaryTable
th
{
width
:
210px
;
position
:
relative
;
}
.comSummary
.summaryTable
th
:first-child
{
border-top-left-radius
:
10px
;
}
.comSummary
.summaryTable
th
:last-child
{
border-top-right-radius
:
10px
;
}
.comSummary
.summaryTable
td
{
font-size
:
12px
;
overflow
:
hidden
;
line-height
:
16px
;
position
:
relative
;
vertical-align
:
top
;
padding
:
10px
0
5px
0
;
/* border-left:1px solid #fff;
border-right:1px solid #fff; */
}
.comdayListDiv
{
height
:
150px
;
overflow
:
auto
;
}
.comdayListDiv
::-webkit-scrollbar
{
width
:
4px
;
height
:
8px
;
}
.comdayListDiv
::-webkit-scrollbar-track
{
-webkit-box-shadow
:
inset
0
0
2px
rgba
(
0
,
0
,
0
,
0.2
);
border-radius
:
4px
;
background
:
#ededed
;
}
.comdayListDiv
::-webkit-scrollbar-thumb
{
border-radius
:
4px
;
-webkit-box-shadow
:
inset
0
0
2px
rgba
(
0
,
0
,
0
,
0.2
);
background
:
#c9c9c9
;
}
.comSummary
.mainSummary
::-webkit-scrollbar
{
width
:
4px
;
height
:
8px
;
}
.comSummary
.mainSummary
::-webkit-scrollbar-track
{
-webkit-box-shadow
:
inset
0
0
2px
rgba
(
0
,
0
,
0
,
0.2
);
border-radius
:
4px
;
background
:
#ededed
;
}
.comSummary
.mainSummary
::-webkit-scrollbar-thumb
{
border-radius
:
4px
;
-webkit-box-shadow
:
inset
0
0
2px
rgba
(
0
,
0
,
0
,
0.2
);
background
:
#c9c9c9
;
}
.comSummary
.stateOne
{
background-color
:
#409EFF
;
}
.comSummary
.stateTwo
{
background-color
:
#47bf8c
;
}
.comSummary
.stateFour
{
background-color
:
#cccccc
;
}
._leTitle
{
float
:
left
;
font-size
:
14px
;
color
:
#333333
;
margin
:
10px
0
;
font-weight
:
bold
;
}
._orderId
{
float
:
right
;
color
:
#069eda
;
font-size
:
14px
;
margin-top
:
10px
;
}
._biao
{
float
:
left
;
}
._biaoRight
{
float
:
right
;
width
:
60px
;
text-align
:
left
;
}
._hotelName
{
font-size
:
12px
;
color
:
#666666
;
margin-top
:
5px
;
}
._hotelName
i
{
color
:
#d9d9d9
;
font-size
:
14px
;
}
.comSummary
.icon-yiqueren
{
color
:
#32cc8a
!important
;
}
.comSummary
.toQueren
{
color
:
#ef5e5e
!important
;
}
.comSummary
.icon-quxiao
{
color
:
#cccccc
!important
;
}
._topInfo
{
margin-bottom
:
10px
;
}
._leftTy
{
display
:
inline-block
;
width
:
3px
;
height
:
12px
;
background-color
:
#e95252
;
margin-right
:
10px
;
}
.TJtitle
{
margin-left
:
10px
;
}
.dayListTable
{
text-align
:
center
;
font-size
:
12px
;
}
.summaryTable
th
{
cursor
:
pointer
;
}
.summaryTable
th
:first-child
{
/* width:180px; */
cursor
:
default
;
}
.dayListTable
td
{
/* vertical-align: top; */
text-align
:
left
;
}
.dayListTable
i
{
color
:
#d9d9d9
;
margin-right
:
3px
;
font-size
:
12px
;
-webkit-transform
:
scale
(
0.9
);
}
.dayListTable
tr
{
height
:
25px
;
line-height
:
25px
;
}
.dayListTable
th
{
background-color
:
#f2f2f2
;
color
:
#333333
;
height
:
25px
;
line-height
:
25px
;
}
._cityName
{
width
:
100px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;}
.htName
{
width
:
130px
;
text-overflow
:
ellipsis
;
overflow
:
hidden
;
white-space
:
nowrap
;}
._monthDay
span
{
display
:
inline-block
;
padding
:
2px
10px
;
line-height
:
1
;
background
:
#e95252
;
color
:
#fff
;
border-radius
:
10px
;}
.disNoneCir
{
display
:
none
;}
.ckedTd
{
border-left
:
1px
solid
#E95252
;
border-right
:
1px
solid
#E95252
;
background-color
:
#fff
;
margin
:
0
1px
0
1px
;}
.leftLine
{
position
:
absolute
;
left
:
0
;
top
:
0
;
width
:
1px
;
height
:
100%
;
background-color
:
#E95252
;}
.rightLine
{
position
:
absolute
;
right
:
0
;
top
:
0
;
width
:
1px
;
height
:
100%
;
background-color
:
#E95252
;}
\ No newline at end of file
src/pages/classroom/components/js/lunarCalendar.js
0 → 100644
View file @
6cebe811
This diff is collapsed.
Click to expand it.
src/pages/classroom/components/scenicSummary.vue
0 → 100644
View file @
6cebe811
<
style
>
@import
"./css/comSummary.css"
;
</
style
>
<
template
>
<div
class=
"flexOne comSummary"
>
<div
class=
"mainSummary"
>
<table
class=
"summaryTable"
cellspacing=
"0"
>
<thead>
<th>
<div
class=
"leftDay"
>
<div
class=
"leftDayTop"
>
<!--
<span
class=
"yearCircle"
></span>
-->
{{
nowYear
}}
年
<!--
<span
class=
"yearCircle"
></span>
-->
<!--
<div
class=
"rili LI1"
></div>
<div
class=
"rili LI2"
></div>
-->
</div>
<span
class=
"monthNum"
>
{{
nowMonth
}}
</span>
<!--
<span
class=
"monthLis"
>
{{
$t
(
'pub.month'
)
}}
</span>
-->
</div>
</th>
<th>
<div
class=
"Arrow"
@
click=
"leftClick()"
>
<i
class=
"iconfont icon-previewleft"
></i>
</div>
</th>
<th
v-for=
"(k,index) in Calendar"
:key=
"k.subCode"
:class=
"
{'redType':k.Week=='日'||k.Week=='六','ckedTd':index==columnLine
&&
dataList!=''}" @click="getDayInfo(k.CurrentYear,k.CurrentMonth,k.CurrentDay)" @mouseover="columnsMouseOver(index)">
<div
slot=
"reference"
>
<div
class=
"_week"
>
{{
k
.
Week
}}
</div>
<div
class=
"_monthDay"
v-if=
"k.CurrentDay==1"
>
<span>
{{
k
.
CurrentMonthCn
}}
<br/>
{{
$t
(
'pub.month'
)
}}
</span>
</div>
<div
class=
"_day"
v-else
>
{{
k
.
CurrentDay
}}
</div>
<!--
<div
class=
"_longli"
>
{{
k
.
LunarDayCn
}}
</div>
-->
</div>
<div
class=
"_lineSummary"
v-if=
"index==columnLine&&dataList!=''"
></div>
</th>
<th>
<div
class=
"Arrow"
@
click=
"rightClick()"
>
<i
class=
"iconfont icon-arrow-right"
></i>
</div>
</th>
</thead>
</table>
</div>
</div>
</
template
>
<
script
>
import
lunarCalendar
from
"./js/lunarCalendar"
export
default
{
data
()
{
return
{
msg
:
{
StartDate
:
new
Date
().
Format
(
"yyyy-MM-dd"
),
EndDate
:
""
},
loading
:
true
,
dataList
:
""
,
tempDataList
:
[],
Calendar
:
""
,
//绑定数据的日历
CalendarDataArray
:
[],
//存放数据的日历
infoList
:
""
,
dayList
:
""
,
nowYear
:
""
,
nowMonth
:
""
,
QStartDate
:
""
,
QEndDate
:
""
,
dayNum
:
25
,
//默认加载天数
columnLine
:
-
1
};
},
methods
:
{
//初始化日历数据
initData
()
{
let
startYear
=
this
.
msg
.
StartDate
.
split
(
"-"
)[
0
];
let
startMonth
=
this
.
msg
.
StartDate
.
split
(
"-"
)[
1
];
var
data
=
lunarCalendar
.
initLunar
(
startYear
,
startMonth
,
this
.
dayNum
);
this
.
CalendarDataArray
=
data
;
this
.
QStartDate
=
data
[
0
].
CurrentDate
;
this
.
QEndDate
=
data
[
data
.
length
-
1
].
CurrentDate
;
this
.
Calendar
=
this
.
CalendarDataArray
;
},
// getList() {
// this.apipost(
// "ticketcoupons_get_GetTicketCouponsSummary",
// this.msg,
// res => {
// if (res.data.resultCode == 1) {
// this.dataList = res.data.data;
// this.tempDataList = res.data.data;
// }
// },
// null
// );
// },
//左侧点击
leftClick
()
{
var
tempStartDate
=
lunarCalendar
.
changeLunar
(
this
.
QStartDate
,
-
1
);
this
.
CalendarDataArray
.
unshift
(
tempStartDate
);
this
.
nowYear
=
tempStartDate
.
CurrentYear
;
this
.
nowMonth
=
tempStartDate
.
CurrentMonth
;
this
.
CalendarDataArray
.
pop
();
//删除最后一个元素
this
.
Calendar
=
this
.
CalendarDataArray
;
this
.
QStartDate
=
tempStartDate
.
CurrentDate
;
this
.
QEndDate
=
this
.
CalendarDataArray
[
this
.
CalendarDataArray
.
length
-
1
].
CurrentDate
;
this
.
msg
.
StartDate
=
tempStartDate
.
CurrentDate
;
this
.
msg
.
EndDate
=
this
.
CalendarDataArray
[
this
.
CalendarDataArray
.
length
-
1
].
CurrentDate
;
// this.getList();
},
//右侧点击事件
rightClick
()
{
var
tempEndDate
=
lunarCalendar
.
changeLunar
(
this
.
QEndDate
,
1
);
this
.
CalendarDataArray
.
push
(
tempEndDate
);
this
.
nowYear
=
tempEndDate
.
CurrentYear
;
this
.
nowMonth
=
tempEndDate
.
CurrentMonth
;
this
.
CalendarDataArray
.
shift
();
//删除第一个元素
this
.
Calendar
=
this
.
CalendarDataArray
;
this
.
QStartDate
=
this
.
CalendarDataArray
[
0
].
CurrentDate
;
this
.
QEndDate
=
tempEndDate
.
CurrentDate
;
this
.
msg
.
StartDate
=
this
.
CalendarDataArray
[
0
].
CurrentDate
;
this
.
msg
.
EndDate
=
tempEndDate
.
CurrentDate
;
// this.getList();
},
columnsMouseOver
(
obj
)
{
this
.
columnLine
=
obj
;
},
getEndDay
()
{
var
date1
=
this
.
msg
.
StartDate
;
var
date2
=
new
Date
(
date1
);
var
c
=
date2
.
getDate
();
var
d
=
new
Date
(
date2
.
setDate
(
c
+
24
));
this
.
msg
.
EndDate
=
d
.
Format
(
"yyyy-MM-dd"
);
},
getDayInfo
(
Y
,
M
,
D
)
{
// let StartDate = Y + "-" + M + "-" + D;
// let msg = {
// StartDate: StartDate
// };
// this.apipost(
// "ticketcoupons_get_GetTicketCouponsSummaryDay",
// msg,
// res => {
// if (res.data.resultCode == 1) {
// this.dayList = res.data.data;
// }
// },
// null
// );
}
},
mounted
()
{
this
.
initData
();
this
.
getEndDay
();
// this.getList();
let
nowDate
=
new
Date
().
Format
(
"yyyy-MM-dd"
);
this
.
nowYear
=
nowDate
.
split
(
"-"
)[
0
];
this
.
nowMonth
=
parseInt
(
nowDate
.
split
(
"-"
)[
1
]);
}
};
</
script
>
\ No newline at end of file
src/pages/classroom/useRecord.vue
0 → 100644
View file @
6cebe811
<
template
>
<div
class=
"page-body con"
>
<div
class=
"left"
>
<ClassroomNav/>
</div>
<div
class=
"right"
>
<!--
<el-timeline
:reverse=
"reverse"
>
<el-timeline-item
v-for=
"(activity, index) in activities"
:key=
"index"
:timestamp=
"activity.timestamp"
>
</el-timeline-item>
</el-timeline>
-->
<Calendar></Calendar>
</div>
</div>
</
template
>
<
script
>
import
ClassroomNav
from
"./components/classroomNav"
;
import
Calendar
from
'./components/scenicSummary.vue'
import
{
getSchoolAndRoomNav
}
from
'../../api/classroom/index'
;
export
default
{
meta
:
{
title
:
"使用记录"
},
components
:{
ClassroomNav
,
Calendar
,
},
data
()
{
return
{
loading
:
true
,
msg
:
{
pageIndex
:
1
,
pageSize
:
12
,
},
navData
:[],
reverse
:
true
,
activities
:
[{
timestamp
:
'09:30'
},
{
timestamp
:
'09:45'
},
{
timestamp
:
'10:00'
}]
};
},
mounted
(){
this
.
getNavList
();
},
methods
:{
// goUrl(){
// this.$router.push({
// path:"/classroom/useRecord",
// query:{
// }
// })
// },
getNavList
()
{
getSchoolAndRoomNav
({}).
then
(
res
=>
{
this
.
loading
=
false
if
(
res
.
Code
===
1
){
this
.
navData
=
res
.
Data
}
}).
catch
(()
=>
{
this
.
loading
=
false
;
})
},
}
};
</
script
>
<
style
lang=
"scss"
scoped
>
.con
{
padding
:
5px
!
important
;
display
:
flex
;
.left
{
background-color
:
rgb
(
245
,
246
,
247
);
}
}
</
style
>
src/pages/school/classroom.vue
View file @
6cebe811
...
...
@@ -10,10 +10,10 @@
<q-select
@
input=
"resetSearch"
standout=
"bg-primary text-white"
option-value=
"SId"
option-label=
"SName"
v-model=
"msg.School_Id"
:options=
"schoolList"
emit-value
map-options
label=
"关联校区"
/>
</div>
<div
class=
"col-3"
>
<
!--
<
div
class=
"col-3"
>
<q-select
@
input=
"resetSearch"
standout=
"bg-primary text-white"
v-model=
"msg.Status"
:options=
"StatusOpts"
option-value=
"value"
option-label=
"label"
label=
"状态"
emit-value
map-options
/>
</div>
</div>
-->
</div>
</div>
<div
class=
"page-content"
>
...
...
@@ -40,6 +40,11 @@
<q-td
:props=
"props"
>
<div
class=
"text-blue cursor-pointer"
>
{{
props
.
value
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-time=
"props"
>
<q-td
:props=
"props"
>
<div
class=
"text-blue cursor-pointer"
>
{{
props
.
StartTime
}}
/
{{
props
.
EndTime
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-AssistIcon=
"props"
>
<q-td
auto-width
:props=
"props"
>
...
...
@@ -112,10 +117,16 @@
align
:
'left'
},
{
name
:
'StatusStr'
,
label
:
'状态'
,
name
:
'time'
,
label
:
'排班开始/结束时间'
,
align
:
'left'
,
field
:
'time'
},
{
name
:
'SeatNum'
,
label
:
'座位'
,
align
:
'left'
,
field
:
'S
tatusStr
'
field
:
'S
eatNum
'
},
{
name
:
'UpdateByName'
,
...
...
src/router/routes.js
View file @
6cebe811
This diff is collapsed.
Click to expand it.
src/utils/erpindex.js
View file @
6cebe811
...
...
@@ -11,12 +11,12 @@ export default {
Vue
.
prototype
.
MsgBus
=
MsgBus
;
//消息成功提示
Vue
.
prototype
.
Success
=
function
(
msg
)
{
this
.
$message
({
message
:
msg
,
duration
:
2000
,
type
:
"success"
});
},
this
.
$message
({
message
:
msg
,
duration
:
2000
,
type
:
"success"
});
},
//错误提示
Vue
.
prototype
.
Error
=
function
(
msg
)
{
this
.
$message
({
...
...
@@ -45,10 +45,10 @@ export default {
//Confirm
Vue
.
prototype
.
Confirm
=
function
(
msg
,
callback
)
{
this
.
$confirm
(
msg
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
})
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
})
.
then
(()
=>
{
if
(
typeof
callback
===
'function'
)
{
callback
();
...
...
@@ -71,13 +71,13 @@ export default {
Vue
.
prototype
.
md5
=
md5
;
//ERP本地缓存
Vue
.
prototype
.
getLocalStorage
=
function
()
{
var
localStorageData
=
window
.
localStorage
[
"loginUserInfo"
];
if
(
localStorageData
!==
undefined
&&
localStorageData
!=
'undefined'
)
{
return
JSON
.
parse
(
localStorageData
).
data
;
}
else
{
return
null
;
}
},
var
localStorageData
=
window
.
localStorage
[
"loginUserInfo"
];
if
(
localStorageData
!==
undefined
&&
localStorageData
!=
'undefined'
)
{
return
JSON
.
parse
(
localStorageData
).
data
;
}
else
{
return
null
;
}
},
//域名管理对象
Vue
.
prototype
.
domainManager
=
function
()
{
let
domainUrl
=
'http://192.168.20.9:8083'
;
...
...
@@ -85,10 +85,10 @@ export default {
let
locationName
=
window
.
location
.
hostname
;
if
(
locationName
.
indexOf
(
'testerp.oytour'
)
!==
-
1
)
{
domainUrl
=
"http://testapi.oytour.com"
;
viewFileUrl
=
"http://upload.oytour.com"
;
viewFileUrl
=
"http://upload.oytour.com"
;
}
else
if
(
locationName
.
indexOf
(
'oytour'
)
!==
-
1
)
{
domainUrl
=
"http://reborn.oytour.com"
;
viewFileUrl
=
"http://upload.oytour.com"
;
viewFileUrl
=
"http://upload.oytour.com"
;
}
var
obj
=
{
//主地址
...
...
@@ -102,7 +102,7 @@ export default {
//本站文件流下载地址
LocalFileStreamDownLoadUrl
:
domainUrl
+
"/api/file/GetFileFromWebApi"
,
//文件预览地址
ViewFileUrl
:
viewFileUrl
ViewFileUrl
:
viewFileUrl
};
return
obj
;
},
...
...
@@ -143,7 +143,7 @@ export default {
document
.
body
.
appendChild
(
link
);
link
.
click
();
successCall
(
res
);
}).
catch
(
function
(
res
)
{});
}).
catch
(
function
(
res
)
{
});
},
//HTTP提交数据
...
...
@@ -184,11 +184,11 @@ export default {
"uName"
:
uName
//用户名称
}
this
.
$http
.
post
(
apiurl
,
postData
,
{
headers
:
{
'Content-Type'
:
'application/json'
,
'Referer-Viitto'
:
this
.
$route
.
path
}
})
headers
:
{
'Content-Type'
:
'application/json'
,
'Referer-Viitto'
:
this
.
$route
.
path
}
})
.
then
(
res
=>
{
if
(
res
.
data
.
resultCode
==
10000
||
res
.
data
.
resultCode
==
10001
)
{
this
.
$router
.
push
({
...
...
src/utils/url.js
View file @
6cebe811
export
let
url_jump_zc
=
"http://zcedu.oytour.com/"
export
let
url_jump_zc
=
"http://zcedu.oytour.com/"
// export let UploadUrl
=
"http://192.168.20.214:8120"//上传文件到本地服务器
export
let
UploadUrl
=
"http://uploadfile.oytour.com"
// export let UploadUrl
=
"http://192.168.20.214:8120"//上传文件到本地服务器
export
let
UploadUrl
=
"http://uploadfile.oytour.com"
// export let ViittoFileUrl="http://192.168.20.214:8120"//文件站点
export
let
ViittoFileUrl
=
"http://staticfile.oytour.com"
export
let
ViittoFileUrl
=
"http://staticfile.oytour.com"
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