Browse Source

Merge branch 'develop5.0-tmd' of http://106.12.23.251:10000/TEAMMODEL/TEAMModelOS into develop5.0-tmd

CrazyIter_Bin 3 năm trước cách đây
mục cha
commit
9fc015a141

+ 32 - 19
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventList.vue

@@ -48,28 +48,14 @@
                         >
                             <svg-icon :icon-class="iconBtn.iconClass"
                                       class="innerIcon"
-                                      :class="`Icon-${index + 1}`" />
+                                      :class="`Icon-${index + 1}`" 
+                            />
+                            <div class="dev-top" v-if="iconBtn.eventType == 'Preview' || iconBtn.eventType == 'HomeWork'">
+                                <span class="develop">{{ $t("studentWeb.public.develop") }}</span>
+                            </div>
                         </Radio>
                     </RadioGroup>
                 </div>
-                <!-- <ul class="icon-selector" v-if="hideIconbtn == false">
-                    <li class="icon-btn"
-                        @click="selectAllType()"
-                        :class="{'icon-btn-selected': eventTypeCheckers == ''}">
-                        <svg-icon icon-class="alltext" class="innerIcon Icon-0" />
-                    </li>
-                    <label v-for="(iconBtn, index) in typeNametoIcon" :key="index">
-                        <input type="checkbox"
-                               :value="iconBtn.eventType"
-                               v-model="eventTypeCheckers"
-                               @change="predealMockdatafirstItem()" />
-                        <li class="icon-btn">
-                            <svg-icon :icon-class="iconBtn.iconClass"
-                                      class="innerIcon"
-                                      :class="`Icon-${index + 1}`" />
-                        </li>
-                    </label>
-                </ul> -->
                 <!---按鈕搜尋區(多選)--->
             </div>
             <!--活動清單分頁-->
@@ -607,3 +593,30 @@ import { mapGetters, mapState } from 'vuex';
     @import "~@/assets/student-web/component_styles/event-list.css";
     @import "~@/assets/student-web/component_styles/event-list-new.css";
 </style>
+
+<style lang="less" scoped>
+.dev-top{
+    .develop{
+        position: absolute;
+        bottom: 10px;
+        right: -11px;
+        font-size: xx-small;
+        color: #fff;
+        padding: 2px 5px;
+        z-index: 99;
+        transform: scale(0.7) rotate(45deg);
+    }
+
+    &::after{
+        position: absolute;
+        content: " ";
+        right: 0px;
+        top: -4px;
+        z-index: -1;
+        width: 33px;
+        height: 20px;
+        background-color: #64AE16;
+        transform: skewY(45deg);
+    }
+}
+</style>

+ 9 - 2
TEAMModelOS/ClientApp/src/components/vote/BaseVoteSsTable.vue

