Prechádzať zdrojové kódy

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

OnePsycho 4 rokov pred
rodič
commit
52ba18ea37

+ 1 - 1
TEAMModelOS/ClientApp/src/api/openMgmt.js

@@ -20,7 +20,7 @@ export default{
      * @param {} data
      */
     getApiList: function (data) {
-        return post('/open-api/get', data)
+        return post('/open-api/get-api', data)
     },
     /**
      * 新增/编辑

+ 399 - 347
TEAMModelOS/ClientApp/src/common/BaseUserPoptip.vue

@@ -1,28 +1,50 @@
 <template>
-	<div class="base-user-center">
-		<div style="display: flex;">
-			<div class="base-user-info">
-				<p class="base-user-name">{{ userInfo.username }}</p>
-				<!-- <p class="base-user-post">教务主任</p> -->
-				<Dropdown @on-click="onRoleSelect">
-					<a href="javascript:void(0)" class="base-user-post">
-						{{ getRoleName(curRole) }}
-						<Icon type="ios-arrow-down"></Icon>
-					</a>
-					<DropdownMenu slot="list">
-						<DropdownItem v-if="curRole != 'teacher' && curRole != 'admin'" name="teacher">{{ $t('utils.teacher') }}</DropdownItem>
-						<DropdownItem v-if="curRole != 'student'" name="student">{{ $t('utils.student') }}</DropdownItem>
-						<!-- <DropdownItem  name="student">學生</DropdownItem> -->
-					</DropdownMenu>
-				</Dropdown>
-			</div>
-			<Poptip class="dark-iview-poptip" @on-popper-show="doRefresh()">
-				<!-- <img :src="user.picture" /> -->
+    <div class="base-user-center">
+        <div style="display: flex;">
+            <div class="base-user-info">
+                <!-- <p class="base-user-name" style="margin-top:6px">{{ userInfo.username }}</p> -->
+                <!-- <Dropdown @on-click="onRoleSelect">
+                    <a href="javascript:void(0)" class="base-user-post">
+                        {{ getRoleName(curRole) }}
+                        <Icon type="ios-arrow-down"></Icon>
+                    </a>
+                    <DropdownMenu slot="list">
+                        <DropdownItem v-if="curRole != 'teacher' && curRole != 'admin'" name="teacher">{{ $t('utils.teacher') }}</DropdownItem>
+                        <DropdownItem v-if="curRole != 'student'" name="student">{{ $t('utils.student') }}</DropdownItem>
+                    </DropdownMenu>
+                </Dropdown> -->
+            </div>
+            <Dropdown placement="bottom-end">
+                <PersonalPhoto style="cursor: pointer;" :name="userInfo.username" :picture="user.picture" :color="userInfo.nameColor" />
+                <DropdownMenu slot="list" class="user-center-wrap">
+                    <DropdownItem class="user-info-wrap">
+                        <p>{{userInfo.username}}</p>
+                        <p class="user-id">{{`ID: ${user.id}`}}</p>
+                        <Icon class="user-info-arrow" type="ios-arrow-forward" color="#1cc0f3" />
+                    </DropdownItem>
+                    <DropdownItem class="drop-item" style="margin-top:8px" @click.native="onRoleSelect('student')">
+                        <Icon type="md-swap" class="drop-item-icon" />
+                        切换为学生
+                    </DropdownItem>
+                    <DropdownItem class="drop-item" @click.native="toSettings('1')">
+                        <Icon custom="iconfont icon-school" class="drop-item-icon" />
+                        学校管理
+                    </DropdownItem>
+                    <DropdownItem class="drop-item" @click.native="toSettings('0')">
+                        <Icon type="ios-settings" class="drop-item-icon" />
+                        系统设置
+                    </DropdownItem>
+                    <DropdownItem divided @click.native="onQuit">
+                        <Icon type="md-power" class="drop-item-icon" />
+                        {{$t('utils.logout')}}
+                    </DropdownItem>
+                </DropdownMenu>
+            </Dropdown>
+            <!-- <Poptip class="dark-iview-poptip" @on-popper-show="doRefresh()">
 				<PersonalPhoto style="cursor: pointer;" :name="userInfo.username" :picture="user.picture" :color="userInfo.nameColor"/>
 
 				<div slot="content" class="user-center">
 					<div class="user-info">
-						<!-- <img :src="user.picture" />     border: 2px solid #fff;-->
 						<PersonalPhoto :width="'70px'" :height="'70px'" :fontSize="'1.50rem'" :name="userInfo.username" :picture="user.picture" :color="userInfo.nameColor"/>
 
 						<span class="user-info-username">{{ userInfo.username }}</span>
@@ -72,359 +94,389 @@
 					</div>
 					<div class="btn-logout" @click="onQuit">{{ $t('utils.logout') }}</div>
 				</div>
-			</Poptip>
-		</div>
-	</div>
+			</Poptip> -->
+        </div>
+    </div>
 </template>
 
 <script>
-    import BlobTool from '@/utils/blobTool.js';
-	import PersonalPhoto from '@/components/public/personalPhoto/Index.vue'
-	export default {
-		data() {
-			return {
-				curRole: '',
-				userInfo: {
-					username: '',
-					account: '',
-					role: '',
-					courseNum: 0,
-					activityNum: 0,
-					classNum: 0,
-					nameColor: '',
-				},
-				user: {},
-                sizeInfo: {
-                    total: 0,   //所有
-                    image: 0,   //内容模块图片
-                    res: 0,     //内容模块教材
-                    video: 0,   //内容模块视频
-                    audio: 0,   //内容模块音频
-                    doc: 0,     //内容模块文档
-                    other: 0,   //内容模块其他文件
-                    data: 0      //除了内容模块之外的文件
-                }
-			}
-		},
-		created() {
-            this.doRefresh()
-		},
-		methods: {
-			doRefresh(){
-				this.user = JSON.parse(decodeURIComponent(localStorage.userInfo, "utf-8"));
-				let user_profile = JSON.parse(decodeURIComponent(localStorage.user_profile, "utf-8"));
-				if(this.user.roles.length){
-					this.curRole = this.user.roles[0]
-				}
-				this.userInfo.username = this.user.name
-				this.userInfo.nameColor = this.randomColor()
-				this.userInfo.courseNum = user_profile.courses.length
-				this.getSize()
-			},
-			//获取Blob空间信息
-			getSize() {
-                BlobTool.getSizeByServe(this.$store.state.userInfo.TEAMModelId).then(
-                    res => {
-                        this.sizeInfo = res
-                    },
-                    err => {
-                        this.$Message.error(this.$t('utils.caclErrorL'))
-                    }
-                )
-			},
-            //计算空间占比
-            getPercent(size) {
-                if (this.sizeInfo.total > this.$GLOBAL.PRIVATE_SPACE) {
-                    return '0%'
-                } else {
-                    let p = (size * 100 / this.$GLOBAL.PRIVATE_SPACE)
-					p = p > 1 ? p.toFixed(2) : p > 0 ? 1 : 0
-                    return p + '%'
-                }
+import BlobTool from '@/utils/blobTool.js';
+import PersonalPhoto from '@/components/public/personalPhoto/Index.vue'
+export default {
+    data() {
+        return {
+            curRole: '',
+            userInfo: {
+                username: '',
+                account: '',
+                role: '',
+                courseNum: 0,
+                activityNum: 0,
+                classNum: 0,
+                nameColor: '',
             },
-			onRoleSelect(val){
-				if(localStorage.getItem('identity') != val){
-					this.curRole = val
-					let path = val === 'student' ? '/studentWeb' : '/home'
-					localStorage.setItem('identity', val)
-					this.$router.push({ path: path })					
-				}
-			},
-			onQuit() {
-				this.$emit('logout')
-			},
-			randomColor: function(){
-				let r = Math.floor(Math.random()*255);
-				let g = Math.floor(Math.random()*255);
-				let b = Math.floor(Math.random()*255);
-				return 'rgba('+ r +','+ g +','+ b +',0.8)';
-			},
-		},
-
-		computed: {
-            
-			getSizeVal() {
-				return val => {
-					return this.$tools.bytesToSize(val)
-				}
-			},
-			getRoleName() {
-				return val => {
-					return val === 'student' ? this.$t('utils.student') : this.$t('utils.teacher')
-				}
-			}
-		},
-    	components:{
-			PersonalPhoto
-		}
-	}
+            user: {},
+            sizeInfo: {
+                total: 0,   //所有
+                image: 0,   //内容模块图片
+                res: 0,     //内容模块教材
+                video: 0,   //内容模块视频
+                audio: 0,   //内容模块音频
+                doc: 0,     //内容模块文档
+                other: 0,   //内容模块其他文件
+                data: 0      //除了内容模块之外的文件
+            }
+        }
+    },
+    created() {
+        this.doRefresh()
+    },
+    methods: {
+        // 这里可以携带参数,直接跳转到对应的tab
+        toSettings(tab) {
+            this.$router.push({
+                path: '/home/settings',
+                query: { tab }
+            })
+        },
+        doRefresh() {
+            this.user = JSON.parse(decodeURIComponent(localStorage.userInfo, "utf-8"));
+            let user_profile = JSON.parse(decodeURIComponent(localStorage.user_profile, "utf-8"));
+            if (this.user.roles.length) {
+                this.curRole = this.user.roles[0]
+            }
+            this.userInfo.username = this.user.name
+            this.userInfo.nameColor = this.randomColor()
+            this.userInfo.courseNum = user_profile.courses.length
+            this.getSize()
+        },
+        //获取Blob空间信息
+        getSize() {
+            BlobTool.getSizeByServe(this.$store.state.userInfo.TEAMModelId).then(
+                res => {
+                    this.sizeInfo = res
+                },
+                err => {
+                    this.$Message.error(this.$t('utils.caclErrorL'))
+                }
+            )
+        },
+        //计算空间占比
+        getPercent(size) {
+            if (this.sizeInfo.total > this.$GLOBAL.PRIVATE_SPACE) {
+                return '0%'
+            } else {
+                let p = (size * 100 / this.$GLOBAL.PRIVATE_SPACE)
+                p = p > 1 ? p.toFixed(2) : p > 0 ? 1 : 0
+                return p + '%'
+            }
+        },
+        onRoleSelect(val) {
+            if (localStorage.getItem('identity') != val) {
+                this.curRole = val
+                let path = val === 'student' ? '/studentWeb' : '/home'
+                localStorage.setItem('identity', val)
+                this.$router.push({ path: path })
+            }
+        },
+        onQuit() {
+            this.$emit('logout')
+        },
+        randomColor: function () {
+            let r = Math.floor(Math.random() * 255);
+            let g = Math.floor(Math.random() * 255);
+            let b = Math.floor(Math.random() * 255);
+            return 'rgba(' + r + ',' + g + ',' + b + ',0.8)';
+        },
+    },
+
+    computed: {
+
+        getSizeVal() {
+            return val => {
+                return this.$tools.bytesToSize(val)
+            }
+        },
+        getRoleName() {
+            return val => {
+                return val === 'student' ? this.$t('utils.student') : this.$t('utils.teacher')
+            }
+        }
+    },
+    components: {
+        PersonalPhoto
+    }
+}
 </script>
 <style scoped>
-    .user-storage-distribution {
-		overflow:hidden;
-	}
-    .user-storage-text span {
-		margin-right:20px;
-		display:inline-block;
-	}
-    .storage-full {
-        background-color: red;
-    }
-
-    .storage-data {
-        background-color: #F8C006;
+.drop-item-icon {
+    margin-right: 5px;
+}
+.drop-item {
+    padding: 10px 16px;
+}
+.user-info-arrow {
+    float: right;
+    margin-top: -25px;
+}
+.user-info-wrap {
+    /* background: #608f94; */
+    padding: 12px 16px;
+    box-shadow: 0px 2px 5px #eee;
+}
+.user-id {
+    color: rgb(174 176 178);
+    margin-top: 5px;
+    font-size: 12px;
+}
+.user-center-wrap {
+    min-width: 200px;
+    border-radius: 6px;
+    overflow: hidden;
+}
+.user-storage-distribution {
+    overflow: hidden;
+}
+.user-storage-text span {
+    margin-right: 20px;
+    display: inline-block;
+}
+.storage-full {
+    background-color: red;
+}
+
+.storage-data {
+    background-color: #f8c006;
+}
+
+.storage-image {
+    background-color: #45c84a;
+}
+
+.storage-video {
+    background-color: #8e2bdd;
+}
+
+.storage-audio {
+    background-color: #e1027b;
+}
+
+.storage-doc {
+    background-color: #03c0c2;
+}
+
+.storage-res {
+    background-color: #1ffcc5;
+}
+
+.storage-other {
+    background-color: #e87b22;
+}
+
+.text-data {
+    color: #f8c006;
+}
+
+.text-image {
+    color: #45c84a;
+}
+
+.text-video {
+    color: #8e2bdd;
+}
+
+.text-audio {
+    color: #e1027b;
+}
+
+.text-doc {
+    color: #03c0c2;
+}
+
+.text-res {
+    color: #1ffcc5;
+}
+
+.text-other {
+    color: #e87b22;
+}
+</style>
+<style lang="less">
+.base-user-center .ivu-select-dropdown {
+    padding: 0px 0px 5px 0px;
+    border-radius: 7px;
+}
+.base-user-center {
+    .base-user-info {
+        margin-right: 20px;
+        text-align: right;
+
+        .base-user-name {
+            font-weight: bold;
+            color: #b2b5b4;
+        }
+
+        .base-user-post {
+            color: #686b6b;
+        }
     }
 
-    .storage-image {
-        background-color: #45C84A;
+    img {
+        width: 40px;
+        border-radius: 50%;
+        border: 2px solid #dddddd;
+        cursor: pointer;
     }
 
-    .storage-video {
-        background-color: #8E2BDD;
+    .ivu-dropdown-item {
+        text-align: left;
     }
 
-    .storage-audio {
-        background-color: #E1027B;
+    .ivu-poptip-popper {
+        width: 460px !important;
     }
 
-    .storage-doc {
-        background-color: #03C0C2;
+    .ivu-poptip-popper {
+        left: -400px !important;
+        padding: 0;
     }
 
-    .storage-res {
-        background-color: #1FFCC5;
+    .ivu-poptip-title {
+        display: none;
     }
 
-    .storage-other {
-        background-color: #E87B22;
+    .ivu-poptip-arrow {
+        left: 90% !important;
     }
 
-    .text-data {
-        color: #F8C006;
-    }
+    .user-center {
+        height: 620px;
+        padding-top: 30px;
+
+        .user-info {
+            .fl-col-center;
+
+            img {
+                width: 70px;
+                border: 2px solid #fff;
+            }
+
+            &-username {
+                margin: 10px 0;
+                font-size: 18px;
+                font-weight: bold;
+                letter-spacing: 0.6px;
+                color: #1cc0f3;
+            }
+
+            &-account {
+                color: #a5a5a5;
+            }
+
+            &-btn {
+                background: #1cc0f3;
+                padding: 5px 60px;
+                color: #fff;
+                margin-top: 20px;
+                border-radius: 5px;
+                cursor: pointer;
+            }
+        }
+
+        .user-nums {
+            display: flex;
+            justify-content: space-around;
+            padding-top: 60px;
+
+            &-item {
+                .fl-col-center;
+
+                span {
+                    &:first-child {
+                        font-size: 34px;
+                        font-weight: bold;
+                        color: #fff;
+                    }
 
-    .text-image {
-        color: #45C84A;
-    }
+                    &:last-child {
+                        font-size: 14px;
+                        color: #1cc0f3;
+                    }
+                }
+            }
+        }
+
+        .user-storage {
+            padding-top: 50px;
+
+            p {
+                text-align: center;
+                color: #a5a5a5;
+                font-size: 12px;
+            }
+
+            &-distribution {
+                margin: 15px 0;
+                height: 10px;
+                width: 100%;
+                border-radius: 50px;
+                background-color: #888888;
+                display: flex;
+
+                span {
+                    display: inline-block;
+                    width: 50px;
+                    height: 10px;
+                }
 
-    .text-video {
-        color: #8E2BDD;
-    }
+                &-green {
+                    border-radius: 5px 0 0 5px;
+                    background-color: #00d523;
+                }
 
-    .text-audio {
-        color: #E1027B;
-    }
+                &-orange {
+                    background-color: #e87b22;
+                }
 
-    .text-doc {
-        color: #03C0C2;
-    }
+                &-red {
+                    background-color: #ff40bc;
+                }
 
-    .text-res {
-        color: #1FFCC5;
+                &-blue {
+                    background-color: #1fccd5;
+                }
+            }
+
+            &-text {
+                margin-top: 10px;
+                font-size: 12px;
+                font-weight: bold;
+                white-space: normal;
+                /*display: flex;
+					flex-wrap: wrap;
+					justify-content: space-around;*/
+            }
+        }
+
+        .btn-logout {
+            .fl-col-center;
+            background: #1cc0f3;
+            padding: 6px 0;
+            color: #fff;
+            width: 60%;
+            margin-left: 20%;
+            margin-top: 40px;
+            border-radius: 5px;
+            font-size: 16px;
+            cursor: pointer;
+        }
     }
 
-    .text-other {
-        color: #E87B22;
+    .fl-col-center {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        justify-content: center;
     }
-</style>
-<style lang="less">
-	.base-user-center {
-		.base-user-info {
-			margin-right: 20px;
-			text-align: right;
-
-			.base-user-name {
-				font-weight: bold;
-				color: #b2b5b4;
-			}
-
-			.base-user-post {
-				color: #686b6b;
-			}
-		}
-
-
-		img {
-			width: 40px;
-			border-radius: 50%;
-			border: 2px solid #dddddd;
-			cursor: pointer;
-		}
-		
-		.ivu-dropdown-item{
-			text-align: left;
-		}
-
-		.ivu-poptip-popper {
-			width: 460px !important;
-		}
-
-		.ivu-poptip-popper {
-			left: -400px !important;
-			padding: 0;
-		}
-
-		.ivu-poptip-title {
-			display: none;
-		}
-
-		.ivu-poptip-arrow {
-			left: 90% !important;
-		}
-
-		.user-center {
-			height: 620px;
-			padding-top: 30px;
-
-			.user-info {
-				.fl-col-center;
-
-				img {
-					width: 70px;
-					border: 2px solid #fff;
-				}
-
-				&-username {
-					margin: 10px 0;
-					font-size: 18px;
-					font-weight: bold;
-					letter-spacing: .6px;
-					color: #1CC0F3;
-				}
-
-				&-account {
-					color: #a5a5a5;
-				}
-
-				&-btn {
-					background: #1CC0F3;
-					padding: 5px 60px;
-					color: #fff;
-					margin-top: 20px;
-					border-radius: 5px;
-					cursor: pointer;
-				}
-
-			}
-
-
-			.user-nums {
-				display: flex;
-				justify-content: space-around;
-				padding-top: 60px;
-
-				&-item {
-					.fl-col-center;
-
-					span {
-
-						&:first-child {
-							font-size: 34px;
-							font-weight: bold;
-							color: #fff
-						}
-
-						&:last-child {
-							font-size: 14px;
-							color: #1CC0F3
-						}
-					}
-
-					;
-				}
-			}
-
-			.user-storage {
-				padding-top: 50px;
-
-				p {
-					text-align: center;
-					color: #a5a5a5;
-					font-size: 12px;
-				}
-
-				&-distribution {
-					margin: 15px 0;
-					height: 10px;
-					width: 100%;
-					border-radius: 50px;
-					background-color: #888888;
-					display: flex;
-
-					span {
-						display: inline-block;
-						width: 50px;
-						height: 10px;
-					}
-
-					&-green {
-						border-radius: 5px 0 0 5px;
-						background-color: #00D523;
-					}
-
-					&-orange {
-						background-color: #e87b22;
-					}
-
-					&-red {
-						background-color: #ff40bc;
-					}
-
-					&-blue {
-						background-color: #1fccd5;
-					}
-				}
-
-				&-text {
-					margin-top: 10px;
-					font-size: 12px;
-					font-weight: bold;
-					white-space:normal;
-					/*display: flex;
-					flex-wrap: wrap;
-					justify-content: space-around;*/
-				}
-			}
-
-			.btn-logout {
-				.fl-col-center;
-				background: #1CC0F3;
-				padding: 6px 0;
-				color: #fff;
-				width: 60%;
-				margin-left: 20%;
-				margin-top: 40px;
-				border-radius: 5px;
-				font-size: 16px;
-				cursor: pointer;
-			}
-		}
-
-		.fl-col-center {
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			justify-content: center;
-		}
-	}
+}
 </style>

+ 5 - 0
TEAMModelOS/ClientApp/src/locale/lang/en-US/settings.js

@@ -56,6 +56,11 @@ export default {
 	openStatus: '状态',
 	enable: '启用',
 	disable: '禁用',
+	webhook: "webhook",
+	domainName: "域名",
+	subNews: "订阅通知",
+	apiType1: "数据写入接口",
+	apiType2: "数据读取接口",
 	apiName: '接口名称',
 	apiAddress: '接口地址',
 	apiMethod: '请求方法',

+ 5 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/settings.js

@@ -56,6 +56,11 @@ export default {
 	openStatus: '状态',
 	enable: '启用',
 	disable: '禁用',
+	webhook: "webhook",
+	domainName: "域名",
+	subNews: "订阅通知",
+	apiType1: "数据写入接口",
+	apiType2: "数据读取接口",
 	apiName: '接口名称',
 	apiAddress: '接口地址',
 	apiMethod: '请求方法',

+ 6 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/settings.js

@@ -56,10 +56,15 @@ export default {
     openStatus: '狀態',
     enable: '啟用',
     disable: '禁用',
+    webhook: "webhook",
+    domainName: "域名",
+	subNews: "訂閱通知",
+	apiType1: "數據寫入接口",
+	apiType2: "數據讀取接口",
     apiName: '接口名稱',
     apiAddress: '接口地址',
     apiMethod: '請求方法',
-    apiParams: '参数示例',
+    apiParams: '參數示例',
     openKeep: '儲存平臺',
     edit: "編輯應用",
     unedit: '取消編輯',

+ 21 - 12
TEAMModelOS/ClientApp/src/view/Home.vue

@@ -4,9 +4,10 @@
         <BaseLayout>
             <!-- 头部右侧个人中心部分 -->
             <div class="header-right-box fl-around" slot="header-content">
-                <Icon custom="iconfont icon-home" :color="routerName == 'homePage' ? '#1CC0F3':'#d0d0d0'" @click="toHome" />
+                <Icon style="display:block" custom="iconfont icon-home" :color="routerName == 'homePage' ? '#1CC0F3':'#d0d0d0'" @click="toHome" />
                 <BaseNotification :msgs="msgs"></BaseNotification>
-                <Icon type="ios-settings" :color="routerName == 'settings' ? '#1CC0F3':'#d0d0d0'" @click="toSettings" />
+                <span class="header-split">|</span>
+                <!-- <Icon type="ios-settings" :color="routerName == 'settings' ? '#1CC0F3':'#d0d0d0'" @click="toSettings" /> -->
                 <!-- 问题答疑页面暂未开发 暂时注释 -->
                 <!-- <Icon type="md-help-circle" :color="routerName == 'feedback' ? '#1CC0F3':'#d0d0d0'" @click="toFeedback"/> -->
                 <BaseUserPoptip @logout="basicMenu('quit')"></BaseUserPoptip>
@@ -28,7 +29,7 @@ export default {
     components: {},
     data() {
         return {
-			msgs:[],
+            msgs: [],
             isShowMock: false,
             isOpenDrawer: false,
             routerName: '',
@@ -58,14 +59,14 @@ export default {
                 schoolCode: this.$GLOBAL.DEFAULT_SCHOOL_CODE
             })
         }
-		
-		this.$api.service.getNotification({
-			"from":"ies5:" + user_profile.defaultschool || user_profile.schools[0].schoolId,
-			"receiver": user.id
-		}).then(res => {
-			console.log('端外通知',res)
-			this.msgs = res.msgs
-		})
+
+        this.$api.service.getNotification({
+            "from": "ies5:" + user_profile.defaultschool || user_profile.schools[0].schoolId,
+            "receiver": user.id
+        }).then(res => {
+            console.log('端外通知', res)
+            this.msgs = res.msgs
+        })
 
 
     },
@@ -128,11 +129,19 @@ export default {
 </script>
 
 <style scoped>
+.header-split {
+    display: block;
+    width: 1px;
+    background: #797979;
+    height: 30px;
+}
 .header-right-box {
-    width: 400px;
+    width: 240px;
     margin: 12px;
     line-height: 1.5;
     float: right;
+    height: 45px;
+    margin-right: 20px;
 }
 
 .header-right-box .ivu-icon {

+ 155 - 153
TEAMModelOS/ClientApp/src/view/settings/Index.vue

@@ -2,8 +2,8 @@
     <div class="settings-container">
         <div class="settings-header">
             <span :class="['settings-header-item',activeTab === '1' ?  'active-item' : '']" @click="onTabChange('1')">{{ $t('settings.setting_title1')}}</span>
-			<span :class="['settings-header-item',activeTab === '0' ?  'active-item' : '']" @click="onTabChange('0')">{{ $t('settings.setting_title2')}}</span>
-			<span :class="['settings-header-item',activeTab === '2' ?  'active-item' : '']" @click="onTabChange('2')">{{ $t('settings.setting_title3')}}</span>
+            <span :class="['settings-header-item',activeTab === '0' ?  'active-item' : '']" @click="onTabChange('0')">{{ $t('settings.setting_title2')}}</span>
+            <span :class="['settings-header-item',activeTab === '2' ?  'active-item' : '']" @click="onTabChange('2')">{{ $t('settings.setting_title3')}}</span>
         </div>
 
         <div class="settings-body">
@@ -38,16 +38,16 @@
                         </RadioGroup>
                     </span>
                 </div>
-				<div class="normal-settings-item">
-				    <span class="item-title">{{ $t('settings.logoSetting')}}</span>
-				    <span class="item-description">{{ $t('settings.logoTips')}}</span>
-				    <span class="item-content">
-				        <RadioGroup v-model="cloudSetting.logoStatus" @on-change="onLogoStatusChange">
-				            <Radio label="open">{{ $t('settings.logoOpen')}}</Radio>
-				            <Radio label="close">{{ $t('settings.logoHide')}}</Radio>
-				        </RadioGroup>
-				    </span>
-				</div>
+                <div class="normal-settings-item">
+                    <span class="item-title">{{ $t('settings.logoSetting')}}</span>
+                    <span class="item-description">{{ $t('settings.logoTips')}}</span>
+                    <span class="item-content">
+                        <RadioGroup v-model="cloudSetting.logoStatus" @on-change="onLogoStatusChange">
+                            <Radio label="open">{{ $t('settings.logoOpen')}}</Radio>
+                            <Radio label="close">{{ $t('settings.logoHide')}}</Radio>
+                        </RadioGroup>
+                    </span>
+                </div>
                 <div class="normal-settings-item">
                     <!-- <Button @click="saveSetting">保存变更</Button> -->
                 </div>
@@ -60,126 +60,134 @@
 </template>
 
 <script>
-    //import "@/css/less-variable.less"
-    import SchoolMgmt from './SchoolMgmt.vue'
-    import OpenMgmt from './OpenMgmt.vue'
-    import OpenMgmt2 from './OpenMgmt2.vue';
-    export default {
-        components: {
-            SchoolMgmt,
-            OpenMgmt,
-            OpenMgmt2
-        },
-        data() {
-            return {
-                activeTab: '1',
-                activeTheme: '0',
+//import "@/css/less-variable.less"
+import SchoolMgmt from './SchoolMgmt.vue'
+import OpenMgmt from './OpenMgmt.vue'
+import OpenMgmt2 from './OpenMgmt2.vue';
+export default {
+    components: {
+        SchoolMgmt,
+        OpenMgmt,
+        OpenMgmt2
+    },
+    data() {
+        return {
+            activeTab: '1',
+            activeTheme: '0',
+            menuStatus: 'open',
+            curLang: 'zh-cn',
+            isHomeworkLang: true,
+            cloudSetting: {
+                curLang: localStorage.getItem('local'),
+                curTheme: 'dark',
+                isSystemLang: true,
                 menuStatus: 'open',
-                curLang: 'zh-cn',
-                isHomeworkLang: true,
-                cloudSetting: {
-                    curLang: localStorage.getItem('local'),
-                    curTheme: 'dark',
-                    isSystemLang: true,
-                    menuStatus: 'open',
-					logoStatus: 'open'
-                }
+                logoStatus: 'open'
             }
+        }
+    },
+    created() {
+        if (localStorage.getItem('cloudSetting')) {
+            this.cloudSetting = JSON.parse(localStorage.getItem('cloudSetting'))
+        }
+    },
+    methods: {
+
+        onSelectLang(val) {
+            localStorage.setItem('cloudSetting', JSON.stringify(this.cloudSetting))
+            this.$store.commit("setLanguage", val);
         },
-        created() {
-            if (localStorage.getItem('cloudSetting')) {
-                this.cloudSetting = JSON.parse(localStorage.getItem('cloudSetting'))
-            }
+
+        onMenuStatusChange(val) {
+            localStorage.setItem('cloudSetting', JSON.stringify(this.cloudSetting))
         },
-        methods: {
-			
-			onSelectLang(val){
-				localStorage.setItem('cloudSetting', JSON.stringify(this.cloudSetting))
-				this.$store.commit("setLanguage", val);
-			},
-			
-			onMenuStatusChange(val){
-				localStorage.setItem('cloudSetting', JSON.stringify(this.cloudSetting))
-			},
-			
-			onLogoStatusChange(val){
-				localStorage.setItem('cloudSetting', JSON.stringify(this.cloudSetting))
-				this.$EventBus.$emit('onLogoStatusChange',val)
-			},
 
-            /* 一般设置与学校管理切换 */
-            onTabChange(index) {
-                this.activeTab = index
-            },
+        onLogoStatusChange(val) {
+            localStorage.setItem('cloudSetting', JSON.stringify(this.cloudSetting))
+            this.$EventBus.$emit('onLogoStatusChange', val)
+        },
 
-            /* 主题切换 */
-            onThemeChange(index) {
-                this.cloudSetting.curTheme = index
-                //this.$less.modifyVars({  // 调用 `less.modifyVars` 方法来改变变量值'
-                //    '@border-color': '#000',
-                //    '@header-bg': 'white',
-                //})
-                //    .then(() => {
-                //        console.log('修改成功');
-                //    });
-                localStorage.setItem('cloudSetting', JSON.stringify(this.cloudSetting))
-                if (index == 'dark') {
-                    let url =  '/theme/dark-theme.css'
-                    var link = document.getElementById('theme') ? document.getElementById('theme') : document.createElement('link');
-                    if (document.getElementById('theme')) {
-                        link.href = url;
-                    } else {
-                        var head = document.getElementsByTagName('head')[0];
-                        link.type = 'text/css';
-                        link.rel = 'stylesheet';
-                        link.id = 'theme';
-                        link.href = url;
-                        head.appendChild(link);
-                    }
+        /* 一般设置与学校管理切换 */
+        onTabChange(index) {
+            this.activeTab = index
+        },
+
+        /* 主题切换 */
+        onThemeChange(index) {
+            this.cloudSetting.curTheme = index
+            //this.$less.modifyVars({  // 调用 `less.modifyVars` 方法来改变变量值'
+            //    '@border-color': '#000',
+            //    '@header-bg': 'white',
+            //})
+            //    .then(() => {
+            //        console.log('修改成功');
+            //    });
+            localStorage.setItem('cloudSetting', JSON.stringify(this.cloudSetting))
+            if (index == 'dark') {
+                let url = '/theme/dark-theme.css'
+                var link = document.getElementById('theme') ? document.getElementById('theme') : document.createElement('link');
+                if (document.getElementById('theme')) {
+                    link.href = url;
                 } else {
-                    let url = '/theme/light-theme.css'
-                    var link = document.getElementById('theme') ? document.getElementById('theme') : document.createElement('link');
-                    if (document.getElementById('theme')) {
-                        link.href = url;
-                    } else {
-                        var head = document.getElementsByTagName('head')[0];
-                        link.type = 'text/css';
-                        link.rel = 'stylesheet';
-                        link.id = 'theme';
-                        link.href = url;
-                        head.appendChild(link);
-                    }
+                    var head = document.getElementsByTagName('head')[0];
+                    link.type = 'text/css';
+                    link.rel = 'stylesheet';
+                    link.id = 'theme';
+                    link.href = url;
+                    head.appendChild(link);
+                }
+            } else {
+                let url = '/theme/light-theme.css'
+                var link = document.getElementById('theme') ? document.getElementById('theme') : document.createElement('link');
+                if (document.getElementById('theme')) {
+                    link.href = url;
+                } else {
+                    var head = document.getElementsByTagName('head')[0];
+                    link.type = 'text/css';
+                    link.rel = 'stylesheet';
+                    link.id = 'theme';
+                    link.href = url;
+                    head.appendChild(link);
                 }
-            },
-			
-			onTips(){
-				this.$Message.warning('换肤功能即将上线')
-			},
-
-            /* 保存设置 */
-            saveSetting() {
-                this.$Modal.confirm({
-                    title: '提示',
-                    content: '设置保存成功,刷新后即可生效,是否前往?',
-                    onOk: () => {
-                        localStorage.setItem('cloudSetting', JSON.stringify(this.cloudSetting))
-                        location.reload()
-                    }
-                })
             }
+        },
+
+        onTips() {
+            this.$Message.warning('换肤功能即将上线')
+        },
+
+        /* 保存设置 */
+        saveSetting() {
+            this.$Modal.confirm({
+                title: '提示',
+                content: '设置保存成功,刷新后即可生效,是否前往?',
+                onOk: () => {
+                    localStorage.setItem('cloudSetting', JSON.stringify(this.cloudSetting))
+                    location.reload()
+                }
+            })
         }
-    }
+    },
+    watch: {
+        $route: {
+            handler: function (val, oldVal) {
+                let routeData = this.$route.query
+                this.activeTab = routeData.tab || this.activeTab
+            },
+            // 深度观察监听
+            deep: true
+        }
+    },
+}
 </script>
 
 <style lang="less" scoped>
-    @import "./Index.less";
+@import "./Index.less";
 </style>
 
 <style lang="less">
-    .settings-container {
-        .ivu-select-selection
-
-    {
+.settings-container {
+    .ivu-select-selection {
         background: transparent;
         border-color: #363738;
         color: #a6a6a6;
@@ -208,24 +216,21 @@
         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;
-        border-radius: 0;
-        background-color: transparent;
-        border-color: #0094FF;
-    }
-
+        &::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;
+        }
     }
 
     .ivu-checkbox-inner {
@@ -246,24 +251,21 @@
         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;
-        border-radius: 0;
-        background-color: transparent;
-        border-color: #0094FF;
-    }
-
-    }
+        &::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;
+        }
     }
+}
 </style>

+ 32 - 1
TEAMModelOS/ClientApp/src/view/settings/OpenMgmt2.css

@@ -68,11 +68,26 @@
                 } */
 }
 .open-mgmt .open-mgmt-right .open-right-info .open-info .open-mgmt-info {
-  padding: 20px;
+  padding: 20px 20px 0 20px;
   /* .ivu-radio-inner{
                         background-color: #F3F3F3;
                     } */
 }
+.open-mgmt .open-mgmt-right .open-right-info .open-info .open-mgmt-info + p {
+  color: #949494;
+  height: 40px;
+  line-height: 40px;
+  padding-left: 20px;
+  border-top: 1px solid #424242;
+  border-bottom: 1px solid #424242;
+}
+.open-mgmt .open-mgmt-right .open-right-info .open-info .open-mgmt-info .ivu-checkbox {
+  margin-right: 0;
+}
+.open-mgmt .open-mgmt-right .open-right-info .open-info .open-mgmt-info .ivu-checkbox-wrapper {
+  margin-left: 0;
+  margin-right: 30px;
+}
 .open-mgmt .open-mgmt-right .open-right-info .open-info .ivu-form-item:not(:first-child) {
   margin-top: 30px;
 }
@@ -97,9 +112,25 @@
 .open-mgmt .open-mgmt-right .open-right-info .open-api {
   width: 70%;
 }
+.open-mgmt .open-mgmt-right .open-right-info .open-api .ivu-tabs-nav {
+  color: #a5a5a5;
+}
+.open-mgmt .open-mgmt-right .open-right-info .open-api .ivu-tabs-nav .ivu-tabs-ink-bar {
+  border-bottom: 2px solid #1cc0f3;
+}
+.open-mgmt .open-mgmt-right .open-right-info .open-api .ivu-tabs-nav .ivu-tabs-tab-active {
+  font-size: 14px;
+  color: #fff;
+}
+.open-mgmt .open-mgmt-right .open-right-info .open-api .ivu-tabs-nav .ivu-tabs-tab:hover {
+  color: #fff;
+}
 .open-mgmt .open-mgmt-right .open-right-info .open-api .open-api-header {
   height: 40px;
 }
+.open-mgmt .open-mgmt-right .open-right-info .open-api .ivu-tabs-tab {
+  height: 40px;
+}
 .open-mgmt .open-mgmt-right .open-right-info .open-api .open-api-table {
   padding: 20px;
   /* .ivu-table-wrapper{

+ 40 - 1
TEAMModelOS/ClientApp/src/view/settings/OpenMgmt2.less

@@ -77,7 +77,25 @@
                 font-size: 16px;
 
                 .open-mgmt-info {
-                    padding: 20px;
+                    padding: 20px 20px 0 20px;
+
+                    & + p{
+                        color: #949494;
+                        height: 40px;
+                        line-height: 40px;
+                        padding-left: 20px;
+                        border-top: 1px solid #424242;
+                        border-bottom: 1px solid #424242;
+                    }
+
+                    .ivu-checkbox{
+                        margin-right: 0;
+                    }
+
+                    .ivu-checkbox-wrapper{
+                        margin-left: 0;
+                        margin-right: 30px;
+                    }
 
                     /* .ivu-radio-inner{
                         background-color: #F3F3F3;
@@ -126,10 +144,31 @@
             .open-api{
                 width: 70%;
 
+                .ivu-tabs-nav{
+                    color: #a5a5a5;
+
+                    .ivu-tabs-ink-bar{
+                        border-bottom: 2px solid #1cc0f3;
+                    }
+
+                    .ivu-tabs-tab-active{
+                        font-size: 14px;
+                        color: #fff;
+                    }
+
+                    .ivu-tabs-tab:hover{
+                        color: #fff;
+                    }
+                }
+
                 .open-api-header{
                     height: 40px;
                 }
 
+                .ivu-tabs-tab{
+                    height: 40px;
+                }
+
                 .open-api-table{
                     padding: 20px;
 

+ 129 - 45
TEAMModelOS/ClientApp/src/view/settings/OpenMgmt2.vue

@@ -48,63 +48,141 @@
             <div class="open-right-info">
                 <div class="open-info">
                     <vuescroll>
-                        <div class="open-mgmt-info dark-iview-form disabled-iview-input">
+                        <div class=" dark-iview-form disabled-iview-input">
                             <!-- <div class="open-mgmt-info"> -->
                                 <Form :model="openMgInfo" label-position="top">
-                                    <FormItem :label="$t('settings.openName')">
-                                        <Input v-model="openMgInfo.name"
-                                            :class="isEdit ? '' : 'open-info-disabled'"
-                                            :readonly="isEdit ? false : true"></Input>
-                                    </FormItem>
-                                    <FormItem :label="$t('settings.token')" class="api-token" v-show="!isEdit">
-                                        <div class="api-icon">
-                                            <!-- 隐藏 -->
-                                            <Icon :type="isTokenShow ? 'md-eye' : 'md-eye-off'" size="18" style="margin-right: 10px" color="rgb(115 115 115)" @click="isTokenShow = !isTokenShow" />
-                                            <!-- 刷新 -->
-                                            <Icon type="md-refresh" size="18" style="margin-right: 10px" color="rgb(115 115 115)" @click="refresh" />
-                                            <!-- 复制 -->
-                                            <Icon type="ios-copy" size="18" color="rgb(115 115 115)" @click="copyToken" />
-                                        </div>
-                                        <Input
-                                            v-model="openMgInfo.token"
-                                            type="textarea"
-                                            :autosize="{ minRows: 10 }"
-                                            class="open-info-disabled"
-                                            readonly
-                                            v-show="isTokenShow"
-                                        ></Input>
-                                    </FormItem>
-                                    <FormItem :label="$t('settings.des')">
-                                        <Input v-model="openMgInfo.descr"
-                                            type="textarea"
-                                            :autosize="{ minRows: 2 }"
-                                            :class="isEdit ? '' : 'open-info-disabled'"
-                                            :readonly="isEdit ? false : true"></Input>
-                                    </FormItem>
-                                    <FormItem :label="$t('settings.openStatus')">
-                                        <RadioGroup v-model="openMgInfo.status">
-                                            <Radio :label="1" :disabled="isEdit ? false : true">{{ $t("settings.enable") }}</Radio>
-                                            <Radio :label="0" :disabled="isEdit ? false : true">{{ $t("settings.disable") }}</Radio>
-                                        </RadioGroup>
-                                    </FormItem>
+                                    <div class="open-mgmt-info">
+                                        <FormItem :label="$t('settings.openName')">
+                                            <Input v-model="openMgInfo.name"
+                                                :class="isEdit ? '' : 'open-info-disabled'"
+                                                :readonly="isEdit ? false : true"></Input>
+                                        </FormItem>
+                                        <FormItem :label="$t('settings.token')" class="api-token" v-show="!isEdit">
+                                            <div class="api-icon">
+                                                <!-- 隐藏 -->
+                                                <Icon :type="isTokenShow ? 'md-eye' : 'md-eye-off'" size="18" style="margin-right: 10px" color="rgb(115 115 115)" @click="isTokenShow = !isTokenShow" />
+                                                <!-- 刷新 -->
+                                                <Icon type="md-refresh" size="18" style="margin-right: 10px" color="rgb(115 115 115)" @click="refresh" />
+                                                <!-- 复制 -->
+                                                <Icon type="ios-copy" size="18" color="rgb(115 115 115)" @click="copyToken" />
+                                            </div>
+                                            <Input
+                                                v-model="openMgInfo.token"
+                                                type="textarea"
+                                                :autosize="{ minRows: 10 }"
+                                                class="open-info-disabled"
+                                                readonly
+                                                v-show="isTokenShow"
+                                            ></Input>
+                                        </FormItem>
+                                        <FormItem :label="$t('settings.des')">
+                                            <Input v-model="openMgInfo.descr"
+                                                type="textarea"
+                                                :autosize="{ minRows: 2 }"
+                                                :class="isEdit ? '' : 'open-info-disabled'"
+                                                :readonly="isEdit ? false : true"></Input>
+                                        </FormItem>
+                                        <FormItem :label="$t('settings.openStatus')">
+                                            <RadioGroup v-model="openMgInfo.status">
+                                                <Radio :label="1" :disabled="isEdit ? false : true">{{ $t("settings.enable") }}</Radio>
+                                                <Radio :label="0" :disabled="isEdit ? false : true">{{ $t("settings.disable") }}</Radio>
+                                            </RadioGroup>
+                                        </FormItem>
+                                    </div>
+                                    <p>{{ $t('settings.webhook') }}</p>
+                                    <div class="open-mgmt-info">
+                                        <FormItem :label="$t('settings.domainName')">
+                                            <Input v-model="openMgInfo.domain"
+                                                :class="isEdit ? '' : 'open-info-disabled'"
+                                                :readonly="isEdit ? false : true"></Input>
+                                        </FormItem>
+                                        <FormItem :label="$t('settings.subNews')">
+                                            <CheckboxGroup v-model="openMgInfo.news">
+                                                <Checkbox label="hhhh" :disabled="isEdit ? false : true">
+                                                    <span>订阅通知1</span>
+                                                </Checkbox>
+                                                <Checkbox label="www" :disabled="isEdit ? false : true">
+                                                    <span>订阅通知2</span>
+                                                </Checkbox>
+                                                <Checkbox label="mmm" :disabled="isEdit ? false : true">
+                                                    <span>订阅通知3</span>
+                                                </Checkbox>
+                                                <Checkbox label="wwwww" :disabled="isEdit ? false : true">
+                                                    <span>订阅通知4</span>
+                                                </Checkbox>
+                                            </CheckboxGroup>
+                                        </FormItem>
+                                    </div>
                                 </Form>
                             </div>
                         <!-- </div> -->
                     </vuescroll>
                 </div>
-                <div class="open-api dark-iview-table dark-iview-page">
+                <div class="open-api dark-iview-table dark-iview-page dark-iview-tabs-card">
                 <!-- <div class="open-api"> -->
-                    <vuescroll>
-                        <div class="open-api-table">
+                    <!-- <vuescroll> -->
+                        <!-- <div class="open-api-table">
+                            <p>数据写入接口</p>
                             <Table ref="selection"
                                    :loading="isLoadList"
                                    :columns="apiListCol"
                                    :data="isEdit ? apiListSelect : apiListNow"
                                    @on-selection-change="selectionChange"
                             ></Table>
-                            <!-- <Page :total="pageTotal" :page-size-opts="pageSizeOpts" size="small" show-sizer show-total /> -->
-                        </div>
-                    </vuescroll>
+                            <Page :total="pageTotal" :page-size-opts="pageSizeOpts" size="small" show-sizer show-total />
+                        </div> -->
+                    <!-- </vuescroll> -->
+                    <!-- <vuescroll> -->
+                        <!-- <div class="open-api-table">
+                            <p>数据读取接口</p>
+                            <Table ref="selection"
+                                   :loading="isLoadList"
+                                   :columns="apiListCol"
+                                   :data="isEdit ? apiListSelect : apiListNow"
+                                   @on-selection-change="selectionChange"
+                            ></Table>
+                            <Page :total="pageTotal" :page-size-opts="pageSizeOpts" size="small" show-sizer show-total />
+                        </div> -->
+                    <!-- </vuescroll> -->
+
+                    <Tabs value="1">
+                        <TabPane :label="$t('settings.apiType1')" name="1">
+                            <div class="open-api-table">
+                                <Table ref="selection"
+                                       :loading="isLoadList"
+                                       :columns="apiListCol"
+                                       :data="isEdit ? apiListSelect : apiListNow"
+                                       @on-selection-change="selectionChange"
+                                >
+                                    <template slot-scope="{ row }" slot="name">
+                                        <span>{{ row.name }}</span>
+                                        <Poptip trigger="hover" :content="row.descr" placement="right">
+                                            <!-- <Icon type="ios-alert" /> -->
+                                            <Icon type="ios-alert-outline" />
+                                        </Poptip>
+                                    </template>
+                                </Table>
+                            </div>
+                        </TabPane>
+                        <TabPane :label="$t('settings.apiType2')" name="2">
+                            <div class="open-api-table">
+                                <Table ref="selection"
+                                       :loading="isLoadList"
+                                       :columns="apiListCol"
+                                       :data="isEdit ? apiListSelect : apiListNow"
+                                       @on-selection-change="selectionChange"
+                                >
+                                    <template slot-scope="{ row }" slot="name">
+                                        <span>{{ row.name }}</span>
+                                        <Poptip trigger="hover" :content="row.descr" placement="right">
+                                            <!-- <Icon type="ios-alert" /> -->
+                                            <Icon type="ios-alert-outline" />
+                                        </Poptip>
+                                    </template>
+                                </Table>
+                            </div>
+                        </TabPane>
+                    </Tabs>
                 </div>
             </div>
         </div>
@@ -122,6 +200,7 @@ export default {
             schoolCode: this.$store.state.userInfo.schoolCode,
             openList: [], //开放平台列表
             openMgInfo: {}, //平台信息
+            apiType: 1,
             apiListCol: [ //api表头
                 /* {
                     type: 'selection',
@@ -131,6 +210,7 @@ export default {
                 {
                     title: this.$t("settings.apiName"),
                     key: "name",
+                    slot: "name"
                 },
                 {
                     title: this.$t("settings.apiAddress"),
@@ -141,7 +221,7 @@ export default {
                     key: "method",
                 },
                 {
-                    title: this.$t("settings.apiParams"),
+                    title: this.$t("settings.des"),
                     key: "descr",
                 },
             ],
@@ -406,7 +486,11 @@ export default {
         selectionChange(selection) {
             this.apiListNow = selection
             console.log(selection);
-        }
+        },
+        selectMenu(name) {
+            console.log(name);
+            this.apiType = name
+        },
     }
 }
 </script>

+ 0 - 0
TEAMModelOS/ClientApp/src/view/user/UserCenter.vue


+ 4 - 28
TEAMModelOS/Controllers/Pager/PaperController.cs

@@ -220,24 +220,15 @@ namespace TEAMModelOS.Controllers
             paper.code = "Paper-" + paper.code;
             if (option.ToString().Equals("insert"))
             {               
-                var response = await client.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync(paper.id, new PartitionKey($"{paper.code}"));
-                if (response.Status == 200)
+                if (paper.scope.Equals("private"))
                 {
-                    return Ok(new { error = ResponseCode.DATA_EXIST, V = "试卷已经存在!" });
+                    paper = await client.GetContainer("TEAMModelOS", "Teacher").UpsertItemAsync(paper, new PartitionKey($"{paper.code}"));
                 }
                 else
                 {
-                    if (paper.scope.Equals("private"))
-                    {
-                        //paper.JsonRemove("periodId");
-                        paper = await client.GetContainer("TEAMModelOS", "Teacher").CreateItemAsync(paper, new PartitionKey($"{paper.code}"));
-                    }
-                    else
-                    {
-                        //paper.JsonRemove("periodId");
-                        paper = await client.GetContainer("TEAMModelOS", "School").CreateItemAsync(paper, new PartitionKey($"{paper.code}"));
-                    }
+                    paper = await client.GetContainer("TEAMModelOS", "School").UpsertItemAsync(paper, new PartitionKey($"{paper.code}"));
                 }
+                
             }
             else
             {
@@ -251,21 +242,6 @@ namespace TEAMModelOS.Controllers
                 }
             }
             return Ok(new { paper });
-            /*ResponseBuilder builder = ResponseBuilder.custom();
-            if (string.IsNullOrEmpty(request.id))
-            {
-                request.id = _snowflakeId.NextId() + ""; 
-                request.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-                await _azureCosmos.SaveOrUpdate(request);
-            }
-            else
-            {
-                await _azureCosmos.SaveOrUpdate(request);
-            }
-            
-            return builder.Data(request).build();*/
-            //return Ok();
         }
-
     }
 }