Pārlūkot izejas kodu

fix:修补任务制定-监审通知生成时间不显示bug
test:调试备忘录页面样式

cb_luzhixia 1 mēnesi atpakaļ
vecāks
revīzija
685cc9d83e

+ 22 - 488
src/views/costAudit/projectInfo/auditProjectManage/memoManage/index.vue

@@ -8,6 +8,25 @@
           <div class="calendar-table-layout">
             <!-- 左侧日历组件 -->
             <div class="element-calendar-container">
+              <div class="calendar-header">
+                <el-button
+                  type="text"
+                  class="calendar-btn"
+                  @click="handlePrevMonth"
+                >
+                  <i class="el-icon-arrow-left"></i>
+                </el-button>
+                <span class="month-text">
+                  {{ setCalendarTitle() }}
+                </span>
+                <el-button
+                  type="text"
+                  class="calendar-btn"
+                  @click="handleNextMonth"
+                >
+                  <i class="el-icon-arrow-right"></i>
+                </el-button>
+              </div>
               <el-calendar v-model="selectedDate" :first-day-of-week="0">
                 <template slot="dateCell" slot-scope="{ date, data }">
                   <el-tooltip placement="top">
@@ -347,6 +366,8 @@
     computed: {},
     watch: {},
     mounted() {
+      this.$el.querySelector('div.el-calendar__header').remove()
+      this.getAuditTaskList()
       this.initCalendarData()
     },
     methods: {},
@@ -354,492 +375,5 @@
 </script>
 
 <style scoped lang="scss">
