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
40add874
Commit
40add874
authored
Jun 10, 2021
by
黄奎
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://gitlab.oytour.com/luochao/confucius
parents
b89414d0
6cebe811
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 @
40add874
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 @
40add874
618 Bytes
src/assets/images/classroom/warning.png
0 → 100644
View file @
40add874
599 Bytes
src/components/sale/addSuppliesStockOut-from.vue
View file @
40add874
...
...
@@ -204,7 +204,7 @@
<
script
>
import
{
import
{
getSchoolDropdown
,
//获取班级下拉列表
getClassPage_ck
}
from
'../../api/school/index'
;
//获取校区列表
...
...
src/components/school/classroom/classroom-form.vue
View file @
40add874
...
...
@@ -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 @
40add874
<
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 @
40add874
<
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 @
40add874
.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 @
40add874
This diff is collapsed.
Click to expand it.
src/pages/classroom/components/scenicSummary.vue
0 → 100644
View file @
40add874
<
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 @
40add874
<
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 @
40add874
...
...
@@ -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 @
40add874
This diff is collapsed.
Click to expand it.
src/utils/erpindex.js
View file @
40add874
...
...
@@ -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.24'
;
...
...
@@ -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 @
40add874
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