ProjectReviewer.razor 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. @page "/Project/Reviewer/{ProjectNo?}"
  2. @attribute [Authorize]
  3. <PageContainer>
  4. <Breadcrumb>
  5. <Breadcrumb>
  6. <BreadcrumbItem>
  7. <a href="/Home"><Icon Type="home" /></a>
  8. </BreadcrumbItem>
  9. <BreadcrumbItem>
  10. <span>专案审核</span>
  11. </BreadcrumbItem>
  12. </Breadcrumb>
  13. </Breadcrumb>
  14. <Content>
  15. <Button Type="primary" Icon="plus" OnClick="Save" Style="float:right">保存</Button>
  16. <Button Type="default" Icon="history" OnClick="ShowReviewerHistory" Style="float:right;margin-right: 10px;">查看审核历史</Button>
  17. </Content>
  18. <ChildContent>
  19. <Space>
  20. @if (string.IsNullOrEmpty(ProjectNo))
  21. {
  22. }
  23. else
  24. {
  25. <SpaceItem>@ProjectNo</SpaceItem>
  26. <SpaceItem><Button Type="primary" Icon="" OnClick="ReviewHistory">查看历史点数</Button></SpaceItem>
  27. }
  28. </Space>
  29. @if (projectContents != null)
  30. {
  31. foreach (var pContent in projectContents)
  32. {
  33. <Card Title="@pContent.ProjectContentRecord.Staff.Name">
  34. <Extra>
  35. <Space>
  36. <SpaceItem>
  37. 最终绩效点数:
  38. <AntDesign.InputNumber @bind-Value="@pContent.ProjectContentRecord.PointS" Step="0.01" Size="@InputSize.Small" />S
  39. </SpaceItem>
  40. <SpaceItem><AntDesign.InputNumber @bind-Value="@pContent.ProjectContentRecord.PointA" Step="0.01" Size="@InputSize.Small" />A</SpaceItem>
  41. <SpaceItem><AntDesign.InputNumber @bind-Value="@pContent.ProjectContentRecord.PointB" Step="0.01" Size="@InputSize.Small" />B</SpaceItem>
  42. <SpaceItem><AntDesign.InputNumber @bind-Value="@pContent.ProjectContentRecord.PointC" Step="0.01" Size="@InputSize.Small" />C</SpaceItem>
  43. <SpaceItem><AntDesign.InputNumber @bind-Value="@pContent.ProjectContentRecord.PointD" Step="0.01" Size="@InputSize.Small" />D</SpaceItem>
  44. </Space>
  45. </Extra>
  46. <Body>
  47. <Table DataSource="pContent.ProjectWorkContents" Context="pp" Size="@TableSize.Small" Title="工作内容" HidePagination="@true">
  48. <ChildContent>
  49. <AntDesign.Column Title="工作内容" TData="string">
  50. @pp.Content
  51. </AntDesign.Column>
  52. <AntDesign.Column Title="工作日期" TData="string">
  53. @pp.WorkDate.ToString("yyyy-MM-dd")
  54. </AntDesign.Column>
  55. <AntDesign.Column Title="时间跨度" TData="string">
  56. @pp.TimeSpan 天
  57. </AntDesign.Column>
  58. <AntDesign.Column Title="耗时" TData="string">
  59. @pp.TakeTime 小时
  60. </AntDesign.Column>
  61. <AntDesign.Column Title="难度系数" TData="string">
  62. <Input Type="text" @bind-Value="@pp.DifficultFactor" Size="20" @oninput="() => ContentChanged(pp)" />
  63. </AntDesign.Column>
  64. <AntDesign.Column Title="实际绩效" TData="string">
  65. <Input Type="text" @bind-Value="@pp.ActualPerformance" OnBlur="stopEdit" Size="20" @oninput="() => ContentChanged(pp)" />
  66. </AntDesign.Column>
  67. </ChildContent>
  68. </Table>
  69. </Body>
  70. </Card>
  71. }
  72. }
  73. else
  74. {
  75. <Spin />
  76. }
  77. </ChildContent>
  78. </PageContainer>
  79. <Drawer Height="600" Visible="_ShowHistory" Placement="bottom" Title="@($"[{ProjectNo}] 历史点数")" OnClose="CloseDetail">
  80. @if(HistroyContents != null){
  81. <div>
  82. @foreach(CalMonth calMonth in GetMonth(HistroyContents))
  83. {
  84. <span><b>@($"{calMonth.Year} 年 {calMonth.Month} 月")</b></span>
  85. <Divider/>
  86. foreach(share.ProjectContents pContent in GetByMonth(calMonth, HistroyContents))
  87. {
  88. <Card Title="@pContent.ProjectContentRecord.Staff.Name">
  89. <Extra>
  90. <Space>
  91. <SpaceItem>
  92. 最终绩效点数:
  93. </SpaceItem>
  94. <SpaceItem><span style="text-decoration:underline;">@($"{GetPointString(pContent.ProjectContentRecord,"S")}") </span><b>S</b></SpaceItem>
  95. <SpaceItem><span style="text-decoration:underline;">@($"{GetPointString(pContent.ProjectContentRecord,"A")}") </span><b>A</b></SpaceItem>
  96. <SpaceItem><span style="text-decoration:underline;">@($"{GetPointString(pContent.ProjectContentRecord,"B")}") </span><b>B</b></SpaceItem>
  97. <SpaceItem><span style="text-decoration:underline;">@($"{GetPointString(pContent.ProjectContentRecord,"C")}") </span><b>C</b></SpaceItem>
  98. <SpaceItem><span style="text-decoration:underline;">@($"{GetPointString(pContent.ProjectContentRecord,"D")}") </span><b>D</b></SpaceItem>
  99. </Space>
  100. </Extra>
  101. <Body>
  102. <Table DataSource="pContent.ProjectWorkContents" Context="pp" Size="@TableSize.Small" HidePagination="@true">
  103. <ChildContent>
  104. <AntDesign.Column Title="工作内容" TData="string">
  105. @pp.Content
  106. </AntDesign.Column>
  107. <AntDesign.Column Title="工作日期" TData="string">
  108. @pp.WorkDate.ToString("yyyy-MM-dd")
  109. </AntDesign.Column>
  110. <AntDesign.Column Title="时间跨度" TData="string">
  111. @pp.TimeSpan 天
  112. </AntDesign.Column>
  113. <AntDesign.Column Title="耗时" TData="string">
  114. @pp.TakeTime 小时
  115. </AntDesign.Column>
  116. <AntDesign.Column Title="难度系数" TData="string">
  117. @pp.DifficultFactor
  118. </AntDesign.Column>
  119. <AntDesign.Column Title="实际绩效" TData="string">
  120. @pp.ActualPerformance
  121. </AntDesign.Column>
  122. </ChildContent>
  123. </Table>
  124. </Body>
  125. </Card>
  126. }
  127. }
  128. </div>
  129. }
  130. </Drawer>
  131. <Drawer Width="1200" Visible="_ShowReviewerHistory" Placement="right" Title="@("审核历史")" OnClose="CloseReviewerHistory">
  132. <div>
  133. <div style="margin-bottom: 16px;">
  134. <InputGroup Compact>
  135. <Input Placeholder="请输入案件编号" Style="width: 300px;" @bind-Value="@projectNoSearchText" OnPressEnter="() => OnSearchTextChanged(projectNoSearchText)" />
  136. <Button Type="@ButtonType.Primary" OnClick="() => OnSearchTextChanged(projectNoSearchText)">搜索</Button>
  137. </InputGroup>
  138. </div>
  139. @{
  140. var filteredProjects = GetFilteredReviewerHistory();
  141. }
  142. @if (filteredProjects != null && filteredProjects.Count > 0)
  143. {
  144. // 按案件编号分组
  145. var projectGroups = filteredProjects.GroupBy(p => p.ProjectNo).OrderByDescending(g => g.Max(p => p.SubmitTime));
  146. foreach (var projectGroup in projectGroups)
  147. {
  148. <Card Style="margin-bottom: 20px;">
  149. <TitleTemplate>
  150. <b>案件编号:@projectGroup.Key</b>
  151. </TitleTemplate>
  152. <Body>
  153. @foreach (var record in projectGroup.OrderByDescending(r => r.SubmitTime))
  154. {
  155. <Card Style="margin-bottom: 10px;" Size="small">
  156. <TitleTemplate>
  157. <Space>
  158. <SpaceItem><b>处理人:</b>@record.Staff?.Name</SpaceItem>
  159. <SpaceItem><b>绩效月份:</b>@(record.CalMonth?.Year) 年 @(record.CalMonth?.Month) 月</SpaceItem>
  160. <SpaceItem><b>提交时间:</b>@record.SubmitTime.ToString("yyyy-MM-dd")</SpaceItem>
  161. </Space>
  162. </TitleTemplate>
  163. <Extra>
  164. <Space>
  165. <SpaceItem><b>绩效点数:</b></SpaceItem>
  166. @if (record.PointS.HasValue) { <SpaceItem>S: @record.PointS</SpaceItem> }
  167. @if (record.PointA.HasValue) { <SpaceItem>A: @record.PointA</SpaceItem> }
  168. @if (record.PointB.HasValue) { <SpaceItem>B: @record.PointB</SpaceItem> }
  169. @if (record.PointC.HasValue) { <SpaceItem>C: @record.PointC</SpaceItem> }
  170. @if (record.PointD.HasValue) { <SpaceItem>D: @record.PointD</SpaceItem> }
  171. </Space>
  172. </Extra>
  173. <Body>
  174. @if (record.ProjectWorkContents != null && record.ProjectWorkContents.Count > 0)
  175. {
  176. <Table DataSource="record.ProjectWorkContents" Context="workContent" Size="@TableSize.Small" HidePagination="@true">
  177. <ChildContent>
  178. <AntDesign.Column Title="工作内容" TData="string">
  179. @workContent.Content
  180. </AntDesign.Column>
  181. <AntDesign.Column Title="工作日期" TData="string">
  182. @workContent.WorkDate.ToString("yyyy-MM-dd")
  183. </AntDesign.Column>
  184. <AntDesign.Column Title="时间跨度" TData="string">
  185. @workContent.TimeSpan 天
  186. </AntDesign.Column>
  187. <AntDesign.Column Title="耗时" TData="string">
  188. @workContent.TakeTime 小时
  189. </AntDesign.Column>
  190. <AntDesign.Column Title="难度系数" TData="string">
  191. @workContent.DifficultFactor
  192. </AntDesign.Column>
  193. <AntDesign.Column Title="实际绩效" TData="string">
  194. @workContent.ActualPerformance
  195. </AntDesign.Column>
  196. </ChildContent>
  197. </Table>
  198. }
  199. else
  200. {
  201. <Empty Description="@("无工作内容")" />
  202. }
  203. </Body>
  204. </Card>
  205. }
  206. </Body>
  207. </Card>
  208. }
  209. }
  210. else
  211. {
  212. <Empty />
  213. }
  214. </div>
  215. </Drawer>