-  .memo-management-container {
-    background-color: #fff;
-    padding: 20px;
-    overflow-y: auto;
-
-    .page-header-wrapper {
-      .page-header {
-        margin-bottom: 20px;
-        padding-bottom: 10px;
-        border-bottom: 1px solid #e4e7ed;
-
-        .page-title {
-          font-size: 18px;
-          font-weight: 600;
-          color: #303133;
-          margin: 0;
-          font-weight: 600;
-        }
-
-        .header-helper {
-          display: inline-block;
-          width: 0;
-          height: 0;
-          visibility: hidden;
-        }
-      }
-    }
-
-    .tab-switch-container {
-      margin-bottom: 20px;
-      margin-top: 10px;
-    }
-
-    .calendar-table-layout {
-      display: flex;
-      gap: 20px;
-    }
-
-    .calendar-table-layout .element-calendar-container {
-      flex: 0 0 45%;
-      min-width: 0;
-      margin-bottom: 0;
-      height: 650px;
-    }
-
-    .calendar-table-layout .memo-table-container {
-      flex: 0 0 55%;
-    }
-
-    @media (max-width: 1200px) {
-      .calendar-table-layout {
-        flex-direction: column;
-      }
-
-      .calendar-table-layout .element-calendar-container {
-        flex: none;
-        width: 100%;
-        margin-bottom: 20px;
-      }
-    }
-
-    .calendar-view-container {
-      margin-bottom: 0;
-      background-color: #fff;
-      border-radius: 8px;
-      box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
-      overflow: hidden;
-
-      .calendar-header-bar {
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        margin-bottom: 0;
-        padding: 15px 20px;
-        background-color: #fff;
-        border-bottom: 1px solid #e4e7ed;
-      }
-
-      .current-month-text {
-        font-size: 18px;
-        font-weight: 500;
-        color: #303133;
-      }
-
-      .calendar-grid-wrapper {
-        border: none;
-        border-radius: 0;
-
-        .calendar-weekdays-header {
-          display: grid;
-          grid-template-columns: repeat(7, 1fr);
-          background-color: #fafafa;
-          border-bottom: 1px solid #e4e7ed;
-
-          .weekday-item {
-            padding: 8px 0;
-            text-align: center;
-            font-weight: 500;
-            color: #606266;
-            font-size: 13px;
-          }
-        }
-
-        .calendar-days-grid {
-          display: grid;
-          grid-template-columns: repeat(7, 1fr);
-          background-color: #fff;
-
-          .calendar-day-item {
-            padding: 8px 0;
-            border-right: 1px solid #e4e7ed;
-            border-bottom: 1px solid #e4e7ed;
-            min-height: 60px;
-            position: relative;
-            display: flex;
-            flex-direction: column;
-            align-items: center;
-            cursor: pointer;
-
-            &:nth-child(7n) {
-              border-right: none;
-            }
-
-            &:last-child {
-              border-bottom: none;
-            }
-
-            &:hover {
-              background-color: #f5f7fa;
-            }
-
-            .day-number {
-              font-size: 14px;
-              font-weight: normal;
-              display: block;
-              text-align: center;
-              width: 24px;
-              height: 24px;
-              line-height: 24px;
-              margin: 2px 0;
-            }
-
-            .lunar-calendar-day {
-              font-size: 11px;
-              color: #909399;
-              display: block;
-              text-align: center;
-              margin-top: 2px;
-            }
-
-            /* 周末样式 */
-            &:nth-child(7n),
-            &:nth-child(7n-6) {
-              .day-number {
-                color: #f56c6c;
-              }
-
-              /* 覆盖当前日期的周末颜色 */
-              &.current-day-highlight .day-number {
-                color: #fff !important;
-              }
-            }
-
-            /* 当前日期高亮 */
-            &.current-day-highlight {
-              .day-number {
-                background-color: #1890ff;
-                color: #fff;
-                border-radius: 50%;
-                font-weight: 500;
-              }
-            }
-
-            /* 事件标记 - 右上角蓝色圆点 */
-            &.has-event-marker {
-              position: relative;
-            }
-
-            &.has-event-marker::after {
-              content: '';
-              display: block;
-              width: 6px;
-              height: 6px;
-              background-color: #1890ff;
-              border-radius: 50%;
-              position: absolute;
-              top: 8px;
-              right: 8px;
-            }
-
-            /* 其他月份日期 */
-            .other-month-day {
-              color: #c0c4cc;
-            }
-
-            /* 事件指示器 */
-            .day-event-indicator {
-              position: absolute;
-              bottom: 4px;
-              width: 100%;
-              display: flex;
-              justify-content: center;
-            }
-          }
-        }
-      }
-    }
-
-    .memo-table-container {
-      .reminder-dot-marker {
-        display: inline-block;
-        width: 10px;
-        height: 10px;
-        border-radius: 50%;
-        vertical-align: middle;
-      }
-
-      .reminder-dot-marker.urgent {
-        background-color: #f56c6c;
-      }
-
-      .reminder-dot-marker.normal {
-        background-color: #909399;
-      }
-    }
-
-    .file-upload-area {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-
-      .file-name-text {
-        color: #409eff;
-        cursor: pointer;
-        flex: 1;
-        overflow: hidden;
-        text-overflow: ellipsis;
-        white-space: nowrap;
-      }
-    }
-
-    .dialog-footer-area {
-      text-align: right;
-    }
-  }
-
-  .calendar {
-    background-color: #fff;
-    border-radius: 8px;
-    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
-    overflow: hidden;
-  }
-
-  .calendar_header {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    padding: 10px 20px;
-    background-color: #1890ff;
-    color: white;
-  }
-
-  .calendar_header_btn {
-    background: transparent;
-    border: 1px solid rgba(255, 255, 255, 0.3);
-    color: white;
-    padding: 5px 10px;
-    border-radius: 4px;
-    cursor: pointer;
-    transition: all 0.3s;
-  }
-
-  .calendar_header_btn:hover {
-    background: rgba(255, 255, 255, 0.2);
-    border-color: rgba(255, 255, 255, 0.6);
-  }
-
-  /* Element UI 日历样式 */
-  .element-calendar-container {
-    background: #fff;
-    border-radius: 8px;
-    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
-    overflow: hidden;
-    padding: 0;
-  }
-
-  .el-calendar {
-    width: 100%;
-    background-color: #fff;
-  }
-
-  .el-calendar__header {
-    margin-bottom: 0;
-    padding: 15px 20px;
-    border-bottom: 1px solid #e4e7ed;
-    background-color: #fff;
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-  }
-
-  .el-calendar__title {
-    font-size: 18px;
-    font-weight: 500;
-    color: #303133;
-    text-align: center;
-    flex: 1;
-  }
-
-  .el-calendar__button-group {
-    margin-top: 0;
-    display: flex;
-    gap: 10px;
-  }
-
-  /* 日历按钮样式 */
-  .el-calendar__button-group .el-button {
-    padding: 6px 12px;
-    font-size: 13px;
-    border-radius: 4px;
-  }
-
-  /* 日历单元格样式 */
-  .calendar-cell {
-    height: 50px;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
-    cursor: pointer;
-    transition: all 0.3s;
-    position: relative;
-    padding: 5px;
-  }
-
-  .calendar-cell:hover {
-    background-color: #f5f7fa;
-  }
-
-  /* 日期数字样式 */
-  .calendar-date-number {
-    font-size: 14px;
-    font-weight: normal;
-    margin-bottom: 2px;
-    width: 24px;
-    height: 24px;
-    line-height: 24px;
-    text-align: center;
-  }
-
-  /* 农历信息样式 */
-  .calendar-lunar-info {
-    font-size: 11px;
-    color: #909399;
-    margin-bottom: 2px;
-  }
-
-  /* 节日样式 */
-  .calendar-festival {
-    color: #f56c6c !important;
-    margin-left: 2px;
-  }
-
-  /* 任务触发区域 */
-  .calendar-task-trigger {
-    position: absolute;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-  }
-
-  /* 任务浮层样式 */
-  .calendar-task-popover {
-    font-size: 12px;
-    max-width: 250px;
-    background-color: #262626 !important;
-    color: #fff !important;
-    border: none !important;
-    border-radius: 4px;
-    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
-    padding: 10px;
-  }
-
-  /* 任务浮层内容样式 */
-  .calendar-task-popover .task-item {
-    padding: 5px 0;
-    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
-    margin-bottom: 5px;
-  }
-
-  .calendar-task-popover .task-item:last-child {
-    border-bottom: none;
-  }
-
-  /* 任务时间段样式 */
-  .calendar-task-popover .task-time {
-    color: #909399;
-    font-size: 11px;
-    margin-top: 2px;
-  }
-
-  /* 周末日期样式 */
-  .el-calendar-table__row {
-    > td:nth-child(1),
-    > td:nth-child(7) {
-      .calendar-date-number {
-        color: #fd8c2f;
-      }
-
-      /* 覆盖当前日期的周末颜色 */
-      &.is-today .calendar-date-number {
-        color: #333 !important;
-      }
-    }
-  }
-
-  /* 日历表格样式 */
-  .el-calendar-table {
-    width: 100%;
-    border-collapse: collapse;
-  }
-
-  .el-calendar-table tr {
-    border-bottom: 1px solid #e4e7ed;
-  }
-
-  .el-calendar-table td {
-    border-right: 1px solid #e4e7ed;
-    padding: 0;
-    height: 50px;
-    width: 14.2857%;
-    /* 1/7 width */
-  }
-
-  .el-calendar-table td:last-child {
-    border-right: none;
-  }
-
-  .el-calendar-table tr:last-child td {
-    border-bottom: none;
-  }
-
-  /* 任务提示框样式 */
-  .el-popover {
-    background-color: #262626 !important;
-    color: #fff !important;
-    border: none !important;
-    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
-    border-radius: 4px !important;
-  }
-
-  /* 提示框内容样式 */
-  .el-popover__title {
-    color: #fff !important;
-    border-bottom: 1px solid #333;
-    margin: 0 -10px 10px !important;
-    padding: 10px;
-  }
-
-  /* 任务指示器 - 右上角蓝色小圆点 */
-  .task-indicator {
-    position: absolute;
-    top: 5px;
-    right: 5px;
-    width: 8px;
-    height: 8px;
-    border-radius: 50%;
-    background-color: #1890ff;
-  }
-
-  /* 隐藏提示框箭头 */
-  .el-popover__popper[x-placement^='top'] .popper__arrow {
-    border-top-color: #262626;
-
-    .el-popover__popper[x-placement^='bottom'] .popper__arrow {
-      border-bottom-color: #262626;
-    }
-
-    /* 事件标记点 */
-    .event-dot {
-      width: 6px;
-      height: 6px;
-      background-color: #1890ff;
-      border-radius: 50%;
-      margin-top: 3px;
-    }
-  }
+  @import './memoManage.scss';
 </style>

