Kaynağa Gözat

feat(frontend): Add AI chat component and enhance health modules

- Add AI chat modal component with DeepSeek service integration for health advice
- Create exercise module with exercise-actions and exercise-history subcomponents
- Add diet-history component to track dietary records and history
- Enhance dashboard component with improved layout and styling
- Update weight management component with refined chart visualizations
- Add multiple dashboard and weight visualization option templates
- Add project documentation files and undergraduate experiment report
- Update package dependencies and project assets
- Remove anomaly alert section from weight component for cleaner UI
- Improve module routing configuration for diet and exercise modules
17846405080 9 ay önce
ebeveyn
işleme
a413312d59
46 değiştirilmiş dosya ile 9410 ekleme ve 508 silme
  1. BIN
      campus_health_app/docs/black-cat.png
  2. 0 17
      campus_health_app/docs/weight-management-implementation.md
  3. 2 0
      campus_health_app/docs/本科学生综合性实验报告.files/filelist.xml
  4. 10 0
      campus_health_app/docs/本科学生综合性实验报告.files/header.html
  5. BIN
      campus_health_app/docs/本科学生综合性实验报告.files/本科学生综合性实验报告150.png
  6. 2121 0
      campus_health_app/docs/本科学生综合性实验报告.htm
  7. 13 13
      campus_health_app/frontend/campus-health-app/package-lock.json
  8. BIN
      campus_health_app/frontend/campus-health-app/public/2407457c-1b37-4026-8165-8b645c5ed3bc.png
  9. BIN
      campus_health_app/frontend/campus-health-app/public/9abcd339-bcc0-4d2c-a1d4-1cbae4f039c0.png
  10. BIN
      campus_health_app/frontend/campus-health-app/public/assets/images/black-cat.png
  11. 506 0
      campus_health_app/frontend/campus-health-app/public/dashboard-option1.html
  12. 492 0
      campus_health_app/frontend/campus-health-app/public/dashboard-option2.html
  13. 502 0
      campus_health_app/frontend/campus-health-app/public/dashboard-option3.html
  14. BIN
      campus_health_app/frontend/campus-health-app/public/e72d4dd1-3e6a-47b5-86aa-e8fb3119f36a.png
  15. 441 0
      campus_health_app/frontend/campus-health-app/public/weight-option1.html
  16. 356 0
      campus_health_app/frontend/campus-health-app/public/weight-option2.html
  17. 429 0
      campus_health_app/frontend/campus-health-app/public/weight-option3.html
  18. 152 82
      campus_health_app/frontend/campus-health-app/src/app/modules/dashboard/dashboard.component.html
  19. 292 199
      campus_health_app/frontend/campus-health-app/src/app/modules/dashboard/dashboard.component.scss
  20. 177 3
      campus_health_app/frontend/campus-health-app/src/app/modules/dashboard/dashboard.component.ts
  21. 79 0
      campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet-history/diet-history.component.html
  22. 241 0
      campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet-history/diet-history.component.scss
  23. 172 0
      campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet-history/diet-history.component.ts
  24. 10 3
      campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet.component.html
  25. 50 17
      campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet.component.scss
  26. 5 0
      campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet.component.ts
  27. 6 0
      campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet.routes.ts
  28. 53 0
      campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise-actions/exercise-actions.component.html
  29. 202 0
      campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise-actions/exercise-actions.component.scss
  30. 163 0
      campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise-actions/exercise-actions.component.ts
  31. 93 0
      campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise-history/exercise-history.component.html
  32. 286 0
      campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise-history/exercise-history.component.scss
  33. 211 0
      campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise-history/exercise-history.component.ts
  34. 75 24
      campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise.component.html
  35. 170 0
      campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise.component.scss
  36. 53 5
      campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise.component.ts
  37. 12 0
      campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise.routes.ts
  38. 3 3
      campus_health_app/frontend/campus-health-app/src/app/modules/school-services/school-services.component.ts
  39. 153 40
      campus_health_app/frontend/campus-health-app/src/app/modules/weight/weight.component.html
  40. 285 0
      campus_health_app/frontend/campus-health-app/src/app/modules/weight/weight.component.scss
  41. 190 102
      campus_health_app/frontend/campus-health-app/src/app/modules/weight/weight.component.ts
  42. 109 0
      campus_health_app/frontend/campus-health-app/src/app/shared/components/modal/ai-chat/ai-chat.component.html
  43. 495 0
      campus_health_app/frontend/campus-health-app/src/app/shared/components/modal/ai-chat/ai-chat.component.scss
  44. 703 0
      campus_health_app/frontend/campus-health-app/src/app/shared/components/modal/ai-chat/ai-chat.component.ts
  45. 98 0
      campus_health_app/frontend/campus-health-app/src/app/shared/services/deepseek.service.ts
  46. BIN
      campus_health_app/frontend/campus-health-app/src/assets/images/black-cat.png

BIN
campus_health_app/docs/black-cat.png


+ 0 - 17
campus_health_app/docs/weight-management-implementation.md

