瀏覽代碼

知识块移除知识点以及设置内容保存

OnePsycho 4 年之前
父節點
當前提交
9607f822b2

+ 2 - 2
TEAMModelOS/ClientApp/src/components/questionnaire/BaseAddItem.vue

@@ -106,7 +106,7 @@
 				let that = this
 				let newIndex = parseInt(this.options[this.options.length - 1]) + 1
 				let optionsLength = this.options.length
-				if (optionsLength < 10) {
+				if (optionsLength < 9) {
 					this.options.push(newIndex)
 					this.$nextTick(() => {
 						let editor = new E(that.$refs['singleOption' + newIndex][0])
@@ -130,7 +130,7 @@
 						editor.create()
 					})
 				} else {
-					this.$Message.warning('最多只有10个选项!')
+					this.$Message.warning('最多只有9个选项!')
 				}
 			},
 			// 删除选项

+ 49 - 13
TEAMModelOS/ClientApp/src/view/knowledge-point/index/Index.vue

@@ -61,7 +61,7 @@
 						<div>
 							<!-- <Icon type="md-apps" title="切换到知识点视图" v-if="!isShowPoints" color="#fff" size="20" style="cursor:pointer;margin-right:10px" @click="onChangeShowType" /> -->
 							<!-- <Icon type="ios-photos" title="切换到知识块视图" v-if="isShowPoints" color="#fff" size="18" style="cursor:pointer;margin-right:10px" @click="onChangeShowType" /> -->
-							<Icon type="md-add" v-if="($access.can('admin.*|Point_Add') || tabIndex === 1 ) && blockList.length !== 0" color="#fff"
+							<Icon type="md-add" v-if="($access.can('admin.*|Point_Add'))" color="#fff"
 							 size="18" style="cursor:pointer;margin-right:10px" @click="onAddPoint" />
 							<Icon type="ios-search" v-if="blockList.length !== 0" color="#fff" size="18" style="cursor:pointer" @click="isSearchPoint = true" />
 							<Button class="btn-compose-block" v-if="checkedPointList.length" @click="onComposeBlock">组成知识块</Button>
@@ -87,6 +87,8 @@
 												<Icon type="md-create" size="18" color="#d2d2d2" /></span>
 											<span class="btn-delete" v-if="$access.can('admin.*|Point_Delete') || tabIndex === 1" title="删除" @click.stop="onDeletePoint(item)">
 												<Icon type="md-trash" size="20" color="#d2d2d2" /></span>
+											<span class="btn-delete" v-if="$access.can('admin.*|Point_Remove') && isBlockPoint(item)" title="移出知识块" @click.stop="onRemovePoint(item)">
+												<Icon type="md-remove-circle" size="20" color="#d2d2d2" /></span>	
 										</span>
 									</div>
 								</transition-group>
@@ -125,6 +127,10 @@
 					<!-- 知识块列表 -->
 					<div class="vl gl">
 						<div v-if="blockList.length === 0">
+							<div class="gl-item gl-new-area" v-show="isDragging" @drop="onDragNewEnd"  @dragover.prevent>
+								<Icon type="md-add" size="18"/>
+								<span style="margin-left: 10px;">新建知识块</span>
+							</div>
 							<EmptyData :top="50"></EmptyData>
 						</div>
 						<div v-else>
@@ -341,18 +347,23 @@
 			
 			/* 保存最新知识块内容 */
 			savePointAndBlock(pointItem) {
-			    this.$api.knowledge.SaveOrUpdateKnowledge([pointItem]).then(res => {
-			        if (!res.error && res.result.data) {
-			            this.curDragPoint = null
-			            this.isLoading = false
-						this.$Message.success('添加成功!')
-			        } else {
-			            this.$Message.warning('操作失败,错误代码:' + res.error.code + ',错误信息:' + res.error.message)
-			        }
-			    }).catch(err => {
-			        console.log(err)
-			        this.$Message.warning('操作失败')
-			    })
+				return new Promise((r,j) => {
+					this.$api.knowledge.SaveOrUpdateKnowledge([pointItem]).then(res => {
+					    if (!res.error && res.result.data) {
+					        this.curDragPoint = null
+					        this.isLoading = false
+							this.checkedPointList = []
+							this.$Message.success('操作成功!')
+							r(200)
+					    } else {
+					        this.$Message.warning('操作失败,错误代码:' + res.error.code + ',错误信息:' + res.error.message)
+					    }
+					}).catch(err => {
+					    j(err)
+					    this.$Message.warning('操作失败')
+					})
+				})
+			    
 			},
 			
 			// 获取当前学校学段学科等基本信息
@@ -615,6 +626,31 @@
 					}
 				})
 			},