+ 480 - 0
src/views/costAudit/projectInfo/auditProjectManage/memoManage/memoManage.scss

@@ -0,0 +1,480 @@
+.memo-management-container {
+  background-color: #fff;
+  padding: 20px;
+  overflow-y: auto;
+
+  .page-header-wrapper {
+    .page-header {
+      margin-bottom: 20px;
+      padding-bottom: 10px;
+      border-bottom: 1px solid #e4e7ed;
+
+      .page-title {
+        font-size: 18px;
+        font-weight: 600;
+        color: #303133;
+        margin: 0;
+        font-weight: 600;
+      }
+
+      .header-helper {
+        display: inline-block;
+        width: 0;
+        height: 0;
+        visibility: hidden;
+      }
+    }
+  }
+
+  .tab-switch-container {
+    margin-bottom: 20px;
+    margin-top: 10px;
+  }
+
+  .calendar-table-layout {
+    display: flex;
+    gap: 20px;
+  }
+
+  .calendar-table-layout .element-calendar-container {
+    flex: 0 0 45%;
+    min-width: 0;
+    margin-bottom: 0;
+    height: 650px;
+  }
+
+  .calendar-table-layout .memo-table-container {
+    flex: 0 0 55%;
+  }
+
+  @media (max-width: 1200px) {
+    .calendar-table-layout {
+      flex-direction: column;
+    }
+
+    .calendar-table-layout .element-calendar-container {
+      flex: none;
+      width: 100%;
+      margin-bottom: 20px;
+    }
+  }
+
+  .calendar-view-container {
+    margin-bottom: 0;
+    background-color: #fff;
+    border-radius: 8px;
+    box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
+    overflow: hidden;
+
+    .calendar-header-bar {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      margin-bottom: 0;
+      padding: 15px 20px;
+      background-color: #fff;
+      border-bottom: 1px solid #e4e7ed;
+    }
+
+    .current-month-text {
+      font-size: 18px;
+      font-weight: 500;
+      color: #303133;
+    }
+
+    .calendar-grid-wrapper {
+      border: none;
+      border-radius: 0;
+
+      .calendar-weekdays-header {
+        display: grid;
+        grid-template-columns: repeat(7, 1fr);
+        background-color: #fafafa;
+        border-bottom: 1px solid #e4e7ed;
+
+        .weekday-item {
+          padding: 8px 0;
+          text-align: center;
+          font-weight: 500;
+          color: #606266;
+          font-size: 13px;
+        }
+      }
+
+      .calendar-days-grid {
+        display: grid;
+        grid-template-columns: repeat(7, 1fr);
+        background-color: #fff;
+
+        .calendar-day-item {
+          padding: 8px 0;
+          border-right: 1px solid #e4e7ed;
+          border-bottom: 1px solid #e4e7ed;
+          min-height: 60px;
+          position: relative;
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+          cursor: pointer;
+
+          &:nth-child(7n) {
+            border-right: none;
+          }
+
+          &:last-child {
+            border-bottom: none;
+          }
+
+          &:hover {
+            background-color: #f5f7fa;
+          }
+
+          .day-number {
+            font-size: 14px;
+            font-weight: normal;
+            display: block;
+            text-align: center;
+            width: 24px;
+            height: 24px;
+            line-height: 24px;
+            margin: 2px 0;
+          }
+
+          .lunar-calendar-day {
+            font-size: 11px;
+            color: #909399;
+            display: block;
+            text-align: center;
+            margin-top: 2px;
+          }
+
+          /* 周末样式 */
+          &:nth-child(7n),
+          &:nth-child(7n-6) {
+            .day-number {
+              color: #f56c6c;
+            }
+
+            /* 覆盖当前日期的周末颜色 */
+            &.current-day-highlight .day-number {
+              color: #fff !important;
+            }
+          }
+
+          /* 当前日期高亮 */
+          &.current-day-highlight {
+            .day-number {
+              background-color: #1890ff;
+              color: #fff;
+              border-radius: 50%;
+              font-weight: 500;
+            }
+          }
+
+          /* 事件标记 - 右上角蓝色圆点 */
+          &.has-event-marker {
+            position: relative;
+          }
+
+          &.has-event-marker::after {
+            content: '';
+            display: block;
+            width: 6px;
+            height: 6px;
+            background-color: #1890ff;
+            border-radius: 50%;
+            position: absolute;
+            top: 8px;
+            right: 8px;
+          }
+
+          /* 其他月份日期 */
+          .other-month-day {
+            color: #c0c4cc;
+          }
+
+          /* 事件指示器 */
+          .day-event-indicator {
+            position: absolute;
+            bottom: 4px;
+            width: 100%;
+            display: flex;
+            justify-content: center;
+          }
+        }
+      }
+    }
+  }
+
+  .memo-table-container {
+    .reminder-dot-marker {
+      display: inline-block;
+      width: 10px;
+      height: 10px;
+      border-radius: 50%;
+      vertical-align: middle;
+    }
+
+    .reminder-dot-marker.urgent {
+      background-color: #f56c6c;
+    }
+
+    .reminder-dot-marker.normal {
+      background-color: #909399;
+    }
+  }
+
+  .file-upload-area {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .file-name-text {
+      color: #409eff;
+      cursor: pointer;
+      flex: 1;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+    }
+  }
+
+  .dialog-footer-area {
+    text-align: right;
+  }
+}
+
+.calendar {
+  background-color: #fff;
+  border-radius: 8px;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+}
+
+.calendar_header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 10px 20px;
+  background-color: #1890ff;
+  color: white;
+}
+
+.calendar_header_btn {
+  background: transparent;
+  border: 1px solid rgba(255, 255, 255, 0.3);
+  color: white;
+  padding: 5px 10px;
+  border-radius: 4px;
+  cursor: pointer;
+  transition: all 0.3s;
+}
+
+.calendar_header_btn:hover {
+  background: rgba(255, 255, 255, 0.2);
+  border-color: rgba(255, 255, 255, 0.6);
+}
+
+/* Element UI 日历样式 */
+.element-calendar-container {
+  background: #fff;
+  border-radius: 8px;
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+  overflow: hidden;
+  padding: 0;
+}
+
+.el-calendar {
+  width: 100%;
+  background-color: #fff;
+}
+
+.el-calendar__header {
+  margin-bottom: 0;
+  padding: 15px 20px;
+  border-bottom: 1px solid #e4e7ed;
+  background-color: #fff;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.el-calendar__title {
+  font-size: 18px;
+  font-weight: 500;
+  color: #303133;
+  text-align: center;
+  flex: 1;
+}
+
+.el-calendar__button-group {
+  margin-top: 0;
+  display: flex;
+  gap: 10px;
+}
+
+/* 日历按钮样式 */
+.el-calendar__button-group .el-button {
+  padding: 6px 12px;
+  font-size: 13px;
+  border-radius: 4px;
+}
+
+/* 日历单元格样式 */
+.calendar-cell {
+  height: 50px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  cursor: pointer;
+  transition: all 0.3s;
+  position: relative;
+  padding: 5px;
+}
+
+.calendar-cell:hover {
+  background-color: #f5f7fa;
+}
+
+/* 日期数字样式 */
+.calendar-date-number {
+  font-size: 14px;
+  font-weight: normal;
+  margin-bottom: 2px;
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+  text-align: center;
+}
+
+/* 农历信息样式 */
+.calendar-lunar-info {
+  font-size: 11px;
+  color: #909399;
+  margin-bottom: 2px;
+}
+
+/* 节日样式 */
+.calendar-festival {
+  color: #f56c6c !important;
+  margin-left: 2px;
+}
+
+/* 任务触发区域 */
+.calendar-task-trigger {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+
+/* 任务浮层样式 */
+.calendar-task-popover {
+  font-size: 12px;
+  max-width: 250px;
+  background-color: #262626 !important;
+  color: #fff !important;
+  border: none !important;
+  border-radius: 4px;
+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+  padding: 10px;
+}
+
+/* 任务浮层内容样式 */
+.calendar-task-popover .task-item {
+  padding: 5px 0;
+  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
+  margin-bottom: 5px;
+}
+
+.calendar-task-popover .task-item:last-child {
+  border-bottom: none;
+}
+
+/* 任务时间段样式 */
+.calendar-task-popover .task-time {
+  color: #909399;
+  font-size: 11px;
+  margin-top: 2px;
+}
+.calendar-header {
+  width: 95%;
+  margin: 15px auto 0;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  text-align: center;
+  background: #f0f4fd;
+  padding: 5px 0;
+}
+.calendar-btn {
+  margin: 0 20px;
+  cursor: pointer;
+  font-size: 20px;
+  color: #606266;
+  transition: color 0.3s ease;
+  &:hover {
+    color: #409eff;
+  }
+}
+/* 周末日期样式 */
+.el-calendar-table__row {
+  > td:nth-child(1),
+  > td:nth-child(7) {
+    .calendar-date-number {
+      color: #fd8c2f;
+    }
+
+    /* 覆盖当前日期的周末颜色 */
+    &.is-today .calendar-date-number {
+      color: #333 !important;
+    }
+  }
+}
+
+/* 日历表格样式 */
+.el-calendar-table {
+  width: 100%;
+  border-collapse: collapse;
+}
+
+.el-calendar-table tr {
+  border-bottom: 1px solid #e4e7ed;
+}
+
+.el-calendar-table td {
+  border-right: 1px solid #e4e7ed;
+  padding: 0;
+  height: 50px;
+  width: 14.2857%;
+  /* 1/7 width */
+}
+
+.el-calendar-table td:last-child {
+  border-right: none;
+}
+
+.el-calendar-table tr:last-child td {
+  border-bottom: none;
+}
+
+/* 提示框内容样式 */
+.el-popover__title {
+  color: #fff !important;
+  border-bottom: 1px solid #333;
+  margin: 0 -10px 10px !important;
+  padding: 10px;
+}
+
+/* 任务指示器 - 右上角蓝色小圆点 */
+.task-indicator {
+  position: absolute;
+  top: 5px;
+  right: 5px;
+  width: 8px;
+  height: 8px;
+  border-radius: 50%;
+  background-color: #1890ff;
+}

+ 19 - 14
src/views/costAudit/projectInfo/auditProjectManage/memoManage/memoManageMixin.js

@@ -141,6 +141,7 @@ export const memoManageMixin = {
       fileList: [],
       isEditDialogOpen: false,
       auditTaskList: [],
+      lunarInfo: {},
     }
   },
   computed: {
@@ -154,14 +155,14 @@ export const memoManageMixin = {
   },
   watch: {
     // // 监听选中日期变化,更新搜索参数
-    // selectedDate: {
-    //   handler(newVal) {
-    //     if (newVal) {
-    //       const monthMoment = moment(newVal).startOf('month')
-    //     }
-    //   },
-    //   deep: true,
-    // },
+    selectedDate: {
+      handler(newVal) {
+        if (newVal) {
+          this.lunarInfo = this.getLunarInfo(this.selectedDate)
+        }
+      },
+      deep: true,
+    },
   },
   methods: {
     // 根据提醒类型获取对应的颜色
@@ -298,9 +299,9 @@ export const memoManageMixin = {
         lunarDate: '超出转换范围',
         festival: null,
         lunarFestival: null,
-        lYear: null,
-        lMonth: null,
-        lDay: null,
+        lYear: year,
+        lMonth: month,
+        lDay: day,
         Animal: null,
         IMonthCn: '',
         IDayCn: '',
@@ -326,14 +327,14 @@ export const memoManageMixin = {
     },
 
     // 上一个月
-    prevMonth() {
+    handlePrevMonth() {
       this.selectedDate = moment(this.selectedDate)
         .subtract(1, 'month')
         .toDate()
     },
 
     // 下一个月
-    nextMonth() {
+    handleNextMonth() {
       this.selectedDate = moment(this.selectedDate).add(1, 'month').toDate()
     },
     // 获取备忘录列表
@@ -383,6 +384,9 @@ export const memoManageMixin = {
     },
     // 初始化日历相关数据
     initCalendarData() {
+      this.selectedDate = new Date()
+      console.log('初始化日历数据', this.selectedDate)
+      this.lunarInfo = this.getLunarInfo(this.selectedDate)
       this.handleSearch()
     },
     onTabChange(tab) {
@@ -565,7 +569,8 @@ export const memoManageMixin = {
     // 设置日历标题
     setCalendarTitle() {
       // 可以在这里添加设置日历标题的逻辑
-      console.log(`当前显示: ${this.currentYear}年${this.currentMonth}月`)
+      let lunarInfo = this.lunarInfo
+      return `${lunarInfo.lYear}年${lunarInfo.lMonth}月 农历${lunarInfo.gzYear}年【${lunarInfo.Animal}】`
     },
   },
 }

+ 12 - 7
src/views/costAudit/projectInfo/auditTaskManage/taskCustomizedRelease/auditNoticeTab.vue

@@ -43,12 +43,20 @@
           <template #enterpriseId="{ row }">
             {{ getEnterpriseName(row) }}
           </template>
-          <template #electronicDocumentUrl="scope">
+          <template #generateTime="{ row }">
+            <div>
+              {{ row.generateTime ? row.generateTime.split(' ')[0] : '' }}
+            </div>
+            <div>
+              {{ row.generateTime ? row.generateTime.split(' ')[1] : '' }}
+            </div>
+          </template>
+          <template #scanDocumentUrl="scope">
             <el-button
               v-if="!isView"
               type="text"
               size="mini"
-              @click="handleUploadScan(scope.row, 'electronicDocumentUrl')"
+              @click="handleUploadScan(scope.row, 'scanDocumentUrl')"
             >
               上传附件
             </el-button>
@@ -56,10 +64,7 @@
               type="text"
               size="mini"
               @click="
-                handleViewScan(
-                  scope.row.electronicDocumentUrl,
-                  'electronicDocumentUrl'
-                )
+                handleViewScan(scope.row.scanDocumentUrl, 'scanDocumentUrl')
               "
             >
               查看附件
@@ -742,7 +747,7 @@
             // 创建更新数据对象
             const updateData = {
               id: row.id,
-              electronicDocumentUrl: fileInfo?.savePath, // 更新扫描件URL
+              scanDocumentUrl: fileInfo?.savePath, // 更新扫描件URL
             }
 
             // 第六步:调用更新API

+ 2 - 2
src/views/costAudit/projectInfo/auditTaskManage/taskCustomizedRelease/index.js

@@ -277,11 +277,11 @@ export const taskMixin = {
             slotName: 'generateTime',
           },
           {
-            prop: 'electronicDocumentUrl',
+            prop: 'scanDocumentUrl',
             label: '上传扫描件',
             width: 150,
             align: 'center',
-            slotName: 'electronicDocumentUrl',
+            slotName: 'scanDocumentUrl',
           },
           {
             prop: 'isPushed',

+ 146 - 285
src/views/home/index.vue

@@ -164,6 +164,7 @@
                 type="primary"
                 style="margin-left: 10px"
                 size="small"
+                icon="el-icon-search"
                 @click="searchMemo"
               >
                 查询
@@ -181,17 +182,7 @@
                   >
                     <i class="el-icon-arrow-left"></i>
                   </el-button>
-                  <span class="month-text">
-                    {{ getCustomMonthText(currentDate) }}
-                    <span class="lunar-info">
-                      农历{{
-                        getChineseCalendar(
-                          currentDate.getFullYear(),
-                          currentDate.getMonth() + 1
-                        )
-                      }}年【{{ getChineseZodiac(currentDate.getFullYear()) }}】
-                    </span>
-                  </span>
+                  <span class="month-text">{{ setCalendarTitle() }}年</span>
                   <el-button
                     type="text"
                     class="calendar-btn"
@@ -200,46 +191,71 @@
                     <i class="el-icon-arrow-right"></i>
                   </el-button>
                 </div>
-                <el-calendar ref="calendar" v-model="currentDate">
+                <el-calendar
+                  ref="calendar"
+                  v-model="selectedDate"
+                  :first-day-of-week="0"
+                >
                   <!-- 自定义日期单元格 -->
-                  <template slot="dateCell" slot-scope="{ data }">
-                    <div
-                      class="calendar-day"
-                      :class="{
-                        'has-event': hasEventOnDate(data.day),
-                        selected: data.date === currentDate,
-                        weekend: isWeekend(new Date(data.date)),
-                      }"
-                      @click="handleDateClick(data)"
-                    >
-                      <div class="date-number">
-                        {{ data.day.split('-').slice(2).join('-') }}
-                      </div>
-
-                      <div class="lunar-date">
-                        {{ getLunarDate(data.day) }}
-                      </div>
-
-                      <div
-                        v-if="hasEventOnDate(data.day)"
-                        class="event-dot"
-                      ></div>
-
+                  <template slot="dateCell" slot-scope="{ date, data }">
+                    <el-tooltip placement="top">
                       <div
-                        v-if="hasEventOnDate(data.day)"
-                        v-show="showTooltip && selectedDate === data.day"
-                        class="tooltip"
+                        class="calendar-cell"
+                        @click="handleDateClick(date, data)"
                       >
-                        <div class="tooltip-content">
-                          {{ getEventDescription(data.day) }}
+                        <!-- 公历日期 -->
+                        <div class="calendar-date-number">
+                          {{ data.day.split('-').slice(-1)[0] }}
+                        </div>
+                        <!-- 农历日期和节日 -->
+                        <div class="calendar-lunar-info">
+                          <!-- 公历节日 -->
+                          {{ getLunarInfo(date).IDayCn }}
+                          <span class="calendar-festival">
+                            {{
+                              getLunarInfo(date).festival
+                                ? getLunarInfo(date).festival + ' '
+                                : ''
+                            }}
+                            {{
+                              getLunarInfo(date).lunarFestival
+                                ? getLunarInfo(date).lunarFestival + ' '
+                                : ''
+                            }}
+                            {{
+                              getLunarInfo(date).Term
+                                ? getLunarInfo(date).Term
+                                : ''
+                            }}
+                          </span>
                         </div>
+                        <div
+                          v-if="getTasksByDate(date).length > 0"
+                          class="task-indicator"
+                        ></div>
                       </div>
-                    </div>
+                      <div slot="content">
+                        <template v-if="getTasksByDate(date).length > 0">
+                          <div
+                            v-for="(task, index) in getTasksByDate(date)"
+                            :key="index"
+                            class="task-item"
+                          >
+                            <div class="task-title">
+                              {{ index + 1 }}.{{ task.projectName }}
+                            </div>
+                          </div>
+                        </template>
+                        <template v-else>
+                          <div class="no-tasks">暂无任务安排</div>
+                        </template>
+                      </div>
+                    </el-tooltip>
                   </template>
                 </el-calendar>
               </div>
             </el-col>
-            <el-col :span="11">
+            <el-col :span="10">
               <ul class="memo-list">
                 <li
                   v-for="(item, idx) in memoList"
@@ -251,19 +267,47 @@
                       v-if="item.type === 'warning'"
                       src="@/assets/index_images/index-icon6-light@2x.png"
                       alt=""
+                      style="width: 15px; height: 15px"
                     />
                     <img
                       v-else
                       src="@/assets/index_images/index-icon6@2x.png"
                       alt=""
+                      style="width: 15px; height: 15px"
                     />
                   </div>
                   <div class="memo-content">
-                    <h4>{{ item.title }}</h4>
-                    <p class="memo-desc">{{ item.desc }}</p>
+                    <h4
+                      style="
+                        overflow: hidden;
+                        text-overflow: ellipsis;
+                        white-space: nowrap;
+                        margin: 0 0 8px 0;
+                      "
+                    >
+                      {{ item.projectName }}
+                    </h4>
                     <p class="memo-meta">
-                      <span>{{ item.relatedTask || '相关任务' }}</span>
-                      <span>{{ item.time }}</span>
+                      <span class="memo-meta-title">
+                        {{ item.title }}
+                      </span>
+                      <span class="memo-meta-date">
+                        <img
+                          style="
+                            width: 14px;
+                            height: 14px;
+                            vertical-align: middle;
+                            margin-right: 4px;
+                          "
+                          src="@/assets/index_images/index-icon4@2x.png"
+                          alt="时间"
+                        />
+                        {{ item.memoDate }}
+                      </span>
+                    </p>
+                    <p class="memo-content-text">
+                      <i class="el-icon-document"></i>
+                      {{ item.content }}
                     </p>
                   </div>
                 </li>
@@ -278,9 +322,10 @@
 
 <script>
   import * as echarts from 'echarts'
-
+  import { memoManageMixin } from '@/views/costAudit/projectInfo/auditProjectManage/memoManage/memoManageMixin'
   export default {
     name: 'Dashboard',
+    mixins: [memoManageMixin],
     data() {
       return {
         province: '山西省',
@@ -351,75 +396,18 @@
             op: '任务详情',
           },
         ],
-        memoList: [
-          {
-            type: 'warning',
-            title: '山西省公立小学教育成本监审',
-            desc: '要求学校提供近三年教学设备采购、师资薪酬等财务明细。',
-            time: '2025-05-06',
-            relatedTask: '山西省公立小学教育成本监审',
-          },
-          {
-            type: 'warning',
-            title: '山西省公立医院医疗服务成本监审',
-            desc: '要依据药品采购、医疗器械使用、医护人员成本等情况提供明细。',
-            time: '2025-05-06',
-            relatedTask: '山西省公立医院医疗服务成本监审',
-          },
-          {
-            type: 'info',
-            title: '太原市生活垃圾处理成本监审',
-            desc: '要求提供垃圾收集、运输、处理各环节的成本支出明细。',
-            time: '2025-05-06',
-            relatedTask: '太原市生活垃圾处理成本监审',
-          },
-          {
-            type: 'info',
-            title: '太原市市政设施维护成本监审',
-            desc: '需要收集道路、桥梁、公共广场等市政设施的维护成本数据。',
-            time: '2025-05-18',
-            relatedTask: '太原市市政设施维护成本监审',
-          },
-          {
-            type: 'warning',
-            title: '山西省公立小学教育成本监审',
-            desc: '要求学校提供近三年教学设备采购、师资薪酬等财务明细。',
-            time: '2025-05-06',
-            relatedTask: '山西省公立小学教育成本监审',
-          },
-        ],
+        memoList: [],
         currentDate: new Date(),
         selectedDate: '',
         showTooltip: false,
       }
     },
     mounted() {
-      this.initChart()
       this.$el.querySelector('div.el-calendar__header').remove()
+      this.initChart()
+      this.initCalendarData()
     },
     methods: {
-      // 获取自定义月份文本
-      getCustomMonthText(date) {
-        const year = date.getFullYear()
-        const month = date.getMonth() + 1
-
-        // 自定义格式
-        return `${year}年${month}月`
-      },
-      handlePrevMonth() {
-        this.currentDate = new Date(
-          this.currentDate.getFullYear(),
-          this.currentDate.getMonth() - 1,
-          this.currentDate.getDate()
-        )
-      },
-      handleNextMonth() {
-        this.currentDate = new Date(
-          this.currentDate.getFullYear(),
-          this.currentDate.getMonth() + 1,
-          this.currentDate.getDate()
-        )
-      },
       // 判断是否为周末
       isWeekend(date) {
         const day = date.getDay() // 0-6,0表示周日,6表示周六
@@ -500,7 +488,8 @@
         })
       },
       loadMoreNews() {
-        this.$message.info('加载更多消息(可对接接口逻辑)')
+        // // 跳转备忘录页面
+        // this.$router.push('/costAudit/projectInfo/memoManage')
       },
       handleOp(type, row) {
         this.$message.info(`执行【${type}】操作:${row.task}`)
@@ -515,124 +504,12 @@
       addMemo() {
         this.$message.info('添加新备忘录')
       },
-      // 获取农历日期
-      getLunarDate(date) {
-        const lunarMap = {
-          '01': '初一',
-          '02': '初二',
-          '03': '初三',
-          '04': '初四',
-          '05': '初五',
-          '06': '初六',
-          '07': '初七',
-          '08': '初八',
-          '09': '初九',
-          10: '初十',
-          11: '十一',
-          12: '十二',
-          13: '十三',
-          14: '十四',
-          15: '十五',
-          16: '十六',
-          17: '十七',
-          18: '十八',
-          19: '十九',
-          20: '二十',
-          21: '廿一',
-          22: '廿二',
-          23: '廿三',
-          24: '廿四',
-          25: '廿五',
-          26: '廿六',
-          27: '廿七',
-          28: '廿八',
-          29: '廿九',
-          30: '三十',
-        }
-
-        const day = date.split('-')[2]
-        return lunarMap[day] || ''
-      },
-      // 获取生肖信息
-      getChineseZodiac(year) {
-        const zodiacs = [
-          '鼠',
-          '牛',
-          '虎',
-          '兔',
-          '龙',
-          '蛇',
-          '马',
-          '羊',
-          '猴',
-          '鸡',
-          '狗',
-          '猪',
-        ]
-        const index = (year - 4) % 12
-        return zodiacs[index]
-      },
-
-      // 获取天干地支
-      getChineseCalendar(year, month) {
-        const heavenlyStems = [
-          '甲',
-          '乙',
-          '丙',
-          '丁',
-          '戊',
-          '己',
-          '庚',
-          '辛',
-          '壬',
-          '癸',
-        ]
-        const earthlyBranches = [
-          '子',
-          '丑',
-          '寅',
-          '卯',
-          '辰',
-          '巳',
-          '午',
-          '未',
-          '申',
-          '酉',
-          '戌',
-          '亥',
-        ]
-
-        // 简化计算,实际需要更复杂的算法
-        const stemIndex = (year - 3) % 10
-        const branchIndex = (year - 3) % 12
-
-        return `${heavenlyStems[stemIndex]}${earthlyBranches[branchIndex]}`
-      },
-
-      // 获取事件描述
-      getEventDescription(date) {
-        const event = this.memoList.find(
-          (item) => item.time === date.substring(5)
-        )
-        return event ? `${event.title} [${event.time}]` : ''
-      },
-
-      // 处理日期点击
-      handleDateClick(data) {
-        this.currentDate = new Date(data.date)
-        this.selectedDate = data.day
-        this.showTooltip = true
-
-        // 2秒后隐藏提示
-        setTimeout(() => {
-          this.showTooltip = false
-        }, 2000)
-      },
     },
   }
 </script>
 
 <style scoped lang="scss">
+  @import '@/views/costAudit/projectInfo/auditProjectManage/memoManage/memoManage.scss';
   .dashboard-page {
     padding: 20px;
   }
@@ -742,52 +619,74 @@
     border-radius: 50%;
   }
   .memo-list {
+    width: 100%;
     list-style: none;
-    padding: 0;
+    padding: 20px;
     margin: 0;
-    /* 移除滚动条限制 */
-    max-height: none;
-    overflow-y: visible;
   }
   .memo-item {
-    padding: 12px 0;
-    border-bottom: 1px solid #f0f0f0;
+    width: 100%;
+    border-radius: 8px;
+    margin-bottom: 20px;
     display: flex;
     align-items: flex-start;
+    transition: all 0.3s ease;
   }
   .memo-item:last-child {
-    border-bottom: none;
-  }
-  .memo-item i {
-    margin-right: 10px;
-    font-size: 18px;
-    margin-top: 2px;
+    margin-bottom: 0;
   }
-  .memo-item i.el-icon-warning {
-    color: #f56c6c;
+  .memo-item .left-icon {
+    display: flex;
+    align-items: flex-start;
+    margin-right: 12px;
+    padding-top: 2px;
+    flex-shrink: 0;
   }
-  .memo-item i.el-icon-info {
-    color: #409eff;
+  .memo-item .left-icon img {
+    width: 15px;
+    height: 15px;
   }
   .memo-content {
+    width: 100%;
     flex: 1;
   }
   .memo-content h4 {
-    margin: 0 0 5px 0;
+    margin: 0 0 8px 0;
+    font-size: 16px;
+    font-weight: bolder;
+    color: #303133;
+  }
+  .memo-meta {
+    width: 95%;
+    // display: flex;
+    // align-items: center;
+    margin-bottom: 8px;
+  }
+  .memo-meta-title {
+    display: inline-block;
+    width: 40%;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
     font-size: 14px;
+    color: #606266;
     font-weight: 500;
   }
-  .memo-desc {
+  .memo-meta-date {
     font-size: 12px;
-    color: #666;
-    margin: 0 0 8px 0;
-    line-height: 1.5;
+    color: #909399;
+    white-space: nowrap;
   }
-  .memo-meta {
-    font-size: 12px;
-    color: #999;
-    display: flex;
-    justify-content: space-between;
+  .memo-content-text {
+    width: 98%;
+    font-size: 14px;
+    color: #606266;
+    line-height: 1.6;
+    margin: 0;
+    padding-left: 0;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
   }
   .left-icon {
     display: flex;
@@ -803,44 +702,6 @@
     color: #333333;
     margin-left: 10px;
   }
-  .month-text {
-    font-size: 16px;
-    font-weight: 500;
-    color: #303133;
-  }
-  .lunar-info {
-    font-size: 14px;
-    margin-left: 10px;
-  }
-
-  .calendar-day:hover {
-    background-color: #f5f7fa;
-  }
-
-  .calendar-day.selected {
-    background-color: #ecf5ff;
-    border-color: #a0d3e8;
-  }
-
-  .calendar-day.has-event {
-    background-color: #f0f9eb;
-  }
-  .calendar-day.weekend .date-number {
-    color: #fd8c2f;
-  }
-
-  .date-number {
-    font-size: 14px;
-    font-weight: 500;
-    color: #303133;
-    margin-bottom: 4px;
-  }
-
-  .lunar-date {
-    font-size: 12px;
-    color: #999;
-    margin-bottom: 4px;
-  }
 
   .event-dot {
     position: absolute;