Commit d1b3d592 authored by 罗超's avatar 罗超

Merge branch 'master' of http://gitlab.oytour.com/youjie/thinkapp

parents 976e2a75 eb72d8bd
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
let methods = { let methods = {
JobDetails() { JobDetails() {
uni.reLaunch({ uni.reLaunch({
url: '/pages/index/workSituation?tabNme=' + '作业情况' url: '/pages/index/jobDetails?tabNme=' + '作业情况'
}); });
} }
} }
......
...@@ -93,6 +93,12 @@ ...@@ -93,6 +93,12 @@
this.$parent.getStuHomeWorkAndExam(item.courseId); this.$parent.getStuHomeWorkAndExam(item.courseId);
this.currentCourse = item; this.currentCourse = item;
data.showItems = false data.showItems = false
setTimeout(()=>{
uni.reLaunch({
url: '/pages/index/workSituation?tabNme=' + '作业情况' +'&courseId=' + item.courseId
});
},500)
}, },
//计算完成百分比 //计算完成百分比
calcPercentage(item) { calcPercentage(item) {
...@@ -160,6 +166,8 @@ ...@@ -160,6 +166,8 @@
-webkit-line-clamp: 2; -webkit-line-clamp: 2;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
margin-bottom: 20rpx; margin-bottom: 20rpx;
height: 80rpx;
overflow: hidden;
} }
.course-card .course-item .course-progress { .course-card .course-item .course-progress {
......
...@@ -278,6 +278,8 @@ ...@@ -278,6 +278,8 @@
-webkit-line-clamp: 2; -webkit-line-clamp: 2;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
margin-bottom: 20rpx; margin-bottom: 20rpx;
height: 80rpx;
overflow: hidden;
} }
.course-card .course-item .course-progress { .course-card .course-item .course-progress {
......
...@@ -4,28 +4,28 @@ ...@@ -4,28 +4,28 @@
<van-icon name="plus" /> <van-icon name="plus" />
<text>导入考试信息</text> <text>导入考试信息</text>
</view> </view>
<view class="examList activeOne"> <view class="examList activeOne" v-for="(item,index) in dataList" :key="index">
<view class="examList-center-box" @click="examDetails"> <view class="examList-center-box" @click="examDetails(item.ExamId)">
<view class="examList-center-line"></view> <view class="examList-center-line"></view>
<view class="examList-center flex"> <view class="examList-center flex">
<view class="examList-left"> <view class="examList-left">
<view class="examList-name">化学高考第一次测试</view> <view class="examList-name">{{item.ExamName}}</view>
<view class="examList-state flex"> <view class="examList-state flex">
<van-icon name="clock-o" /> <van-icon name="clock-o" />
<view class="examList-state-text">2022-05-25</view> <view class="examList-state-text">{{item.CreateTime}}</view>
</view> </view>
</view> </view>
<view class="examList-right flex"> <view class="examList-right flex">
<view class="homework-score flex"> <view class="homework-score flex">
<view class="homework-score-title">人数</view> <view class="homework-score-title">人数</view>
<view class="homework-score-num flex"> <view class="homework-score-num flex">
86 {{item.StuNum}}
</view> </view>
</view> </view>
<view class="homework-score flex"> <view class="homework-score flex">
<view class="homework-score-title">平均得分</view> <view class="homework-score-title">平均得分</view>
<view class="homework-score-num flex"> <view class="homework-score-num flex">
86 {{item.AvgScore}}
</view> </view>
</view> </view>
</view> </view>
...@@ -38,24 +38,31 @@ ...@@ -38,24 +38,31 @@
</view> </view>
</view> </view>
<view class="examList-hint-right"> <view class="examList-hint-right">
<view>重新导入</view> <view @click="clickReimport(item)">重新导入</view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<!-- <view class="noData">暂无数据</view> -->
<van-popup :show="show" :round="true"> <van-popup :show="show" :round="true">
<view class="examList-popup-box"> <view class="examList-popup-box">
<van-icon class="examList-popup-closure" name="cross" @click="show=false"/> <van-icon class="examList-popup-closure" name="cross" @click="show=false"/>
<view class="examList-popup-title">导入考试信息</view> <view class="examList-popup-title">导入考试信息</view>
<view class="examList-popup-content"> <view class="examList-popup-content">
<input v-model="obj.name" class="examList-popup-name" placeholder="请输入考试名称"> <input v-model="obj.name" class="examList-popup-name" placeholder="请输入考试名称">
<view class="examList-popup-fil" @click="uploadFiles"> <van-uploader
<van-image class="img" width="32rpx" height="32rpx" fit="cover" class="examList-popup-fil-box flex"
multiple
accept=".excel"
preview-size="120rpx"
@after-read="customUpload"
>
<view class="examList-popup-fil">
<van-image class="img" width="32rpx" height="32rpx" fit="cover"
src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1653639041000_305.png" /> src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1653639041000_305.png" />
选择文件 选择文件
</view> </view>
</van-uploader>
</view> </view>
</view> </view>
</van-popup> </van-popup>
...@@ -69,41 +76,128 @@ ...@@ -69,41 +76,128 @@
getCurrentInstance, getCurrentInstance,
inject inject
} from "vue"; } from "vue";
import { uploadFile } from "@/utils/index";
export default { export default {
props: { props: {
dataList:[]
}, },
components: {}, components: {},
setup() { setup(props) {
let {
proxy
} = getCurrentInstance();
let data = reactive({ let data = reactive({
obj: { obj: {
Name: '', Name: '',
Photo: '', Photo: '',
}, },
showPhone: false, showPhone: false,
showLogin: true, //多次点击 showLogin: false, //多次点击
show:false, show:false,
params:{
Uid:'',
CourseId:'',
ExamName:''
},
fileList:[],
Msg:{
PageIndex: 1,
PageSize: 10,
ExamName:''
},
dataList: props.dataList
}); });
let methods = { let methods = {
examDetails(){ examDetails(item){
uni.reLaunch({ uni.reLaunch({
url: '/pages/index/examDetails' url: '/pages/index/examDetails?examId=' + item
}); });
}, },
//获取考试信息列表
getExamPageList(){
proxy.$request("/Exam/GetExamPageList", data.Msg).then(res => {
data.dataList = res.Data;
})
},
ImportInformation(){ ImportInformation(){
this.show = true this.show = true
},
uploadFilesBefore(){
}, },
uploadFiles(){ // 重新导入
clickReimport(item){
},
// 添加导入
customUpload(event){
let host = ''
if (process.env.NODE_ENV === "development") {
host = 'http://192.168.10.36:8082/api'
} else {
host = 'https://eduapi.oytour.com/api'
}
const { file } = event.detail;
if(file[0].url.indexOf('xls')==-1||file[0].url.indexOf('xlsx')==-1){
uni.showToast({
title:'请上传xls、xlsx格式的文件',
icon:'none',
duration: 500
})
return
}
let params = {
// Uid: data.params.Uid,
// CourseId: data.params.CourseId,
// ExamName: data.params.ExamName,
Uid: 1,
CourseId: 1,
ExamName: '',
}
uni.uploadFile({
url: host + '/Upload/UploadStuExamScore',
filePath: file[0].url,
name: 'file',
formData: {
'myfile': file[0],
'params': JSON.stringify(params)
},
success(res) {
uni.hideLoading();
uni.showToast({
title:res.Message,
icon:'none',
duration: 500
})
},
fail(err) {
console.log("uploadErr", err)
}
});
// uploadFile(params, file, (res) => {
// uni.showModal({
// title:res.Message
// })
// });
// return
} }
} };
let that = methods;
return { return {
...toRefs(data), ...toRefs(data),
...methods ...methods
}; };
}, },
onLoad(){
},
onShow() {
}
}; };
</script> </script>
<style scoped> <style scoped>
...@@ -148,8 +242,12 @@ ...@@ -148,8 +242,12 @@
margin-right: 10rpx; margin-right: 10rpx;
} }
.examList-popup-fil{ .examList-popup-fil{
}
.examList-popup-fil-box{
display: flex;
line-height: 88rpx; line-height: 88rpx;
padding: 0 10rpx; padding: 0 197rpx;
border-radius: 44rpx; border-radius: 44rpx;
font-size: 30rpx; font-size: 30rpx;
color: #FFFFFF; color: #FFFFFF;
......
<template> <template>
<view class="operation-box"> <view class="operation-box">
<view class="operation activeOne"> <view class="operation activeOne"
v-for="(item,index) in dataList" :key="index">
<view class="operation-center-box" @click="JobDetails"> <view class="operation-center-box" @click="JobDetails">
<view class="operation-center-line"></view> <view class="operation-center-line"></view>
<view class="operation-center flex"> <view class="operation-center flex">
<view class="operation-left"> <view class="operation-left">
<view class="operation-name">高一作业</view> <view class="operation-name">{{item.HomeWorkTitle}}</view>
<view class="operation-state flex"> <view class="operation-state flex">
<view class="operation-state-point"></view> <view class="operation-state-point"></view>
<view class="operation-state-text">进行中</view> <view class="operation-state-text">{{item.Status==0?'未开始':(item.Status==1?'进行中':'已结束')}}</view>
</view> </view>
</view> </view>
<view class="operation-right flex"> <view class="operation-right flex">
<view class="homework-score flex"> <view class="homework-score flex">
<view class="homework-score-title">学生数</view> <view class="homework-score-title">学生数</view>
<view class="homework-score-num flex"> <view class="homework-score-num flex">
86 {{item.StuNum}}
</view> </view>
</view> </view>
<view class="homework-score flex"> <view class="homework-score flex">
<view class="homework-score-title">已提交</view> <view class="homework-score-title">已提交</view>
<view class="homework-score-num flex"> <view class="homework-score-num flex">
86 {{item.SubmitNum}}
</view> </view>
</view> </view>
<view class="homework-score flex"> <view class="homework-score flex">
<view class="homework-score-title">已批阅</view> <view class="homework-score-title">已批阅</view>
<view class="homework-score-num flex"> <view class="homework-score-num flex">
86 {{item.ReviewNum}}
</view> </view>
</view> </view>
<view class="homework-score flex"> <view class="homework-score flex">
<view class="homework-score-title">优 秀</view> <view class="homework-score-title">优 秀</view>
<view class="homework-score-num flex"> <view class="homework-score-num flex">
66 {{item.ExcellentNum}}
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<!-- <view class="noData">暂无数据</view> -->
</view> </view>
</view> </view>
</template> </template>
...@@ -54,18 +54,13 @@ ...@@ -54,18 +54,13 @@
export default { export default {
props: { props: {
dataList:[]
}, },
components: {}, components: {},
setup() { setup(props) {
let data = reactive({ let data = reactive({
obj: { dataList: props.dataList
Name: '',
Photo: '',
},
showPhone: false,
showLogin: true, //多次点击
}); });
let methods = { let methods = {
JobDetails(){ JobDetails(){
...@@ -78,7 +73,7 @@ ...@@ -78,7 +73,7 @@
...toRefs(data), ...toRefs(data),
...methods ...methods
}; };
}, }
}; };
</script> </script>
<style scoped> <style scoped>
......
<template> <template>
<view class="studentList-box flex"> <view class="studentList-box flex">
<view class="studentList-content"> <view class="studentList-content" v-for="(item,index) in dataList" :key="index">
<view class="studentList flex"> <view class="studentList flex">
<view class="studentList-img"> <view class="studentList-img">
<van-image width="100%" height="100%" fit="cover" class="img" <van-image width="100%" height="100%" fit="cover" class="img"
src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1653464014000_713.png" /> src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1653894192000_645.png" />
</view> </view>
<text> <text>
周杰伦 {{item.StuName}}
</text> </text>
</view> </view>
</view> </view>
<view class="studentList-content">
<view class="studentList flex">
<view class="studentList-img">
<van-image width="100%" height="100%" fit="cover" class="img"
src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1653464014000_713.png" />
</view>
<text>
周杰伦
</text>
</view>
</view>
<view class="studentList-content">
<view class="studentList flex">
<view class="studentList-img">
<van-image width="100%" height="100%" fit="cover" class="img"
src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1653464014000_713.png" />
</view>
<text>
周杰伦
</text>
</view>
</view>
<view class="studentList-content">
<view class="studentList flex">
<view class="studentList-img">
<van-image width="100%" height="100%" fit="cover" class="img"
src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1653464014000_713.png" />
</view>
<text>
周杰伦
</text>
</view>
</view>
<!-- <view class="noData">暂无数据</view> -->
</view> </view>
</template> </template>
<script> <script>
...@@ -58,10 +24,10 @@ ...@@ -58,10 +24,10 @@
export default { export default {
props: { props: {
dataList: []
}, },
components: {}, components: {},
setup() { setup(props) {
let data = reactive({ let data = reactive({
obj: { obj: {
...@@ -70,6 +36,7 @@ ...@@ -70,6 +36,7 @@
}, },
showPhone: false, showPhone: false,
showLogin: true, //多次点击 showLogin: true, //多次点击
dataList: props.dataList
}); });
let methods = { let methods = {
JobDetails(){ JobDetails(){
......
...@@ -20,7 +20,9 @@ export default { ...@@ -20,7 +20,9 @@ export default {
}, },
components: {}, components: {},
setup(props) { setup(props) {
let data = reactive({}); let data = reactive({
state: props.state
});
let methods = { let methods = {
jumpPage(url) { jumpPage(url) {
uni.navigateTo({ uni.navigateTo({
......
<template> <template>
<view class="workSituationpage"> <view class="workSituationpage">
<navbar class="navbarSticky" bg="#F6F6F6"> <navbar class="navbarSticky" bg="#F6F6F6">
<view class="index-header-box"> <view class="index-header-box" @click="back">
<view class="index-header-img"> <view class="index-header-img">
<van-image width="100%" height="100%" fit="cover" class="img" <van-image width="100%" height="100%" fit="cover" class="img"
src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1653464014000_713.png" /> src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1653464014000_713.png" />
...@@ -35,14 +35,25 @@ ...@@ -35,14 +35,25 @@
</view> </view>
</view> </view>
</view> </view>
<operation v-if="tabNme=='作业情况'"></operation> <van-empty description="暂无数据" v-if="dataList.length === 0" />
<studentList v-if="tabNme=='学生列表'"></studentList> <scroll-view
<examList v-if="tabNme=='考试信息'"></examList> :scroll-top="0"
scroll-y="true"
class="scroll-box"
@scrolltolower="lower"
v-if="dataList.length > 0"
>
<operation v-if="tabNme=='作业情况'" :dataList="dataList"></operation>
<studentList v-if="tabNme=='学生列表'" :dataList="dataList"></studentList>
<examList v-if="tabNme=='考试信息'" :dataList="dataList"></examList>
<Loadmore :state="pageState" />
</scroll-view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import Loadmore from "@/components/loadmore.vue";
import courseCard from '@/components/index/workSituation/courseCard' import courseCard from '@/components/index/workSituation/courseCard'
import operation from '@/components/index/workSituation/operation' import operation from '@/components/index/workSituation/operation'
import studentList from '@/components/index/workSituation/studentList' import studentList from '@/components/index/workSituation/studentList'
...@@ -75,7 +86,8 @@ ...@@ -75,7 +86,8 @@
courseCard, courseCard,
operation, operation,
studentList, studentList,
examList examList,
Loadmore
}, },
setup(props) { setup(props) {
let { let {
...@@ -87,7 +99,20 @@ ...@@ -87,7 +99,20 @@
{name:'作业情况',num:5}, {name:'作业情况',num:5},
{name:'考试信息',num:18}, {name:'考试信息',num:18},
], ],
tabNme:'考试信息' tabNme:'作业情况',
Msg:{
PageIndex: 1,
PageSize: 10,
ExamName:'',
courseId:''
},
OperationMsg:{
courseId:''
},
pageCount: 0,
timer: null, //防抖
dataList:[],
pageState: "more"
}); });
let methods = { let methods = {
...@@ -98,12 +123,101 @@ ...@@ -98,12 +123,101 @@
}, },
toggleTitle(t) { toggleTitle(t) {
data.tabNme = t data.tabNme = t
} if(this.tabNme=='学生列表'){
that.getCourseStuList()
}else if(this.tabNme=='作业情况'){
that.getGetCourseHomeWorkList()
}else{
that.getExamPageList()
}
},
//获取学生列表
getCourseStuList(){
proxy.$request("/Teacher/GetCourseStu", data.OperationMsg).then(res => {
if(res){
data.dataList = res.Data;
data.pageState = "none";
return
if (data.timer) data.timer = null;
if (data.Msg.PageIndex === 1) {
data.dataList = res.Data.PageData;
} else {
data.dataList = [...res.Data.PageData, ...data.dataList];
}
data.pageCount = res.Data.PageCount;
if (data.Msg.PageIndex >= res.Data.PageCount) {
data.pageState = "none";
} else {
data.pageState = "more";
}
}
})
},
//获取作业情况列表
getGetCourseHomeWorkList(){
proxy.$request("/Teacher/GetCourseHomeWork", data.OperationMsg).then(res => {
if(res){
data.dataList = res.Data;
data.pageState = "none";
return
if (data.timer) data.timer = null;
if (data.Msg.PageIndex === 1) {
data.dataList = res.Data.PageData;
} else {
data.dataList = [...res.Data.PageData, ...data.dataList];
}
data.pageCount = res.Data.PageCount;
if (data.Msg.PageIndex >= res.Data.PageCount) {
data.pageState = "none";
} else {
data.pageState = "more";
}
}
})
},
//获取考试信息列表
getExamPageList(){
proxy.$request("/Exam/GetExamPageList", data.Msg).then(res => {
if(res){
if (data.timer) data.timer = null;
if (data.Msg.PageIndex === 1) {
data.dataList = res.Data.PageData;
} else {
data.dataList = [...res.Data.PageData, ...data.dataList];
}
data.pageCount = res.Data.PageCount;
if (data.Msg.PageIndex >= res.Data.PageCount) {
data.pageState = "none";
} else {
data.pageState = "more";
}
}
})
},
lower(e) {
if (data.Msg.PageIndex < data.pageCount) {
data.pageState = "loading";
data.Msg.PageIndex++;
if (data.timer) clearTimeout(data.timer);
data.timer = setTimeout(() => {
if(this.tabNme=='学生列表'){
this.getCourseStuList()
}else if(this.tabNme=='作业情况'){
this.getGetCourseHomeWorkList()
}else{
this.getExamPageList()
}
}, 1000);
} else {
data.pageState = "none";
}
},
}; };
onMounted(() => { onMounted(() => {
}); });
let that = methods;
return { return {
...toRefs(data), ...toRefs(data),
...methods, ...methods,
...@@ -111,9 +225,18 @@ ...@@ -111,9 +225,18 @@
}, },
onLoad(option) { onLoad(option) {
this.tabNme = option.tabNme this.tabNme = option.tabNme
this.OperationMsg.courseId = option.courseId
this.Msg.courseId = option.courseId
}, },
onShow() { onShow() {
this.userData = uni.getStorageSync('userInfo'); this.userData = uni.getStorageSync('userInfo');
if(this.tabNme=='学生列表'){
this.getCourseStuList()
}else if(this.tabNme=='作业情况'){
this.getGetCourseHomeWorkList()
}else{
this.getExamPageList()
}
}, },
onShareAppMessage() { onShareAppMessage() {
return { return {
......
...@@ -121,9 +121,4 @@ ...@@ -121,9 +121,4 @@
left: 50vw; left: 50vw;
transform: translate(-50%,-50%); transform: translate(-50%,-50%);
z-index: 999; z-index: 999;
}
.noData{
font-size: 26rpx;
text-align: center;
padding: 50rpx;
} }
\ No newline at end of file
...@@ -8,9 +8,9 @@ export let desensitization = (str, beginLen, endLen) => { ...@@ -8,9 +8,9 @@ export let desensitization = (str, beginLen, endLen) => {
return tempStr; return tempStr;
} }
export let uploadFile = (path, file, successCallback) => { export let uploadFile = (params,file, successCallback) => {
for (let i = 0; i < file.length; i++) { for (let i = 0; i < file.length; i++) {
UploadSelfFile(path, file[i], successCallback) UploadSelfFile(JSON.stringify(params),file[i], successCallback)
} }
} }
...@@ -31,23 +31,18 @@ export let urlTobase64 = (file, suc) => { ...@@ -31,23 +31,18 @@ export let urlTobase64 = (file, suc) => {
/** /**
* 上传文件 * 上传文件
*/ */
export function UploadSelfFile(path, file, callback, configObj) { export function UploadSelfFile(params, file, callback, configObj) {
//用户登录缓存 if(file.url.indexOf('xls')==-1&&file.url.indexOf('xlsx')==-1){
var cacheInfo = uni.getStorageSync("userInfo") uni.showModal({
//上传配置 title:'请上传xls、xlsx格式的文件'
var uploadConfig = ""; })
if (cacheInfo && cacheInfo.UploadConfig) { return
uploadConfig = cacheInfo.UploadConfig;
} }
//获取文件扩展名
var index = file.url.lastIndexOf(".");
var suffix = file.url.substr(index);
var timestamp1 = Date.parse(new Date()) + "_" + (Math.ceil(Math.random() * 1000));
let str = '/Test';
var newPath = "/EduSystem" + str + '/Upload/' + path;
uni.showLoading({ uni.showLoading({
title: '文件上传中...' title: '文件上传中...'
}); });
UploadFileToSystem(params, file, callback, configObj);
return
if (uploadConfig) { if (uploadConfig) {
switch (uploadConfig.StoreType) { switch (uploadConfig.StoreType) {
//上传文件到腾讯云 //上传文件到腾讯云
...@@ -71,35 +66,27 @@ export function UploadSelfFile(path, file, callback, configObj) { ...@@ -71,35 +66,27 @@ export function UploadSelfFile(path, file, callback, configObj) {
/** /**
* 上传文件到本地文件系统 * 上传文件到本地文件系统
*/ */
export function UploadFileToSystem(uploadConfig, fileFullPath, fileObj, successCall, configObj) { export function UploadFileToSystem(paramsObj, fileObj, successCall, configObj) {
let url = uploadConfig.UploadDomain + "/Upload?filePath=" + fileFullPath; console.log(paramsObj,'-----paramsObj')
if (configObj) { let host = ''
//是否转换图片 if (process.env.NODE_ENV === "development") {
if (configObj.isTrans && configObj.isTrans == 1) { host = 'http://192.168.10.36:8082/api'
url += "&isTrans=1" } else {
} host = 'https://eduapi.oytour.com/api'
if (configObj.isCreateCover && configObj.isCreateCover == 1) {
url += "&isCreateCover=1"
}
} }
uni.uploadFile({ uni.uploadFile({
url: url, url: host+'/Upload/UploadStuExamScore',
filePath: fileObj.url, filePath: fileObj.url,
name: 'file', name: 'file',
formData: { formData: {
'myfile': fileObj 'myfile': fileObj,
params: paramsObj
}, },
success(res) { success(res) {
uni.hideLoading(); uni.hideLoading();
let jsonObj = JSON.parse(res.data) let jsonObj = JSON.parse(res.data)
let index = jsonObj.FilePath.indexOf(".")
let suffix = jsonObj.FilePath.slice(index + 1)
let uploadResult = { let uploadResult = {
name: fileObj.name, Message: jsonObj.Message
url: uploadConfig.CustomDomain + '/' + jsonObj.FilePath,
type: fileObj.type,
suffix: suffix,
// VideoCoverImg: uploadConfig.CustomDomain + jsonObj.VideoCoverImg,
} }
successCall(uploadResult); successCall(uploadResult);
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment