CrazyIter 5 years ago
parent
commit
1685e8fc83
25 changed files with 405 additions and 402 deletions
  1. 1 28
      TEAMModelOS.GRPC/Startup.cs
  2. 6 18
      TEAMModelOS.GRPC/TEAMModelOS.GRPC.csproj
  3. 0 69
      TEAMModelOS.GRPC/appsettings.Development.json
  4. 0 52
      TEAMModelOS.GRPC/appsettings.json
  5. 0 70
      TEAMModelOS.Grpc/Startup.cs
  6. 0 35
      TEAMModelOS.Grpc/TEAMModelOS.Grpc.csproj
  7. 0 67
      TEAMModelOS.Grpc/appsettings.json
  8. 1 1
      TEAMModelOS/ClientApp/src/common/BaseExamList.vue
  9. 35 10
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BasePie.vue
  10. 0 15
      TEAMModelOS/ClientApp/src/components/student-analysis/total/map.js
  11. 121 0
      TEAMModelOS/ClientApp/src/components/student-analysis/total/map.json
  12. 121 0
      TEAMModelOS/ClientApp/src/store/module/map.json
  13. 10 2
      TEAMModelOS/ClientApp/src/store/module/totalAnalysis.js
  14. 1 1
      TEAMModelOS/ClientApp/src/view/Home.vue
  15. 7 0
      TEAMModelOS/ClientApp/src/view/selflearning/CreateLearnUnit.less
  16. 7 4
      TEAMModelOS/ClientApp/src/view/selflearning/CreateLearnUnit.vue
  17. 7 0
      TEAMModelOS/ClientApp/src/view/selflearning/CreateOrderLearn.less
  18. 8 5
      TEAMModelOS/ClientApp/src/view/selflearning/CreateOrderLearn.vue
  19. 28 1
      TEAMModelOS/ClientApp/src/view/selflearning/ManageOrderLearn.less
  20. 13 4
      TEAMModelOS/ClientApp/src/view/selflearning/ManageOrderLearn.vue
  21. 22 4
      TEAMModelOS/ClientApp/src/view/selflearning/ManageUnit.vue
  22. 2 2
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/EvaluationList/TotalIndex.vue
  23. 4 10
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/KnowledgeAnalysis/KnowledgeAnalysis.vue
  24. 10 3
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/KnowledgeAnalysis/ScoreDetails.vue
  25. 1 1
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/TestAnalysis/QuestionList.css

+ 1 - 28
TEAMModelOS.GRPC/Startup.cs

@@ -1,40 +1,22 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Text.Json;
 using System.Threading.Tasks;
-using Grpc.Extension.Abstract;
-using Grpc.Extension.AspNetCore;
 using Microsoft.AspNetCore.Builder;
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Hosting;
-using TEAMModelOS.Grpc;
-using TEAMModelOS.GRPC.Services.Syllabus;
-using TEAMModelOS.SDK.Module.AzureBlob.Configuration;
-using TEAMModelOS.SDK.Module.AzureCosmosDB.Configuration;
-using TEAMModelOS.SDK.Module.AzureCosmosDBV3;
-using TEAMModelOS.SDK.Module.AzureTable.Implements;
-using TEAMModelOS.SDK.Module.AzureTable.Interfaces;
 
 namespace TEAMModelOS.Grpc
 {
     public class Startup
     {
-        private IConfiguration _conf;
-        public Startup(IConfiguration conf)
-        {
-            _conf = conf;
-        }
         // This method gets called by the runtime. Use this method to add services to the container.
         // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
         public void ConfigureServices(IServiceCollection services)
         {
             services.AddGrpc();
-            //添加Grpc扩展
-            services.AddGrpcExtensions(_conf);
         }
 
         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
@@ -50,21 +32,12 @@ namespace TEAMModelOS.Grpc
             app.UseEndpoints(endpoints =>
             {
                 endpoints.MapGrpcService<GreeterService>();
-                endpoints.MapGrpcService<KnowledgeService>();
+
                 endpoints.MapGet("/", async context =>
                 {
                     await context.Response.WriteAsync("Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
                 });
             });
-            //CodeFirst的Grpc(会自动扫描TStartup所在程序集下的IGrpcService)
-            app.UseGrpcExtensions<KnowledgeService>(options =>
-            {
-                //CodeFirst配制
-                options.GlobalPackage = "TMDOSGRPC";
-                options.ProtoNameSpace = "TMDOSGRPC";
-            })
-            //CodeFirst生成proto
-            .UseProtoGenerate("Protos", false);
         }
     }
 }

+ 6 - 18
TEAMModelOS.GRPC/TEAMModelOS.GRPC.csproj

@@ -1,35 +1,23 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
+<Project Sdk="Microsoft.NET.Sdk.Web">
 
   <PropertyGroup>
     <TargetFramework>netcoreapp3.1</TargetFramework>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
-    <DocumentationFile>TEAMModelOS.GRPC.xml</DocumentationFile>
-  </PropertyGroup>
+
   <ItemGroup>
-    <None Remove="Protos\greet.proto" />
+    <Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
   </ItemGroup>
+
   <ItemGroup>
-    <PackageReference Include="Google.Protobuf" Version="3.11.4" />
     <PackageReference Include="Grpc.AspNetCore" Version="2.27.0" />
-    <PackageReference Include="protobuf-net" Version="2.4.6" />
-    <PackageReference Include="Grpc.Tools" Version="2.27.0">
-      <PrivateAssets>all</PrivateAssets>
-      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
-    </PackageReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
   </ItemGroup>
+
   <ItemGroup>
     <Folder Include="Services\Core\" />
     <Folder Include="Services\Courses\" />
     <Folder Include="Services\Exam\" />
     <Folder Include="Services\Learn\" />
+    <Folder Include="Services\Syllabus\" />
   </ItemGroup>
 
-  <ItemGroup>
-    <ProjectReference Include="..\TEAMModelOS.SDK\TEAMModelOS.SDK.csproj" />
-    <ProjectReference Include="..\TEAMModelOS.Service\TEAMModelOS.Service.csproj" />
-  </ItemGroup>
 </Project>

+ 0 - 69
TEAMModelOS.GRPC/appsettings.Development.json

