ソースを参照

Merge branch 'develop' of http://52.130.252.100:10000/TEAMMODEL/TEAMModelOS into develop

CrazyIter_Bin 1 年間 前
コミット
dda8000b8f

+ 105 - 1
TEAMModelOS/ClientApp/public/lang/en-US.js

@@ -1073,7 +1073,8 @@ const LANG_EN_US = {
         schoolType: 'In-school Account',
         tmIDType: 'ID',
         qrCodeText: 'Invitation Code:',
-        inviteUrl: 'Copy Invitation Link',
+        inviteUrl: 'Copy description with URL',
+        inviteShortUrl: 'Copy URL only',
         copyUrl: 'Copy Link',
         joinMessage1: "Allowed to join the course",
         joinMessage2: "Prohibited to join the course",
@@ -7863,5 +7864,108 @@ const LANG_EN_US = {
             subject: '只匹配学科',
             periodAndSubject: '同时匹配学科和学段',
         },
+        basicInfo: '基本信息',
+        moduleConfig: '模块配置',
+        placeholder: {
+            field1: '请输入活动主题',
+            field2: '请输入活动简介',
+            field3: '请输入活动地点',
+            field4: '请输入主办单位名称',
+            field5: '请输入承办单位名称',
+            field6: '请输入免责申明',
+            field7: '上传主题图片',
+            field8: '上传活动文件',
+            field9: '不限格式',
+            field10: '请输入作品要求',
+            field11: '自定义填报的信息',
+            field12: '请输入选项内容',
+            field13: '仅作展示',
+        },
+        profile: '简介',
+        host: '主办',
+        undertake: '承办',
+        scope: {
+            open: '公开',
+            area: '区级',
+            school: '校级',
+        },
+        prompt: {
+            field1: '不选学校则表示所有学校都可参加该活动',
+            field2: '发布活动后,需学校先确认参与活动,老师才可报名参与',
+            field3: '由学校选择老师参与活动',
+            field4: '请选择本次活动需要添加的模块',
+            field5: '0:默认不限制',
+            field6: '个人上传作品',
+            field7: '由队长统一上传',
+            field8: '当前活动使用',
+            field9: '请先勾选作品评审',
+            field10: '报名时展示的填报格式',
+            field11: '报名时可供选择的内容',
+            field12: '报名时展示的内容',
+        },
+        enrollLabel: '报名',
+        enroll: '报名制',
+        invite: '邀请制',
+        disclaimer: '免责声明',
+        timeList: {
+            enroll: '报名时间',
+            upload: '上传时间',
+            review: '评审时间',
+            score: '公示时间',
+        },
+        enrollNum: '报名人数',
+        fillInfo: '填报信息',
+        entryType: '参赛方式',
+        workType: '作品类型',
+        fileDes: '文件说明',
+        uploadType: '上传方式',
+        reviewTitle: '作品评审',
+        reviewRule: '评审规则',
+        scoreTitle: '成绩公示',
+        module: {
+            title: '模块',
+            Contest: '赛课活动',
+            Training: '教培活动',
+            Research: '教研活动',
+        },
+        customFields: '自定义填报信息',
+        customTitle: '信息名称',
+        word: '文本',
+        select: '选择器',
+        ruleInfo: {
+            rule: '规则',
+        },
+        joinType: {
+            person: '个人赛',
+            team: '团队赛',
+        },
+        message: {
+            field1: '活动名称不能为空',
+            field2: '活动主题不能为空',
+            field3: '请选择类型',
+            field4: '请选择活动时间',
+            field5: '请选择报名方式',
+            field6: '请选择填报信息',
+            field7: '请选择评审规则',
+            field8: '创建成功',
+            field9: '填报信息未配置学段、学科,无法进行作品分配',
+            field10: '请完善基本信息',
+            field11: '请完善上传信息',
+            field12: '请完善评审信息',
+            field13: '请完善公示信息',
+            field14: '请先选择一个模块',
+            field15: '请完善信息',
+            field16: '请先设置报名时间',
+            field17: '上传结束时间不能早于报名时间',
+            field18: '请先设置报名时间、上传时间',
+            field19: '评审必须在报名、上传结束后进行',
+            field20: '请先设置评审时间',
+            field21: '公示必须在评审结束后进行',
+            field22: '存在相同文件,请重新上传',
+            field23: '该信息已存在',
+        },
+        modal: {
+            text1: '删除评审规则',
+        },
     },
 }

+ 105 - 1
TEAMModelOS/ClientApp/public/lang/zh-CN.js

@@ -1073,7 +1073,8 @@ const LANG_ZH_CN = {
         schoolType: '校内账号',
         tmIDType: '醍摩豆ID',
         qrCodeText: '邀请码:',
-        inviteUrl: '复制邀请链接',
+        inviteUrl: '复制邀请说明及网址',
+        inviteShortUrl: '复制短网址',
         copyUrl: '复制链接',
         joinMessage1: "允许加入课程",
         joinMessage2: "禁止加入课程",
@@ -7865,5 +7866,108 @@ const LANG_ZH_CN = {
             subject: '只匹配学科',
             periodAndSubject: '同时匹配学科和学段',
         },
+        basicInfo: '基本信息',
+        moduleConfig: '模块配置',
+        placeholder: {
+            field1: '请输入活动主题',
+            field2: '请输入活动简介',
+            field3: '请输入活动地点',
+            field4: '请输入主办单位名称',
+            field5: '请输入承办单位名称',
+            field6: '请输入免责申明',
+            field7: '上传主题图片',
+            field8: '上传活动文件',
+            field9: '不限格式',
+            field10: '请输入作品要求',
+            field11: '自定义填报的信息',
+            field12: '请输入选项内容',
+            field13: '仅作展示',
+        },
+        profile: '简介',
+        host: '主办',
+        undertake: '承办',
+        scope: {
+            open: '公开',
+            area: '区级',
+            school: '校级',
+        },
+        prompt: {
+            field1: '不选学校则表示所有学校都可参加该活动',
+            field2: '发布活动后,需学校先确认参与活动,老师才可报名参与',
+            field3: '由学校选择老师参与活动',
+            field4: '请选择本次活动需要添加的模块',
+            field5: '0:默认不限制',
+            field6: '个人上传作品',
+            field7: '由队长统一上传',
+            field8: '当前活动使用',
+            field9: '请先勾选作品评审',
+            field10: '报名时展示的填报格式',
+            field11: '报名时可供选择的内容',
+            field12: '报名时展示的内容',
+        },
+        enrollLabel: '报名',
+        enroll: '报名制',
+        invite: '邀请制',
+        disclaimer: '免责声明',
+        timeList: {
+            enroll: '报名时间',
+            upload: '上传时间',
+            review: '评审时间',
+            score: '公示时间',
+        },
+        enrollNum: '报名人数',
+        fillInfo: '填报信息',
+        entryType: '参赛方式',
+        workType: '作品类型',
+        fileDes: '文件说明',
+        uploadType: '上传方式',
+        reviewTitle: '作品评审',
+        reviewRule: '评审规则',
+        scoreTitle: '成绩公示',
+        module: {
+            title: '模块',
+            Contest: '赛课活动',
+            Training: '教培活动',
+            Research: '教研活动',
+        },
+        customFields: '自定义填报信息',
+        customTitle: '信息名称',
+        word: '文本',
+        select: '选择器',
+        ruleInfo: {
+            rule: '规则',
+        },
+        joinType: {
+            person: '个人赛',
+            team: '团队赛',
+        },
+        message: {
+            field1: '活动名称不能为空',
+            field2: '活动主题不能为空',
+            field3: '请选择类型',
+            field4: '请选择活动时间',
+            field5: '请选择报名方式',
+            field6: '请选择填报信息',
+            field7: '请选择评审规则',
+            field8: '创建成功',
+            field9: '填报信息未配置学段、学科,无法进行作品分配',
+            field10: '请完善基本信息',
+            field11: '请完善上传信息',
+            field12: '请完善评审信息',
+            field13: '请完善公示信息',
+            field14: '请先选择一个模块',
+            field15: '请完善信息',
+            field16: '请先设置报名时间',
+            field17: '上传结束时间不能早于报名时间',
+            field18: '请先设置报名时间、上传时间',
+            field19: '评审必须在报名、上传结束后进行',
+            field20: '请先设置评审时间',
+            field21: '公示必须在评审结束后进行',
+            field22: '存在相同文件,请重新上传',
+            field23: '该信息已存在',
+        },
+        modal: {
+            text1: '删除评审规则',
+        },
     },
 }

