提交 1e024da7 authored 作者: 刘旭's avatar 刘旭

提交最新代码

上级 3a3562bb
......@@ -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": "我的课程",
......
......@@ -46,6 +46,7 @@ const globalStore = useGlobalStore()
const listQuery = reactive({
Phone: globalStore.Phone,
classId: "",
courseId: '',
pageIndex: 1,
pageSize: 10,
total: 0,
......
......@@ -144,6 +144,7 @@ onLoad(async (options: any) => {
let data = {
classId: options.classId,
studentId: options.studentId,
courseId: "",
pageIndex: 1,
pageSize: 10,
}
......
<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>
......@@ -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">&nbsp;课件资料</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,
......
......@@ -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"
......
<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>
<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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论