Selaa lähdekoodia

添加专案绩效分配共
添加权限功能

luocaiyang 3 vuotta sitten
vanhempi
commit
b22d714348
28 muutettua tiedostoa jossa 818 lisäystä ja 217 poistoa
  1. 12 4
      wispro.sp.api/Controllers/AccountController.cs
  2. 254 58
      wispro.sp.api/Controllers/ProjectController.cs
  3. 6 0
      wispro.sp.api/appsettings.json
  4. 10 0
      wispro.sp.web/Components/AutoCompleteStaff.razor
  5. 65 0
      wispro.sp.web/Components/AutoCompleteStaff.razor.cs
  6. 1 1
      wispro.sp.web/Components/ReviewerAppeal.razor.cs
  7. 2 1
      wispro.sp.web/Components/StaffAutoComplete.razor
  8. 7 7
      wispro.sp.web/Layouts/BasicLayout.razor
  9. 2 0
      wispro.sp.web/Models/CurrentUser.cs
  10. 1 1
      wispro.sp.web/Pages/AppCase/MyCaselist.razor
  11. 2 14
      wispro.sp.web/Pages/AppCase/MyCaselist.razor.cs
  12. 23 1
      wispro.sp.web/Pages/Organization/Department.razor.cs
  13. 2 1
      wispro.sp.web/Pages/Project/AssignPoint.razor
  14. 1 1
      wispro.sp.web/Pages/Project/AssignPoint.razor.cs
  15. 1 1
      wispro.sp.web/Pages/Project/MyProject.razor.cs
  16. 90 0
      wispro.sp.web/Pages/Project/ProjectReviewer.razor
  17. 90 0
      wispro.sp.web/Pages/Project/ProjectReviewer.razor.cs
  18. 1 1
      wispro.sp.web/Pages/Project/ProjectSearch.razor.cs
  19. 83 52
      wispro.sp.web/Pages/Welcome.razor
  20. 20 3
      wispro.sp.web/Pages/Welcome.razor.cs
  21. 21 0
      wispro.sp.web/Pages/Workflow/WorkflowDefine.razor.cs
  22. 36 0
      wispro.sp.web/Services/AuthService.cs
  23. 2 0
      wispro.sp.web/Services/IAuthService.cs
  24. 1 46
      wispro.sp.web/Services/PerformanceItemServices.cs
  25. 77 24
      wispro.sp.web/Services/ProjectService.cs
  26. 5 0
      wispro.sp.web/Services/UserService.cs
  27. 2 0
      wispro.sp.web/wispro.sp.web.csproj
  28. 1 1
      wospro.sp.entity/PerformanceItem.cs

+ 12 - 4
wispro.sp.api/Controllers/AccountController.cs

@@ -142,16 +142,24 @@ namespace wispro.sp.api.Controllers
 
         }
 
-        
+
         [HttpGet, HttpPost, Route("GetRoles")]
         public List<string> GetRoles(string ResourceId)
         {
-            if(ResourceId == "AddProjectJX")
+            var Authors = Configuration[$"Authorize:{ResourceId}"];
+
+            if (string.IsNullOrEmpty(Authors))
             {
-                return new List<string> { "[35]-[2]" };
+                return new List<string>();
             }
 
-            return new List<string>();
+            var ret = Authors.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
+            //if (ret.Length > 0)
+            //{
+            //    return new List<string> { "[35]-[2]" };
+            //}
+
+            return ret.ToList<string>();
         }
     }
     

+ 254 - 58
wispro.sp.api/Controllers/ProjectController.cs

@@ -119,6 +119,76 @@ namespace wispro.sp.api.Controllers
 
         }
 