@@ -9,7 +9,11 @@
             tableDatas: {
                 type: Array,
                 default:[]
-            }
+            },
+			isSecret:{
+				type:Boolean,
+				default:false
+			}
         },
         data(vm) {
             return {
@@ -31,7 +35,10 @@
                 columns: [
                     {
                         title: vm.$t('vote.name'),
-                        key: 'name'
+                        key: 'name',
+						render:(h, params) => {
+                            return h('span', vm.isSecret ? '***' : params.row.name)
+                        },
                     },
                     {
                         title: vm.$t('vote.className'),

+ 2 - 1
TEAMModelOS/ClientApp/src/locale/lang/en-US/studentWeb.js

@@ -21,7 +21,8 @@ export default {
         schoolSurvey: 'School-level Survey',
         privateSurvey: 'Personal Survey',
         search: 'Please enter the query content...',
-        notice: 'This feature is not yet available!'
+        notice: '功能开发中,敬请期待',
+        develop: "开发中",
     },
     type: {
         home: "Home",

+ 2 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/studentWeb.js

@@ -21,7 +21,8 @@ export default {
         schoolSurvey: '校级问卷',
         privateSurvey: '个人问卷',
         search: '请输入查询内容...',
-        notice: '此功能暂未开放!'
+        notice: '功能开发中,敬请期待',
+        develop: "开发中",
     },
     type: {
         home: "首页",

+ 2 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/studentWeb.js

@@ -21,7 +21,8 @@ export default {
         schoolSurvey: '校級問卷',
         privateSurvey: '個人問卷',
         search: '請輸入查詢內容...',
-        notice: '此功能暫未開放!'
+        notice: '功能開發中,敬請期待',
+        develop: "開發中",
     },
     type: {
         home: "首頁",

+ 2 - 2
TEAMModelOS/ClientApp/src/store/module/answerSheet.js

@@ -70,8 +70,8 @@ export default {
 			"columns": null, //列数
 			"pageCount": 1,
 
-			"pageWidth": PAPER_W - (ANCHORPROP.gapX - 5) * 2, //页面大小(回字组成的)
-			"pageHeight": PAPER_H - (ANCHORPROP.gapY - 5) * 2 , //页面大小(回字组成的)
+			"pageWidth": SVG_BORDER_PROP.width, //页面大小(回字组成的)
+			"pageHeight": SVG_BORDER_PROP.height , //页面大小(回字组成的)
 
 			"pageNumBlockCount": 3, //页码块数量
 			"pageNumStartValue": 1, //页码起始值, 起始是3个空格方块开始,写1; 2个空格1个实心,写0

+ 1 - 1
TEAMModelOS/ClientApp/src/view/evaluation/index/CreatePaper.vue

@@ -52,7 +52,7 @@
 								</FormItem>
 								<FormItem :label="$t('evaluation.paperList.paperScore')" prop="name"
 									class="evaluation-attr-wrap-inputNumber">
-									<InputNumber :max="200" :min="1" v-model="evaluationInfo.score"></InputNumber>
+									<InputNumber :max="1000" :min="1" v-model="evaluationInfo.score"></InputNumber>
 								</FormItem>
 							</Form>
 						</div>

+ 2 - 2
TEAMModelOS/ClientApp/src/view/newsheet/BaseSvgBg.vue

@@ -1,6 +1,6 @@
 <template>
 	<div
-		style="position:relative; width: 100%; height: 100%; overflow: hidden; margin-top: 0;border-bottom: 1px solid #b1b1b1;">
+		style="position:relative; width: 100%; height: 100%; overflow: hidden; margin-top: 0;border-bottom: 0px solid #b1b1b1;">
 		<div v-show="ids === 'svg0'" class="sheet-paper-title">
 			<BaseTitleEditor :ids="'sheetName' + ids" :content="sheetPaperName"></BaseTitleEditor>
 		</div>
@@ -110,7 +110,7 @@
 						.text(
 							550,
 							PAPER_H - 50,
-							`0123456789-${Number(this.ids.replace("svg", "")) + 1}`
+							`${this.sheetId}-${Number(this.ids.replace("svg", "")) + 1}`
 							)
 						.attr({
 							fontSize: 16,

+ 339 - 323
TEAMModelOS/ClientApp/src/view/newsheet/SheetBaseInfo.vue

@@ -1,339 +1,355 @@
 <template>
-  <div
-    class="sheet-info-container"
-    ref="baseInfoRef"
-    @mouseout="isShowInfoEdit = false"
-    @mouseover="isShowInfoEdit = true"
-  >
-    <svg id="sheetInfoSvg" width="100%" height="100%"></svg>
-    <div class="info-edit" v-show="isShowInfoEdit" @click="editModal = true">
-      <span>{{ $t('answerSheet.edit') }}</span>
-    </div>
-    <Modal v-model="editModal" :title="$t('answerSheet.baseInfo')" @on-ok="onEditBaseInfo">
-      <p class="edit-title">{{ $t('answerSheet.needTitle') }}</p>
-      <CheckboxGroup v-model="showInfoList">
-        <Checkbox
-          v-for="(item, index) in infoList"
-          :key="index"
-          :label="item"
-          :disabled="index < 2"
-        ></Checkbox>
-      </CheckboxGroup>
-      <p class="edit-title">{{ $t('answerSheet.idNumber') }}</p>
-      <InputNumber :max="12" :min="4" v-model="idLength"></InputNumber>
-    </Modal>
-  </div>
+	<div class="sheet-info-container" ref="baseInfoRef" @mouseout="isShowInfoEdit = false"
+		@mouseover="isShowInfoEdit = true">
+		<svg id="sheetInfoSvg" width="100%" height="100%"></svg>
+		<div class="info-edit" v-show="isShowInfoEdit" @click="editModal = true">
+			<span>{{ $t('answerSheet.edit') }}</span>
+		</div>
+		<Modal v-model="editModal" :title="$t('answerSheet.baseInfo')" @on-ok="onEditBaseInfo">
+			<p class="edit-title">{{ $t('answerSheet.needTitle') }}</p>
+			<CheckboxGroup v-model="showInfoList">
+				<Checkbox v-for="(item, index) in infoList" :key="index" :label="item" :disabled="index < 2"></Checkbox>
+			</CheckboxGroup>
+			<p class="edit-title">{{ $t('answerSheet.idNumber') }}</p>
+			<InputNumber :max="12" :min="4" v-model="idLength"></InputNumber>
+		</Modal>
+	</div>
 </template>
- 
+
 <script>
-import Snap from "imports-loader?this=>window,fix=>module.exports=0!snapsvg/dist/snap.svg.js";
-import {
-  PAPER_W,
-  PAPER_H,
-  CONTENT_MT,
-  CONTENT_ML,
-  ANCHORPROP,
-  CONTENT_START_X,
-  CONTENT_START_Y,
-  INFO_W,
-  INFO_H,
-  INFO_ITEM_GAP,
-  INFO_ITEM_MARGIN,
-  ID_LENGTH,
-  INFO_LEFT_X,
-  INFO_LEFT_W,
-  ID_TITLE_H,
-  ID_TITLE_Y,
-  NUMBER_CELL_H,
-  NUMBER_ITEM_W,
-  NUMBER_ITEM_H,
-  NUMBER_ITEM_MT,
-  NUMBER_ITEM_ML,
-} from "@/utils/sheetConfig.js";
-export default {
-  components: {},
-  data(vm) {
-    return {
-      infoList: [vm.$t('answerSheet.id'), vm.$t('answerSheet.name'),vm.$t('answerSheet.school'),vm.$t('answerSheet.className'),vm.$t('answerSheet.no'),vm.$t('answerSheet.roomNo')],
-      showInfoList: [vm.$t('answerSheet.id'), vm.$t('answerSheet.name'),vm.$t('answerSheet.school'),vm.$t('answerSheet.className'),vm.$t('answerSheet.no')],
-      isShowInfoEdit: false,
-      editModal: false,
-      infoLeftBox: null,
-      idNumberBox: null,
-      snap: null,
-      idLength: 10,
-	  svgPosArr:[]
-    };
-  },
-  created() {
-    this.snap = Snap("#sheetInfoSvg");
-  },
-  methods: {
-    onEditBaseInfo() {
-      this.infoLeftBox.remove();
-      let snap = this.snap;
-      this.infoLeftBox = snap.paper.g();
-      let gap = INFO_H / (this.showInfoList.length + 1);
-	  let lineWidth = INFO_W - this.idLength * 30
-      this.showInfoList.forEach((item, index) => {
-        // 考号、座号、姓名等
-        let leftInfo1 = snap.text(
-          CONTENT_START_X + 30,
-          CONTENT_START_Y + INFO_ITEM_MARGIN + gap * index,
-          `${item} :`
-        );
-        // 下划线
-        let leftInfo2 = snap
-          .line(
-            CONTENT_START_X + 80,
-            CONTENT_START_Y + INFO_ITEM_MARGIN + gap * index,
-            CONTENT_START_X + lineWidth - 40,
-            CONTENT_START_Y + INFO_ITEM_MARGIN + gap * index
-          )
-          .attr({ fill: "none", stroke: "#000", strokeWidth: 1,shapeRendering:"crispEdges", });
-        this.infoLeftBox.add(leftInfo1, leftInfo2);
-      });
+	import Snap from "imports-loader?this=>window,fix=>module.exports=0!snapsvg/dist/snap.svg.js";
+	import {
+		PAPER_W,
+		PAPER_H,
+		CONTENT_MT,
+		CONTENT_ML,
+		ANCHORPROP,
+		CONTENT_START_X,
+		CONTENT_START_Y,
+		INFO_W,
+		INFO_H,
+		INFO_ITEM_GAP,
+		INFO_ITEM_MARGIN,
+		ID_LENGTH,
+		INFO_LEFT_X,
+		INFO_LEFT_W,
+		ID_TITLE_H,
+		ID_TITLE_Y,
+		NUMBER_CELL_H,
+		NUMBER_ITEM_W,
+		NUMBER_ITEM_H,
+		NUMBER_ITEM_MT,
+		NUMBER_ITEM_ML,
+	} from "@/utils/sheetConfig.js";
+	export default {
+		components: {},
+		data(vm) {
+			return {
+				infoList: [vm.$t('answerSheet.id'), vm.$t('answerSheet.name'), vm.$t('answerSheet.school'), vm.$t(
+					'answerSheet.className'), vm.$t('answerSheet.no'), vm.$t('answerSheet.roomNo')],
+				showInfoList: [vm.$t('answerSheet.id'), vm.$t('answerSheet.name'), vm.$t('answerSheet.school'), vm.$t(
+					'answerSheet.className'), vm.$t('answerSheet.no')],
+				isShowInfoEdit: false,
+				editModal: false,
+				infoLeftBox: null,
+				idNumberBox: null,
+				snap: null,
+				idLength: 10,
+				svgPosArr: []
+			};
+		},
+		created() {
+			this.snap = Snap("#sheetInfoSvg");
+		},
+		methods: {
+			onEditBaseInfo() {
+				this.infoLeftBox.remove();
+				let snap = this.snap;
+				this.infoLeftBox = snap.paper.g();
+				let gap = INFO_H / (this.showInfoList.length + 1);
+				let lineWidth = INFO_W - this.idLength * 30
+				this.showInfoList.forEach((item, index) => {
+					// 考号、座号、姓名等
+					let leftInfo1 = snap.text(
+						CONTENT_START_X + 30,
+						CONTENT_START_Y + INFO_ITEM_MARGIN + gap * index,
+						`${item} :`
+					);
+					// 下划线
+					let leftInfo2 = snap
+						.line(
+							CONTENT_START_X + 80,
+							CONTENT_START_Y + INFO_ITEM_MARGIN + gap * index,
+							CONTENT_START_X + lineWidth - 40,
+							CONTENT_START_Y + INFO_ITEM_MARGIN + gap * index
+						)
+						.attr({
+							fill: "none",
+							stroke: "#000",
+							strokeWidth: 1,
+							shapeRendering: "crispEdges",
+						});
+					this.infoLeftBox.add(leftInfo1, leftInfo2);
+				});
+
+				this.renderIdNumber(this.idLength, false);
+				console.log(this.svgPosArr);
+				this.$store.commit('setInfoMode', 'number')
+				this.$store.commit('setInfoPos', this.svgPosArr)
+			},
+
+			// 渲染准考证号填涂区域
+			renderIdNumber(idLength, isShowCode) {
+				let snap = this.snap;
+				this.svgPosArr = []
+				this.setInfoConfig()
+				this.idNumberBox.remove();
+				this.idNumberBox = snap.paper.g();
+
+				const CELL_WIDTH = 30
+
+				const INFO_LEFT_W = INFO_W - CELL_WIDTH * idLength; // 左侧的宽度
+				const INFO_LEFT_X = INFO_LEFT_W + CONTENT_ML + ANCHORPROP.width + ANCHORPROP.gapX; // 左侧的x坐标
+				var numbers = new Array(idLength).fill("0");
+				var cellWidth = CELL_WIDTH; // 计算每个号码的宽度
+				const NUMBER_ITEM_MLR =
+					((INFO_W - INFO_LEFT_W) / idLength - NUMBER_ITEM_W) / 2; // 计算号码左右间距
+				// 信息框左右分割线
+				this.idNumberBox.add(
+					snap
+					.line(
+						INFO_LEFT_X,
+						CONTENT_MT + 50,
+						INFO_LEFT_X,
+						CONTENT_MT + 50 + INFO_H
+					)
+					.attr({
+						fill: "none",
+						stroke: "#000",
+						strokeWidth: 1,
+						shapeRendering: "crispEdges"
+					})
+				);
+
+				// 准考证号下边框
+				this.idNumberBox.add(
+					snap
+					.line(
+						INFO_LEFT_X,
+						ID_TITLE_Y,
+						PAPER_W - CONTENT_ML - ANCHORPROP.width - ANCHORPROP.gapX,
+						ID_TITLE_Y
+					)
+					.attr({
+						fill: "none",
+						stroke: "#000",
+						strokeWidth: 1,
+						shapeRendering: "crispEdges"
+					})
+				);
+				// 准考证号
+				this.idNumberBox.add(
+					snap.text(
+						INFO_LEFT_X + (idLength * CELL_WIDTH - 69) / 2,
+						CONTENT_MT + 75,
+						isShowCode ? this.$t('answerSheet.qrCodeTitle') : this.$t('answerSheet.idTitle')
+					)
+				);
+				if (!isShowCode) {
+					this.idNumberBox.add(
+						// 填涂上边框
+						snap
+						.line(
+							INFO_LEFT_X,
+							ID_TITLE_Y + NUMBER_CELL_H,
+							PAPER_W - CONTENT_ML - ANCHORPROP.width - ANCHORPROP.gapX,
+							ID_TITLE_Y + NUMBER_CELL_H
+						)
+						.attr({
+							fill: "none",
+							stroke: "#000",
+							strokeWidth: 1,
+							shapeRendering: "crispEdges"
+						})
+					);
+					numbers.forEach((item, index) => {
+						// 画准考证号填涂对应锚点
+						let c1 = snap.rect(
+							INFO_LEFT_X + NUMBER_ITEM_MLR + index * cellWidth,
+							40,
+							0,
+							NUMBER_ITEM_H
+						);
+						//  画准考证号分列分割线
+						let c2 = snap
+							.line(
+								INFO_LEFT_X + cellWidth * index,
+								ID_TITLE_Y,
+								INFO_LEFT_X + cellWidth * index,
+								ID_TITLE_Y - ID_TITLE_H + INFO_H
+							)
+							.attr({
+								fill: "none",
+								stroke: "#000",
+								strokeWidth: index === 0 ? 0 : 1,
+								shapeRendering: "crispEdges"
+							});
+
+						this.idNumberBox.add(c1, c2);
+						const context = require.context('@/icons/answersheet', false, /.svg/)
+						const frames = []
+						context.keys().forEach(k => {
+							frames.push(context(k))
+						})
+						// 画填涂svg图片
+						for (let i = 0; i < 10; i++) {
+							let img = frames[i];
+							let x = INFO_LEFT_X + NUMBER_ITEM_MLR + cellWidth * index
+							let y = ID_TITLE_Y + NUMBER_CELL_H + 5 + NUMBER_ITEM_MT * i
+							let c3 = snap.image(
+								img,
+								x,
+								y,
+								NUMBER_ITEM_W,
+								NUMBER_ITEM_H
+							);
+							this.idNumberBox.add(c3);
+							this.svgPosArr.push({
+								ans: i + '',
+								row: index,
+								pos: [{
+										x: x - CONTENT_START_X,
+										y: y - CONTENT_START_Y
+									},
+									{
+										x: x - CONTENT_START_X + NUMBER_ITEM_W,
+										y: y - CONTENT_START_Y
+									},
+									{
+										x: x - CONTENT_START_X,
+										y: y - CONTENT_START_Y + NUMBER_ITEM_H
+									},
+									{
+										x: x - CONTENT_START_X + NUMBER_ITEM_W,
+										y: y - CONTENT_START_Y + NUMBER_ITEM_H
+									}
+								]
+							})
+						}
+					});
+					// 画左边准考证号定位锚点
+					// for (let i = 0; i < 10; i++) {
+					//   snap.rect(
+					//     20,
+					//     ID_TITLE_Y + NUMBER_CELL_H + 5 + NUMBER_ITEM_MT * i,
+					//     NUMBER_ITEM_W,
+					//     NUMBER_ITEM_H
+					//   ).attr({ shapeRendering:"crispEdges"});
+					// }
+				} else {
+					let img = require("@/static/qrCode.png");
+					let c4 = snap.image(
+						img,
+						450,
+						180,
+						150,
+						150
+					);
+					this.idNumberBox.add(c4);
+				}
+
+			},
 
-      this.renderIdNumber(this.idLength,false);
-	  console.log(this.svgPosArr);
-	  this.$store.commit('setInfoMode','number')
-	  this.$store.commit('setInfoPos',this.svgPosArr)
-    },
+			renderQRCode() {
+				let snap = this.snap;
+				this.setInfoConfig()
+				this.idNumberBox.remove();
+				this.idNumberBox = snap.paper.g();
 
-    // 渲染准考证号填涂区域
-    renderIdNumber(idLength,isShowCode) {
-      let snap = this.snap;
-	  this.svgPosArr = []
-	  this.setInfoConfig()
-      this.idNumberBox.remove();
-      this.idNumberBox = snap.paper.g();
-	  
-	  const CELL_WIDTH = 30
+			},
 
-      const INFO_LEFT_W = INFO_W - CELL_WIDTH * idLength; // 左侧的宽度
-      const INFO_LEFT_X = INFO_LEFT_W + CONTENT_ML + ANCHORPROP.width + ANCHORPROP.gapX; // 左侧的x坐标
-      var numbers = new Array(idLength).fill("0");
-      var cellWidth = CELL_WIDTH; // 计算每个号码的宽度
-      const NUMBER_ITEM_MLR =
-        ((INFO_W - INFO_LEFT_W) / idLength - NUMBER_ITEM_W) / 2; // 计算号码左右间距
-      // 信息框左右分割线
-      this.idNumberBox.add(
-        snap
-          .line(
-            INFO_LEFT_X,
-            CONTENT_MT + 50,
-            INFO_LEFT_X,
-            CONTENT_MT + 50 + INFO_H
-          )
-          .attr({ fill: "none", stroke: "#000", strokeWidth: 1,shapeRendering:"crispEdges"})
-      );
+			setInfoConfig() {
+				let infoConfig = {
+					"type": 0,
+					"x": CONTENT_START_X - ANCHORPROP.gapX + 5,
+					"y": CONTENT_START_Y - ANCHORPROP.gapY + 5,
+					"width": INFO_W,
+					"height": INFO_H,
+					"pageNum": 1,
+					"vblockCount": 10,
+					"hblockCount": this.idLength
+				}
+				this.$store.commit('setInfoConfig', infoConfig)
+			}
+		},
+		mounted: function() {
+			this.snap = Snap("#sheetInfoSvg");
+			var snap = this.snap;
+			// 定义分组Group
+			this.infoLeftBox = snap.paper.g();
+			this.idNumberBox = snap.paper.g();
+			// 渲染个人信息区域
+			this.onEditBaseInfo();
 
-      // 准考证号下边框
-      this.idNumberBox.add(
-        snap
-          .line(
-            INFO_LEFT_X,
-            ID_TITLE_Y,
-            PAPER_W - CONTENT_ML - ANCHORPROP.width - ANCHORPROP.gapX,
-            ID_TITLE_Y
-          )
-          .attr({ fill: "none", stroke: "#000", strokeWidth: 1,shapeRendering:"crispEdges" })
-      );
-      // 准考证号
-      this.idNumberBox.add(
-        snap.text(
-          INFO_LEFT_X + (idLength * CELL_WIDTH - 69) / 2,
-          CONTENT_MT + 75,
-          isShowCode ? this.$t('answerSheet.qrCodeTitle') : this.$t('answerSheet.idTitle')
-        )
-      );
-	  if(!isShowCode){
-		  this.idNumberBox.add(
-		    // 填涂上边框
-		    snap
-		      .line(
-		        INFO_LEFT_X,
-		        ID_TITLE_Y + NUMBER_CELL_H,
-		        PAPER_W - CONTENT_ML - ANCHORPROP.width - ANCHORPROP.gapX,
-		        ID_TITLE_Y + NUMBER_CELL_H
-		      )
-		      .attr({ fill: "none", stroke: "#000", strokeWidth: 1,shapeRendering:"crispEdges" })
-		  );
-		  numbers.forEach((item, index) => {
-		    // 画准考证号填涂对应锚点
-		    let c1 = snap.rect(
-		      INFO_LEFT_X + NUMBER_ITEM_MLR + index * cellWidth,
-		      40,
-		      0,
-		      NUMBER_ITEM_H
-		    );
-		    //  画准考证号分列分割线
-		    let c2 = snap
-		      .line(
-		        INFO_LEFT_X + cellWidth * index,
-		        ID_TITLE_Y,
-		        INFO_LEFT_X + cellWidth * index,
-		        ID_TITLE_Y - ID_TITLE_H + INFO_H
-		      )
-		      .attr({
-		        fill: "none",
-		        stroke: "#000",
-		        strokeWidth: index === 0 ? 0 : 1,
-				shapeRendering:"crispEdges"
-		      });
-		  
-		    this.idNumberBox.add(c1, c2);
-			const context = require.context('@/icons/answersheet', false, /.svg/)
-			const frames = []
-			context.keys().forEach(k => {
-				frames.push(context(k))
+			// 信息框
+			let infoBox = snap
+				.rect(CONTENT_START_X, CONTENT_START_Y, INFO_W, INFO_H)
+				.attr({
+					fill: "rgba(0,0,0,0)",
+					stroke: "#000",
+					strokeWidth: 2,
+					shapeRendering: "crispEdges",
+				});
+			this.setInfoConfig()
+
+
+			infoBox.mouseover(() => {
+				// 移入
+				this.isShowInfoEdit = true;
+			});
+			infoBox.mouseout(() => {
+				// 移入
+				this.isShowInfoEdit = false;
+			});
+			this.$EventBus.$off('onCreateSheet')
+			this.$EventBus.$on('onCreateSheet', () => {
+				this.isShowInfoEdit = false
 			})
-		    // 画填涂svg图片
-		    for (let i = 0; i < 10; i++) {
-		      let img = frames[i];
-			  let x = INFO_LEFT_X + NUMBER_ITEM_MLR + cellWidth * index
-			  let y = ID_TITLE_Y + NUMBER_CELL_H + 5 + NUMBER_ITEM_MT * i
-		      let c3 = snap.image(
-		        img,
-		        x,
-		        y,
-		        NUMBER_ITEM_W,
-		        NUMBER_ITEM_H
-		      );
-		      this.idNumberBox.add(c3);
-			  this.svgPosArr.push({
-				  ans:i,
-				  row:index,
-				  pos:[
-					  {
-					  	x:x - CONTENT_START_X,
-					  	y:y - CONTENT_START_Y
-					  },
-					  {
-					  	x:x - CONTENT_START_X + NUMBER_ITEM_W,
-					  	y:y - CONTENT_START_Y
-					  },
-					  {
-					  	x:x - CONTENT_START_X,
-					  	y:y - CONTENT_START_Y + NUMBER_ITEM_H
-					  },
-					  {
-					  	x:x - CONTENT_START_X + NUMBER_ITEM_W,
-					  	y:y - CONTENT_START_Y + NUMBER_ITEM_H
-					  }
-					]
-			  })
-		    }
-		  });
-		  // 画左边准考证号定位锚点
-		  // for (let i = 0; i < 10; i++) {
-		  //   snap.rect(
-		  //     20,
-		  //     ID_TITLE_Y + NUMBER_CELL_H + 5 + NUMBER_ITEM_MT * i,
-		  //     NUMBER_ITEM_W,
-		  //     NUMBER_ITEM_H
-		  //   ).attr({ shapeRendering:"crispEdges"});
-		  // }
-	  }else{
-		  let img = require("@/static/qrCode.png");
-		  let c4 = snap.image(
-		    img,
-		    450,
-		    180,
-		    150,
-		    150
-		  );
-		  this.idNumberBox.add(c4);
-	  }
-      
-    },
-	
-	renderQRCode(){
-		let snap = this.snap;
-		this.setInfoConfig()
-		this.idNumberBox.remove();
-		this.idNumberBox = snap.paper.g();
-		
-	},
-	
-	setInfoConfig(){
-		let infoConfig = {
-			"type": 0,
-			"x": CONTENT_START_X - ANCHORPROP.gapX + 5,
-			"y": CONTENT_START_Y - ANCHORPROP.gapY + 5,
-			"width": INFO_W,
-			"height": INFO_H,
-			"pageNum": 1,
-			"vblockCount": 10,
-			"hblockCount": this.idLength
-		} 
-		this.$store.commit('setInfoConfig', infoConfig)  
-	}
-  },
-  mounted: function () {
-    this.snap = Snap("#sheetInfoSvg");
-    var snap = this.snap;
-    // 定义分组Group
-    this.infoLeftBox = snap.paper.g();
-    this.idNumberBox = snap.paper.g();
-    // 渲染个人信息区域
-    this.onEditBaseInfo();
-    
-    // 信息框
-    let infoBox = snap
-      .rect(CONTENT_START_X, CONTENT_START_Y, INFO_W, INFO_H)
-      .attr({ fill: "rgba(0,0,0,0)", stroke: "#000", strokeWidth: 2,shapeRendering:"crispEdges", });
-	this.setInfoConfig()
-	
-	  
-    infoBox.mouseover(() => {
-      // 移入
-      this.isShowInfoEdit = true;
-    });
-    infoBox.mouseout(() => {
-      // 移入
-      this.isShowInfoEdit = false;
-    });
-	this.$EventBus.$off('onCreateSheet')
-	this.$EventBus.$on('onCreateSheet',() => {
-		this.isShowInfoEdit = false
-	})
-	
-	
-  },
-};
+
+
+		},
+	};
 </script>
 <style scoped>
-.sheet-info-container {
-  position: absolute;
-  left: 0;
-  top: 0;
-  width: 826px;
-  height: 342px;
-}
+	.sheet-info-container {
+		position: absolute;
+		left: 0;
+		top: 0;
+		width: 826px;
+		height: 342px;
+	}
 
-/* .sheet-info-container:hover .info-edit{
+	/* .sheet-info-container:hover .info-edit{
     display: flex;
 } */
 
-.info-edit {
-  position: absolute;
-  top: 75px;
-  right: 40px;
-  width: 40px;
-  height: 25px;
-  background: #00a43a;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  color: #fff;
-  font-size: 12px;
-  cursor: pointer;
-  z-index: 0;
-}
+	.info-edit {
+		position: absolute;
+		top: 75px;
+		right: 40px;
+		width: 40px;
+		height: 25px;
+		background: #00a43a;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		color: #fff;
+		font-size: 12px;
+		cursor: pointer;
+		z-index: 0;
+	}
 
-.edit-title {
-  margin: 10px 0;
-}
+	.edit-title {
+		margin: 10px 0;
+	}
 </style>
- 

+ 42 - 38
TEAMModelOS/ClientApp/src/view/student-web/App.vue

@@ -42,19 +42,26 @@
                     </div>
                 </span>
                 <!--通知彈窗區域-->
-                <!-- <span class="dropdown"> -->
                 <MenuItem name="6" @click.native="noData" :title="$t('studentWeb.type.note')">
                     <span class="info-badge" v-if="MyNo != 6"></span>
-                    <svg-icon icon-class="bell" class="tabIcon1" />
+                    <div class="dev-top">
+                        <svg-icon icon-class="bell" class="tabIcon1" />
+                        <span class="develop">{{ $t("studentWeb.public.develop") }}</span>
+                    </div>
                 </MenuItem>
-                <!-- </span> -->
                 <!-- hiteach课堂记录 -->
                 <MenuItem name="5" @click.native="noData" :title="$t('studentWeb.type.hiteach')">
-                    <svg-icon icon-class="hiteach" class="tabIcon4" />
+                    <div class="dev-top">
+                        <svg-icon icon-class="hiteach" class="tabIcon4" />
+                        <span class="develop">{{ $t("studentWeb.public.develop") }}</span>
+                    </div>
                 </MenuItem>
                 <!-- 自主学习 -->
                 <MenuItem name="3" @click.native="noData" :title="$t('studentWeb.type.studyview')">
-                    <svg-icon icon-class="note" class="tabIcon1" />
+                    <div class="dev-top">
+                        <svg-icon icon-class="note" class="tabIcon1" />
+                        <span class="develop">{{ $t("studentWeb.public.develop") }}</span>
+                    </div>
                 </MenuItem>
                 <MenuItem name="4" to="/studentWeb/eventView" :title="$t('studentWeb.type.activity')">
                     <svg-icon icon-class="selflearning" class="tabIcon2" />
@@ -62,21 +69,6 @@
                 <MenuItem name="1" to="/studentWeb/homeView" :title="$t('studentWeb.type.home')">
                     <svg-icon icon-class="home" class="tabIcon3" />
                 </MenuItem>
-                <!-- 加入课程 -->
-                <!-- <button class="addcoursebtn"
-                        @click='sentcourseID()'
-                        v-if="isAddClass">
-                    {{$t("studentWeb.home.joinClass")}}
-                </button>
-                <input maxlength="6"
-                    class="addcourseinput"
-                    v-model="courseID"
-                    :placeholder="$t('studentWeb.home.classPla')"
-                    v-if="isAddClass" />
-                <div class="clearinput">
-                    <Icon @click="clearInput()" v-if="isTyping" type="md-close" />
-                </div> -->
-                <!-- 加入课程 -->
             </Menu>
         </div>
         <!-- 小屏幕 -->
@@ -117,10 +109,6 @@
                 isRouterAlive: true,
                 windowWidth: window.innerWidth,
                 windowHeight: window.innerHeight,
-                bgc: "red",
-                active: false,
-                mockdata: "",
-                isClickInfoPop: false,
                 isTyping: false,
                 curRole: '',
                 users: '',
@@ -152,9 +140,9 @@
         watch: {
             courseID: function (value) {
                 if (value != "") {
-                    this.isTyping = true;
+                    this.isTyping = true
                 } else if (value == "") {
-                    this.isTyping = false;
+                    this.isTyping = false
                 }
             },
         },
@@ -174,9 +162,6 @@
             sentcourseID() {
                 this.$store.commit('searchCourseIDforAdd', this.courseID.trim())
             },
-            clearInput() {
-                this.courseID = "";
-            },
             onResize() {
                 this.windowWidth = window.innerWidth;
                 this.windowHeight = window.innerHeight;
@@ -186,17 +171,9 @@
                     return "#f0f0f0";
                 }
             },
-            mouseOver: function () {
-                this.active = !this.active;
-            },
             clickSidebarToggle() {
                 this.$store.commit("ToggleSidebar");
             },
-            changeBgc() {
-                if (this.MyNo == "4") {
-                    return true;
-                }
-            },
             noData() {
                 this.$Message.warning(this.$t("studentWeb.public.notice"))
             },
@@ -204,7 +181,6 @@
                 this.isRouterAlive = false;
                 this.$nextTick(() => (this.isRouterAlive = true));
             },
-
             getNavNo: function (MyNo) {
                 this.MyNo = MyNo;
             },
@@ -258,3 +234,31 @@
 <style scoped>
     @import "~@/assets/student-web/component_styles/app-nav.css";
 </style>
+
+<style lang="less" scoped>
+.dev-top{
+    .develop{
+        position: absolute;
+        bottom: 10px;
+        right: -11px;
+        font-size: xx-small;
+        color: #fff;
+        padding: 2px 5px;
+        z-index: 99;
+        transform: scale(0.7) rotate(45deg);
+    }
+
+    &::after{
+        position: absolute;
+        content: " ";
+        right: 0px;
+        top: -4px;
+        z-index: -1;
+        width: 33px;
+        height: 20px;
+        background-color: #64AE16;
+        transform: skewY(45deg);
+    }
+}
+
+</style>

+ 12 - 6
TEAMModelOS/ClientApp/src/view/vote/ManageVote.vue

@@ -77,7 +77,7 @@
 									<span>{{ $t('vote.voteResult') }}</span>
 									<div class="hw-box-header-tools">
 										<div>
-											<span class="hw-box-header-tools-tool" @click="changeTableView">
+											<span class="hw-box-header-tools-tool" @click="changeTableView" v-if="!currentVote.secret">
 												<Icon type="md-podium" />
 												{{ isOptionView ? $t('vote.stuListView') : $t('vote.optionView') }}
 											</span>
@@ -95,7 +95,7 @@
 								<div class="hw-data-wrap" style="height:90%" ref="baseQnRef" v-else>
 									<vuescroll>
 										<BaseVoteTable :tableDatas="tableData" v-show="isOptionView"></BaseVoteTable>
-										<BaseVoteSsTable :tableDatas="studentsTable" v-show="!isOptionView">
+										<BaseVoteSsTable :tableDatas="studentsTable" v-show="!isOptionView" :isSecret="currentVote.secret">
 										</BaseVoteSsTable>
 										<div style="display:flex">
 											<BaseVotePie pieId="votePie" :pieData="studentsTable"
@@ -301,9 +301,15 @@
 			async getVoteRecord(voteItem) {
 				return new Promise(async (r, j) => {
 					try {
-						let curItemRecord = await this.getBlobJsonFile(voteItem.scope, voteItem
-							.recordUrl)
-						r(curItemRecord)
+						if(!voteItem.recordUrl){
+							console.log('xxxxx')
+							r({})
+						}else{
+							let curItemRecord = await this.getBlobJsonFile(voteItem.scope, voteItem
+								.recordUrl)
+							r(curItemRecord)
+						}
+						
 					} catch (e) {
 						j(e)
 					}
@@ -441,7 +447,7 @@
 							this.studentsTable = list
 							
 							// 要根据作答情况 结合两张表 处理表格显示的数据 
-							if (records.options.length) {
+							if (records.options && records.options.length) {
 								records.options = this._.orderBy(records.options,'code')
 								records.options.forEach((item, index) => {
 									arr.push({