+			
+			// 移除知识点事件
+			onRemovePoint(data) {
+				this.$Modal.confirm({
+					title: '提示',
+					content: `确定将知识点 ${ data.name } 从知识块 ${ this.currentBlock.name } 中移除?`,
+					okText: '确认',
+					cancelText: '取消',
+					onOk: () => {
+						if(this.currentBlock.points.includes(data.id)){
+							let that = this
+							this.currentBlock.points.splice(this.currentBlock.points.indexOf(data.id),1)
+							this.savePointAndBlock(this.currentBlock).then(r => {
+								this.curBlockPoints = []
+								this.currentBlock = null
+								this.activeBlockIndex = null
+								that.handleSubjectTap(that.currentSubjectIndex)
+							})
+							
+						}else{
+							this.$Message.error('移除失败')
+						}
+					}
+				})
+			},
 
 			// 编辑知识块事件
 			onEditBlock(data) {

+ 1 - 0
TEAMModelOS/ClientApp/src/view/questionnaire/ManageQuestionnaire.vue

@@ -273,6 +273,7 @@
 				this.currentRecord && this.makeItemResult(this.currentRecord)
 				this.activeQnIndex = hasNewQn ? this.qnList.indexOf(item) : index
 				this.$refs.qnForm.qnFormEdit = false
+				this.onCancelEditQn()
 			},
 
 			/* 保存问卷操作 */

+ 98 - 67
TEAMModelOS/ClientApp/src/view/settings/Index.vue

@@ -4,44 +4,44 @@
 			<span :class="['settings-header-item',activeTab === '0' ?  'active-item' : '']" @click="onTabChange('0')">一般设置</span>
 			<span :class="['settings-header-item',activeTab === '1' ?  'active-item' : '']" @click="onTabChange('1')">学校管理</span>
 		</div>
-		
+
 		<div class="settings-body">
 			<div class="normal-settings" v-if="activeTab === '0'">
 				<div class="normal-settings-item">
 					<span class="item-title">网站语言设定</span>
 					<span class="item-description">请选择网站要用来显示选单、互动页面以及通知信息的语言</span>
 					<span class="item-content">
-						<Select v-model="curLang" style="width:200px">
+						<Select v-model="cloudSetting.curLang" style="width:200px">
 							<Option value="zh-CN">中文(简体)</Option>
 							<Option value="zh-TW">中文(繁体)</Option>
-							<Option value="en-US">英语</Option>
+							<Option value="en-US">English</Option>
 						</Select>
-						<Checkbox v-model="isHomeworkLang">使用您作业系统的语系来展示</Checkbox>
+						<Checkbox v-model="cloudSetting.isSystemLang">使用您作业系统的语系来展示</Checkbox>
 					</span>
 				</div>
 				<div class="normal-settings-item">
 					<span class="item-title">网站色彩模式</span>
 					<span class="item-description">请选择网站显示的色彩模式,以便提供最佳的用户体验</span>
 					<span class="item-content">
-						<span :class="['color-item',activeTheme === '0' ?  'color-item-active' : '']" @click="onThemeChange('0')"></span>
-						<span :class="['color-item',activeTheme === '1' ?  'color-item-active' : '']" @click="onThemeChange('1')"></span>
+						<span :class="['color-item',cloudSetting.curTheme === 'dark' ?  'color-item-active' : '']" @click="onThemeChange('dark')"></span>
+						<span :class="['color-item',cloudSetting.curTheme === 'light' ?  'color-item-active' : '']" @click="onThemeChange('light')"></span>
 					</span>
 				</div>
 				<div class="normal-settings-item">
 					<span class="item-title">菜单显示设置</span>
 					<span class="item-description">选择左侧Menu在网站载入时的预设显示模式</span>
 					<span class="item-content">
-						<RadioGroup v-model="menuStatus">
+						<RadioGroup v-model="cloudSetting.menuStatus">
 							<Radio label="open">预设展开显示</Radio>
 							<Radio label="close">预设关闭显示</Radio>
 						</RadioGroup>
 					</span>
 				</div>
 				<div class="normal-settings-item">
-					<Button>保存变更</Button>
+					<Button @click="saveSetting">保存变更</Button>
 				</div>
 			</div>
-		
+
 			<SchoolMgmt v-else></SchoolMgmt>
 		</div>
 	</div>