+        private void _SaveProjectWorkContent(spDbContext dbContext,ProjectContents saveObj)
+        {
+            if (saveObj.ProjectContentRecord.Id == 0)
+            {
+                if (string.IsNullOrEmpty(saveObj.ProjectContentRecord.ProjectNo))
+                {
+                    throw new ApplicationException("没有选择专案!");
+                }
+                else
+                {
+                    saveObj.ProjectContentRecord.Project = null;
+                }
+
+                var currentUser = Context.Staffs.FirstOrDefault(s => s.Name == User.Identity.Name);
+                saveObj.ProjectContentRecord.StaffId = currentUser.Id;
+
+                Context.ProjectContentRecords.Add(saveObj.ProjectContentRecord);
+                Context.SaveChanges();
+            }
+            else
+            {
+                var temObj = Context.ProjectContentRecords.FirstOrDefault(p => p.Id == saveObj.ProjectContentRecord.Id);
+                temObj.CaseCoefficient = saveObj.ProjectContentRecord.CaseCoefficient;
+                temObj.Point = saveObj.ProjectContentRecord.Point;
+                temObj.ReviewerId = saveObj.ProjectContentRecord.ReviewerId;
+                //temObj.StaffId = saveObj.ProjectContentRecord.StaffId;
+                temObj.State = saveObj.ProjectContentRecord.State;
+                dbContext.SaveChanges();
+                saveObj.ProjectContentRecord = temObj;
+            }
+
+            foreach (var temContent in saveObj.ProjectWorkContents)
+            {
+                switch (temContent.modifyState)
+                {
+                    case ModifyState.Deleted:
+                        dbContext.Database.ExecuteSqlRaw($"Delete from ProjectWorkContent where id={temContent.Id}");
+
+                        break;
+                    case ModifyState.Modified:
+                        var modifyContent = Context.ProjectWorkContents.FirstOrDefault(p => p.Id == temContent.Id);
+                        if (modifyContent != null)
+                        {
+                            modifyContent.Content = temContent.Content;
+                            modifyContent.ActualPerformance = temContent.ActualPerformance;
+                            modifyContent.DifficultFactor = temContent.DifficultFactor;
+                            modifyContent.FinalPerformance = temContent.FinalPerformance;
+                            modifyContent.TakeTime = temContent.TakeTime;
+                            modifyContent.TimeSpan = temContent.TimeSpan;
+                            modifyContent.WorkDate = temContent.WorkDate;
+                        }
+                        break;
+                    case ModifyState.New:
+                        var newContent = new ProjectWorkContent();
+                        newContent.Content = temContent.Content;
+                        newContent.ActualPerformance = temContent.ActualPerformance;
+                        newContent.DifficultFactor = temContent.DifficultFactor;
+                        newContent.FinalPerformance = temContent.FinalPerformance;
+                        newContent.TakeTime = temContent.TakeTime;
+                        newContent.TimeSpan = temContent.TimeSpan;
+                        newContent.WorkDate = temContent.WorkDate;
+                        newContent.ContentRecordId = saveObj.ProjectContentRecord.Id;
+
+                        Context.ProjectWorkContents.Add(newContent);
+                        break;
+                }
+                dbContext.SaveChanges();
+            }
+        }
+
         public ApiSaveResponse SaveProjectWorkContent(ProjectContents saveObj)
         {
             ApiSaveResponse ret = new ApiSaveResponse();
@@ -128,78 +198,93 @@ namespace wispro.sp.api.Controllers
             {
                 try
                 {
-                    if (saveObj.ProjectContentRecord.Id == 0)
+                    _SaveProjectWorkContent(Context, saveObj);
+                    
+                    t.Commit();
+                }
+                catch(Exception ex)
+                {
+                    t.Rollback();
+                    ret.Success = false;
+                    ret.ErrorMessage = ex.Message;
+                }
+            }
+
+            return ret;
+        }
+
+        public ApiSaveResponse ReviewProjectWorkContent(List<ProjectContents> saveObjs)
+        {
+            ApiSaveResponse ret = new ApiSaveResponse();
+            ret.Success = true;
+            var Reviewer = Context.Staffs.FirstOrDefault(p=>p.Name == User.Identity.Name);
+
+            
+
+            using (var t = Context.Database.BeginTransaction())
+            {
+                try
+                {
+                    foreach (var saveObj in saveObjs)
                     {
-                        if(string.IsNullOrEmpty(saveObj.ProjectContentRecord.ProjectNo))
+                        if (Reviewer.Id != saveObj.ProjectContentRecord.ReviewerId )
                         {
                             ret.Success = false;
-                            ret.ErrorMessage = "没有选择专案!";
-                            return ret;
+                            ret.ErrorMessage = "只有指定审核人员才能操作!";
                         }
-                        else
+                        
+                        saveObj.ProjectContentRecord.ReviewerId = Reviewer.Id;
+                        PerformanceItem item = new PerformanceItem();
+
+                        if (saveObj.ProjectContentRecord.State == 2)
                         {
-                            saveObj.ProjectContentRecord.Project = null;
+                            item = Context.PerformanceItems.FirstOrDefault(p=>
+                                p.CaseNo == saveObj.ProjectContentRecord.ProjectNo &&
+                                p.ItemStaffs.Where(s=>s.DoPersonId == saveObj.ProjectContentRecord.StaffId).Count()>0 &&
+                                p.CalMonthId == saveObj.ProjectContentRecord.CalMonthId);
                         }
 
-                        var currentUser = Context.Staffs.FirstOrDefault(s=>s.Name == User.Identity.Name);
-                        saveObj.ProjectContentRecord.StaffId = currentUser.Id;
-                        
-                        Context.ProjectContentRecords.Add(saveObj.ProjectContentRecord);
-                        Context.SaveChanges();
-                    }
-                    else
-                    {
-                        var temObj = Context.ProjectContentRecords.FirstOrDefault(p => p.Id == saveObj.ProjectContentRecord.Id);
-                        temObj.CaseCoefficient = saveObj.ProjectContentRecord.CaseCoefficient;
-                        temObj.Point = saveObj.ProjectContentRecord.Point;
-                        temObj.ReviewerId = saveObj.ProjectContentRecord.ReviewerId;
-                        //temObj.StaffId = saveObj.ProjectContentRecord.StaffId;
-                        temObj.State = saveObj.ProjectContentRecord.State;
-                        Context.SaveChanges();
-                        saveObj.ProjectContentRecord = temObj;
-                    }
+                        saveObj.ProjectContentRecord.State = 2;
 
-                    foreach (var temContent in saveObj.ProjectWorkContents)
-                    {
-                        switch (temContent.modifyState)
+                        _SaveProjectWorkContent(Context, saveObj);
+
+                        if(saveObj.ProjectContentRecord.Project == null)
                         {
-                            case ModifyState.Deleted:
-                                Context.Database.ExecuteSqlRaw($"Delete from ProjectWorkContent where id={temContent.Id}");
-
-                                break;
-                            case ModifyState.Modified:
-                                var modifyContent = Context.ProjectWorkContents.FirstOrDefault(p => p.Id == temContent.Id);
-                                if (modifyContent != null)
-                                {
-                                    modifyContent.Content = temContent.Content;
-                                    modifyContent.ActualPerformance = temContent.ActualPerformance;
-                                    modifyContent.DifficultFactor = temContent.DifficultFactor;
-                                    modifyContent.FinalPerformance = temContent.FinalPerformance;
-                                    modifyContent.TakeTime = temContent.TakeTime;
-                                    modifyContent.TimeSpan = temContent.TimeSpan;
-                                    modifyContent.WorkDate = temContent.WorkDate;
-                                }
-                                break;
-                            case ModifyState.New:
-                                var newContent = new ProjectWorkContent();
-                                newContent.Content = temContent.Content;
-                                newContent.ActualPerformance = temContent.ActualPerformance;
-                                newContent.DifficultFactor = temContent.DifficultFactor;
-                                newContent.FinalPerformance = temContent.FinalPerformance;
-                                newContent.TakeTime = temContent.TakeTime;
-                                newContent.TimeSpan = temContent.TimeSpan;
-                                newContent.WorkDate = temContent.WorkDate;
-                                newContent.ContentRecordId = saveObj.ProjectContentRecord.Id;
-
-                                Context.ProjectWorkContents.Add(newContent);
-                                break;
+                            saveObj.ProjectContentRecord.Project = Context.ProjectInfos.Include(p=>p.Customer)
+                                .FirstOrDefault(p=>p.CaseNo == saveObj.ProjectContentRecord.ProjectNo);
+                        }
+                        
+                        item.CalMonthId = saveObj.ProjectContentRecord.CalMonthId.Value;
+                        item.CaseCoefficient = saveObj.ProjectContentRecord.CaseCoefficient;
+                        item.CaseName = saveObj.ProjectContentRecord.Project.CaseName;
+                        item.CaseNo = saveObj.ProjectContentRecord.ProjectNo;
+                        item.Type = "专案";
+                        item.CustomerId = saveObj.ProjectContentRecord.Project.CustomerId;
+                        item.BasePoint = saveObj.ProjectContentRecord.Point;
+
+                        if (item.Id == 0)
+                        {
+                            Context.PerformanceItems.Add(item);
+                            Context.SaveChanges();
+
+                            ItemStaff itemStaff = new ItemStaff();
+                            itemStaff.DoPersonId = saveObj.ProjectContentRecord.StaffId;
+                            itemStaff.ItemId = item.Id;
+                            itemStaff.PerformancePoint = saveObj.ProjectContentRecord.Point;
+                            Context.ItemStaffs.Add(itemStaff);
+                            Context.SaveChanges();
+                        }
+                        else
+                        {
+                            item.BasePoint = saveObj.ProjectContentRecord.Point;
+                            item.CaseCoefficient = saveObj.ProjectContentRecord.CaseCoefficient;
+                            Context.SaveChanges();
                         }
-                        Context.SaveChanges();
                     }
 
                     t.Commit();
                 }
-                catch(Exception ex)
+                catch (Exception ex)
                 {
                     t.Rollback();
                     ret.Success = false;
@@ -273,5 +358,116 @@ namespace wispro.sp.api.Controllers
 
             return ret;
         }
+
+        public List<ProjectInfo> GetWaitingReviewProject()
+        {
+            var user = Context.Staffs.FirstOrDefault(s=>s.Name == User.Identity.Name);
+
+            var retList = Context.ProjectContentRecords
+                .Include(p=>p.Project).ThenInclude(p=>p.Customer)
+                .Where(p => p.State == 0 && p.CalMonth.Status == 0 && p.ReviewerId == user.Id).Select(p=>p.Project).Distinct().ToList();
+
+            return retList;
+        }
+
+        public List<ProjectContents> GetProjectCanReviewWorkContent(string projectNo, int Year, int month)
+        {
+            var pcrList  = Context.ProjectContentRecords
+                .Include(p => p.CalMonth)
+                .Include(p => p.Reviewer)
+                .Include(p => p.Staff)
+                .Include(p => p.Project).ThenInclude(p => p.Customer)
+                .Include(p => p.ProjectWorkContents)
+                .Where(p => p.ProjectNo == projectNo && p.CalMonth.Year == Year && p.CalMonth.Month == month && p.State >0).ToList();
+            
+
+
+            List<ProjectContents> retList = new List<ProjectContents>();
+            foreach (var retObj in pcrList)
+            {
+                ProjectContents ret = new ProjectContents();
+
+                ret.ProjectContentRecord = retObj;
+                ret.ProjectWorkContents = new List<ViewProjectWorkContent>();
+
+                foreach (var wContent in retObj.ProjectWorkContents)
+                {
+                    ViewProjectWorkContent tem = new ViewProjectWorkContent();
+                    tem.modifyState = ModifyState.UnChanged;
+                    tem.Id = wContent.Id;
+                    tem.Content = wContent.Content;
+                    tem.ActualPerformance = wContent.ActualPerformance;
+                    tem.ContentRecordId = wContent.ContentRecordId;
+                    tem.FinalPerformance = wContent.FinalPerformance;
+                    tem.TakeTime = wContent.TakeTime;
+                    tem.TimeSpan = wContent.TimeSpan;
+                    tem.WorkDate = wContent.WorkDate;
+
+                    ret.ProjectWorkContents.Add(tem);
+                }
+
+                ret.ProjectContentRecord.ProjectWorkContents = null;
+
+                retList.Add(ret);
+            }
+
+            return retList;
+        }
+        public List<ProjectContents> GetProjectWorkContentRecord(string projectNo,int Year,int month,int? state)
+        {
+            var pcrList = new List<ProjectContentRecord>();
+            if (!state.HasValue)
+            {
+                pcrList = Context.ProjectContentRecords
+                .Include(p => p.CalMonth)
+                .Include(p => p.Reviewer)
+                .Include(p=>p.Staff)
+                .Include(p => p.Project).ThenInclude(p => p.Customer)
+                .Include(p => p.ProjectWorkContents)
+                .Where(p => p.ProjectNo == projectNo && p.CalMonth.Year == Year && p.CalMonth.Month == month).ToList();
+            }
+            else
+            {
+                pcrList = Context.ProjectContentRecords
+                .Include(p => p.CalMonth)
+                .Include(p => p.Reviewer)
+                .Include(p => p.Staff)
+                .Include(p => p.Project).ThenInclude(p => p.Customer)
+                .Include(p => p.ProjectWorkContents)
+                .Where(p => p.ProjectNo == projectNo && p.CalMonth.Year == Year && p.CalMonth.Month == month && p.State == state.Value).ToList();
+            }
+                
+
+            List<ProjectContents> retList = new List<ProjectContents>();
+            foreach(var retObj in pcrList)
+            {
+                ProjectContents ret = new ProjectContents();
+
+                ret.ProjectContentRecord = retObj;
+                ret.ProjectWorkContents = new List<ViewProjectWorkContent>();
+
+                foreach (var wContent in retObj.ProjectWorkContents)
+                {
+                    ViewProjectWorkContent tem = new ViewProjectWorkContent();
+                    tem.modifyState = ModifyState.UnChanged;
+                    tem.Id = wContent.Id;
+                    tem.Content = wContent.Content;
+                    tem.ActualPerformance = wContent.ActualPerformance;
+                    tem.ContentRecordId = wContent.ContentRecordId;
+                    tem.FinalPerformance = wContent.FinalPerformance;
+                    tem.TakeTime = wContent.TakeTime;
+                    tem.TimeSpan = wContent.TimeSpan;
+                    tem.WorkDate = wContent.WorkDate;
+
+                    ret.ProjectWorkContents.Add(tem);
+                }
+
+                ret.ProjectContentRecord.ProjectWorkContents = null;
+
+                retList.Add(ret);
+            }
+
+            return retList;
+        }
     }
 }

+ 6 - 0
wispro.sp.api/appsettings.json

@@ -38,5 +38,11 @@
     "Account": "luocaiyang@china-wispro.com",
     "Password": "Lqftiu807005",
     "mail": "luocaiyang@china-wispro.com"
+  },
+
+  "Authorize": {
+    "/Department": "[94]-[1]",
+    "/Workflow/Manage": "[94]-[1]"
   }
+  
 }

+ 10 - 0
wispro.sp.web/Components/AutoCompleteStaff.razor

@@ -0,0 +1,10 @@
+<AutoComplete Options="_ShowStaffLists" @bind-Value="SelectValueName" OnInput="OnInput" TOption="Staff"
+              CompareWith="CompareWith" OnSelectionChange="OnSelectionChange">
+    <ChildContent>
+        <AutoCompleteSearch Placeholder="请输入..." @bind-Value="@SelectValueName" />
+    </ChildContent>
+    <OptionTemplate Context="option">
+        <AutoCompleteOption Value="@option.Value" Label="@option.Value.Name">
+        </AutoCompleteOption>
+    </OptionTemplate>
+</AutoComplete>

+ 65 - 0
wispro.sp.web/Components/AutoCompleteStaff.razor.cs

@@ -0,0 +1,65 @@
+using AntDesign;
+using Microsoft.AspNetCore.Components;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using wispro.sp.entity;
+using wispro.sp.web.Services;
+
+namespace wispro.sp.web.Components
+{
+    public partial class AutoCompleteStaff
+    {
+        private Staff _SelectedItem;
+        private string SelectValueName;
+        List<Staff> _ShowStaffLists;
+
+        [Parameter]
+        public int? StaffId { get; set; }
+
+        [Parameter]
+        public EventCallback<int?> StaffIdChanged { get; set; }
+
+        [Parameter]
+        public List<Staff> StaffLists { get; set; }
+
+        [Inject] IUserService _UserService { get; set; }
+
+
+
+
+        protected override void OnInitialized()
+        {
+            _ShowStaffLists = StaffLists;
+            base.OnInitialized();
+        }
+
+        Func<object, object, bool> CompareWith = (a, b) =>
+        {
+            if (a is Staff o1 && b is Staff o2)
+            {
+                return o1.Name  == o2.Name ;
+            }
+            else
+            {
+                return false;
+            }
+        };
+
+        void OnSelectionChange(AutoCompleteOption item)
+        {
+            _SelectedItem  = (Staff)item.Value;
+            StaffId = _SelectedItem.Id;
+        }
+
+        void OnInput(ChangeEventArgs e)
+        {
+            var v = e.Value.ToString();
+
+            _ShowStaffLists = StaffLists.Where<Staff>(s => s.Name.Contains(v)).ToList();
+
+        }
+
+    }
+}

