Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
XBRLPX-LS-h5
Project
Project
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
Graph
比较
统计图
议题
0
议题
0
列表
看板
标记
Milestones
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
刘旭
XBRLPX-LS-h5
Commits
1e024da7
提交
1e024da7
authored
8月 21, 2023
作者:
刘旭
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
提交最新代码
上级
3a3562bb
显示空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
457 行增加
和
11 行删除
+457
-11
pages.json
src/pages.json
+13
-0
classEvaluate.vue
src/pages/class/classEvaluate.vue
+1
-0
evaluate.vue
src/pages/class/evaluate.vue
+1
-0
addressBookItem.vue
src/pages/course/components/addressBookItem.vue
+88
-0
courseItem.vue
src/pages/course/components/courseItem.vue
+25
-9
detailsItem.vue
src/pages/course/components/detailsItem.vue
+1
-2
courseEvaluate.vue
src/pages/course/courseEvaluate.vue
+140
-0
evaluate.vue
src/pages/course/evaluate.vue
+188
-0
没有找到文件。
src/pages.json
浏览文件 @
1e024da7
...
...
@@ -41,12 +41,25 @@
}
},
{
"path"
:
"pages/course/courseEvaluate"
,
"style"
:
{
"navigationBarTitleText"
:
"我的课程"
,
"onReachBottomDistance"
:
50
}
},
{
"path"
:
"pages/class/evaluate"
,
"style"
:
{
"navigationBarTitleText"
:
"培训评价"
}
},
{
"path"
:
"pages/course/evaluate"
,
"style"
:
{
"navigationBarTitleText"
:
"课程评价"
}
},
{
"path"
:
"pages/course/index"
,
"style"
:
{
"navigationBarTitleText"
:
"我的课程"
,
...
...
src/pages/class/classEvaluate.vue
浏览文件 @
1e024da7
...
...
@@ -46,6 +46,7 @@ const globalStore = useGlobalStore()
const
listQuery
=
reactive
({
Phone
:
globalStore
.
Phone
,
classId
:
""
,
courseId
:
''
,
pageIndex
:
1
,
pageSize
:
10
,
total
:
0
,
...
...
src/pages/class/evaluate.vue
浏览文件 @
1e024da7
...
...
@@ -144,6 +144,7 @@ onLoad(async (options: any) => {
let
data
=
{
classId
:
options
.
classId
,
studentId
:
options
.
studentId
,
courseId
:
""
,
pageIndex
:
1
,
pageSize
:
10
,
}
...
...
src/pages/course/components/addressBookItem.vue
0 → 100644
浏览文件 @
1e024da7
<
template
>
<div
class=
"address-book-container"
>
<u-card
:show-head=
"false"
:show-foot=
"false"
margin=
"0"
border-radius=
"20"
>
<template
#
body
>
<view
class=
"address-book-content"
>
<view
class=
"left"
>
<u-image
width=
"160rpx"
height=
"160rpx"
:src=
"baseUrl + '/' + addressBookItem.proPhoto"
></u-image>
<view
class=
"content"
>
<h4>
{{
addressBookItem
.
stuName
}}
</h4>
<text
class=
"tel"
>
{{
addressBookItem
.
Phone
}}
</text>
<text>
单位:
{{
addressBookItem
.
stuUnit
}}
</text>
</view>
</view>
<u-button
v-show=
"buttonTitle"
size=
"mini"
type=
"primary"
@
tap=
"tapButton"
>
{{
buttonTitle
}}
</u-button>
</view>
</
template
>
</u-card>
</div>
</template>
<
script
setup
lang=
"ts"
>
import
{
src
}
from
"@/utils/example"
import
{
baseUrl
}
from
"@/utils/request"
const
props
=
defineProps
({
addressBookItem
:
{
type
:
Array
,
default
:
()
=>
[],
}
as
any
,
buttonTitle
:
String
,
})
const
emits
=
defineEmits
([
"tapButton"
])
const
tapButton
=
()
=>
{
if
(
props
.
buttonTitle
===
"联系TA"
)
emits
(
"tapButton"
,
props
.
addressBookItem
.
Phone
)
else
emits
(
"tapButton"
,
props
.
addressBookItem
.
FCLASS
,
props
.
addressBookItem
.
studentId
,
props
.
addressBookItem
.
courseId
)
}
</
script
>
<
style
lang=
"scss"
scoped
>
.address-book-container
{
margin-bottom
:
32rpx
;
height
:
200rpx
;
.address-book-content
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
.left
{
display
:
flex
;
.content
{
display
:
flex
;
flex-direction
:
column
;
justify-content
:
flex-end
;
margin-left
:
20rpx
;
.tel
{
margin
:
20rpx
0
;
}
}
}
uni-button
{
margin
:
0
;
}
}
}
</
style
>
src/pages/course/components/courseItem.vue
浏览文件 @
1e024da7
...
...
@@ -4,10 +4,13 @@
<template
#
body
>
<view
class=
"course-header"
>
<h3>
{{
courseItem
.
courseName
}}
</h3>
<view
@
tap=
"openInfo"
>
<u-icon
name=
"order"
size=
"32"
/>
<text>
课件资料
</text>
</view>
<u-button
v-show=
"current == 2"
type=
"primary"
size=
"mini"
@
tap=
"toEvaluate"
>
查看评价
</u-button
>
</view>
<view
class=
"item"
>
<u-icon
name=
"account"
/>
...
...
@@ -32,6 +35,10 @@
}}
</text
>
</view>
<view
@
tap=
"openInfo"
class=
"item"
>
<u-icon
name=
"order"
size=
"32"
/>
<text
class=
"order"
>
课件资料
</text>
</view>
</
template
>
<
template
#
foot
>
<view
class=
"course-footer"
>
...
...
@@ -179,6 +186,16 @@ const toAttendanceDetails = () => {
})
}
const
toEvaluate
=
()
=>
{
uni
.
navigateTo
({
url
:
"/pages/course/courseEvaluate?classId="
+
props
.
courseItem
.
classId
+
"&courseId="
+
props
.
courseItem
.
courseId
,
})
}
const
openInfo
=
()
=>
{
infoState
.
show
=
true
infoRef
.
value
.
init
()
...
...
@@ -198,11 +215,6 @@ const openInfo = () => {
justify-content
:
space-between
;
align-items
:
center
;
text
{
font-size
:
32rpx
;
color
:
#2979ff
;
}
h3
{
margin
:
0
;
}
...
...
@@ -214,6 +226,10 @@ const openInfo = () => {
.item
{
margin
:
20rpx
0
;
.order
{
font-size
:
32rpx
;
color
:
#2979ff
;
}
}
.course-footer
,
...
...
src/pages/course/components/detailsItem.vue
浏览文件 @
1e024da7
...
...
@@ -175,6 +175,7 @@ const repair = () => {
const
submit
=
async
(
reason
:
string
)
=>
{
let
obj
=
{
parmeters
:
{
NeedReturnFields
:
[
"FID"
],
IsDeleteEntry
:
"false"
,
Model
:
{
FCourseId
:
{
...
...
@@ -194,8 +195,6 @@ const submit = async (reason: string) => {
},
},
}
console
.
log
(
state
.
value
,
fillState
)
if
(
state
.
value
.
status
==
"缺勤"
)
{
// 请假
if
(
fillState
.
label
===
"请假"
)
obj
.
parmeters
.
Model
.
FCockinType
=
"QDQJ"
...
...
src/pages/course/courseEvaluate.vue
0 → 100644
浏览文件 @
1e024da7
<
template
>
<!--
<headers
title=
"我的班级"
/>
-->
<u-tabs
:list=
"tabsState.list"
:is-scroll=
"false"
v-model=
"tabsState.current"
bg-color=
"#f5f5f5"
@
change=
"tabsChange"
/>
<uni-search-bar
placeholder=
"姓名/单位/电话"
bgColor=
"#ffffff"
clearButton=
"auto"
cancelButton=
"none"
@
confirm=
"search"
@
clear=
"clear"
/>
<view
v-if=
"addressBookList.length"
class=
"address-book-item-container"
>
<text
style=
"margin-bottom: 20rpx; display: block"
>
为你找到
{{
listQuery
.
total
}}
个的同学
</text
>
<block
v-for=
"(item, i) in addressBookList"
:key=
"i"
>
<addressBookItem
:addressBookItem=
"item"
:buttonTitle=
"tabsState.current ? '' : '查看评价'"
@
tapButton=
"tapButton"
/>
</block>
<view
style=
"padding: 20rpx"
>
<u-loadmore
:status=
"status"
icon-type=
"flower"
/>
</view>
</view>
<view
v-else
class=
"empty"
>
<u-empty
text=
"暂无数据"
mode=
"list"
></u-empty>
</view>
</
template
>
<
script
setup
lang=
"ts"
>
// import headers from "@/components/header/index.vue"
import
addressBookItem
from
"./components/addressBookItem.vue"
import
{
getClassBook
}
from
"@/api/class"
import
{
useGlobalStore
}
from
"@/store/useStore"
const
globalStore
=
useGlobalStore
()
const
listQuery
=
reactive
({
Phone
:
globalStore
.
Phone
,
classId
:
""
,
courseId
:
""
,
pageIndex
:
1
,
pageSize
:
10
,
total
:
0
,
type
:
0
,
Name
:
""
,
})
const
tabsState
=
reactive
({
list
:
[
{
name
:
"已评价"
,
},
{
name
:
"未评价"
,
},
],
current
:
0
,
})
const
status
=
ref
(
"loadmore"
)
const
addressBookList
=
ref
([]
as
any
)
onLoad
((
options
:
any
)
=>
{
listQuery
.
classId
=
options
.
classId
listQuery
.
courseId
=
options
.
courseId
init
()
})
const
search
=
(
val
:
any
)
=>
{
listQuery
.
Name
=
val
.
value
tabsChange
(
tabsState
.
current
)
}
const
clear
=
()
=>
{
listQuery
.
Name
=
""
tabsChange
(
tabsState
.
current
)
}
const
tabsChange
=
(
index
:
number
)
=>
{
addressBookList
.
value
=
[]
listQuery
.
pageIndex
=
1
listQuery
.
pageSize
=
10
if
(
index
)
{
listQuery
.
type
=
1
}
else
listQuery
.
type
=
0
init
()
}
const
tapButton
=
(
classId
:
string
,
studentId
:
string
,
courseId
:
string
)
=>
{
uni
.
navigateTo
({
url
:
"/pages/course/evaluate?classId="
+
classId
+
"&courseId="
+
courseId
+
"&studentId="
+
studentId
,
})
}
const
init
=
async
()
=>
{
status
.
value
=
"loading"
const
{
data
:
res
}
=
await
getClassBook
(
listQuery
)
if
(
res
.
code
==
200
)
{
if
(
res
.
total
>
10
)
status
.
value
=
"loadmore"
else
status
.
value
=
"nomore"
addressBookList
.
value
=
res
.
data
listQuery
.
total
=
res
.
total
}
}
// 上拉加载数据
onReachBottom
(()
=>
{
// 判断是否还有下一页数据
if
(
listQuery
.
pageIndex
*
listQuery
.
pageSize
>=
listQuery
.
total
)
return
(
status
.
value
=
"nomore"
)
// // 判断是否正在请求其它数据,如果是,则不发起额外的请求
if
(
status
.
value
===
"loading"
)
return
listQuery
.
pageIndex
+=
1
init
()
})
</
script
>
<
style
lang=
"scss"
scoped
>
.address-book-item-container
{
padding
:
0
30rpx
;
.uni-searchbar
{
padding
:
0
;
margin
:
20rpx
0
;
}
}
</
style
>
src/pages/course/evaluate.vue
0 → 100644
浏览文件 @
1e024da7
<
template
>
<!--
<headers
title=
"培训评价"
/>
-->
<view
class=
"evaluate-container"
>
<u-card
:show-head=
"false"
:show-foot=
"false"
margin=
"0"
border-radius=
"20"
>
<template
#
body
>
<h4>
尊敬的各位学员:
</h4>
<text
class=
"detail"
>
感谢您参加本次培训班!请各位学员对此次授课老师及教学安排进行满意度评价,同时我们也欢迎您提出意见和建议,您的感受及观点对我们非常重要谢谢!
</text>
</
template
>
</u-card>
<u-card
:show-head=
"false"
:show-foot=
"false"
margin=
"0"
border-radius=
"20"
>
<
template
#
body
>
<view>
<view
class=
"rateItem"
>
<h4>
课程内容
</h4>
<u-rate
:count=
"5"
v-model=
"evaluateData.parmeters.Model.FContent"
size=
"42"
active-color=
"#F7BA2A"
:disabled=
"disabled"
/>
</view>
<view
class=
"rateItem"
>
<h4>
授课讲师
</h4>
<u-rate
:count=
"5"
v-model=
"evaluateData.parmeters.Model.FLecturer"
size=
"42"
active-color=
"#F7BA2A"
:disabled=
"disabled"
/>
</view>
</view>
</
template
>
</u-card>
<u-card
:show-head=
"false"
:show-foot=
"false"
margin=
"0"
border-radius=
"20"
>
<
template
#
body
>
<text
style=
"margin-top: 40rpx"
>
您的培训收获与意见建议:
</text>
<view
class=
"evaluate-textarea last"
>
<u-input
v-model=
"evaluateData.parmeters.Model.FOpinion"
type=
"textarea"
placeholder-style=
"background-color: #f5f5f5;font-size: 24rpx;overflow-y: auto;"
height=
"160"
maxlength=
"1400"
:auto-height=
"false"
placeholder=
"快来说说您的想法~"
:disabled=
"disabled"
/>
</view>
</
template
>
</u-card>
<view
class=
"submit"
v-show=
"!disabled"
>
<u-button
type=
"primary"
@
tap=
"submit"
>
确定提交
</u-button>
</view>
</view>
</template>
<
script
setup
lang=
"ts"
>
// import headers from "@/components/header/index.vue"
import
{
remarkOn
,
remarkDetail
}
from
"@/api/class"
import
{
useGlobalStore
}
from
"@/store/useStore"
import
{
toast
,
zconfirm
}
from
"@/utils/util"
const
globalStore
=
useGlobalStore
()
const
disabled
=
ref
(
false
)
const
evaluateData
=
reactive
({
parmeters
:
{
NeedReturnFields
:
[
"FID"
],
IsDeleteEntry
:
"false"
,
Model
:
{
FID
:
0
,
FEvaluateType
:
"XMPJ"
,
//评价类型
FClass
:
{
FNUMBER
:
""
,
//班级编码
},
FStudentId
:
{
FNUMBER
:
globalStore
.
infoData
.
FNUMBER
,
//学生编码
},
FTrainingPro
:
{
FNUMBER
:
""
,
//培训项目编码
},
FCourse
:
{
FNUMBER
:
""
,
//课程编码
},
FHighlights
:
""
,
//亮点
FSupplement
:
""
,
//补充
FOpinion
:
""
,
//意见建议
FContent
:
0
,
//课程内容
FLecturer
:
0
,
//授课讲师
FPostService
:
0
,
//后期服务
FClassService
:
0
,
//班主任服务
},
},
})
onLoad
(
async
(
options
:
any
)
=>
{
evaluateData
.
parmeters
.
Model
.
FClass
.
FNUMBER
=
options
.
classNumber
evaluateData
.
parmeters
.
Model
.
FTrainingPro
.
FNUMBER
=
options
.
ItemNumber
if
(
options
.
iEvaluate
!=
"false"
)
{
let
data
=
{
classId
:
""
,
courseId
:
options
.
courseId
,
studentId
:
options
.
studentId
,
pageIndex
:
1
,
pageSize
:
10
,
}
const
{
data
:
res
}
=
await
remarkDetail
(
data
)
if
(
res
.
code
==
200
)
{
evaluateData
.
parmeters
.
Model
.
FClassService
=
res
.
data
[
0
].
FCLASSSERVICE
evaluateData
.
parmeters
.
Model
.
FContent
=
res
.
data
[
0
].
FCONTENT
evaluateData
.
parmeters
.
Model
.
FLecturer
=
res
.
data
[
0
].
LECTURER
evaluateData
.
parmeters
.
Model
.
FPostService
=
res
.
data
[
0
].
FPOSTSERVICE
evaluateData
.
parmeters
.
Model
.
FHighlights
=
res
.
data
[
0
].
FHIGHLIGHTS
evaluateData
.
parmeters
.
Model
.
FSupplement
=
res
.
data
[
0
].
FSUPPLEMENT
evaluateData
.
parmeters
.
Model
.
FOpinion
=
res
.
data
[
0
].
FOPINION
disabled
.
value
=
true
}
}
})
const
submit
=
()
=>
{
zconfirm
(
"确定提交评价?"
,
async
(
result
:
boolean
)
=>
{
if
(
result
)
{
const
{
data
:
res
}
=
await
remarkOn
(
evaluateData
)
if
(
res
.
code
==
200
)
{
uni
.
navigateBack
()
toast
(
"评价成功"
)
}
}
})
}
</
script
>
<
style
lang=
"scss"
scoped
>
.evaluate-container
{
padding
:
30rpx
;
.u-card
{
margin-bottom
:
10rpx
!
important
;
text
{
display
:
block
;
}
.detail
{
text-indent
:
2em
;
display
:
block
;
font-size
:
28rpx
;
margin-top
:
10rpx
;
}
.rateItem
{
font-size
:
28rpx
;
display
:
flex
;
align-items
:
center
;
margin-bottom
:
20rpx
;
text-align
:
justify
;
text-align-last
:
justify
;
/*兼容ie*/
text-justify
:
distribute-all-lines
;
h4
{
width
:
140rpx
;
margin-right
:
20rpx
;
}
}
.evaluate-textarea
{
background-color
:
#f5f5f5
;
padding
:
0
10rpx
;
box-sizing
:
border-box
;
margin
:
20rpx
0
;
}
.last
{
margin-bottom
:
0
;
}
}
}
.submit
{
margin
:
40rpx
40rpx
0
;
}
</
style
>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论