@@ -1,69 +0,0 @@
-{
-  "Logging": {
-    "LogLevel": {
-      "Default": "Debug",
-      "System": "Information",
-      "Grpc": "Information",
-      "Microsoft": "Information",
-      "Microsoft.Hosting.Lifetime": "Information"
-    }
-  },
-  "urls": "https://*:5001",
-  "GrpcServer": {
-    //用于grpc启动后注册到服务发现的ip地址段
-    "ServiceAddress": "192.168.*.*:",
-    //是否启用服务注册和服务发现,默认是true
-    "EnableDiscovery": false,
-    //服务发现服务器地址
-    "DiscoveryUrl": "http://106.12.23.251:8500",
-    //注册到服务发现的服务名称
-    "DiscoveryServiceName": "TEAMModelOS.GRPC",
-    //服务发现主动TTL的时间(秒)
-    "DiscoveryTTLInterval": 10,
-    //注册到服务发现的服务Tag
-    "DiscoveryServiceTags": "v-1.0.0.1",
-    //默认错误码
-    "DefaultErrorCode": 4300000,
-    //Jaeger配制(OpenTracing)
-    "Jaeger": {
-      //是否启用Jaeger,默认false
-      "Enable": false,
-      "AgentIp": "192.168.8.11",
-      "AgentPort": 5775
-    }
-  },
-  "AllowedHosts": "*",
-  "Kestrel": {
-    "EndpointDefaults": {
-      "Protocols": "Http2"
-    },
-    "Azure": {
-      "Table": {
-        "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodelostest;AccountKey=QB/zYHHCAtZfl9tf4emL1Y9ZXGc6fqZ+nNbCxIHM70HnziC8dMdEAu7+Pa4mbKLlbswV90wWHAF3nMjrKB54Lw==;EndpointSuffix=core.chinacloudapi.cn"
-      },
-      "Blob": {
-        "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn",
-        "Container": "teammodelos"
-      },
-      "CosmosDB": {
-        "ConnectionString": "https://192.168.8.128:8081",
-        "ConnectionKey": "ddwAeGSf8Lsf1kxPXmdqnyzzi3CkJ0KW2BTPZ7Zq1N7qbJic5j7AaQ+WbF86F3rnzuDgGM1yg8O7BUFo93iA8w==",
-        "Database": "TEAMModelOS",
-        "CollectionThroughput": 400,
-        "ScanModel": [ "TEAMModelOS.Service" ]
-      },
-      "Redis": {
-        "ConnectionString": "106.12.23.251:6379,password=habook,ssl=false,abortConnect=False,defaultDatabase=13,writeBuffer=10240,poolsize=50,prefix=habook:"
-      }
-    },
-    "HaBookAuth": {
-      "TeamModelRegistUrl": "https://account.habookaclass.biz/regist?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJsb2dpbiIsImF1ZCI6ImNoZW5nZHVMb2dpbiIsImlzcyI6Imh0dHBzOi8vYXBpLmhhYm9va2FjbGFzcy5iaXoiLCJpYXQiOjE1MzYxMzUwNDcsIm5iZiI6MTUzNjEzNTA0NywiZXhwIjoxNTY3NTU1MjAwLCJpZHAiOiJIYWJvb2sgQ29yZVNlcnZpY2UifQ.F4AnkbJrMRoZvJ6SC-lqZEYIYSoq5x8lvX6_a3YqSgM&callback=",
-      "TeamModelLoginUrl": "https://account.habookaclass.biz/?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJsb2dpbiIsImF1ZCI6ImNoZW5nZHVMb2dpbiIsImlzcyI6Imh0dHBzOi8vYXBpLmhhYm9va2FjbGFzcy5iaXoiLCJpYXQiOjE1MzYxMzUwNDcsIm5iZiI6MTUzNjEzNTA0NywiZXhwIjoxNTY3NTU1MjAwLCJpZHAiOiJIYWJvb2sgQ29yZVNlcnZpY2UifQ.F4AnkbJrMRoZvJ6SC-lqZEYIYSoq5x8lvX6_a3YqSgM&callback=",
-      "AccountUrl": "https://api.habookaclass.biz/account",
-      "ServiceUrl": "https://api.habookaclass.biz/service",
-      "UserInfoKey": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJpZCIsImF1ZCI6ImNoZW5nZHVJZCIsImlzcyI6Imh0dHBzOi8vYXBpLmhhYm9va2FjbGFzcy5iaXoiLCJpYXQiOjE1MzYwNTIzNjcsIm5iZiI6MTUzNjA1MjM2NywiZXhwIjoxNTY3NTU1MjAwLCJpZHAiOiJIYWJvb2sgQ29yZVNlcnZpY2UifQ.RGKDVtwFEp4OBctlHOuF6yqyI21fTz4cinCxjFCxkSQ",
-      "SchoolCodeKey": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJzY2hvb2xDb2RlIiwiYXVkIjoiY2hlbmdkdVNjaG9vbENvZGUiLCJpc3MiOiJodHRwczovL2FwaS5oYWJvb2thY2xhc3MuYml6IiwiaWF0IjoxNTM2MDUyNDI3LCJuYmYiOjE1MzYwNTI0MjcsImV4cCI6MTU2NzU1NTIwMCwiaWRwIjoiSGFib29rIENvcmVTZXJ2aWNlIn0.8m5VH3Nz4N9EdMz8AexTOEuDVitcJZFKy9DfW_UQkSY",
-      "SmsKey": "Basic ZmYwMWM0YTJjODdmZmNkYTUyNjhmMDEwOmE0YTE5YTVjNTU2ZWVhZTNjZmZhNTI0Mg=="
-    }
-  }
-}

+ 0 - 52
TEAMModelOS.GRPC/appsettings.json

@@ -6,62 +6,10 @@
       "Microsoft.Hosting.Lifetime": "Information"
     }
   },