+ 1 - 1
wispro.sp.web/Components/ReviewerAppeal.razor.cs

@@ -25,7 +25,7 @@ namespace wispro.sp.web.Components
         [Inject]
         protected HttpClient _httpClient { get; set; }
 
-        protected override async void OnInitialized()
+        protected override void OnInitialized()
         {
             _Model = base.Options ?? new ReviewerAppealModel();
             base.OnInitialized();

+ 2 - 1
wispro.sp.web/Components/StaffAutoComplete.razor

@@ -1,4 +1,5 @@
-<AutoComplete Options="ShowStaffs" OnInput="OnInput" TOption="Staff" AllowFilter="false" OnSelectionChange="OnSelectionChange">
+<AutoComplete Options="ShowStaffs" OnInput="OnInput" TOption="Staff" 
+              AllowFilter="false" OnSelectionChange="OnSelectionChange">
     <ChildContent>
         <AutoCompleteSearch Placeholder="请输入..." @bind-Value="@SelectName"/>
     </ChildContent>

+ 7 - 7
wispro.sp.web/Layouts/BasicLayout.razor

@@ -91,13 +91,13 @@
                     Path="/Project/MyProjects",
                     Icon ="user",
                 },
-                new MenuDataItem
-                {
-                    Name="专案工作内容",
-                    Key="ProjectWorkContent",
-                    Path="/Project/WorkContent",
-                    Icon ="search",
-                },
+                //new MenuDataItem
+                //{
+                //    Name="专案工作内容",
+                //    Key="ProjectWorkContent",
+                //    Path="/Project/WorkContent",
+                //    Icon ="search",
+                //},
                 new MenuDataItem
                 {
                     Name="专案查询",

+ 2 - 0
wispro.sp.web/Models/CurrentUser.cs

@@ -34,6 +34,8 @@ namespace wispro.sp.web.Models
         public GeographicType Geographic { get; set; }
         public string Address { get; set; }
         public string Phone { get; set; }
+
+        public List<string> Roles { get; set; } = new List<string>();
     }
 
     public class UserLiteItem

+ 1 - 1
wispro.sp.web/Pages/AppCase/MyCaselist.razor

@@ -36,7 +36,7 @@
                         <PageHeaderExtra>
                             @*<AuthorizeView Roles="@strAddProjectJX">*@
 
-                                <Button Type="@ButtonType.Primary" OnClick="()=>goAssignPoint()">添加项目绩效</Button>
+                                @*<Button Type="@ButtonType.Primary" OnClick="()=>goAssignPoint()">项目绩效</Button>*@
                             @*</AuthorizeView>*@
                             @foreach (AppealType at in apTypeService.GetItems(1))
                             {

+ 2 - 14
wispro.sp.web/Pages/AppCase/MyCaselist.razor.cs

@@ -64,6 +64,7 @@ namespace wispro.sp.web.Pages.AppCase
         [Inject] protected IUserService _userService { get; set; }
 
         [Inject] protected CalMonthServices _CalMonthService { get; set; }
+        [Inject] protected IJSRuntime JSRuntime { get; set; }
 
 
         private bool isFirstInit = true;
@@ -74,12 +75,6 @@ namespace wispro.sp.web.Pages.AppCase
         {
             if (isFirstInit)
             {
-                var Roles = await _authService.GetRoles("AddProjectJX");
-                foreach (var role in Roles)
-                {
-                    strAddProjectJX = (string.IsNullOrEmpty(strAddProjectJX)) ? role : $"{strAddProjectJX},{role}";
-                }
-
                 _loading = true;
                 await RefreshMyStatistics();
                 _Datas = new List<PerformanceItem>();// data.Results;
@@ -205,9 +200,7 @@ namespace wispro.sp.web.Pages.AppCase
 
 
         }
-
-        [Inject] IJSRuntime JSRuntime { get; set; }
-
+        
         [Inject] IConfiguration _configuration { get; set; }
 
         bool isDownloading = false;
@@ -379,10 +372,5 @@ namespace wispro.sp.web.Pages.AppCase
             };
             StateHasChanged();
         }
-
-        void goAssignPoint()
-        {
-            NavigationManager.NavigateTo("/Project/AssignPoint");
-        }
     }
 }

+ 23 - 1
wispro.sp.web/Pages/Organization/Department.razor.cs

@@ -2,6 +2,7 @@
 using AntDesign.TableModels;
 using Microsoft.AspNetCore.Components;
 using Microsoft.AspNetCore.Components.Web;
+using Microsoft.JSInterop;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -24,9 +25,30 @@ namespace wispro.sp.web.Pages.Organization
 
         [Inject] MessageService _message { get; set; }
 