@@ -50,22 +50,53 @@
 <script>
 	import SchoolMgmt from './SchoolMgmt.vue'
 	export default {
-		components:{ SchoolMgmt },
-		data(){
+		components: {
+			SchoolMgmt
+		},
+		data() {
 			return {
-				activeTab:'0',
-				activeTheme:'0',
-				menuStatus:'open',
-				curLang:'zh-CN',
-				isHomeworkLang:true,
+				activeTab: '0',
+				activeTheme: '0',
+				menuStatus: 'open',
+				curLang: 'zh-CN',
+				isHomeworkLang: true,
+				cloudSetting: {
+					curLang: 'zh-CN',
+					curTheme: 'dark',
+					isSystemLang: true,
+					menuStatus: 'open'
+				}
 			}
 		},
-		methods:{
-			onTabChange(index){
+		created() {
+			if(localStorage.getItem('cloudSetting')){
+				this.cloudSetting = JSON.parse(localStorage.getItem('cloudSetting'))
+			}
+		},
+		methods: {
+			
+			/* 一般设置与学校管理切换 */
+			onTabChange(index) {
 				this.activeTab = index
 			},
-			onThemeChange(index){
-				this.activeTheme = index
+			
+			/* 主题切换 */
+			onThemeChange(index) {
+				this.cloudSetting.curTheme = index
+			},
+			
+			/* 保存设置 */
+			saveSetting() {
+				this.$Modal.confirm({
+					title: '提示',
+					content: '设置保存成功,刷新后即可生效,是否前往?',
+					okText: '确认',
+					cancelText: '取消',
+					onOk: () => {
+						localStorage.setItem('cloudSetting', JSON.stringify(this.cloudSetting))
+						location.reload()
+					}
+				})
 			}
 		}
 	}
@@ -76,30 +107,30 @@
 </style>
 
 <style lang="less">
-	.settings-container{
-		
-		.ivu-select-selection{
+	.settings-container {
+
+		.ivu-select-selection {
 			background: transparent;
 			border-color: #363738;
-			color:#a6a6a6;
+			color: #a6a6a6;
 		}
-		
-		.ivu-checkbox-wrapper{
+
+		.ivu-checkbox-wrapper {
 			margin-left: 40px;
 			margin-top: 5px;
-			color:#a6a6a6;
+			color: #a6a6a6;
 		}
-		
-		.ivu-checkbox{
+
+		.ivu-checkbox {
 			margin-right: 5px;
 		}
-		
-		.ivu-radio-wrapper{
+
+		.ivu-radio-wrapper {
 			margin-right: 20px;
-			color:#a5a5a5;
+			color: #a5a5a5;
 		}
-		
-		.ivu-radio-inner{
+
+		.ivu-radio-inner {
 			width: 18px;
 			height: 18px;
 			border-radius: 4px;
@@ -107,25 +138,25 @@
 			border-color: #4d4d4d;
 			border-width: 1px;
 			margin-right: 5px;
-			
-			&::after{
-				content:'';
-				display:block;
-				width:10px;
-				height:16px;
-				border-right:#ffffff solid 3px;
-				border-bottom:#ffffff solid 3px;
-				transform:rotate(35deg);
-				position:absolute;
-				top:-4px;
-				left:4px;
+
+			&::after {
+				content: '';
+				display: block;
+				width: 10px;
+				height: 16px;
+				border-right: #ffffff solid 3px;
+				border-bottom: #ffffff solid 3px;
+				transform: rotate(35deg);
+				position: absolute;
+				top: -4px;
+				left: 4px;
 				border-radius: 0;
 				background-color: transparent;
-				border-color:#0094FF;
+				border-color: #0094FF;
 			}
 		}
-		
-		.ivu-checkbox-inner{
+
+		.ivu-checkbox-inner {
 			width: 18px;
 			height: 18px;
 			border-radius: 4px;
@@ -134,8 +165,8 @@
 			border-width: 1px;
 			margin-right: 5px;
 		}
-		
-		.ivu-checkbox-checked .ivu-checkbox-inner{
+
+		.ivu-checkbox-checked .ivu-checkbox-inner {
 			width: 18px;
 			height: 18px;
 			border-radius: 4px;
@@ -143,25 +174,25 @@
 			border-color: #4d4d4d;
 			border-width: 1px;
 			margin-right: 5px;
-			
-			&::after{
-				content:'';
-				display:block;
-				width:10px;
-				height:16px;
-				border-right:#ffffff solid 3px;
-				border-bottom:#ffffff solid 3px;
-				transform:rotate(35deg);
-				position:absolute;
-				top:-4px;
-				left:4px;
+
+			&::after {
+				content: '';
+				display: block;
+				width: 10px;
+				height: 16px;
+				border-right: #ffffff solid 3px;
+				border-bottom: #ffffff solid 3px;
+				transform: rotate(35deg);
+				position: absolute;
+				top: -4px;
+				left: 4px;
 				border-radius: 0;
 				background-color: transparent;
-				border-color:#0094FF;
+				border-color: #0094FF;
 			}
 		}
-		
-		
-	
+
+
+
 	}
 </style>