+ 105 - 1
TEAMModelOS/ClientApp/public/lang/zh-TW.js

@@ -1073,7 +1073,8 @@ const LANG_ZH_TW = {
         schoolType: '校內帳號',
         tmIDType: '用戶編號',
         qrCodeText: '邀請碼:',
-        inviteUrl: '複製邀請網址',
+        inviteUrl: '複製邀請說明與網址',
+        inviteShortUrl: '複製短網址',
         copyUrl: '複製網址',
         joinMessage1: "允許加入課程",
         joinMessage2: "禁止加入課程",
@@ -7864,6 +7865,109 @@ const LANG_ZH_TW = {
             subject: '只匹配學科',
             periodAndSubject: '同时匹配學科和學段',
         },
+        basicInfo: '基本信息',
+        moduleConfig: '模块配置',
+        placeholder: {
+            field1: '请输入活动主题',
+            field2: '请输入活动简介',
+            field3: '请输入活动地点',
+            field4: '请输入主办单位名称',
+            field5: '请输入承办单位名称',
+            field6: '请输入免责申明',
+            field7: '上传主题图片',
+            field8: '上传活动文件',
+            field9: '不限格式',
+            field10: '请输入作品要求',
+            field11: '自定义填报的信息',
+            field12: '请输入选项内容',
+            field13: '仅作展示',
+        },
+        profile: '简介',
+        host: '主办',
+        undertake: '承办',
+        scope: {
+            open: '公开',
+            area: '区级',
+            school: '校级',
+        },
+        prompt: {
+            field1: '不选学校则表示所有学校都可参加该活动',
+            field2: '发布活动后,需学校先确认参与活动,老师才可报名参与',
+            field3: '由学校选择老师参与活动',
+            field4: '请选择本次活动需要添加的模块',
+            field5: '0:默认不限制',
+            field6: '个人上传作品',
+            field7: '由队长统一上传',
+            field8: '当前活动使用',
+            field9: '请先勾选作品评审',
+            field10: '报名时展示的填报格式',
+            field11: '报名时可供选择的内容',
+            field12: '报名时展示的内容',
+        },
+        enrollLabel: '报名',
+        enroll: '报名制',
+        invite: '邀请制',
+        disclaimer: '免责声明',
+        timeList: {
+            enroll: '报名时间',
+            upload: '上传时间',
+            review: '评审时间',
+            score: '公示时间',
+        },
+        enrollNum: '报名人数',
+        fillInfo: '填报信息',
+        entryType: '参赛方式',
+        workType: '作品类型',
+        fileDes: '文件说明',
+        uploadType: '上传方式',
+        reviewTitle: '作品评审',
+        reviewRule: '评审规则',
+        scoreTitle: '成绩公示',
+        module: {
+            title: '模块',
+            Contest: '赛课活动',
+            Training: '教培活动',
+            Research: '教研活动',
+        },
+        customFields: '自定义填报信息',
+        customTitle: '信息名称',
+        word: '文本',
+        select: '选择器',
+        ruleInfo: {
+            rule: '规则',
+        },
+        joinType: {
+            person: '个人赛',
+            team: '团队赛',
+        },
+        message: {
+            field1: '活动名称不能为空',
+            field2: '活动主题不能为空',
+            field3: '请选择类型',
+            field4: '请选择活动时间',
+            field5: '请选择报名方式',
+            field6: '请选择填报信息',
+            field7: '请选择评审规则',
+            field8: '创建成功',
+            field9: '填报信息未配置学段、学科,无法进行作品分配',
+            field10: '请完善基本信息',
+            field11: '请完善上传信息',
+            field12: '请完善评审信息',
+            field13: '请完善公示信息',
+            field14: '请先选择一个模块',
+            field15: '请完善信息',
+            field16: '请先设置报名时间',
+            field17: '上传结束时间不能早于报名时间',
+            field18: '请先设置报名时间、上传时间',
+            field19: '评审必须在报名、上传结束后进行',
+            field20: '请先设置评审时间',
+            field21: '公示必须在评审结束后进行',
+            field22: '存在相同文件,请重新上传',
+            field23: '该信息已存在',
+        },
+        modal: {
+            text1: '删除评审规则',
+        },
     },
 
 

+ 19 - 3
TEAMModelOS/ClientApp/src/common/QrcodeModal.vue

@@ -15,6 +15,10 @@
                 <Icon type="md-copy" class="copy-link-icon" :title="$t('cusMgt.copyUrl')" />
                 <span style="font-size:14px">{{$t('cusMgt.inviteUrl')}}</span>
             </p>
+            <p class="invite-url-text" @click="copyShortUrl" style="margin-top: 10px;">
+                <Icon type="md-copy" class="copy-link-icon" :title="$t('cusMgt.inviteShortUrl')" />
+                <span style="font-size:14px">{{$t('cusMgt.inviteShortUrl')}}</span>
+            </p>
         </div>
     </div>
 </template>