-  "urls": "https://*:5001",
-  "GrpcServer": {
-    //用于grpc启动后注册到服务发现的ip地址段
-    "ServiceAddress": "192.168.*.*:",
-    //是否启用服务注册和服务发现,默认是true
-    "EnableDiscovery": false,
-    //服务发现服务器地址
-    "DiscoveryUrl": "http://106.12.23.251:8500",
-    //注册到服务发现的服务名称
-    "DiscoveryServiceName": "TEAMModelOS.GRPC",
-    //服务发现主动TTL的时间(秒)
-    "DiscoveryTTLInterval": 10,
-    //注册到服务发现的服务Tag
-    "DiscoveryServiceTags": "v-1.0.0.1",
-    //默认错误码
-    "DefaultErrorCode": 4300000,
-    //Jaeger配制(OpenTracing)
-    "Jaeger": {
-      //是否启用Jaeger,默认false
-      "Enable": false,
-      "AgentIp": "192.168.8.11",
-      "AgentPort": 5775
-    }
-  },
   "AllowedHosts": "*",
   "Kestrel": {
     "EndpointDefaults": {
       "Protocols": "Http2"
-    },
-    "Azure": {
-      "Table": {
-        "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodelostest;AccountKey=QB/zYHHCAtZfl9tf4emL1Y9ZXGc6fqZ+nNbCxIHM70HnziC8dMdEAu7+Pa4mbKLlbswV90wWHAF3nMjrKB54Lw==;EndpointSuffix=core.chinacloudapi.cn"
-      },
-      "Blob": {
-        "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn",
-        "Container": "teammodelos"
-      },
-      "CosmosDB": {
-        "ConnectionString": "https://192.168.8.128:8081",
-        "ConnectionKey": "ddwAeGSf8Lsf1kxPXmdqnyzzi3CkJ0KW2BTPZ7Zq1N7qbJic5j7AaQ+WbF86F3rnzuDgGM1yg8O7BUFo93iA8w==",
-        "Database": "TEAMModelOS",
-        "CollectionThroughput": 400,
-        "ScanModel": [ "TEAMModelOS.Service" ]
-      },
-      "Redis": {
-        "ConnectionString": "106.12.23.251:6379,password=habook,ssl=false,abortConnect=False,defaultDatabase=13,writeBuffer=10240,poolsize=50,prefix=habook:"
-      }
-    },
-    "HaBookAuth": {
-      "TeamModelRegistUrl": "https://account.habookaclass.biz/regist?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJsb2dpbiIsImF1ZCI6ImNoZW5nZHVMb2dpbiIsImlzcyI6Imh0dHBzOi8vYXBpLmhhYm9va2FjbGFzcy5iaXoiLCJpYXQiOjE1MzYxMzUwNDcsIm5iZiI6MTUzNjEzNTA0NywiZXhwIjoxNTY3NTU1MjAwLCJpZHAiOiJIYWJvb2sgQ29yZVNlcnZpY2UifQ.F4AnkbJrMRoZvJ6SC-lqZEYIYSoq5x8lvX6_a3YqSgM&callback=",
-      "TeamModelLoginUrl": "https://account.habookaclass.biz/?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJsb2dpbiIsImF1ZCI6ImNoZW5nZHVMb2dpbiIsImlzcyI6Imh0dHBzOi8vYXBpLmhhYm9va2FjbGFzcy5iaXoiLCJpYXQiOjE1MzYxMzUwNDcsIm5iZiI6MTUzNjEzNTA0NywiZXhwIjoxNTY3NTU1MjAwLCJpZHAiOiJIYWJvb2sgQ29yZVNlcnZpY2UifQ.F4AnkbJrMRoZvJ6SC-lqZEYIYSoq5x8lvX6_a3YqSgM&callback=",
-      "AccountUrl": "https://api.habookaclass.biz/account",
-      "ServiceUrl": "https://api.habookaclass.biz/service",
-      "UserInfoKey": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJpZCIsImF1ZCI6ImNoZW5nZHVJZCIsImlzcyI6Imh0dHBzOi8vYXBpLmhhYm9va2FjbGFzcy5iaXoiLCJpYXQiOjE1MzYwNTIzNjcsIm5iZiI6MTUzNjA1MjM2NywiZXhwIjoxNTY3NTU1MjAwLCJpZHAiOiJIYWJvb2sgQ29yZVNlcnZpY2UifQ.RGKDVtwFEp4OBctlHOuF6yqyI21fTz4cinCxjFCxkSQ",
-      "SchoolCodeKey": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJzY2hvb2xDb2RlIiwiYXVkIjoiY2hlbmdkdVNjaG9vbENvZGUiLCJpc3MiOiJodHRwczovL2FwaS5oYWJvb2thY2xhc3MuYml6IiwiaWF0IjoxNTM2MDUyNDI3LCJuYmYiOjE1MzYwNTI0MjcsImV4cCI6MTU2NzU1NTIwMCwiaWRwIjoiSGFib29rIENvcmVTZXJ2aWNlIn0.8m5VH3Nz4N9EdMz8AexTOEuDVitcJZFKy9DfW_UQkSY",
-      "SmsKey": "Basic ZmYwMWM0YTJjODdmZmNkYTUyNjhmMDEwOmE0YTE5YTVjNTU2ZWVhZTNjZmZhNTI0Mg=="
     }
   }
 }

+ 0 - 70
TEAMModelOS.Grpc/Startup.cs