@@ -1433,23 +1433,6 @@ export class WeightComponent implements OnInit, OnDestroy {
   <div class="scatter-chart-section">
   <div class="scatter-chart-section">
     <div echarts [options]="scatterChartOption" class="chart-medium"></div>
     <div echarts [options]="scatterChartOption" class="chart-medium"></div>
   </div>
   </div>
-
-  <!-- 异常提醒区 -->
-  <div class="anomaly-section" *ngIf="anomalies.length > 0">
-    <h3>健康提醒</h3>
-    <div class="anomaly-list">
-      <div 
-        *ngFor="let anomaly of anomalies" 
-        class="anomaly-item"
-        [class.info]="anomaly.severity === 'info'"
-        [class.warning]="anomaly.severity === 'warning'"
-        [class.danger]="anomaly.severity === 'danger'">
-        <span class="anomaly-icon">{{ anomaly.severity === 'info' ? 'ℹ️' : anomaly.severity === 'warning' ? '⚠️' : '❗' }}</span>
-        <span class="anomaly-message">{{ anomaly.message }}</span>
-      </div>
-    </div>
-  </div>
-
   <!-- 添加记录对话框 -->
   <!-- 添加记录对话框 -->
   <div class="dialog-overlay" *ngIf="showAddRecordDialog" (click)="showAddRecordDialog = false">
   <div class="dialog-overlay" *ngIf="showAddRecordDialog" (click)="showAddRecordDialog = false">
     <div class="dialog" (click)="$event.stopPropagation()">
     <div class="dialog" (click)="$event.stopPropagation()">

+ 2 - 0
campus_health_app/docs/本科学生综合性实验报告.files/filelist.xml

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<xml xmlns:o="urn:schemas-microsoft-com:office:office"><o:MainFile HRef="../本科学生综合性实验报告.htm"/><o:File HRef="header.html"/><o:File HRef="filelist.xml"/></xml>

+ 10 - 0
campus_health_app/docs/本科学生综合性实验报告.files/header.html

@@ -0,0 +1,10 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type  content="text/html; charset=gb2312" ><meta name=ProgId  content=Word.Document ><meta name=Generator  content="Microsoft Word 14" ><meta name=Originator  content="Microsoft Word 14" ></head><body><div style="mso-element:footer"  id="ef0" ><p class=MsoFooter  style="margin-right:18.0000pt;tab-stops:center blank 207.6500pt right blank 415.3000pt ;" ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:ËÎÌå;
+font-size:9.0000pt;mso-font-kerning:0.0000pt;" >- </span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:ËÎÌå;
+font-size:9.0000pt;mso-font-kerning:0.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:ËÎÌå;
+font-size:9.0000pt;mso-font-kerning:0.0000pt;" >&nbsp;PAGE </span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:ËÎÌå;
+font-size:9.0000pt;mso-font-kerning:0.0000pt;" ><span style="mso-element:field-separator" ></span></span><![endif]--><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:ËÎÌå;
+font-size:9.0000pt;mso-font-kerning:0.0000pt;" >II</span><!--[if supportFields]><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:ËÎÌå;
+font-size:9.0000pt;mso-font-kerning:0.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:ËÎÌå;
+font-size:9.0000pt;mso-font-kerning:0.0000pt;" >&nbsp;-</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:ËÎÌå;
+font-size:9.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p></div><div style="mso-element:footer"  id="f0" ><p class=MsoNormal ></p><p class=MsoFooter  style="margin-right:18.0000pt;tab-stops:center blank 207.6500pt right blank 415.3000pt ;" ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:ËÎÌå;
+font-size:9.0000pt;mso-font-kerning:1.0000pt;" ><o:p>&nbsp;</o:p></span></p></div></body></html>

BIN
campus_health_app/docs/本科学生综合性实验报告.files/本科学生综合性实验报告150.png


+ 2121 - 0
campus_health_app/docs/本科学生综合性实验报告.htm

@@ -0,0 +1,2121 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type  content="text/html; charset=gb2312" ><meta name=ProgId  content=Word.Document ><meta name=Generator  content="Microsoft Word 14" ><meta name=Originator  content="Microsoft Word 14" ><link rel=File-List  href="本科学生综合性实验报告.files/filelist.xml" ><title></title><!--[if gte mso 9]><xml><o:DocumentProperties><o:Author>刘骏</o:Author><o:LastAuthor>容笙</o:LastAuthor><o:Revision>1</o:Revision><o:Pages>9</o:Pages><o:Characters>2334</o:Characters><o:Lines>40</o:Lines><o:Paragraphs>11</o:Paragraphs><o:Company>www.xunchi.com</o:Company></o:DocumentProperties><o:CustomDocumentProperties><o:KSOProductBuildVer dt:dt="string" >2052-12.1.0.24034</o:KSOProductBuildVer><o:ICV dt:dt="string" >E04DF400664B457D9872DD4AAAC381FF_13</o:ICV></o:CustomDocumentProperties></xml><![endif]--><!--[if gte mso 9]><xml><o:OfficeDocumentSettings></o:OfficeDocumentSettings></xml><![endif]--><!--[if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing><w:View>Web</w:View><w:Compatibility><w:AdjustLineHeightInTable/><w:DontGrowAutofit/><w:BalanceSingleByteDoubleByteWidth/><w:DoNotExpandShiftReturn/><w:UseFELayout/></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]--><!--[if gte mso 9]><xml><w:LatentStyles DefLockedState="false"  DefUnhideWhenUsed="true"  DefSemiHidden="true"  DefQFormat="false"  DefPriority="99"  LatentStyleCount="260" >
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="Normal" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="heading 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="heading 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="9"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="heading 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="9"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="heading 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  QFormat="true"  Name="heading 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  QFormat="true"  Name="heading 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  QFormat="true"  Name="heading 7" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  QFormat="true"  Name="heading 8" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  QFormat="true"  Name="heading 9" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="index 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="index 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="index 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="index 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="index 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="index 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="index 7" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="index 8" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="index 9" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="39"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="toc 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="39"  SemiHidden="false"  UnhideWhenUsed="false"  Name="toc 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="39"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="toc 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="toc 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="toc 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="toc 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="toc 7" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="toc 8" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="toc 9" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Normal Indent" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="footnote text" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="annotation text" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="header" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="footer" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="index heading" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  QFormat="true"  Name="caption" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="table of figures" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="envelope address" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="envelope return" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="footnote reference" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="annotation reference" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="line number" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="page number" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="endnote reference" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="endnote text" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="table of authorities" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="macro" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="toa heading" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Bullet" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Number" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Bullet 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Bullet 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Bullet 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Bullet 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Number 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Number 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Number 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Number 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="Title" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Closing" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Signature" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="1"  SemiHidden="false"  Name="Default Paragraph Font" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="Body Text" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Body Text Indent" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Continue" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Continue 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Continue 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Continue 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="List Continue 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Message Header" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="Subtitle" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Salutation" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Date" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="Body Text First Indent" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Body Text First Indent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Note Heading" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Body Text 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Body Text 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Body Text Indent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Body Text Indent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Block Text" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="99"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="Hyperlink" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="FollowedHyperlink" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="Strong" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="Emphasis" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  UnhideWhenUsed="false"  QFormat="true"  Name="Document Map" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Plain Text" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="E-mail Signature" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="Normal (Web)" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="HTML Acronym" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="HTML Address" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="HTML Cite" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="HTML Code" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="HTML Definition" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="HTML Keyboard" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="HTML Preformatted" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="HTML Sample" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="HTML Typewriter" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="HTML Variable" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="99"  SemiHidden="false"  QFormat="true"  Name="Normal Table" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="annotation subject" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="99"  SemiHidden="false"  Name="No List" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="99"  SemiHidden="false"  Name="1 / a / i" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="99"  SemiHidden="false"  Name="1 / 1.1 / 1.1.1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="99"  SemiHidden="false"  Name="Article / Section" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Simple 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Simple 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Simple 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Classic 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Classic 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Classic 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Classic 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Colorful 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Colorful 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Colorful 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Columns 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Columns 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Columns 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Columns 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Columns 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Grid 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Grid 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Grid 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Grid 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Grid 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Grid 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Grid 7" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Grid 8" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table List 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table List 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table List 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table List 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table List 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table List 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table List 7" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table List 8" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table 3D effects 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table 3D effects 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table 3D effects 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Contemporary" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Elegant" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Professional" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Subtle 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Subtle 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Web 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Web 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Web 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  QFormat="true"  Name="Balloon Text" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Table Grid" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="0"  SemiHidden="false"  Name="Table Theme" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="99"  SemiHidden="false"  Name="Placeholder Text" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="99"  SemiHidden="false"  Name="No Spacing" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="60"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Shading" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="61"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light List" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="62"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Grid" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="63"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="64"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="65"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="66"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="67"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="68"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="69"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="70"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Dark List" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="71"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Shading" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="72"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful List" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="73"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Grid" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="60"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Shading Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="61"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light List Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="62"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Grid Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="63"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 1 Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="64"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 2 Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="65"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 1 Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="99"  SemiHidden="false"  Name="List Paragraph" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="99"  SemiHidden="false"  Name="Quote" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="99"  SemiHidden="false"  Name="Intense Quote" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="66"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 2 Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="67"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 1 Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="68"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 2 Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="69"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 3 Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="70"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Dark List Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="71"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Shading Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="72"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful List Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="73"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Grid Accent 1" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="60"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Shading Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="61"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light List Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="62"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Grid Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="63"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 1 Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="64"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 2 Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="65"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 1 Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="66"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 2 Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="67"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 1 Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="68"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 2 Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="69"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 3 Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="70"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Dark List Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="71"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Shading Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="72"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful List Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="73"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Grid Accent 2" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="60"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Shading Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="61"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light List Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="62"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Grid Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="63"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 1 Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="64"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 2 Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="65"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 1 Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="66"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 2 Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="67"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 1 Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="68"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 2 Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="69"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 3 Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="70"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Dark List Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="71"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Shading Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="72"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful List Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="73"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Grid Accent 3" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="60"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Shading Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="61"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light List Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="62"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Grid Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="63"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 1 Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="64"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 2 Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="65"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 1 Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="66"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 2 Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="67"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 1 Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="68"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 2 Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="69"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 3 Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="70"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Dark List Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="71"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Shading Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="72"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful List Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="73"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Grid Accent 4" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="60"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Shading Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="61"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light List Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="62"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Grid Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="63"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 1 Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="64"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 2 Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="65"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 1 Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="66"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 2 Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="67"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 1 Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="68"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 2 Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="69"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 3 Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="70"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Dark List Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="71"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Shading Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="72"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful List Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="73"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Grid Accent 5" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="60"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Shading Accent 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="61"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light List Accent 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="62"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Light Grid Accent 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="63"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 1 Accent 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="64"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Shading 2 Accent 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="65"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 1 Accent 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="66"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium List 2 Accent 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="67"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 1 Accent 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="68"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 2 Accent 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="69"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Medium Grid 3 Accent 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="70"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Dark List Accent 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="71"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Shading Accent 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="72"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful List Accent 6" ></w:LsdException>
+<w:LsdException Locked="false"  Priority="73"  SemiHidden="false"  UnhideWhenUsed="false"  Name="Colorful Grid Accent 6" ></w:LsdException>
+</w:LatentStyles></xml><![endif]--><style>
+@font-face{
+font-family:"Times New Roman";
+}
+
+@font-face{
+font-family:"宋体";
+}
+
+@font-face{
+font-family:"Wingdings";
+}
+
+@font-face{
+font-family:"Arial";
+}
+
+@font-face{
+font-family:"黑体";
+}
+
+@font-face{
+font-family:"Cambria";
+}
+
+@font-face{
+font-family:"Calibri";
+}
+
+@font-face{
+font-family:"华文新魏";
+}
+
+p.MsoNormal{
+mso-style-name:正文;
+mso-style-parent:"";
+margin:0pt;
+margin-bottom:.0001pt;
+mso-pagination:none;
+text-align:justify;
+text-justify:inter-ideograph;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-size:12.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+h1{
+mso-style-name:"标题 1";
+mso-style-next:正文;
+margin-top:17.0000pt;
+margin-bottom:16.5000pt;
+page-break-after:avoid;
+mso-pagination:lines-together;
+text-align:justify;
+text-justify:inter-ideograph;
+mso-outline-level:1;
+line-height:240%;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-weight:bold;
+font-size:22.0000pt;
+mso-font-kerning:22.0000pt;
+}
+
+h2{
+mso-style-name:"标题 2";
+mso-style-next:正文;
+margin-top:13.0000pt;
+margin-bottom:13.0000pt;
+page-break-after:avoid;
+mso-pagination:lines-together;
+text-align:justify;
+text-justify:inter-ideograph;
+mso-outline-level:2;
+line-height:173%;
+font-family:Arial;
+mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';
+font-weight:bold;
+font-size:16.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+h3{
+mso-style-name:"标题 3";
+mso-style-next:正文;
+margin-top:13.0000pt;
+margin-bottom:13.0000pt;
+page-break-after:avoid;
+mso-pagination:lines-together;
+text-align:justify;
+text-justify:inter-ideograph;
+mso-outline-level:3;
+line-height:173%;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-weight:bold;
+font-size:16.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+h4{
+mso-style-name:"标题 4";
+mso-style-next:正文;
+margin-top:14.0000pt;
+margin-bottom:14.5000pt;
+page-break-after:avoid;
+mso-pagination:lines-together;
+text-align:justify;
+text-justify:inter-ideograph;
+mso-outline-level:4;
+line-height:155%;
+font-family:Arial;
+mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';
+mso-bidi-font-weight:bold;
+font-size:15.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+span.10{
+font-family:'Times New Roman';
+}
+
+span.15{
+font-family:'Times New Roman';
+color:rgb(0,0,255);
+text-decoration:underline;
+text-underline:single;
+}
+
+span.16{
+font-family:'Times New Roman';
+font-size:10.5000pt;
+}
+
+span.17{
+font-family:'Times New Roman';
+font-size:10.5000pt;
+mso-font-kerning:1.0000pt;
+}
+
+span.18{
+font-family:Arial;
+mso-fareast-font-family:黑体;
+mso-bidi-font-weight:bold;
+font-size:15.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+span.19{
+font-family:'Times New Roman';
+font-size:9.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+span.20{
+font-family:'Times New Roman';
+font-weight:bold;
+}
+
+span.21{
+font-family:'Times New Roman';
+}
+
+span.22{
+font-family:'Times New Roman';
+color:rgb(128,0,128);
+text-decoration:underline;
+text-underline:single;
+}
+
+span.23{
+font-family:'Times New Roman';
+font-size:10.5000pt;
+mso-font-kerning:1.0000pt;
+}
+
+span.24{
+font-family:'Times New Roman';
+font-weight:bold;
+font-size:10.5000pt;
+mso-font-kerning:1.0000pt;
+}
+
+span.25{
+font-family:'Times New Roman';
+font-size:10.5000pt;
+mso-font-kerning:1.0000pt;
+}
+
+span.26{
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-weight:bold;
+font-size:16.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+span.27{
+font-family:Arial;
+mso-fareast-font-family:黑体;
+font-weight:bold;
+font-size:16.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+span.28{
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-weight:bold;
+font-size:22.0000pt;
+mso-font-kerning:22.0000pt;
+}
+
+span.29{
+font-family:'Times New Roman';
+}
+
+span.30{
+font-family:'Times New Roman';
+font-weight:bold;
+font-size:16.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.MsoDocumentMap{
+mso-style-name:文档结构图;
+mso-style-noshow:yes;
+margin:0pt;
+margin-bottom:.0001pt;
+mso-pagination:none;
+text-align:justify;
+text-justify:inter-ideograph;
+background:rgb(0,0,128);
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-size:12.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.32{
+mso-style-name:"TOC Heading";
+mso-style-noshow:yes;
+mso-style-parent:"标题 1";
+mso-style-next:正文;
+margin-top:12.0000pt;
+margin-bottom:0.0000pt;
+page-break-after:avoid;
+mso-pagination:widow-orphan lines-together;
+text-align:left;
+line-height:107%;
+font-family:Cambria;
+mso-fareast-font-family:宋体;
+mso-bidi-font-family:'Times New Roman';
+color:rgb(54,96,145);
+font-weight:normal;
+font-size:16.0000pt;
+}
+
+p.33{
+mso-style-name:BT3;
+mso-style-parent:"标题 3";
+margin-top:10.0000pt;
+margin-bottom:10.0000pt;
+page-break-after:avoid;
+mso-pagination:lines-together;
+text-align:left;
+mso-outline-level:3;
+font-family:黑体;
+mso-hansi-font-family:'Times New Roman';
+mso-bidi-font-family:'Times New Roman';
+font-weight:bold;
+font-size:12.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.MsoBodyText{
+mso-style-name:正文文本;
+margin-bottom:6.0000pt;
+mso-pagination:none;
+text-align:justify;
+text-justify:inter-ideograph;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-size:12.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.34{
+mso-style-name:Compact;
+mso-style-parent:正文文本;
+margin-top:1.8000pt;
+margin-bottom:1.8000pt;
+mso-pagination:widow-orphan;
+text-align:left;
+font-family:Calibri;
+mso-fareast-font-family:宋体;
+mso-bidi-font-family:'Times New Roman';
+color:rgb(0,0,0);
+font-size:12.0000pt;
+}
+
+p.MsoList3{
+mso-style-name:"列表 3";
+margin-left:5.0000pt;
+mso-para-margin-left:4.0000gd;
+text-indent:-10.0000pt;
+mso-char-indent-count:-2.0000;
+mso-pagination:none;
+text-align:justify;
+text-justify:inter-ideograph;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-size:12.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.MsoCommentText{
+mso-style-name:批注文字;
+margin:0pt;
+margin-bottom:.0001pt;
+mso-pagination:none;
+text-align:left;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-size:12.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.MsoBodyTextFirstIndent{
+mso-style-name:正文首行缩进;
+mso-style-parent:正文文本;
+margin-bottom:6.0000pt;
+text-indent:21.0000pt;
+mso-char-indent-count:1.0000;
+mso-pagination:none;
+text-align:justify;
+text-justify:inter-ideograph;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-size:12.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.38{
+mso-style-name:ZW;
+mso-style-parent:正文首行缩进;
+margin-bottom:0.0000pt;
+text-indent:10.0000pt;
+mso-char-indent-count:2.0000;
+mso-pagination:none;
+text-align:left;
+line-height:130%;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-size:12.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.MsoToc3{
+mso-style-name:"目录 3";
+mso-style-next:正文;
+margin-left:42.0000pt;
+mso-para-margin-left:4.0000gd;
+mso-pagination:none;
+text-align:justify;
+text-justify:inter-ideograph;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-size:12.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.MsoAcetate{
+mso-style-name:批注框文本;
+margin:0pt;
+margin-bottom:.0001pt;
+mso-pagination:none;
+text-align:justify;
+text-justify:inter-ideograph;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-size:9.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.MsoFooter{
+mso-style-name:页脚;
+margin:0pt;
+margin-bottom:.0001pt;
+tab-stops:center blank 207.6500pt right blank 415.3000pt ;
+layout-grid-mode:char;
+mso-pagination:none;
+text-align:left;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-size:9.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.43{
+mso-style-name:BT2;
+mso-style-parent:"标题 2";
+margin-top:12.0000pt;
+margin-bottom:12.0000pt;
+page-break-after:avoid;
+mso-pagination:lines-together;
+text-align:left;
+mso-outline-level:2;
+font-family:黑体;
+mso-hansi-font-family:宋体;
+mso-bidi-font-family:'Times New Roman';
+font-weight:bold;
+font-size:15.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.MsoHeader{
+mso-style-name:页眉;
+margin:0pt;
+margin-bottom:.0001pt;
+border-bottom:1.0000pt solid windowtext;
+mso-border-bottom-alt:0.7500pt solid windowtext;
+padding:0pt 0pt 1pt 0pt ;
+tab-stops:center blank 207.6500pt right blank 415.3000pt ;
+layout-grid-mode:char;
+mso-pagination:none;
+text-align:center;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-size:9.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.MsoCommentSubject{
+mso-style-name:批注主题;
+mso-style-parent:批注文字;
+mso-style-next:批注文字;
+margin:0pt;
+margin-bottom:.0001pt;
+mso-pagination:none;
+text-align:left;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-weight:bold;
+font-size:12.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.MsoToc1{
+mso-style-name:"目录 1";
+mso-style-next:正文;
+margin:0pt;
+margin-bottom:.0001pt;
+tab-stops:right dotted 414.8000pt ;
+mso-pagination:none;
+text-align:justify;
+text-justify:inter-ideograph;
+font-family:宋体;
+mso-bidi-font-family:'Times New Roman';
+font-size:12.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.MsoToc2{
+mso-style-name:"目录 2";
+mso-style-next:正文;
+margin-left:21.0000pt;
+mso-para-margin-left:2.0000gd;
+mso-pagination:none;
+text-align:justify;
+text-justify:inter-ideograph;
+font-family:'Times New Roman';
+mso-fareast-font-family:宋体;
+font-size:12.0000pt;
+mso-font-kerning:1.0000pt;
+}
+
+p.pre{
+mso-style-name:"HTML 预设格式";
+margin:0pt;
+margin-bottom:.0001pt;
+tab-stops:left blank 45.8000pt left blank 91.6000pt left blank 137.4000pt left blank 183.2000pt left blank 229.0000pt left blank 274.8000pt left blank 320.6000pt left blank 366.4000pt left blank 412.2000pt left blank 458.0000pt left blank 503.8000pt left blank 549.6000pt left blank 595.4000pt left blank 641.2000pt left blank 687.0000pt left blank 732.8000pt ;
+mso-pagination:widow-orphan;
+text-align:left;
+font-family:宋体;
+font-size:12.0000pt;
+}
+
+p.p{
+mso-style-name:"普通\(网站\)";
+margin-top:5.0000pt;
+margin-bottom:5.0000pt;
+mso-margin-top-alt:auto;
+mso-margin-bottom-alt:auto;
+mso-pagination:widow-orphan;
+text-align:left;
+font-family:宋体;
+font-size:12.0000pt;
+}
+
+p.50{
+mso-style-name:BT1;
+mso-style-parent:"标题 1";
+margin-top:16.0000pt;
+margin-bottom:16.0000pt;
+page-break-after:avoid;
+mso-pagination:lines-together;
+text-align:left;
+mso-outline-level:1;
+font-family:黑体;
+mso-hansi-font-family:宋体;
+mso-bidi-font-family:'Times New Roman';
+font-weight:bold;
+font-size:16.0000pt;
+mso-font-kerning:22.0000pt;
+}
+
+p.51{
+mso-style-name:"First Paragraph";
+mso-style-parent:正文文本;
+mso-style-next:正文文本;
+margin-top:9.0000pt;
+margin-bottom:9.0000pt;
+mso-pagination:widow-orphan;
+text-align:left;
+font-family:Calibri;
+mso-fareast-font-family:宋体;
+mso-bidi-font-family:'Times New Roman';
+color:rgb(0,0,0);
+font-size:12.0000pt;
+}
+
+span.msoIns{
+mso-style-type:export-only;
+mso-style-name:"";
+text-decoration:underline;
+text-underline:single;
+color:blue;
+}
+
+span.msoDel{
+mso-style-type:export-only;
+mso-style-name:"";
+text-decoration:line-through;
+color:red;
+}
+
+table.MsoNormalTable{
+mso-style-name:普通表格;
+mso-style-parent:"";
+mso-style-noshow:yes;
+mso-tstyle-rowband-size:0;
+mso-tstyle-colband-size:0;
+mso-padding-alt:0.0000pt 5.4000pt 0.0000pt 5.4000pt;
+mso-para-margin:0pt;
+mso-para-margin-bottom:.0001pt;
+mso-pagination:widow-orphan;
+font-family:'Times New Roman';
+font-size:10.0000pt;
+mso-ansi-language:#0400;
+mso-fareast-language:#0400;
+mso-bidi-language:#0400;
+}
+@page{mso-page-border-surround-header:no;
+	mso-page-border-surround-footer:no;
+	mso-facing-pages:yes;}@page Section0{
+margin-top:72.0000pt;
+margin-bottom:72.0000pt;
+margin-left:90.0000pt;
+margin-right:90.0000pt;
+size:595.3000pt 841.9000pt;
+layout-grid:15.6000pt;
+mso-header-margin:42.5500pt;
+mso-footer-margin:49.6000pt;
+mso-page-numbers:upper-roman;
+mso-even-footer:url("本科学生综合性实验报告.files/header.html") ef0;
+mso-footer:url("本科学生综合性实验报告.files/header.html") f0;
+}
+div.Section0{page:Section0;}@page Section1{
+margin-top:72.0000pt;
+margin-bottom:72.0000pt;
+margin-left:90.0000pt;
+margin-right:90.0000pt;
+size:612.0000pt 792.0000pt;
+mso-header-margin:36.0000pt;
+mso-footer-margin:36.0000pt;
+mso-even-footer:url("本科学生综合性实验报告.files/header.html") ef0;
+mso-footer:url("本科学生综合性实验报告.files/header.html") f0;
+}
+div.Section1{page:Section1;}</style></head><body style="tab-interval:21pt;text-justify-trim:punctuation;" ><!--StartFragment--><div class="Section0"  style="layout-grid:15.6000pt;" ><p class=MsoNormal ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoNormal ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" ><o:p>&nbsp;</o:p></span></p><p class=MsoNormal  style="mso-pagination:widow-orphan;text-align:left;" ><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:华文新魏;
+font-weight:bold;font-size:22.0000pt;mso-font-kerning:1.0000pt;" ><o:p>&nbsp;</o:p></span></b></p><p class=MsoNormal  style="mso-pagination:widow-orphan;text-align:left;" ><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:华文新魏;
+font-weight:bold;font-size:22.0000pt;mso-font-kerning:1.0000pt;" ><o:p>&nbsp;</o:p></span></b></p><p class=MsoNormal  align=center  style="text-align:center;" ><a name="OLE_LINK1" ></a><b style="mso-bidi-font-weight:normal" ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+mso-ansi-font-weight:bold;font-size:36.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >本科学生综合性实验报告</font></span></b><b style="mso-bidi-font-weight:normal" ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+mso-ansi-font-weight:bold;font-size:36.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></p><p class=MsoNormal  align=center  style="margin-left:-0.0500pt;mso-para-margin-left:-0.0100gd;text-indent:-0.0500pt;
+text-align:center;" ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><o:p>&nbsp;</o:p></span></p><p class=MsoNormal  align=center  style="margin-left:-0.0500pt;mso-para-margin-left:-0.0100gd;text-indent:-0.0500pt;
+text-align:center;" ><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:22.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >课程名称:</font><a name="_Hlk213257917" ></a></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:22.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >软件项目管理</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:22.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;</span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:22.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></p><p class=MsoNormal  style="margin-left:-0.1000pt;mso-para-margin-left:-0.0100gd;text-indent:98.0000pt;
+mso-char-indent-count:7.0000;" ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><o:p>&nbsp;</o:p></span></p><p class=MsoNormal  style="margin-top:7.8000pt;mso-para-margin-top:0.5000gd;text-indent:84.0000pt;
+mso-char-indent-count:6.0000;" ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目组长</font> &nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;</span></u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >学号</font> </span><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;</span></u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoNormal  style="margin-top:7.8000pt;mso-para-margin-top:0.5000gd;text-indent:84.0000pt;
+mso-char-indent-count:6.0000;" ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目组员</font> &nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;</span></u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >学号</font> </span><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></u></p><p class=MsoNormal  style="margin-top:7.8000pt;margin-left:72.0000pt;mso-para-margin-top:0.5000gd;
+mso-para-margin-left:6.0000gd;text-indent:91.0000pt;" ><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;</span></u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >学号</font> </span><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></u></p><p class=MsoNormal  style="margin-top:7.8000pt;margin-left:63.0000pt;mso-para-margin-top:0.5000gd;
+text-indent:21.0000pt;" ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><o:p>&nbsp;</o:p></span></p><p class=MsoNormal  style="margin-top:7.8000pt;margin-left:63.0000pt;mso-para-margin-top:0.5000gd;
+text-indent:21.0000pt;" ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><o:p>&nbsp;</o:p></span></p><p class=MsoNormal  style="margin-top:7.8000pt;margin-left:63.0000pt;mso-para-margin-top:0.5000gd;
+text-indent:21.0000pt;" ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >班</font> &nbsp;&nbsp;<font face="宋体" >级</font> </span><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><b><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" ><font face="宋体" >软件项目管理</font></span></u></b><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><b style="mso-bidi-font-weight:normal" ><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+mso-ansi-font-weight:bold;text-decoration:underline;text-underline:single;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></u></b></p><p class=MsoNormal  style="margin-top:23.4000pt;mso-para-margin-top:1.5000gd;text-indent:84.0000pt;
+mso-char-indent-count:6.0000;" ><span style="position:absolute;z-index:1;margin-left:360.0000px;
+margin-top:49.8000px;width:277.0000px;height:25.0000px;" ><img width="277"  height="25"  src="本科学生综合性实验报告.files/本科学生综合性实验报告150.png" ></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >实验项目名称</font></span><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><b style="mso-bidi-font-weight:normal" ><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+mso-ansi-font-weight:bold;text-decoration:underline;text-underline:single;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></u></b></p><p class=MsoNormal  style="margin-top:7.8000pt;mso-para-margin-top:0.5000gd;text-indent:84.0000pt;
+mso-char-indent-count:6.0000;" ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >指导教师</font></span><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >刘雨飏</font> &nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoNormal  style="margin-top:7.8000pt;mso-para-margin-top:0.5000gd;text-indent:84.0000pt;
+mso-char-indent-count:6.0000;" ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >开课学期</font> </span><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;20</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="Times New Roman" >2</font></span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >4</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;</span></u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >至</font></span><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;20</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="Times New Roman" >2</font></span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >5</span></u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >学年</font></span><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;<font face="宋体" >第</font></span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >一</font></span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" ><font face="宋体" >学期</font></span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;</span></u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoNormal  style="margin-top:7.8000pt;margin-left:-0.1000pt;mso-para-margin-top:0.5000gd;
+mso-para-margin-left:-0.0100gd;text-indent:84.0000pt;mso-char-indent-count:7.0000;" ><a name="_Toc185431611" ></a><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" ><a name="_Toc185429986" ></a><a name="_Toc185431868" >&nbsp;&nbsp;</a></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >完成时间</font> </span><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;</span></u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >年</font></span><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;</span></u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >月</font></span><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';text-decoration:underline;
+text-underline:single;font-size:14.0000pt;mso-font-kerning:1.0000pt;" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></u><u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+text-decoration:underline;text-underline:single;font-size:14.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span></u><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >日</font></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:14.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p></div>
+<span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:22.0000pt;mso-font-kerning:22.0000pt;" ><br clear=all style='page-break-before:always;mso-break-type:section-break'></span>
+<div class="Section1" ><w:Sdt SdtDocPart="t"  ID="2791687539"  DocPartType="Custom Table of Contents" ><p class=32 ><a name="_Toc213257357" ></a><span style="mso-spacerun:'yes';font-family:Cambria;mso-fareast-font-family:宋体;
+mso-bidi-font-family:'Times New Roman';color:rgb(54,96,145);font-weight:normal;
+font-size:16.0000pt;mso-font-kerning:0.0000pt;" ><a name="摘要" ></a><a name="软件项目管理课程结课作业模板" ><font face="宋体" >目录</font></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Cambria;
+mso-hansi-font-family:Cambria;mso-bidi-font-family:'Times New Roman';color:rgb(54,96,145);
+font-weight:normal;font-size:16.0000pt;mso-font-kerning:0.0000pt;" ><o:p></o:p></span></p><p class=MsoToc2  style="tab-stops:right dotted 431.5000pt ;" ><span><span><a href="#_Toc213257680" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="宋体" >摘要</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257680 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >2</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc2  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257681" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="宋体" >关键词</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257681 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >2</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc2  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257682" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >1. </font><font face="宋体" >项目概述与背景</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257682 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >3</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257683" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >1.1 </font><font face="宋体" >项目背景 (简要说明项目的发起原因、行业背景、技术或市场环境等)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257683 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >3</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257684" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >1.2 </font><font face="宋体" >项目目标 (使用</font><font face="Times New Roman" >SMART</font><font face="宋体" >原则描述项目的主要目标和预期成果)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257684 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >3</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257685" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >1.3 </font><font face="宋体" >项目范围 (明确项目的边界、包含的工作内容和排除的事项)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257685 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >3</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257686" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >1.4 </font><font face="宋体" >项目关键干系人 (列出主要干系人及其角色与期望)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257686 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >3</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc2  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257687" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >2. </font><font face="宋体" >项目组织与角色职责</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257687 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >3</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257688" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >2.1 </font><font face="宋体" >项目组织结构 (描述项目团队的组织形式,如职能型、项目型或矩阵型)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257688 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >3</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257689" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >2.2 </font><font face="宋体" >角色与职责分配 (明确项目经理、开发人员、测试人员等角色的具体职责)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257689 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >3</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257690" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >2.3 </font><font face="宋体" >项目管理团队 (介绍核心管理团队成员及其分工)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257690 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >4</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc2  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257691" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >3. </font><font face="宋体" >项目范围与需求管理</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257691 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >4</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257692" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >3.1 </font><font face="宋体" >项目范围说明书 (详细描述项目的可交付成果和验收标准)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257692 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >4</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257693" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >3.2 </font><font face="宋体" >需求收集与分析 (说明需求获取的方法、需求变更管理流程)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257693 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >4</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257694" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >3.3 </font><font face="宋体" >工作分解结构(</font><font face="Times New Roman" >WBS</font><font face="宋体" >) (列出项目的主要工作包和任务分解)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257694 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >4</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc2  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257695" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >4. </font><font face="宋体" >项目计划与进度控制</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257695 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >4</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257696" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >4.1 </font><font face="宋体" >项目计划概述 (简要说明项目计划的制定方法和主要工具)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257696 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >4</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257697" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >4.2 </font><font face="宋体" >项目进度表 (预留甘特图或进度表占位符,标注关键里程碑)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257697 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >4</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257698" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >4.3 </font><font face="宋体" >里程碑计划 (列出项目的关键里程碑和验收标准)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257698 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >5</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257699" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >4.4 </font><font face="宋体" >进度控制方法 (说明如何监控和控制项目进度,确保按时交付)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257699 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >5</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc2  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257700" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >5. </font><font face="宋体" >项目资源与成本管理</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257700 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >5</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257701" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >5.1 </font><font face="宋体" >资源需求分析 (列出项目所需的人力、物力和财力资源)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257701 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >5</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257702" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >5.2 </font><font face="宋体" >资源分配计划 (说明资源的分配策略和使用计划)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257702 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >5</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257703" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >5.3 </font><font face="宋体" >成本估算与预算 (预留成本估算表占位符,说明预算控制方法)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257703 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >5</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257704" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >5.4 </font><font face="宋体" >资源优化策略 (说明如何提高资源利用效率,降低浪费)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257704 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >5</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc2  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257705" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >6. </font><font face="宋体" >项目风险管理与应对策略</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257705 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >5</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257706" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >6.1 </font><font face="宋体" >风险识别 (预留风险识别表占位符,列出潜在风险点)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257706 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >6</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257707" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >6.2 </font><font face="宋体" >风险评估 (说明风险评估方法,如概率影响矩阵)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257707 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >6</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257708" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >6.3 </font><font face="宋体" >风险应对策略 (针对识别出的风险,制定相应的应对措施)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257708 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >6</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257709" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >6.4 </font><font face="宋体" >风险监控与控制 (说明风险监控的方法和频率,以及风险发生时的处理流程)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257709 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >6</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc2  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257710" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >7. </font><font face="宋体" >项目质量管理与保证</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257710 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >6</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257711" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >7.1 </font><font face="宋体" >质量目标与标准 (明确项目的质量目标和验收标准)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257711 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >6</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257712" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >7.2 </font><font face="宋体" >质量保证计划 (说明项目质量管理的方法和流程)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257712 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >6</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257713" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >7.3 </font><font face="宋体" >质量控制方法 (描述如何进行质量控制,包括测试策略、缺陷管理等)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257713 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >6</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc2  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257714" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >8. </font><font face="宋体" >项目沟通与协作机制</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257714 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >7</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257715" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >8.1 </font><font face="宋体" >沟通需求分析 (分析项目干系人的沟通需求和期望)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257715 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >7</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257716" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >8.2 </font><font face="宋体" >沟通计划 (预留沟通计划表占位符,说明沟通频率、方式和内容)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257716 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >7</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257717" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >8.3 </font><font face="宋体" >沟通渠道与工具 (列出项目中使用的沟通渠道和协作工具)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257717 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >7</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257718" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >8.4 </font><font face="宋体" >沟通问题与解决方案 (说明沟通中可能出现的问题及应对策略)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257718 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >7</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc2  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257719" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >9. </font><font face="宋体" >项目总结与经验教训</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257719 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >7</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257720" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >9.1 </font><font face="宋体" >项目成果总结 (对比计划与实际完成情况,突出关键交付物)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257720 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >7</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257721" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >9.2 </font><font face="宋体" >项目经验教训 (分析项目过程中的成功经验和不足之处)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257721 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >7</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257722" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >9.3 </font><font face="宋体" >项目绩效评估 (评估项目在进度、质量、成本等方面的完成情况)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257722 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >8</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoToc3  style="tab-stops:right dotted 431.5000pt ;" ><span><a href="#_Toc213257723" ><u><span class="15"  style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';color:rgb(0,0,255);
+text-decoration:underline;text-underline:single;" ><font face="Times New Roman" >9.4 </font><font face="宋体" >未来改进方向 (基于项目经验,提出未来可优化的方面)</font></span></u><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-tab-count:1" > </span></span><!--[if supportFields]><span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-begin" ></span></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >PAGEREF _Toc213257723 \h</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" >&nbsp;</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-separator" ></span></span><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" >8</span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><span style="mso-element:field-end" ></span></span></span><![endif]--></a></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:11.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></p><p class=MsoNormal ></span><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p>&nbsp;</o:p></span></p></w:Sdt><h2><a name="_Toc213257680" ></a><b><span style="mso-spacerun:'yes';font-family:黑体;mso-ascii-font-family:Arial;
+mso-hansi-font-family:Arial;mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="黑体" >摘要</font></span></b><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h2><p class=51 ><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';color:rgb(0,0,0);
+font-size:12.0000pt;mso-font-kerning:0.0000pt;" ><font face="宋体" >(</font><font face="Calibri" >200-300</font><font face="宋体" >字简要概括项目背景、目标、管理方法和主要成果)</font></span><span style="mso-spacerun:'yes';font-family:Calibri;mso-fareast-font-family:宋体;
+mso-bidi-font-family:'Times New Roman';color:rgb(0,0,0);font-size:12.0000pt;
+mso-font-kerning:0.0000pt;" ><o:p></o:p></span></p><h2><a name="_Toc213257358" ></a><b><span style="mso-spacerun:'yes';font-family:黑体;mso-ascii-font-family:Arial;
+mso-hansi-font-family:Arial;mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><a name="_Toc213257681" ></a><a name="关键词" ><font face="黑体" >关键词</font></a></span></b><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h2><p class=51 ><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri;
+mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';color:rgb(0,0,0);
+font-size:12.0000pt;mso-font-kerning:0.0000pt;" ><font face="宋体" >(</font><font face="Calibri" >3-5</font><font face="宋体" >个与项目管理相关的核心词汇)</font><a name="正文" ></a></span><span style="mso-spacerun:'yes';font-family:Calibri;mso-fareast-font-family:宋体;
+mso-bidi-font-family:'Times New Roman';color:rgb(0,0,0);font-size:12.0000pt;
+mso-font-kerning:0.0000pt;" ><o:p></o:p></span></p><h2><a name="_Toc213257682" ></a><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><a name="项目概述与背景" >1. </a></span></b><b><span style="mso-spacerun:'yes';font-family:黑体;mso-ascii-font-family:Arial;
+mso-hansi-font-family:Arial;mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="黑体" >项目概述与背景</font></span></b><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h2><h3><a name="_Toc213257683" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >1.1 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目背景</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(简要说明项目的发起原因、行业背景、技术或市场环境等)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257684" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >1.2 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目目标</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(使用</font><font face="Times New Roman" >SMART</font><font face="宋体" >原则描述项目的主要目标和预期成果)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257685" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >1.3 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目范围</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(明确项目的边界、包含的工作内容和排除的事项)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257686" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >1.4 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目关键干系人</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(列出主要干系人及其角色与期望)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h2><a name="_Toc213257687" ></a><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><a name="项目组织与角色职责" >2. </a></span></b><b><span style="mso-spacerun:'yes';font-family:黑体;mso-ascii-font-family:Arial;
+mso-hansi-font-family:Arial;mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="黑体" >项目组织与角色职责</font></span></b><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h2><h3><a name="_Toc213257688" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >2.1 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目组织结构</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(描述项目团队的组织形式,如职能型、项目型或矩阵型)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257689" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >2.2 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >角色与职责分配</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(明确项目经理、开发人员、测试人员等角色的具体职责)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257690" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >2.3 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目管理团队</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(介绍核心管理团队成员及其分工)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h2><a name="_Toc213257691" ></a><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><a name="项目范围与需求管理" >3. </a></span></b><b><span style="mso-spacerun:'yes';font-family:黑体;mso-ascii-font-family:Arial;
+mso-hansi-font-family:Arial;mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="黑体" >项目范围与需求管理</font></span></b><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h2><h3><a name="_Toc213257692" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >3.1 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目范围说明书</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(详细描述项目的可交付成果和验收标准)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257693" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >3.2 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >需求收集与分析</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(说明需求获取的方法、需求变更管理流程)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257694" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >3.3 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >工作分解结构(</font><font face="Times New Roman" >WBS</font><font face="宋体" >)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(列出项目的主要工作包和任务分解)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h2><a name="_Toc213257695" ></a><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><a name="项目计划与进度控制" >4. </a></span></b><b><span style="mso-spacerun:'yes';font-family:黑体;mso-ascii-font-family:Arial;
+mso-hansi-font-family:Arial;mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="黑体" >项目计划与进度控制</font></span></b><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h2><h3><a name="_Toc213257696" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >4.1 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目计划概述</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(简要说明项目计划的制定方法和主要工具)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257697" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >4.2 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目进度表</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(预留甘特图或进度表占位符,标注关键里程碑)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257698" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >4.3 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >里程碑计划</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(列出项目的关键里程碑和验收标准)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257699" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >4.4 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >进度控制方法</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(说明如何监控和控制项目进度,确保按时交付)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h2><a name="_Toc213257700" ></a><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><a name="项目资源与成本管理" >5. </a></span></b><b><span style="mso-spacerun:'yes';font-family:黑体;mso-ascii-font-family:Arial;
+mso-hansi-font-family:Arial;mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="黑体" >项目资源与成本管理</font></span></b><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h2><h3><a name="_Toc213257701" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >5.1 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >资源需求分析</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(列出项目所需的人力、物力和财力资源)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257702" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >5.2 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >资源分配计划</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(说明资源的分配策略和使用计划)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257703" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >5.3 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >成本估算与预算</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(预留成本估算表占位符,说明预算控制方法)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257704" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >5.4 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >资源优化策略</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(说明如何提高资源利用效率,降低浪费)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h2><a name="_Toc213257705" ></a><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><a name="项目风险管理与应对策略" >6. </a></span></b><b><span style="mso-spacerun:'yes';font-family:黑体;mso-ascii-font-family:Arial;
+mso-hansi-font-family:Arial;mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="黑体" >项目风险管理与应对策略</font></span></b><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h2><h3><a name="_Toc213257706" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >6.1 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >风险识别</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(预留风险识别表占位符,列出潜在风险点)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257707" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >6.2 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >风险评估</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(说明风险评估方法,如概率影响矩阵)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257708" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >6.3 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >风险应对策略</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(针对识别出的风险,制定相应的应对措施)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257709" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >6.4 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >风险监控与控制</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(说明风险监控的方法和频率,以及风险发生时的处理流程)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h2><a name="_Toc213257710" ></a><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><a name="项目质量管理与保证" >7. </a></span></b><b><span style="mso-spacerun:'yes';font-family:黑体;mso-ascii-font-family:Arial;
+mso-hansi-font-family:Arial;mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="黑体" >项目质量管理与保证</font></span></b><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h2><h3><a name="_Toc213257711" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >7.1 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >质量目标与标准</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(明确项目的质量目标和验收标准)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257712" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >7.2 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >质量保证计划</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(说明项目质量管理的方法和流程)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257713" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >7.3 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >质量控制方法</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(描述如何进行质量控制,包括测试策略、缺陷管理等)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h2><a name="项目沟通与协作机制" ></a><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><a name="_Toc213257714" >8. </a></span></b><b><span style="mso-spacerun:'yes';font-family:黑体;mso-ascii-font-family:Arial;
+mso-hansi-font-family:Arial;mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="黑体" >项目沟通与协作机制</font></span></b><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h2><h3><a name="_Toc213257715" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >8.1 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >沟通需求分析</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(分析项目干系人的沟通需求和期望)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257716" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >8.2 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >沟通计划</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(预留沟通计划表占位符,说明沟通频率、方式和内容)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257717" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >8.3 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >沟通渠道与工具</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(列出项目中使用的沟通渠道和协作工具)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257718" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >8.4 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >沟通问题与解决方案</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(说明沟通中可能出现的问题及应对策略)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h2><a name="_Toc213257719" ></a><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><a name="项目总结与经验教训" >9. </a></span></b><b><span style="mso-spacerun:'yes';font-family:黑体;mso-ascii-font-family:Arial;
+mso-hansi-font-family:Arial;mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="黑体" >项目总结与经验教训</font></span></b><b><span style="mso-spacerun:'yes';font-family:Arial;mso-fareast-font-family:黑体;
+mso-bidi-font-family:'Times New Roman';font-weight:bold;font-size:16.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h2><h3><a name="_Toc213257720" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >9.1 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目成果总结</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(对比计划与实际完成情况,突出关键交付物)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257721" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >9.2 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目经验教训</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(分析项目过程中的成功经验和不足之处)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257722" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >9.3 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >项目绩效评估</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(评估项目在进度、质量、成本等方面的完成情况)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><h3><a name="_Toc213257723" ></a><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" >9.4 </span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >未来改进方向</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><br></span></b><b><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-weight:bold;
+font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><font face="宋体" >(基于项目经验,提出未来可优化的方面)</font></span></b><b><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-weight:bold;font-size:16.0000pt;mso-font-kerning:1.0000pt;" ><o:p></o:p></span></b></h3><p class=MsoNormal ><span style="mso-spacerun:'yes';font-family:'Times New Roman';mso-fareast-font-family:宋体;
+font-size:12.0000pt;mso-font-kerning:1.0000pt;" ><o:p>&nbsp;</o:p></span></p><p class=MsoNormal  style="line-height:130%;" ><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Times New Roman';
+mso-hansi-font-family:'Times New Roman';mso-bidi-font-family:'Times New Roman';font-size:12.0000pt;
+mso-font-kerning:1.0000pt;" ><o:p>&nbsp;</o:p></span></p></div><!--EndFragment--></body></html>

+ 13 - 13
campus_health_app/frontend/campus-health-app/package-lock.json

@@ -443,9 +443,9 @@
       }
       }
     },
     },
     "node_modules/@angular/cdk": {
     "node_modules/@angular/cdk": {
-      "version": "20.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-20.2.5.tgz",
-      "integrity": "sha512-1cpR/5jeKXLR1D+PsEvRn0QhSWD3/AjtbugJF5nlx/7L90YXhNFCmNAxAkdFKSn4YIDoPwMHgvOpS7yb51wohQ==",
+      "version": "20.2.14",
+      "resolved": "https://registry.npmmirror.com/@angular/cdk/-/cdk-20.2.14.tgz",
+      "integrity": "sha512-7bZxc01URbiPiIBWThQ69XwOxVduqEKN4PhpbF2AAyfMc/W8Hcr4VoIJOwL0O1Nkq5beS8pCAqoOeIgFyXd/kg==",
       "license": "MIT",
       "license": "MIT",
       "peer": true,
       "peer": true,
       "dependencies": {
       "dependencies": {
@@ -5429,9 +5429,9 @@
       }
       }
     },
     },
     "node_modules/eventemitter3": {
     "node_modules/eventemitter3": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
-      "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+      "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
       "dev": true,
       "dev": true,
       "license": "MIT"
       "license": "MIT"
     },
     },
@@ -6036,6 +6036,13 @@
         "node": ">= 14"
         "node": ">= 14"
       }
       }
     },
     },
+    "node_modules/http-proxy/node_modules/eventemitter3": {
+      "version": "4.0.7",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+      "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/https-proxy-agent": {
     "node_modules/https-proxy-agent": {
       "version": "7.0.6",
       "version": "7.0.6",
       "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
       "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
@@ -6971,13 +6978,6 @@
         "node": ">=20.0.0"
         "node": ">=20.0.0"
       }
       }
     },
     },
-    "node_modules/listr2/node_modules/eventemitter3": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
-      "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/listr2/node_modules/wrap-ansi": {
     "node_modules/listr2/node_modules/wrap-ansi": {
       "version": "9.0.2",
       "version": "9.0.2",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",

BIN
campus_health_app/frontend/campus-health-app/public/2407457c-1b37-4026-8165-8b645c5ed3bc.png


BIN
campus_health_app/frontend/campus-health-app/public/9abcd339-bcc0-4d2c-a1d4-1cbae4f039c0.png


BIN
campus_health_app/frontend/campus-health-app/public/assets/images/black-cat.png


+ 506 - 0
campus_health_app/frontend/campus-health-app/public/dashboard-option1.html

@@ -0,0 +1,506 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+  <meta charset="UTF-8" />
+  <title>校园健康仪表盘 - 方案一:卡片总览</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1" />
+  <style>
+    :root {
+      --bg: #f5f7fa;
+      --panel: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+      --card: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+      --header-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+      --border-subtle: #e2e8f0;
+      --accent: #4f46e5;
+      --accent-secondary: #7c3aed;
+      --accent-soft: rgba(79, 70, 229, 0.1);
+      --accent-blue: #1a73e8;
+      --text-main: #1e293b;
+      --text-muted: #64748b;
+    }
+
+    * {
+      box-sizing: border-box;
+      margin: 0;
+      padding: 0;
+    }
+
+    body {
+      font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;
+      background: var(--bg);
+      color: var(--text-main);
+      min-height: 100vh;
+    }
+
+    .layout {
+      max-width: 1200px;
+      margin: 0 auto;
+      display: flex;
+      flex-direction: column;
+      gap: 24px;
+    }
+
+    .top-header {
+      background: var(--header-gradient);
+      color: white;
+      padding: 24px 32px;
+      border-radius: 0 0 20px 20px;
+      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
+    }
+
+    header {
+      display: flex;
+      justify-content: space-between;
+      align-items: flex-start;
+      gap: 16px;
+    }
+
+    .title-group h1 {
+      font-size: 28px;
+      margin-bottom: 6px;
+      color: white;
+    }
+
+    .title-group p {
+      font-size: 14px;
+      color: rgba(255, 255, 255, 0.85);
+      max-width: 520px;
+    }
+
+    .quick-actions {
+      display: flex;
+      flex-wrap: wrap;
+      gap: 10px;
+      justify-content: flex-end;
+    }
+
+    .quick-actions button {
+      border: none;
+      border-radius: 12px;
+      padding: 10px 16px;
+      font-size: 13px;
+      cursor: pointer;
+      background: rgba(255, 255, 255, 0.2);
+      color: white;
+      font-weight: 600;
+      backdrop-filter: blur(10px);
+      border: 1px solid rgba(255, 255, 255, 0.3);
+      transition: all 0.3s ease;
+    }
+
+    .quick-actions button.primary {
+      background: white;
+      color: #4f46e5;
+    }
+
+    .quick-actions button:hover {
+      transform: translateY(-2px);
+      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+    }
+
+    .main-content {
+      padding: 0 24px 24px;
+    }
+
+    .quick-stats {
+      display: grid;
+      grid-template-columns: repeat(auto-fit,minmax(200px,1fr));
+      gap: 16px;
+      margin-bottom: 24px;
+    }
+
+    .stat-card {
+      background: var(--panel);
+      border-radius: 16px;
+      padding: 16px 18px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
+      transition: all 0.3s ease;
+    }
+
+    .stat-card:hover {
+      transform: translateY(-4px);
+      box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12);
+    }
+
+    .stat-label {
+      font-size: 12px;
+      color: var(--text-muted);
+      margin-bottom: 6px;
+    }
+
+    .stat-main-row {
+      display: flex;
+      align-items: baseline;
+      justify-content: space-between;
+      gap: 8px;
+    }
+
+    .stat-value {
+      font-size: 22px;
+      font-weight: 700;
+      color: var(--text-main);
+    }
+
+    .stat-extra {
+      font-size: 11px;
+      color: var(--text-muted);
+      text-align: right;
+    }
+
+    .stat-trend {
+      margin-top: 8px;
+      font-size: 12px;
+      color: var(--accent);
+      font-weight: 500;
+    }
+
+    .cards-grid {
+      display: grid;
+      grid-template-columns: repeat(auto-fit,minmax(280px,1fr));
+      gap: 20px;
+    }
+
+    .feature-card {
+      background: var(--card);
+      border-radius: 16px;
+      padding: 20px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
+      display: flex;
+      flex-direction: column;
+      gap: 12px;
+      transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+      position: relative;
+      overflow: hidden;
+    }
+
+    .feature-card::before {
+      content: '';
+      position: absolute;
+      top: 0;
+      left: 0;
+      right: 0;
+      height: 4px;
+      background: linear-gradient(90deg, #4f46e5 0%, #7c3aed 100%);
+      transform: scaleX(0);
+      transition: transform 0.3s ease;
+    }
+
+    .feature-card:hover {
+      transform: translateY(-6px);
+      box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15);
+    }
+
+    .feature-card:hover::before {
+      transform: scaleX(1);
+    }
+
+    .feature-header {
+      display: flex;
+      justify-content: space-between;
+      align-items: flex-start;
+      gap: 10px;
+    }
+
+    .feature-title {
+      font-size: 16px;
+      font-weight: 600;
+      color: var(--text-main);
+      margin-bottom: 2px;
+    }
+
+    .feature-sub {
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .feature-icon {
+      font-size: 24px;
+    }
+
+    .feature-main {
+      font-size: 26px;
+      font-weight: 700;
+      color: var(--text-main);
+    }
+
+    .feature-main span.unit {
+      font-size: 13px;
+      font-weight: 400;
+      color: var(--text-muted);
+      margin-left: 4px;
+    }
+
+    .feature-tags {
+      display: flex;
+      flex-wrap: wrap;
+      gap: 6px;
+    }
+
+    .feature-tag {
+      font-size: 11px;
+      padding: 4px 10px;
+      border-radius: 999px;
+      background: #f1f5f9;
+      color: var(--text-muted);
+      border: 1px solid var(--border-subtle);
+    }
+
+    .feature-footer {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      font-size: 12px;
+      color: var(--text-muted);
+      margin-top: 6px;
+    }
+
+    .feature-footer button {
+      border-radius: 10px;
+      border: none;
+      padding: 8px 14px;
+      font-size: 12px;
+      cursor: pointer;
+      background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
+      color: white;
+      font-weight: 500;
+      transition: all 0.3s ease;
+    }
+
+    .feature-footer button:hover {
+      transform: translateY(-2px);
+      box-shadow: 0 4px 12px rgba(79, 70, 229, 0.4);
+    }
+
+    .pill {
+      display: inline-flex;
+      align-items: center;
+      padding: 4px 10px;
+      border-radius: 999px;
+      background: var(--accent-soft);
+      color: var(--accent);
+      font-size: 11px;
+      font-weight: 500;
+      gap: 4px;
+    }
+
+    .pill-dot {
+      width: 6px;
+      height: 6px;
+      border-radius: 999px;
+      background: var(--accent);
+    }
+
+    footer {
+      font-size: 12px;
+      color: var(--text-muted);
+      text-align: right;
+      margin-top: 12px;
+      padding: 0 24px;
+    }
+
+    @media (max-width: 768px) {
+      .top-header {
+        padding: 20px;
+        border-radius: 0 0 16px 16px;
+      }
+
+      header {
+        flex-direction: column;
+      }
+
+      .quick-actions {
+        justify-content: flex-start;
+      }
+
+      .main-content {
+        padding: 0 16px 16px;
+      }
+    }
+  </style>
+</head>
+<body>
+  <div class="layout">
+    <div class="top-header">
+      <header>
+        <div class="title-group">
+          <h1>校园健康仪表盘</h1>
+          <p>在这一页快速查看体重、睡眠、饮食、运动和健康监测的关键数据,用最少的操作完成日常健康管理。</p>
+        </div>
+        <div class="quick-actions">
+          <button class="primary">+ 记录今日体重</button>
+          <button>+ 添加运动记录</button>
+          <button>查看历史趋势</button>
+        </div>
+      </header>
+    </div>
+
+    <div class="main-content">
+    <section class="quick-stats">
+      <div class="stat-card">
+        <div class="stat-label">今日体重</div>
+        <div class="stat-main-row">
+          <div class="stat-value">65.2 kg</div>
+          <div class="stat-extra">目标 63 kg</div>
+        </div>
+        <div class="stat-trend">一周内变化 -0.8 kg</div>
+      </div>
+
+      <div class="stat-card">
+        <div class="stat-label">昨晚睡眠</div>
+        <div class="stat-main-row">
+          <div class="stat-value">7 小时 20 分</div>
+          <div class="stat-extra">评分 86 / 100</div>
+        </div>
+        <div class="stat-trend">近 7 天平均 7.1 小时</div>
+      </div>
+
+      <div class="stat-card">
+        <div class="stat-label">今日饮食热量</div>
+        <div class="stat-main-row">
+          <div class="stat-value">1,580 kcal</div>
+          <div class="stat-extra">目标 2,000 kcal</div>
+        </div>
+        <div class="stat-trend">剩余 420 kcal 可摄入</div>
+      </div>
+
+      <div class="stat-card">
+        <div class="stat-label">今日运动与步数</div>
+        <div class="stat-main-row">
+          <div class="stat-value">8,230 步</div>
+          <div class="stat-extra">已完成目标的 82%</div>
+        </div>
+        <div class="stat-trend">运动时长 42 分钟</div>
+      </div>
+    </section>
+
+    <section class="cards-grid">
+      <article class="feature-card">
+        <div class="feature-header">
+          <div>
+            <div class="feature-title">体重管理</div>
+            <div class="feature-sub">记录体重 / 查看 BMI 和趋势</div>
+          </div>
+          <div class="pill"><span class="pill-dot"></span>已开启目标</div>
+        </div>
+        <div class="feature-main">BMI 21.3<span class="unit"> 正常</span></div>
+        <div class="feature-tags">
+          <span class="feature-tag">本周已记录 5 天</span>
+          <span class="feature-tag">距离目标:2.2 kg</span>
+          <span class="feature-tag">最近记录:今天 08:30</span>
+        </div>
+        <div class="feature-footer">
+          <span>建议:保持当前饮食与运动节奏</span>
+          <button>进入体重管理</button>
+        </div>
+      </article>
+
+      <article class="feature-card">
+        <div class="feature-header">
+          <div>
+            <div class="feature-title">睡眠质量</div>
+            <div class="feature-sub">入睡时间、深睡时长与睡眠评分</div>
+          </div>
+          <div class="feature-icon">💤</div>
+        </div>
+        <div class="feature-main">86 / 100<span class="unit"> 良好</span></div>
+        <div class="feature-tags">
+          <span class="feature-tag">平均入睡:23:45</span>
+          <span class="feature-tag">深睡时长:2.1 小时</span>
+          <span class="feature-tag">连续早睡:3 天</span>
+        </div>
+        <div class="feature-footer">
+          <span>小贴士:睡前 1 小时减少使用电子设备</span>
+          <button>查看睡眠详情</button>
+        </div>
+      </article>
+
+      <article class="feature-card">
+        <div class="feature-header">
+          <div>
+            <div class="feature-title">饮食管理</div>
+            <div class="feature-sub">记录三餐、热量与营养结构</div>
+          </div>
+          <div class="feature-icon">🥗</div>
+        </div>
+        <div class="feature-main">1,580 kcal<span class="unit"> 今日已摄入</span></div>
+        <div class="feature-tags">
+          <span class="feature-tag">蛋白质:78 g</span>
+          <span class="feature-tag">碳水:190 g</span>
+          <span class="feature-tag">脂肪:48 g</span>
+        </div>
+        <div class="feature-footer">
+          <span>建议:晚餐控制油炸和高糖食物</span>
+          <button>录入今日饮食</button>
+        </div>
+      </article>
+
+      <article class="feature-card">
+        <div class="feature-header">
+          <div>
+            <div class="feature-title">运动记录</div>
+            <div class="feature-sub">跑步、骑行、力量训练等统一记录</div>
+          </div>
+          <div class="feature-icon">🏃</div>
+        </div>
+        <div class="feature-main">42 分钟<span class="unit"> 今日运动</span></div>
+        <div class="feature-tags">
+          <span class="feature-tag">跑步:3.2 公里</span>
+          <span class="feature-tag">步数:8,230</span>
+          <span class="feature-tag">本周完成 3 / 4 次计划</span>
+        </div>
+        <div class="feature-footer">
+          <span>下一次计划:今晚 19:30 篮球</span>
+          <button>添加运动记录</button>
+        </div>
+      </article>
+
+      <article class="feature-card">
+        <div class="feature-header">
+          <div>
+            <div class="feature-title">健康监测</div>
+            <div class="feature-sub">血压、心率、体脂等指标总览</div>
+          </div>
+          <div class="feature-icon">🩺</div>
+        </div>
+        <div class="feature-main">心率 72<span class="unit"> 次/分</span></div>
+        <div class="feature-tags">
+          <span class="feature-tag">血压:118 / 74 mmHg</span>
+          <span class="feature-tag">体脂率:18.6%</span>
+          <span class="feature-tag">最近一次体检:2025-05-12</span>
+        </div>
+        <div class="feature-footer">
+          <span>状态:整体稳定,无明显异常</span>
+          <button>打开健康监测</button>
+        </div>
+      </article>
+
+      <article class="feature-card">
+        <div class="feature-header">
+          <div>
+            <div class="feature-title">校园服务</div>
+            <div class="feature-sub">餐厅推荐、运动组队与健康资讯</div>
+          </div>
+          <div class="feature-icon">🏫</div>
+        </div>
+        <div class="feature-main">3 个餐厅<span class="unit"> 健康推荐</span></div>
+        <div class="feature-tags">
+          <span class="feature-tag">青春餐厅 · 450m · ⭐4.5</span>
+          <span class="feature-tag">活力食堂 · 620m · ⭐4.2</span>
+          <span class="feature-tag">智慧餐厅 · 800m · ⭐4.7</span>
+        </div>
+        <div class="feature-footer">
+          <span>运动组队:今晚 19:30 篮球活动招募中</span>
+          <button>浏览校园服务</button>
+        </div>
+      </article>
+    </section>
+    </div>
+
+    <footer>
+      方案一 · 卡片总览布局:适合希望在一屏内快速浏览所有健康模块的用户。
+    </footer>
+  </div>
+</body>
+</html>

+ 492 - 0
campus_health_app/frontend/campus-health-app/public/dashboard-option2.html

@@ -0,0 +1,492 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+  <meta charset="UTF-8" />
+  <title>校园健康仪表盘 - 方案二:今日概览 + 趋势</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1" />
+  <style>
+    :root {
+      --bg: #f5f7fa;
+      --panel: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+      --panel-soft: #f8fafc;
+      --header-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+      --border-subtle: #e2e8f0;
+      --accent: #4f46e5;
+      --accent-secondary: #7c3aed;
+      --accent-blue: #1a73e8;
+      --accent-yellow: #f59e0b;
+      --text-main: #1e293b;
+      --text-muted: #64748b;
+    }
+
+    * {
+      box-sizing: border-box;
+      margin: 0;
+      padding: 0;
+    }
+
+    body {
+      font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;
+      background: var(--bg);
+      color: var(--text-main);
+      min-height: 100vh;
+    }
+
+    .layout {
+      max-width: 1200px;
+      margin: 0 auto;
+      display: flex;
+      flex-direction: column;
+      gap: 20px;
+    }
+
+    .top-header {
+      background: var(--header-gradient);
+      color: white;
+      padding: 24px 32px;
+      border-radius: 0 0 20px 20px;
+      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
+    }
+
+    header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      gap: 16px;
+    }
+
+    .title-group h1 {
+      font-size: 26px;
+      margin-bottom: 4px;
+      color: white;
+    }
+
+    .title-group p {
+      font-size: 13px;
+      color: rgba(255, 255, 255, 0.85);
+    }
+
+    .date-pill {
+      padding: 8px 14px;
+      border-radius: 12px;
+      font-size: 12px;
+      color: white;
+      background: rgba(255, 255, 255, 0.2);
+      backdrop-filter: blur(10px);
+      border: 1px solid rgba(255, 255, 255, 0.3);
+    }
+
+    .main-content {
+      padding: 0 24px 24px;
+    }
+
+    .main-layout {
+      display: grid;
+      grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
+      gap: 18px;
+      align-items: flex-start;
+    }
+
+    .card {
+      background: var(--panel);
+      border-radius: 18px;
+      padding: 20px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
+    }
+
+    .card-header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      margin-bottom: 12px;
+    }
+
+    .card-header h2 {
+      font-size: 18px;
+      color: var(--text-main);
+    }
+
+    .badge-row {
+      display: flex;
+      flex-wrap: wrap;
+      gap: 8px;
+      margin-top: 8px;
+    }
+
+    .badge {
+      font-size: 11px;
+      padding: 4px 10px;
+      border-radius: 999px;
+      background: #f1f5f9;
+      border: 1px solid var(--border-subtle);
+      color: var(--text-muted);
+    }
+
+    .badge.accent {
+      background: rgba(79, 70, 229, 0.1);
+      border-color: rgba(79, 70, 229, 0.3);
+      color: var(--accent);
+    }
+
+    .today-grid {
+      display: grid;
+      grid-template-columns: repeat(2,minmax(0,1fr));
+      gap: 14px;
+      margin-top: 14px;
+    }
+
+    .today-item {
+      background: #ffffff;
+      border-radius: 14px;
+      padding: 14px 16px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
+      transition: all 0.3s ease;
+    }
+
+    .today-item:hover {
+      transform: translateY(-2px);
+      box-shadow: 0 6px 20px rgba(0, 0, 0, 0.1);
+    }
+
+    .today-label {
+      font-size: 12px;
+      color: var(--text-muted);
+      margin-bottom: 4px;
+    }
+
+    .today-main-row {
+      display: flex;
+      justify-content: space-between;
+      align-items: baseline;
+      gap: 8px;
+    }
+
+    .today-value {
+      font-size: 22px;
+      font-weight: 700;
+      color: var(--text-main);
+    }
+
+    .today-sub {
+      font-size: 11px;
+      color: var(--text-muted);
+      text-align: right;
+    }
+
+    .trend-row {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      margin-top: 10px;
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .trend-positive { color: var(--accent); font-weight: 500; }
+    .trend-warning { color: var(--accent-yellow); font-weight: 500; }
+
+    .section-title {
+      font-size: 13px;
+      color: var(--text-muted);
+      margin-bottom: 8px;
+    }
+
+    .module-list {
+      display: flex;
+      flex-direction: column;
+      gap: 0;
+      margin-top: 6px;
+    }
+
+    .module-item {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      gap: 12px;
+      padding: 12px 0;
+      border-bottom: 1px solid var(--border-subtle);
+      cursor: pointer;
+      transition: all 0.2s ease;
+    }
+
+    .module-item:hover {
+      padding-left: 8px;
+    }
+
+    .module-main {
+      display: flex;
+      flex-direction: column;
+      gap: 4px;
+    }
+
+    .module-title {
+      font-size: 14px;
+      font-weight: 600;
+      color: var(--text-main);
+    }
+
+    .module-desc {
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .module-meta {
+      font-size: 11px;
+      color: var(--text-muted);
+    }
+
+    .module-cta {
+      font-size: 12px;
+      color: var(--accent);
+      font-weight: 500;
+    }
+
+    .circle-score {
+      width: 80px;
+      height: 80px;
+      border-radius: 999px;
+      border: 6px solid rgba(79, 70, 229, 0.15);
+      border-top-color: var(--accent);
+      border-right-color: var(--accent);
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      flex-direction: column;
+      font-size: 18px;
+      font-weight: 700;
+      color: var(--accent);
+      background: white;
+      box-shadow: 0 4px 12px rgba(79, 70, 229, 0.15);
+    }
+
+    .circle-score span {
+      font-size: 10px;
+      font-weight: 400;
+      color: var(--text-muted);
+    }
+
+    .right-column {
+      display: flex;
+      flex-direction: column;
+      gap: 14px;
+    }
+
+    .right-card {
+      background: #ffffff;
+      border-radius: 16px;
+      padding: 16px 18px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
+    }
+
+    .right-card-header {
+      display: flex;
+      justify-content: space-between;
+      margin-bottom: 10px;
+      font-size: 14px;
+      font-weight: 600;
+      color: var(--text-main);
+    }
+
+    .tag-row {
+      display: flex;
+      flex-direction: column;
+      gap: 8px;
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .tag-dot {
+      width: 8px;
+      height: 8px;
+      border-radius: 999px;
+      background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
+      margin-right: 6px;
+    }
+
+    .tag-inline {
+      display: inline-flex;
+      align-items: center;
+      gap: 4px;
+      padding: 6px 0;
+    }
+
+    footer {
+      font-size: 12px;
+      color: var(--text-muted);
+      text-align: right;
+      padding: 0 24px;
+    }
+
+    @media (max-width: 900px) {
+      .main-layout {
+        grid-template-columns: minmax(0,1fr);
+      }
+    }
+
+    @media (max-width: 768px) {
+      .top-header { padding: 20px; border-radius: 0 0 16px 16px; }
+      header { flex-direction: column; align-items: flex-start; }
+      .main-content { padding: 0 16px 16px; }
+    }
+  </style>
+</head>
+<body>
+  <div class="layout">
+    <div class="top-header">
+      <header>
+        <div class="title-group">
+          <h1>今日健康概览</h1>
+          <p>先给出今天的总体评分和提醒,再按模块展示关键变化,方便你快速决定接下来要做什么。</p>
+        </div>
+        <div class="date-pill">2025-05-18 · 周日 · 已同步校园智能硬件</div>
+      </header>
+    </div>
+
+    <div class="main-content">
+
+    <div class="main-layout">
+      <section class="card">
+        <div class="card-header">
+          <h2>今日总体健康评分</h2>
+          <div class="circle-score">86<span>综合评分</span></div>
+        </div>
+
+        <div class="badge-row">
+          <span class="badge accent">体重接近目标</span>
+          <span class="badge">睡眠略有不足</span>
+          <span class="badge">今日饮食偏油腻</span>
+          <span class="badge">运动完成 80% 目标</span>
+        </div>
+
+        <p class="section-title" style="margin-top: 12px;">今日关键数据</p>
+        <div class="today-grid">
+          <div class="today-item">
+            <div class="today-label">体重管理</div>
+            <div class="today-main-row">
+              <div class="today-value">65.2 kg</div>
+              <div class="today-sub">目标 63 kg · BMI 21.3</div>
+            </div>
+            <div class="trend-row">
+              <span class="trend-positive">较上周 -0.3 kg</span>
+              <span>建议:保持当前运动频率</span>
+            </div>
+          </div>
+
+          <div class="today-item">
+            <div class="today-label">睡眠质量</div>
+            <div class="today-main-row">
+              <div class="today-value">6.5 小时</div>
+              <div class="today-sub">评分 78 / 100</div>
+            </div>
+            <div class="trend-row">
+              <span class="trend-warning">连续 2 天低于 7 小时</span>
+              <span>建议:今晚 23:00 前入睡</span>
+            </div>
+          </div>
+
+          <div class="today-item">
+            <div class="today-label">饮食管理</div>
+            <div class="today-main-row">
+              <div class="today-value">1,820 kcal</div>
+              <div class="today-sub">目标 2,000 kcal</div>
+            </div>
+            <div class="trend-row">
+              <span class="trend-positive">蛋白质摄入充足</span>
+              <span>晚餐建议多吃蔬菜</span>
+            </div>
+          </div>
+
+          <div class="today-item">
+            <div class="today-label">运动记录</div>
+            <div class="today-main-row">
+              <div class="today-value">9,200 步</div>
+              <div class="today-sub">运动 45 分钟</div>
+            </div>
+            <div class="trend-row">
+              <span class="trend-positive">已完成 90% 目标</span>
+              <span>可适当加入拉伸放松</span>
+            </div>
+          </div>
+        </div>
+      </section>
+
+      <section class="right-column">
+        <div class="right-card">
+          <div class="right-card-header">
+            <span>按模块查看 · 一键进入功能</span>
+            <span style="font-size:11px;color:var(--text-muted);">点击文字即对应到系统中的模块</span>
+          </div>
+
+          <div class="module-list">
+            <div class="module-item">
+              <div class="module-main">
+                <div class="module-title">体重管理</div>
+                <div class="module-desc">查看体重曲线、BMI 变化与目标完成情况。</div>
+                <div class="module-meta">最近记录:今天 08:30 · 连续记录 7 天</div>
+              </div>
+              <div class="module-cta">进入 &gt;</div>
+            </div>
+
+            <div class="module-item">
+              <div class="module-main">
+                <div class="module-title">睡眠质量</div>
+                <div class="module-desc">睡眠时长、深睡比例和入睡时间一目了然。</div>
+                <div class="module-meta">近 7 天平均 7.1 小时 · 深睡占比 27%</div>
+              </div>
+              <div class="module-cta">进入 &gt;</div>
+            </div>
+
+            <div class="module-item">
+              <div class="module-main">
+                <div class="module-title">饮食管理</div>
+                <div class="module-desc">按三餐记录营养摄入,实时计算总热量。</div>
+                <div class="module-meta">今日已录入:早餐、午餐 · 晚餐待补充</div>
+              </div>
+              <div class="module-cta">进入 &gt;</div>
+            </div>
+
+            <div class="module-item">
+              <div class="module-main">
+                <div class="module-title">运动记录</div>
+                <div class="module-desc">跑步、步数、校园运动队活动统一管理。</div>
+                <div class="module-meta">本周已完成 3 / 4 次计划运动</div>
+              </div>
+              <div class="module-cta">进入 &gt;</div>
+            </div>
+
+            <div class="module-item" style="border-bottom:none;">
+              <div class="module-main">
+                <div class="module-title">健康监测</div>
+                <div class="module-desc">血压、心率、体脂率等体征指标集中查看。</div>
+                <div class="module-meta">最近一次测量:血压 118 / 74 · 心率 72 次/分</div>
+              </div>
+              <div class="module-cta">进入 &gt;</div>
+            </div>
+          </div>
+        </div>
+
+        <div class="right-card">
+          <div class="right-card-header">
+            <span>提醒与待办</span>
+            <span style="font-size:11px;color:var(--text-muted);">引导用户下一步操作</span>
+          </div>
+          <div class="tag-row">
+            <span class="tag-inline"><span class="tag-dot"></span>今晚 23:00 前完成入睡打卡</span>
+            <span class="tag-inline"><span class="tag-dot"></span>晚餐后补充一次饮食记录</span>
+            <span class="tag-inline"><span class="tag-dot"></span>本周再完成一次 30 分钟中强度运动</span>
+          </div>
+        </div>
+      </section>
+    </div>
+
+    </div>
+
+    <footer>
+      方案二 · 今日概览 + 趋势:首先给出综合评分,再引导用户进入各模块处理当天重点事项。
+    </footer>
+  </div>
+</body>
+</html>

+ 502 - 0
campus_health_app/frontend/campus-health-app/public/dashboard-option3.html

@@ -0,0 +1,502 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+  <meta charset="UTF-8" />
+  <title>校园健康仪表盘 - 方案三:侧边导航 + 快捷入口</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1" />
+  <style>
+    :root {
+      --bg: #f5f7fa;
+      --sidebar: linear-gradient(180deg, #f8fafc 0%, #f1f5f9 100%);
+      --main: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+      --header-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+      --border-subtle: #e2e8f0;
+      --accent: #4f46e5;
+      --accent-secondary: #7c3aed;
+      --accent-blue: #1a73e8;
+      --text-main: #1e293b;
+      --text-muted: #64748b;
+    }
+
+    * {
+      box-sizing: border-box;
+      margin: 0;
+      padding: 0;
+    }
+
+    body {
+      font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,sans-serif;
+      background: var(--bg);
+      color: var(--text-main);
+      min-height: 100vh;
+      padding: 20px;
+    }
+
+    .shell {
+      max-width: 1200px;
+      margin: 0 auto;
+      display: grid;
+      grid-template-columns: 240px minmax(0,1fr);
+      gap: 20px;
+    }
+
+    .sidebar {
+      background: var(--sidebar);
+      border-radius: 16px;
+      padding: 20px 16px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
+      display: flex;
+      flex-direction: column;
+      gap: 20px;
+      height: fit-content;
+      position: sticky;
+      top: 20px;
+    }
+
+    .brand {
+      display: flex;
+      flex-direction: column;
+      gap: 4px;
+      padding-bottom: 16px;
+      border-bottom: 1px solid var(--border-subtle);
+    }
+
+    .brand-title {
+      font-size: 18px;
+      font-weight: 700;
+      background: var(--header-gradient);
+      -webkit-background-clip: text;
+      -webkit-text-fill-color: transparent;
+      background-clip: text;
+    }
+
+    .brand-sub {
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .nav-group-title {
+      font-size: 11px;
+      color: var(--text-muted);
+      text-transform: uppercase;
+      letter-spacing: 0.5px;
+      margin-bottom: 8px;
+    }
+
+    .nav-list {
+      display: flex;
+      flex-direction: column;
+      gap: 4px;
+    }
+
+    .nav-item {
+      display: flex;
+      align-items: center;
+      gap: 10px;
+      padding: 10px 12px;
+      border-radius: 10px;
+      cursor: pointer;
+      font-size: 13px;
+      color: var(--text-muted);
+      transition: all 0.2s ease;
+      border-left: 3px solid transparent;
+    }
+
+    .nav-item span.icon {
+      width: 20px;
+      text-align: center;
+    }
+
+    .nav-item.active {
+      background: rgba(79, 70, 229, 0.1);
+      color: var(--accent);
+      font-weight: 600;
+      border-left-color: var(--accent);
+    }
+
+    .nav-item:hover {
+      background: rgba(79, 70, 229, 0.05);
+      color: var(--text-main);
+      transform: translateX(4px);
+    }
+
+    .nav-secondary {
+      margin-top: 8px;
+      border-top: 1px solid var(--border-subtle);
+      padding-top: 16px;
+    }
+
+    .sidebar-footer {
+      margin-top: auto;
+      font-size: 12px;
+      color: var(--text-muted);
+      padding: 14px;
+      background: rgba(79, 70, 229, 0.05);
+      border-radius: 10px;
+      line-height: 1.5;
+    }
+
+    .sidebar-footer strong { 
+      color: var(--accent);
+      font-weight: 700;
+    }
+
+    .main {
+      background: var(--main);
+      border-radius: 16px;
+      padding: 24px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
+      display: flex;
+      flex-direction: column;
+      gap: 20px;
+    }
+
+    .main-header {
+      display: flex;
+      justify-content: space-between;
+      align-items: flex-start;
+      gap: 12px;
+    }
+
+    .main-title h1 {
+      font-size: 24px;
+      font-weight: 700;
+      margin-bottom: 6px;
+      color: var(--text-main);
+    }
+
+    .main-title p {
+      font-size: 13px;
+      color: var(--text-muted);
+    }
+
+    .main-actions {
+      display: flex;
+      flex-wrap: wrap;
+      gap: 10px;
+      justify-content: flex-end;
+    }
+
+    .main-actions button {
+      border-radius: 10px;
+      border: none;
+      padding: 10px 16px;
+      font-size: 13px;
+      cursor: pointer;
+      background: #ffffff;
+      color: var(--text-main);
+      border: 1px solid var(--border-subtle);
+      font-weight: 500;
+      transition: all 0.3s ease;
+    }
+
+    .main-actions button:hover {
+      transform: translateY(-2px);
+      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+    }
+
+    .main-actions button.primary {
+      background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
+      color: white;
+      border-color: transparent;
+      box-shadow: 0 4px 12px rgba(79, 70, 229, 0.3);
+    }
+
+    .main-actions button.primary:hover {
+      box-shadow: 0 6px 20px rgba(79, 70, 229, 0.4);
+    }
+
+    .grid {
+      display: grid;
+      grid-template-columns: minmax(0,1.3fr) minmax(0,1fr);
+      gap: 16px;
+      align-items: flex-start;
+    }
+
+    .highlight-card {
+      background: #ffffff;
+      border-radius: 14px;
+      padding: 18px 20px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
+      transition: all 0.3s ease;
+    }
+
+    .highlight-card:hover {
+      transform: translateY(-2px);
+      box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
+    }
+
+    .highlight-header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      margin-bottom: 12px;
+    }
+
+    .highlight-header h2 {
+      font-size: 16px;
+      font-weight: 600;
+      color: var(--text-main);
+    }
+
+    .pill {
+      font-size: 11px;
+      padding: 4px 10px;
+      border-radius: 999px;
+      background: rgba(79, 70, 229, 0.1);
+      color: var(--accent);
+      font-weight: 500;
+    }
+
+    .highlight-body {
+      display: grid;
+      grid-template-columns: repeat(3,minmax(0,1fr));
+      gap: 12px;
+      margin-top: 6px;
+    }
+
+    .metric {
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .metric strong {
+      font-size: 20px;
+      font-weight: 700;
+      color: var(--text-main);
+      display: block;
+      margin-bottom: 2px;
+    }
+
+    .highlight-footer {
+      margin-top: 14px;
+      font-size: 12px;
+      color: var(--text-muted);
+      padding-top: 12px;
+      border-top: 1px solid var(--border-subtle);
+    }
+
+    .quick-grid {
+      display: grid;
+      grid-template-columns: repeat(2,minmax(0,1fr));
+      gap: 14px;
+    }
+
+    .quick-card {
+      background: #ffffff;
+      border-radius: 14px;
+      padding: 16px 18px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
+      display: flex;
+      flex-direction: column;
+      gap: 8px;
+      font-size: 13px;
+      transition: all 0.3s ease;
+    }
+
+    .quick-card:hover {
+      transform: translateY(-2px);
+      box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
+    }
+
+    .quick-title-row {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      font-weight: 600;
+      color: var(--text-main);
+    }
+
+    .quick-title-row span.icon { margin-right: 4px; }
+
+    .quick-sub {
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .quick-meta {
+      font-size: 11px;
+      color: var(--text-muted);
+    }
+
+    .quick-cta {
+      font-size: 12px;
+      color: var(--accent);
+      font-weight: 500;
+      margin-top: 4px;
+    }
+
+    footer {
+      margin-top: 8px;
+      font-size: 12px;
+      color: var(--text-muted);
+      text-align: right;
+    }
+
+    @media (max-width: 900px) {
+      .shell { grid-template-columns: minmax(0,1fr); }
+      .sidebar { position: static; }
+    }
+
+    @media (max-width: 768px) {
+      body { padding: 12px; }
+      .main-header { flex-direction: column; align-items: flex-start; }
+      .grid { grid-template-columns: minmax(0,1fr); }
+      .highlight-body { grid-template-columns: repeat(2,minmax(0,1fr)); }
+      .quick-grid { grid-template-columns: minmax(0,1fr); }
+    }
+  </style>
+</head>
+<body>
+  <div class="shell">
+    <aside class="sidebar">
+      <div class="brand">
+        <div class="brand-title">校园健康中心</div>
+        <div class="brand-sub">在左侧直接选择你要使用的功能</div>
+      </div>
+
+      <div>
+        <div class="nav-group-title">核心功能</div>
+        <nav class="nav-list">
+          <div class="nav-item active"><span class="icon">🏠</span><span>健康仪表盘</span></div>
+          <div class="nav-item"><span class="icon">⚖️</span><span>体重管理</span></div>
+          <div class="nav-item"><span class="icon">💤</span><span>睡眠质量</span></div>
+          <div class="nav-item"><span class="icon">🥗</span><span>饮食管理</span></div>
+          <div class="nav-item"><span class="icon">🏃</span><span>运动记录</span></div>
+          <div class="nav-item"><span class="icon">🩺</span><span>健康监测</span></div>
+        </nav>
+      </div>
+
+      <div class="nav-secondary">
+        <div class="nav-group-title">常用入口</div>
+        <nav class="nav-list">
+          <div class="nav-item"><span class="icon">➕</span><span>今日一键记录</span></div>
+          <div class="nav-item"><span class="icon">📈</span><span>历史趋势对比</span></div>
+          <div class="nav-item"><span class="icon">⚙️</span><span>个性化目标设置</span></div>
+        </nav>
+      </div>
+
+      <div class="sidebar-footer">
+        今日综合健康评分:<strong>84</strong> / 100 · 已完成 <strong>3</strong> 项关键任务
+      </div>
+    </aside>
+
+    <main class="main">
+      <div class="main-header">
+        <div class="main-title">
+          <h1>今日健康进度</h1>
+          <p>通过左侧导航在不同模块之间快速切换,这里始终展示与你今天最相关的信息。</p>
+        </div>
+        <div class="main-actions">
+          <button class="primary">+ 今日一键记录</button>
+          <button>查看历史趋势</button>
+        </div>
+      </div>
+
+      <div class="grid">
+        <section class="highlight-card">
+          <div class="highlight-header">
+            <h2>重点关注:体重 · 睡眠</h2>
+            <span class="pill">近 7 天整体趋于稳定</span>
+          </div>
+          <div class="highlight-body">
+            <div class="metric">
+              <strong>65.2 kg</strong>
+              当前体重 · 目标 63 kg
+            </div>
+            <div class="metric">
+              <strong>21.3</strong>
+              BMI 指数 · 正常范围
+            </div>
+            <div class="metric">
+              <strong>6.7 小时</strong>
+              昨晚睡眠 · 评分 80 / 100
+            </div>
+          </div>
+          <div class="highlight-footer">
+            建议:保持当前饮食和运动节奏,未来一周继续保证每日 7 小时以上睡眠。
+          </div>
+        </section>
+
+        <section class="highlight-card">
+          <div class="highlight-header">
+            <h2>健康监测</h2>
+            <span class="pill" style="background:rgba(26,115,232,0.1);color:#1a73e8;">来自校园设备</span>
+          </div>
+          <div class="highlight-body" style="grid-template-columns: repeat(2,minmax(0,1fr));">
+            <div class="metric">
+              <strong>118 / 74</strong>
+              血压 mmHg
+            </div>
+            <div class="metric">
+              <strong>72 次/分</strong>
+              静息心率
+            </div>
+            <div class="metric">
+              <strong>18.6%</strong>
+              体脂率
+            </div>
+            <div class="metric">
+              <strong>正常</strong>
+              近 30 天无异常波动
+            </div>
+          </div>
+          <div class="highlight-footer">
+            下次体检提醒:2025-06-01 · 建议保持每月一次校医院体检记录。
+          </div>
+        </section>
+      </div>
+
+      <section class="quick-grid">
+        <article class="quick-card">
+          <div class="quick-title-row">
+            <div><span class="icon">🥗</span>饮食管理</div>
+            <div style="font-size:11px;color:var(--text-muted);">今日 1,820 / 2,000 kcal</div>
+          </div>
+          <div class="quick-sub">已录入早餐、午餐,晚餐待补充。</div>
+          <div class="quick-meta">蛋白质 80 g · 脂肪 50 g · 碳水 210 g</div>
+          <div class="quick-cta">立即录入晚餐 &gt;</div>
+        </article>
+
+        <article class="quick-card">
+          <div class="quick-title-row">
+            <div><span class="icon">🏃</span>运动记录</div>
+            <div style="font-size:11px;color:var(--text-muted);">今日 9,200 步</div>
+          </div>
+          <div class="quick-sub">跑步 30 分钟 · 校园步行 15 分钟。</div>
+          <div class="quick-meta">本周完成 3 / 4 次计划运动 · 消耗约 420 kcal</div>
+          <div class="quick-cta">添加新的运动记录 &gt;</div>
+        </article>
+
+        <article class="quick-card">
+          <div class="quick-title-row">
+            <div><span class="icon">💤</span>睡眠质量</div>
+            <div style="font-size:11px;color:var(--text-muted);">近 7 天 7.1 小时/晚</div>
+          </div>
+          <div class="quick-sub">最近两天入睡时间偏晚,建议提前到 23:00 前。</div>
+          <div class="quick-meta">深睡 27% · 清醒次数 3 次/夜</div>
+          <div class="quick-cta">查看睡眠趋势 &gt;</div>
+        </article>
+
+        <article class="quick-card">
+          <div class="quick-title-row">
+            <div><span class="icon">🩺</span>健康提醒</div>
+            <div style="font-size:11px;color:var(--text-muted);">今日 3 条提示</div>
+          </div>
+          <div class="quick-sub">饮水量略少 · 建议再喝 600 ml 水;今日久坐时间偏长。</div>
+          <div class="quick-meta">下一步:完成一次 5 分钟拉伸或走动</div>
+          <div class="quick-cta">查看全部提醒 &gt;</div>
+        </article>
+      </section>
+
+      <footer>
+        方案三 · 侧边导航 + 快捷入口:适合需要频繁在不同模块间切换的用户,左侧清晰导航,右侧展示当天重点信息和快捷操作。
+      </footer>
+    </main>
+  </div>
+</body>
+</html>

BIN
campus_health_app/frontend/campus-health-app/public/e72d4dd1-3e6a-47b5-86aa-e8fb3119f36a.png


+ 441 - 0
campus_health_app/frontend/campus-health-app/public/weight-option1.html

@@ -0,0 +1,441 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+  <meta charset="UTF-8" />
+  <title>体重管理 - 方案一:关键指标总览</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1" />
+  <style>
+    :root {
+      --bg: #f5f7fa;
+      --panel: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+      --card: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+      --header-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+      --border-subtle: #e2e8f0;
+      --accent: #4f46e5;
+      --accent-secondary: #7c3aed;
+      --accent-soft: rgba(79, 70, 229, 0.08);
+      --accent-danger: #ef4444;
+      --text-main: #1e293b;
+      --text-muted: #64748b;
+    }
+
+    * { box-sizing: border-box; margin: 0; padding: 0; }
+
+    body {
+      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
+      background: var(--bg);
+      color: var(--text-main);
+      min-height: 100vh;
+    }
+
+    .layout {
+      max-width: 1200px;
+      margin: 0 auto;
+      padding-bottom: 24px;
+    }
+
+    .top-header {
+      background: var(--header-gradient);
+      color: white;
+      padding: 16px 24px;
+      border-radius: 0 0 18px 18px;
+      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);
+    }
+
+    header {
+      display: flex;
+      justify-content: space-between;
+      align-items: flex-start;
+      gap: 16px;
+    }
+
+    .title-group h1 {
+      font-size: 22px;
+      margin-bottom: 4px;
+    }
+
+    .title-group p {
+      font-size: 13px;
+      color: rgba(255, 255, 255, 0.9);
+      max-width: 520px;
+    }
+
+    .quick-actions {
+      display: flex;
+      flex-wrap: wrap;
+      gap: 8px;
+      justify-content: flex-end;
+    }
+
+    .quick-actions button {
+      border-radius: 999px;
+      border: 1px solid rgba(255, 255, 255, 0.3);
+      padding: 6px 14px;
+      background: rgba(255, 255, 255, 0.12);
+      color: white;
+      font-size: 12px;
+      cursor: pointer;
+      font-weight: 500;
+      backdrop-filter: blur(8px);
+    }
+
+    .quick-actions button.primary {
+      background: white;
+      color: var(--accent);
+    }
+
+    .main-content {
+      padding: 18px 24px 0;
+      display: flex;
+      flex-direction: column;
+      gap: 18px;
+    }
+
+    /* 顶部关键指标三联卡:体重变化 / 当前体重 / 体脂率 */
+    .kpi-row {
+      display: grid;
+      grid-template-columns: 2.2fr 1.4fr 1.4fr;
+      gap: 16px;
+    }
+
+    .kpi-card {
+      background: var(--panel);
+      border-radius: 16px;
+      padding: 16px 18px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 6px 24px rgba(15, 23, 42, 0.12);
+      display: flex;
+      flex-direction: column;
+      gap: 8px;
+    }
+
+    .kpi-header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .kpi-title {
+      font-weight: 600;
+    }
+
+    .kpi-tag {
+      padding: 2px 8px;
+      border-radius: 999px;
+      background: var(--accent-soft);
+      color: var(--accent);
+      font-size: 11px;
+    }
+
+    .kpi-main {
+      display: flex;
+      align-items: baseline;
+      gap: 6px;
+    }
+
+    .kpi-value-lg {
+      font-size: 28px;
+      font-weight: 700;
+      color: var(--text-main);
+    }
+
+    .kpi-unit {
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .kpi-sub {
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .kpi-change {
+      font-size: 13px;
+      font-weight: 600;
+      color: var(--accent);
+    }
+
+    .kpi-change.negative { color: var(--accent-danger); }
+
+    /* 中部双列:体重趋势 & 体脂率环形图 */
+    .middle-row {
+      display: grid;
+      grid-template-columns: 1.6fr 1.4fr;
+      gap: 16px;
+    }
+
+    .panel {
+      background: var(--card);
+      border-radius: 16px;
+      padding: 16px 18px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
+      display: flex;
+      flex-direction: column;
+      gap: 10px;
+    }
+
+    .panel-header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      font-size: 13px;
+      color: var(--text-muted);
+    }
+
+    .panel-title {
+      font-size: 14px;
+      font-weight: 600;
+      color: var(--text-main);
+    }
+
+    .panel-extra {
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .chart-placeholder {
+      flex: 1;
+      min-height: 180px;
+      border-radius: 12px;
+      border: 1px dashed #d0d7e2;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      color: #a0aec0;
+      font-size: 13px;
+      background: radial-gradient(circle at top left, rgba(102,126,234,0.06), transparent 60%);
+    }
+
+    /* 体脂率环形 + 数值 */
+    .ring-layout {
+      display: flex;
+      gap: 16px;
+      align-items: center;
+    }
+
+    .ring {
+      width: 150px;
+      height: 150px;
+      border-radius: 50%;
+      background: conic-gradient(var(--accent) 0 220deg, #e5edff 0 360deg);
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      box-shadow: 0 8px 24px rgba(79, 70, 229, 0.25);
+    }
+
+    .ring-inner {
+      width: 108px;
+      height: 108px;
+      border-radius: 50%;
+      background: white;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+      gap: 4px;
+    }
+
+    .ring-main {
+      font-size: 22px;
+      font-weight: 700;
+      color: var(--accent);
+    }
+
+    .ring-sub {
+      font-size: 11px;
+      color: var(--text-muted);
+    }
+
+    .ring-text {
+      flex: 1;
+      display: flex;
+      flex-direction: column;
+      gap: 6px;
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .ring-text-strong { color: var(--text-main); font-weight: 600; }
+
+    /* 底部:操作与说明 */
+    .bottom-row {
+      display: grid;
+      grid-template-columns: 1.6fr 1.4fr;
+      gap: 16px;
+    }
+
+    .action-chips {
+      display: flex;
+      flex-wrap: wrap;
+      gap: 8px;
+    }
+
+    .chip-btn {
+      border-radius: 999px;
+      border: 1px solid var(--border-subtle);
+      padding: 6px 12px;
+      font-size: 12px;
+      background: white;
+      cursor: pointer;
+      color: var(--text-muted);
+    }
+
+    .chip-btn.primary {
+      background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
+      color: white;
+      border: none;
+    }
+
+    .tips-list {
+      list-style: none;
+      display: flex;
+      flex-direction: column;
+      gap: 4px;
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .tips-list li::before {
+      content: '• ';
+      color: var(--accent);
+    }
+
+    footer {
+      margin-top: 12px;
+      font-size: 11px;
+      color: var(--text-muted);
+      text-align: right;
+      padding: 0 24px;
+    }
+
+    @media (max-width: 900px) {
+      .kpi-row { grid-template-columns: 1fr; }
+      .middle-row, .bottom-row { grid-template-columns: 1fr; }
+      .ring-layout { flex-direction: column; align-items: flex-start; }
+    }
+  </style>
+</head>
+<body>
+  <div class="layout">
+    <div class="top-header">
+      <header>
+        <div class="title-group">
+          <h1>体重管理 · 关键指标总览</h1>
+          <p>一眼看到最近体重变化、当前体重与体脂率,用最直观的方式判断自己目前所处的阶段。</p>
+        </div>
+        <div class="quick-actions">
+          <button class="primary">+ 录入今日体重</button>
+          <button>查看详细趋势</button>
+          <button>调整体重目标</button>
+        </div>
+      </header>
+    </div>
+
+    <div class="main-content">
+      <!-- 顶部:体重变化 / 当前体重 / 体脂率 -->
+      <section class="kpi-row">
+        <div class="kpi-card">
+          <div class="kpi-header">
+            <span class="kpi-title">最近 30 天体重变化</span>
+            <span class="kpi-tag">趋势总览</span>
+          </div>
+          <div class="kpi-main">
+            <span class="kpi-value-lg">-2.4</span>
+            <span class="kpi-unit">kg</span>
+          </div>
+          <div class="kpi-sub">从 67.6kg 调整至 65.2kg,目标 63kg,已完成目标的 <span class="kpi-change">60%</span></div>
+        </div>
+
+        <div class="kpi-card">
+          <div class="kpi-header">
+            <span class="kpi-title">当前体重</span>
+            <span class="kpi-tag">今日记录</span>
+          </div>
+          <div class="kpi-main">
+            <span class="kpi-value-lg">65.2</span>
+            <span class="kpi-unit">kg</span>
+          </div>
+          <div class="kpi-sub">比上次 {{'−0.4'}}kg · 与目标差距 2.2kg</div>
+        </div>
+
+        <div class="kpi-card">
+          <div class="kpi-header">
+            <span class="kpi-title">当前体脂率</span>
+            <span class="kpi-tag">身体成分</span>
+          </div>
+          <div class="kpi-main">
+            <span class="kpi-value-lg">18.6</span>
+            <span class="kpi-unit">%</span>
+          </div>
+          <div class="kpi-sub">较 30 天前下降 <span class="kpi-change">-1.2%</span> · 处于健康区间</div>
+        </div>
+      </section>
+
+      <!-- 中部:体重趋势 + 体脂率环形图 -->
+      <section class="middle-row">
+        <div class="panel">
+          <div class="panel-header">
+            <span class="panel-title">体重趋势</span>
+            <span class="panel-extra">最近 90 天 · 日均波动 0.6kg</span>
+          </div>
+          <div class="chart-placeholder">此处为折线图占位:展示 90 天体重变化曲线</div>
+        </div>
+
+        <div class="panel">
+          <div class="panel-header">
+            <span class="panel-title">体脂率与目标达成</span>
+            <span class="panel-extra">目标体脂率 17.0%</span>
+          </div>
+          <div class="ring-layout">
+            <div class="ring">
+              <div class="ring-inner">
+                <div class="ring-main">86%</div>
+                <div class="ring-sub">目标完成度</div>
+              </div>
+            </div>
+            <div class="ring-text">
+              <div class="ring-text-strong">当前体脂率:18.6%</div>
+              <div>较起始 19.8% 已下降 1.2%,继续保持当前训练与饮食节奏。</div>
+              <div>按照最近 4 周的下降速度,预计 <span class="ring-text-strong">3 周后</span> 可达到目标体脂率。</div>
+            </div>
+          </div>
+        </div>
+      </section>
+
+      <!-- 底部:操作与建议 -->
+      <section class="bottom-row">
+        <div class="panel">
+          <div class="panel-header">
+            <span class="panel-title">快速操作</span>
+            <span class="panel-extra">把记录和分析做成日常习惯</span>
+          </div>
+          <div class="action-chips">
+            <button class="chip-btn primary">+ 记录今日体重与体脂</button>
+            <button class="chip-btn">查看近 7 天关键波动</button>
+            <button class="chip-btn">对比体重与睡眠时长</button>
+            <button class="chip-btn">导出体重变化报告</button>
+          </div>
+        </div>
+
+        <div class="panel">
+          <div class="panel-header">
+            <span class="panel-title">系统建议</span>
+            <span class="panel-extra">基于最近 30 天数据</span>
+          </div>
+          <ul class="tips-list">
+            <li>目前体重下降速度适中,如无特殊需求,无需额外加大热量缺口。</li>
+            <li>建议保持每周 3 次以上力量训练,配合充足蛋白质摄入,避免肌肉量下降。</li>
+            <li>若一周内体重单日波动 &gt; 1.5kg,将在此处给出提醒,帮助识别异常情况。</li>
+          </ul>
+        </div>
+      </section>
+    </div>
+
+    <footer>方案一 · 关键指标一屏总览:适合每天快速确认当前阶段与目标进度的用户。</footer>
+  </div>
+</body>
+</html>

+ 356 - 0
campus_health_app/frontend/campus-health-app/public/weight-option2.html

@@ -0,0 +1,356 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+  <meta charset="UTF-8" />
+  <title>体重管理 - 方案二:趋势主导视图</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1" />
+  <style>
+    :root {
+      --bg: #f5f7fa;
+      --panel: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+      --header-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+      --border-subtle: #e2e8f0;
+      --accent: #4f46e5;
+      --accent-soft: rgba(79, 70, 229, 0.08);
+      --text-main: #1e293b;
+      --text-muted: #64748b;
+      --danger: #ef4444;
+    }
+
+    * { box-sizing: border-box; margin: 0; padding: 0; }
+
+    body {
+      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
+      background: var(--bg);
+      color: var(--text-main);
+      min-height: 100vh;
+    }
+
+    .layout {
+      max-width: 1200px;
+      margin: 0 auto;
+      padding-bottom: 24px;
+    }
+
+    .top-header {
+      background: var(--header-gradient);
+      color: white;
+      padding: 16px 24px;
+      border-radius: 0 0 18px 18px;
+      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);
+    }
+
+    header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      gap: 16px;
+    }
+
+    .title-group h1 {
+      font-size: 22px;
+      margin-bottom: 4px;
+    }
+
+    .title-group p {
+      font-size: 13px;
+      color: rgba(255, 255, 255, 0.9);
+      max-width: 520px;
+    }
+
+    .header-actions {
+      display: flex;
+      gap: 8px;
+    }
+
+    .header-actions button {
+      border-radius: 999px;
+      border: 1px solid rgba(255, 255, 255, 0.3);
+      padding: 6px 14px;
+      background: rgba(255, 255, 255, 0.12);
+      color: white;
+      font-size: 12px;
+      cursor: pointer;
+      font-weight: 500;
+    }
+
+    .header-actions button.primary {
+      background: white;
+      color: var(--accent);
+    }
+
+    .main-content {
+      padding: 18px 24px 0;
+      display: grid;
+      grid-template-columns: 1.9fr 1.1fr;
+      gap: 18px;
+    }
+
+    .left-column, .right-column {
+      display: flex;
+      flex-direction: column;
+      gap: 16px;
+    }
+
+    .panel {
+      background: var(--panel);
+      border-radius: 16px;
+      padding: 14px 16px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 4px 18px rgba(15, 23, 42, 0.08);
+      display: flex;
+      flex-direction: column;
+      gap: 10px;
+    }
+
+    .panel-header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      font-size: 13px;
+      color: var(--text-muted);
+    }
+
+    .panel-title { font-size: 14px; font-weight: 600; color: var(--text-main); }
+    .panel-extra { font-size: 12px; }
+
+    .chart-placeholder {
+      flex: 1;
+      min-height: 220px;
+      border-radius: 12px;
+      border: 1px dashed #d0d7e2;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      color: #a0aec0;
+      font-size: 13px;
+      background: radial-gradient(circle at top left, rgba(102,126,234,0.06), transparent 60%);
+    }
+
+    .kpi-strip {
+      display: grid;
+      grid-template-columns: repeat(3, 1fr);
+      gap: 10px;
+    }
+
+    .kpi-item {
+      background: rgba(248, 250, 252, 0.9);
+      border-radius: 12px;
+      padding: 8px 10px;
+      border: 1px solid #e5e7eb;
+      display: flex;
+      flex-direction: column;
+      gap: 4px;
+    }
+
+    .kpi-label {
+      font-size: 11px;
+      color: var(--text-muted);
+    }
+
+    .kpi-main {
+      display: flex;
+      align-items: baseline;
+      gap: 4px;
+    }
+
+    .kpi-value { font-size: 20px; font-weight: 700; }
+    .kpi-unit { font-size: 11px; color: var(--text-muted); }
+
+    .kpi-desc {
+      font-size: 11px;
+      color: var(--text-muted);
+    }
+
+    .kpi-value.negative { color: var(--danger); }
+    .kpi-value.positive { color: var(--accent); }
+
+    .list {
+      list-style: none;
+      display: flex;
+      flex-direction: column;
+      gap: 6px;
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .list-item {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+    }
+
+    .badge {
+      border-radius: 999px;
+      padding: 2px 8px;
+      font-size: 11px;
+      background: var(--accent-soft);
+      color: var(--accent);
+    }
+
+    .tag-row {
+      display: flex;
+      flex-wrap: wrap;
+      gap: 6px;
+      margin-top: 4px;
+    }
+
+    .tag {
+      border-radius: 999px;
+      border: 1px solid var(--border-subtle);
+      padding: 2px 8px;
+      font-size: 11px;
+      color: var(--text-muted);
+      background: white;
+    }
+
+    .cta-row {
+      display: flex;
+      gap: 8px;
+      flex-wrap: wrap;
+    }
+
+    .cta-btn {
+      border-radius: 999px;
+      border: 1px solid var(--border-subtle);
+      padding: 6px 12px;
+      background: white;
+      font-size: 12px;
+      cursor: pointer;
+      color: var(--text-muted);
+    }
+
+    .cta-btn.primary {
+      background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
+      color: white;
+      border: none;
+    }
+
+    footer {
+      margin-top: 14px;
+      font-size: 11px;
+      color: var(--text-muted);
+      text-align: right;
+      padding: 0 24px;
+    }
+
+    @media (max-width: 900px) {
+      .main-content { grid-template-columns: 1fr; }
+    }
+  </style>
+</head>
+<body>
+  <div class="layout">
+    <div class="top-header">
+      <header>
+        <div class="title-group">
+          <h1>体重管理 · 趋势主导视图</h1>
+          <p>把时间维度放在第一位,一张图看清长期趋势,同时保留当前体重和体脂率等关键数字。</p>
+        </div>
+        <div class="header-actions">
+          <button class="primary">+ 录入体重与体脂</button>
+          <button>切换时间范围</button>
+        </div>
+      </header>
+    </div>
+
+    <div class="main-content">
+      <!-- 左侧:大幅趋势 + 底部关键数字 -->
+      <div class="left-column">
+        <section class="panel">
+          <div class="panel-header">
+            <span class="panel-title">体重趋势总览</span>
+            <span class="panel-extra">最近 180 天 · 按周汇总</span>
+          </div>
+          <div class="chart-placeholder">折线 + 区域图占位:展示体重随时间变化,并标记关键节点(如体重平台期)。</div>
+          <div class="kpi-strip">
+            <div class="kpi-item">
+              <div class="kpi-label">当前体重</div>
+              <div class="kpi-main">
+                <span class="kpi-value">65.2</span>
+                <span class="kpi-unit">kg</span>
+              </div>
+              <div class="kpi-desc">比起始 72.0kg 已减少 6.8kg</div>
+            </div>
+            <div class="kpi-item">
+              <div class="kpi-label">最近 4 周变化</div>
+              <div class="kpi-main">
+                <span class="kpi-value negative">-1.6</span>
+                <span class="kpi-unit">kg</span>
+              </div>
+              <div class="kpi-desc">平均每周 -0.4kg,处于推荐速度</div>
+            </div>
+            <div class="kpi-item">
+              <div class="kpi-label">波动幅度</div>
+              <div class="kpi-main">
+                <span class="kpi-value">1.2</span>
+                <span class="kpi-unit">kg</span>
+              </div>
+              <div class="kpi-desc">单日最大波动 1.2kg · 受饮水与饮食影响</div>
+            </div>
+          </div>
+        </section>
+      </div>
+
+      <!-- 右侧:体脂率 + 近期记录 -->
+      <div class="right-column">
+        <section class="panel">
+          <div class="panel-header">
+            <span class="panel-title">体脂率与身体成分</span>
+            <span class="panel-extra">目标体脂率 17.0%</span>
+          </div>
+          <div class="list">
+            <div class="list-item">
+              <span>当前体脂率</span>
+              <span><strong>18.6%</strong> <span class="badge">健康区间</span></span>
+            </div>
+            <div class="list-item">
+              <span>最近 30 天变化</span>
+              <span class="kpi-value negative">-1.2%</span>
+            </div>
+            <div class="list-item">
+              <span>估算去脂体重</span>
+              <span>53.1 kg</span>
+            </div>
+            <div class="list-item">
+              <span>肌肉量</span>
+              <span>27.4 kg</span>
+            </div>
+          </div>
+          <div class="tag-row">
+            <span class="tag">体重趋势与体脂率同步下降</span>
+            <span class="tag">暂无异常水肿或快速反弹</span>
+          </div>
+        </section>
+
+        <section class="panel">
+          <div class="panel-header">
+            <span class="panel-title">最近关键记录</span>
+            <span class="panel-extra">近 7 天</span>
+          </div>
+          <ul class="list">
+            <li class="list-item">
+              <span>2025-07-21 · 65.2kg · 18.6%</span>
+              <span class="badge">空腹</span>
+            </li>
+            <li class="list-item">
+              <span>2025-07-19 · 65.6kg · 18.9%</span>
+              <span class="badge">训练日</span>
+            </li>
+            <li class="list-item">
+              <span>2025-07-17 · 65.9kg · 19.1%</span>
+              <span class="badge">高盐晚餐</span>
+            </li>
+          </ul>
+          <div class="cta-row">
+            <button class="cta-btn primary">查看全部记录</button>
+            <button class="cta-btn">筛选空腹记录</button>
+          </div>
+        </section>
+      </div>
+    </div>
+
+    <footer>方案二 · 趋势主导布局:适合关注长期体重与体脂轨迹、需要经常查看变化曲线的用户。</footer>
+  </div>
+</body>
+</html>

+ 429 - 0
campus_health_app/frontend/campus-health-app/public/weight-option3.html

@@ -0,0 +1,429 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+  <meta charset="UTF-8" />
+  <title>体重管理 - 方案三:分步旅程视图</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1" />
+  <style>
+    :root {
+      --bg: #f5f7fa;
+      --panel: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+      --header-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+      --border-subtle: #e2e8f0;
+      --accent: #4f46e5;
+      --accent-secondary: #7c3aed;
+      --text-main: #1e293b;
+      --text-muted: #64748b;
+      --danger: #ef4444;
+    }
+
+    * { box-sizing: border-box; margin: 0; padding: 0; }
+
+    body {
+      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
+      background: var(--bg);
+      color: var(--text-main);
+      min-height: 100vh;
+    }
+
+    .layout {
+      max-width: 1200px;
+      margin: 0 auto;
+      padding-bottom: 24px;
+    }
+
+    .top-header {
+      background: var(--header-gradient);
+      color: white;
+      padding: 16px 24px;
+      border-radius: 0 0 18px 18px;
+      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);
+    }
+
+    header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      gap: 16px;
+    }
+
+    .title-group h1 {
+      font-size: 22px;
+      margin-bottom: 4px;
+    }
+
+    .title-group p {
+      font-size: 13px;
+      color: rgba(255, 255, 255, 0.9);
+      max-width: 520px;
+    }
+
+    .header-actions {
+      display: flex;
+      gap: 8px;
+    }
+
+    .header-actions button {
+      border-radius: 999px;
+      border: 1px solid rgba(255, 255, 255, 0.3);
+      padding: 6px 14px;
+      background: rgba(255, 255, 255, 0.12);
+      color: white;
+      font-size: 12px;
+      cursor: pointer;
+      font-weight: 500;
+    }
+
+    .header-actions button.primary {
+      background: white;
+      color: var(--accent);
+    }
+
+    .main-content {
+      padding: 18px 24px 0;
+      display: flex;
+      flex-direction: column;
+      gap: 18px;
+    }
+
+    .hero-panel {
+      background: var(--panel);
+      border-radius: 18px;
+      padding: 18px 20px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 6px 26px rgba(15, 23, 42, 0.12);
+      display: grid;
+      grid-template-columns: auto 1.4fr auto;
+      gap: 20px;
+      align-items: center;
+    }
+
+    .hero-left {
+      display: flex;
+      flex-direction: column;
+      gap: 6px;
+    }
+
+    .hero-title {
+      font-size: 16px;
+      font-weight: 600;
+    }
+
+    .hero-sub {
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .hero-badges {
+      display: flex;
+      gap: 6px;
+      flex-wrap: wrap;
+      margin-top: 4px;
+    }
+
+    .badge {
+      border-radius: 999px;
+      padding: 2px 8px;
+      font-size: 11px;
+      background: rgba(255, 255, 255, 0.9);
+      color: var(--accent);
+      border: 1px solid rgba(79, 70, 229, 0.2);
+    }
+
+    .hero-center {
+      display: flex;
+      flex-direction: column;
+      gap: 4px;
+      align-items: center;
+    }
+
+    .hero-number-row {
+      display: flex;
+      align-items: baseline;
+      gap: 6px;
+    }
+
+    .hero-number { font-size: 32px; font-weight: 700; }
+    .hero-unit { font-size: 13px; color: var(--text-muted); }
+
+    .hero-desc {
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .hero-right {
+      display: flex;
+      flex-direction: column;
+      gap: 6px;
+      align-items: flex-end;
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .hero-progress-bar {
+      width: 160px;
+      height: 8px;
+      border-radius: 999px;
+      background: #e5e7eb;
+      overflow: hidden;
+    }
+
+    .hero-progress-inner {
+      width: 68%;
+      height: 100%;
+      background: linear-gradient(90deg, #4f46e5 0%, #7c3aed 100%);
+    }
+
+    .hero-target { font-weight: 500; }
+
+    /* 三列旅程卡片:体重变化 / 当前体重 / 体脂率 */
+    .journey-grid {
+      display: grid;
+      grid-template-columns: repeat(3, 1fr);
+      gap: 16px;
+    }
+
+    .journey-card {
+      background: var(--panel);
+      border-radius: 16px;
+      padding: 14px 16px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 4px 18px rgba(15, 23, 42, 0.08);
+      display: flex;
+      flex-direction: column;
+      gap: 8px;
+    }
+
+    .journey-header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      font-size: 13px;
+      color: var(--text-muted);
+    }
+
+    .journey-title { font-size: 14px; font-weight: 600; color: var(--text-main); }
+
+    .step-tag {
+      border-radius: 999px;
+      padding: 2px 8px;
+      font-size: 11px;
+      background: rgba(248, 250, 252, 0.9);
+      border: 1px solid #e5e7eb;
+    }
+
+    .journey-main-number {
+      display: flex;
+      align-items: baseline;
+      gap: 4px;
+    }
+
+    .journey-value { font-size: 22px; font-weight: 700; }
+    .journey-unit { font-size: 11px; color: var(--text-muted); }
+
+    .journey-desc { font-size: 12px; color: var(--text-muted); }
+
+    .timeline {
+      margin-top: 4px;
+      border-radius: 10px;
+      background: #f9fafb;
+      padding: 6px 8px;
+      font-size: 11px;
+      color: var(--text-muted);
+    }
+
+    .timeline strong { color: var(--accent); }
+
+    .chart-mini {
+      margin-top: 4px;
+      border-radius: 10px;
+      border: 1px dashed #d0d7e2;
+      padding: 8px;
+      font-size: 11px;
+      color: #a0aec0;
+      text-align: center;
+    }
+
+    /* 底部:图表 + 建议 */
+    .bottom-row {
+      display: grid;
+      grid-template-columns: 1.6fr 1.4fr;
+      gap: 16px;
+    }
+
+    .panel {
+      background: var(--panel);
+      border-radius: 16px;
+      padding: 14px 16px;
+      border: 1px solid var(--border-subtle);
+      box-shadow: 0 4px 18px rgba(15, 23, 42, 0.08);
+      display: flex;
+      flex-direction: column;
+      gap: 10px;
+    }
+
+    .panel-header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      font-size: 13px;
+      color: var(--text-muted);
+    }
+
+    .panel-title { font-size: 14px; font-weight: 600; color: var(--text-main); }
+
+    .chart-placeholder {
+      flex: 1;
+      min-height: 200px;
+      border-radius: 12px;
+      border: 1px dashed #d0d7e2;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      color: #a0aec0;
+      font-size: 13px;
+      background: radial-gradient(circle at top left, rgba(102,126,234,0.06), transparent 60%);
+    }
+
+    .tips-list {
+      list-style: none;
+      display: flex;
+      flex-direction: column;
+      gap: 4px;
+      font-size: 12px;
+      color: var(--text-muted);
+    }
+
+    .tips-list li::before {
+      content: '• ';
+      color: var(--accent);
+    }
+
+    footer {
+      margin-top: 14px;
+      font-size: 11px;
+      color: var(--text-muted);
+      text-align: right;
+      padding: 0 24px;
+    }
+
+    @media (max-width: 900px) {
+      .hero-panel { grid-template-columns: 1fr; }
+      .hero-right { align-items: flex-start; }
+      .journey-grid, .bottom-row { grid-template-columns: 1fr; }
+    }
+  </style>
+</head>
+<body>
+  <div class="layout">
+    <div class="top-header">
+      <header>
+        <div class="title-group">
+          <h1>体重管理 · 分步旅程视图</h1>
+          <p>把减脂/增肌当成一段旅程:今天在哪里、已经走了多远、下一步该做什么,一目了然。</p>
+        </div>
+        <div class="header-actions">
+          <button class="primary">+ 记录新阶段</button>
+          <button>查看历史里程碑</button>
+        </div>
+      </header>
+    </div>
+
+    <div class="main-content">
+      <!-- 顶部旅程概览 -->
+      <section class="hero-panel">
+        <div class="hero-left">
+          <div class="hero-title">当前阶段:稳定减脂期</div>
+          <div class="hero-sub">从 72kg 到 65.2kg · 用时 4 个月</div>
+          <div class="hero-badges">
+            <span class="badge">已完成 70% 体重目标</span>
+            <span class="badge">体脂率进入健康区间</span>
+          </div>
+        </div>
+        <div class="hero-center">
+          <div class="hero-number-row">
+            <span class="hero-number">65.2</span>
+            <span class="hero-unit">kg</span>
+          </div>
+          <div class="hero-desc">当前体重 · 较起始 -6.8kg · 较上次 -0.4kg</div>
+        </div>
+        <div class="hero-right">
+          <div class="hero-target">目标:63kg / 17% 体脂率</div>
+          <div class="hero-progress-bar"><div class="hero-progress-inner"></div></div>
+          <div>预计 2025-09 前达到目标,如维持当前节奏。</div>
+        </div>
+      </section>
+
+      <!-- 中部三列:体重变化 / 当前体重细节 / 体脂率细节 -->
+      <section class="journey-grid">
+        <div class="journey-card">
+          <div class="journey-header">
+            <span class="journey-title">体重变化</span>
+            <span class="step-tag">阶段 1 · 从 72kg 到 68kg</span>
+          </div>
+          <div class="journey-main-number">
+            <span class="journey-value">-3.2</span>
+            <span class="journey-unit">kg</span>
+          </div>
+          <div class="journey-desc">平均每周 -0.5kg,目前下降速度平稳,未出现明显平台期。</div>
+          <div class="timeline">最近 30 天:<strong>3 次</strong> 突出下降 · <strong>2 次</strong> 明显回弹(多与高盐饮食相关)。</div>
+          <div class="chart-mini">迷你折线图占位:展示最近 30 天体重波动。</div>
+        </div>
+
+        <div class="journey-card">
+          <div class="journey-header">
+            <span class="journey-title">当前体重细节</span>
+            <span class="step-tag">今天 · 空腹记录</span>
+          </div>
+          <div class="journey-main-number">
+            <span class="journey-value">65.2</span>
+            <span class="journey-unit">kg</span>
+          </div>
+          <div class="journey-desc">比过去 7 天平均值低 0.6kg,处于正常日内波动范围。</div>
+          <div class="timeline">与目标体重 63kg 差距 <strong>2.2kg</strong>,按当前节奏预计 <strong>4~5 周</strong> 内达成。</div>
+          <div class="chart-mini">柱状图占位:对比本周每日体重与目标体重线。</div>
+        </div>
+
+        <div class="journey-card">
+          <div class="journey-header">
+            <span class="journey-title">体脂率旅程</span>
+            <span class="step-tag">身体成分</span>
+          </div>
+          <div class="journey-main-number">
+            <span class="journey-value">18.6</span>
+            <span class="journey-unit">%</span>
+          </div>
+          <div class="journey-desc">从 22.5% 降至 18.6%,预计再下降 1.6% 即可达到目标 17%。</div>
+          <div class="timeline">最近 8 周:<strong>6 周</strong> 体重下降同时体脂率下降,<strong>2 周</strong> 可能以肌肉流失为主,将在提示中标记。</div>
+          <div class="chart-mini">散点图占位:展示体重与体脂率的对应关系。</div>
+        </div>
+      </section>
+
+      <!-- 底部:趋势与建议 -->
+      <section class="bottom-row">
+        <div class="panel">
+          <div class="panel-header">
+            <span class="panel-title">体重与体脂率联合趋势</span>
+            <span class="panel-extra">按周查看 · 识别“掉秤但不掉脂”</span>
+          </div>
+          <div class="chart-placeholder">折线 + 面积图占位:一条线为体重,另一条线为体脂率,高亮两者走势不一致的区间。</div>
+        </div>
+
+        <div class="panel">
+          <div class="panel-header">
+            <span class="panel-title">系统建议</span>
+            <span class="panel-extra">基于最近 60 天旅程</span>
+          </div>
+          <ul class="tips-list">
+            <li>有两段时间体重下降但体脂率上升,可能与快速节食或肌肉流失有关,建议增加力量训练比例。</li>
+            <li>建议为每个关键体重节点(如突破 70kg、65kg)添加“里程碑标签”,更容易回顾旅程。</li>
+            <li>如想用于门诊或教练沟通,可一键导出“体重管理旅程报告”。</li>
+          </ul>
+        </div>
+      </section>
+    </div>
+
+    <footer>方案三 · 分步旅程布局:适合希望把减脂/增肌当作长期项目、重视阶段总结和里程碑的用户。</footer>
+  </div>
+</body>
+</html>

+ 152 - 82
campus_health_app/frontend/campus-health-app/src/app/modules/dashboard/dashboard.component.html

@@ -1,99 +1,161 @@
 <div class="dashboard-container">
 <div class="dashboard-container">
-  <!-- 顶部导航栏 -->
-  <app-page-header [title]="'数智健调系统'" [subtitle]="'健康管理平台'">
-    <div header-actions>
-      <!-- <div class="user-info"> -->
-        <!-- <span class="welcome-text">欢迎回来!</span> -->
-        <!-- <div class="user-avatar"></div> -->
-      <!-- </div> -->
-      <button class="nav-button" (click)="navigateTo('user-center')">👤个人中心</button>
-      <button class="logout-button" (click)="logout()">退出登录</button>
-    </div>
-  </app-page-header>
-
-  <!-- 主体内容区域 -->
-  <div class="dashboard-content-wrapper">
-    <!-- 侧边导航栏 -->
-    <nav class="dashboard-sidebar">
-      <ul class="nav-list">
-        <li class="nav-item active">
-          <span class="nav-icon">📊</span>
-          <span class="nav-text">仪表盘</span>
-        </li>
-        <li class="nav-item" (click)="navigateTo('diet')">
-          <span class="nav-icon">🍎</span>
-          <span class="nav-text">饮食管理</span>
-        </li>
-        <li class="nav-item" (click)="navigateTo('exercise')">
-          <span class="nav-icon">🏃</span>
-          <span class="nav-text">运动记录</span>
-        </li>
-        <li class="nav-item" (click)="navigateTo('monitoring')">
-          <span class="nav-icon">❤️</span>
-          <span class="nav-text">健康监测</span>
-        </li>
-        <li class="nav-item" (click)="navigateTo('knowledge')">
-          <span class="nav-icon">📚</span>
-          <span class="nav-text">健康知识</span>
-        </li>
-        <li class="nav-item" (click)="navigateTo('school-services')">
-          <span class="nav-icon">🏫</span>
-          <span class="nav-text">校园服务</span>
-        </li>
-      </ul>
-    </nav>
-
-    <!-- 主内容区域 -->
-    <main class="dashboard-main">
-    <div class="dashboard-content">
-      <div class="welcome-section">
-        <h2>欢迎回来!</h2>
-        <p>这是您的健康管理仪表盘,提供全方位的健康数据和管理功能。</p>
+  <!-- 顶部标题栏 -->
+  <div class="top-header">
+    <header>
+      <div class="title-group">
+        <h1>校园健康仪表盘</h1>
+        <p>在卡片式布局中快速查看体重、睡眠、饮食、运动、健康监测与校园服务,一屏掌握所有健康信息。</p>
+      </div>
+      <div class="quick-actions">
+        <div class="user-actions">
+          <button (click)="navigateTo('user-center')">👤 个人中心</button>
+          <button class="ai-chat-button" (click)="openAiChatModal()" title="AI 聊天">
+            <img src="/assets/images/black-cat.png?v=2" alt="AI" class="ai-icon">
+            <span class="ai-chat-pulse"></span>
+          </button>
+        </div>
+        <button class="primary">+ 今日记录</button>
+        <button (click)="logout()">退出登录</button>
       </div>
       </div>
+    </header>
+  </div>
 
 
-      <!-- 健康数据概览卡片 -->
-      <div class="dashboard-cards">
-        <div class="dashboard-card" (click)="navigateTo('weight')" style="cursor: pointer;">
-          <div class="card-icon">⚖️</div>
-          <div class="card-content">
-            <h3>体重管理</h3>
-            <p>最近一次记录: 65kg</p>
-            <p class="click-hint">点击查看详细体重数据</p>
+  <!-- 主内容区域 -->
+  <div class="main-content">
+    <!-- 功能卡片网格 -->
+    <section class="cards-grid">
+      <!-- 体重管理 -->
+      <article class="feature-card" (click)="navigateTo('weight')">
+        <div class="feature-header">
+          <div>
+            <div class="feature-title">体重管理</div>
+            <div class="feature-sub">记录体重 / 查看 BMI 和趋势</div>
           </div>
           </div>
+          <div class="pill"><span class="pill-dot"></span>已开启目标</div>
+        </div>
+        <div class="feature-main">BMI {{ weightData.bmi }}<span class="unit"> {{ weightData.bmiStatus }}</span></div>
+        <div class="feature-tags">
+          <span class="feature-tag">今日体重:{{ weightData.currentWeight }} kg · 目标 {{ weightData.targetWeight }} kg</span>
+          <span class="feature-tag">一周内变化 {{ weightData.weeklyWeightChange }} kg · 本周已记录 {{ weightData.weeklyRecords }} 天</span>
+          <span class="feature-tag">最近记录:{{ weightData.lastRecord }} · 距离目标 {{ weightData.targetDiff }} kg</span>
         </div>
         </div>
-        <div class="dashboard-card">
-          <div class="card-icon">💧</div>
-          <div class="card-content">
-            <h3>今日饮水量</h3>
-            <p>已饮用: 1200ml</p>
+        <div class="feature-footer">
+          <span>建议:{{ weightData.suggestion }}</span>
+          <button (click)="navigateTo('weight'); $event.stopPropagation()">进入体重管理</button>
+        </div>
+      </article>
+
+      <!-- 睡眠质量 -->
+      <article class="feature-card" (click)="showSleepDetails()">
+        <div class="feature-header">
+          <div>
+            <div class="feature-title">睡眠质量</div>
+            <div class="feature-sub">入睡时间、深睡时长与睡眠评分</div>
           </div>
           </div>
+          <div class="feature-icon">💤</div>
         </div>
         </div>
-        <div class="dashboard-card">
-          <div class="card-icon">🚶</div>
-          <div class="card-content">
-            <h3>今日步数</h3>
-            <p>5,230 步</p>
+        <div class="feature-main">{{ sleepCardData.sleepScore }} / 100<span class="unit"> {{ sleepCardData.sleepStatus }}</span></div>
+        <div class="feature-tags">
+          <span class="feature-tag">昨晚睡眠:{{ sleepCardData.sleepHours }} 小时 {{ sleepCardData.sleepMinutes }} 分</span>
+          <span class="feature-tag">近 7 天平均:{{ sleepCardData.avgSleepHours }} 小时</span>
+          <span class="feature-tag">平均入睡:{{ sleepCardData.avgBedtime }}</span>
+          <span class="feature-tag">深睡:{{ sleepCardData.deepSleepDuration }} 小时 · 连续早睡 {{ sleepCardData.earlyBedStreak }} 天</span>
+        </div>
+        <div class="feature-footer">
+          <span>小贴士:{{ sleepCardData.tip }}</span>
+          <button (click)="showSleepDetails(); $event.stopPropagation()">查看睡眠详情</button>
+        </div>
+      </article>
+
+      <!-- 饮食管理 -->
+      <article class="feature-card" (click)="navigateTo('diet')">
+        <div class="feature-header">
+          <div>
+            <div class="feature-title">饮食管理</div>
+            <div class="feature-sub">记录三餐、热量与营养结构</div>
           </div>
           </div>
+          <div class="feature-icon">🥗</div>
+        </div>
+        <div class="feature-main">{{ dietData.calories }} kcal<span class="unit"> 今日已摄入</span></div>
+        <div class="feature-tags">
+          <span class="feature-tag">目标:{{ dietData.targetCalories }} kcal · 剩余 {{ dietData.remainingCalories }} kcal</span>
+          <span class="feature-tag">蛋白质:{{ dietData.protein }} g</span>
+          <span class="feature-tag">碳水:{{ dietData.carbs }} g</span>
+          <span class="feature-tag">脂肪:{{ dietData.fat }} g</span>
         </div>
         </div>
-        <div class="dashboard-card" (click)="showSleepDetails()" style="cursor: pointer;">
-          <div class="card-icon">😴</div>
-          <div class="card-content">
-            <h3>睡眠质量</h3>
-            <p>昨晚: 7.5小时</p>
-            <p class="click-hint">点击查看详细睡眠数据</p>
+        <div class="feature-footer">
+          <span>建议:{{ dietData.suggestion }}</span>
+          <button (click)="navigateTo('diet'); $event.stopPropagation()">录入今日饮食</button>
+        </div>
+      </article>
+
+      <!-- 运动记录 -->
+      <article class="feature-card" (click)="navigateTo('exercise')">
+        <div class="feature-header">
+          <div>
+            <div class="feature-title">运动记录</div>
+            <div class="feature-sub">跑步、骑行、力量训练等统一记录</div>
           </div>
           </div>
+          <div class="feature-icon">🏃</div>
         </div>
         </div>
-      </div>
+        <div class="feature-main">{{ exerciseData.duration }} 分钟<span class="unit"> 今日运动</span></div>
+        <div class="feature-tags">
+          <span class="feature-tag">步数:{{ exerciseData.steps }} · 已完成目标的 {{ exerciseData.stepProgress }}%</span>
+          <span class="feature-tag">跑步:{{ exerciseData.runningDistance }} 公里</span>
+          <span class="feature-tag">本周完成 {{ exerciseData.weeklyProgress }}</span>
+        </div>
+        <div class="feature-footer">
+          <span>下一次计划:{{ exerciseData.nextPlan }}</span>
+          <button (click)="navigateTo('exercise'); $event.stopPropagation()">添加运动记录</button>
+        </div>
+      </article>
 
 
-      <!-- 健康建议区域 -->
-      <div class="health-tips">
-        <h3>今日健康建议</h3>
-        <p>根据您的活动数据,建议增加30分钟有氧运动,以达到每日运动目标。</p>
-      </div>
-    </div>
-  </main>
+      <!-- 健康监测 -->
+      <article class="feature-card" (click)="navigateTo('monitoring')">
+        <div class="feature-header">
+          <div>
+            <div class="feature-title">健康监测</div>
+            <div class="feature-sub">血压、心率、体脂等指标总览</div>
+          </div>
+          <div class="feature-icon">🩺</div>
+        </div>
+        <div class="feature-main">心率 {{ monitoringData.heartRate }}<span class="unit"> 次/分</span></div>
+        <div class="feature-tags">
+          <span class="feature-tag">血压:{{ monitoringData.bloodPressure }} mmHg</span>
+          <span class="feature-tag">体脂率:{{ monitoringData.bodyFat }}%</span>
+          <span class="feature-tag">最近一次体检:{{ monitoringData.lastCheckup }}</span>
+        </div>
+        <div class="feature-footer">
+          <span>状态:{{ monitoringData.status }}</span>
+          <button (click)="navigateTo('monitoring'); $event.stopPropagation()">打开健康监测</button>
+        </div>
+      </article>
+
+      <!-- 校园服务 -->
+      <article class="feature-card" (click)="navigateTo('school-services')">
+        <div class="feature-header">
+          <div>
+            <div class="feature-title">校园服务</div>
+            <div class="feature-sub">餐厅推荐、运动组队与健康资讯</div>
+          </div>
+          <div class="feature-icon">🏫</div>
+        </div>
+        <div class="feature-main">{{ campusData.restaurantCount }} 个餐厅<span class="unit"> 健康推荐</span></div>
+        <div class="feature-tags">
+          <span class="feature-tag" *ngFor="let restaurant of campusData.restaurants">{{ restaurant }}</span>
+        </div>
+        <div class="feature-footer">
+          <span>{{ campusData.activityInfo }}</span>
+          <button (click)="navigateTo('school-services'); $event.stopPropagation()">浏览校园服务</button>
+        </div>
+      </article>
+    </section>
   </div>
   </div>
 
 
+  <footer>
+    校园健康管理系统 · 卡片总览布局:适合希望在一屏内快速浏览所有健康模块的用户。
+  </footer>
+
   <!-- 睡眠详情模态框 -->
   <!-- 睡眠详情模态框 -->
   <div *ngIf="showSleepDetailsModal" class="modal-overlay" (click)="closeSleepDetailsModal()">
   <div *ngIf="showSleepDetailsModal" class="modal-overlay" (click)="closeSleepDetailsModal()">
     <div class="modal-content" (click)="$event.stopPropagation()">
     <div class="modal-content" (click)="$event.stopPropagation()">
@@ -169,4 +231,12 @@
       </div>
       </div>
     </div>
     </div>
   </div>
   </div>
+
+  <div *ngIf="showAiChatModal" class="modal-overlay" (click)="closeAiChatModal()">
+    <div class="modal-content ai-chat-modal" (click)="$event.stopPropagation()">
+      <div class="modal-body ai-chat-modal-body">
+        <app-ai-chat (close)="closeAiChatModal()"></app-ai-chat>
+      </div>
+    </div>
+  </div>
 </div>
 </div>

+ 292 - 199
campus_health_app/frontend/campus-health-app/src/app/modules/dashboard/dashboard.component.scss

@@ -1,233 +1,202 @@
-// Dashboard组件样式
+// Dashboard组件样式 - 基于 option1 设计
 
 
 .dashboard-container {
 .dashboard-container {
   display: flex;
   display: flex;
   flex-direction: column;
   flex-direction: column;
-  height: 100vh;
+  min-height: 100vh;
   background-color: #f5f7fa;
   background-color: #f5f7fa;
-  color: #333;
+  color: #1e293b;
 }
 }
 
 
-// 顶部导航栏样式
-.dashboard-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  padding: 1.5rem 2rem;
+// 顶部标题栏样式
+.top-header {
   background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
   background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
   color: white;
   color: white;
+  padding:14px  24px;
+  border-radius: 0 0 16px 16px;
   box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
   box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
-  position: relative;
-  z-index: 10;
 }
 }
 
 
-.header-left {
+header {
   display: flex;
   display: flex;
-  flex-direction: column;
-  gap: 4px;
+  justify-content: space-between;
+  align-items: flex-start;
+  gap: 16px;
+  max-width: 1200px;
+  margin: 0 auto;
 }
 }
 
 
-.header-left h1 {
-  margin: 0;
-  font-size: 1.8rem;
-  font-weight: 700;
+.title-group h1 {
+  font-size: 24px;
+  margin-bottom: 6px;
   color: white;
   color: white;
+  font-weight: 700;
 }
 }
 
 
-.header-subtitle {
-  font-size: 0.9rem;
-  color: rgba(255, 255, 255, 0.8);
-  font-weight: 400;
+.title-group p {
+  font-size: 13px;
+  color: rgba(255, 255, 255, 0.85);
+  max-width: 520px;
+  line-height: 1.5;
 }
 }
 
 
-.header-right {
+.quick-actions {
   display: flex;
   display: flex;
-  align-items: center;
-  gap: 1rem;
+  flex-wrap: wrap;
+  gap: 10px;
+  justify-content: flex-end;
 }
 }
 
 
-.user-info {
+.user-actions {
   display: flex;
   display: flex;
-  align-items: center;
-  gap: 0.8rem;
-  padding: 0.5rem 1rem;
-  background: rgba(255, 255, 255, 0.1);
-  border-radius: 12px;
-  backdrop-filter: blur(10px);
-}
-
-.welcome-text {
-  font-size: 0.9rem;
-  color: rgba(255, 255, 255, 0.9);
+  flex-direction: column;
+  align-items: flex-end;
+  gap: 6px;
 }
 }
 
 
-.user-avatar {
-  width: 32px;
-  height: 32px;
-  background: rgba(255, 255, 255, 0.2);
-  border-radius: 50%;
-  display: flex;
+.ai-chat-button {
+  position: relative;
+  width: 48px; /* 增大按钮尺寸 */
+  height: 48px;
+  padding: 0;
+  display: inline-flex;
   align-items: center;
   align-items: center;
   justify-content: center;
   justify-content: center;
-  font-size: 1.2rem;
-}
-
-.nav-button {
-  padding: 0.75rem 1.5rem;
-  background: rgba(255, 255, 255, 0.1);
-  border: 1px solid rgba(255, 255, 255, 0.2);
-  border-radius: 12px;
-  color: white;
+  border-radius: 50%;
+  background: transparent; /* 去除背景色,让图标更突出 */
+  box-shadow: none;
+  overflow: visible;
+  border: none;
   cursor: pointer;
   cursor: pointer;
-  transition: all 0.3s ease;
-  font-weight: 500;
-  backdrop-filter: blur(10px);
+  transition: transform 0.2s ease;
 
 
   &:hover {
   &:hover {
-    background: rgba(255, 255, 255, 0.2);
-    transform: translateY(-2px);
-    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+    transform: scale(1.1); /* 简单的悬停放大效果 */
   }
   }
 }
 }
 
 
-.logout-button {
-  padding: 0.75rem 1.5rem;
-  background: rgba(239, 68, 68, 0.8);
-  border: 1px solid rgba(239, 68, 68, 0.3);
+.ai-icon {
+  width: 100%;
+  height: 100%;
+  border-radius: 50%;
+  object-fit: contain;
+  display: block;
+  user-select: none;
+  pointer-events: none;
+  filter: drop-shadow(0 4px 6px rgba(0,0,0,0.2)); /* 给图标加一点投影使其更有质感 */
+}
+
+/* 移除原来的脉冲动画相关样式,保留空选择器以免报错(或者你可以完全删除) */
+.ai-chat-button .ai-chat-pulse {
+  display: none; 
+}
+
+.quick-actions button {
+  border: none;
   border-radius: 12px;
   border-radius: 12px;
-  color: white;
+  padding: 6px 14px;
+  font-size: 12px;
   cursor: pointer;
   cursor: pointer;
-  transition: all 0.3s ease;
-  font-weight: 500;
+  background: rgba(255, 255, 255, 0.2);
+  color: white;
+  font-weight: 600;
   backdrop-filter: blur(10px);
   backdrop-filter: blur(10px);
+  border: 1px solid rgba(255, 255, 255, 0.3);
+  transition: all 0.3s ease;
 
 
   &:hover {
   &:hover {
-    background: rgba(239, 68, 68, 1);
     transform: translateY(-2px);
     transform: translateY(-2px);
-    box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
   }
   }
-}
 
 
-// 主体内容布局
-.dashboard-content-wrapper {
-  display: flex;
-  flex: 1;
-  overflow: hidden;
+  &.primary {
+    background: white;
+    color: #4f46e5;
+    box-shadow: 0 4px 12px rgba(255, 255, 255, 0.3);
+  }
 }
 }
 
 
-// 侧边栏样式
-.dashboard-sidebar {
-  width: 220px;
-  background: linear-gradient(180deg, #f8fafc 0%, #f1f5f9 100%);
-  box-shadow: 4px 0 12px rgba(0, 0, 0, 0.05);
-  padding: 1.5rem 0;
-  border-right: 1px solid #e2e8f0;
+// 主内容区域样式
+.main-content {
+  max-width: 1200px;
+  margin: 0 auto;
+  padding: 0 24px 24px;
 }
 }
 
 
-.nav-list {
-  list-style: none;
-  padding: 0;
-  margin: 0;
+// 快速统计卡片样式
+.quick-stats {
+  display: grid;
+  grid-template-columns: repeat(4, 1fr);
+  gap: 16px;
+  margin-bottom: 24px;
 }
 }
 
 
-.nav-item {
-  display: flex;
-  align-items: center;
-  padding: 1rem 1.5rem;
-  cursor: pointer;
-  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  border-left: 4px solid transparent;
-  margin: 0.25rem 0;
-  position: relative;
-
-  &::before {
-    content: '';
-    position: absolute;
-    left: 0;
-    top: 0;
-    bottom: 0;
-    width: 0;
-    background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
-    transition: width 0.3s ease;
-  }
+.stat-card {
+  background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+  border-radius: 16px;
+  padding: 16px 18px;
+  border: 1px solid #e2e8f0;
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
+  transition: all 0.3s ease;
 
 
   &:hover {
   &:hover {
-    background: linear-gradient(90deg, rgba(79, 70, 229, 0.05) 0%, transparent 100%);
-    transform: translateX(4px);
-    
-    &::before {
-      width: 4px;
-    }
-  }
-
-  &.active {
-    background: linear-gradient(90deg, rgba(79, 70, 229, 0.1) 0%, transparent 100%);
-    border-left-color: #4f46e5;
-    color: #4f46e5;
-    font-weight: 600;
-    
-    &::before {
-      width: 4px;
-    }
+    transform: translateY(-4px);
+    box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12);
   }
   }
 }
 }
 
 
-.nav-icon {
-  margin-right: 1rem;
-  font-size: 1.3rem;
-  transition: transform 0.3s ease;
-}
-
-.nav-item:hover .nav-icon {
-  transform: scale(1.1);
-}
-
-.nav-text {
-  font-size: 1rem;
-  font-weight: 500;
+.stat-label {
+  font-size: 12px;
+  color: #64748b;
+  margin-bottom: 6px;
 }
 }
 
 
-// 主内容区域样式
-.dashboard-main {
-  flex: 1;
-  padding: 1rem 2rem 2rem 2rem;
-  overflow-y: auto;
+.stat-main-row {
   display: flex;
   display: flex;
-  flex-direction: column;
+  align-items: baseline;
+  justify-content: space-between;
+  gap: 8px;
 }
 }
 
 
-.welcome-section {
-  margin-bottom: 2rem;
+.stat-value {
+  font-size: 22px;
+  font-weight: 700;
+  color: #1e293b;
 }
 }
 
 
-.welcome-section h2 {
-  margin-top: 0;
-  font-size: 1.8rem;
-  color: #202124;
+.stat-extra {
+  font-size: 11px;
+  color: #64748b;
+  text-align: right;
 }
 }
 
 
-.welcome-section p {
-  color: #5f6368;
-  font-size: 1rem;
+.stat-trend {
+  margin-top: 8px;
+  font-size: 12px;
+  color: #4f46e5;
+  font-weight: 500;
 }
 }
 
 
-// 仪表盘卡片样式
-.dashboard-cards {
+// 功能卡片网格样式
+.cards-grid {
   display: grid;
   display: grid;
-  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
-  gap: 2rem;
-  margin-bottom: 2rem;
+  grid-template-columns: repeat(3, 1fr);
+  gap: 20px;
 }
 }
 
 
-.dashboard-card {
+.feature-card {
   background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
   background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
   border-radius: 16px;
   border-radius: 16px;
-  padding: 2rem;
+  padding: 20px;
+  border: 1px solid #e2e8f0;
   box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
   box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
+  display: flex;
+  flex-direction: column;
+  gap: 12px;
   transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
   transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  border: 1px solid rgba(226, 232, 240, 0.5);
   position: relative;
   position: relative;
   overflow: hidden;
   overflow: hidden;
+  cursor: pointer;
 
 
   &::before {
   &::before {
     content: '';
     content: '';
@@ -242,75 +211,129 @@
   }
   }
 
 
   &:hover {
   &:hover {
-    transform: translateY(-8px);
+    transform: translateY(-6px);
     box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15);
     box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15);
-    
+
     &::before {
     &::before {
       transform: scaleX(1);
       transform: scaleX(1);
     }
     }
   }
   }
 }
 }
 
 
-.card-icon {
-  font-size: 2.5rem;
-  margin-bottom: 1.5rem;
-  display: block;
-  animation: float 3s ease-in-out infinite;
+@keyframes aiFloat {
+  0%, 100% {
+    transform: translateY(0);
+  }
+  50% {
+    transform: translateY(-3px);
+  }
 }
 }
 
 
-@keyframes float {
-  0%, 100% { transform: translateY(0px); }
-  50% { transform: translateY(-5px); }
+@keyframes aiPulse {
+  0% {
+    transform: scale(0.9);
+    opacity: 0.9;
+  }
+  100% {
+    transform: scale(1.3);
+    opacity: 0;
+  }
 }
 }
 
 
-.card-content h3 {
-  margin: 0 0 0.8rem 0;
-  font-size: 1.2rem;
-  color: #1e293b;
+.feature-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: flex-start;
+  gap: 10px;
+}
+
+.feature-title {
+  font-size: 16px;
   font-weight: 600;
   font-weight: 600;
+  color: #1e293b;
+  margin-bottom: 2px;
 }
 }
 
 
-.card-content p {
-  margin: 0;
+.feature-sub {
+  font-size: 12px;
   color: #64748b;
   color: #64748b;
-  font-size: 1rem;
-  line-height: 1.5;
 }
 }
 
 
-.click-hint {
-  font-size: 0.85rem;
+.feature-icon {
+  font-size: 24px;
+}
+
+.pill {
+  display: inline-flex;
+  align-items: center;
+  gap: 4px;
+  font-size: 11px;
+  padding: 4px 10px;
+  border-radius: 999px;
+  background: rgba(79, 70, 229, 0.1);
   color: #4f46e5;
   color: #4f46e5;
-  margin-top: 0.8rem;
   font-weight: 500;
   font-weight: 500;
-  opacity: 0.8;
 }
 }
 
 
-// 健康建议区域样式
-.health-tips {
-  background-color: #fff;
-  border-radius: 8px;
-  padding: 1.5rem;
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+.pill-dot {
+  width: 6px;
+  height: 6px;
+  border-radius: 999px;
+  background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
 }
 }
 
 
-.health-tips h3 {
-  margin: 0 0 1rem 0;
-  font-size: 1.2rem;
-  color: #202124;
+.feature-main {
+  font-size: 26px;
+  font-weight: 700;
+  color: #1e293b;
+
+  span.unit {
+    font-size: 13px;
+    font-weight: 400;
+    color: #64748b;
+    margin-left: 4px;
+  }
 }
 }
 
 
-.health-tips p {
-  margin: 0;
-  color: #5f6368;
-  font-size: 1rem;
-  line-height: 1.5;
+.feature-tags {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 6px;
 }
 }
 
 
-// 点击提示样式
-.click-hint {
-  font-size: 0.8rem;
-  color: #1a73e8;
-  margin-top: 0.5rem;
+.feature-tag {
+  font-size: 11px;
+  padding: 4px 10px;
+  border-radius: 999px;
+  background: #f1f5f9;
+  color: #64748b;
+  border: 1px solid #e2e8f0;
+}
+
+.feature-footer {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  font-size: 12px;
+  color: #64748b;
+  margin-top: 6px;
+
+  button {
+    border-radius: 10px;
+    border: none;
+    padding: 8px 14px;
+    font-size: 12px;
+    cursor: pointer;
+    background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
+    color: white;
+    font-weight: 500;
+    transition: all 0.3s ease;
+
+    &:hover {
+      transform: translateY(-2px);
+      box-shadow: 0 6px 20px rgba(79, 70, 229, 0.4);
+    }
+  }
 }
 }
 
 
 // 模态框样式
 // 模态框样式
@@ -346,6 +369,22 @@
   border: 1px solid rgba(226, 232, 240, 0.5);
   border: 1px solid rgba(226, 232, 240, 0.5);
 }
 }
 
 
+.ai-chat-modal {
+  max-width: 960px;
+  padding-bottom: 0;
+  height: 85vh; /* 固定高度 */
+  display: flex;
+  flex-direction: column;
+  overflow: hidden; /* 防止双重滚动条 */
+}
+
+.ai-chat-modal-body {
+  padding: 0; /* 移除内边距,让聊天组件充满 */
+  flex: 1;
+  height: 100%;
+  overflow: hidden;
+}
+
 @keyframes slideUp {
 @keyframes slideUp {
   from {
   from {
     opacity: 0;
     opacity: 0;
@@ -541,4 +580,58 @@
   font-size: 0.95rem;
   font-size: 0.95rem;
   color: #5f6368;
   color: #5f6368;
   line-height: 1.5;
   line-height: 1.5;
+}
+
+// 页脚样式
+footer {
+  font-size: 12px;
+  color: #64748b;
+  text-align: right;
+  padding: 16px 24px;
+  max-width: 1200px;
+  margin: 0 auto;
+}
+
+// 响应式设计
+@media (max-width: 1200px) {
+  .cards-grid {
+    grid-template-columns: repeat(2, 1fr);
+  }
+}
+
+@media (max-width: 900px) {
+  .quick-stats {
+    grid-template-columns: repeat(2, 1fr);
+  }
+}
+
+@media (max-width: 768px) {
+  .top-header {
+    padding: 20px;
+    border-radius: 0 0 16px 16px;
+  }
+
+  header {
+    flex-direction: column;
+    align-items: flex-start;
+  }
+
+  .quick-actions {
+    width: 100%;
+    justify-content: flex-start;
+  }
+
+  .main-content {
+    padding: 0 16px 16px;
+  }
+
+  .cards-grid {
+    grid-template-columns: 1fr;
+  }
+}
+
+@media (max-width: 480px) {
+  .quick-stats {
+    grid-template-columns: 1fr;
+  }
 }
 }

+ 177 - 3
campus_health_app/frontend/campus-health-app/src/app/modules/dashboard/dashboard.component.ts

@@ -5,8 +5,89 @@ import { BaseChartDirective } from 'ng2-charts';
 import { ChartConfiguration, ChartType, ChartData, Chart } from 'chart.js';
 import { ChartConfiguration, ChartType, ChartData, Chart } from 'chart.js';
 import 'chart.js/auto';
 import 'chart.js/auto';
 import { PageHeaderComponent } from '../../shared/page-header/page-header.component';
 import { PageHeaderComponent } from '../../shared/page-header/page-header.component';
+import { AiChatComponent } from '../../shared/components/modal/ai-chat/ai-chat.component';
 
 
-// 睡眠数据模型
+// 健康统计数据模型
+interface HealthStats {
+  weight: number;
+  targetWeight: number;
+  weeklyWeightChange: string;
+  sleepHours: number;
+  sleepMinutes: number;
+  sleepScore: number;
+  avgSleepHours: number;
+  calories: number;
+  targetCalories: number;
+  remainingCalories: number;
+  steps: string;
+  stepProgress: number;
+  exerciseMinutes: number;
+}
+
+// 体重数据模型
+interface WeightData {
+  currentWeight: number;
+  targetWeight: number;
+  weeklyWeightChange: string;
+  bmi: number;
+  bmiStatus: string;
+  weeklyRecords: number;
+  targetDiff: number;
+  lastRecord: string;
+  suggestion: string;
+}
+
+// 睡眠数据模型(卡片显示)
+interface SleepCardData {
+  sleepScore: number;
+  sleepStatus: string;
+  sleepHours: number;
+  sleepMinutes: number;
+  avgSleepHours: number;
+  avgBedtime: string;
+  deepSleepDuration: number;
+  earlyBedStreak: number;
+  tip: string;
+}
+
+// 饮食数据模型
+interface DietData {
+  calories: number;
+  protein: number;
+  carbs: number;
+  fat: number;
+  targetCalories: number;
+  remainingCalories: number;
+  suggestion: string;
+}
+
+// 运动数据模型
+interface ExerciseData {
+  duration: number;
+  runningDistance: number;
+  steps: string;
+  stepProgress: number;
+  weeklyProgress: string;
+  nextPlan: string;
+}
+
+// 健康监测数据模型
+interface MonitoringData {
+  heartRate: number;
+  bloodPressure: string;
+  bodyFat: number;
+  lastCheckup: string;
+  status: string;
+}
+
+// 校园服务数据模型
+interface CampusData {
+  restaurantCount: number;
+  restaurants: string[];
+  activityInfo: string;
+}
+
+// 睡眠数据模型(详情)
 interface SleepStage {
 interface SleepStage {
   type: string; // 睡眠阶段类型
   type: string; // 睡眠阶段类型
   startTime: string; // 开始时间
   startTime: string; // 开始时间
@@ -41,15 +122,100 @@ interface WeeklySleepData {
 @Component({
 @Component({
   selector: 'app-dashboard',
   selector: 'app-dashboard',
   standalone: true,
   standalone: true,
-  imports: [CommonModule, RouterModule, BaseChartDirective, PageHeaderComponent],
+  imports: [CommonModule, RouterModule, BaseChartDirective, PageHeaderComponent, AiChatComponent],
   templateUrl: './dashboard.component.html',
   templateUrl: './dashboard.component.html',
   styleUrl: './dashboard.component.scss'
   styleUrl: './dashboard.component.scss'
 })
 })
 export class DashboardComponent {
 export class DashboardComponent {
   // 是否显示睡眠详情模态框
   // 是否显示睡眠详情模态框
   showSleepDetailsModal: boolean = false;
   showSleepDetailsModal: boolean = false;
+  showAiChatModal: boolean = false;
+  
+  // 快速统计数据
+  healthStats: HealthStats = {
+    weight: 65.2,
+    targetWeight: 63,
+    weeklyWeightChange: '-0.8',
+    sleepHours: 7,
+    sleepMinutes: 20,
+    sleepScore: 86,
+    avgSleepHours: 7.1,
+    calories: 1580,
+    targetCalories: 2000,
+    remainingCalories: 420,
+    steps: '8,230',
+    stepProgress: 82,
+    exerciseMinutes: 42
+  };
+
+  // 体重管理数据
+  weightData: WeightData = {
+    currentWeight: 65.2,
+    targetWeight: 63,
+    weeklyWeightChange: '-0.8',
+    bmi: 21.3,
+    bmiStatus: '正常',
+    weeklyRecords: 5,
+    targetDiff: 2.2,
+    lastRecord: '今天 08:30',
+    suggestion: '保持当前饮食与运动节奏'
+  };
+
+  // 睡眠质量数据(卡片)
+  sleepCardData: SleepCardData = {
+    sleepScore: 86,
+    sleepStatus: '良好',
+    sleepHours: 7,
+    sleepMinutes: 20,
+    avgSleepHours: 7.1,
+    avgBedtime: '23:45',
+    deepSleepDuration: 2.1,
+    earlyBedStreak: 3,
+    tip: '睡前 1 小时减少使用电子设备'
+  };
+
+  // 饮食管理数据
+  dietData: DietData = {
+    calories: 1580,
+    protein: 78,
+    carbs: 190,
+    fat: 48,
+    targetCalories: 2000,
+    remainingCalories: 420,
+    suggestion: '晚餐控制油炸和高糖食物'
+  };
+
+  // 运动记录数据
+  exerciseData: ExerciseData = {
+    duration: 42,
+    runningDistance: 3.2,
+    steps: '8,230',
+    stepProgress: 82,
+    weeklyProgress: '3 / 4 次计划运动',
+    nextPlan: '今晚 19:30 篮球'
+  };
+
+  // 健康监测数据
+  monitoringData: MonitoringData = {
+    heartRate: 72,
+    bloodPressure: '118 / 74',
+    bodyFat: 18.6,
+    lastCheckup: '2025-05-12',
+    status: '整体稳定,无明显异常'
+  };
+
+  // 校园服务数据
+  campusData: CampusData = {
+    restaurantCount: 3,
+    restaurants: [
+      '青春餐厅 · 450m · ⭐4.5',
+      '活力食堂 · 620m · ⭐4.2',
+      '智慧餐厅 · 800m · ⭐4.7'
+    ],
+    activityInfo: '运动组队:今晚 19:30 篮球活动招募中'
+  };
   
   
-  // 模拟睡眠数据
+  // 模拟睡眠详情数据
   sleepData: SleepData = {
   sleepData: SleepData = {
     totalSleepTime: 7.5,
     totalSleepTime: 7.5,
     deepSleepDuration: 2.1,
     deepSleepDuration: 2.1,
@@ -176,4 +342,12 @@ export class DashboardComponent {
   closeSleepDetailsModal(): void {
   closeSleepDetailsModal(): void {
     this.showSleepDetailsModal = false;
     this.showSleepDetailsModal = false;
   }
   }
+
+  openAiChatModal(): void {
+    this.showAiChatModal = true;
+  }
+
+  closeAiChatModal(): void {
+    this.showAiChatModal = false;
+  }
 }
 }

+ 79 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet-history/diet-history.component.html

@@ -0,0 +1,79 @@
+<div class="diet-history-container">
+  <app-page-header [title]="'饮食记录'" (back)="backToDiet()"></app-page-header>
+
+  <main class="history-main">
+    <!-- 时期选择器 -->
+    <section class="period-section">
+      <div class="period-tabs">
+        <button 
+          class="period-tab" 
+          [class.active]="selectedPeriod === 'week'"
+          (click)="changePeriod('week')">
+          周
+        </button>
+        <button 
+          class="period-tab" 
+          [class.active]="selectedPeriod === 'month'"
+          (click)="changePeriod('month')">
+          月
+        </button>
+        <button 
+          class="period-tab" 
+          [class.active]="selectedPeriod === '6months'"
+          (click)="changePeriod('6months')">
+          6个月
+        </button>
+      </div>
+
+      <!-- 统计信息 -->
+      <div class="period-stats">
+        <div class="stats-main">
+          <span class="stats-label">日均摄入</span>
+          <span class="stats-value">{{ periodStats.avgCalories }}</span>
+          <span class="stats-unit">千卡/天</span>
+        </div>
+        <div class="stats-secondary">
+          <span>共 {{ periodStats.totalMeals }} 餐</span>
+          <span class="stats-range">{{ periodStats.dateRange }}</span>
+        </div>
+      </div>
+    </section>
+
+    <!-- 饮食记录列表 -->
+    <section class="records-section">
+      <div class="day-group" *ngFor="let group of groupedRecords">
+        <div class="day-header">
+          <span class="day-date">{{ group.displayDate }}</span>
+          <span class="day-total">{{ group.totalCalories }} 千卡</span>
+        </div>
+        
+        <div class="meal-cards">
+          <div class="meal-card" *ngFor="let meal of group.meals">
+            <div class="meal-type-icon" [ngClass]="meal.type">
+              {{ meal.type === '早餐' ? '🌅' : meal.type === '午餐' ? '☀️' : '🌙' }}
+            </div>
+            <div class="meal-info">
+              <div class="meal-header">
+                <span class="meal-type">{{ meal.type }}</span>
+                <span class="meal-time">{{ meal.time }}</span>
+              </div>
+              <div class="meal-foods">
+                {{ meal.foods.join('、') }}
+              </div>
+            </div>
+            <div class="meal-calories">
+              <span class="calories-value">{{ meal.calories }}</span>
+              <span class="calories-unit">千卡</span>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <!-- 无数据提示 -->
+      <div class="no-data" *ngIf="groupedRecords.length === 0">
+        <span class="no-data-icon">📋</span>
+        <span class="no-data-text">暂无饮食记录</span>
+      </div>
+    </section>
+  </main>
+</div>

+ 241 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet-history/diet-history.component.scss

@@ -0,0 +1,241 @@
+.diet-history-container {
+  display: flex;
+  flex-direction: column;
+  min-height: 100vh;
+  background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
+}
+
+.history-main {
+  flex: 1;
+  padding: 1.5rem;
+  overflow-y: auto;
+}
+
+// 时期选择区域
+.period-section {
+  background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+  border-radius: 20px;
+  padding: 1.5rem;
+  margin-bottom: 1.5rem;
+  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
+  border: 1px solid rgba(226, 232, 240, 0.5);
+}
+
+.period-tabs {
+  display: flex;
+  background: #f3f4f6;
+  border-radius: 12px;
+  padding: 4px;
+  margin-bottom: 1rem;
+}
+
+.period-tab {
+  flex: 1;
+  padding: 10px 16px;
+  border: none;
+  background: transparent;
+  border-radius: 8px;
+  font-size: 14px;
+  font-weight: 500;
+  color: #6b7280;
+  cursor: pointer;
+  transition: all 0.2s ease;
+
+  &:hover {
+    color: #374151;
+  }
+
+  &.active {
+    background: #ffffff;
+    color: #4f46e5;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+    font-weight: 600;
+  }
+}
+
+.period-stats {
+  padding: 1rem;
+  background: linear-gradient(135deg, #faf5ff 0%, #f3e8ff 100%);
+  border-radius: 12px;
+  border: 1px solid #e9d5ff;
+}
+
+.stats-main {
+  display: flex;
+  align-items: baseline;
+  gap: 6px;
+  margin-bottom: 8px;
+}
+
+.stats-label {
+  font-size: 13px;
+  color: #6b7280;
+}
+
+.stats-value {
+  font-size: 28px;
+  font-weight: 700;
+  color: #7c3aed;
+}
+
+.stats-unit {
+  font-size: 12px;
+  color: #9ca3af;
+}
+
+.stats-secondary {
+  display: flex;
+  justify-content: space-between;
+  font-size: 12px;
+  color: #6b7280;
+}
+
+.stats-range {
+  color: #9ca3af;
+}
+
+// 记录区域
+.records-section {
+  display: flex;
+  flex-direction: column;
+  gap: 1.5rem;
+}
+
+.day-group {
+  background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+  border-radius: 16px;
+  overflow: hidden;
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.06);
+  border: 1px solid rgba(226, 232, 240, 0.5);
+}
+
+.day-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 1rem 1.25rem;
+  background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
+  border-bottom: 1px solid #e2e8f0;
+}
+
+.day-date {
+  font-size: 15px;
+  font-weight: 600;
+  color: #1e293b;
+}
+
+.day-total {
+  font-size: 14px;
+  font-weight: 600;
+  color: #7c3aed;
+}
+
+.meal-cards {
+  display: flex;
+  flex-direction: column;
+}
+
+.meal-card {
+  display: flex;
+  align-items: center;
+  gap: 1rem;
+  padding: 1rem 1.25rem;
+  border-bottom: 1px solid #f1f5f9;
+  transition: background 0.2s ease;
+
+  &:last-child {
+    border-bottom: none;
+  }
+
+  &:hover {
+    background: #fafafa;
+  }
+}
+
+.meal-type-icon {
+  width: 44px;
+  height: 44px;
+  border-radius: 12px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 20px;
+  background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);
+  flex-shrink: 0;
+  
+  &.午餐 {
+    background: linear-gradient(135deg, #fed7aa 0%, #fdba74 100%);
+  }
+  
+  &.晚餐 {
+    background: linear-gradient(135deg, #ddd6fe 0%, #c4b5fd 100%);
+  }
+}
+
+.meal-info {
+  flex: 1;
+  min-width: 0;
+}
+
+.meal-header {
+  display: flex;
+  align-items: center;
+  gap: 8px;
+  margin-bottom: 4px;
+}
+
+.meal-type {
+  font-size: 14px;
+  font-weight: 600;
+  color: #1e293b;
+}
+
+.meal-time {
+  font-size: 12px;
+  color: #9ca3af;
+}
+
+.meal-foods {
+  font-size: 13px;
+  color: #64748b;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.meal-calories {
+  text-align: right;
+  flex-shrink: 0;
+}
+
+.calories-value {
+  display: block;
+  font-size: 18px;
+  font-weight: 700;
+  color: #ea4335;
+}
+
+.calories-unit {
+  font-size: 11px;
+  color: #9ca3af;
+}
+
+// 无数据提示
+.no-data {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  padding: 4rem 2rem;
+  color: #9ca3af;
+}
+
+.no-data-icon {
+  font-size: 48px;
+  margin-bottom: 1rem;
+  opacity: 0.5;
+}
+
+.no-data-text {
+  font-size: 14px;
+}

+ 172 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet-history/diet-history.component.ts

@@ -0,0 +1,172 @@
+import { Component, OnInit } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { Router, RouterModule } from '@angular/router';
+import { PageHeaderComponent } from '../../../shared/page-header/page-header.component';
+
+interface MealRecord {
+  id: number;
+  date: string;
+  type: string;
+  foods: string[];
+  calories: number;
+  time: string;
+}
+
+@Component({
+  selector: 'app-diet-history',
+  standalone: true,
+  imports: [CommonModule, RouterModule, PageHeaderComponent],
+  templateUrl: './diet-history.component.html',
+  styleUrl: './diet-history.component.scss'
+})
+export class DietHistoryComponent implements OnInit {
+  // 时期选择
+  selectedPeriod: 'week' | 'month' | '6months' = 'week';
+  
+  // 统计数据
+  periodStats = {
+    avgCalories: 0,
+    totalMeals: 0,
+    dateRange: ''
+  };
+
+  // 饮食记录(模拟数据)
+  allMealRecords: MealRecord[] = [];
+  filteredRecords: MealRecord[] = [];
+
+  // 按日期分组的记录
+  groupedRecords: { date: string; displayDate: string; meals: MealRecord[]; totalCalories: number }[] = [];
+
+  constructor(private router: Router) {}
+
+  ngOnInit(): void {
+    this.generateMockData();
+    this.updatePeriodData();
+  }
+
+  // 切换时期
+  changePeriod(period: 'week' | 'month' | '6months'): void {
+    this.selectedPeriod = period;
+    this.updatePeriodData();
+  }
+
+  // 返回饮食管理
+  backToDiet(): void {
+    this.router.navigate(['/diet']);
+  }
+
+  // 更新时期数据
+  private updatePeriodData(): void {
+    const now = new Date();
+    let startDate: Date;
+
+    switch (this.selectedPeriod) {
+      case 'week':
+        startDate = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
+        break;
+      case 'month':
+        startDate = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);
+        break;
+      case '6months':
+        startDate = new Date(now.getTime() - 180 * 24 * 60 * 60 * 1000);
+        break;
+    }
+
+    // 筛选记录
+    this.filteredRecords = this.allMealRecords.filter(r => {
+      const recordDate = new Date(r.date);
+      return recordDate >= startDate && recordDate <= now;
+    });
+
+    // 按日期分组
+    this.groupRecordsByDate();
+
+    // 计算统计
+    this.calculateStats(startDate, now);
+  }
+
+  // 按日期分组记录
+  private groupRecordsByDate(): void {
+    const groups: { [key: string]: MealRecord[] } = {};
+
+    this.filteredRecords.forEach(record => {
+      if (!groups[record.date]) {
+        groups[record.date] = [];
+      }
+      groups[record.date].push(record);
+    });
+
+    this.groupedRecords = Object.keys(groups)
+      .sort((a, b) => new Date(b).getTime() - new Date(a).getTime())
+      .map(date => ({
+        date,
+        displayDate: this.formatDisplayDate(date),
+        meals: groups[date],
+        totalCalories: groups[date].reduce((sum, m) => sum + m.calories, 0)
+      }));
+  }
+
+  // 格式化显示日期
+  private formatDisplayDate(dateStr: string): string {
+    const date = new Date(dateStr);
+    const today = new Date();
+    const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);
+
+    if (dateStr === today.toISOString().split('T')[0]) {
+      return '今天';
+    } else if (dateStr === yesterday.toISOString().split('T')[0]) {
+      return '昨天';
+    } else {
+      const weekDays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
+      return `${date.getMonth() + 1}月${date.getDate()}日 ${weekDays[date.getDay()]}`;
+    }
+  }
+
+  // 计算统计数据
+  private calculateStats(startDate: Date, endDate: Date): void {
+    const totalCalories = this.filteredRecords.reduce((sum, r) => sum + r.calories, 0);
+    const uniqueDays = new Set(this.filteredRecords.map(r => r.date)).size;
+
+    this.periodStats = {
+      avgCalories: uniqueDays > 0 ? Math.round(totalCalories / uniqueDays) : 0,
+      totalMeals: this.filteredRecords.length,
+      dateRange: `${this.formatDate(startDate)}至${this.formatDate(endDate)}`
+    };
+  }
+
+  private formatDate(date: Date): string {
+    return `${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日`;
+  }
+
+  // 生成模拟数据
+  private generateMockData(): void {
+    const mealTypes = [
+      { type: '早餐', time: '07:30', foods: ['全麦面包', '鸡蛋', '牛奶'], calories: 400 },
+      { type: '午餐', time: '12:00', foods: ['米饭', '鸡胸肉', '青菜'], calories: 650 },
+      { type: '晚餐', time: '18:30', foods: ['面条', '瘦肉', '西兰花'], calories: 500 }
+    ];
+
+    const records: MealRecord[] = [];
+    let id = 1;
+
+    for (let i = 0; i < 90; i++) {
+      const date = new Date(Date.now() - i * 24 * 60 * 60 * 1000);
+      const dateStr = date.toISOString().split('T')[0];
+
+      mealTypes.forEach(meal => {
+        if (Math.random() > 0.1) {
+          records.push({
+            id: id++,
+            date: dateStr,
+            type: meal.type,
+            foods: meal.foods,
+            calories: meal.calories + Math.floor(Math.random() * 100 - 50),
+            time: meal.time
+          });
+        }
+      });
+    }
+
+    this.allMealRecords = records;
+  }
+}

+ 10 - 3
campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet.component.html

@@ -75,9 +75,16 @@
       </div>
       </div>
     </div>
     </div>
 
 
-    <!-- 添加饮食按钮 -->
-    <div class="add-meal-section">
-      <button class="add-meal-button" (click)="navigateToAddMeal()">+ 添加饮食记录</button>
+    <!-- 操作按钮 -->
+    <div class="action-buttons-section">
+      <button class="action-button primary" (click)="navigateToAddMeal()">
+        <span class="btn-icon">+</span>
+        添加饮食记录
+      </button>
+      <button class="action-button secondary" (click)="navigateToDietHistory()">
+        <span class="btn-icon">📊</span>
+        查看饮食记录
+      </button>
     </div>
     </div>
 
 
     <!-- 营养摄入建议 -->
     <!-- 营养摄入建议 -->

+ 50 - 17
campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet.component.scss

@@ -253,25 +253,36 @@
   font-weight: 500;
   font-weight: 500;
 }
 }
 
 
-// 添加饮食按钮
-.add-meal-section {
-  text-align: center;
+// 操作按钮区域
+.action-buttons-section {
+  display: flex;
+  gap: 1rem;
+  justify-content: center;
   margin-bottom: 2rem;
   margin-bottom: 2rem;
+  padding: 0 1rem;
 }
 }
 
 
-.add-meal-button {
-  padding: 1rem 2.5rem;
-  background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
-  color: white;
+.action-button {
+  flex: 1;
+  max-width: 200px;
+  padding: 1rem 1.5rem;
   border: none;
   border: none;
   border-radius: 16px;
   border-radius: 16px;
-  font-size: 1.1rem;
+  font-size: 1rem;
   font-weight: 600;
   font-weight: 600;
   cursor: pointer;
   cursor: pointer;
   transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
   transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  gap: 0.5rem;
+  box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
   position: relative;
   position: relative;
   overflow: hidden;
   overflow: hidden;
-  box-shadow: 0 4px 20px rgba(79, 70, 229, 0.3);
+
+  .btn-icon {
+    font-size: 1.2rem;
+  }
 
 
   &::before {
   &::before {
     content: '';
     content: '';
@@ -284,17 +295,39 @@
     transition: left 0.5s;
     transition: left 0.5s;
   }
   }
 
 
-  &:hover {
-    transform: translateY(-3px);
-    box-shadow: 0 8px 30px rgba(79, 70, 229, 0.4);
-    
-    &::before {
-      left: 100%;
+  &:hover::before {
+    left: 100%;
+  }
+
+  &.primary {
+    background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
+    color: white;
+    box-shadow: 0 4px 20px rgba(79, 70, 229, 0.3);
+
+    &:hover {
+      transform: translateY(-3px);
+      box-shadow: 0 8px 30px rgba(79, 70, 229, 0.4);
+    }
+
+    &:active {
+      transform: translateY(-1px);
     }
     }
   }
   }
 
 
-  &:active {
-    transform: translateY(-1px);
+  &.secondary {
+    background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+    color: #4f46e5;
+    border: 2px solid #e2e8f0;
+
+    &:hover {
+      transform: translateY(-3px);
+      border-color: #4f46e5;
+      box-shadow: 0 8px 25px rgba(79, 70, 229, 0.15);
+    }
+
+    &:active {
+      transform: translateY(-1px);
+    }
   }
   }
 }
 }
 
 

+ 5 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet.component.ts

@@ -44,4 +44,9 @@ export class DietComponent {
   navigateToAddMeal(): void {
   navigateToAddMeal(): void {
     this.router.navigate(['/diet/add-meal']);
     this.router.navigate(['/diet/add-meal']);
   }
   }
+
+  // 跳转到饮食记录历史页面
+  navigateToDietHistory(): void {
+    this.router.navigate(['/diet/history']);
+  }
 }
 }

+ 6 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/diet/diet.routes.ts

@@ -1,6 +1,7 @@
 import { Routes } from '@angular/router';
 import { Routes } from '@angular/router';
 import { DietComponent } from './diet.component';
 import { DietComponent } from './diet.component';
 import { AddMealComponent } from './add-meal/add-meal.component';
 import { AddMealComponent } from './add-meal/add-meal.component';
+import { DietHistoryComponent } from './diet-history/diet-history.component';
 
 
 export const dietRoutes: Routes = [
 export const dietRoutes: Routes = [
   {
   {
@@ -12,5 +13,10 @@ export const dietRoutes: Routes = [
     path: 'add-meal',
     path: 'add-meal',
     component: AddMealComponent,
     component: AddMealComponent,
     title: '添加饮食记录 - 数智健调系统'
     title: '添加饮食记录 - 数智健调系统'
+  },
+  {
+    path: 'history',
+    component: DietHistoryComponent,
+    title: '饮食记录 - 数智健调系统'
   }
   }
 ];
 ];

+ 53 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise-actions/exercise-actions.component.html

@@ -0,0 +1,53 @@
+<div class="actions-container">
+  <app-page-header [title]="'动作库'" (back)="backToExercise()"></app-page-header>
+
+  <main class="actions-main">
+    <!-- 搜索栏 -->
+    <div class="search-bar">
+      <span class="search-icon">🔍</span>
+      <input type="text" placeholder="搜索动作或目标肌群..." [(ngModel)]="searchQuery" class="search-input">
+    </div>
+
+    <!-- 分类标签 -->
+    <div class="category-tabs">
+      <button class="category-tab" [class.active]="selectedCategory === '全部'" (click)="selectCategory('全部')">全部</button>
+      <button *ngFor="let cat of categories" class="category-tab" [class.active]="selectedCategory === cat.name" (click)="selectCategory(cat.name)">
+        <span class="cat-icon">{{ cat.icon }}</span>{{ cat.name }}
+      </button>
+    </div>
+
+    <!-- 动作列表 -->
+    <div class="actions-list">
+      <div class="action-card" *ngFor="let action of filteredActions">
+        <div class="action-thumbnail">{{ action.thumbnail }}</div>
+        <div class="action-info">
+          <div class="action-header">
+            <h3 class="action-name">{{ action.name }}</h3>
+            <span class="difficulty-badge" [ngClass]="getDifficultyClass(action.difficulty)">{{ getDifficultyText(action.difficulty) }}</span>
+          </div>
+          <p class="action-desc">{{ action.description }}</p>
+          <div class="action-muscles">
+            <span class="muscle-tag" *ngFor="let muscle of action.targetMuscles">{{ muscle }}</span>
+          </div>
+          <div class="action-equipment" *ngIf="action.equipment">
+            <span class="equipment-icon">🎽</span>
+            <span>{{ action.equipment }}</span>
+          </div>
+        </div>
+        <div class="action-links">
+          <button class="link-btn bilibili" *ngIf="action.bilibiliUrl" (click)="openBilibili(action.bilibiliUrl!)">
+            <span>📺</span><span>B站</span>
+          </button>
+          <button class="link-btn keep" *ngIf="action.keepUrl" (click)="openKeep(action.keepUrl!)">
+            <span>🏃</span><span>Keep</span>
+          </button>
+        </div>
+      </div>
+
+      <div class="empty-state" *ngIf="filteredActions.length === 0">
+        <span class="empty-icon">🔍</span>
+        <span class="empty-text">未找到相关动作</span>
+      </div>
+    </div>
+  </main>
+</div>

+ 202 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise-actions/exercise-actions.component.scss

@@ -0,0 +1,202 @@
+.actions-container {
+  display: flex;
+  flex-direction: column;
+  min-height: 100vh;
+  background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
+}
+
+.actions-main {
+  flex: 1;
+  padding: 1.5rem;
+  overflow-y: auto;
+}
+
+.search-bar {
+  display: flex;
+  align-items: center;
+  gap: 0.75rem;
+  padding: 0.75rem 1rem;
+  background: white;
+  border-radius: 12px;
+  margin-bottom: 1rem;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+  border: 1px solid #e2e8f0;
+}
+
+.search-icon { font-size: 1rem; opacity: 0.5; }
+
+.search-input {
+  flex: 1;
+  border: none;
+  outline: none;
+  font-size: 0.95rem;
+  color: #1e293b;
+  &::placeholder { color: #9ca3af; }
+}
+
+.category-tabs {
+  display: flex;
+  gap: 0.5rem;
+  overflow-x: auto;
+  padding-bottom: 0.5rem;
+  margin-bottom: 1.5rem;
+  &::-webkit-scrollbar { display: none; }
+}
+
+.category-tab {
+  display: flex;
+  align-items: center;
+  gap: 0.25rem;
+  padding: 0.5rem 1rem;
+  background: white;
+  border: 1px solid #e2e8f0;
+  border-radius: 20px;
+  font-size: 0.85rem;
+  color: #64748b;
+  cursor: pointer;
+  white-space: nowrap;
+  transition: all 0.2s ease;
+
+  &:hover { border-color: #10b981; color: #10b981; }
+  &.active {
+    background: linear-gradient(135deg, #10b981 0%, #059669 100%);
+    color: white;
+    border-color: transparent;
+  }
+}
+
+.cat-icon { font-size: 1rem; }
+
+.actions-list {
+  display: flex;
+  flex-direction: column;
+  gap: 1rem;
+}
+
+.action-card {
+  display: flex;
+  gap: 1rem;
+  padding: 1rem;
+  background: white;
+  border-radius: 16px;
+  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);
+  border: 1px solid rgba(226, 232, 240, 0.5);
+  transition: all 0.2s ease;
+
+  &:hover {
+    transform: translateY(-2px);
+    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
+  }
+}
+
+.action-thumbnail {
+  width: 60px;
+  height: 60px;
+  border-radius: 12px;
+  background: linear-gradient(135deg, #f0fdf4 0%, #ecfdf5 100%);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 1.75rem;
+  flex-shrink: 0;
+}
+
+.action-info { flex: 1; min-width: 0; }
+
+.action-header {
+  display: flex;
+  align-items: center;
+  gap: 0.5rem;
+  margin-bottom: 0.5rem;
+}
+
+.action-name {
+  margin: 0;
+  font-size: 1rem;
+  font-weight: 600;
+  color: #1e293b;
+}
+
+.difficulty-badge {
+  padding: 0.15rem 0.5rem;
+  border-radius: 10px;
+  font-size: 0.7rem;
+  font-weight: 500;
+
+  &.difficulty-beginner { background: #dcfce7; color: #16a34a; }
+  &.difficulty-intermediate { background: #fef3c7; color: #d97706; }
+  &.difficulty-advanced { background: #fee2e2; color: #dc2626; }
+}
+
+.action-desc {
+  margin: 0 0 0.5rem;
+  font-size: 0.85rem;
+  color: #64748b;
+  line-height: 1.4;
+}
+
+.action-muscles {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 0.35rem;
+  margin-bottom: 0.5rem;
+}
+
+.muscle-tag {
+  padding: 0.2rem 0.5rem;
+  background: #f1f5f9;
+  border-radius: 6px;
+  font-size: 0.75rem;
+  color: #475569;
+}
+
+.action-equipment {
+  display: flex;
+  align-items: center;
+  gap: 0.25rem;
+  font-size: 0.8rem;
+  color: #9ca3af;
+}
+
+.action-links {
+  display: flex;
+  flex-direction: column;
+  gap: 0.5rem;
+  flex-shrink: 0;
+}
+
+.link-btn {
+  display: flex;
+  align-items: center;
+  gap: 0.35rem;
+  padding: 0.5rem 0.75rem;
+  border: none;
+  border-radius: 8px;
+  font-size: 0.8rem;
+  font-weight: 500;
+  cursor: pointer;
+  transition: all 0.2s ease;
+
+  &.bilibili {
+    background: linear-gradient(135deg, #fb7299 0%, #f25d8e 100%);
+    color: white;
+    &:hover { transform: scale(1.05); }
+  }
+
+  &.keep {
+    background: linear-gradient(135deg, #00c8c8 0%, #00b5b5 100%);
+    color: white;
+    &:hover { transform: scale(1.05); }
+  }
+}
+
+.empty-state {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  padding: 4rem 2rem;
+  color: #9ca3af;
+}
+
+.empty-icon { font-size: 48px; margin-bottom: 1rem; opacity: 0.5; }
+.empty-text { font-size: 1rem; }

+ 163 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise-actions/exercise-actions.component.ts

@@ -0,0 +1,163 @@
+import { Component } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { Router, RouterModule } from '@angular/router';
+import { FormsModule } from '@angular/forms';
+import { PageHeaderComponent } from '../../../shared/page-header/page-header.component';
+
+interface ExerciseAction {
+  id: number;
+  name: string;
+  category: string;
+  targetMuscles: string[];
+  difficulty: 'beginner' | 'intermediate' | 'advanced';
+  equipment?: string;
+  thumbnail: string;
+  bilibiliUrl?: string;
+  keepUrl?: string;
+  description: string;
+}
+
+@Component({
+  selector: 'app-exercise-actions',
+  standalone: true,
+  imports: [CommonModule, RouterModule, FormsModule, PageHeaderComponent],
+  templateUrl: './exercise-actions.component.html',
+  styleUrl: './exercise-actions.component.scss'
+})
+export class ExerciseActionsComponent {
+  selectedCategory = '全部';
+  searchQuery = '';
+
+  categories = [
+    { name: '胸部训练', icon: '💪' },
+    { name: '背部训练', icon: '🔙' },
+    { name: '腿部训练', icon: '🦵' },
+    { name: '核心训练', icon: '🎯' },
+    { name: '有氧训练', icon: '🏃' }
+  ];
+
+  allActions: ExerciseAction[] = [
+    {
+      id: 1, name: '俯卧撑', category: '胸部训练',
+      targetMuscles: ['胸大肌', '三角肌前束', '肱三头肌'],
+      difficulty: 'beginner', thumbnail: '🏋️',
+      bilibiliUrl: 'https://www.bilibili.com/video/BV1xx411c7BF',
+      keepUrl: 'https://www.gotokeep.com/training',
+      description: '经典自重训练动作,锻炼胸肌和手臂力量'
+    },
+    {
+      id: 2, name: '哑铃卧推', category: '胸部训练',
+      targetMuscles: ['胸大肌', '三角肌前束'],
+      difficulty: 'intermediate', equipment: '哑铃、卧推凳', thumbnail: '🏋️',
+      bilibiliUrl: 'https://www.bilibili.com/video/BV1xx411c7BF',
+      keepUrl: 'https://www.gotokeep.com/training',
+      description: '使用哑铃进行卧推,增加胸肌训练自由度'
+    },
+    {
+      id: 3, name: '引体向上', category: '背部训练',
+      targetMuscles: ['背阔肌', '肱二头肌'],
+      difficulty: 'advanced', equipment: '单杠', thumbnail: '🏋️',
+      bilibiliUrl: 'https://www.bilibili.com/video/BV1xx411c7BF',
+      keepUrl: 'https://www.gotokeep.com/training',
+      description: '最有效的背部训练动作之一'
+    },
+    {
+      id: 4, name: '哑铃划船', category: '背部训练',
+      targetMuscles: ['背阔肌', '斜方肌'],
+      difficulty: 'intermediate', equipment: '哑铃', thumbnail: '🏋️',
+      bilibiliUrl: 'https://www.bilibili.com/video/BV1xx411c7BF',
+      keepUrl: 'https://www.gotokeep.com/training',
+      description: '单侧训练背部肌肉,纠正左右不平衡'
+    },
+    {
+      id: 5, name: '深蹲', category: '腿部训练',
+      targetMuscles: ['股四头肌', '臀大肌', '腘绳肌'],
+      difficulty: 'beginner', thumbnail: '🏋️',
+      bilibiliUrl: 'https://www.bilibili.com/video/BV1xx411c7BF',
+      keepUrl: 'https://www.gotokeep.com/training',
+      description: '动作之王,全身性训练动作'
+    },
+    {
+      id: 6, name: '箭步蹲', category: '腿部训练',
+      targetMuscles: ['股四头肌', '臀大肌'],
+      difficulty: 'intermediate', thumbnail: '🏋️',
+      bilibiliUrl: 'https://www.bilibili.com/video/BV1xx411c7BF',
+      keepUrl: 'https://www.gotokeep.com/training',
+      description: '单腿训练动作,提高下肢稳定性'
+    },
+    {
+      id: 7, name: '平板支撑', category: '核心训练',
+      targetMuscles: ['腹直肌', '腹横肌', '竖脊肌'],
+      difficulty: 'beginner', thumbnail: '🏋️',
+      bilibiliUrl: 'https://www.bilibili.com/video/BV1xx411c7BF',
+      keepUrl: 'https://www.gotokeep.com/training',
+      description: '静态核心训练,提高核心稳定性'
+    },
+    {
+      id: 8, name: '仰卧起坐', category: '核心训练',
+      targetMuscles: ['腹直肌'],
+      difficulty: 'beginner', thumbnail: '🏋️',
+      bilibiliUrl: 'https://www.bilibili.com/video/BV1xx411c7BF',
+      keepUrl: 'https://www.gotokeep.com/training',
+      description: '经典腹肌训练动作'
+    },
+    {
+      id: 9, name: '开合跳', category: '有氧训练',
+      targetMuscles: ['全身'],
+      difficulty: 'beginner', thumbnail: '🏃',
+      bilibiliUrl: 'https://www.bilibili.com/video/BV1xx411c7BF',
+      keepUrl: 'https://www.gotokeep.com/training',
+      description: '高效的全身有氧运动'
+    },
+    {
+      id: 10, name: '波比跳', category: '有氧训练',
+      targetMuscles: ['全身'],
+      difficulty: 'advanced', thumbnail: '🏃',
+      bilibiliUrl: 'https://www.bilibili.com/video/BV1xx411c7BF',
+      keepUrl: 'https://www.gotokeep.com/training',
+      description: '高强度全身训练动作'
+    }
+  ];
+
+  get filteredActions(): ExerciseAction[] {
+    let actions = this.selectedCategory === '全部' 
+      ? this.allActions 
+      : this.allActions.filter(a => a.category === this.selectedCategory);
+    
+    if (this.searchQuery) {
+      const query = this.searchQuery.toLowerCase();
+      actions = actions.filter(a => 
+        a.name.toLowerCase().includes(query) ||
+        a.targetMuscles.some(m => m.toLowerCase().includes(query))
+      );
+    }
+    return actions;
+  }
+
+  constructor(private router: Router) {}
+
+  backToExercise(): void {
+    this.router.navigate(['/exercise']);
+  }
+
+  selectCategory(name: string): void {
+    this.selectedCategory = name;
+  }
+
+  openBilibili(url: string): void {
+    window.open(url, '_blank');
+  }
+
+  openKeep(url: string): void {
+    window.open(url, '_blank');
+  }
+
+  getDifficultyClass(d: string): string {
+    return `difficulty-${d}`;
+  }
+
+  getDifficultyText(d: string): string {
+    const map: Record<string, string> = { beginner: '入门', intermediate: '进阶', advanced: '高级' };
+    return map[d] || d;
+  }
+}

+ 93 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise-history/exercise-history.component.html

@@ -0,0 +1,93 @@
+<div class="history-container">
+  <app-page-header [title]="'历史记录'" (back)="backToExercise()"></app-page-header>
+
+  <main class="history-main">
+    <!-- 月份导航 -->
+    <div class="month-nav">
+      <button class="nav-btn" (click)="previousMonth()">‹</button>
+      <span class="month-title">{{ currentYearMonth }}</span>
+      <button class="nav-btn" (click)="nextMonth()">›</button>
+      <button class="back-today-btn" (click)="goToCurrentMonth()">回到本月 →</button>
+    </div>
+
+    <!-- 工具栏 -->
+    <div class="toolbar">
+      <div class="view-toggle">
+        <button class="toggle-btn" [class.active]="viewMode === 'month'" (click)="viewMode = 'month'">月</button>
+        <span class="divider">/</span>
+        <button class="toggle-btn" [class.active]="viewMode === 'year'" (click)="viewMode = 'year'">年报</button>
+      </div>
+      <button class="manage-btn" (click)="toggleManageMode()">{{ isManageMode ? '取消' : '管理' }}</button>
+    </div>
+
+    <!-- 管理操作 -->
+    <div class="manage-actions" *ngIf="isManageMode">
+      <button class="action-btn" (click)="selectAll()">全选</button>
+      <button class="action-btn delete" (click)="batchDelete()">删除({{ selectedRecords.size }})</button>
+    </div>
+
+    <!-- 月统计 -->
+    <div class="month-stats">
+      <div class="stat-card">
+        <span class="stat-value">{{ monthStats.completedDays }}/{{ monthStats.totalDays }}</span>
+        <span class="stat-label">训练天数</span>
+      </div>
+      <div class="stat-card">
+        <span class="stat-value">{{ formatDuration(monthStats.totalDuration) }}</span>
+        <span class="stat-label">总时长</span>
+      </div>
+      <div class="stat-card">
+        <span class="stat-value">{{ monthStats.totalCalories }}</span>
+        <span class="stat-label">消耗热量(千卡)</span>
+      </div>
+    </div>
+
+    <!-- 日历网格 -->
+    <div class="calendar">
+      <div class="calendar-header">
+        <span class="weekday" *ngFor="let day of weekDays">{{ day }}</span>
+      </div>
+      <div class="calendar-grid">
+        <div *ngFor="let day of calendarDays" class="calendar-day"
+          [class.empty]="!day"
+          [class.has-record]="day && day.exercises.length > 0"
+          [class.completed]="day?.completed"
+          [class.today]="day && isToday(day.date)"
+          [class.selected]="day && isSelected(day.date)"
+          (click)="selectDate(day)">
+          <ng-container *ngIf="day">
+            <span class="day-number">{{ day.date.getDate() }}</span>
+            <div class="day-content" *ngIf="day.exercises.length > 0">
+              <span class="completion-badge" *ngIf="day.completed">✓</span>
+              <span class="exercise-types">{{ getExerciseTypes(day) }}</span>
+              <span class="day-duration">{{ day.totalDuration }}分钟</span>
+            </div>
+          </ng-container>
+        </div>
+      </div>
+    </div>
+
+    <!-- 选中日期详情 -->
+    <div class="day-detail" *ngIf="selectedDayRecord && !isManageMode">
+      <div class="detail-header">
+        <h3>{{ selectedDate | date:'M月d日' }} 运动详情</h3>
+        <button class="close-btn" (click)="selectedDate = null">×</button>
+      </div>
+      <div class="detail-exercises">
+        <div class="exercise-item" *ngFor="let ex of selectedDayRecord.exercises">
+          <div class="exercise-info">
+            <span class="exercise-type">{{ ex.type }}</span>
+            <span class="exercise-status" [class.done]="ex.completed">{{ ex.completed ? '✓ 已完成' : '未完成' }}</span>
+          </div>
+          <div class="exercise-metrics">
+            <span>{{ ex.duration }}分钟</span>
+            <span>{{ ex.calories }}千卡</span>
+          </div>
+        </div>
+      </div>
+      <div class="detail-summary">
+        总计:{{ selectedDayRecord.totalDuration }}分钟 / {{ selectedDayRecord.totalCalories }}千卡
+      </div>
+    </div>
+  </main>
+</div>

+ 286 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise-history/exercise-history.component.scss

@@ -0,0 +1,286 @@
+.history-container {
+  display: flex;
+  flex-direction: column;
+  min-height: 100vh;
+  background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
+}
+
+.history-main {
+  flex: 1;
+  padding: 1rem;
+  overflow-y: auto;
+}
+
+.month-nav {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  gap: 1rem;
+  margin-bottom: 1rem;
+}
+
+.nav-btn {
+  width: 32px;
+  height: 32px;
+  border: none;
+  background: white;
+  border-radius: 50%;
+  font-size: 1.2rem;
+  color: #64748b;
+  cursor: pointer;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+  &:hover { background: #f1f5f9; }
+}
+
+.month-title {
+  font-size: 1.1rem;
+  font-weight: 600;
+  color: #1e293b;
+}
+
+.back-today-btn {
+  padding: 0.35rem 0.75rem;
+  background: #e0f2fe;
+  border: none;
+  border-radius: 16px;
+  font-size: 0.8rem;
+  color: #0284c7;
+  cursor: pointer;
+  &:hover { background: #bae6fd; }
+}
+
+.toolbar {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 1rem;
+}
+
+.view-toggle {
+  display: flex;
+  align-items: center;
+  gap: 0.5rem;
+}
+
+.toggle-btn {
+  padding: 0.35rem 0.75rem;
+  background: transparent;
+  border: none;
+  font-size: 0.9rem;
+  color: #64748b;
+  cursor: pointer;
+  &.active { color: #0284c7; font-weight: 600; }
+}
+
+.divider { color: #cbd5e1; }
+
+.manage-btn {
+  padding: 0.35rem 0.75rem;
+  background: white;
+  border: 1px solid #e2e8f0;
+  border-radius: 8px;
+  font-size: 0.85rem;
+  color: #64748b;
+  cursor: pointer;
+}
+
+.manage-actions {
+  display: flex;
+  gap: 0.5rem;
+  margin-bottom: 1rem;
+}
+
+.action-btn {
+  padding: 0.35rem 0.75rem;
+  background: white;
+  border: 1px solid #e2e8f0;
+  border-radius: 8px;
+  font-size: 0.85rem;
+  color: #64748b;
+  cursor: pointer;
+  &.delete { background: #fee2e2; border-color: #fecaca; color: #dc2626; }
+}
+
+.month-stats {
+  display: grid;
+  grid-template-columns: repeat(3, 1fr);
+  gap: 0.75rem;
+  margin-bottom: 1rem;
+}
+
+.stat-card {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  padding: 0.75rem;
+  background: white;
+  border-radius: 12px;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
+}
+
+.stat-value {
+  font-size: 1.1rem;
+  font-weight: 700;
+  color: #10b981;
+}
+
+.stat-label {
+  font-size: 0.75rem;
+  color: #9ca3af;
+  margin-top: 0.25rem;
+}
+
+.calendar {
+  background: white;
+  border-radius: 16px;
+  padding: 1rem;
+  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);
+  margin-bottom: 1rem;
+}
+
+.calendar-header {
+  display: grid;
+  grid-template-columns: repeat(7, 1fr);
+  margin-bottom: 0.5rem;
+}
+
+.weekday {
+  text-align: center;
+  font-size: 0.85rem;
+  font-weight: 500;
+  color: #64748b;
+  padding: 0.5rem 0;
+}
+
+.calendar-grid {
+  display: grid;
+  grid-template-columns: repeat(7, 1fr);
+  gap: 4px;
+}
+
+.calendar-day {
+  min-height: 70px;
+  padding: 0.35rem;
+  border-radius: 8px;
+  background: #f8fafc;
+  cursor: pointer;
+  transition: all 0.2s ease;
+  display: flex;
+  flex-direction: column;
+  font-size: 0.7rem;
+
+  &.empty { background: transparent; cursor: default; }
+  &.has-record { background: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%); border: 1px solid #a7f3d0; }
+  &.completed { background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%); border: 1px solid #93c5fd; }
+  &.today { box-shadow: 0 0 0 2px #10b981; }
+  &.selected { box-shadow: 0 0 0 2px #3b82f6; background: #eff6ff; }
+  &:hover:not(.empty) { transform: scale(1.02); }
+}
+
+.day-number {
+  font-weight: 600;
+  color: #1e293b;
+  margin-bottom: 0.2rem;
+}
+
+.day-content {
+  display: flex;
+  flex-direction: column;
+  gap: 1px;
+  overflow: hidden;
+}
+
+.completion-badge {
+  color: #10b981;
+  font-size: 0.65rem;
+  font-weight: bold;
+}
+
+.exercise-types {
+  color: #475569;
+  font-size: 0.65rem;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.day-duration {
+  color: #9ca3af;
+  font-size: 0.6rem;
+}
+
+.day-detail {
+  background: white;
+  border-radius: 16px;
+  padding: 1rem;
+  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
+}
+
+.detail-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 1rem;
+
+  h3 { margin: 0; font-size: 1rem; color: #1e293b; }
+}
+
+.close-btn {
+  width: 28px;
+  height: 28px;
+  border: none;
+  background: #f1f5f9;
+  border-radius: 50%;
+  font-size: 1.2rem;
+  color: #64748b;
+  cursor: pointer;
+  &:hover { background: #e2e8f0; }
+}
+
+.detail-exercises {
+  display: flex;
+  flex-direction: column;
+  gap: 0.75rem;
+}
+
+.exercise-item {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 0.75rem;
+  background: #f8fafc;
+  border-radius: 10px;
+}
+
+.exercise-info {
+  display: flex;
+  flex-direction: column;
+  gap: 0.25rem;
+}
+
+.exercise-type { font-weight: 600; color: #1e293b; }
+
+.exercise-status {
+  font-size: 0.8rem;
+  color: #9ca3af;
+  &.done { color: #10b981; }
+}
+
+.exercise-metrics {
+  display: flex;
+  flex-direction: column;
+  align-items: flex-end;
+  gap: 0.25rem;
+  font-size: 0.85rem;
+  color: #64748b;
+}
+
+.detail-summary {
+  margin-top: 1rem;
+  padding-top: 1rem;
+  border-top: 1px solid #e2e8f0;
+  text-align: center;
+  font-size: 0.9rem;
+  color: #64748b;
+  font-weight: 500;
+}

+ 211 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise-history/exercise-history.component.ts

@@ -0,0 +1,211 @@
+import { Component, OnInit } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { Router, RouterModule } from '@angular/router';
+import { FormsModule } from '@angular/forms';
+import { PageHeaderComponent } from '../../../shared/page-header/page-header.component';
+
+interface ExerciseItem {
+  type: string;
+  duration: number;
+  calories: number;
+  completed: boolean;
+}
+
+interface DayRecord {
+  date: Date;
+  exercises: ExerciseItem[];
+  totalDuration: number;
+  totalCalories: number;
+  completed: boolean;
+}
+
+@Component({
+  selector: 'app-exercise-history',
+  standalone: true,
+  imports: [CommonModule, RouterModule, FormsModule, PageHeaderComponent],
+  templateUrl: './exercise-history.component.html',
+  styleUrl: './exercise-history.component.scss'
+})
+export class ExerciseHistoryComponent implements OnInit {
+  currentDate = new Date();
+  selectedDate: Date | null = null;
+  viewMode: 'month' | 'year' = 'month';
+  isManageMode = false;
+  selectedRecords: Set<string> = new Set();
+
+  calendarDays: (DayRecord | null)[] = [];
+  weekDays = ['一', '二', '三', '四', '五', '六', '日'];
+  historyRecords: Map<string, DayRecord> = new Map();
+
+  monthStats = { totalDays: 0, completedDays: 0, totalDuration: 0, totalCalories: 0 };
+
+  constructor(private router: Router) {}
+
+  ngOnInit(): void {
+    this.generateMockData();
+    this.buildCalendar();
+    this.calculateMonthStats();
+  }
+
+  get currentYearMonth(): string {
+    return `${this.currentDate.getFullYear()}年${this.currentDate.getMonth() + 1}月`;
+  }
+
+  get selectedDayRecord(): DayRecord | null {
+    if (!this.selectedDate) return null;
+    return this.historyRecords.get(this.formatDateKey(this.selectedDate)) || null;
+  }
+
+  buildCalendar(): void {
+    const year = this.currentDate.getFullYear();
+    const month = this.currentDate.getMonth();
+    const firstDay = new Date(year, month, 1);
+    const lastDay = new Date(year, month + 1, 0);
+    let startWeekDay = firstDay.getDay();
+    startWeekDay = startWeekDay === 0 ? 6 : startWeekDay - 1;
+
+    this.calendarDays = [];
+    for (let i = 0; i < startWeekDay; i++) this.calendarDays.push(null);
+
+    for (let day = 1; day <= lastDay.getDate(); day++) {
+      const date = new Date(year, month, day);
+      const dateKey = this.formatDateKey(date);
+      const record = this.historyRecords.get(dateKey);
+      this.calendarDays.push(record || { date, exercises: [], totalDuration: 0, totalCalories: 0, completed: false });
+    }
+  }
+
+  previousMonth(): void {
+    this.currentDate = new Date(this.currentDate.getFullYear(), this.currentDate.getMonth() - 1, 1);
+    this.buildCalendar();
+    this.calculateMonthStats();
+  }
+
+  nextMonth(): void {
+    this.currentDate = new Date(this.currentDate.getFullYear(), this.currentDate.getMonth() + 1, 1);
+    this.buildCalendar();
+    this.calculateMonthStats();
+  }
+
+  goToCurrentMonth(): void {
+    this.currentDate = new Date();
+    this.buildCalendar();
+    this.calculateMonthStats();
+  }
+
+  selectDate(day: DayRecord | null): void {
+    if (!day) return;
+    if (this.isManageMode) {
+      const key = this.formatDateKey(day.date);
+      if (this.selectedRecords.has(key)) this.selectedRecords.delete(key);
+      else this.selectedRecords.add(key);
+    } else {
+      this.selectedDate = day.date;
+    }
+  }
+
+  toggleManageMode(): void {
+    this.isManageMode = !this.isManageMode;
+    if (!this.isManageMode) this.selectedRecords.clear();
+  }
+
+  batchDelete(): void {
+    if (this.selectedRecords.size === 0) return;
+    if (confirm(`确定删除 ${this.selectedRecords.size} 条记录吗?`)) {
+      this.selectedRecords.forEach(key => this.historyRecords.delete(key));
+      this.selectedRecords.clear();
+      this.buildCalendar();
+      this.calculateMonthStats();
+      this.isManageMode = false;
+    }
+  }
+
+  selectAll(): void {
+    this.calendarDays.forEach(day => {
+      if (day && day.exercises.length > 0) this.selectedRecords.add(this.formatDateKey(day.date));
+    });
+  }
+
+  isToday(date: Date): boolean {
+    const today = new Date();
+    return date.getDate() === today.getDate() && date.getMonth() === today.getMonth() && date.getFullYear() === today.getFullYear();
+  }
+
+  isSelected(date: Date): boolean {
+    return this.selectedRecords.has(this.formatDateKey(date));
+  }
+
+  backToExercise(): void {
+    this.router.navigate(['/exercise']);
+  }
+
+  formatDuration(mins: number): string {
+    if (mins < 60) return `${mins}分钟`;
+    const hours = Math.floor(mins / 60);
+    const minutes = mins % 60;
+    return minutes > 0 ? `${hours}小时${minutes}分钟` : `${hours}小时`;
+  }
+
+  getExerciseTypes(day: DayRecord | null): string {
+    if (!day || !day.exercises || day.exercises.length === 0) {
+      return '';
+    }
+    return day.exercises.map(e => e.type).slice(0, 2).join('、');
+  }
+
+  private calculateMonthStats(): void {
+    const year = this.currentDate.getFullYear();
+    const month = this.currentDate.getMonth();
+    let totalDays = 0, completedDays = 0, totalDuration = 0, totalCalories = 0;
+
+    this.historyRecords.forEach((record, key) => {
+      const [y, m] = key.split('-').map(Number);
+      if (y === year && m === month + 1) {
+        totalDays++;
+        if (record.completed) completedDays++;
+        totalDuration += record.totalDuration;
+        totalCalories += record.totalCalories;
+      }
+    });
+
+    this.monthStats = { totalDays, completedDays, totalDuration, totalCalories };
+  }
+
+  private formatDateKey(date: Date): string {
+    return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
+  }
+
+  private generateMockData(): void {
+    const exerciseTypes = [
+      { type: '晨跑', duration: 30, calories: 250 },
+      { type: '力量训练', duration: 45, calories: 300 },
+      { type: '瑜伽', duration: 40, calories: 150 },
+      { type: '游泳', duration: 60, calories: 400 },
+      { type: '骑行', duration: 50, calories: 350 }
+    ];
+
+    for (let i = 0; i < 60; i++) {
+      if (Math.random() > 0.4) {
+        const date = new Date(Date.now() - i * 24 * 60 * 60 * 1000);
+        const numExercises = Math.floor(Math.random() * 3) + 1;
+        const exercises: ExerciseItem[] = [];
+        let totalDuration = 0, totalCalories = 0;
+
+        for (let j = 0; j < numExercises; j++) {
+          const ex = exerciseTypes[Math.floor(Math.random() * exerciseTypes.length)];
+          const variation = Math.floor(Math.random() * 20) - 10;
+          const duration = ex.duration + variation;
+          const calories = ex.calories + variation * 5;
+          exercises.push({ type: ex.type, duration, calories, completed: Math.random() > 0.2 });
+          totalDuration += duration;
+          totalCalories += calories;
+        }
+
+        this.historyRecords.set(this.formatDateKey(date), {
+          date, exercises, totalDuration, totalCalories,
+          completed: exercises.every(e => e.completed)
+        });
+      }
+    }
+  }
+}

+ 75 - 24
campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise.component.html

@@ -2,41 +2,76 @@
   <app-page-header [title]="'运动记录'" (back)="backToDashboard()"></app-page-header>
   <app-page-header [title]="'运动记录'" (back)="backToDashboard()"></app-page-header>
 
 
   <main class="exercise-main">
   <main class="exercise-main">
+    <!-- 今日运动概览 -->
+    <div class="today-overview">
+      <h2>今日运动概览</h2>
+      <div class="overview-stats">
+        <div class="stat-item">
+          <span class="stat-icon">⏱️</span>
+          <div class="stat-info">
+            <span class="stat-value">{{ totalDuration }}</span>
+            <span class="stat-label">总时长</span>
+          </div>
+        </div>
+        <div class="stat-item">
+          <span class="stat-icon">🔥</span>
+          <div class="stat-info">
+            <span class="stat-value">{{ totalCalories }}千卡</span>
+            <span class="stat-label">消耗热量</span>
+          </div>
+        </div>
+        <div class="stat-item">
+          <span class="stat-icon">🎯</span>
+          <div class="stat-info">
+            <span class="stat-value">{{ completedCount }}/{{ targetCount }}</span>
+            <span class="stat-label">完成目标</span>
+          </div>
+        </div>
+      </div>
+    </div>
+
     <!-- 今日运动记录列表 -->
     <!-- 今日运动记录列表 -->
     <div class="exercises-list">
     <div class="exercises-list">
       <h2>今日运动记录</h2>
       <h2>今日运动记录</h2>
       <ng-container *ngFor="let exercise of todayExercises">
       <ng-container *ngFor="let exercise of todayExercises">
-        <div class="exercise-card">
-          <div class="exercise-header">
-            <h3>{{ exercise.type }}</h3>
+        <div class="exercise-card" [class.completed]="exercise.completed">
+          <div class="exercise-status">
+            <span class="status-icon" *ngIf="exercise.completed">✓</span>
           </div>
           </div>
-          <div class="exercise-content">
-            <div class="exercise-details">
-              <div class="detail-item">
-                <span class="detail-label">时长</span>
-                <span class="detail-value">{{ exercise.duration }}</span>
-              </div>
-              <div class="detail-item" *ngIf="exercise.distance">
-                <span class="detail-label">距离</span>
-                <span class="detail-value">{{ exercise.distance }}</span>
-              </div>
-              <div class="detail-item" *ngIf="exercise.description">
-                <span class="detail-label">描述</span>
-                <span class="detail-value">{{ exercise.description }}</span>
-              </div>
-              <div class="detail-item calories-highlight">
-                <span class="detail-label">消耗热量</span>
-                <span class="detail-value calories-highlight">{{ exercise.calories }} 千卡</span>
+          <div class="exercise-body">
+            <div class="exercise-header">
+              <h3>{{ exercise.type }}</h3>
+              <span class="exercise-time">{{ exercise.time }}</span>
+            </div>
+            <div class="exercise-content">
+              <div class="exercise-details">
+                <div class="detail-item">
+                  <span class="detail-label">时长</span>
+                  <span class="detail-value">{{ exercise.duration }}</span>
+                </div>
+                <div class="detail-item" *ngIf="exercise.distance">
+                  <span class="detail-label">距离</span>
+                  <span class="detail-value">{{ exercise.distance }}</span>
+                </div>
+                <div class="detail-item" *ngIf="exercise.description">
+                  <span class="detail-label">描述</span>
+                  <span class="detail-value">{{ exercise.description }}</span>
+                </div>
+                <div class="detail-item calories-highlight">
+                  <span class="detail-label">消耗热量</span>
+                  <span class="detail-value calories">{{ exercise.calories }} 千卡</span>
+                </div>
               </div>
               </div>
             </div>
             </div>
           </div>
           </div>
         </div>
         </div>
       </ng-container>
       </ng-container>
-    </div>
 
 
-    <!-- 添加运动按钮 -->
-    <div class="add-exercise-section">
-      <button class="add-exercise-button" (click)="navigateToAddExercise()">+ 添加运动记录</button>
+      <div class="empty-state" *ngIf="todayExercises.length === 0">
+        <span class="empty-icon">🏃</span>
+        <span class="empty-text">今日还没有运动记录</span>
+        <span class="empty-hint">点击下方"录入"开始记录</span>
+      </div>
     </div>
     </div>
 
 
     <!-- 运动建议 -->
     <!-- 运动建议 -->
@@ -45,4 +80,20 @@
       <p>根据您的运动习惯,建议增加柔韧性训练,如瑜伽或拉伸运动,以提高身体灵活性。</p>
       <p>根据您的运动习惯,建议增加柔韧性训练,如瑜伽或拉伸运动,以提高身体灵活性。</p>
     </div>
     </div>
   </main>
   </main>
+
+  <!-- 底部导航栏 -->
+  <nav class="bottom-nav">
+    <button class="nav-item" (click)="navigateToAddExercise()">
+      <span class="nav-icon">📝</span>
+      <span class="nav-label">录入</span>
+    </button>
+    <button class="nav-item" (click)="navigateToActions()">
+      <span class="nav-icon">💪</span>
+      <span class="nav-label">动作</span>
+    </button>
+    <button class="nav-item" (click)="navigateToHistory()">
+      <span class="nav-icon">📅</span>
+      <span class="nav-label">历史记录</span>
+    </button>
+  </nav>
 </div>
 </div>

+ 170 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise.component.scss

@@ -347,4 +347,174 @@
   color: #5f6368;
   color: #5f6368;
   font-size: 0.95rem;
   font-size: 0.95rem;
   line-height: 1.5;
   line-height: 1.5;
+}
+
+// 今日概览
+.today-overview {
+  background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+  border-radius: 20px;
+  padding: 1.5rem;
+  margin-bottom: 1.5rem;
+  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
+  border: 1px solid rgba(226, 232, 240, 0.5);
+
+  h2 {
+    margin: 0 0 1rem 0;
+    font-size: 1.2rem;
+    color: #1e293b;
+    font-weight: 600;
+  }
+}
+
+.overview-stats {
+  display: grid;
+  grid-template-columns: repeat(3, 1fr);
+  gap: 1rem;
+}
+
+.stat-item {
+  display: flex;
+  align-items: center;
+  gap: 0.75rem;
+  padding: 1rem;
+  background: linear-gradient(135deg, #f0fdf4 0%, #ecfdf5 100%);
+  border-radius: 12px;
+  border: 1px solid #bbf7d0;
+}
+
+.stat-icon {
+  font-size: 1.5rem;
+}
+
+.stat-info {
+  display: flex;
+  flex-direction: column;
+}
+
+.stat-value {
+  font-size: 1.1rem;
+  font-weight: 700;
+  color: #10b981;
+}
+
+.stat-label {
+  font-size: 0.75rem;
+  color: #64748b;
+}
+
+// 运动卡片增强
+.exercise-card {
+  display: flex;
+  gap: 1rem;
+
+  &.completed .exercise-status {
+    background: linear-gradient(135deg, #10b981 0%, #059669 100%);
+  }
+}
+
+.exercise-status {
+  width: 28px;
+  height: 28px;
+  border-radius: 50%;
+  background: #e2e8f0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-shrink: 0;
+  margin-top: 0.5rem;
+}
+
+.status-icon {
+  color: white;
+  font-size: 14px;
+  font-weight: bold;
+}
+
+.exercise-body {
+  flex: 1;
+}
+
+.exercise-time {
+  font-size: 0.85rem;
+  color: #9ca3af;
+}
+
+.detail-value.calories {
+  color: #ea4335;
+  font-weight: 600;
+}
+
+// 空状态
+.empty-state {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  padding: 3rem 2rem;
+  color: #9ca3af;
+}
+
+.empty-icon {
+  font-size: 48px;
+  margin-bottom: 1rem;
+  opacity: 0.5;
+}
+
+.empty-text {
+  font-size: 1rem;
+  font-weight: 500;
+  margin-bottom: 0.5rem;
+}
+
+.empty-hint {
+  font-size: 0.85rem;
+}
+
+// 底部导航栏
+.bottom-nav {
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+  padding: 0.75rem 1rem;
+  background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+  border-top: 1px solid #e2e8f0;
+  box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.08);
+  position: sticky;
+  bottom: 0;
+}
+
+.nav-item {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  gap: 0.25rem;
+  padding: 0.5rem 1.5rem;
+  background: transparent;
+  border: none;
+  border-radius: 12px;
+  cursor: pointer;
+  transition: all 0.2s ease;
+
+  &:hover {
+    background: linear-gradient(135deg, #f0fdf4 0%, #ecfdf5 100%);
+    transform: translateY(-2px);
+  }
+
+  &:active {
+    transform: translateY(0);
+  }
+}
+
+.nav-icon {
+  font-size: 1.5rem;
+}
+
+.nav-label {
+  font-size: 0.75rem;
+  font-weight: 500;
+  color: #64748b;
+}
+
+// 调整主内容区域留出底部导航空间
+.exercise-main {
+  padding-bottom: 5rem;
 }
 }

+ 53 - 5
campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise.component.ts

@@ -1,8 +1,18 @@
-import { Component } from '@angular/core';
+import { Component, OnInit } from '@angular/core';
 import { CommonModule } from '@angular/common';
 import { CommonModule } from '@angular/common';
 import { Router, RouterModule } from '@angular/router';
 import { Router, RouterModule } from '@angular/router';
 import { PageHeaderComponent } from '../../shared/page-header/page-header.component';
 import { PageHeaderComponent } from '../../shared/page-header/page-header.component';
 
 
+interface ExerciseRecord {
+  type: string;
+  duration: string;
+  distance?: string;
+  description?: string;
+  calories: number;
+  time: string;
+  completed: boolean;
+}
+
 @Component({
 @Component({
   selector: 'app-exercise',
   selector: 'app-exercise',
   standalone: true,
   standalone: true,
@@ -10,27 +20,55 @@ import { PageHeaderComponent } from '../../shared/page-header/page-header.compon
   templateUrl: './exercise.component.html',
   templateUrl: './exercise.component.html',
   styleUrl: './exercise.component.scss'
   styleUrl: './exercise.component.scss'
 })
 })
-export class ExerciseComponent {
+export class ExerciseComponent implements OnInit {
   // 今日运动记录
   // 今日运动记录
-  todayExercises = [
+  todayExercises: ExerciseRecord[] = [
     {
     {
       type: '晨跑',
       type: '晨跑',
       duration: '30分钟',
       duration: '30分钟',
       distance: '3.5公里',
       distance: '3.5公里',
       calories: 250,
       calories: 250,
-      time: '06:30'
+      time: '06:30',
+      completed: true
     },
     },
     {
     {
       type: '力量训练',
       type: '力量训练',
       duration: '45分钟',
       duration: '45分钟',
       description: '俯卧撑、仰卧起坐、深蹲',
       description: '俯卧撑、仰卧起坐、深蹲',
       calories: 300,
       calories: 300,
-      time: '18:00'
+      time: '18:00',
+      completed: true
     }
     }
   ];
   ];
 
 
+  // 统计数据
+  totalDuration = '75分钟';
+  totalCalories = 550;
+  completedCount = 2;
+  targetCount = 3;
+
   constructor(private router: Router) {}
   constructor(private router: Router) {}
 
 
+  ngOnInit(): void {
+    this.calculateStats();
+  }
+
+  // 计算统计数据
+  private calculateStats(): void {
+    let totalMins = 0;
+    let totalCals = 0;
+    
+    this.todayExercises.forEach(ex => {
+      const mins = parseInt(ex.duration) || 0;
+      totalMins += mins;
+      totalCals += ex.calories;
+    });
+
+    this.totalDuration = `${totalMins}分钟`;
+    this.totalCalories = totalCals;
+    this.completedCount = this.todayExercises.filter(ex => ex.completed).length;
+  }
+
   // 返回仪表盘
   // 返回仪表盘
   backToDashboard(): void {
   backToDashboard(): void {
     this.router.navigate(['/dashboard']);
     this.router.navigate(['/dashboard']);
@@ -40,4 +78,14 @@ export class ExerciseComponent {
   navigateToAddExercise(): void {
   navigateToAddExercise(): void {
     this.router.navigate(['/exercise/add']);
     this.router.navigate(['/exercise/add']);
   }
   }
+
+  // 导航到动作库页面
+  navigateToActions(): void {
+    this.router.navigate(['/exercise/actions']);
+  }
+
+  // 导航到历史记录页面
+  navigateToHistory(): void {
+    this.router.navigate(['/exercise/history']);
+  }
 }
 }

+ 12 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/exercise/exercise.routes.ts

@@ -1,6 +1,8 @@
 import { Routes } from '@angular/router';
 import { Routes } from '@angular/router';
 import { ExerciseComponent } from './exercise.component';
 import { ExerciseComponent } from './exercise.component';
 import { AddExerciseComponent } from './add-exercise/add-exercise.component';
 import { AddExerciseComponent } from './add-exercise/add-exercise.component';
+import { ExerciseActionsComponent } from './exercise-actions/exercise-actions.component';
+import { ExerciseHistoryComponent } from './exercise-history/exercise-history.component';
 
 
 export const exerciseRoutes: Routes = [
 export const exerciseRoutes: Routes = [
   {
   {
@@ -12,5 +14,15 @@ export const exerciseRoutes: Routes = [
     path: 'add',
     path: 'add',
     component: AddExerciseComponent,
     component: AddExerciseComponent,
     title: '添加运动记录 - 数智健调系统'
     title: '添加运动记录 - 数智健调系统'
+  },
+  {
+    path: 'actions',
+    component: ExerciseActionsComponent,
+    title: '动作库 - 数智健调系统'
+  },
+  {
+    path: 'history',
+    component: ExerciseHistoryComponent,
+    title: '历史记录 - 数智健调系统'
   }
   }
 ];
 ];

+ 3 - 3
campus_health_app/frontend/campus-health-app/src/app/modules/school-services/school-services.component.ts

@@ -63,7 +63,7 @@ export class SchoolServicesComponent {
       distance: '450m',
       distance: '450m',
       rating: 4.5,
       rating: 4.5,
       healthyOptions: ['蔬菜沙拉', '清蒸鱼', '杂粮饭'],
       healthyOptions: ['蔬菜沙拉', '清蒸鱼', '杂粮饭'],
-      imageUrl: 'assets/images/dining1.jpg'
+      imageUrl: '9abcd339-bcc0-4d2c-a1d4-1cbae4f039c0.png'
     },
     },
     {
     {
       id: 2,
       id: 2,
@@ -72,7 +72,7 @@ export class SchoolServicesComponent {
       distance: '620m',
       distance: '620m',
       rating: 4.2,
       rating: 4.2,
       healthyOptions: ['健身套餐', '水果拼盘', '低脂酸奶'],
       healthyOptions: ['健身套餐', '水果拼盘', '低脂酸奶'],
-      imageUrl: 'assets/images/dining2.jpg'
+      imageUrl: '2407457c-1b37-4026-8165-8b645c5ed3bc.png'
     },
     },
     {
     {
       id: 3,
       id: 3,
@@ -81,7 +81,7 @@ export class SchoolServicesComponent {
       distance: '800m',
       distance: '800m',
       rating: 4.7,
       rating: 4.7,
       healthyOptions: ['营养粥品', '全麦面包', '水煮蛋'],
       healthyOptions: ['营养粥品', '全麦面包', '水煮蛋'],
-      imageUrl: 'assets/images/dining3.jpg'
+      imageUrl: 'e72d4dd1-3e6a-47b5-86aa-e8fb3119f36a.png'
     }
     }
   ];
   ];
 
 

+ 153 - 40
campus_health_app/frontend/campus-health-app/src/app/modules/weight/weight.component.html

@@ -6,39 +6,162 @@
     </div>
     </div>
   </app-page-header>
   </app-page-header>
 
 
-  <div class="stats-cards" *ngIf="stats">
-    <div class="stat-card">
-      <div class="stat-label">当前体重</div>
-      <div class="stat-value">{{ stats.currentWeight.toFixed(1) }} <span>kg</span></div>
-    </div>
-    <div class="stat-card">
-      <div class="stat-label">体重变化</div>
-      <div class="stat-value" [class.positive]="stats.weightChange > 0" [class.negative]="stats.weightChange < 0">
-        {{ stats.weightChange > 0 ? '+' : '' }}{{ stats.weightChange.toFixed(1) }} <span>kg</span>
-      </div>
-    </div>
-    <div class="stat-card">
-      <div class="stat-label">平均周变化</div>
-      <div class="stat-value" [class.positive]="stats.avgWeeklyChange > 0" [class.negative]="stats.avgWeeklyChange < 0">
-        {{ stats.avgWeeklyChange > 0 ? '+' : '' }}{{ stats.avgWeeklyChange.toFixed(2) }} <span>kg/周</span>
-      </div>
-    </div>
-  </div>
+  <!-- 趋势主导视图主布局 -->
+  <div class="weight-main-grid" *ngIf="stats">
+    <!-- 左侧:体重趋势 + 关键数字 -->
+    <div class="left-column">
+      <section class="panel">
+        <div class="panel-header">
+          <span class="panel-title">体重趋势总览</span>
+        </div>
+        
+        <!-- 周期切换标签 -->
+        <div class="chart-period-tabs">
+          <button 
+            class="period-tab" 
+            [class.active]="trendPeriod === 'week'"
+            (click)="changeTrendPeriod('week')">
+            周
+          </button>
+          <button 
+            class="period-tab" 
+            [class.active]="trendPeriod === 'month'"
+            (click)="changeTrendPeriod('month')">
+            月
+          </button>
+          <button 
+            class="period-tab" 
+            [class.active]="trendPeriod === '6months'"
+            (click)="changeTrendPeriod('6months')">
+            6个月
+          </button>
+        </div>
+        
+        <!-- 统计信息 -->
+        <div class="trend-stats" *ngIf="trendStats">
+          <div class="trend-avg">
+            <span class="avg-label">平均</span>
+            <span class="avg-value" [ngClass]="{'positive': trendStats.avgChange > 0, 'negative': trendStats.avgChange < 0}">
+              {{ trendStats.avgChange > 0 ? '+' : '' }}{{ trendStats.avgChange.toFixed(2) }}
+            </span>
+            <span class="avg-unit">kg(距离基线)</span>
+          </div>
+          <div class="trend-range">{{ trendStats.dateRange }}</div>
+        </div>
+        
+        <div class="trend-chart-wrapper">
+          <div id="trendChart" class="chart" style="width: 100%; height: 100%;"></div>
+        </div>
+        <div class="kpi-strip">
+          <div class="kpi-item">
+            <div class="kpi-label">当前体重</div>
+            <div class="kpi-main">
+              <span class="kpi-value">{{ stats.currentWeight.toFixed(1) }}</span>
+              <span class="kpi-unit">kg</span>
+            </div>
+            <div class="kpi-desc" *ngIf="goal">
+              目标 {{ goal.targetWeight }}kg · 剩余
+              {{ (stats.currentWeight - goal.targetWeight) | number:'1.1-1' }}kg
+            </div>
+            <div class="kpi-desc" *ngIf="!goal">
+              建议先设置目标体重,便于评估进度
+            </div>
+          </div>
 
 
-  <div class="chart-section">
-    <div class="trend-chart-container">
-      <div id="trendChart" class="chart" style="width: 100%; height: 100%;"></div>
-      <div class="trend-summary" *ngIf="records.length > 0">
-        <p>
-          当前 {{ records[0].weight.toFixed(1) }}kg,较 {{ records[records.length - 1].date }}
-          {{ records[records.length - 1].weight > records[0].weight ? '减少' : '增加' }}
-          {{ Math.abs(records[records.length - 1].weight - records[0].weight).toFixed(1) }}kg
-        </p>
-      </div>
+          <div class="kpi-item">
+            <div class="kpi-label">最近体重变化</div>
+            <div class="kpi-main">
+              <span
+                class="kpi-value"
+                [ngClass]="{ 'positive': stats.weightChange > 0, 'negative': stats.weightChange < 0 }"
+              >
+                {{ stats.weightChange > 0 ? '+' : '' }}{{ stats.weightChange.toFixed(1) }}
+              </span>
+              <span class="kpi-unit">kg</span>
+            </div>
+            <div class="kpi-desc">从所选时间范围起点到当前的总体变化</div>
+          </div>
+
+          <div class="kpi-item">
+            <div class="kpi-label">平均周变化</div>
+            <div class="kpi-main">
+              <span
+                class="kpi-value"
+                [ngClass]="{ 'positive': stats.avgWeeklyChange > 0, 'negative': stats.avgWeeklyChange < 0 }"
+              >
+                {{ stats.avgWeeklyChange > 0 ? '+' : '' }}{{ stats.avgWeeklyChange.toFixed(2) }}
+              </span>
+              <span class="kpi-unit">kg/周</span>
+            </div>
+            <div class="kpi-desc">
+              已跟踪 {{ stats.daysTracked }} 天 · {{ stats.goalETA || '预计达成时间计算中' }}
+            </div>
+          </div>
+        </div>
+      </section>
     </div>
     </div>
 
 
-    <div class="progress-chart-container" *ngIf="goal">
-      <div id="progressChart" class="chart-small" style="width: 100%; height: 100%;"></div>
+    <!-- 右侧:体脂率与最近记录 -->
+    <div class="right-column" *ngIf="records.length > 0">
+      <section class="panel">
+        <div class="panel-header">
+          <span class="panel-title">体脂率与身体成分</span>
+          <span class="panel-extra">目标体脂率 {{ goal?.targetBodyFat ?? '—' }}%</span>
+        </div>
+        <div class="composition-body">
+          <div class="composition-ring">
+            <div id="progressChart" class="chart-small"></div>
+          </div>
+          <div class="composition-info">
+            <ul class="list">
+              <li class="list-item">
+                <span>当前体脂率</span>
+                <span><strong>{{ records[0].bodyFat.toFixed(1) }}%</strong></span>
+              </li>
+              <li class="list-item" *ngIf="stats">
+                <span>最近 30 天变化</span>
+                <span
+                  class="kpi-value"
+                  [ngClass]="{ 'negative': stats.bodyFatChange < 0, 'positive': stats.bodyFatChange > 0 }"
+                >
+                  {{ stats.bodyFatChange > 0 ? '+' : ''}}{{ stats.bodyFatChange.toFixed(1) }}%
+                </span>
+              </li>
+              <li class="list-item">
+                <span>估算去脂体重</span>
+                <span>{{ (records[0].weight * (1 - records[0].bodyFat / 100)).toFixed(1) }} kg</span>
+              </li>
+              <li class="list-item">
+                <span>肌肉量</span>
+                <span>{{ records[0].muscleMass.toFixed(1) }} kg</span>
+              </li>
+            </ul>
+            <div class="tag-row">
+              <span class="tag" *ngIf="stats.bodyFatChange <= 0">体重趋势与体脂率整体同步下降</span>
+              <span class="tag" *ngIf="stats.bodyFatChange > 0">近期可能存在"掉秤不掉脂"情况</span>
+            </div>
+          </div>
+        </div>
+      </section>
+
+      <section class="panel">
+        <div class="panel-header">
+          <span class="panel-title">最近关键记录</span>
+          <span class="panel-extra">近 7 天</span>
+        </div>
+        <ul class="list">
+          <li class="list-item" *ngFor="let rec of records | slice:0:3">
+            <span>{{ rec.date }} · {{ rec.weight.toFixed(1) }}kg · {{ rec.bodyFat.toFixed(1) }}%</span>
+            <span class="badge">
+              {{ rec.measurementCondition === 'fasting' ? '空腹' : '餐后' }}
+            </span>
+          </li>
+        </ul>
+        <div class="cta-row">
+          <button class="cta-btn primary" (click)="openAddRecordDialog()">+ 录入体重与体脂</button>
+          <button class="cta-btn" (click)="updateTimePeriod('7days')">仅看近 7 天</button>
+        </div>
+      </section>
     </div>
     </div>
   </div>
   </div>
 
 
@@ -98,16 +221,6 @@
     </div>
     </div>
   </div>
   </div>
 
 
-  <div class="anomaly-section" *ngIf="anomalies.length > 0">
-    <h3>健康提醒</h3>
-    <div class="anomaly-list">
-      <div *ngFor="let anomaly of anomalies" class="anomaly-item" [class.info]="anomaly.severity === 'info'" [class.warning]="anomaly.severity === 'warning'" [class.danger]="anomaly.severity === 'danger'">
-        <span class="anomaly-icon">{{ anomaly.severity === 'info' ? 'ℹ️' : anomaly.severity === 'warning' ? '⚠️' : '❗' }}</span>
-        <span class="anomaly-message">{{ anomaly.message }}</span>
-      </div>
-    </div>
-  </div>
-
   <!-- 添加记录对话框 -->
   <!-- 添加记录对话框 -->
   <app-modal 
   <app-modal 
     [(isOpen)]="showAddRecordDialog"
     [(isOpen)]="showAddRecordDialog"

+ 285 - 0
campus_health_app/frontend/campus-health-app/src/app/modules/weight/weight.component.scss

@@ -4,6 +4,194 @@
   padding-bottom: 30px;
   padding-bottom: 30px;
 }
 }
 
 
+// 趋势主导视图主布局
+.weight-main-grid {
+  padding: 18px 24px 0;
+  display: grid;
+  grid-template-columns: 1.9fr 1.1fr;
+  gap: 18px;
+}
+
+.left-column,
+.right-column {
+  display: flex;
+  flex-direction: column;
+  gap: 16px;
+}
+
+.panel {
+  background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
+  border-radius: 16px;
+  padding: 14px 16px;
+  border: 1px solid #e2e8f0;
+  box-shadow: 0 4px 18px rgba(15, 23, 42, 0.08);
+  display: flex;
+  flex-direction: column;
+  gap: 10px;
+}
+
+.panel-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  font-size: 13px;
+  color: #64748b;
+}
+
+.panel-title {
+  font-size: 14px;
+  font-weight: 600;
+  color: #1e293b;
+}
+
+.panel-extra {
+  font-size: 12px;
+}
+
+// 周期切换标签
+.chart-period-tabs {
+  display: flex;
+  gap: 0;
+  background: #f3f4f6;
+  border-radius: 12px;
+  padding: 4px;
+  margin-top: 12px;
+}
+
+.period-tab {
+  flex: 1;
+  padding: 8px 16px;
+  border: none;
+  background: transparent;
+  border-radius: 8px;
+  font-size: 13px;
+  font-weight: 500;
+  color: #6b7280;
+  cursor: pointer;
+  transition: all 0.2s ease;
+
+  &:hover {
+    color: #374151;
+  }
+
+  &.active {
+    background: #ffffff;
+    color: #111827;
+    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+  }
+}
+
+// 趋势统计信息
+.trend-stats {
+  margin-top: 14px;
+  padding: 12px 16px;
+  background: #faf5ff;
+  border-radius: 10px;
+  border: 1px solid #e9d5ff;
+}
+
+.trend-avg {
+  display: flex;
+  align-items: baseline;
+  gap: 6px;
+  margin-bottom: 6px;
+}
+
+.avg-label {
+  font-size: 12px;
+  color: #6b7280;
+  font-weight: 500;
+}
+
+.avg-value {
+  font-size: 24px;
+  font-weight: 700;
+  color: #111827;
+
+  &.positive {
+    color: #ef4444;
+  }
+
+  &.negative {
+    color: #10b981;
+  }
+}
+
+.avg-unit {
+  font-size: 11px;
+  color: #9ca3af;
+}
+
+.trend-range {
+  font-size: 11px;
+  color: #6b7280;
+}
+
+.trend-chart-wrapper {
+  margin-top: 12px;
+  border-radius: 12px;
+  overflow: hidden;
+  min-height: 260px;
+}
+
+.trend-chart-wrapper .chart {
+  width: 100%;
+  height: 260px;
+}
+
+// 趋势下方关键指标条
+.kpi-strip {
+  margin-top: 10px;
+  display: grid;
+  grid-template-columns: repeat(3, 1fr);
+  gap: 10px;
+}
+
+.kpi-item {
+  background: rgba(248, 250, 252, 0.9);
+  border-radius: 12px;
+  padding: 8px 10px;
+  border: 1px solid #e5e7eb;
+  display: flex;
+  flex-direction: column;
+  gap: 4px;
+}
+
+.kpi-label {
+  font-size: 11px;
+  color: #64748b;
+}
+
+.kpi-main {
+  display: flex;
+  align-items: baseline;
+  gap: 4px;
+}
+
+.kpi-value {
+  font-size: 20px;
+  font-weight: 700;
+  color: #111827;
+}
+
+.kpi-unit {
+  font-size: 11px;
+  color: #9ca3af;
+}
+
+.kpi-desc {
+  font-size: 11px;
+  color: #6b7280;
+}
+
+.kpi-value.positive {
+  color: #ef4444;
+}
+
+.kpi-value.negative {
+  color: #10b981;
+}
+
 .btn {
 .btn {
   padding: 10px 20px;
   padding: 10px 20px;
   border: none;
   border: none;
@@ -144,6 +332,91 @@
   }
   }
 }
 }
 
 
+// 右侧体脂率与记录区
+.composition-body {
+  display: flex;
+  gap: 16px;
+  align-items: center;
+}
+
+.composition-ring {
+  flex: 0 0 170px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.composition-ring .chart-small {
+  width: 100%;
+  height: 170px;
+}
+
+.composition-info {
+  flex: 1;
+}
+
+.list {
+  list-style: none;
+  display: flex;
+  flex-direction: column;
+  gap: 6px;
+  font-size: 12px;
+  color: #64748b;
+}
+
+.list-item {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.badge {
+  border-radius: 999px;
+  padding: 2px 8px;
+  font-size: 11px;
+  background: rgba(79, 70, 229, 0.08);
+  color: #4f46e5;
+}
+
+.tag-row {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 6px;
+  margin-top: 4px;
+}
+
+.tag {
+  border-radius: 999px;
+  border: 1px solid #e2e8f0;
+  padding: 2px 8px;
+  font-size: 11px;
+  color: #64748b;
+  background: #ffffff;
+}
+
+.cta-row {
+  display: flex;
+  gap: 8px;
+  flex-wrap: wrap;
+  margin-top: 8px;
+}
+
+.cta-btn {
+  border-radius: 999px;
+  border: 1px solid #e2e8f0;
+  padding: 6px 12px;
+  background: #ffffff;
+  font-size: 12px;
+  cursor: pointer;
+  color: #64748b;
+}
+
+.cta-btn.primary {
+  background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
+  color: #ffffff;
+  border: none;
+}
+
 .filter-bar {
 .filter-bar {
   display: flex;
   display: flex;
   gap: 10px;
   gap: 10px;
@@ -454,6 +727,10 @@
     grid-template-columns: 1fr;
     grid-template-columns: 1fr;
     gap: 20px;
     gap: 20px;
   }
   }
+
+  .weight-main-grid {
+    grid-template-columns: 1fr;
+  }
   
   
   .progress-chart-container {
   .progress-chart-container {
     min-height: 400px;
     min-height: 400px;
@@ -478,6 +755,14 @@
 }
 }
 
 
 @media (max-width: 768px) {
 @media (max-width: 768px) {
+  .weight-main-grid {
+    padding: 16px;
+  }
+
+  .kpi-strip {
+    grid-template-columns: 1fr;
+  }
+
   .stats-cards {
   .stats-cards {
     grid-template-columns: 1fr;
     grid-template-columns: 1fr;
     gap: 12px;
     gap: 12px;

+ 190 - 102
campus_health_app/frontend/campus-health-app/src/app/modules/weight/weight.component.ts

@@ -48,6 +48,8 @@ export class WeightComponent implements OnInit, OnDestroy {
   showGoalDialog = false;
   showGoalDialog = false;
   showCustomDatePicker = false;
   showCustomDatePicker = false;
   chartPeriod: 'weekly' | 'monthly' = 'weekly';
   chartPeriod: 'weekly' | 'monthly' = 'weekly';
+  trendPeriod: 'week' | 'month' | '6months' = 'week';
+  trendStats: { avgChange: number; dateRange: string; baseline: number } | null = null;
 
 
   // 可用标签列表
   // 可用标签列表
   availableTags = ['开始运动', '目标调整', '饮食改变', '生病', '假期', '压力期'];
   availableTags = ['开始运动', '目标调整', '饮食改变', '生病', '假期', '压力期'];
@@ -201,28 +203,110 @@ export class WeightComponent implements OnInit, OnDestroy {
    * 更新所有图表
    * 更新所有图表
    */
    */
   updateCharts(): void {
   updateCharts(): void {
+    this.calculateTrendStats();
     this.updateTrendChart();
     this.updateTrendChart();
     this.updateChangeChart();
     this.updateChangeChart();
     this.updateScatterChart();
     this.updateScatterChart();
     this.updateProgressChart();
     this.updateProgressChart();
   }
   }
 
 
+  /**
+   * 切换趋势图周期
+   */
+  changeTrendPeriod(period: 'week' | 'month' | '6months'): void {
+    this.trendPeriod = period;
+    this.calculateTrendStats();
+    this.updateTrendChart();
+  }
+
+  /**
+   * 计算趋势统计信息
+   */
+  private calculateTrendStats(): void {
+    if (this.records.length === 0) {
+      this.trendStats = null;
+      return;
+    }
+
+    // 根据周期筛选数据
+    const now = new Date();
+    let startDate: Date;
+    
+    switch (this.trendPeriod) {
+      case 'week':
+        startDate = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
+        break;
+      case 'month':
+        startDate = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);
+        break;
+      case '6months':
+        startDate = new Date(now.getTime() - 180 * 24 * 60 * 60 * 1000);
+        break;
+    }
+
+    const periodRecords = this.records.filter(r => {
+      const recordDate = new Date(r.date);
+      return recordDate >= startDate && recordDate <= now;
+    });
+
+    if (periodRecords.length === 0) {
+      this.trendStats = null;
+      return;
+    }
+
+    // 计算基线(目标体重或第一条记录的体重)
+    const baseline = this.goal?.targetWeight || periodRecords[periodRecords.length - 1].weight;
+    
+    // 计算平均偏离基线
+    const avgWeight = periodRecords.reduce((sum, r) => sum + r.weight, 0) / periodRecords.length;
+    const avgChange = avgWeight - baseline;
+
+    // 格式化日期范围
+    const startRec = periodRecords[periodRecords.length - 1];
+    const endRec = periodRecords[0];
+    const dateRange = `${this.formatDate(startRec.date)}至${this.formatDate(endRec.date)}`;
+
+    this.trendStats = { avgChange, dateRange, baseline };
+  }
+
+  /**
+   * 格式化日期
+   */
+  private formatDate(dateStr: string): string {
+    const date = new Date(dateStr);
+    return `${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日`;
+  }
+
   /**
   /**
    * 更新趋势折线图
    * 更新趋势折线图
    */
    */
   private updateTrendChart(): void {
   private updateTrendChart(): void {
     if (!this.trendChart) return;
     if (!this.trendChart) return;
 
 
-    const records = [...this.filteredRecords].reverse(); // 从旧到新排序
+    // 根据周期筛选数据
+    const now = new Date();
+    let startDate: Date;
+    
+    switch (this.trendPeriod) {
+      case 'week':
+        startDate = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
+        break;
+      case 'month':
+        startDate = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);
+        break;
+      case '6months':
+        startDate = new Date(now.getTime() - 180 * 24 * 60 * 60 * 1000);
+        break;
+    }
+
+    const periodRecords = this.records.filter(r => {
+      const recordDate = new Date(r.date);
+      return recordDate >= startDate && recordDate <= now;
+    }).reverse(); // 从旧到新排序
 
 
     // 如果数据不足,显示提示信息
     // 如果数据不足,显示提示信息
-    if (records.length === 0) {
+    if (periodRecords.length === 0) {
       this.trendChart.setOption({
       this.trendChart.setOption({
-        title: {
-          text: '体重趋势',
-          left: 'center',
-          textStyle: { fontSize: 16, fontWeight: 'bold', color: '#1f2937' }
-        },
         graphic: {
         graphic: {
           type: 'text',
           type: 'text',
           left: 'center',
           left: 'center',
@@ -241,138 +325,142 @@ export class WeightComponent implements OnInit, OnDestroy {
     }
     }
 
 
     // 准备数据
     // 准备数据
-    const dates = records.map(r => r.date);
-    const weights = records.map(r => r.weight);
-    
-    // 计划趋势线数据
-    const plannedWeights = this.calculatePlannedTrend(records);
+    const dates = periodRecords.map(r => r.date);
+    const weights = periodRecords.map(r => r.weight);
     
     
-    // 目标线数据
-    const targetWeights = this.goal 
-      ? new Array(dates.length).fill(this.goal.targetWeight)
-      : [];
-
-    // 标注点(关键节点)
-    const markPoints = this.extractMarkPoints(records);
+    // 基线数据(如果有目标体重)
+    const baseline = this.trendStats?.baseline || weights[0];
+    const baselineData = new Array(dates.length).fill(baseline);
+
+    // X轴标签格式化
+    const formatXAxis = (value: string) => {
+      const date = new Date(value);
+      if (this.trendPeriod === 'week') {
+        // 周视图显示周几
+        const weekDays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
+        return weekDays[date.getDay()];
+      } else {
+        // 月/6个月视图显示日期
+        return `${date.getMonth() + 1}/${date.getDate()}`;
+      }
+    };
 
 
     this.trendChart.setOption({
     this.trendChart.setOption({
-      title: {
-        text: '体重趋势',
-        left: 'center',
-        textStyle: { fontSize: 16, fontWeight: 'bold', color: '#1f2937' }
-      },
       tooltip: {
       tooltip: {
         trigger: 'axis',
         trigger: 'axis',
-        backgroundColor: 'rgba(255, 255, 255, 0.95)',
+        backgroundColor: 'rgba(255, 255, 255, 0.98)',
         borderColor: '#e5e7eb',
         borderColor: '#e5e7eb',
         borderWidth: 1,
         borderWidth: 1,
         textStyle: { color: '#374151' },
         textStyle: { color: '#374151' },
         formatter: (params: any) => {
         formatter: (params: any) => {
           const index = params[0].dataIndex;
           const index = params[0].dataIndex;
-          const record = records[index];
+          const record = periodRecords[index];
+          const changeFromBaseline = record.weight - baseline;
           return `
           return `
-            <div style="padding: 8px; font-size: 13px;">
-              <div style="font-weight: bold; margin-bottom: 6px; color: #111827;">${record.date}</div>
-              <div style="margin-bottom: 4px;"><span style="color: #3b82f6;">●</span> 体重: ${record.weight} kg</div>
-              <div style="margin-bottom: 4px;">体脂率: ${record.bodyFat}%</div>
-              <div>测量条件: ${record.measurementCondition === 'fasting' ? '空腹' : '餐后'}</div>
-              ${record.notes ? `<div style="margin-top: 4px; color: #6b7280;">备注: ${record.notes}</div>` : ''}
+            <div style="padding: 10px; font-size: 13px;">
+              <div style="font-weight: bold; margin-bottom: 8px; color: #111827;">${record.date}</div>
+              <div style="margin-bottom: 4px;">
+                <span style="color: #a855f7;">●</span> 体重: <strong>${record.weight} kg</strong>
+              </div>
+              <div style="margin-bottom: 4px;">
+                距基线: <span style="color: ${changeFromBaseline >= 0 ? '#ef4444' : '#10b981'}">
+                  ${changeFromBaseline > 0 ? '+' : ''}${changeFromBaseline.toFixed(2)} kg
+                </span>
+              </div>
+              <div style="color: #6b7280;">体脂率: ${record.bodyFat}%</div>
             </div>
             </div>
           `;
           `;
         }
         }
       },
       },
-      legend: {
-        data: ['当前体重', '目标体重', '计划趋势'],
-        bottom: 10,
-        textStyle: { fontSize: 12 }
-      },
       grid: {
       grid: {
-        left: '3%',
-        right: '4%',
-        bottom: '15%',
-        top: '15%',
-        containLabel: true
+        left: '40px',
+        right: '20px',
+        bottom: '30px',
+        top: '20px',
+        containLabel: false
       },
       },
       xAxis: {
       xAxis: {
         type: 'category',
         type: 'category',
         data: dates,
         data: dates,
         boundaryGap: false,
         boundaryGap: false,
+        axisLine: {
+          lineStyle: { color: '#e5e7eb' }
+        },
+        axisTick: {
+          show: false
+        },
         axisLabel: {
         axisLabel: {
-          formatter: (value: string) => {
-            const date = new Date(value);
-            return `${date.getMonth() + 1}/${date.getDate()}`;
-          },
-          fontSize: 11
+          formatter: formatXAxis,
+          fontSize: 11,
+          color: '#9ca3af'
+        },
+        splitLine: {
+          show: true,
+          lineStyle: {
+            color: '#f3f4f6',
+            type: 'dashed'
+          }
         }
         }
       },
       },
       yAxis: {
       yAxis: {
         type: 'value',
         type: 'value',
-        name: '体重 (kg)',
-        nameTextStyle: { fontSize: 12 },
+        axisLine: {
+          show: false
+        },
+        axisTick: {
+          show: false
+        },
         axisLabel: {
         axisLabel: {
           formatter: '{value}',
           formatter: '{value}',
-          fontSize: 11
+          fontSize: 11,
+          color: '#9ca3af'
+        },
+        splitLine: {
+          lineStyle: {
+            color: '#f3f4f6',
+            type: 'dashed'
+          }
         }
         }
       },
       },
-      dataZoom: [
+      series: [
+        // 基线
         {
         {
-          type: 'inside',
-          start: 0,
-          end: 100
+          name: '基线',
+          type: 'line',
+          data: baselineData,
+          lineStyle: {
+            color: '#d1d5db',
+            width: 2,
+            type: 'dashed'
+          },
+          symbol: 'none',
+          silent: true
         },
         },
+        // 体重趋势线
         {
         {
-          start: 0,
-          end: 100,
-          height: 20,
-          bottom: 40
-        }
-      ],
-      series: [
-        {
-          name: '当前体重',
+          name: '体重',
           type: 'line',
           type: 'line',
           data: weights,
           data: weights,
-          smooth: true,
-          itemStyle: { color: '#3b82f6' },
-          lineStyle: { width: 3 },
-          areaStyle: {
-            color: {
-              type: 'linear',
-              x: 0,
-              y: 0,
-              x2: 0,
-              y2: 1,
-              colorStops: [
-                { offset: 0, color: 'rgba(59, 130, 246, 0.3)' },
-                { offset: 1, color: 'rgba(59, 130, 246, 0.05)' }
-              ]
-            }
+          smooth: false,
+          itemStyle: { 
+            color: '#a855f7',
+            borderColor: '#fff',
+            borderWidth: 2
+          },
+          lineStyle: { 
+            width: 3,
+            color: '#a855f7'
           },
           },
-          markPoint: markPoints.length > 0 ? {
-            data: markPoints,
-            symbolSize: 50,
-            label: {
-              formatter: '{b}',
-              fontSize: 10
+          symbol: 'circle',
+          symbolSize: 8,
+          emphasis: {
+            itemStyle: {
+              borderWidth: 3,
+              shadowBlur: 10,
+              shadowColor: 'rgba(168, 85, 247, 0.5)'
             }
             }
-          } : undefined
-        },
-        ...(this.goal ? [{
-          name: '目标体重',
-          type: 'line',
-          data: targetWeights,
-          itemStyle: { color: '#ef4444' },
-          lineStyle: { width: 2, type: 'dashed' },
-          symbol: 'none'
-        }] as any[] : []),
-        ...(plannedWeights.length > 0 ? [{
-          name: '计划趋势',
-          type: 'line',
-          data: plannedWeights,
-          itemStyle: { color: '#9ca3af' },
-          lineStyle: { width: 2, type: 'dotted' },
-          symbol: 'none'
-        }] as any[] : [])
+          }
+        }
       ]
       ]
     });
     });
   }
   }

+ 109 - 0
campus_health_app/frontend/campus-health-app/src/app/shared/components/modal/ai-chat/ai-chat.component.html

@@ -0,0 +1,109 @@
+<!-- AI聊天界面 - 移动端优先设计 -->
+<div class="ai-chat-container">
+  <!-- 聊天头部 -->
+  <div class="chat-header">
+    <div class="chat-title">
+      <h2>健康小助手</h2>
+      <div class="ai-status" [ngClass]="{ 'active': isReceivingResponse }">
+        <span *ngIf="isLoading" class="loading-dots">
+          <span class="dot"></span>
+          <span class="dot"></span>
+          <span class="dot"></span>
+        </span>
+        <span *ngIf="!isLoading">已连接</span>
+      </div>
+    </div>
+    <div class="header-actions">
+      <button class="action-btn clear-btn" (click)="clearChat()" title="清空聊天记录">
+        <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+          <polyline points="3 6 5 6 21 6"></polyline>
+          <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path>
+        </svg>
+      </button>
+      <button class="action-btn close-btn" (click)="close.emit()" title="关闭">
+        <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+          <line x1="18" y1="6" x2="6" y2="18"></line>
+          <line x1="6" y1="6" x2="18" y2="18"></line>
+        </svg>
+      </button>
+    </div>
+  </div>
+
+  <!-- 消息容器 - 自适应高度,固定最大高度 -->
+  <div class="messages-container" #messagesContainer>
+    <!-- 消息列表 -->
+    <div class="messages-list">
+      <ng-container *ngFor="let message of messages()">
+        <!-- 用户消息 -->
+        <div class="message-wrapper user" *ngIf="message.role === 'user'">
+          <div class="message-content">
+            <div class="message-bubble">
+              <span [innerHTML]="formatMessage(message.content)"></span>
+            </div>
+            <div class="message-avatar user-avatar">
+              <span>{{ getInitials('用户') }}</span>
+            </div>
+          </div>
+          <div class="message-time">{{ message.timestamp | date: 'HH:mm' }}</div>
+        </div>
+
+        <!-- AI消息 -->
+        <div class="message-wrapper assistant" *ngIf="message.role === 'assistant'">
+          <div class="message-content">
+            <div class="message-avatar assistant-avatar">
+              <span>{{ getInitials('AI') }}</span>
+            </div>
+            <div class="message-bubble" [ngClass]="{ 'is-typing': !message.isFinal, 'is-final': message.isFinal }">
+              <!-- 加载中动画 - 仅在没有内容时显示 -->
+              <div *ngIf="message.isLoading && !message.content" class="loading-indicator">
+                <div class="loading-dot"></div>
+                <div class="loading-dot"></div>
+                <div class="loading-dot"></div>
+              </div>
+              <!-- 始终显示内容,当有内容时优先显示内容 -->
+              <span *ngIf="message.content" [innerHTML]="formatMessage(message.content)"></span>
+              <!-- 打字指示器 - 只要不是最终消息就显示 -->
+              <span *ngIf="!message.isFinal" class="typing-cursor"></span>
+            </div>
+          </div>
+          <div class="message-time">{{ message.timestamp | date: 'HH:mm' }}</div>
+        </div>
+      </ng-container>
+      <!-- 用于滚动到底部的标记元素 -->
+      <div #messageEnd></div>
+    </div>
+  </div>
+
+  <!-- 输入区域 -->
+  <div class="input-container">
+    <div class="input-wrapper">
+      <textarea
+        #messageInput
+        class="message-input"
+        [(ngModel)]="userInput"
+        (keydown)="sendMessage($event)"
+        (input)="onInputChange()"
+        placeholder="输入您的问题..."
+        rows="1"
+        spellcheck="false"
+        autocomplete="off"
+      ></textarea>
+      <button
+        class="send-button"
+        (click)="sendMessage()"
+        [disabled]="!userInput.trim() || isLoading"
+        title="发送消息"
+      >
+        <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+          <line x1="22" y1="2" x2="11" y2="13"></line>
+          <polygon points="22 2 15 22 11 13 2 9 22 2"></polygon>
+        </svg>
+      </button>
+    </div>
+  </div>
+
+  <!-- 键盘提示 -->
+  <div class="keyboard-hint">
+    <span>按 Enter 发送,Shift+Enter 换行</span>
+  </div>
+</div>

+ 495 - 0
campus_health_app/frontend/campus-health-app/src/app/shared/components/modal/ai-chat/ai-chat.component.scss

@@ -0,0 +1,495 @@
+// 企业级AI聊天组件样式 - 移动端优先设计
+
+// 重置和基础样式
+* {
+  box-sizing: border-box;
+}
+
+.ai-chat-container {
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+  max-height: 100vh;
+  background-color: #f5f7fa;
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
+  overflow: hidden;
+}
+
+// 聊天头部样式
+.chat-header {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding: 16px 20px;
+  background-color: #ffffff;
+  border-bottom: 1px solid #e8e8e8;
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
+  flex-shrink: 0;
+
+  .chat-title {
+    display: flex;
+    flex-direction: column;
+    gap: 4px;
+
+    h2 {
+      margin: 0;
+      font-size: 18px;
+      font-weight: 600;
+      color: #262626;
+    }
+
+    .ai-status {
+      display: flex;
+      align-items: center;
+      font-size: 12px;
+      color: #8c8c8c;
+      transition: color 0.3s ease;
+
+      &.active {
+        color: #52c41a;
+      }
+
+      .loading-dots {
+        display: flex;
+        align-items: center;
+        gap: 2px;
+
+        .dot {
+          width: 6px;
+          height: 6px;
+          border-radius: 50%;
+          background-color: currentColor;
+          animation: pulse 1.4s infinite ease-in-out both;
+
+          &:nth-child(1) {
+            animation-delay: -0.32s;
+          }
+
+          &:nth-child(2) {
+            animation-delay: -0.16s;
+          }
+        }
+      }
+    }
+  }
+
+  .header-actions {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+
+    .action-btn {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      width: 36px;
+      height: 36px;
+      border-radius: 50%;
+      background-color: #f0f0f0;
+      border: none;
+      color: #595959;
+      cursor: pointer;
+      transition: all 0.3s ease;
+
+      &:hover {
+        background-color: #e6f7ff;
+        color: #1890ff;
+      }
+
+      &.close-btn:hover {
+        background-color: #fff1f0;
+        color: #ff4d4f;
+      }
+
+      &:active {
+        transform: scale(0.95);
+      }
+
+      svg {
+        width: 18px;
+        height: 18px;
+      }
+    }
+  }
+}
+
+// 消息容器样式
+.messages-container {
+  flex: 1;
+  overflow-y: auto;
+  padding: 16px;
+  background-color: #f5f7fa;
+  background-image: linear-gradient(0deg, rgba(245, 247, 250, 0.5), rgba(245, 247, 250, 0.5)),
+                    radial-gradient(circle at 25px 25px, #e6f7ff 2px, transparent 0);
+  background-size: 100% 100%, 50px 50px;
+  position: relative;
+
+  &::-webkit-scrollbar {
+    width: 6px;
+  }
+
+  &::-webkit-scrollbar-track {
+    background: rgba(0, 0, 0, 0.05);
+    border-radius: 3px;
+  }
+
+  &::-webkit-scrollbar-thumb {
+    background: rgba(0, 0, 0, 0.1);
+    border-radius: 3px;
+
+    &:hover {
+      background: rgba(0, 0, 0, 0.2);
+    }
+  }
+}
+
+// 消息列表样式
+.messages-list {
+  display: flex;
+  flex-direction: column;
+  gap: 16px;
+  max-width: 100%;
+}
+
+// 消息包装器通用样式
+.message-wrapper {
+  display: flex;
+  flex-direction: column;
+  gap: 4px;
+
+  .message-content {
+    display: flex;
+    align-items: flex-end;
+    gap: 8px;
+
+    .message-avatar {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      width: 32px;
+      height: 32px;
+      border-radius: 50%;
+      font-weight: 600;
+      font-size: 14px;
+      flex-shrink: 0;
+    }
+
+    .message-bubble {
+      max-width: calc(100% - 40px);
+      padding: 12px 16px;
+      border-radius: 16px;
+      word-wrap: break-word;
+      font-size: 15px;
+      line-height: 1.4;
+      position: relative;
+      white-space: pre-wrap;
+      overflow-wrap: break-word;
+    }
+  }
+
+  .message-time {
+    font-size: 11px;
+    color: #8c8c8c;
+    align-self: flex-end;
+    margin-right: 44px;
+  }
+}
+
+// 用户消息样式
+.message-wrapper.user {
+  .message-content {
+    flex-direction: row-reverse;
+
+    .message-avatar.user-avatar {
+      background-color: #1890ff;
+      color: white;
+    }
+
+    .message-bubble {
+      background-color: #1890ff;
+      color: white;
+      border-bottom-right-radius: 4px;
+    }
+  }
+
+  .message-time {
+    align-self: flex-start;
+    margin-right: 0;
+    margin-left: 44px;
+  }
+}
+
+// AI消息样式
+.message-wrapper.assistant {
+  .message-content {
+    .message-avatar.assistant-avatar {
+      background-color: #52c41a;
+      color: white;
+    }
+
+    .message-bubble {
+      background-color: white;
+      color: #262626;
+      border: 1px solid #e8e8e8;
+      border-bottom-left-radius: 4px;
+
+      // 打字状态样式
+      &.is-typing {
+        min-height: 40px;
+
+        // 打字光标动画
+        .typing-cursor {
+            display: inline-block;
+            width: 3px;
+            height: 1.2em;
+            background-color: #1677ff;
+            margin-left: 2px;
+            animation: blink 0.8s infinite;
+            vertical-align: text-bottom;
+            border-radius: 1px;
+          }
+          
+          // 加载动画样式
+          .loading-indicator {
+            display: flex;
+            gap: 6px;
+            padding: 8px 0;
+          }
+          
+          .loading-dot {
+            width: 8px;
+            height: 8px;
+            background-color: #1677ff;
+            border-radius: 50%;
+            animation: loading-bounce 1.4s infinite ease-in-out both;
+          }
+          
+          .loading-dot:nth-child(1) {
+            animation-delay: -0.32s;
+          }
+          
+          .loading-dot:nth-child(2) {
+            animation-delay: -0.16s;
+          }
+          
+          @keyframes loading-bounce {
+            0%, 80%, 100% {
+              transform: scale(0);
+            }
+            40% {
+              transform: scale(1);
+            }
+          }
+      }
+
+      // 完成状态的过渡效果
+      &.is-final {
+        transition: background-color 0.2s ease, border-color 0.2s ease;
+      }
+    }
+  }
+}
+
+// 输入区域样式
+.input-container {
+  padding: 16px;
+  background-color: white;
+  border-top: 1px solid #e8e8e8;
+  flex-shrink: 0;
+
+  .input-wrapper {
+    display: flex;
+    gap: 12px;
+    align-items: flex-end;
+    max-width: 100%;
+
+    .message-input {
+      flex: 1;
+      min-height: 44px;
+      max-height: 120px;
+      padding: 12px 16px;
+      border: 1px solid #d9d9d9;
+      border-radius: 22px;
+      font-size: 15px;
+      line-height: 1.4;
+      resize: none;
+      outline: none;
+      transition: border-color 0.3s ease, box-shadow 0.3s ease;
+      background-color: #fafafa;
+      font-family: inherit;
+      overflow-y: auto;
+      scrollbar-width: none;
+
+      &::-webkit-scrollbar {
+        display: none;
+      }
+
+      &:focus {
+        border-color: #40a9ff;
+        box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
+        background-color: white;
+      }
+
+      &::placeholder {
+        color: #bfbfbf;
+      }
+    }
+
+    .send-button {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      width: 44px;
+      height: 44px;
+      border-radius: 50%;
+      background-color: #1890ff;
+      border: none;
+      color: white;
+      cursor: pointer;
+      transition: all 0.3s ease;
+      flex-shrink: 0;
+
+      &:hover:not(:disabled) {
+        background-color: #40a9ff;
+        transform: scale(1.05);
+      }
+
+      &:active:not(:disabled) {
+        transform: scale(0.95);
+      }
+
+      &:disabled {
+        background-color: #d9d9d9;
+        cursor: not-allowed;
+      }
+
+      svg {
+        width: 20px;
+        height: 20px;
+      }
+    }
+  }
+}
+
+// 键盘提示样式
+.keyboard-hint {
+  padding: 8px 16px;
+  background-color: #f0f0f0;
+  font-size: 11px;
+  color: #8c8c8c;
+  text-align: center;
+  flex-shrink: 0;
+}
+
+// 动画定义
+@keyframes pulse {
+  0%, 80%, 100% {
+    transform: scale(0.8);
+    opacity: 0.7;
+  }
+  40% {
+    transform: scale(1);
+    opacity: 1;
+  }
+}
+
+@keyframes blink {
+  0%, 49% {
+    opacity: 1;
+  }
+  50%, 100% {
+    opacity: 0;
+  }
+}
+
+// 响应式设计
+// 平板设备适配
+@media (min-width: 600px) {
+  .ai-chat-container {
+    /* 移除固定宽度限制,使其填满父容器 */
+    width: 100%;
+    height: 100%;
+    /* 移除阴影和边距,由父容器负责 */
+    box-shadow: none;
+    margin: 0;
+    border-radius: 0;
+  }
+
+  .message-bubble {
+    max-width: 70% !important;
+  }
+}
+
+// 桌面端适配
+@media (min-width: 1024px) {
+  .ai-chat-container {
+    /* 移除最大宽度限制 */
+    max-width: none;
+  }
+
+  // 悬停效果增强
+  .message-bubble {
+    transition: transform 0.2s ease;
+  }
+
+  .message-wrapper.user .message-bubble:hover {
+    transform: translateX(-2px);
+  }
+
+  .message-wrapper.assistant .message-bubble:hover {
+    transform: translateX(2px);
+  }
+}
+
+// 小屏幕优化
+@media (max-width: 360px) {
+  .ai-chat-container {
+    max-height: 100vh;
+  }
+
+  .chat-header {
+    padding: 12px 16px;
+
+    h2 {
+      font-size: 16px;
+    }
+  }
+
+  .messages-container {
+    padding: 12px;
+  }
+
+  .message-content {
+    gap: 6px;
+
+    .message-avatar {
+      width: 28px;
+      height: 28px;
+      font-size: 12px;
+    }
+
+    .message-bubble {
+      padding: 10px 14px;
+      font-size: 14px;
+    }
+  }
+
+  .input-container {
+    padding: 12px;
+
+    .input-wrapper {
+      gap: 8px;
+
+      .message-input {
+        min-height: 40px;
+        padding: 10px 14px;
+        font-size: 14px;
+      }
+
+      .send-button {
+        width: 40px;
+        height: 40px;
+      }
+    }
+  }
+}

+ 703 - 0
campus_health_app/frontend/campus-health-app/src/app/shared/components/modal/ai-chat/ai-chat.component.ts

@@ -0,0 +1,703 @@
+import {
+  Component,
+  OnInit,
+  ViewChild,
+  ElementRef,
+  AfterViewChecked,
+  OnDestroy,
+  signal,
+  ChangeDetectorRef,
+  Output,
+  EventEmitter
+} from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FormsModule } from '@angular/forms';
+import { debounceTime, Subject } from 'rxjs';
+import { DeepSeekService } from '../../../services/deepseek.service';
+
+// 定义消息类型接口
+export interface Message {
+  id: string;
+  role: 'user' | 'assistant';
+  content: string;
+  timestamp: Date;
+  isFinal?: boolean; // 标记消息是否最终完成
+  isLoading?: boolean; // 加载状态标记
+}
+
+// 定义流式响应状态接口,增强打字机效果状态管理
+export interface StreamingState {
+  isLoading: boolean;
+  isReceivingResponse: boolean;
+  lastContent: string;        // 完整内容缓存
+  printerBuffer: string;      // 打字机缓冲区
+  currentDisplayLength: number; // 当前已显示长度
+  assistantMessageId: string | null;
+  hasStartedResponse: boolean; // 标记是否已开始接收响应内容
+  isPrinting: boolean;        // 是否正在执行打字机效果
+}
+
+@Component({
+  selector: 'app-ai-chat',
+  standalone: true,
+  imports: [CommonModule, FormsModule],
+  templateUrl: './ai-chat.component.html',
+  styleUrls: ['./ai-chat.component.scss'],
+
+})
+export class AiChatComponent implements OnInit, AfterViewChecked, OnDestroy {
+  @Output() close = new EventEmitter<void>();
+
+  // 视图引用
+  @ViewChild('messagesContainer') private messagesContainer!: ElementRef;
+  @ViewChild('messageInput') private messageInput!: ElementRef;
+  @ViewChild('messageEnd') private messageEnd!: ElementRef;
+
+  // 组件状态
+  messages = signal<Message[]>([]);
+  userInput = '';
+  private streamingState = signal<StreamingState>({
+    isLoading: false,
+    isReceivingResponse: false,
+    lastContent: '',
+    printerBuffer: '',
+    currentDisplayLength: 0,
+    assistantMessageId: null,
+    hasStartedResponse: false,
+    isPrinting: false
+  });
+
+  // 订阅管理
+  private subscription: any = null;
+  private printerInterval: number | null = null;
+  private resizeSubject = new Subject<void>();
+
+  // 配置常量
+  private readonly DEFAULT_MODEL = 'deepseek-chat';
+  private readonly PRINT_DELAY = 20; // 打字机效果延迟(ms),加快打字速度以提供更好的体验
+  private readonly SCROLL_DEBOUNCE = 100; // 滚动防抖延迟(ms)
+  private readonly TYPEWRITER_BATCH_SIZE = 2; // 一次显示多个字符,加快打字速度
+
+  constructor(
+    private cdRef: ChangeDetectorRef,
+    private deepSeekService: DeepSeekService
+  ) {
+    // 初始化输入框自适应高度
+    this.resizeSubject.pipe(debounceTime(this.SCROLL_DEBOUNCE)).subscribe(() => {
+      this.adjustTextareaHeight();
+    });
+  }
+
+  ngOnInit(): void {
+    // 初始化欢迎消息
+    this.addMessage({
+      role: 'assistant',
+      content: '您好!我是您的健康小助手,有什么我可以帮您的吗?',
+      timestamp: new Date(),
+      isFinal: true,
+    });
+  }
+
+  ngAfterViewChecked(): void {
+    this.scrollToBottom();
+  }
+
+  ngOnDestroy(): void {
+    // 清理资源
+    this.cleanupStreamingResources();
+    this.resizeSubject.complete();
+  }
+
+  /**
+   * 发送消息处理
+   */
+  sendMessage(event?: Event): void {
+    // 处理键盘事件
+    if (event instanceof KeyboardEvent) {
+      // Shift+Enter换行,其他Enter发送
+      if (event.key === 'Enter' && !event.shiftKey) {
+        event.preventDefault();
+      } else {
+        return;
+      }
+    }
+
+    // 输入验证
+    const trimmedInput = this.userInput.trim();
+    if (!trimmedInput || this.streamingState().isLoading) {
+      return;
+    }
+
+    // 添加用户消息
+    this.addMessage({
+      role: 'user',
+      content: trimmedInput,
+      timestamp: new Date(),
+      isFinal: true,
+    });
+
+    // 清空输入框并重置高度
+    this.userInput = '';
+    this.adjustTextareaHeight();
+
+    // 发送给AI处理
+    this.sendToAI(trimmedInput);
+  }
+
+  /**
+   * 清空聊天记录
+   */
+  clearChat(): void {
+    // 清理资源
+    this.cleanupStreamingResources();
+
+    // 重置状态
+    this.messages.set([]);
+    this.userInput = '';
+    this.streamingState.update(state => ({
+      ...state,
+      isLoading: false,
+      isReceivingResponse: false,
+      assistantMessageId: null,
+      currentDisplayLength: 0,
+    }));
+
+    // 重新添加欢迎消息
+    this.addMessage({
+      role: 'assistant',
+      content: '您好!我是您的健康小助手,有什么我可以帮您的吗?',
+      timestamp: new Date(),
+      isFinal: true,
+    });
+  }
+
+  /**
+   * 处理文本区域输入变化
+   */
+  onInputChange(): void {
+    this.resizeSubject.next();
+  }
+
+  /**
+   * 从文本获取首字母用于头像显示
+   */
+  getInitials(text: string): string {
+    if (!text || typeof text !== 'string') return 'U';
+
+    // 提取非空字符
+    const nonEmptyText = text.trim();
+    if (!nonEmptyText) return 'U';
+
+    // 获取首字母并转为大写
+    return nonEmptyText.charAt(0).toUpperCase();
+  }
+
+  /**
+   * 向AI发送用户输入并处理流式响应
+   */
+  private async sendToAI(userInput: string): Promise<void> {
+    // 更新状态
+    this.streamingState.update(state => ({
+      ...state,
+      isLoading: true,
+      isReceivingResponse: true,
+      lastContent: '',
+      assistantMessageId: null,
+      printerBuffer: '',
+      currentDisplayLength: 0,
+      isPrinting: false,
+      hasStartedResponse: false,
+    }));
+
+    // 构建消息上下文
+    const messageContext = this.messages().map(msg => ({
+      role: msg.role,
+      content: msg.content,
+    }));
+
+    try {
+      // 创建初始AI消息
+      const initialMessageId = this.createInitialAssistantMessage();
+      this.streamingState.update(state => ({ ...state, assistantMessageId: initialMessageId }));
+
+      // 调用 DeepSeek API 进行流式对话
+      this.subscription = this.deepSeekService.sendMessage(messageContext).subscribe({
+        next: this.handleStreamingNext.bind(this),
+        error: this.handleStreamingError.bind(this),
+        complete: this.handleStreamingComplete.bind(this),
+      });
+    } catch (error) {
+      console.error('AI请求初始化失败:', error);
+      this.handleStreamingError(error);
+    }
+  }
+
+  /**
+   * 处理流式响应的next事件 - 实现真正的打字机效果
+   */
+  private handleStreamingNext(message: any): void {
+    console.log('收到流式响应:', message);
+    console.log('🔄 收到流式响应:', message);
+    // 增强对不同响应格式的支持
+    let content = message?.content || '';
+
+    // 支持OpenAI格式的流式响应
+    if (!content && message?.choices && message.choices[0]) {
+      if (message.choices[0].delta && message.choices[0].delta.content) {
+        content = message.choices[0].delta.content;
+      } else if (message.choices[0].text) {
+        content = message.choices[0].text;
+      }
+    }
+
+    const isComplete = message?.complete || false;
+    console.log('📝 提取到的内容:', content, '完成标志:', isComplete);
+
+    // 处理新增内容,实现打字机效果
+    if (content) {
+      const state = this.streamingState();
+
+      // 优化增量内容处理逻辑,支持多种响应格式
+      let newContent = '';
+      if (content.startsWith(state.lastContent) && state.lastContent.length > 0) {
+        // 处理完整内容格式(包含之前的所有内容)
+        newContent = content.substring(state.lastContent.length);
+      } else {
+        // 处理直接增量格式(只包含新增部分)
+        newContent = content;
+      }
+
+      console.log('🔄 增量内容处理:', { newContent, lastContent: state.lastContent });
+
+      // 更新最后内容状态,添加响应开始标记
+      const updatedContent = state.lastContent + newContent;
+      this.streamingState.update(s => ({
+        ...s,
+        lastContent: updatedContent,
+        printerBuffer: updatedContent, // 更新打字机缓冲区
+        hasStartedResponse: true, // 标记响应已开始
+        isReceivingResponse: true  // 确保状态保持为true
+      }));
+
+      console.log('📊 状态更新:', { updatedContent, hasStartedResponse: true });
+
+      // 如果还没有开始打字,启动打字机效果
+      if (newContent && state.assistantMessageId && !state.isPrinting) {
+        console.log('🚀 启动打字机效果');
+        this.startTypewriterEffect();
+      } else if (state.isPrinting) {
+        console.log('⏩ 打字机正在运行,添加新内容到缓冲区');
+      }
+    }
+  }
+
+  /**
+   * 处理流式响应的error事件
+   */
+  private handleStreamingError(error: any): void {
+    console.error('AI响应错误:', error);
+
+    // 清理资源
+    this.cleanupStreamingResources();
+
+    // 显示错误消息
+    this.addMessage({
+      role: 'assistant',
+      content: '抱歉,处理您的请求时遇到了技术问题,请稍后再试。',
+      timestamp: new Date(),
+      isFinal: true,
+    });
+  }
+
+  /**
+   * 处理流式响应的complete事件 - 结束响应处理
+   */
+  private handleStreamingComplete(): void {
+    console.log('✅ 流式响应完成,最终状态:', this.streamingState());
+
+    // 标记响应已接收完成
+    this.streamingState.update(s => ({ ...s, isReceivingResponse: false }));
+
+    const state = this.streamingState();
+
+    if (state.assistantMessageId && state.lastContent) {
+      // 数据完全返回后,直接显示全部内容,不再继续打字机效果
+      console.log('📝 数据完全返回,直接显示完整内容并标记为最终状态');
+      console.log('📊 最终内容长度:', state.lastContent.length);
+
+      // 确保显示完整内容,不设置任何长度限制
+      this.updateMessageDisplay(state.assistantMessageId, state.lastContent, true);
+
+      // 停止任何正在运行的打字机效果
+      this.clearTypewriterInterval();
+
+      // 更新状态
+      this.streamingState.update(s => ({
+        ...s,
+        isPrinting: false,
+        currentDisplayLength: state.lastContent.length
+      }));
+
+      // 标记消息为最终状态
+      this.messages.update(msgs =>
+        msgs.map(msg =>
+          msg.id === state.assistantMessageId
+            ? { ...msg, isFinal: true, isLoading: false }
+            : msg
+        )
+      );
+
+      // 清理资源 - 现在isReceivingResponse为false,可以安全地清理订阅
+      this.cleanupStreamingResources();
+    } else {
+      // 没有消息ID或内容时,直接清理资源
+      this.cleanupStreamingResources();
+    }
+
+    // 强制更新UI并滚动到底部
+    setTimeout(() => {
+      this.cdRef.detectChanges();
+      this.scrollToBottom();
+    }, 0);
+  }
+
+  /**
+   * 处理新增内容 - 打字机效果核心逻辑(已简化为直接显示)
+   */
+  private processNewContent(content: string, isFinal: boolean): void {
+    // 此方法现在已被优化,直接在handleStreamingNext中处理内容更新
+  }
+
+  /**
+   * 启动打字机效果 - 实现逐字符显示的真正打字机效果
+   */
+  private startTypewriterEffect(): void {
+    // 清理可能存在的定时器
+    this.clearTypewriterInterval();
+
+    // 标记为正在打字
+    this.streamingState.update(s => ({ ...s, isPrinting: true }));
+
+    // 立即显示一批字符而不是单个字符
+    this.advanceTypewriter();
+
+    // 设置定时器进行逐字符显示 - 使用更快的打字速度
+    this.printerInterval = window.setInterval(() => {
+      this.advanceTypewriter();
+    }, this.PRINT_DELAY);
+
+    console.log('⏱️ 打字机定时器已启动,延迟:', this.PRINT_DELAY);
+  }
+
+  /**
+   * 打字机步进函数 - 显示多个字符,加快打字速度
+   */
+  private advanceTypewriter(): void {
+    const state = this.streamingState();
+
+    // 检查是否还有内容需要显示
+    if (state.currentDisplayLength < state.printerBuffer.length && state.assistantMessageId) {
+      // 显示更多字符,每次显示多个字符而不是一个
+      const nextLength = Math.min(state.currentDisplayLength + this.TYPEWRITER_BATCH_SIZE, state.printerBuffer.length);
+      const displayContent = state.printerBuffer.substring(0, nextLength);
+
+      console.log('🔤 打字机步进:', {
+        currentLength: state.currentDisplayLength,
+        nextLength,
+        totalLength: state.printerBuffer.length,
+        batchSize: this.TYPEWRITER_BATCH_SIZE
+      });
+
+      // 更新显示内容
+      this.updateMessageDisplay(state.assistantMessageId, displayContent);
+
+      // 更新状态
+      this.streamingState.update(s => ({ ...s, currentDisplayLength: nextLength }));
+
+      // 确保滚动到底部
+      setTimeout(() => {
+        this.scrollToBottom();
+      }, 0);
+    } else if (state.currentDisplayLength >= state.printerBuffer.length) {
+      // 所有内容都已显示,结束打字机效果
+      console.log('✅ 打字机完成显示所有内容');
+      this.finalizeTypewriter();
+    }
+  }
+
+  /**
+   * 更新消息显示内容 - 支持清除加载状态
+   */
+  /**
+   * 更新消息显示
+   * @param messageId 消息ID
+   * @param content 消息内容
+   * @param clearLoading 是否清除加载状态
+   */
+  private updateMessageDisplay(messageId: string, content: string, clearLoading: boolean = false): void {
+    console.log('🖊️ 更新消息显示:', { messageId, content, clearLoading, contentLength: content.length });
+    this.messages.update(msgs =>
+      msgs.map(msg =>
+        msg.id === messageId
+          ? {
+            ...msg,
+            content,
+            isLoading: clearLoading ? false : msg.isLoading
+          }
+          : msg
+      )
+    );
+    // 强制变更检测
+    this.cdRef.detectChanges();
+    console.log('✅ UI更新完成');
+  }
+
+  /**
+   * 完成打字机效果
+   */
+
+
+  /**
+   * 显示所有剩余内容
+   * 确保完整内容显示,不设置长度限制
+   */
+  private displayAllContent(): void {
+    const state = this.streamingState();
+
+    if (state.assistantMessageId && state.printerBuffer) {
+      console.log('📤 显示完整内容:', { bufferLength: state.printerBuffer.length, isComplete: state.isReceivingResponse });
+      // 直接显示完整内容,不设置任何长度限制
+      this.updateMessageDisplay(state.assistantMessageId, state.printerBuffer, true);
+
+      // 停止打字机效果
+      this.clearTypewriterInterval();
+
+      // 更新状态,标记打字机完成
+      this.streamingState.update(s => ({
+        ...s,
+        isPrinting: false,
+        currentDisplayLength: state.printerBuffer.length
+      }));
+
+      // 确保滚动到底部
+      setTimeout(() => {
+        this.scrollToBottom();
+      }, 0);
+    }
+  }
+
+  /**
+   * 完成消息显示并添加完成动画标记
+   */
+  private finalizeMessageDisplay(): void {
+    // 确保显示所有剩余内容,在响应完成时立即展示
+    const state = this.streamingState();
+
+    // 如果正在打字,先结束打字机效果
+    if (state.isPrinting) {
+      console.log('🎯 响应完成,结束打字机效果并显示完整内容');
+      // 取消打字机定时器
+      this.clearTypewriterInterval();
+
+      // 更新状态
+      this.streamingState.update(s => ({
+        ...s,
+        isPrinting: false,
+        currentDisplayLength: state.printerBuffer.length
+      }));
+    }
+
+    if (state.assistantMessageId && state.lastContent) {
+      // 直接使用累计的完整内容,而不仅仅是当前的buffer
+      this.updateMessageDisplay(state.assistantMessageId, state.lastContent);
+
+      // 标记消息为最终状态并清除加载状态
+      this.messages.update(msgs =>
+        msgs.map(msg =>
+          msg.id === state.assistantMessageId
+            ? { ...msg, isFinal: true, isLoading: false }
+            : msg
+        )
+      );
+    }
+
+    // 清理状态
+    this.cleanupStreamingResources();
+
+    // 强制更新UI并滚动到底部
+    setTimeout(() => {
+      this.cdRef.detectChanges();
+      this.scrollToBottom();
+    }, 0);
+  }
+
+  /**
+   * 创建初始AI助手消息 - 添加明确的加载状态
+   */
+  private createInitialAssistantMessage(): string {
+    console.log('🔄 创建初始助手消息');
+    // 创建新的AI消息,添加初始反馈文本
+    const message: Message = {
+      id: this.generateUniqueId(),
+      role: 'assistant',
+      content: '', // 空内容,等待实时更新
+      timestamp: new Date(),
+      isFinal: false,
+      isLoading: true // 添加加载状态
+    };
+
+    this.messages.update(msgs => [...msgs, message]);
+
+    // 更新状态
+    this.streamingState.update(s => ({
+      ...s,
+      assistantMessageId: message.id,
+      hasStartedResponse: false,
+      lastContent: ''
+    }));
+
+    return message.id;
+  }
+
+  /**
+   * 添加新消息
+   */
+  private addMessage(messageData: Omit<Message, 'id'>): void {
+    const message: Message = {
+      ...messageData,
+      id: this.generateUniqueId(),
+    };
+
+    this.messages.update(msgs => [...msgs, message]);
+  }
+
+  /**
+   * 清理流式处理资源
+   * 确保只有在响应真正完成时才取消订阅,避免输出被截断
+   */
+  private cleanupStreamingResources(): void {
+    console.log('🧹 清理流式处理资源');
+
+    // 打字机定时器总是清理,避免内存泄漏
+    this.clearTypewriterInterval();
+
+    // 关键修改:只有在响应真正完成时才清理订阅
+    // 流式响应过程中不应该取消订阅,避免输出被截断
+    const isReceivingResponse = this.streamingState()?.isReceivingResponse ?? false;
+    console.log('📡 订阅清理状态检查:', { hasSubscription: !!this.subscription, isReceivingResponse });
+
+    if (this.subscription && !isReceivingResponse) {
+      console.log('📭 响应已完成,安全清理订阅');
+      this.subscription.unsubscribe();
+      this.subscription = null;
+    } else if (this.subscription && isReceivingResponse) {
+      console.warn('⚠️ 响应仍在接收中,不清理订阅以避免输出被截断');
+    }
+
+    // 重置状态,但保留printerBuffer和相关状态,避免影响正在进行的打字机效果
+    this.streamingState.update(state => ({
+      ...state, // 保留当前所有状态
+      isLoading: false,
+      // 不自动重置isReceivingResponse,由complete事件处理
+    }));
+
+    console.log('📊 状态已重置(保留打字机相关状态)');
+  }
+
+  /**
+   * 清除打字机效果定时器
+   */
+  private clearTypewriterInterval(): void {
+    if (this.printerInterval !== null) {
+      clearInterval(this.printerInterval);
+      this.printerInterval = null;
+    }
+  }
+
+  /**
+   * 完成打字机效果,处理最终显示
+   */
+  private finalizeTypewriter(): void {
+    this.clearTypewriterInterval();
+    const state = this.streamingState();
+
+    // 更新状态
+    this.streamingState.update(s => ({ ...s, isPrinting: false }));
+
+    console.log('🏁 打字机效果完成');
+
+    // 确保显示完整内容并标记为最终状态
+    if (state.assistantMessageId) {
+      // 显示完整内容并清除加载状态
+      this.updateMessageDisplay(state.assistantMessageId, state.printerBuffer, true);
+
+      // 标记消息为最终状态
+      this.messages.update(msgs =>
+        msgs.map(msg =>
+          msg.id === state.assistantMessageId
+            ? { ...msg, isFinal: true, isLoading: false }
+            : msg
+        )
+      );
+
+      console.log('✅ 消息已标记为最终状态');
+
+      // 清理资源
+      this.cleanupStreamingResources();
+    }
+  }
+
+  /**
+   * 滚动到底部
+   */
+  private scrollToBottom(): void {
+    try {
+      if (this.messageEnd && this.messageEnd.nativeElement) {
+        this.messageEnd.nativeElement.scrollIntoView({
+          behavior: 'smooth',
+          block: 'end'
+        });
+      }
+    } catch (err) {
+      console.warn('滚动到底部失败:', err);
+    }
+  }
+
+  /**
+   * 调整文本区域高度
+   */
+  private adjustTextareaHeight(): void {
+    try {
+      if (this.messageInput && this.messageInput.nativeElement) {
+        const textarea = this.messageInput.nativeElement;
+        textarea.style.height = 'auto';
+        textarea.style.height = Math.min(textarea.scrollHeight, 150) + 'px';
+      }
+    } catch (err) {
+      console.warn('调整文本区域高度失败:', err);
+    }
+  }
+
+  /**
+   * 格式化消息内容,将换行符转换为HTML换行标签
+   */
+  formatMessage(content: string): string {
+    return content ? content.replace(/\n/g, '<br>') : '';
+  }
+
+  /**
+   * 生成唯一ID
+   */
+  private generateUniqueId(): string {
+    return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
+  }
+
+  // 获取器方法,用于模板访问状态
+  get isLoading(): boolean {
+    return this.streamingState().isLoading;
+  }
+
+  get isReceivingResponse(): boolean {
+    return this.streamingState().isReceivingResponse;
+  }
+}

+ 98 - 0
campus_health_app/frontend/campus-health-app/src/app/shared/services/deepseek.service.ts

@@ -0,0 +1,98 @@
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class DeepSeekService {
+  // 注意:在生产环境中,API Key 应该存储在后端环境变量中,不应暴露在前端代码里
+  private readonly API_KEY = 'sk-da0b5b56b2a442f99d5fdac235259554';
+  private readonly API_URL = 'https://api.deepseek.com/chat/completions';
+
+  constructor() {}
+
+  /**
+   * 发送消息到 DeepSeek API (流式)
+   */
+  sendMessage(messages: Array<{ role: string; content: string }>): Observable<any> {
+    return new Observable(observer => {
+      const controller = new AbortController();
+
+      // 准备请求数据
+      const payload = {
+        model: 'deepseek-chat',
+        messages: messages,
+        stream: true, // 开启流式响应
+        temperature: 0.7
+      };
+
+      // 使用 fetch 发起请求
+      fetch(this.API_URL, {
+        method: 'POST',
+        headers: {
+          'Content-Type': 'application/json',
+          'Authorization': `Bearer ${this.API_KEY}`
+        },
+        body: JSON.stringify(payload),
+        signal: controller.signal
+      }).then(async response => {
+        if (!response.ok) {
+          const errorText = await response.text();
+          throw new Error(`DeepSeek API Error (${response.status}): ${errorText}`);
+        }
+
+        if (!response.body) {
+          throw new Error('Response body is null');
+        }
+
+        const reader = response.body.getReader();
+        const decoder = new TextDecoder();
+        let buffer = '';
+
+        // 循环读取流
+        try {
+          while (true) {
+            const { done, value } = await reader.read();
+            if (done) break;
+
+            // 解码数据
+            buffer += decoder.decode(value, { stream: true });
+            
+            // 处理粘包问题(可能一次收到多行,或者一行不完整)
+            const lines = buffer.split('\n');
+            buffer = lines.pop() || ''; // 最后一行可能不完整,留到下一次
+
+            for (const line of lines) {
+              const trimmed = line.trim();
+              // 跳过空行和结束标记
+              if (!trimmed || trimmed === 'data: [DONE]') continue;
+
+              // 解析 data: {...}
+              if (trimmed.startsWith('data: ')) {
+                try {
+                  const jsonStr = trimmed.substring(6); // 去掉 'data: '
+                  const json = JSON.parse(jsonStr);
+                  observer.next(json); // 发送数据给组件
+                } catch (e) {
+                  console.warn('JSON解析错误:', e, trimmed);
+                }
+              }
+            }
+          }
+        } catch (err) {
+          observer.error(err);
+        } finally {
+          observer.complete();
+        }
+      }).catch(err => {
+        // 处理网络错误等
+        observer.error(err);
+      });
+
+      // 返回取消函数,当组件 unsubscribe 时中止请求
+      return () => {
+        controller.abort();
+      };
+    });
+  }
+}

BIN
campus_health_app/frontend/campus-health-app/src/assets/images/black-cat.png