@@ -43,12 +47,14 @@ export default {
     },
     data() {
         return {
+            shortUrl:'',
             showQrStatus: false,
             joinQRcode: undefined
         }
     },
     methods: {
         async copyUrl() {
+            console.error(this.config)
             this.$copyText(this.config.shareContent).then(
                 ok => {
                     this.$Message.success(this.$t("settings.copyModal1"))
@@ -58,17 +64,27 @@ export default {
                 }
             )
         },
+        copyShortUrl(){
+            this.$copyText(this.shortUrl.result).then(
+                ok => {
+                    this.$Message.success(this.$t("settings.copyModal1"))
+                },
+                fail => {
+                    this.$Message.error(this.$t("settings.copyModal2"))
+                }
+            )
+        },
         createQRCode() {
             this.$nextTick(async () => {
                 // 此时已经渲染完成
                 try {
-                    let shortUrl = await this.$api.getShortUrl(encodeURI(this.config.url))
+                    this.shortUrl = await this.$api.getShortUrl(encodeURI(this.config.url))
                     if (this.joinQRcode == undefined) {
                         let qrcode = new QRCode('qrcode', {
                             width: 280, // 设置宽度,单位像素
                             height: 280, // 设置高度,单位像素
                             // text: encodeURI(url), // 编码处理
-                            text: encodeURI(this.config.url), // 编码处理
+                            text: encodeURI(this.config.simpleUrl), // 编码处理
                             // text: shortUrl.result || encodeURI(this.config.url), // 编码处理
                             correctLevel: QRCode.CorrectLevel.Q //解决编码后网址太长的问题
                         })
@@ -76,7 +92,7 @@ export default {
                     } else {
                         this.joinQRcode.clear()
                         // this.joinQRcode.makeCode(shortUrl.result || encodeURI(this.config.url))
-                        this.joinQRcode.makeCode(encodeURI(this.config.url))
+                        this.joinQRcode.makeCode(encodeURI(this.config.simpleUrl))
                     }
                     let dom = document.getElementById('qrcode')
                     if (dom) dom.title = ''

+ 3 - 0
TEAMModelOS/ClientApp/src/view/mycourse/MyCourse.vue

@@ -414,6 +414,7 @@
 				qrConfig: {
 					title: this.$t("cusMgt.qrCodeLabel"),
 					url: "", //二维码内容 不用转短网址,组件内部处理
+					simpleUrl:"",
 					shareContent: "" //复制链接内容,支持字符串模板,如果包含网址需要处理好短网址
 				},
 				showQrStatus: false,
@@ -823,8 +824,10 @@
 					this.stuListNo = stulistInfo.no;
 					let host = window.location.origin;
 					let callbackUrl = `${host}/joinclass?listName=${listName}&cusDesc=${cusDesc}&cusId=${cusId}&tName=${tName}&listNo=${this.stuListNo}&cusName=${cusName}&m=${this.$t("qrCode.tip3")}:${cusName}${listName}&o=1`;
+					let simpleUrl = `${host}/joinclass?listName=${listName}&cusId=${cusId}&tName=${tName}&listNo=${this.stuListNo}&cusName=${cusName}&m=${this.$t("qrCode.tip3")}:${cusName}${listName}&o=1`;
 					this.inviteUrl = callbackUrl;
 					this.qrConfig.url = callbackUrl;
+					this.qrConfig.simpleUrl = simpleUrl;
 
 					// 处理分享内容
 					try {

+ 135 - 136
TEAMModelOS/ClientApp/src/view/signupActivity/createActivity.vue

@@ -2,52 +2,52 @@
     <div class="create-box light-iview-form">
         <Loading v-show="isLoading"></Loading>
         <Steps :current="current">
-            <Step title="基本信息" content=""></Step>
+            <Step :title="$t('activity.basicInfo')" content=""></Step>
             <!-- <Step title="活动单位" content=""></Step> -->
-            <Step title="模块配置" content=""></Step>
-            <Step title="发布活动" content=""></Step>
+            <Step :title="$t('activity.basicInfo')" content=""></Step>
+            <Step :title="$t('homework.publish')" content=""></Step>
         </Steps>
         <div style="height: 95%;">
             <vuescroll>
                 <div>
                     <Form ref="createData" :model="createData" :rules="createDataRule" :label-width="80" v-show="current === 0" class="create-form">
-                        <FormItem label="名称" prop="name">
-                            <Input v-special-char v-model="createData.name" placeholder="请输入活动名称" />
+                        <FormItem :label="$t('abilitymgmt.name')" prop="name">
+                            <Input v-special-char v-model="createData.name" :placeholder="$t('homework.modifyAcNameTip')" />
                         </FormItem>
-                        <FormItem label="主题" prop="subject">
-                            <Input v-special-char v-model="createData.subject" placeholder="清输入活动主题" />
+                        <FormItem :label="$t('td.td59')" prop="subject">
+                            <Input v-special-char v-model="createData.subject" :placeholder="$t('activity.placeholder.field1')" />
                         </FormItem>
-                        <FormItem label="简介">
-                            <Input v-special-char type="textarea" v-model="createData.description" placeholder="请输入活动简介" />
+                        <FormItem :label="$t('activity.profile')">
+                            <Input v-special-char type="textarea" v-model="createData.description" :placeholder="$t('activity.placeholder.field2')" />
                         </FormItem>
-                        <FormItem label="地点">
-                            <Input v-special-char v-model="createData.address" placeholder="请输入活动地点" />
+                        <FormItem :label="$t('studentWeb.place')">
+                            <Input v-special-char v-model="createData.address" :placeholder="$t('activity.placeholder.field3')" />
                         </FormItem>
-                        <FormItem label="时间" prop="stime">
+                        <FormItem :label="$t('ability.video.time')" prop="stime">
                             <DatePicker v-model="actAllTime[0]" :editable="false" @on-change="(date, type) => setActTime(date, type, 0)" type="datetimerange" :options="beforeToday" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
                         </FormItem>
-                        <FormItem label="主办" class="unit-box">
+                        <FormItem :label="$t('activity.host')" class="unit-box">
                             <div v-for="(item, index) in createData.zb" :key="index">
-                                <Input v-special-char v-model="createData.zb[index]" placeholder="请输入主办单位名称" style="width: calc(100% - 30px);" />
+                                <Input v-special-char v-model="createData.zb[index]" :placeholder="$t('activity.placeholder.field4')" style="width: calc(100% - 30px);" />
                                 <Icon type="md-trash" size="20" color="#6e6e6e" v-show="index" @click="editUnit('delete', 'zb', index)" />
                             </div>
                             <Icon type="md-add-circle" size="20" color="#6e6e6e" @click="editUnit('add', 'zb')" />
                         </FormItem>
-                        <FormItem label="承办" class="unit-box">
+                        <FormItem :label="$t('activity.undertake')" class="unit-box">
                             <div v-for="(item, index) in createData.cb" :key="index">
-                                <Input v-special-char v-model="createData.cb[index]" placeholder="请输入承办单位名称" style="width: calc(100% - 30px);" />
+                                <Input v-special-char v-model="createData.cb[index]" :placeholder="$t('activity.placeholder.field5')" style="width: calc(100% - 30px);" />
                                 <Icon type="md-trash" size="20" color="#6e6e6e" v-show="index" @click="editUnit('delete', 'cb', index)" />
                             </div>
                             <Icon type="md-add-circle" size="20" color="#6e6e6e" @click="editUnit('add', 'cb')" />
                         </FormItem>
-                        <FormItem label="类型" prop="scope">
+                        <FormItem :label="$t('courseManage.classroom.studentTableC8')" prop="scope">
                             <RadioGroup v-model="createData.scope">
-                                <Radio label="public" border v-show="isTMD && isArea">{{ '公开' }}</Radio>
-                                <Radio label="area" border v-show="isArea">{{ '区级' }}</Radio>
-                                <Radio label="school" border v-show="!isArea">{{ '校级' }}</Radio>
+                                <Radio label="public" border v-show="isTMD && isArea">{{ $t('activity.scope.open') }}</Radio>
+                                <Radio label="area" border v-show="isArea">{{ $t('activity.scope.area') }}</Radio>
+                                <Radio label="school" border v-show="!isArea">{{ $t('activity.scope.school') }}</Radio>
                             </RadioGroup>
                         </FormItem>
-                        <FormItem label="学校" v-show="isArea">
+                        <FormItem :label="$t('answerSheet.dp.school')" v-show="isArea">
                             <Select v-model="selSchools" multiple filterable>
                                 <Option :value="item.id" v-for="(item) in showSchools" :key="item.id">
                                     {{ item.name }}
@@ -55,48 +55,48 @@
                             </Select>
                             <p>
                                 <Icon type="md-alert" color="#ffad16" size="18" />
-                                不选学校则表示所有学校都可参加该活动
+                                {{ $t('activity.prompt.field1') }}
                             </p>
                             <p v-show="(createData.scope === 'public' && selSchools.length) || createData.scope != 'public'">
                                 <Icon type="ios-alert-outline" color="#ffad16" size="18" />
-                                发布活动后,需学校先确认参与活动,老师才可报名参与
+                                {{ $t('activity.prompt.field2') }}
                             </p>
                         </FormItem>
-                        <FormItem label="报名" prop="joinMode">
+                        <FormItem :label="$t('activity.enrollLabel')" prop="joinMode">
                             <RadioGroup v-model="createData.joinMode">
-                                <Radio label="enroll">{{ '报名制' }}</Radio>
-                                <Radio label="invite" :disabled="createData.scope === 'public' && !selSchools.length">{{ '邀请制' }}</Radio>
+                                <Radio label="enroll">{{ $t('activity.enroll') }}</Radio>
+                                <Radio label="invite" :disabled="createData.scope === 'public' && !selSchools.length">{{ $t('activity.invite') }}</Radio>
                                 <span v-show="createData.joinMode === 'invite'" v-if="isArea">
                                     <Icon type="md-alert" color="#ffad16" size="18" />
-                                    由学校选择老师参与活动
+                                    {{ $t('activity.prompt.field3') }}
                                 </span>
                             </RadioGroup>
                         </FormItem>
-                        <FormItem label="老师" v-show="!isArea && createData.joinMode === 'invite'">
+                        <FormItem :label="$t('jyzx.application.teacher')" v-show="!isArea && createData.joinMode === 'invite'">
                             <Select v-model="selTeachers" multiple filterable>
                                 <Option :value="item.id" v-for="(item) in showTeachers" :key="item.id">
                                     {{ item.name }}
                                 </Option>
                             </Select>
                         </FormItem>
-                        <FormItem label="免责声明">
-                            <Input v-special-char type="textarea" v-model="createData.mzsm" placeholder="请输入免责申明..." />
+                        <FormItem :label="$t('activity.disclaimer')">
+                            <Input v-special-char type="textarea" v-model="createData.mzsm" :placeholder="$t('activity.placeholder.field6')" />
                         </FormItem>
-                        <FormItem label="封面">
+                        <FormItem :label="$t('cusMgt.rcd.cover.cover')">
                             <Upload v-show="!posterFile.url" multiple type="drag" action="" :before-upload="customUpload" :show-upload-list="false" accept=".jpg, .jpeg, .png, .gif">
                                 <div style="padding: 20px 0">
                                     <Icon type="ios-cloud-upload" size="52" style="color: #3399ff"></Icon>
-                                    <p>上传主题图片</p>
+                                    <p>{{ $t('activity.placeholder.field7') }}</p>
                                 </div>
                             </Upload>
                             <img v-if="posterFile.url" :src="posterFile.url" alt="" width="500">
                             <p v-show="posterFile.url" class="repeat-upload" @click="repeatUpload">{{$t('td.td58')}}</p>
                         </FormItem>
-                        <FormItem label="附件">
+                        <FormItem :label="$t('cusMgt.rcd.file')">
                             <Upload multiple type="drag" action="" :before-upload="customUploadFile" :show-upload-list="false" :accept="accept">
                                 <div style="padding: 20px 0">
                                     <Icon type="ios-cloud-upload" size="52" style="color: #3399ff"></Icon>
-                                    <p>上传活动文件</p>
+                                    <p>{{ $t('activity.placeholder.field8') }}</p>
                                 </div>
                             </Upload>
                             <template v-if="attachment.length">
@@ -120,24 +120,24 @@
                         </CheckboxGroup>
                         <Tabs v-model="tabName">
                             <div style="width: 85%; margin-top: 30px;">
-                                <EmptyData v-if="!tabListShow.length" textContent="请选择本次活动需要添加的模块"></EmptyData>
+                                <EmptyData v-if="!tabListShow.length" :textContent="$t('activity.prompt.field4')"></EmptyData>
                             </div>
                             <TabPane v-for="(item,index) in tabListShow" :key="index" :label="item.label" :name="item.name">
                                 <div v-if="item.name === 'Contest'">
                                     <div class="content-box">
                                         <div>
                                             <Form ref="contestData" :model="contestData.sign" :rules="contestRule" :label-width="80">
-                                                <FormItem label="报名时间" prop="stime">
+                                                <FormItem :label="$t('activity.timeList.enroll')" prop="stime">
                                                     <DatePicker v-model="actAllTime[1]" :editable="false" :options="beforeAct" @on-change="(date, type) => setActTime(date, type, 1)" type="datetimerange" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
                                                 </FormItem>
-                                                <FormItem label="报名人数">
+                                                <FormItem :label="$t('activity.enrollNum')">
                                                     <InputNumber :min="0" v-model="contestData.sign.limit" />
                                                     <span>
                                                         <Icon type="md-alert" color="#ffad16" size="17" />
-                                                        0:默认不限制
+                                                        {{ $t('activity.prompt.field5') }}
                                                     </span>
                                                 </FormItem>
-                                                <FormItem label="填报信息" prop="fields">
+                                                <FormItem :label="$t('activity.fillInfo')" prop="fields">
                                                     <CheckboxGroup v-model="fields">
                                                         <Checkbox v-for="(item, index) in infoArr" :key="index" :label="item.field">
                                                             <span>
@@ -149,7 +149,7 @@
                                                         <Icon type="md-add-circle" @click="changeFiled(1)" size="18" />
                                                     </CheckboxGroup>
                                                 </FormItem>
-                                                <FormItem label="参赛方式">
+                                                <FormItem :label="$t('activity.entryType')">
                                                     <RadioGroup v-model="contestData.sign.type">
                                                         <Radio v-for="(item, index) in joinType" :key="index" :label="item.value">{{ item.label }}</Radio>
                                                         <!-- 先不考虑团队赛人数限制 -->
@@ -165,16 +165,16 @@
                                         </p> -->
                                         <div v-show="skWork">
                                             <Form ref="contestUpload" :model="contestUpload" :rules="contestRuleUpload" :label-width="80">
-                                                <FormItem label="上传时间" prop="stime">
+                                                <FormItem :label="$t('activity.timeList.upload')" prop="stime">
                                                     <DatePicker v-model="actAllTime[2]" ref="workPicker" :editable="false" :options="beforeAct" @on-change="(date, type) => setActTime(date, type, 2)" type="datetimerange" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('train.create.timeHolder')" style="width: 500px"></DatePicker>
                                                 </FormItem>
-                                                <FormItem label="作品类型">
+                                                <FormItem :label="$t('activity.workType')">
                                                     <RadioGroup v-model="contestUpload.type">
-                                                        <Radio label="file">{{ '文件' }}</Radio>
-                                                        <Radio label="sokrates">{{ '苏格拉底影片' }}</Radio>
+                                                        <Radio label="file">{{ $t('studentWeb.courseContent.type.file') }}</Radio>
+                                                        <Radio label="sokrates">{{ $t('auth.attr2') }}</Radio>
                                                     </RadioGroup>
                                                 </FormItem>
-                                                <FormItem label="文件类型" v-if="contestUpload.type === 'file'" prop="fileType">
+                                                <FormItem :label="$t('studentWeb.homework.table3')" v-if="contestUpload.type === 'file'" prop="fileType">
                                                     <!-- <CheckboxGroup v-model="contestUpload.fileType" class="tab-check"> -->
                                                     <div class="tab-check">
                                                         <div v-for="(item, index) in fileType" :key="index" class="file-box">
@@ -182,20 +182,20 @@
                                                                 {{ item.label }}
                                                             </Checkbox>
                                                             <div v-if="item.isCheck">
-                                                                <Select v-model="formatType[index]" multiple size="small" style="width: 400px" placeholder="不限格式">
+                                                                <Select v-model="formatType[index]" multiple size="small" style="width: 400px" :placeholder="$t('activity.placeholder.field9')">
                                                                     <Option v-for="(format, index) in item.format" :value="format" :key="index">{{ format }}</Option>
                                                                 </Select>
                                                             </div>
                                                         </div>
                                                     </div>
                                                 </FormItem>
-                                                <FormItem label="文件说明">
-                                                    <Input v-special-char type="textarea" v-model="contestUpload.desc" placeholder="请输入作品要求..." />
+                                                <FormItem :label="$t('activity.fileDes')">
+                                                    <Input v-special-char type="textarea" v-model="contestUpload.desc" :placeholder="$t('activity.placeholder.field10')" />
                                                 </FormItem>
-                                                <FormItem label="上传方式">
+                                                <FormItem :label="$t('activity.uploadType')">
                                                     <RadioGroup v-model="contestUpload.captainUpload">
-                                                        <Radio :label="0">{{ '个人上传作品' }}</Radio>
-                                                        <Radio :label="1" :disabled="contestData.sign.type != 1">{{ '由队长统一上传' }}</Radio>
+                                                        <Radio :label="0">{{ $t('activity.prompt.field6') }}</Radio>
+                                                        <Radio :label="1" :disabled="contestData.sign.type != 1">{{ $t('activity.prompt.field7') }}</Radio>
                                                     </RadioGroup>
                                                 </FormItem>
                                             </Form>
@@ -203,21 +203,20 @@
                                     </div>
                                     <div class="content-box">
                                         <p>
-                                            <Checkbox v-model="skReview" @on-change="contestChange('review', skReview)">作品评审</Checkbox>
+                                            <Checkbox v-model="skReview" @on-change="contestChange('review', skReview)">{{ $t('activity.reviewTitle') }}</Checkbox>
                                         </p>
                                         <div v-show="skReview">
                                             <Form ref="contestReview" :model="contestReview" :rules="contestRuleReview" :label-width="80">
-                                                <FormItem label="评审时间" prop="stime">
+                                                <FormItem :label="$t('activity.timeList.review')" prop="stime">
                                                     <DatePicker v-model="actAllTime[3]" ref="reviewPicker" :editable="false" :options="beforeAct" type="datetimerange" format="yyyy-MM-dd HH:mm:ss"
                                                         :placeholder="$t('train.create.timeHolder')" transfer style="width: 500px" @on-change="(date, type) => setActTime(date, type, 3)">
                                                     </DatePicker>
                                                 </FormItem>
-                                                <FormItem label="评审规则" prop="rule">
+                                                <FormItem :label="$t('activity.reviewRule')" prop="rule">
                                                     <Select v-model="reviewSel" transfer style="width: calc(100% - 30px);" clearable>
                                                         <Option v-for="(item, index) in reviewList" :value="index" :key="index" :label="item.name" class="review-sel">
                                                             {{ item.name }}
-                                                            <Tag color="green" v-show="item.currentUse">当前活动使用</Tag>
-                                                            <!-- <span v-if="item.currentUse" style="color: #2d870e;">({{ '当前活动使用' }})</span> -->
+                                                            <Tag color="green" v-show="item.currentUse">{{ $t('activity.prompt.field8') }}</Tag>
                                                             <Icon type="md-eye" size="18" color="#077fd8" @click.native="reviewEditRule(index, 'preview')" />
                                                             <Icon type="ios-copy" size="18" color="#5a5a5a" @click.native="reviewEditRule(index, 'copy')" v-show="!item.isAdd && !item.currentUse" />
                                                             <Icon type="md-create" size="18" color="orange" @click.native="reviewEditRule(index, 'edit')" v-show="item.isAdd || item.currentUse" />
@@ -231,12 +230,12 @@
                                     </div>
                                     <div class="content-box">
                                         <p>
-                                            <Checkbox v-model="skPublic" :disabled="!skReview" @on-change="contestChange('score', skPublic)">成绩公示</Checkbox>
-                                            <span v-show="!skReview" style="color: #cd0000; font-size: 13px;">请先勾选作品评审</span>
+                                            <Checkbox v-model="skPublic" :disabled="!skReview" @on-change="contestChange('score', skPublic)">{{ $t('activity.scoreTitle') }}</Checkbox>
+                                            <span v-show="!skReview" style="color: #cd0000; font-size: 13px;">{{ $t('activity.prompt.field9') }}</span>
                                         </p>
                                         <div v-show="skPublic">
                                             <Form ref="contestScore" :model="contestScore" :rules="contestRuleUpload" :label-width="80">
-                                                <FormItem label="公示时间" prop="stime">
+                                                <FormItem :label="$t('activity.timeList.score')" prop="stime">
                                                     <DatePicker v-model="actAllTime[4]" ref="scorePicker" :editable="false" :options="beforeAct" @on-change="(date, type) => setActTime(date, type, 4)" type="datetimerange" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('train.create.timeHolder')" transfer style="width: 500px"></DatePicker>
                                                 </FormItem>
                                             </Form>
@@ -257,33 +256,33 @@
                         <img :src="posterFile.url" alt="" v-show="posterFile.url">
                         <img src="@/assets/image/no-poster-cn1.png" alt="" v-show="!posterFile.url">
                         <div class="submit-content">
-                            <p>主题:{{ createData.subject }}</p>
-                            <p>简介:{{ createData.description || '-' }}</p>
-                            <p>地点:{{ createData.address || '-' }}</p>
-                            <p>时间:{{ actAllTime[0][0] }} - {{ actAllTime[0][1] }}</p>
-                            <p>主办
+                            <p>{{ $t('td.td59') }}:{{ createData.subject }}</p>
+                            <p>{{ $t('activity.profile') }}:{{ createData.description || '-' }}</p>
+                            <p>{{ $t('studentWeb.place') }}:{{ createData.address || '-' }}</p>
+                            <p>{{ $t('ability.video.time') }}:{{ actAllTime[0][0] }} - {{ actAllTime[0][1] }}</p>
+                            <p>{{ $t('activity.host') }}
                                 <span v-for="(item, index) in createData.zb" :key="index" class="multiple-box">
                                     {{ item || '-' }}
                                 </span>
                             </p>
-                            <p>承办
+                            <p>{{ $t('activity.undertake') }}
                                 <span v-for="(item, index) in createData.cb" :key="index" class="multiple-box">
                                     {{ item || '-' }}
                                 </span>
                             </p>
-                            <p v-if="isArea">学校
+                            <p v-if="isArea">{{ $t('answerSheet.dp.school') }}
                                 <span v-if="createData.invitedSchools.length">
                                     <span v-for="(item, index) in createData.invitedSchools" :key="index" class="multiple-box">
                                         {{ item.name }}
                                     </span>
                                 </span>
                                 <span v-else>
-                                    所有学校
+                                    {{ $t('td.td55') }}
                                 </span>
                             </p>
-                            <p>免责声明:{{ createData.mzsm || '-' }}</p>
+                            <p>{{ $t('activity.disclaimer') }}:{{ createData.mzsm || '-' }}</p>
                             <div style="display: flex;">
-                                <p style="min-width: 50px;">附件:</p>
+                                <p style="min-width: 50px;">{{ $t('cusMgt.rcd.file') }}:</p>
                                 <div v-if="attachment.length">
                                     <span v-for="(item, index) in attachment" :key="index" class="multiple-box">
                                         {{ item.name || '-' }}
@@ -292,45 +291,45 @@
                                 <span v-else>-</span>
                             </div>
                             <p v-if="createData.modules && createData.modules.length">
-                                模块
+                                {{ $t('activity.module') }}
                                 <span v-for="(item, index) in createData.modules" :key="index">
-                                    {{ item === 'Contest' ? '赛课活动' : (item === 'Training' ? '教培活动' : '教研活动') }}
+                                    {{ $t(`activity.module.${item}`) }}
                                 </span>
                             </p>
                         </div>
                     </div>
                 </div>
-                <Button style="margin-top: 16px; margin-right: 16px;" @click="last" v-show="current">上一步</Button>
-                <Button style="margin-top: 16px;" type="primary" @click="nextNew()">{{ current === 2 ? '发布活动' : '下一步'}}</Button>
+                <Button style="margin-top: 16px; margin-right: 16px;" @click="last" v-show="current">{{ $t('train.create.lastStep') }}</Button>
+                <Button style="margin-top: 16px;" type="primary" @click="nextNew()">{{ current === 2 ? $t('train.create.publishTitle') : $t('train.create.nextStep') }}</Button>
             </vuescroll>
         </div>
-        <Drawer title="评审规则" :width="50" :mask-closable="false" v-model="ruleDrawer" class="light-iview-form" @on-close="closeRule()">
+        <Drawer :title="$t('activity.reviewRule')" :width="50" :mask-closable="false" v-model="ruleDrawer" class="light-iview-form" @on-close="closeRule()">
             <RuleDrawer :ruleDrawerAdd="ruleDrawerAdd" :ruleInfoParent="ruleInfo" @saveRule="saveRule" :needEdit="ruleDrawerAdd === 1 ? 2 : 0" />
         </Drawer>
-        <Modal v-model="modalType" title="自定义填报信息" class="light-iview-form" @on-ok="addInform()">
+        <Modal v-model="modalType" :title="$t('activity.customFields')" class="light-iview-form" @on-ok="addInform()">
             <Form :label-width="100" :model="addInfoForm">
-                <FormItem label="信息名称">
-                    <Input v-special-char v-model.trim="addInfoForm.label" :disabled="addInfoType === 2" placeholder="自定义填报的信息" style="width: 300px" />
+                <FormItem :label="$t('activity.customTitle')">
+                    <Input v-special-char v-model.trim="addInfoForm.label" :disabled="addInfoType === 2" :placeholder="$t('activity.placeholder.field11')" style="width: 300px" />
                 </FormItem>
-                <FormItem label="报名时展示的填报格式">
+                <FormItem :label="$t('activity.prompt.field10')">
                     <RadioGroup v-model="addInfoForm.type">
                         <Radio label="text">
-                            <span>文本</span>
+                            <span>{{ $t('activity.word') }}</span>
                         </Radio>
                         <Radio label="select">
-                            <span>选择器</span>
+                            <span>{{ $t('activity.select') }}</span>
                         </Radio>
                     </RadioGroup>
                 </FormItem>
                 <!-- <p v-show="addInfoForm.type === 'select'">请创建选项,无需选择,所有选项都会为老师展示</p> -->
-                <FormItem label="报名时可供选择的内容" v-show="addInfoForm.type === 'select'">
+                <FormItem :label="$t('activity.prompt.field11')" v-show="addInfoForm.type === 'select'">
                     <div>
-                        <Input v-special-char v-model="addInfo" placeholder="请输入选项内容" style="width: 300px" />
+                        <Input v-special-char v-model="addInfo" :placeholder="$t('activity.placeholder.field12')" style="width: 300px" />
                         <Icon type="md-add-circle" size="18" color="#1db40f" style="margin: 0 10px; cursor: pointer;" @click="changeFormValue('add')" />
                         <!-- <Icon type="md-checkmark-circle" size="18" color="#1db40f" style="margin: 0 10px; cursor: pointer;" @click="changeFormValue('add')" /> -->
                     </div>
-                    <span>报名时展示的内容:</span>
-                    <Select v-model="selectFileds" placeholder="仅作展示" style="width:300px" @on-select="selectFiledChange">
+                    <span>{{ $t('activity.prompt.field12') }}:</span>
+                    <Select v-model="selectFileds" :placeholder="$t('activity.placeholder.field13')" style="width:300px" @on-select="selectFiledChange">
                         <Option v-for="(item, index) in addInfoForm.item" :value="item" :key="index">
                             {{ item }}
                             <Icon type="md-trash" size="16" color="#9a9a9a" @click.stop.native.prevent="changeFormValue('delete', index)" />
@@ -387,17 +386,17 @@ export default {
             accept: '',
             ruleColumns: [
                 {
-                    title: '规则',
+                    title: this.$t('activity.ruleInfo.rule'),
                     key: 'name',
                     width: 200,
                     tree: true
                 },
                 {
-                    title: '描述',
+                    title: this.$t('ability.mgmt.desc'),
                     key: 'describe',
                 },
                 {
-                    title: '分值',
+                    title: this.$t('totalAnalysis.ka_table_text4'),
                     key: 'score',
                     width: 100,
                     align: 'center',
@@ -410,25 +409,25 @@ export default {
             infoArr: [
                 {
                     field: 'name',
-                    label: '姓名',
+                    label: this.$t('assessment.header1'),
                     type: "text",
                     item: []
                 },
                 {
                     field: 'sex',
-                    label: '性别',
+                    label: this.$t('auth.ctFmText4'),
                     type: "radio",
                     item: []
                 },
                 {
                     field: 'phone',
-                    label: '手机号码',
+                    label: this.$t('studentWeb.tmManagement.phone'),
                     type: "text",
                     item: []
                 },
                 {
                     field: 'email',
-                    label: '电子邮箱',
+                    label: this.$t('auth.ctFmText23'),
                     type: "text",
                     item: []
                 },
@@ -446,13 +445,13 @@ export default {
                 }, */
                 {
                     field: 'period',
-                    label: '学段',
+                    label: this.$t('courseManage.classroom.studentTableC3'),
                     type: "text",
                     item: []
                 },
                 {
                     field: 'subject',
-                    label: '学科',
+                    label: this.$t('newCusMgt.subject'),
                     type: "text",
                     item: []
                 },
@@ -460,31 +459,31 @@ export default {
             fileType: [
                 {
                     value: 'documentType',
-                    label: '文档类',
+                    label: this.$t('ability.points.doc'),
                     isCheck: false,
                     format: ['doc', 'docx', 'txt', 'ppt', 'pptx', 'xls', 'xlsx', 'pdf']
                 },
                 {
                     value: 'audio',
-                    label: '音频类',
+                    label: this.$t('ability.points.audio'),
                     isCheck: false,
                     format: ['mp3', 'wav', 'wma']
                 },
                 {
                     value: 'video',
-                    label: '视频类',
+                    label: this.$t('ability.points.video'),
                     isCheck: false,
                     format: ['mp4', 'webm']
                 },
                 {
                     value: 'img',
-                    label: '图片类',
+                    label: this.$t('ability.points.image'),
                     isCheck: false,
                     format: ['jpg', 'jpeg', 'png', 'gif']
                 },
                 {
                     value: 'winrar',
-                    label: '压缩包类',
+                    label: this.$t('ability.points.gzip'),
                     isCheck: false,
                     format: ['zip', 'rar', '7zip']
                 },
@@ -493,15 +492,15 @@ export default {
             tabList: [
                 {
                     name: 'Contest',
-                    label: "赛课活动"
+                    label: this.$t('activity.module.Contest')
                 },
                 {
                     name: 'Training',
-                    label: "教培活动"
+                    label: this.$t('activity.module.Training')
                 },
                 {
                     name: 'Research',
-                    label: "教研活动"
+                    label: this.$t('activity.module.Research')
                 }
             ],
             tabListShow: [],
@@ -606,11 +605,11 @@ export default {
             joinType: [
                 {
                     value: 0,
-                    label: '个人赛',
+                    label: this.$t('activity.joinType.person'),
                 },
                 {
                     value: 1,
-                    label: '团队赛',
+                    label: this.$t('activity.joinType.team'),
                 },
             ],
             ruleInfo: undefined, //展示的评审规则
@@ -619,23 +618,23 @@ export default {
             ruleDrawerAdd: 0, //0(展示) 1(编辑) 2(新增)
             areaInfo: undefined,
             createDataRule: {
-                name: [{ required: true, message: '活动名称不能为空', trigger: 'blur' }],
-                subject: [{ required: true, message: '活动主题不能为空', trigger: 'blur' }],
-                scope: [{ required: true, message: '请选择类型', trigger: 'blur' }],
-                stime: [{ required: true, type: 'number', message: '请选择活动时间', trigger: 'blur' }],
-                joinMode: [{ required: true, message: '请选择报名方式', trigger: 'blur' }],
+                name: [{ required: true, message: this.$t('activity.message.field1'), trigger: 'blur' }],
+                subject: [{ required: true, message: this.$t('activity.message.field2'), trigger: 'blur' }],
+                scope: [{ required: true, message: this.$t('activity.message.field3'), trigger: 'blur' }],
+                stime: [{ required: true, type: 'number', message: this.$t('activity.message.field3'), trigger: 'blur' }],
+                joinMode: [{ required: true, message: this.$t('activity.message.field4'), trigger: 'blur' }],
             },
             contestRule: {
-                stime: [{ required: true, type: 'number', message: '请选择活动时间', trigger: 'blur' }],
-                fields: [{ required: true, message: '请选择填报信息', trigger: 'blur', validator: validateFields }],
+                stime: [{ required: true, type: 'number', message: this.$t('activity.message.field4'), trigger: 'blur' }],
+                fields: [{ required: true, message: this.$t('activity.message.field6'), trigger: 'blur', validator: validateFields }],
             },
             contestRuleUpload: {
-                stime: [{ required: true, type: 'number', message: '请选择活动时间', trigger: 'blur' }],
-                fileType: [{ required: true, message: '请选择填报信息', trigger: 'blur', validator: validateFileType }],
+                stime: [{ required: true, type: 'number', message: this.$t('activity.message.field4'), trigger: 'blur' }],
+                fileType: [{ required: true, message: this.$t('activity.message.field6'), trigger: 'blur', validator: validateFileType }],
             },
             contestRuleReview: {
-                stime: [{ required: true, type: 'number', message: '请选择活动时间', trigger: 'blur' }],
-                rule: [{ required: true, message: '请选择评审规则', trigger: 'blur', validator: validateReviewRule }],
+                stime: [{ required: true, type: 'number', message: this.$t('activity.message.field4'), trigger: 'blur' }],
+                rule: [{ required: true, message: this.$t('activity.message.field7'), trigger: 'blur', validator: validateReviewRule }],
             },
             beforeToday: {
                 disabledDate (date) {
@@ -953,15 +952,15 @@ export default {
                     if(!this.isArea && this.createData.joinMode === 'invite') {
                         let types = await this.saveTeacher()
                     }
-                    this.$Message.success('创建成功!')
+                    this.$Message.success(this.$t('activity.message.field8'))
                     this.$router.push({
                         name: this.isArea ? 'areaActivityProcess' : 'activityManage',
                     })
                 } else {
                     if(res.code === 25 || res.code === 26 || res.code === 27) {
-                        this.$Message.warning('填报信息未配置学段、学科,无法进行作品分配!')
+                        this.$Message.warning(this.$t('activity.message.field9'))
                     } else {
-                        this.$Message.warning('保存失败')
+                        this.$Message.warning(this.$t('auth.ctFmText19'))
                     }
                     if(params.Activity.poster || params.Activity.attachment.length) {
                         this.$api.blob.deletePrefix({
@@ -969,7 +968,7 @@ export default {
                             "prefix": `activity/${this.createData.id}`
                         }).then(res => {
                             if(res.status) {
-                                console.log('删除成功');
+                                console.log(this.$t('evaluation.deleteSuc'));
                             }
                         })
                     }
@@ -1033,7 +1032,7 @@ export default {
                     if(this.attachDel.length) {
                         let delType = await this.deleteBlob(this.attachDel)
                         if(!delType) {
-                            this.$Message.warning('保存失败!')
+                            this.$Message.warning(this.$t('auth.ctFmText19'))
                             return
                         }
                     }
@@ -1078,14 +1077,14 @@ export default {
                         this.$refs['contestData'][0].validate((valid) => {
                             console.log(valid);
                             if (!valid) {
-                                this.$Message.error('请完善基本信息!')
+                                this.$Message.error(this.$t('activity.message.field10'))
                                 needBreak = true
                             }
                         })
                         if(this.contestData.modules.includes('upload')) {
                             this.$refs['contestUpload'][0].validate((valid) => {
                                 if (!valid) {
-                                    this.$Message.error('请完善上传信息!');
+                                    this.$Message.error(this.$t('activity.message.field11'));
                                     needBreak = true
                                 }
                             })
@@ -1093,7 +1092,7 @@ export default {
                         if(this.contestData.modules.includes('review')) {
                             this.$refs['contestReview'][0].validate((valid) => {
                                 if (!valid) {
-                                    this.$Message.error('请完善评审信息!');
+                                    this.$Message.error(this.$t('activity.message.field12'));
                                     needBreak = true
                                 }
                             })
@@ -1101,14 +1100,14 @@ export default {
                         if(this.contestData.modules.includes('score')) {
                             this.$refs['contestScore'][0].validate((valid) => {
                                 if (!valid) {
-                                    this.$Message.error('请完善公示信息!');
+                                    this.$Message.error(this.$t('activity.message.field13'));
                                     needBreak = true
                                 }
                             })
                         }
                     }
                     if(!this.createData.modules.length) {
-                        this.$Message.warning('请先选择一个模块')
+                        this.$Message.warning(this.$t('activity.message.field14'))
                         break
                     }
                     if(needBreak) break
@@ -1132,7 +1131,7 @@ export default {
                 case 0:
                     this.$refs['createData'].validate((valid) => {
                         if (!valid) {
-                            this.$Message.error('请完善信息!');
+                            this.$Message.error(this.$t('activity.message.field15'));
                             needBreak = true
                         }
                     })
@@ -1229,11 +1228,11 @@ export default {
                 case 2:
                     if(actTime.length > 1 && !this.contestData.sign.etime) {
                         // this.$refs.workPicker[0].handleClear()
-                        this.$Message.warning('请先设置报名时间')
+                        this.$Message.warning(this.$t('activity.message.field16'))
                         this.spliceTime(['upload'])
                     } else if(actTime.length > 1 && (new Date(actTime[1])).getTime() < this.contestData.sign.etime) {
                         // this.$refs.workPicker[0].handleClear()
-                        this.$Message.warning('上传结束时间不能早于报名时间')
+                        this.$Message.warning(this.$t('activity.message.field17'))
                         this.spliceTime(['upload'])
                     } else if(actTime.length > 1) {
                         this.contestUpload.stime = actTime.length > 1 ? (new Date(actTime[0])).getTime() : null
@@ -1245,11 +1244,11 @@ export default {
                 case 3:
                     if(actTime.length > 1 && (!this.contestData.sign.etime || !this.contestUpload.etime)) {
                         // this.$refs.reviewPicker[0].handleClear()
-                        this.$Message.warning('请先设置报名时间、上传时间')
+                        this.$Message.warning(this.$t('activity.message.field18'))
                         this.spliceTime(['review'])
                     } else if(actTime.length > 1 && ((new Date(actTime[0])).getTime() < this.contestData.sign.etime || (new Date(actTime[0])).getTime() < this.contestUpload.etime)) {
                         // this.$refs.reviewPicker[0].handleClear()
-                        this.$Message.warning('评审必须在报名、上传结束后进行')
+                        this.$Message.warning(this.$t('activity.message.field19'))
                         this.spliceTime(['review'])
                     } else if(actTime.length > 1) {
                         this.contestReview.stime = actTime.length > 1 ? (new Date(actTime[0])).getTime() : null
@@ -1261,11 +1260,11 @@ export default {
                 case 4:
                     if(actTime.length > 1 && !this.contestReview.etime) {
                         // this.$refs.scorePicker[0].handleClear()
-                        this.$Message.warning('请先设置评审时间')
+                        this.$Message.warning(this.$t('activity.message.field20'))
                         this.spliceTime(['score'])
                     } else if(actTime.length > 1 && (new Date(actTime[0])).getTime() < this.contestReview.etime) {
                         // this.$refs.scorePicker[0].handleClear()
-                        this.$Message.warning('公示必须在评审结束后进行')
+                        this.$Message.warning(this.$t('activity.message.field21'))
                         this.spliceTime(['score'])
                     } else if(actTime.length > 1) {
                         this.contestScore.stime = actTime.length > 1 ? (new Date(actTime[0])).getTime() : null
@@ -1346,7 +1345,7 @@ export default {
             if(this.attachment.find(item => {
                 return item.name === file.name
             })) {
-                this.$Message.warning('存在相同文件,请重新上传!')
+                this.$Message.warning(this.$t('activity.message.field22'))
                 return
             }
             let newFile = {
@@ -1410,7 +1409,7 @@ export default {
                 return item.label === this.addInfoForm.label
             })
             if(isHold && this.addInfoType === 1) {
-                this.$Message.warning('该信息已存在!')
+                this.$Message.warning(this.$t('activity.message.field23'))
             } else {
                 if(this.addInfoType === 1) {
                     this.addInfoForm.field = this.addInfoForm.label
@@ -1469,7 +1468,7 @@ export default {
                     this.ruleInfo = this._.cloneDeep(this.reviewList[index])
                     if(type === 'copy') {
                         this.ruleInfo.isAdd = true
-                        this.ruleInfo.name = this.ruleInfo.name + '(复制)'
+                        this.ruleInfo.name = this.ruleInfo.name + '(' + this.$t('learnActivity.mgtScEv.copy') +')'
                     }
                 }
                 this.ruleDrawerAdd = type === 'edit' ? 1 : 2
@@ -1494,8 +1493,8 @@ export default {
         },
         delRule(data, index) {
             this.$Modal.confirm({
-                title: '删除评审规则',
-                content: `确认删除${data.name}吗?`,
+                title: this.$t('activity.modal.text1'),
+                content: `${this.$t('cusMgt.delGroupContent')}${data.name}?`,
                 onOk: () => {
                     if(data.isAdd) {
                         this.reviewList.splice(index, 1)

+ 12 - 3
TEAMModelOS/ClientApp/src/view/signupActivity/infoGoing.vue

@@ -3,7 +3,7 @@
         <Loading v-show="isLoading"></Loading>
         <div v-if="actInfo" style="height: 100%;">
             <div class="info-header">
-                <div @click="$router.go(-1)">
+                <div @click="goBack()">
                     <Icon type="ios-arrow-back" />
                     返回活动列表
                 </div>
@@ -238,7 +238,9 @@ export default {
             this.$api.areaActivity.manageAct(params).then(res => {
                 if(res.code === 200) {
                     if(!res?.activity) {
-                        this.$router.go(-1)
+                        this.$router.push({
+                            name: this.isArea ? 'areaActivityProcess' : 'activityManage',
+                        })
                         return
                     }
                     let host = this.$store.state.user.userProfile.blob_uri.split('/' + this.$store.state.userInfo.TEAMModelId)[0]
@@ -342,7 +344,9 @@ export default {
                                     console.log('删除成功!');
                                 }
                             })
-                            this.$router.go(-1)
+                            this.$router.push({
+                                name: this.isArea ? 'areaActivityProcess' : 'activityManage',
+                            })
                         } else if(res.code === 200) {
                             this.$Message.warning('删除失败')
                         }
@@ -425,6 +429,11 @@ export default {
         changeLoad(type) {
             this.isLoading = type
         },
+        goBack() {
+            this.$router.push({
+                name: this.isArea ? 'areaActivityProcess' : 'activityManage',
+            })
+        },
     }
 }
 </script>

+ 5 - 0
TEAMModelOS/ClientApp/src/view/signupActivity/infoReleased.vue

@@ -437,6 +437,11 @@ export default {
                 min-height: 300px; */
                 width: auto;
                 height: 300px;
+                
+                width: auto;
+                max-width: 100%;
+                max-height: 100%;
+                border-radius: 5px;
             }
             &>div {
                 margin: 10px 0;

+ 50 - 33
TEAMModelOS/ClientApp/src/view/signupActivity/processActivity.vue

@@ -1,5 +1,5 @@
 <template>
-    <div style="height: 100%;">
+    <div style="height: 100%; background-color: #f2f2f2;">
         <Loading v-show="isLoading"></Loading>
         <div class="list-header">
             <RadioGroup v-model="processType" type="button" button-style="solid">
@@ -22,37 +22,39 @@
                 创建活动
             </span>
         </div>
-        <vuescroll>
-            <div class="activitya-list" v-if="activityListShow.length">
-                <div class="activity-box" v-for="(item, index) in activityListShow" :key="index" @click="goInfo(item)">
-                    <div :class="['train-img-box',item.scope == 'area' ? 'area-train-bg': item.scope == 'school' ? 'school-train-bg' : '']">
-                        <img :src="item.posterShow" />
-                        <span class="train-type-label">
-                            {{item.scope == 'area' ? $t('train.mgt.areaLabel') : item.scope == 'school' ? $t('train.mgt.schoolLabel') : '公开'}}
-                        </span>
-                    </div>
-                    <div class="content-box">
-                        <p>{{ item.name }}</p>
-                        <p>主题:{{ item.subject }}</p>
-                        <p>地点:{{ item.address }}</p>
-                        <p>时间:{{ item.startTime }} - {{ item.endTime }}</p>
-                        <p>主办:{{ item.zb.length }}</p>
-                        <!-- <p>简介:{{ item.jianjie }}</p> -->
-                        <div class="process-type">
-                            <template v-if="item.needConfirmed">
-                                <span style="color: #305cec;">待确认</span>
-                            </template>
-                            <template v-else>
-                                <span v-show="!item.publish" style="color: #ec8130;">待发布</span>
-                                <span v-show="item.publish === 1" style="color: #1e9a1e;">进行中</span>
-                                <span v-show="item.publish === 2" style="color: #696969;">已结束</span>
-                            </template>
+        <div style="height: 90%;">
+            <vuescroll>
+                <div class="activitya-list" v-if="activityListShow.length">
+                    <div class="activity-box" v-for="(item, index) in activityListShow" :key="index" @click="goInfo(item)">
+                        <div :class="['train-img-box',item.scope == 'area' ? 'area-train-bg': item.scope == 'school' ? 'school-train-bg' : '']">
+                            <img :src="item.posterShow" />
+                            <span class="train-type-label">
+                                {{item.scope == 'area' ? $t('train.mgt.areaLabel') : item.scope == 'school' ? $t('train.mgt.schoolLabel') : '公开'}}
+                            </span>
+                        </div>
+                        <div class="content-box">
+                            <p>{{ item.name }}</p>
+                            <p>主题:{{ item.subject }}</p>
+                            <p>地点:{{ item.address }}</p>
+                            <p>时间:{{ item.startTime }} - {{ item.endTime }}</p>
+                            <p>主办:{{ item.zb.length }}</p>
+                            <!-- <p>简介:{{ item.jianjie }}</p> -->
+                            <div class="process-type">
+                                <template v-if="item.needConfirmed">
+                                    <span style="color: #305cec;">待确认</span>
+                                </template>
+                                <template v-else>
+                                    <span v-show="!item.publish" style="color: #ec8130;">待发布</span>
+                                    <span v-show="item.publish === 1" style="color: #1e9a1e;">进行中</span>
+                                    <span v-show="item.publish === 2" style="color: #696969;">已结束</span>
+                                </template>
+                            </div>
                         </div>
                     </div>
                 </div>
-            </div>
-            <EmptyData :top="100" :textContent="$t('jyzx.common.noData')" v-else />
-        </vuescroll>
+                <EmptyData :top="100" :textContent="$t('jyzx.common.noData')" v-else />
+            </vuescroll>
+        </div>
     </div>
 </template>
 
@@ -212,6 +214,7 @@ export default {
     line-height: 45px;
     display: flex;
     justify-content: space-between;
+    background-color: #fff;
 
     .creat-activity {
         float: right;
@@ -237,9 +240,10 @@ export default {
         margin: 15px 20px;
         border: 1px solid #e5e5e5;
         border-radius: 5px;
-        width: 17%;
+        width: 22%;
         cursor: pointer;
         transition: all 0.2s ease 0s;
+        background-color: #fff;
 
         &:hover {
             box-shadow: 0 26px 40px -24px #aaa;
@@ -247,13 +251,22 @@ export default {
         }
 
         img {
-            width: 100%;
+            width: auto;
+            max-width: 100%;
+            max-height: 100%;
+            // border-radius: 5px;
         }
         .content-box{
-            padding: 10px;
+            padding: 20px;
             position: relative;
+
             &>p{
                 margin-bottom: 10px;
+
+                &:first-child {
+                    font-size: 18px;
+                    font-weight: bold;
+                }
             }
             .process-type{
                 position: absolute;
@@ -274,7 +287,11 @@ export default {
             height: 150px; */
             overflow: hidden;   
             position: relative;
-            height: 165px;
+            height: 145px;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+
             .train-type-label{
                 position: absolute;
                 left: -2px;

+ 3 - 0
TEAMModelOS/ClientApp/src/view/student-web/AppNew.vue

@@ -231,6 +231,8 @@
                 <p style="margin-bottom: 20px; font-weight: bold;">
                     {{ $t("studentWeb.courseContent.classroom") }}:{{ courseList[selectClass - 1].roomName ? courseList[selectClass - 1].roomName : $t("studentWeb.courseContent.noRoom") }}
                 </p>
+                
+                <p style="margin-bottom: 20px; font-weight: bold;">{{ $t("studentWeb.type.note") }}:{{ courseList[selectClass - 1].notice || '-' }}</p>
 
                 <!-- <p style="margin-bottom: 20px; font-weight: bold;">{{ $t("studentWeb.courseContent.addedTime") }}:{{ courseList[selectClass - 1].courseAddDate }}</p> -->
             </div>
@@ -658,6 +660,7 @@ export default {
                                 }) : []
                                 Object.assign(info, sche)
                                 info.showName = `${info.name}(${info.teacherName}-${info.groupName ? info.groupName : ''})`
+                                info.notice = sche.notice
                                 list.push(info)
                             })
                         })