@@ -1,70 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text.Json;
-using System.Threading.Tasks;
-using Grpc.Extension.Abstract;
-using Grpc.Extension.AspNetCore;
-using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Hosting;
-using TEAMModelOS.Grpc;
-using TEAMModelOS.GRPC.Services.Syllabus;
-using TEAMModelOS.SDK.Module.AzureBlob.Configuration;
-using TEAMModelOS.SDK.Module.AzureCosmosDB.Configuration;
-using TEAMModelOS.SDK.Module.AzureCosmosDBV3;
-using TEAMModelOS.SDK.Module.AzureTable.Implements;
-using TEAMModelOS.SDK.Module.AzureTable.Interfaces;
-
-namespace TEAMModelOS.Grpc
-{
-    public class Startup
-    {
-        private IConfiguration _conf;
-        public Startup(IConfiguration conf)
-        {
-            _conf = conf;
-        }
-        // This method gets called by the runtime. Use this method to add services to the container.
-        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
-        public void ConfigureServices(IServiceCollection services)
-        {
-            services.AddGrpc();
-            //添加Grpc扩展
-            services.AddGrpcExtensions(_conf);
-        }
-
-        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
-        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
-        {
-            if (env.IsDevelopment())
-            {
-                app.UseDeveloperExceptionPage();
-            }
-
-            app.UseRouting();
-
-            app.UseEndpoints(endpoints =>
-            {
-                endpoints.MapGrpcService<GreeterService>();
-                endpoints.MapGrpcService<KnowledgeService>();
-                endpoints.MapGet("/", async context =>
-                {
-                    await context.Response.WriteAsync("Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
-                });
-            });
-            //CodeFirst的Grpc(会自动扫描TStartup所在程序集下的IGrpcService)
-            app.UseGrpcExtensions<KnowledgeService>(options =>
-            {
-                //CodeFirst配制
-                options.GlobalPackage = "TMDOSGRPC";
-                options.ProtoNameSpace = "TMDOSGRPC";
-            })
-            //CodeFirst生成proto
-            .UseProtoGenerate("Protos", false);
-        }
-    }
-}

+ 0 - 35
TEAMModelOS.Grpc/TEAMModelOS.Grpc.csproj

@@ -1,35 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
-
-  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
-    <DocumentationFile>TEAMModelOS.GRPC.xml</DocumentationFile>
-  </PropertyGroup>
-  <ItemGroup>
-    <None Remove="Protos\greet.proto" />
-  </ItemGroup>
-  <ItemGroup>
-    <PackageReference Include="Google.Protobuf" Version="3.11.4" />
-    <PackageReference Include="Grpc.AspNetCore" Version="2.27.0" />
-    <PackageReference Include="protobuf-net" Version="2.4.6" />
-    <PackageReference Include="Grpc.Tools" Version="2.27.0">
-      <PrivateAssets>all</PrivateAssets>
-      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
-    </PackageReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
-  </ItemGroup>
-  <ItemGroup>
-    <Folder Include="Services\Core\" />
-    <Folder Include="Services\Courses\" />
-    <Folder Include="Services\Exam\" />
-    <Folder Include="Services\Learn\" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\TEAMModelOS.SDK\TEAMModelOS.SDK.csproj" />
-    <ProjectReference Include="..\TEAMModelOS.Service\TEAMModelOS.Service.csproj" />
-  </ItemGroup>
-</Project>

+ 0 - 67
TEAMModelOS.Grpc/appsettings.json

@@ -1,67 +0,0 @@
-{
-  "Logging": {
-    "LogLevel": {
-      "Default": "Information",
-      "Microsoft": "Warning",
-      "Microsoft.Hosting.Lifetime": "Information"
-    }
-  },
-  "urls": "https://*:5001",
-  "GrpcServer": {
-    //用于grpc启动后注册到服务发现的ip地址段
-    "ServiceAddress": "192.168.*.*:",
-    //是否启用服务注册和服务发现,默认是true
-    "EnableDiscovery": false,
-    //服务发现服务器地址
-    "DiscoveryUrl": "http://106.12.23.251:8500",
-    //注册到服务发现的服务名称
-    "DiscoveryServiceName": "TEAMModelOS.GRPC",
-    //服务发现主动TTL的时间(秒)
-    "DiscoveryTTLInterval": 10,
-    //注册到服务发现的服务Tag
-    "DiscoveryServiceTags": "v-1.0.0.1",
-    //默认错误码
-    "DefaultErrorCode": 4300000,
-    //Jaeger配制(OpenTracing)
-    "Jaeger": {
-      //是否启用Jaeger,默认false
-      "Enable": false,
-      "AgentIp": "192.168.8.11",
-      "AgentPort": 5775
-    }
-  },
-  "AllowedHosts": "*",
-  "Kestrel": {
-    "EndpointDefaults": {
-      "Protocols": "Http2"
-    },
-    "Azure": {
-      "Table": {
-        "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodelostest;AccountKey=QB/zYHHCAtZfl9tf4emL1Y9ZXGc6fqZ+nNbCxIHM70HnziC8dMdEAu7+Pa4mbKLlbswV90wWHAF3nMjrKB54Lw==;EndpointSuffix=core.chinacloudapi.cn"
-      },
-      "Blob": {
-        "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn",
-        "Container": "teammodelos"
-      },
-      "CosmosDB": {
-        "ConnectionString": "https://192.168.8.128:8081",
-        "ConnectionKey": "ddwAeGSf8Lsf1kxPXmdqnyzzi3CkJ0KW2BTPZ7Zq1N7qbJic5j7AaQ+WbF86F3rnzuDgGM1yg8O7BUFo93iA8w==",
-        "Database": "TEAMModelOS",
-        "CollectionThroughput": 400,
-        "ScanModel": [ "TEAMModelOS.Service" ]
-      },
-      "Redis": {
-        "ConnectionString": "106.12.23.251:6379,password=habook,ssl=false,abortConnect=False,defaultDatabase=13,writeBuffer=10240,poolsize=50,prefix=habook:"
-      }
-    },
-    "HaBookAuth": {
-      "TeamModelRegistUrl": "https://account.habookaclass.biz/regist?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJsb2dpbiIsImF1ZCI6ImNoZW5nZHVMb2dpbiIsImlzcyI6Imh0dHBzOi8vYXBpLmhhYm9va2FjbGFzcy5iaXoiLCJpYXQiOjE1MzYxMzUwNDcsIm5iZiI6MTUzNjEzNTA0NywiZXhwIjoxNTY3NTU1MjAwLCJpZHAiOiJIYWJvb2sgQ29yZVNlcnZpY2UifQ.F4AnkbJrMRoZvJ6SC-lqZEYIYSoq5x8lvX6_a3YqSgM&callback=",
-      "TeamModelLoginUrl": "https://account.habookaclass.biz/?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJsb2dpbiIsImF1ZCI6ImNoZW5nZHVMb2dpbiIsImlzcyI6Imh0dHBzOi8vYXBpLmhhYm9va2FjbGFzcy5iaXoiLCJpYXQiOjE1MzYxMzUwNDcsIm5iZiI6MTUzNjEzNTA0NywiZXhwIjoxNTY3NTU1MjAwLCJpZHAiOiJIYWJvb2sgQ29yZVNlcnZpY2UifQ.F4AnkbJrMRoZvJ6SC-lqZEYIYSoq5x8lvX6_a3YqSgM&callback=",
-      "AccountUrl": "https://api.habookaclass.biz/account",
-      "ServiceUrl": "https://api.habookaclass.biz/service",
-      "UserInfoKey": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJpZCIsImF1ZCI6ImNoZW5nZHVJZCIsImlzcyI6Imh0dHBzOi8vYXBpLmhhYm9va2FjbGFzcy5iaXoiLCJpYXQiOjE1MzYwNTIzNjcsIm5iZiI6MTUzNjA1MjM2NywiZXhwIjoxNTY3NTU1MjAwLCJpZHAiOiJIYWJvb2sgQ29yZVNlcnZpY2UifQ.RGKDVtwFEp4OBctlHOuF6yqyI21fTz4cinCxjFCxkSQ",
-      "SchoolCodeKey": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJzY2hvb2xDb2RlIiwiYXVkIjoiY2hlbmdkdVNjaG9vbENvZGUiLCJpc3MiOiJodHRwczovL2FwaS5oYWJvb2thY2xhc3MuYml6IiwiaWF0IjoxNTM2MDUyNDI3LCJuYmYiOjE1MzYwNTI0MjcsImV4cCI6MTU2NzU1NTIwMCwiaWRwIjoiSGFib29rIENvcmVTZXJ2aWNlIn0.8m5VH3Nz4N9EdMz8AexTOEuDVitcJZFKy9DfW_UQkSY",
-      "SmsKey": "Basic ZmYwMWM0YTJjODdmZmNkYTUyNjhmMDEwOmE0YTE5YTVjNTU2ZWVhZTNjZmZhNTI0Mg=="
-    }
-  }
-}

+ 1 - 1
TEAMModelOS/ClientApp/src/common/BaseExamList.vue

@@ -54,7 +54,7 @@
         methods: {
             // 获取评测列表
             getExamList() {
-                this.$api.totalAnalysis.getExamList({ Code: 'qcs' }).then(res => { // api请求
+                this.$api.totalAnalysis.getExamList({ scopeCode: 'qcs' }).then(res => { // api请求
                     this.examList = res.result.data
                 }).catch(err => {
                     console.log(err)

+ 35 - 10
TEAMModelOS/ClientApp/src/components/student-analysis/total/BasePie.vue

@@ -3,6 +3,7 @@
 </template>
 
 <script>
+    import mapJson from './map.json'
     export default {
         name: 'BasePie',
         props: ['pieId'],
@@ -13,6 +14,25 @@
         },
         methods: {
 
+            /**
+             * 根据知识点id集合换取知识点对象集合
+             * @param ids
+             */
+            getPointsByIds(ids) {
+                return new Promise((r, j) => {
+                    this.$api.knowledge.FindKnowledgebyId(ids).then(res => {
+                        if (res.result.data.length) {
+                            r(res.result.data)
+                        } else {
+                            r([])
+                        } 
+                    }).catch(err => {
+                        j(err)
+                    })
+                })
+
+            },
+
             drawLine(data) {
                 let that = this
                 // 基于准备好的dom,初始化echarts实例
@@ -48,16 +68,20 @@
         mounted() {
             if (this.getPieData) {
                 console.log(this.getPieData)
-                    let pointList = this.getPieData.pointList
-                    let valList = this.getPieData.per
-                    let arr = []
-                    pointList.forEach((item, index) => {
-                        let o = {}
-                        o.name = item
-                        o.value = valList[index].replace('%', '')
-                        arr.push(o)
-                    })
-                    this.drawLine(arr)
+                    if (this.getPieData.pointList.length) {
+                            let pointList = this.getPieData.pointList
+                            let valList = this.getPieData.per
+                            let arr = []
+                            pointList.forEach((item, index) => {
+                                let o = {}
+                                o.name = item
+                                o.value = valList[index].replace('%', '')
+                                arr.push(o)
+                            })
+                            this.drawLine(arr)
+                    }
+                    
+                    
             }
         },
         computed: {
@@ -77,6 +101,7 @@
                     let arr = []
                     pointList.forEach((item, index) => {
                         let o = {}
+                        // 测试使用 后面需要接口换取名称
                         o.name = item
                         o.value = valList[index]
                         arr.push(o)

+ 0 - 15
TEAMModelOS/ClientApp/src/components/student-analysis/total/map.js

@@ -1,15 +0,0 @@
-"5a569451-d7b6-4bc5-85dc-4c97ba593090", "97752929-bee6-458e-b5ae-af16ee73a1e9",
-    "b32dcb15-9f13-4e8f-9f65-80e55e3b257d", "5160a86b-2d44-466f-bd82-ed08148f6607",
-    "9e6a3b59-bdeb-4b21-90ec-903ef9847864", "6d1f223d-a84e-4fab-b015-fe1c4298834b",
-    "72571322-43d9-4777-b3b1-a6a5a4bf4e10", "bf4707a6-f541-46b9-85b2-82aa6077ba27",
-    "9dd91708-be01-4947-850c-77b88e7cf2ad", "24d9f39f-906a-4ca6-bc4f-8f9307d51d5a",
-    "4acee7e2-434c-4257-9331-8c42fba14a3b", "170125f4-4cfc-40eb-aae4-7a82840a6297",
-    "6b14df14-17ae-4f47-a1e4-16738268feba", "a9c1ada9-232f-4993-bf63-3c279e5ecaac",
-    "4ff7b031-a45c-4b02-921e-933be73bb38a", "a96ebded-aeb0-42c8-ab90-8b1ab8a4a489",
-    "e3564799-3b9a-4b5d-a904-f09565f98890", "64b4326f-1f76-4c7c-8fb7-5940894e2205",
-    "4e43d507-8af1-4b21-b09e-7fe8533104e8", "25032d80-b88c-42c1-8ffd-1a30815859aa",
-    "b1baff75-fdf9-4020-acfb-af6497017f4b", "c6e8bdaf-9738-48f6-bd7f-5bc6d6444684",
-    "d75000f7-168a-4521-b056-780ef38114cc", "f6c768e8-12ea-445c-8df1-750736294a80",
-    "5ac2805d-b31d-44a3-9058-1239d5557270", "49512c48-f38a-452e-8bb9-170728cb271e",
-    "57088641-14d1-498d-ae8e-61627e0d8e4a", "2222f52f-cc3f-4ac3-96b8-638078455f64",
-    "1687d096-4d58-4828-97de-d31e23784b36", "45ae3d97-cd76-4c53-a821-e220367eb2c2" 

+ 121 - 0
TEAMModelOS/ClientApp/src/components/student-analysis/total/map.json

@@ -0,0 +1,121 @@
+[{
+	"code": "5a569451-d7b6-4bc5-85dc-4c97ba593090",
+	"name": "集合与常用逻辑用语"
+},
+{
+	"code": "97752929-bee6-458e-b5ae-af16ee73a1e9",
+	"name": "自然数的产生"
+},
+{
+	"code": "b32dcb15-9f13-4e8f-9f65-80e55e3b257d",
+	"name": "正数、负数和0"
+},
+{
+	"code": "5160a86b-2d44-466f-bd82-ed08148f6607",
+	"name": "集合的含义与表示"
+},
+{
+	"code": "9e6a3b59-bdeb-4b21-90ec-903ef9847864",
+	"name": "整数的意义"
+},
+{
+	"code": "6d1f223d-a84e-4fab-b015-fe1c4298834b",
+	"name": "有理数认识"
+},
+{
+	"code": "72571322-43d9-4777-b3b1-a6a5a4bf4e10",
+	"name": "集合间的基本关系"
+},
+{
+	"code": "bf4707a6-f541-46b9-85b2-82aa6077ba27",
+	"name": "数轴"
+},
+{
+	"code": "9dd91708-be01-4947-850c-77b88e7cf2ad",
+	"name": "利用生活中的图形认识1~10个数"
+},
+{
+	"code": "24d9f39f-906a-4ca6-bc4f-8f9307d51d5a",
+	"name": "集合的基本运算"
+},
+{
+	"code": "4acee7e2-434c-4257-9331-8c42fba14a3b",
+	"name": "新定义题"
+},
+{
+	"code": "170125f4-4cfc-40eb-aae4-7a82840a6297",
+	"name": "有理数的除法"
+},
+{
+	"code": "6b14df14-17ae-4f47-a1e4-16738268feba",
+	"name": "在数轴上表示数的大小"
+},
+{
+	"code": "a9c1ada9-232f-4993-bf63-3c279e5ecaac",
+	"name": "相反数"
+},
+{
+	"code": "4ff7b031-a45c-4b02-921e-933be73bb38a",
+	"name": "集合的概念"
+},
+{
+	"code": "a96ebded-aeb0-42c8-ab90-8b1ab8a4a489",
+	"name": "有理数的乘法"
+},
+{
+	"code": "e3564799-3b9a-4b5d-a904-f09565f98890",
+	"name": "集合的表示方法"
+},
+{
+	"code": "64b4326f-1f76-4c7c-8fb7-5940894e2205",
+	"name": "绝对值"
+},
+{
+	"code": "4e43d507-8af1-4b21-b09e-7fe8533104e8",
+	"name": "命题及其关系"
+},
+{
+	"code": "25032d80-b88c-42c1-8ffd-1a30815859aa",
+	"name": "用计数器认识数"
+},
+{
+	"code": "b1baff75-fdf9-4020-acfb-af6497017f4b",
+	"name": "交集与并集"
+},
+{
+	"code": "c6e8bdaf-9738-48f6-bd7f-5bc6d6444684",
+	"name": "有理数的大小比较"
+},
+{
+	"code": "d75000f7-168a-4521-b056-780ef38114cc",
+	"name": "认识算盘"
+},
+{
+	"code": "f6c768e8-12ea-445c-8df1-750736294a80",
+	"name": "有理数的加法"
+},
+{
+	"code": "5ac2805d-b31d-44a3-9058-1239d5557270",
+	"name": "全集与补集"
+},
+{
+	"code": "49512c48-f38a-452e-8bb9-170728cb271e",
+	"name": "数数的方法"
+},
+{
+	"code": "57088641-14d1-498d-ae8e-61627e0d8e4a",
+	"name": "有理数的减法"
+},
+{
+	"code": "2222f52f-cc3f-4ac3-96b8-638078455f64",
+	"name": "交、并、补集的混合运算"
+},
+{
+	"code": "1687d096-4d58-4828-97de-d31e23784b36",
+	"name": "运用对应法解决数和图形相对应的问题"
+},
+{
+	"code": "45ae3d97-cd76-4c53-a821-e220367eb2c2",
+	"name": "有理数的加减混合运算"
+}
+]

+ 121 - 0
TEAMModelOS/ClientApp/src/store/module/map.json

@@ -0,0 +1,121 @@
+[{
+	"code": "5a569451-d7b6-4bc5-85dc-4c97ba593090",
+	"name": "集合与常用逻辑用语"
+},
+{
+	"code": "97752929-bee6-458e-b5ae-af16ee73a1e9",
+	"name": "自然数的产生"
+},
+{
+	"code": "b32dcb15-9f13-4e8f-9f65-80e55e3b257d",
+	"name": "正数、负数和0"
+},
+{
+	"code": "5160a86b-2d44-466f-bd82-ed08148f6607",
+	"name": "集合的含义与表示"
+},
+{
+	"code": "9e6a3b59-bdeb-4b21-90ec-903ef9847864",
+	"name": "整数的意义"
+},
+{
+	"code": "6d1f223d-a84e-4fab-b015-fe1c4298834b",
+	"name": "有理数认识"
+},
+{
+	"code": "72571322-43d9-4777-b3b1-a6a5a4bf4e10",
+	"name": "集合间的基本关系"
+},
+{
+	"code": "bf4707a6-f541-46b9-85b2-82aa6077ba27",
+	"name": "数轴"
+},
+{
+	"code": "9dd91708-be01-4947-850c-77b88e7cf2ad",
+	"name": "利用生活中的图形认识1~10个数"
+},
+{
+	"code": "24d9f39f-906a-4ca6-bc4f-8f9307d51d5a",
+	"name": "集合的基本运算"
+},
+{
+	"code": "4acee7e2-434c-4257-9331-8c42fba14a3b",
+	"name": "新定义题"
+},
+{
+	"code": "170125f4-4cfc-40eb-aae4-7a82840a6297",
+	"name": "有理数的除法"
+},
+{
+	"code": "6b14df14-17ae-4f47-a1e4-16738268feba",
+	"name": "在数轴上表示数的大小"
+},
+{
+	"code": "a9c1ada9-232f-4993-bf63-3c279e5ecaac",
+	"name": "相反数"
+},
+{
+	"code": "4ff7b031-a45c-4b02-921e-933be73bb38a",
+	"name": "集合的概念"
+},
+{
+	"code": "a96ebded-aeb0-42c8-ab90-8b1ab8a4a489",
+	"name": "有理数的乘法"
+},
+{
+	"code": "e3564799-3b9a-4b5d-a904-f09565f98890",
+	"name": "集合的表示方法"
+},
+{
+	"code": "64b4326f-1f76-4c7c-8fb7-5940894e2205",
+	"name": "绝对值"
+},
+{
+	"code": "4e43d507-8af1-4b21-b09e-7fe8533104e8",
+	"name": "命题及其关系"
+},
+{
+	"code": "25032d80-b88c-42c1-8ffd-1a30815859aa",
+	"name": "用计数器认识数"
+},
+{
+	"code": "b1baff75-fdf9-4020-acfb-af6497017f4b",
+	"name": "交集与并集"
+},
+{
+	"code": "c6e8bdaf-9738-48f6-bd7f-5bc6d6444684",
+	"name": "有理数的大小比较"
+},
+{
+	"code": "d75000f7-168a-4521-b056-780ef38114cc",
+	"name": "认识算盘"
+},
+{
+	"code": "f6c768e8-12ea-445c-8df1-750736294a80",
+	"name": "有理数的加法"
+},
+{
+	"code": "5ac2805d-b31d-44a3-9058-1239d5557270",
+	"name": "全集与补集"
+},
+{
+	"code": "49512c48-f38a-452e-8bb9-170728cb271e",
+	"name": "数数的方法"
+},
+{
+	"code": "57088641-14d1-498d-ae8e-61627e0d8e4a",
+	"name": "有理数的减法"
+},
+{
+	"code": "2222f52f-cc3f-4ac3-96b8-638078455f64",
+	"name": "交、并、补集的混合运算"
+},
+{
+	"code": "1687d096-4d58-4828-97de-d31e23784b36",
+	"name": "运用对应法解决数和图形相对应的问题"
+},
+{
+	"code": "45ae3d97-cd76-4c53-a821-e220367eb2c2",
+	"name": "有理数的加减混合运算"
+}
+]

+ 10 - 2
TEAMModelOS/ClientApp/src/store/module/totalAnalysis.js

@@ -103,6 +103,12 @@ export default {
 
         // 更新知识点掌握数据
         getKnowledgeData(state, data) {
+            let mapJson = require('./map.json')
+            let newPointList = []
+            data.pointList.forEach(item => {
+                newPointList.push(mapJson.filter(i => i.code === item)[0].name)
+            })
+            data.pointList = newPointList
             state.knowledgeData = data
         },
 
@@ -193,7 +199,7 @@ export default {
         // 异步获取 落点分析模块真实数据
         getScatterData(context) {
             let params = {
-                subjectCode: context.state.currentSubject,
+                subjectCode: 'Subject_Math',
                 examCode: '1371cb0c-6c72-4c1c-868a-aac00e74a0fb'
             }
             return new Promise((r, j) => {
@@ -217,7 +223,9 @@ export default {
         getExerciseData(context) {
             let params = {
                 subjectCode: 'Subject_Math',
-                examCode: '1371cb0c-6c72-4c1c-868a-aac00e74a0fb'
+                examCode: '1371cb0c-6c72-4c1c-868a-aac00e74a0fb',
+                scopeCode: '1371cb0c-6c72-4c1c-868a-aac00e74a0fb',
+                schoolCode:'qcs'
             }
             return new Promise((r, j) => {
                 if (context.state.exerciseData) {

+ 1 - 1
TEAMModelOS/ClientApp/src/view/Home.vue

@@ -67,7 +67,7 @@
                         </template>
                         <MenuItem name="3-1" to="/home/syllabus">课纲管理<span style="color:aqua;margin-left:5px;">√</span></MenuItem>
                         <MenuItem name="3-3" to="/home/teachcontent">内容管理<span style="color:aqua;margin-left:5px;">√</span></MenuItem>
-                        <MenuItem name="3-4" to="/home/evaluation/testPaperList">题目/库管理<span style="color:aqua;margin-left:5px;">待完善</span></MenuItem>
+                        <MenuItem name="3-4" to="/home/evaluation/testPaperList">题目/库管理<span style="color:aqua;margin-left:5px;"></span></MenuItem>
                         <MenuItem name="3-5" to="/home/knowledge">知识点管理<span style="color:aqua;margin-left:5px;">√</span></MenuItem>
                     </Submenu>
                     <Submenu name="learnActivity">

+ 7 - 0
TEAMModelOS/ClientApp/src/view/selflearning/CreateLearnUnit.less

@@ -181,4 +181,11 @@
     display: inline-block;
     vertical-align: sub;
     margin-right: 5px;
+}
+.btn-save {
+    color: rgb(107, 223, 195);
+    float: right;
+    cursor: pointer;
+    margin-top: 6px;
+    margin-right: 40px;
 }

+ 7 - 4
TEAMModelOS/ClientApp/src/view/selflearning/CreateLearnUnit.vue

@@ -4,10 +4,11 @@
             <span class="name-label">名称:</span>
             <Input v-model="learnUnit.name" placeholder="请输入名称..." :class="checkName ? '':'my-error-style'" style="width: 300px" @on-blur="checkUnitName" />
             <span style="color:#ed4014;margin-left:15px;" v-show="!checkName">名称不能为空</span>
-            <span class="header-btn-save" @click="saveLearnUnitData()">
+            <!--<span class="header-btn-save" @click="saveLearnUnitData()">
                 <Icon type="ios-albums-outline" color="#1CD0A1" style="margin-right:5px;" />
                 保存数据
-            </span>
+            </span>-->
+            <Button class="btn-save" type="text" :loading="isLoading" ghost icon="ios-albums-outline" @click="saveLearnUnitData">保存数据</Button>
         </div>
         <div class="learn-unit-main">
             <Split v-model="split1">
@@ -82,6 +83,7 @@
     export default {
         data() {
             return {
+                isLoading: false,
                 sasString: '',
                 previewFile: {},
                 previewStatus: false,
@@ -138,7 +140,7 @@
                     this.checkName = false
                 } else {
                     this.checkName = true
-                    console.log(this.learnUnit)
+                    this.isLoading = true
                     let requestData = {
                         id: this.learnUnit.id,
                         name: this.learnUnit.name,
@@ -154,9 +156,10 @@
                             } else {
                                 this.$Message.error('API ERROR!')
                             }
+                            this.isLoading = false
                         },
                         (err) => {
-
+                            this.isLoading = false
                         }
                     )
 

+ 7 - 0
TEAMModelOS/ClientApp/src/view/selflearning/CreateOrderLearn.less

@@ -250,4 +250,11 @@
 }
 .content-file-item{
     margin-bottom:4px;
+}
+.btn-save {
+    color: rgb(107, 223, 195);
+    float: right;
+    cursor: pointer;
+    margin-top: 6px;
+    margin-right: 40px;
 }

+ 8 - 5
TEAMModelOS/ClientApp/src/view/selflearning/CreateOrderLearn.vue

@@ -4,10 +4,11 @@
             <span class="order-learn-title">
                 创建编序式学习
             </span>
-            <span class="header-btn-save" @click="saveData()">
+            <!--<span class="header-btn-save" @click="saveData()">
                 <Icon type="ios-albums-outline" color="#1CD0A1" style="margin-right:5px;" />
                 保存数据
-            </span>
+            </span>-->
+            <Button class="btn-save" type="text" :loading="isLoading" ghost icon="ios-albums-outline" @click="saveData">保存评测</Button>
         </div>
         <div class="order-learn-main">
             <!-- 基础信息表单 -->
@@ -186,7 +187,7 @@
         },
         data() {
             return {
-                
+                isLoading: false,
                 goToManageStatus: false,
                 demoLoginInfo: {
                     user: 'admin',
@@ -331,21 +332,23 @@
             saveData() {
                 let check = this.checkData()
                 if (check) {
+                    this.isLoading = true
                     this.orderLearnInfo.creator = this.demoLoginInfo.TEAMModelId
                     this.orderLearnInfo.scopeCode = this.demoLoginInfo.TEAMModelId
                     this.orderLearnInfo.type = '1'//教学情境
+                    this.orderLearnInfo.target = ['三年级五班']//学习对象
                     this.$api.learnActivity.SaveOrderLearn(this.orderLearnInfo).then(
                         res => {
                             if (res.error == null) {
                                 this.orderLearnInfo.id = res.result.data.id
-                                //this.$Message.success('数据保存成功!')
                                 this.goToManageStatus = true
                             } else {
                                 this.$Message.error('API ERROR!')
                             }
+                            this.isLoading = false
                         },
                         err => {
-
+                            this.isLoading = false
                         }
                     )
                 } else {

+ 28 - 1
TEAMModelOS/ClientApp/src/view/selflearning/ManageOrderLearn.less

@@ -128,9 +128,36 @@
                 background: #333333;
             }
 
-            .order-learn-file-item {
+            .order-learn-file-wrap {
                 color: white;
                 margin-top: 5px;
+
+                .order-learn-file-item {
+                    margin-bottom: 2px;
+                    font-size:16px;
+                    .file-item-action {
+                        display: none;
+                        float: right;
+                        padding-right: 20px;
+                    }
+
+                    .action-icon{
+                        margin-right:10px;
+                        font-size:16px;
+                        cursor:pointer;
+                        &:hover{
+                            color:aqua;
+                        }
+                    } 
+                    &:hover {
+                        background: #404040;
+                        padding-left: 5px;
+                        border-radius: 5px;
+                    }
+                    &:hover .file-item-action{
+                        display:inline-block;
+                    }
+                }
             }
         }
 

+ 13 - 4
TEAMModelOS/ClientApp/src/view/selflearning/ManageOrderLearn.vue

@@ -119,11 +119,16 @@
                                             </p>
                                             <div style="margin-bottom:30px;">
                                                 <NoData v-if="orderLearnList.length == 0"></NoData>
-                                                <div v-if="orderLearnList.length > 0" class="order-learn-file-item">
+                                                <div v-if="orderLearnList.length > 0" class="order-learn-file-wrap">
                                                     <NoData v-if="orderLearnList[currentLearnIndex].steps[currentStepIndex].resource.length == 0"></NoData>
-                                                    <p v-for="(item,index) in orderLearnList[currentLearnIndex].steps[currentStepIndex].resource">
-                                                        {{item.fileName}}
-                                                    </p>
+                                                    <div class="order-learn-file-item" v-for="(item,index) in orderLearnList[currentLearnIndex].steps[currentStepIndex].resource">
+                                                        <span>{{item.fileName}}</span>
+                                                        <span class="file-item-action">
+                                                            <Icon type="md-download" class="action-icon" title="下载"  @click="downloadFile(item)"/>
+                                                            <Icon v-if="item.type == 'video' || item.type == 'picture' || item.extension == 'pdf'" type="md-eye" class="action-icon" title="预览" @click="clickToPreview(item)" />
+                                                            <!--<Icon type="md-close" class="action-icon" title="删除" />-->
+                                                        </span>
+                                                    </div>
                                                 </div>
 
                                             </div>
@@ -169,6 +174,7 @@
         },
         data() {
             return {
+                sasString:'',
                 editStatus: false,
                 split1: 0.2,
                 split2: 0.2,
@@ -185,6 +191,9 @@
             }
         },
         methods: {
+            downloadFile(item) {
+                window.location.href = item.blobUrl + this.sasString
+            },
             confirmEdit() {
                 let orderLearnInfo = this.orderLearnList[this.currentLearnIndex]
                 

+ 22 - 4
TEAMModelOS/ClientApp/src/view/selflearning/ManageUnit.vue

@@ -12,9 +12,9 @@
         <div class="unit-main-wrap">
             <div class="unit-main-header">
                 <span class="unit-main-label">自学资源</span>
-                <span v-if="type == 1" class="unit-main-action" @click="editUnit"><Icon type="ios-create-outline" size="20"/>编辑内容</span>
+                <span v-if="type == 1" class="unit-main-action" @click="editUnit"><Icon type="ios-create-outline" size="20" />编辑内容</span>
                 <span v-if="type == 1" class="unit-main-action"><Icon type="ios-send" size="20" />发布内容</span>
-                <span v-if="type == 0" class="unit-main-action" @click="chooseUnit"><Icon type="md-checkmark" size="20" style="margin-right:5px;"/>选择</span>
+                <span v-if="type == 0" class="unit-main-action" @click="chooseUnit"><Icon type="md-checkmark" size="20" style="margin-right:5px;" />选择</span>
             </div>
             <div class="unit-content-wrap" v-if="unitList.length > 0">
                 <vuescroll>
@@ -36,8 +36,8 @@
                                 <span>{{item.fileName}}</span>
                             </div>
                             <span class="content-file-item-action">
-                                <Icon type="md-download" class="action-icon" title="下载" />
-                                <Icon type="md-eye" class="action-icon" title="预览" />
+                                <Icon type="md-download" class="action-icon" title="下载" @click="downloadFile(item)" />
+                                <Icon v-if="item.type == 'video' || item.type == 'picture' || item.extension == 'pdf'" type="md-eye" class="action-icon" title="预览" @click="clickToPreview(item)" />
                                 <Icon type="md-close" class="action-icon" title="删除" />
                             </span>
                         </div>
@@ -59,6 +59,14 @@
                @on-ok="confirmEdit">
             <p>确认跳转到最小单元编辑页面?</p>
         </Modal>
+        <Modal v-model="previewStatus" :title="previewFile.fileName" width="800px" class="dark-iview-modal">
+            <video v-if="previewFile.type == 'video'" id="previewVideo" :src="previewFile.blobUrl+sasString" width="780" controls="controls">
+                {{$t('teachContent.tips8')}}
+            </video>
+            <img v-if="previewFile.type == 'picture'" :src="previewFile.blobUrl+sasString" width="780" style="border-radius:5px;" />
+            <embed v-if="previewFile.type == 'document'" :src="previewFile.blobUrl+sasString" width="780" height="600" />
+            <div slot="footer"></div>
+        </Modal>
     </div>
 </template>
 <script>
@@ -78,6 +86,9 @@
         },
         data() {
             return {
+                previewStatus: false,
+                previewFile: {},
+                sasString:'',
                 editUnitStatus: false,
                 isLoading: false,
                 unitList: [],
@@ -85,6 +96,13 @@
             }
         },
         methods: {
+            clickToPreview(file) {
+                this.previewStatus = true
+                this.previewFile = file
+            },
+            downloadFile(item) {
+                window.location.href = item.blobUrl + this.sasString
+            },
             chooseUnit() {
                 this.$emit('chooseUnit',this.unitList[this.currentUnitIndex])
             },

+ 2 - 2
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/EvaluationList/TotalIndex.vue

@@ -73,13 +73,13 @@
                                 </div>
                                 <div class="exam-data-item block-item">
                                     <div class="item-content">
-                                        <div class="item-num">7</div>
+                                        <div class="item-num">0</div>
                                         <div class="item-name">{{$t('totalAnalysis.ti_text6')}}</div>
                                     </div>
                                 </div>
                                 <div class="exam-data-item block-item">
                                     <div class="item-content">
-                                        <div class="item-num">2</div>
+                                        <div class="item-num">0</div>
                                         <div class="item-name">{{$t('totalAnalysis.ti_text7')}}</div>
                                     </div>
                                 </div>

+ 4 - 10
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/KnowledgeAnalysis/KnowledgeAnalysis.vue

@@ -94,15 +94,18 @@
             },
 
             doRender(data) {
+                console.log(data)
+                let mapJson = require('@/store/module/map.json')
                 let origin = data.classpercent
                 let pointList = data.pointList
                 let arr = []
                 for (let i = 0; i < pointList.length; i++) {
                     let o = {}
                     o.name = pointList[i]
+                    //o.name = mapJson.filter(item => item.code === pointList[i])[0].name
                     o.gradeRate = data.stupercent.grade[i]
                     for (let j = 0; j < origin.className.length; j++) {
-                        o[origin.className[j]] = origin[pointList[i]][j]
+                        o[origin.className[j]] = origin[mapJson.filter(item => item.name === pointList[i])[0].code][j]
                     }
                     arr.push(o)
                 }
@@ -110,15 +113,6 @@
                 this.knowledgeData = arr
             }
 
-            // 点击玫瑰图某个知识点事件
-            // handleItemClick(item) {
-            //    let exerciseList = this.$store.state.totalAnalysis.exerciseList
-            //    this.currentBlock = item.data.name
-            //    let blockId = item.data.id
-            //    this.knowledgeData = exerciseList.filter(item => item.blockId === blockId)
-            //    this.$refs.detailsRef.knowledgeData = this.knowledgeData
-            // },
-
         },
         mounted() {
             if (this.getKnowledgeData) {

+ 10 - 3
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/KnowledgeAnalysis/ScoreDetails.vue

@@ -12,6 +12,7 @@
                 </div>
             </Col>
             <Col span="12">
+            <!-- 知识点得分详情 -->
                 <span class="component-title">{{$t('totalAnalysis.ka_title5')}}<span style="font-size:14px;font-weight:bold;margin-left:20px;color:#66cccc">{{$t('totalAnalysis.ka_text2')}}:{{currentPoint}}</span></span>
                 <div style="padding:0 50px;">
                     <BaseMyTable :columns="detailsColumns" :tableDatas="tableData" ref="detailsTable"></BaseMyTable>
@@ -42,7 +43,7 @@
                 isShowRadar: true,
                 tableData: [],
                 classDatas: [],
-                currentPoint: '函数',
+                currentPoint: '有理数认识',
                 tipContent: '* RH:高分区段  /  RL:低分区段 (模拟数据,仅供参考)',
                 knowledgeData: [],
                 numData: [],
@@ -153,21 +154,27 @@
 
             // 点击柱状图某个点事件
             handleItemClick(item) {
+                console.log(item)
                 this.currentPoint = item.name
                 this.doRender(this.getKnowledgeData, this.currentPoint)
             },
 
             doRender(data, point) {
+                let mapJson = require('@/store/module/map.json')
                 let origin = data.stupercent
                 let keys = origin.keys
-                let datas = origin[point]
+                let datas = origin[mapJson.filter(item => item.name === point)[0].code]
                 this.tableData = this.$tools.jsonTransform({ datas: datas, keys: keys })
             },
 
             doRenderWrong(data) {
+                let mapJson = require('@/store/module/map.json')
                 let origin = data.wrong
                 let keys = origin.keys
-                let datas = origin.datas
+                let datas = JSON.parse(JSON.stringify(origin.datas))
+                datas.forEach(item => {
+                    item[0] = mapJson.filter(i => i.code === item[0])[0].name
+                })
                 let list = this.$tools.jsonTransform({ datas: datas, keys: keys })
                 list.forEach(item => {
                     item.itemNO = item.itemNO.split(',')

+ 1 - 1
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/TestAnalysis/QuestionList.css

@@ -85,7 +85,7 @@
 
 .ql-item .item-option-wrap {
     display: flex;
-    flex-direction: row;
+    flex-direction: column;
     /*justify-content:space-around;*/
     margin: 20px 0;
 }