+        [Inject] protected NavigationManager NavigationManager { get; set; }
+
+        [Inject] protected  IAuthService _authService { get; set; }
+
+        [Inject] protected IUserService userService { get; set; }
+
+        [Inject] protected IJSRuntime JSRuntime { get; set; }
+
         protected override async System.Threading.Tasks.Task OnInitializedAsync()
         {
-            //await orgService.Init();
+            var canVisist = await _authService.CanVisitResource("/Department");
+            
+            if (!canVisist)
+            {
+                var config = new MessageConfig()
+                {
+                    Content = "您没有权限使用该功能",
+                    Type = MessageType.Error
+                };
+
+                var ret = _message.Open(config);
+                await JSRuntime.InvokeVoidAsync("history.back");
+            }
+
             _loading = true;
 
             departments =await orgService.GetDepartments();

+ 2 - 1
wispro.sp.web/Pages/Project/AssignPoint.razor

@@ -77,7 +77,8 @@
                             <AntDesign.Table TItem="share.ViewProjectWorkContent"
                                              DataSource="_ShowWorkContent"
                                              Bordered=@true
-                                             Size=@TableSize.Small>
+                                             Size=@TableSize.Small
+                                             HidePagination="@true">
                                 <RowTemplate Context="pp">
                                     <AntDesign.Column Title="工作内容" TData="string">
                                         @if (addDoItem == pp)

+ 1 - 1
wispro.sp.web/Pages/Project/AssignPoint.razor.cs

@@ -17,7 +17,7 @@ namespace wispro.sp.web.Pages.Project
     {
         [Inject] public MessageService MsgSvr { get; set; }
 
-        [Inject] protected PerformanceItemServices _itemService { get; set; }
+        [Inject] protected IProjectService _itemService { get; set; }
         [Inject] NavigationManager _NavigationManager { get; set; }
 
         ProjectContents task = new() {

+ 1 - 1
wispro.sp.web/Pages/Project/MyProject.razor.cs

@@ -19,7 +19,7 @@ namespace wispro.sp.web.Pages.Project
 
         private ModalRef _modalRef;
 
-        [Inject] protected PerformanceItemServices _itemService { get; set; }
+        [Inject] protected IProjectService _itemService { get; set; }
         [Inject] public MessageService MsgSvr { get; set; }
         [Inject] NavigationManager _NavigationManager { get; set; }
 

+ 90 - 0
wispro.sp.web/Pages/Project/ProjectReviewer.razor

@@ -0,0 +1,90 @@
+@page "/Project/Reviewer/{ProjectNo?}"
+
+<PageContainer>
+    <Breadcrumb>
+        <Breadcrumb>
+            <BreadcrumbItem>
+                <a href="/Home"><Icon Type="home"></Icon></a>
+            </BreadcrumbItem>
+            <BreadcrumbItem>
+                <span>专案审核</span>
+            </BreadcrumbItem>
+        </Breadcrumb>
+    </Breadcrumb>
+    <Content>
+        <Button Type="primary" Icon="plus" OnClick="Save" Style="float:right">保存</Button>
+    </Content>
+    <ChildContent>
+        <Space>
+            @if (string.IsNullOrEmpty(ProjectNo))
+            {
+
+            }
+            else
+            {
+                <SpaceItem>@ProjectNo</SpaceItem>
+            }
+        </Space>
+            
+        @if (projectContents != null)
+        {
+            foreach(var pContent in projectContents)
+            {
+                //Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(pContent));
+    <Card Title="@pContent.ProjectContentRecord.Staff.Name">
+        <Extra>
+            <Space>
+                <SpaceItem>最终绩效点数:<AntDesign.InputNumber @bind-Value="@pContent.ProjectContentRecord.Point" Step="0.01" Size="50"/></SpaceItem>
+                <SpaceItem>
+                    <Select @bind-Value="@pContent.ProjectContentRecord.CaseCoefficient"
+                            TItemValue="string" TItem="string" Size="50" DefaultActiveFirstOption>
+                        <SelectOptions>
+                            <SelectOption TItemValue="string" TItem="string" Value="@("S")" Label="S" />
+                            <SelectOption TItemValue="string" TItem="string" Value="@("A")" Label="A" />
+                            <SelectOption TItemValue="string" TItem="string" Value="@("B")" Label="B" />
+                            <SelectOption TItemValue="string" TItem="string" Value="@("C")" Label="C" />
+                            <SelectOption TItemValue="string" TItem="string" Value="@("D")" Label="D" />
+                        </SelectOptions>
+                    </Select>
+                </SpaceItem>
+            </Space>
+        </Extra>
+        <Body>
+            <Table DataSource="pContent.ProjectWorkContents" Context="pp" Size="@TableSize.Small" Title="工作内容" HidePagination="@true">
+                <ChildContent>
+                    <AntDesign.Column Title="工作内容" TData="string">
+                        @pp.Content
+                    </AntDesign.Column>
+                    <AntDesign.Column Title="工作日期" TData="string">
+                        @pp.WorkDate.ToString("yyyy-MM-dd")
+                    </AntDesign.Column>
+                    <AntDesign.Column Title="时间跨度" TData="string">
+                        @pp.TimeSpan 天
+                    </AntDesign.Column>
+                    <AntDesign.Column Title="耗时" TData="string">
+                        @pp.TakeTime 小时
+                    </AntDesign.Column>
+                    <AntDesign.Column Title="工作难度系数" TData="string">
+                        <Input Type="text" @bind-Value="@pp.DifficultFactor"  Size="20"  @oninput="()=>ContentChanged(pp)"/>
+                    </AntDesign.Column>
+                    <AntDesign.Column Title="实际绩效" TData="string">
+                        <Input Type="text" @bind-Value="@pp.ActualPerformance" OnBlur="stopEdit" Size="20"  @oninput="()=>ContentChanged(pp)" />
+                    </AntDesign.Column>
+                    <AntDesign.Column Title="最终绩效" TData="string">
+                        <Input Type="text" @bind-Value="@pp.FinalPerformance" OnBlur="stopEdit" Size="20"  @oninput="()=>ContentChanged(pp)" />
+                    </AntDesign.Column>
+                </ChildContent>
+            </Table>
+           
+        </Body>
+        
+    </Card>
+            }
+        }
+        else
+        {
+            <Spin />
+        }
+    </ChildContent>
+</PageContainer>
+

+ 90 - 0
wispro.sp.web/Pages/Project/ProjectReviewer.razor.cs

@@ -0,0 +1,90 @@
+using AntDesign;
+using Microsoft.AspNetCore.Components;
+using Microsoft.AspNetCore.Components.Web;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using wispro.sp.entity;
+using wispro.sp.share;
+using wispro.sp.web.Services;
+
+namespace wispro.sp.web.Pages.Project
+{
+    public partial class ProjectReviewer
+    {
+        private List<ProjectContents> projectContents;
+        private ProjectInfo projectInfo;
+        private List<ProjectInfo> waitingReviewProjects;
+        private ViewProjectWorkContent editObj;
+
+        [Parameter]
+        public string ProjectNo { get; set; }
+        
+        [Inject]
+        IProjectService projectService { get; set; }
+
+        [Inject]
+        CalMonthServices calMonthServices { get; set; }
+
+        [Inject] public MessageService _message { get; set; }
+
+        [Inject] NavigationManager _NavigationManager { get; set; }
+
+        protected async override  Task OnInitializedAsync()
+        {
+            CalMonth cal =await calMonthServices.GetHandlingMonth();
+            if (!string.IsNullOrEmpty(ProjectNo))
+            {
+                projectContents = await projectService.GetProjectCanReviewWorkContent(ProjectNo, cal);
+            }
+            else
+            {
+                waitingReviewProjects = await projectService.GetWaitingReviewProjects();
+            }
+
+            await base.OnInitializedAsync();
+        }
+
+        void startEdit(ViewProjectWorkContent pp)
+        {
+            editObj = pp;
+        }
+
+        void stopEdit()
+        {
+            editObj = null;
+        }
+
+        void ContentChanged(ViewProjectWorkContent pp)
+        {
+            pp.modifyState = ModifyState.Modified;
+        }
+
+        void OnInput(ChangeEventArgs e)
+        {
+            if (editObj != null)
+            {
+                editObj.modifyState = ModifyState.Modified;
+            }
+        }
+
+        async void Save()
+        {
+            var ret = await projectService.ReviewProjectWorkContent(projectContents);
+
+            if (ret.Success)
+            {
+                _NavigationManager.NavigateTo("/Home");
+                await _message.Success("保存成功!");
+                
+            }
+            else
+            {
+               await _message.Error("保存出错!");
+            }
+
+        }
+
+    }
+}

+ 1 - 1
wispro.sp.web/Pages/Project/ProjectSearch.razor.cs

@@ -20,7 +20,7 @@ namespace wispro.sp.web.Pages.Project
         bool _loading = false;
         ITable table;
 
-        [Inject] protected PerformanceItemServices _itemService { get; set; }
+        [Inject] protected IProjectService _itemService { get; set; }
         [Inject] public MessageService MsgSvr { get; set; }
 
         protected async override Task OnInitializedAsync()

+ 83 - 52
wispro.sp.web/Pages/Welcome.razor

@@ -39,64 +39,95 @@
         <div class="statItem">
             <span>您的总绩效数据有:<a href="/MyCaseList">@allItems </a> </span>
         </div>
+        
+        
     </ExtraContent>
     <ChildContent>
         <Row Gutter="24">
             <AntDesign.Col Xl="24" Lg="24" Md="24" Sm="24" Xs="24">
-                <Card BodyStyle="padding: 0px;"
-                      Class="activeCard"
-                      Title="信息动态">
-                    <AntList TItem="AppealRecord"
-                             DataSource="@AppealRecords"
-                             Class="activitiesList"
-                             Size="large"
-                             ItemLayout="ListItemLayout.Horizontal"
-                             >
-                        <ListItem>
-                            <ListItemMeta Avatar="@context.Creater.Name" Description="@(context.ReviewTime.HasValue?context.ReviewTime.Value.ToFriendlyDisplay():context.CreateTime.ToFriendlyDisplay())">
-                                <TitleTemplate>
-                                    <span>
-                                        <span class="event">
-                                            @if (context.ReviewTime.HasValue)
-                                            {
-                                                if (context.CreaterId == _CurrentUser.Userid)
-                                                {
-                                            <span>(@context.Reviewer.Name 在 @context.ReviewTime.Value.ToFriendlyDisplay() 审核了你提交的 @(context.Item==null?"":context.Item.CaseNo) @context.Type.Name")</span> }
-                                                else
-                                                {
-                                                    if (context.ReviewerId != _CurrentUser.Userid)
-                                                    {
-                                                    <span>(您在 @context.CreateTime.ToFriendlyDisplay()提交的 @(context.Item==null?"":context.Item.CaseNo) @context.Type.Name,@context.Reviewer.Name 已于 @context.ReviewTime.Value.ToFriendlyDisplay() 审核完成"</span> 
-                                                    }
-                                                }
-                                            }
-                                            else
-                                            {
-                                                if (context.CreaterId == _CurrentUser.Userid)
-                                                {
-                                        <span>您在 @context.CreateTime.ToFriendlyDisplay() 提交的 @(context.Item==null?"":context.Item.CaseNo) @context.Type.Name ,正在等待 @context.Reviewer.Name 审核!"</span>}
-                                                else
-                                                {
-                                        <span>@context.Creater.Name 在 @context.CreateTime.ToFriendlyDisplay() 提交的 @(context.Item==null?"":context.Item.CaseNo) @context.Type.Name ,请您尽快<Button Danger Type="@ButtonType.Link" OnClick="()=>ShowModel(context)">审核</Button>!</span>
-                                                }
-                                                                                
-                                            }
-                                        </span>
-                                    </span>
-                                </TitleTemplate>
-                            </ListItemMeta>
-                        </ListItem>
-                    </AntList>
+                <Card BodyStyle="padding: 0px;" Class="activeCard">
+                    <CardTabs>
+                        <Tabs>
+                            <TabPane Key="1">
+                                <TabTemplate>信息动态</TabTemplate>
+                                <ChildContent>
+                                    <AntList TItem="AppealRecord" DataSource="@AppealRecords" 
+                                                       Class="activitiesList"
+                                                       Size="large"
+                                                       ItemLayout="ListItemLayout.Horizontal">
+                                        <ListItem>
+                                            <ListItemMeta Avatar="@context.Creater.Name" Description="@(context.ReviewTime.HasValue?context.ReviewTime.Value.ToFriendlyDisplay():context.CreateTime.ToFriendlyDisplay())">
+                                                <TitleTemplate>
+                                                    <span>
+                                                        <span class="event">
+                                                            @if (context.ReviewTime.HasValue)
+                                                            {
+                                                                if (context.CreaterId == _CurrentUser.Userid)
+                                                                {
+                                                                    <span>(@context.Reviewer.Name 在 @context.ReviewTime.Value.ToFriendlyDisplay() 审核了你提交的 @(context.Item==null?"":context.Item.CaseNo) @context.Type.Name")</span> }
+                                                                else
+                                                                {
+                                                                    if (context.ReviewerId != _CurrentUser.Userid)
+                                                                    {
+                                                                        <span>(您在 @context.CreateTime.ToFriendlyDisplay()提交的 @(context.Item==null?"":context.Item.CaseNo) @context.Type.Name,@context.Reviewer.Name 已于 @context.ReviewTime.Value.ToFriendlyDisplay() 审核完成"</span>
+                                                                    }
+                                                                }
+                                                            }
+                                                            else
+                                                            {
+                                                                if (context.CreaterId == _CurrentUser.Userid)
+                                                                {
+                                                                    <span>您在 @context.CreateTime.ToFriendlyDisplay() 提交的 @(context.Item==null?"":context.Item.CaseNo) @context.Type.Name ,正在等待 @context.Reviewer.Name 审核!"</span>}
+                                                                else
+                                                                {
+                                                                    <span>@context.Creater.Name 在 @context.CreateTime.ToFriendlyDisplay() 提交的 @(context.Item==null?"":context.Item.CaseNo) @context.Type.Name ,请您尽快<Button Danger Type="@ButtonType.Link" OnClick="()=>ShowModel(context)">审核</Button>!</span>
+                                                                }
+
+                                                            }
+                                                        </span>
+                                                    </span>
+                                                </TitleTemplate>
+                                            </ListItemMeta>
+                                        </ListItem>
+                                    </AntList>
+                                </ChildContent>
+                            </TabPane>
+                            @if (WaitingReviewProjects != null && WaitingReviewProjects.Count > 0)
+                            {
+                            <TabPane @key="2">
+                                <TabTemplate>待分配绩效专案</TabTemplate>
+                                <ChildContent>
+                                    <AntDesign.Table TItem="ProjectInfo"
+                                                     
+                                                     DataSource="@WaitingReviewProjects"
+                                                     Bordered=@true
+                                                     Size=@TableSize.Middle
+                                                     HidePagination="@true">
+                                        <RowTemplate>
+                                            @*<Selection Key="@(context.ProjectNo)" />*@
+                                            <AntDesign.Column Title="序号" TData="int" Width="60">
+                                                @serialNumber(context)
+                                            </AntDesign.Column>
+                                            <AntDesign.Column Title="我方文号" @bind-Field="@context.CaseNo" Sortable Filterable />
+                                            <AntDesign.Column Title="案件名称" @bind-Field="@context.CaseName" TData="string" Sortable Filterable />
+                                            <AntDesign.Column Title="案件类型" @bind-Field="@context.CaseType" TData="string" Sortable Filterable />
+                                            <AntDesign.Column Title="客户" DataIndex="Customer.Name" TData="string" Sortable Filterable />
+                                            <AntDesign.Column Title="案件审核人"  DataIndex="Reviewer.Name" TData="string" Sortable Filterable />
+                                            <ActionColumn>
+                                                <a href="/Project/Reviewer/@context.CaseNo">绩效分配</a>
+                                            </ActionColumn>
+                                        </RowTemplate>
+                                        
+                                    </AntDesign.Table>
+</ChildContent>
+                            </TabPane>
+                            }
+
+                        </Tabs>
+                        </CardTabs>
                 </Card>
             </AntDesign.Col>
-            @*<AntDesign.Col Xl="8" Lg="24" Md="24" Sm="24" Xs="24">
-                <Card Style="margin-bottom: 24px;"
-                      Title="绩效数据统计">
-                    <div class="chart">
-                        <wispro.sp.web.Components.Radar HasLegend="false" />
-                    </div>
-                </Card>
-            </AntDesign.Col>*@
+            
         </Row>
     </ChildContent>
 </PageContainer>

+ 20 - 3
wispro.sp.web/Pages/Welcome.razor.cs

@@ -28,6 +28,7 @@ namespace wispro.sp.web.Pages
         private NoticeType[] _projectNotice = { };
         private CurrentUser _CurrentUser;
         private List<AppealRecord> AppealRecords = new List<AppealRecord>();
+        private List<ProjectInfo> WaitingReviewProjects = new List<ProjectInfo>();
 
         [Inject] public IProjectService ProjectService { get; set; }
         [Inject] public IUserService _userService { get; set; }
@@ -72,7 +73,9 @@ namespace wispro.sp.web.Pages
                 AppealRecords = await _atService.GetUserAppeals(_CurrentUser.Userid);
                 
             }
-            
+
+            WaitingReviewProjects = await ProjectService.GetWaitingReviewProjects();
+
 
             StateHasChanged();
             
@@ -149,7 +152,21 @@ namespace wispro.sp.web.Pages
             StateHasChanged();
         }
 
-        
-        
+        int serialNumber(ProjectInfo project)
+        {
+            int i = 0;
+            foreach(var p in WaitingReviewProjects)
+            {
+                i++;
+                if(p.CaseNo == project.CaseNo)
+                {
+                    break;
+                }
+            }
+
+            return i;
+        }
+
+
     }
 }

+ 21 - 0
wispro.sp.web/Pages/Workflow/WorkflowDefine.razor.cs

@@ -1,6 +1,7 @@
 using AntDesign;
 using AntDesign.TableModels;
 using Microsoft.AspNetCore.Components;
+using Microsoft.JSInterop;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -41,9 +42,29 @@ namespace wispro.sp.web.Pages.Workflow
 
         [Inject] protected NavigationManager navigation { get; set; }
 
+        [Inject] protected IAuthService _authService { get; set; }
+
+        [Inject] protected NavigationManager NavigationManager { get; set; }
+
+        [Inject] protected IJSRuntime JSRuntime { get; set; }
+
 
         protected override async System.Threading.Tasks.Task OnInitializedAsync()
         {
+            var canVisist = await _authService.CanVisitResource("/Department");
+
+            if (!canVisist)
+            {
+                var config = new MessageConfig()
+                {
+                    Content = "您没有权限使用该功能",
+                    Type = MessageType.Error
+                };
+
+                var ret = _msgService.Open(config);
+                await JSRuntime.InvokeVoidAsync("history.back");
+            }
+
             await base.OnInitializedAsync();
             workflows = await workflowService.getAllWorkflows();
         }

+ 36 - 0
wispro.sp.web/Services/AuthService.cs

@@ -11,6 +11,8 @@ using System.Threading.Tasks;
 using wispro.sp.share.webViewObject;
 using wispro.sp.web.Auth;
 using System.Text.Json;
+using wispro.sp.web.Models;
+using AntDesign;
 
 namespace wispro.sp.web.Services
 {
@@ -29,6 +31,7 @@ namespace wispro.sp.web.Services
             this.UserService = UserService;
         }
 
+        
         public async Task<bool> LoginAsync(loginDto userInfo)
         {
             bool result = false;
@@ -68,5 +71,38 @@ namespace wispro.sp.web.Services
             return httpResponse;
             
         }
+
+        public async Task<bool> CanVisitResource(string resId)
+        {
+            bool canVisist = false;
+            var Roles = await httpClient.Get<List<string>>($"account/GetRoles?ResourceId={resId}");
+
+            CurrentUser _user =await UserService.GetUser();
+
+            if (Roles.Count == 0)
+            {
+                canVisist = true;
+            }
+            else
+            {
+                foreach (var uRole in _user.Roles)
+                {
+                    if (Roles.Contains(uRole))
+                    {
+                        canVisist = true;
+                        break;
+                    }
+                }
+
+                
+            }
+            
+            
+
+            return canVisist;
+
+            
+
+        }
     }
 }

+ 2 - 0
wispro.sp.web/Services/IAuthService.cs

@@ -15,5 +15,7 @@ namespace wispro.sp.web.Services
         Task<List<string>> GetRoles(string ResourceId);
 
         Task<bool> ChangePassword(changePasswordDto dto);
+
+        Task<bool> CanVisitResource(string resId);
     }
 }

+ 1 - 46
wispro.sp.web/Services/PerformanceItemServices.cs

@@ -302,51 +302,6 @@ namespace wispro.sp.web.Services
 
         
 
-        public async  Task<List<ProjectInfo>> GetProjectInfos(int State)
-        {
-            var data = await _httpClient.Get<List<ProjectInfo>>($"Project/GetProjects?state={State}");
-            return data;
-        }
-
-        public async Task<List<ProjectInfo>> GetAllProjects()
-        {
-            var data = await _httpClient.Get<List<ProjectInfo>>($"Project/GetAll");
-            return data;
-        }
-        public async Task<List<ProjectContentRecord>> GetMyProjects()
-        {
-            var data = await _httpClient.Get<List<ProjectContentRecord>>($"Project/GetMyProjects");
-            return data;
-        }
-
-        public async Task<bool> SetProjectFinish(string caseNo)
-        {
-            var data = await _httpClient.Get<bool>($"Project/SetFinished?CaseNo={caseNo}");
-            return data;
-        }
-
-        public async Task<ApiSaveResponse> AddProjectPerformanctItem(ProjectContents projectPoint)
-        {
-            var data = await _httpClient.Post<ApiSaveResponse>($"PerformanceItem/AddProjectPerformance",projectPoint);
-            return data;
-        }
-
-        public async Task<ProjectContents> getProjectWorkContent(int value)
-        {
-            var data = await _httpClient.Get<ProjectContents>($"Project/getProjectWorkContent?Id={value}");
-            return data;
-        }
-
-        public async Task<ApiSaveResponse> SaveContent(ProjectContents task)
-        {
-            var response =await  _httpClient.Post<ApiSaveResponse>("Project/SaveProjectWorkContent", task);
-            return response;
-        }
-
-        public async Task<ApiSaveResponse> SubmitToReview(int Id,int ReviewerId)
-        {
-            var data = await _httpClient.Get<ApiSaveResponse>($"Project/SubmitToReview?Id={Id}&&reviewerId={ReviewerId}");
-            return data;
-        }
+       
     }
 }

+ 77 - 24
wispro.sp.web/Services/ProjectService.cs

@@ -1,57 +1,110 @@
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using System.Net.Http;
 using System.Net.Http.Json;
 using System.Threading.Tasks;
+using wispro.sp.entity;
+using wispro.sp.share;
 using wispro.sp.web.Models;
 
 namespace wispro.sp.web.Services
 {
     public interface IProjectService
     {
-        Task<NoticeType[]> GetProjectNoticeAsync();
-        Task<ActivitiesType[]> GetActivitiesAsync();
-        Task<ListItemDataType[]> GetFakeListAsync(int count = 0);
-        Task<NoticeItem[]> GetNoticesAsync();
+        Task<List<ProjectInfo>> GetProjectInfos(int State);
+        Task<List<ProjectInfo>> GetAllProjects();
+        Task<List<ProjectContentRecord>> GetMyProjects();
+        Task<bool> SetProjectFinish(string caseNo);
+
+        Task<ApiSaveResponse> AddProjectPerformanctItem(ProjectContents projectPoint);
+
+        Task<ProjectContents> getProjectWorkContent(int value);
+
+        Task<ApiSaveResponse> SaveContent(ProjectContents task);
+
+        Task<ApiSaveResponse> SubmitToReview(int Id, int ReviewerId);
+
+        Task<List<ProjectContents>> GetProjectCanReviewWorkContent(string projectNo,CalMonth cal);
+        Task<List<ProjectInfo>> GetWaitingReviewProjects();
+        Task<ApiSaveResponse> ReviewProjectWorkContent(List<ProjectContents> projectContents);
     }
 
     public class ProjectService : IProjectService
     {
-        private readonly HttpClient _httpClient;
+        private readonly IHttpService _httpClient;
 
-        public ProjectService(HttpClient httpClient)
+        public ProjectService(IHttpService httpClient)
         {
             _httpClient = httpClient;
         }
 
-        public async Task<NoticeType[]> GetProjectNoticeAsync()
+        public async Task<List<ProjectInfo>> GetProjectInfos(int State)
+        {
+            var data = await _httpClient.Get<List<ProjectInfo>>($"Project/GetProjects?state={State}");
+            return data;
+        }
+
+        public async Task<List<ProjectInfo>> GetAllProjects()
+        {
+            var data = await _httpClient.Get<List<ProjectInfo>>($"Project/GetAll");
+            return data;
+        }
+        public async Task<List<ProjectContentRecord>> GetMyProjects()
+        {
+            var data = await _httpClient.Get<List<ProjectContentRecord>>($"Project/GetMyProjects");
+            return data;
+        }
+
+        public async Task<bool> SetProjectFinish(string caseNo)
         {
-            return await _httpClient.GetFromJsonAsync<NoticeType[]>("data/notice.json");
+            var data = await _httpClient.Get<bool>($"Project/SetFinished?CaseNo={caseNo}");
+            return data;
         }
 
-        public async Task<NoticeItem[]> GetNoticesAsync()
+        public async Task<ApiSaveResponse> AddProjectPerformanctItem(ProjectContents projectPoint)
         {
-            return await _httpClient.GetFromJsonAsync<NoticeItem[]>("data/notices.json");
+            var data = await _httpClient.Post<ApiSaveResponse>($"PerformanceItem/AddProjectPerformance", projectPoint);
+            return data;
+        }
+
+        public async Task<ProjectContents> getProjectWorkContent(int value)
+        {
+            var data = await _httpClient.Get<ProjectContents>($"Project/getProjectWorkContent?Id={value}");
+            return data;
+        }
+
+        public async Task<ApiSaveResponse> SaveContent(ProjectContents task)
+        {
+            var response = await _httpClient.Post<ApiSaveResponse>("Project/SaveProjectWorkContent", task);
+            return response;
+        }
+
+        public async Task<ApiSaveResponse> SubmitToReview(int Id, int ReviewerId)
+        {
+            var data = await _httpClient.Get<ApiSaveResponse>($"Project/SubmitToReview?Id={Id}&&reviewerId={ReviewerId}");
+            return data;
+        }
+
+        public async Task<List<ProjectContents>> GetProjectCanReviewWorkContent(string projectNo,CalMonth cal)
+        {
+            var strUrl = $"Project/GetProjectCanReviewWorkContent?projectNo={projectNo}&&year={cal.Year}&&month={cal.Month}";
+            
+
+            var data = await _httpClient.Get<List<ProjectContents>>(strUrl);
+            return data;
         }
 
-        public async Task<ActivitiesType[]> GetActivitiesAsync()
+        public async Task<List<ProjectInfo>> GetWaitingReviewProjects()
         {
-            try
-            {
-                var result = await _httpClient.GetFromJsonAsync<ActivitiesType[]>("data/activities.json");
-                return result;
-            }
-            catch
-            (Exception ex)
-            {
-                throw ex;
-            }
+            var data = await _httpClient.Get<List<ProjectInfo>>($"Project/GetWaitingReviewProject");
+            return data;
         }
 
-        public async Task<ListItemDataType[]> GetFakeListAsync(int count = 0)
+        public async Task<ApiSaveResponse> ReviewProjectWorkContent(List<ProjectContents> projectContents)
         {
-            var data = await _httpClient.GetFromJsonAsync<ListItemDataType[]>("data/fake_list.json");
-            return count > 0 ? data.Take(count).ToArray() : data;
+            var response = await _httpClient.Post<ApiSaveResponse>("Project/ReviewProjectWorkContent", projectContents);
+            return response;
         }
     }
 }

+ 5 - 0
wispro.sp.web/Services/UserService.cs

@@ -61,6 +61,11 @@ namespace wispro.sp.web.Services
                     _user.Name = claim.Value;
                     break;
                 }
+
+                if(claim.Type == ClaimTypes.Role)
+                {
+                    _user.Roles.Add(claim.Value);
+                }
             }
 
             _user.Userid = tokenInLocalStorage.UserId;

+ 2 - 0
wispro.sp.web/wispro.sp.web.csproj

@@ -86,4 +86,6 @@
     </Content>
   </ItemGroup>
 
+  <ProjectExtensions><VisualStudio><UserProperties properties_4launchsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
+
 </Project>

+ 1 - 1
wospro.sp.entity/PerformanceItem.cs

@@ -215,7 +215,7 @@ namespace wispro.sp.entity
 
         public bool isDanger()
         {
-            if (DoItem.ToString() == "新申请")
+            if (!String.IsNullOrEmpty(DoItem) && DoItem.ToString() == "新申请")
             {
                 DateTime dt1 = DateTime.MinValue;
                 if (ReturnDate != null)