|
@@ -1,825 +1,193 @@
|
|
-// 导入iOS主题变量
|
|
|
|
@import '../ios-theme.scss';
|
|
@import '../ios-theme.scss';
|
|
|
|
|
|
-.project-detail-container {
|
|
|
|
- padding: $ios-spacing-xl;
|
|
|
|
- max-width: 1200px;
|
|
|
|
- margin: 0 auto;
|
|
|
|
- font-family: $ios-font-family;
|
|
|
|
- background-color: $ios-background-secondary;
|
|
|
|
- min-height: 100vh;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 项目标题栏 */
|
|
|
|
-.project-header {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-between;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-bottom: $ios-spacing-xxl;
|
|
|
|
- padding: $ios-spacing-xl;
|
|
|
|
- background-color: $ios-background;
|
|
|
|
- border-radius: $ios-radius-lg;
|
|
|
|
- box-shadow: $ios-shadow-card;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.project-header h1 {
|
|
|
|
- font-size: $ios-font-size-xl;
|
|
|
|
- color: $ios-text-primary;
|
|
|
|
- margin: 0;
|
|
|
|
- font-weight: $ios-font-weight-semibold;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.project-id {
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- color: $ios-text-secondary;
|
|
|
|
- background-color: $ios-background-secondary;
|
|
|
|
- padding: $ios-spacing-xs $ios-spacing-md;
|
|
|
|
- border-radius: $ios-radius-full;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 提醒消息弹窗 - iOS风格 */
|
|
|
|
-.reminder-popup {
|
|
|
|
- position: fixed;
|
|
|
|
- top: $ios-spacing-xl;
|
|
|
|
- right: $ios-spacing-xl;
|
|
|
|
- background-color: $ios-success;
|
|
|
|
- color: white;
|
|
|
|
- padding: $ios-spacing-md $ios-spacing-lg;
|
|
|
|
- border-radius: $ios-radius-lg;
|
|
|
|
- box-shadow: $ios-shadow-md;
|
|
|
|
- z-index: 1000;
|
|
|
|
- animation: slideInRight $ios-animation-fast $ios-animation-easing;
|
|
|
|
- font-family: $ios-font-family;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-@keyframes slideInRight {
|
|
|
|
- from {
|
|
|
|
- transform: translateX(100%);
|
|
|
|
- opacity: 0;
|
|
|
|
- }
|
|
|
|
- to {
|
|
|
|
- transform: translateX(0);
|
|
|
|
- opacity: 1;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 通用区域样式 - iOS卡片风格 */
|
|
|
|
-.project-info-section,
|
|
|
|
-.customer-profile-section,
|
|
|
|
-.requirement-section,
|
|
|
|
-.process-section,
|
|
|
|
-.render-progress-section,
|
|
|
|
-.model-check-section,
|
|
|
|
-.feedback-section,
|
|
|
|
-.designer-change-section,
|
|
|
|
-.settlement-section,
|
|
|
|
-.stagnation-section {
|
|
|
|
- background-color: $ios-card-background;
|
|
|
|
- border-radius: $ios-radius-lg;
|
|
|
|
- padding: $ios-spacing-xl;
|
|
|
|
- margin-bottom: $ios-spacing-xl;
|
|
|
|
- box-shadow: $ios-shadow-card;
|
|
|
|
- transition: $ios-feedback-hover;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.project-info-section:hover,
|
|
|
|
-.customer-profile-section:hover,
|
|
|
|
-.requirement-section:hover,
|
|
|
|
-.process-section:hover,
|
|
|
|
-.render-progress-section:hover,
|
|
|
|
-.model-check-section:hover,
|
|
|
|
-.feedback-section:hover,
|
|
|
|
-.designer-change-section:hover,
|
|
|
|
-.settlement-section:hover,
|
|
|
|
-.stagnation-section:hover {
|
|
|
|
- box-shadow: $ios-shadow-md;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-h2 {
|
|
|
|
- font-size: $ios-font-size-lg;
|
|
|
|
- color: $ios-text-primary;
|
|
|
|
- margin-top: 0;
|
|
|
|
- margin-bottom: $ios-spacing-xl;
|
|
|
|
- padding-bottom: $ios-spacing-md;
|
|
|
|
- border-bottom: 1px solid $ios-border;
|
|
|
|
- font-weight: $ios-font-weight-semibold;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-h3 {
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
- color: $ios-text-primary;
|
|
|
|
- margin-top: 0;
|
|
|
|
- margin-bottom: $ios-spacing-lg;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 项目基本信息 - iOS风格 */
|
|
|
|
-.info-grid {
|
|
|
|
- display: grid;
|
|
|
|
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
|
|
- gap: $ios-spacing-lg;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.info-item {
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.info-item label {
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- color: $ios-text-secondary;
|
|
|
|
- margin-bottom: $ios-spacing-xs;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.info-item span {
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
- color: $ios-text-primary;
|
|
|
|
- font-weight: $ios-font-weight-regular;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stage-tag {
|
|
|
|
- display: inline-block;
|
|
|
|
- padding: $ios-spacing-xs $ios-spacing-lg;
|
|
|
|
- border-radius: $ios-radius-full;
|
|
|
|
- background-color: color-mix(in srgb, $ios-success 15%, transparent);
|
|
|
|
- color: $ios-success;
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 客户画像 - iOS风格 */
|
|
|
|
-.skill-mismatch-warning {
|
|
|
|
- background-color: color-mix(in srgb, $ios-danger 10%, transparent);
|
|
|
|
- color: $ios-danger;
|
|
|
|
- padding: $ios-spacing-md $ios-spacing-lg;
|
|
|
|
- border-radius: $ios-radius-md;
|
|
|
|
- margin-bottom: $ios-spacing-xl;
|
|
|
|
- border-left: 4px solid $ios-danger;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.customer-tags {
|
|
|
|
- display: flex;
|
|
|
|
- flex-wrap: wrap;
|
|
|
|
- gap: $ios-spacing-lg;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.tag-group {
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- min-width: 150px;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.tag-group label {
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- color: $ios-text-secondary;
|
|
|
|
- margin-bottom: $ios-spacing-sm;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.tag {
|
|
|
|
- display: inline-block;
|
|
|
|
- background-color: color-mix(in srgb, $ios-primary 15%, transparent);
|
|
|
|
- color: $ios-primary;
|
|
|
|
- padding: $ios-spacing-xs $ios-spacing-md;
|
|
|
|
- border-radius: $ios-radius-full;
|
|
|
|
- font-size: $ios-font-size-xs;
|
|
|
|
- margin-right: $ios-spacing-xs;
|
|
|
|
- margin-bottom: $ios-spacing-xs;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.priority-tag {
|
|
|
|
- display: inline-block;
|
|
|
|
- background-color: color-mix(in srgb, $ios-warning 15%, transparent);
|
|
|
|
- color: $ios-warning;
|
|
|
|
- padding: $ios-spacing-xs $ios-spacing-md;
|
|
|
|
- border-radius: $ios-radius-full;
|
|
|
|
- font-size: $ios-font-size-xs;
|
|
|
|
- margin-right: $ios-spacing-xs;
|
|
|
|
- margin-bottom: $ios-spacing-xs;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 需求确认清单 - iOS风格 */
|
|
|
|
-.checklist {
|
|
|
|
- margin-top: $ios-spacing-lg;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.checklist-item {
|
|
|
|
- display: flex;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-bottom: $ios-spacing-md;
|
|
|
|
- padding: $ios-spacing-md;
|
|
|
|
- border-radius: $ios-radius-md;
|
|
|
|
- background-color: $ios-background-secondary;
|
|
|
|
- transition: $ios-feedback-hover;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.checklist-item:hover {
|
|
|
|
- background-color: color-mix(in srgb, $ios-background-secondary 80%, white);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.checklist-item input[type="checkbox"] {
|
|
|
|
- margin-right: $ios-spacing-md;
|
|
|
|
- width: 20px;
|
|
|
|
- height: 20px;
|
|
|
|
- accent-color: $ios-primary;
|
|
|
|
- border-radius: $ios-radius-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.checklist-item span {
|
|
|
|
- color: $ios-text-primary;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
- flex: 1;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 制作流程进度 - iOS风格 */
|
|
|
|
-.stage-progress {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-between;
|
|
|
|
- align-items: center;
|
|
|
|
- position: relative;
|
|
|
|
- padding: 0 $ios-spacing-md;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stage-progress::before {
|
|
|
|
- content: '';
|
|
|
|
- position: absolute;
|
|
|
|
- top: 50%;
|
|
|
|
- left: 50px;
|
|
|
|
- right: 50px;
|
|
|
|
- height: 3px;
|
|
|
|
- background-color: $ios-border;
|
|
|
|
- transform: translateY(-50%);
|
|
|
|
- z-index: 1;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stage {
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: center;
|
|
|
|
- z-index: 2;
|
|
|
|
- position: relative;
|
|
|
|
- transition: $ios-feedback-hover;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stage-icon {
|
|
|
|
- width: 44px;
|
|
|
|
- height: 44px;
|
|
|
|
- border-radius: 50%;
|
|
|
|
- background-color: $ios-border;
|
|
|
|
- color: $ios-text-secondary;
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: center;
|
|
|
|
- align-items: center;
|
|
|
|
- font-weight: $ios-font-weight-semibold;
|
|
|
|
- margin-bottom: $ios-spacing-md;
|
|
|
|
- transition: all $ios-animation-normal $ios-animation-easing;
|
|
|
|
- border: 3px solid $ios-background;
|
|
|
|
- box-shadow: $ios-shadow-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stage-name {
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- color: $ios-text-secondary;
|
|
|
|
- margin-bottom: $ios-spacing-md;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stage.completed .stage-icon {
|
|
|
|
- background-color: $ios-success;
|
|
|
|
- color: white;
|
|
|
|
- box-shadow: 0 0 0 3px color-mix(in srgb, $ios-success 20%, transparent);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stage.completed .stage-name {
|
|
|
|
- color: $ios-success;
|
|
|
|
- font-weight: $ios-font-weight-semibold;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stage-actions {
|
|
|
|
- margin-top: $ios-spacing-md;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stage-actions button {
|
|
|
|
- background-color: $ios-primary;
|
|
|
|
- color: white;
|
|
|
|
- border: none;
|
|
|
|
- padding: $ios-spacing-sm $ios-spacing-lg;
|
|
|
|
- border-radius: $ios-radius-md;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
- cursor: pointer;
|
|
|
|
- transition: $ios-feedback-tap;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
- box-shadow: $ios-shadow-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stage-actions button:hover:not(:disabled) {
|
|
|
|
- background-color: $ios-primary-light;
|
|
|
|
- transform: translateY(-1px);
|
|
|
|
- box-shadow: $ios-shadow-md;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stage-actions button:active:not(:disabled) {
|
|
|
|
- transform: translateY(0);
|
|
|
|
- box-shadow: $ios-shadow-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stage-actions button:disabled {
|
|
|
|
- cursor: not-allowed;
|
|
|
|
- background-color: $ios-text-tertiary;
|
|
|
|
- box-shadow: none;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 渲染进度 - iOS风格 */
|
|
|
|
-.loading {
|
|
|
|
- text-align: center;
|
|
|
|
- padding: $ios-spacing-xl;
|
|
|
|
- color: $ios-text-secondary;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.error {
|
|
|
|
- text-align: center;
|
|
|
|
- padding: $ios-spacing-xl;
|
|
|
|
- color: $ios-danger;
|
|
|
|
- background-color: color-mix(in srgb, $ios-danger 10%, transparent);
|
|
|
|
- border-radius: $ios-radius-md;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.error button {
|
|
|
|
- background-color: $ios-danger;
|
|
|
|
- color: white;
|
|
|
|
- border: none;
|
|
|
|
- padding: $ios-spacing-sm $ios-spacing-lg;
|
|
|
|
- border-radius: $ios-radius-md;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
- cursor: pointer;
|
|
|
|
- margin: 0 $ios-spacing-md;
|
|
|
|
- transition: $ios-feedback-tap;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.error button:hover {
|
|
|
|
- background-color: color-mix(in srgb, $ios-danger 90%, black);
|
|
|
|
- transform: translateY(-1px);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.progress-content {
|
|
|
|
- padding: $ios-spacing-xl;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.progress-bar {
|
|
|
|
- width: 100%;
|
|
|
|
- height: 8px;
|
|
|
|
- background-color: $ios-border;
|
|
|
|
- border-radius: $ios-radius-full;
|
|
|
|
- overflow: hidden;
|
|
|
|
- margin-bottom: $ios-spacing-lg;
|
|
|
|
- position: relative;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.progress-fill {
|
|
|
|
- height: 100%;
|
|
|
|
- background-color: $ios-primary;
|
|
|
|
- transition: width $ios-animation-normal $ios-animation-easing;
|
|
|
|
- border-radius: $ios-radius-full;
|
|
|
|
- position: relative;
|
|
|
|
- overflow: hidden;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.progress-fill::after {
|
|
|
|
- content: '';
|
|
|
|
- position: absolute;
|
|
|
|
- top: 0;
|
|
|
|
- left: 0;
|
|
|
|
- right: 0;
|
|
|
|
- bottom: 0;
|
|
|
|
- background: linear-gradient(
|
|
|
|
- 90deg,
|
|
|
|
- transparent,
|
|
|
|
- color-mix(in srgb, white 30%, transparent),
|
|
|
|
- transparent
|
|
|
|
- );
|
|
|
|
- animation: shimmer 2s infinite;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-@keyframes shimmer {
|
|
|
|
- 0% {
|
|
|
|
- transform: translateX(-100%);
|
|
|
|
- }
|
|
|
|
- 100% {
|
|
|
|
- transform: translateX(100%);
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.progress-info {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-between;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
- color: $ios-text-primary;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 模型检查清单 - iOS风格 */
|
|
|
|
-.check-status {
|
|
|
|
- margin-left: auto;
|
|
|
|
- font-weight: $ios-font-weight-semibold;
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- padding: $ios-spacing-xs $ios-spacing-sm;
|
|
|
|
- border-radius: $ios-radius-md;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.check-status.passed {
|
|
|
|
- color: $ios-success;
|
|
|
|
- background-color: color-mix(in srgb, $ios-success 10%, transparent);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.check-status.failed {
|
|
|
|
- color: $ios-danger;
|
|
|
|
- background-color: color-mix(in srgb, $ios-danger 10%, transparent);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 客户反馈 - iOS风格 */
|
|
|
|
-.no-feedback,
|
|
|
|
-.no-changes,
|
|
|
|
-.no-settlements {
|
|
|
|
- text-align: center;
|
|
|
|
- padding: $ios-spacing-xl;
|
|
|
|
- color: $ios-text-secondary;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-item {
|
|
|
|
- border: 1px solid $ios-border;
|
|
|
|
- border-radius: $ios-radius-lg;
|
|
|
|
- padding: $ios-spacing-lg;
|
|
|
|
- margin-bottom: $ios-spacing-lg;
|
|
|
|
- background-color: $ios-background;
|
|
|
|
- transition: $ios-feedback-hover;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-item:hover {
|
|
|
|
- box-shadow: $ios-shadow-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-header {
|
|
|
|
- display: flex;
|
|
|
|
- justify-content: space-between;
|
|
|
|
- align-items: center;
|
|
|
|
- margin-bottom: $ios-spacing-md;
|
|
|
|
- padding-bottom: $ios-spacing-md;
|
|
|
|
- border-bottom: 1px solid $ios-border;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-customer {
|
|
|
|
- font-weight: $ios-font-weight-semibold;
|
|
|
|
- color: $ios-text-primary;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-date {
|
|
|
|
- font-size: $ios-font-size-xs;
|
|
|
|
- color: $ios-text-tertiary;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-content {
|
|
|
|
- margin-bottom: $ios-spacing-lg;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-status {
|
|
|
|
- display: inline-block;
|
|
|
|
- background-color: color-mix(in srgb, $ios-primary 15%, transparent);
|
|
|
|
- color: $ios-primary;
|
|
|
|
- padding: $ios-spacing-xs $ios-spacing-md;
|
|
|
|
- border-radius: $ios-radius-full;
|
|
|
|
- font-size: $ios-font-size-xs;
|
|
|
|
- margin-bottom: $ios-spacing-md;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-type {
|
|
|
|
- color: $ios-text-secondary;
|
|
|
|
- margin-bottom: $ios-spacing-md;
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-details {
|
|
|
|
- background-color: $ios-background-secondary;
|
|
|
|
- padding: $ios-spacing-md;
|
|
|
|
- border-radius: $ios-radius-md;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-details p {
|
|
|
|
- margin: $ios-spacing-xs 0;
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- color: $ios-text-primary;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-actions {
|
|
|
|
- display: flex;
|
|
|
|
- gap: $ios-spacing-md;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-actions button {
|
|
|
|
- padding: $ios-spacing-sm $ios-spacing-lg;
|
|
|
|
- border: none;
|
|
|
|
- border-radius: $ios-radius-md;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
- cursor: pointer;
|
|
|
|
- transition: $ios-feedback-tap;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
- flex: 1;
|
|
|
|
- box-shadow: $ios-shadow-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-actions button:first-child {
|
|
|
|
- background-color: $ios-primary;
|
|
|
|
- color: white;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-actions button:first-child:hover:not(:disabled) {
|
|
|
|
- background-color: $ios-primary-light;
|
|
|
|
- transform: translateY(-1px);
|
|
|
|
- box-shadow: $ios-shadow-md;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-actions button:first-child:active:not(:disabled) {
|
|
|
|
- transform: translateY(0);
|
|
|
|
- box-shadow: $ios-shadow-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-actions button:last-child {
|
|
|
|
- background-color: $ios-success;
|
|
|
|
- color: white;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-actions button:last-child:hover:not(:disabled) {
|
|
|
|
- background-color: color-mix(in srgb, $ios-success 90%, black);
|
|
|
|
- transform: translateY(-1px);
|
|
|
|
- box-shadow: $ios-shadow-md;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-actions button:last-child:active:not(:disabled) {
|
|
|
|
- transform: translateY(0);
|
|
|
|
- box-shadow: $ios-shadow-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.feedback-actions button:disabled {
|
|
|
|
- background-color: $ios-text-tertiary;
|
|
|
|
- cursor: not-allowed;
|
|
|
|
- box-shadow: none;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 设计师变更记录 - iOS风格 */
|
|
|
|
-.change-item {
|
|
|
|
- border: 1px solid $ios-border;
|
|
|
|
- border-radius: $ios-radius-lg;
|
|
|
|
- padding: $ios-spacing-lg;
|
|
|
|
- margin-bottom: $ios-spacing-lg;
|
|
|
|
- background-color: $ios-background;
|
|
|
|
- transition: $ios-feedback-hover;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.change-item:hover {
|
|
|
|
- box-shadow: $ios-shadow-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.change-header {
|
|
|
|
- margin-bottom: $ios-spacing-lg;
|
|
|
|
- padding-bottom: $ios-spacing-md;
|
|
|
|
- border-bottom: 1px solid $ios-border;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.change-time {
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- color: $ios-text-secondary;
|
|
|
|
- font-weight: $ios-font-weight-semibold;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.change-details {
|
|
|
|
- margin-bottom: $ios-spacing-lg;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.change-details div {
|
|
|
|
- margin-bottom: $ios-spacing-xs;
|
|
|
|
- color: $ios-text-primary;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.change-details ul {
|
|
|
|
- margin: $ios-spacing-xs 0;
|
|
|
|
- padding-left: $ios-spacing-xl;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.change-details li {
|
|
|
|
- color: $ios-text-primary;
|
|
|
|
- margin-bottom: $ios-spacing-xs;
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.change-status {
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- color: $ios-text-secondary;
|
|
|
|
- background-color: $ios-background-secondary;
|
|
|
|
- padding: $ios-spacing-sm;
|
|
|
|
- border-radius: $ios-radius-md;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 分阶段结算记录 - iOS风格 */
|
|
|
|
-.settlement-table {
|
|
|
|
- overflow-x: auto;
|
|
|
|
- border-radius: $ios-radius-lg;
|
|
|
|
- background-color: $ios-background;
|
|
|
|
- border: 1px solid $ios-border;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.settlement-table table {
|
|
|
|
- width: 100%;
|
|
|
|
- border-collapse: collapse;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.settlement-table th,
|
|
|
|
-.settlement-table td {
|
|
|
|
- padding: $ios-spacing-lg;
|
|
|
|
- text-align: left;
|
|
|
|
- border-bottom: 1px solid $ios-border;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.settlement-table th {
|
|
|
|
- background-color: $ios-background-secondary;
|
|
|
|
- font-weight: $ios-font-weight-semibold;
|
|
|
|
- color: $ios-text-primary;
|
|
|
|
- position: sticky;
|
|
|
|
- top: 0;
|
|
|
|
- z-index: 10;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.settlement-table td {
|
|
|
|
- color: $ios-text-primary;
|
|
|
|
- font-weight: $ios-font-weight-regular;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.settlement-table tr:last-child td {
|
|
|
|
- border-bottom: none;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.settlement-table tr:hover td {
|
|
|
|
- background-color: color-mix(in srgb, $ios-background-secondary 50%, white);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 停滞期管理 - iOS风格 */
|
|
|
|
-.stagnation-section button {
|
|
|
|
- background-color: $ios-warning;
|
|
|
|
- color: white;
|
|
|
|
- border: none;
|
|
|
|
- padding: $ios-spacing-md $ios-spacing-xl;
|
|
|
|
- border-radius: $ios-radius-md;
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
- cursor: pointer;
|
|
|
|
- transition: $ios-feedback-tap;
|
|
|
|
- font-weight: $ios-font-weight-medium;
|
|
|
|
- box-shadow: $ios-shadow-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stagnation-section button:hover {
|
|
|
|
- background-color: color-mix(in srgb, $ios-warning 90%, black);
|
|
|
|
- transform: translateY(-1px);
|
|
|
|
- box-shadow: $ios-shadow-md;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stagnation-section button:active {
|
|
|
|
- transform: translateY(0);
|
|
|
|
- box-shadow: $ios-shadow-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-.stagnation-section p {
|
|
|
|
- margin-top: $ios-spacing-md;
|
|
|
|
- color: $ios-text-secondary;
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 响应式设计 - iOS风格 */
|
|
|
|
-@media (max-width: 768px) {
|
|
|
|
- .project-detail-container {
|
|
|
|
- padding: $ios-spacing-md;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .project-header {
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: flex-start;
|
|
|
|
- gap: $ios-spacing-md;
|
|
|
|
- padding: $ios-spacing-lg;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .info-grid {
|
|
|
|
- grid-template-columns: 1fr;
|
|
|
|
- gap: $ios-spacing-md;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .stage-progress {
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: flex-start;
|
|
|
|
- gap: $ios-spacing-xl;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .stage-progress::before {
|
|
|
|
- display: none;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .stage {
|
|
|
|
- flex-direction: row;
|
|
|
|
- align-items: center;
|
|
|
|
- gap: $ios-spacing-md;
|
|
|
|
- width: 100%;
|
|
|
|
- justify-content: flex-start;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .stage-icon {
|
|
|
|
- margin-bottom: 0;
|
|
|
|
- width: 36px;
|
|
|
|
- height: 36px;
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .feedback-actions {
|
|
|
|
- flex-direction: column;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .customer-tags {
|
|
|
|
- flex-direction: column;
|
|
|
|
- gap: $ios-spacing-md;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .progress-info {
|
|
|
|
- flex-direction: column;
|
|
|
|
- gap: $ios-spacing-md;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .checklist-item {
|
|
|
|
- padding: $ios-spacing-sm;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .settlement-table th,
|
|
|
|
- .settlement-table td {
|
|
|
|
- padding: $ios-spacing-sm;
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .stage-actions button {
|
|
|
|
- padding: $ios-spacing-sm $ios-spacing-md;
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .feedback-actions button {
|
|
|
|
- padding: $ios-spacing-sm $ios-spacing-md;
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- .stagnation-section button {
|
|
|
|
- padding: $ios-spacing-sm $ios-spacing-lg;
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- width: 100%;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- h2 {
|
|
|
|
- font-size: $ios-font-size-base;
|
|
|
|
- margin-bottom: $ios-spacing-lg;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- h3 {
|
|
|
|
- font-size: $ios-font-size-sm;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* iOS风格的滚动条 */
|
|
|
|
-::-webkit-scrollbar {
|
|
|
|
- width: $ios-scrollbar-width;
|
|
|
|
- height: $ios-scrollbar-width;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-::-webkit-scrollbar-track {
|
|
|
|
- background: $ios-scrollbar-track;
|
|
|
|
- border-radius: $ios-radius-full;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-::-webkit-scrollbar-thumb {
|
|
|
|
- background: $ios-scrollbar-thumb;
|
|
|
|
- border-radius: $ios-radius-full;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-::-webkit-scrollbar-thumb:hover {
|
|
|
|
- background: $ios-scrollbar-thumb-hover;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* 平滑滚动 */
|
|
|
|
-html {
|
|
|
|
- scroll-behavior: smooth;
|
|
|
|
-}
|
|
|
|
|
|
+/* 项目详情页主样式 */
|
|
|
|
+.project-detail-container{padding:$ios-spacing-xl;background-color:$ios-background;color:$ios-text-primary;min-height:100vh}
|
|
|
|
+.card{background-color:$ios-background-secondary;border-radius:$ios-radius-lg;padding:$ios-spacing-lg;margin-bottom:$ios-spacing-xl}
|
|
|
|
+.project-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:$ios-spacing-xl;background-color:$ios-background-secondary;padding:$ios-spacing-lg;border-radius:$ios-radius-lg}
|
|
|
|
+.header-content{display:flex;flex-direction:column;gap:$ios-spacing-sm}
|
|
|
|
+.project-header h1{font-size:$ios-font-size-xl;font-weight:$ios-font-weight-bold;color:$ios-text-primary;margin:0}
|
|
|
|
+.project-meta{display:flex;align-items:center;gap:$ios-spacing-lg;font-size:$ios-font-size-sm;color:$ios-text-secondary}
|
|
|
|
+.project-id{font-weight:$ios-font-weight-medium}
|
|
|
|
+.project-status{padding:$ios-spacing-xs $ios-spacing-md;border-radius:$ios-radius-full;background-color:#e8f0fe;color:$ios-primary}
|
|
|
|
+
|
|
|
|
+/* 按钮样式 */
|
|
|
|
+.header-actions{display:flex;gap:$ios-spacing-md;align-items:center}
|
|
|
|
+.back-btn{background-color:$ios-primary;color:white;border:none;padding:$ios-spacing-sm $ios-spacing-lg;border-radius:$ios-radius-md;font-size:$ios-font-size-sm;font-weight:$ios-font-weight-medium;cursor:pointer;white-space:nowrap}
|
|
|
|
+.back-btn:hover{background-color:#0056b3;transform:translateY(-1px)}
|
|
|
|
+.project-switcher{position:relative}
|
|
|
|
+.switch-btn{background-color:$ios-background-tertiary;color:$ios-text-primary;border:none;padding:$ios-spacing-sm $ios-spacing-lg;border-radius:$ios-radius-md;font-size:$ios-font-size-sm;font-weight:$ios-font-weight-medium;cursor:pointer;white-space:nowrap}
|
|
|
|
+.switch-btn:hover{background-color:#f0f0f0;transform:translateY(-1px)}
|
|
|
|
+.switch-dropdown{position:absolute;top:100%;right:0;margin-top:$ios-spacing-xs;background-color:$ios-background-secondary;border-radius:$ios-radius-md;overflow:hidden;min-width:200px;max-height:300px;overflow-y:auto;z-index:1000}
|
|
|
|
+.project-item{display:flex;justify-content:space-between;align-items:center;padding:$ios-spacing-md;cursor:pointer;border-bottom:1px solid $ios-border}
|
|
|
|
+.project-item:last-child{border-bottom:none}
|
|
|
|
+.project-item:hover{background-color:$ios-background}
|
|
|
|
+.project-item.active{background-color:#e8f0fe}
|
|
|
|
+.project-name{font-size:$ios-font-size-sm;color:$ios-text-primary;font-weight:$ios-font-weight-medium}
|
|
|
|
+.project-status-badge{font-size:$ios-font-size-xs;padding:$ios-spacing-xs $ios-spacing-sm;border-radius:$ios-radius-full;background-color:$ios-background-tertiary;color:$ios-text-secondary}
|
|
|
|
+.project-status-badge.ongoing{background-color:#e8f0fe;color:$ios-primary}
|
|
|
|
+.project-status-badge.completed{background-color:#e6f7e6;color:$ios-success}
|
|
|
|
+.project-status-badge.pending{background-color:#fff3cd;color:$ios-warning}
|
|
|
|
+
|
|
|
|
+.stagnation-btn{background-color:$ios-warning;color:white;border:none;padding:$ios-spacing-sm $ios-spacing-md;border-radius:$ios-radius-md;font-size:$ios-font-size-sm;cursor:pointer;font-weight:$ios-font-weight-medium}
|
|
|
|
+.stagnation-btn:hover{background-color:#d4a72c;transform:translateY(-1px)}
|
|
|
|
+
|
|
|
|
+/* 主内容区网格布局 */
|
|
|
|
+.main-content-grid{display:grid;grid-template-columns:repeat(auto-fit, minmax(320px, 1fr));gap:$ios-spacing-xl}
|
|
|
|
+
|
|
|
|
+/* 标题样式 */
|
|
|
|
+h2{font-size:$ios-font-size-lg;font-weight:$ios-font-weight-semibold;color:$ios-text-primary;margin-top:0;margin-bottom:$ios-spacing-lg;padding-bottom:$ios-spacing-sm;border-bottom:1px solid $ios-border}
|
|
|
|
+h3{font-size:$ios-font-size-base;font-weight:$ios-font-weight-medium;color:$ios-text-primary;margin-top:$ios-spacing-lg;margin-bottom:$ios-spacing-md}
|
|
|
|
+h4{font-size:$ios-font-size-sm;font-weight:$ios-font-weight-medium;color:$ios-text-primary;margin-top:$ios-spacing-md;margin-bottom:$ios-spacing-sm}
|
|
|
|
+
|
|
|
|
+/* 项目基本信息卡片 */
|
|
|
|
+.project-info-card .info-grid{display:grid;grid-template-columns:1fr 1fr;gap:$ios-spacing-md}
|
|
|
|
+.info-item{display:flex;flex-direction:column;gap:$ios-spacing-xs}
|
|
|
|
+.info-item label{font-size:$ios-font-size-sm;color:$ios-text-secondary;font-weight:$ios-font-weight-medium}
|
|
|
|
+.info-item span{font-size:$ios-font-size-base;color:$ios-text-primary;font-weight:$ios-font-weight-regular}
|
|
|
|
+.stage-tag{display:inline-block;padding:$ios-spacing-xs $ios-spacing-md;border-radius:$ios-radius-full;background-color:#e6f7e6;color:$ios-success;font-size:$ios-font-size-sm;font-weight:$ios-font-weight-medium}
|
|
|
|
+
|
|
|
|
+/* 客户画像卡片 */
|
|
|
|
+.warning-banner{background-color:#ffebee;color:$ios-danger;padding:$ios-spacing-md $ios-spacing-lg;border-radius:$ios-radius-md;margin-bottom:$ios-spacing-xl;border-left:4px solid $ios-danger;font-size:$ios-font-size-base;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:$ios-spacing-md}
|
|
|
|
+.warning-content{display:flex;align-items:center;gap:$ios-spacing-sm;flex:1}
|
|
|
|
+.warning-icon{font-size:$ios-font-size-lg}
|
|
|
|
+.contact-leader-btn{background-color:$ios-danger;color:white;border:none;padding:$ios-spacing-xs $ios-spacing-md;border-radius:$ios-radius-md;font-size:$ios-font-size-sm;cursor:pointer;font-weight:$ios-font-weight-medium}
|
|
|
|
+.contact-leader-btn:hover{background-color:#c62828;transform:translateY(-1px)}
|
|
|
|
+
|
|
|
|
+/* 标签样式 */
|
|
|
|
+.tags-container{display:flex;flex-direction:column;gap:$ios-spacing-lg}
|
|
|
|
+.tag-section{margin-bottom:$ios-spacing-md}
|
|
|
|
+.tag-section h3{margin-top:0;font-size:$ios-font-size-base}
|
|
|
|
+.tags-grid{display:grid;grid-template-columns:repeat(auto-fit, minmax(120px, 1fr));gap:$ios-spacing-md}
|
|
|
|
+.tag-item{display:flex;flex-direction:column;gap:$ios-spacing-xs}
|
|
|
|
+.tag-label{font-size:$ios-font-size-xs;color:$ios-text-secondary;font-weight:$ios-font-weight-medium}
|
|
|
|
+.tag{display:inline-block;padding:$ios-spacing-xs $ios-spacing-md;border-radius:$ios-radius-full;background-color:$ios-background-tertiary;color:$ios-text-primary;font-size:$ios-font-size-sm;font-weight:$ios-font-weight-medium;align-self:flex-start}
|
|
|
|
+.tags-flex{display:flex;flex-direction:column;gap:$ios-spacing-md}
|
|
|
|
+.tag-group{display:flex;flex-direction:column;gap:$ios-spacing-sm}
|
|
|
|
+.group-label{font-size:$ios-font-size-sm;color:$ios-text-secondary;font-weight:$ios-font-weight-medium}
|
|
|
|
+.tags{display:flex;flex-wrap:wrap;gap:$ios-spacing-sm}
|
|
|
|
+.priority-tag,.skill-tag{display:inline-block;padding:$ios-spacing-xs $ios-spacing-sm;border-radius:$ios-radius-full;background-color:$ios-background-tertiary;color:$ios-text-primary;font-size:$ios-font-size-xs;font-weight:$ios-font-weight-medium}
|
|
|
|
+.priority-tag{background-color:#fff3cd;color:$ios-warning}
|
|
|
|
+.skill-tag{background-color:#e8f0fe;color:$ios-primary}
|
|
|
|
+
|
|
|
|
+/* 制作流程进度卡片 */
|
|
|
|
+.stage-progress-container{margin-bottom:$ios-spacing-xl}
|
|
|
|
+.stage-progress{display:flex;justify-content:space-between;align-items:center;position:relative;padding:$ios-spacing-lg 0}
|
|
|
|
+.stage-progress::before{content:'';position:absolute;top:50%;left:$ios-spacing-xl;right:$ios-spacing-xl;height:3px;background-color:$ios-border;transform:translateY(-50%);z-index:1}
|
|
|
|
+.progress-line{position:absolute;top:50%;left:0;right:0;height:3px;background-color:$ios-success;transform:translateY(-50%);z-index:1}
|
|
|
|
+.stage{display:flex;flex-direction:column;align-items:center;z-index:2;position:relative}
|
|
|
|
+.stage-icon{width:44px;height:44px;border-radius:50%;background-color:$ios-border;color:$ios-text-secondary;display:flex;justify-content:center;align-items:center;font-weight:$ios-font-weight-semibold;margin-bottom:$ios-spacing-md}
|
|
|
|
+.stage.completed .stage-icon{background-color:$ios-success;color:white;box-shadow:0 0 0 4px #e6f7e6}
|
|
|
|
+.stage.active .stage-icon{background-color:$ios-primary;color:white;box-shadow:0 0 0 4px #e8f0fe}
|
|
|
|
+.stage-name{font-size:$ios-font-size-sm;color:$ios-text-secondary;text-align:center;white-space:nowrap;font-weight:$ios-font-weight-medium}
|
|
|
|
+.stage.completed .stage-name,.stage.active .stage-name{color:$ios-text-primary}
|
|
|
|
+.current-stage-actions{background-color:$ios-background-tertiary;padding:$ios-spacing-lg;border-radius:$ios-radius-md;text-align:center}
|
|
|
|
+.current-stage-info h3{margin-top:0;margin-bottom:$ios-spacing-md;font-size:$ios-font-size-base}
|
|
|
|
+.stage-highlight{color:$ios-primary;font-weight:$ios-font-weight-semibold}
|
|
|
|
+
|
|
|
|
+/* 按钮样式 */
|
|
|
|
+.primary-btn,.secondary-btn{border:none;padding:$ios-spacing-sm $ios-spacing-lg;border-radius:$ios-radius-md;font-size:$ios-font-size-sm;cursor:pointer;font-weight:$ios-font-weight-medium;white-space:nowrap}
|
|
|
|
+.primary-btn{background-color:$ios-primary;color:white}
|
|
|
|
+.primary-btn:hover{background-color:#0056b3;transform:translateY(-1px)}
|
|
|
|
+.primary-btn:disabled{background-color:$ios-border;color:$ios-text-secondary;cursor:not-allowed;transform:none}
|
|
|
|
+.secondary-btn{background-color:$ios-background-tertiary;color:$ios-text-primary}
|
|
|
|
+.secondary-btn:hover{background-color:#f0f0f0;transform:translateY(-1px)}
|
|
|
|
+
|
|
|
|
+/* 渲染进度卡片 */
|
|
|
|
+.loading-state,.error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:$ios-spacing-xl;text-align:center;gap:$ios-spacing-md}
|
|
|
|
+.loading-spinner{width:40px;height:40px;border:3px solid $ios-border;border-top:3px solid $ios-primary;border-radius:50%;animation:spin 1s linear infinite}
|
|
|
|
+@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}
|
|
|
|
+.timeout-warning{background-color:#fff3cd;color:$ios-warning;padding:$ios-spacing-md;border-radius:$ios-radius-md;margin-bottom:$ios-spacing-lg;display:flex;align-items:center;gap:$ios-spacing-sm;border-left:4px solid $ios-warning}
|
|
|
|
+.warning-title{font-weight:$ios-font-weight-medium;display:block}
|
|
|
|
+.warning-time{font-size:$ios-font-size-sm;display:block}
|
|
|
|
+.progress-bar-container{position:relative;margin-bottom:$ios-spacing-lg}
|
|
|
|
+.progress-bar{width:100%;height:12px;background-color:$ios-background-tertiary;border-radius:$ios-radius-full;overflow:hidden}
|
|
|
|
+.progress-fill{height:100%;background-color:$ios-primary;border-radius:$ios-radius-full}
|
|
|
|
+.progress-percentage{position:absolute;right:0;top:-$ios-spacing-md;font-size:$ios-font-size-sm;font-weight:$ios-font-weight-medium;color:$ios-text-secondary}
|
|
|
|
+.progress-details{display:grid;grid-template-columns:1fr 1fr;gap:$ios-spacing-md}
|
|
|
|
+.progress-info{display:flex;flex-direction:column;gap:$ios-spacing-xs}
|
|
|
|
+.info-label{font-size:$ios-font-size-xs;color:$ios-text-secondary}
|
|
|
|
+.info-value{font-size:$ios-font-size-base;color:$ios-text-primary;font-weight:$ios-font-weight-medium}
|
|
|
|
+
|
|
|
|
+/* 模型误差检查清单卡片 */
|
|
|
|
+.checklist{display:flex;flex-direction:column;gap:$ios-spacing-md}
|
|
|
|
+.checklist-item{display:flex;align-items:center;padding:$ios-spacing-md;border-radius:$ios-radius-md;background-color:$ios-background-tertiary}
|
|
|
|
+.custom-checkbox{margin-right:$ios-spacing-md;width:20px;height:20px;accent-color:$ios-primary;border-radius:$ios-radius-sm}
|
|
|
|
+.checklist-text{color:$ios-text-primary;font-size:$ios-font-size-base;flex:1}
|
|
|
|
+.check-status{font-size:$ios-font-size-sm;font-weight:$ios-font-weight-medium;padding:$ios-spacing-xs $ios-spacing-sm;border-radius:$ios-radius-full}
|
|
|
|
+.check-status.passed{background-color:#e6f7e6;color:$ios-success}
|
|
|
|
+.check-status.failed{background-color:#ffebee;color:$ios-danger}
|
|
|
|
+
|
|
|
|
+/* 客户反馈卡片 */
|
|
|
|
+.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:$ios-spacing-xl;text-align:center;gap:$ios-spacing-md;color:$ios-text-secondary}
|
|
|
|
+.empty-icon{font-size:$ios-font-size-xl}
|
|
|
|
+.feedback-item{background-color:$ios-background-tertiary;border-radius:$ios-radius-md;padding:$ios-spacing-lg;margin-bottom:$ios-spacing-md}
|
|
|
|
+.feedback-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:$ios-spacing-md}
|
|
|
|
+.feedback-meta{display:flex;align-items:center;gap:$ios-spacing-sm}
|
|
|
|
+.feedback-type{font-size:$ios-font-size-sm;font-weight:$ios-font-weight-medium;color:$ios-text-primary}
|
|
|
|
+.feedback-tag{font-size:$ios-font-size-xs;background-color:#e8f0fe;color:$ios-primary;padding:$ios-spacing-xs $ios-spacing-sm;border-radius:$ios-radius-full;font-weight:$ios-font-weight-medium}
|
|
|
|
+.feedback-date{font-size:$ios-font-size-xs;color:$ios-text-secondary}
|
|
|
|
+.feedback-content{margin-bottom:$ios-spacing-md}
|
|
|
|
+.feedback-status{display:flex;align-items:center;gap:$ios-spacing-xs;margin-bottom:$ios-spacing-sm;font-size:$ios-font-size-sm}
|
|
|
|
+.status-label{color:$ios-text-secondary}
|
|
|
|
+.status-value{color:$ios-text-primary;font-weight:$ios-font-weight-medium}
|
|
|
|
+.feedback-countdown{display:flex;align-items:center;gap:$ios-spacing-xs;padding:$ios-spacing-xs $ios-spacing-sm;background-color:#fff3cd;color:$ios-warning;border-radius:$ios-radius-full;font-size:$ios-font-size-xs;margin-bottom:$ios-spacing-md}
|
|
|
|
+.countdown-icon{font-size:$ios-font-size-sm}
|
|
|
|
+.feedback-details{display:flex;flex-direction:column;gap:$ios-spacing-xs}
|
|
|
|
+.detail-item{display:flex;gap:$ios-spacing-sm;font-size:$ios-font-size-sm}
|
|
|
|
+.detail-label{color:$ios-text-secondary;width:80px;flex-shrink:0}
|
|
|
|
+.detail-value{color:$ios-text-primary;flex:1}
|
|
|
|
+.feedback-actions{display:flex;gap:$ios-spacing-md;justify-content:flex-end}
|
|
|
|
+
|
|
|
|
+/* 设计师变更记录卡片 */
|
|
|
|
+.change-actions{display:flex;gap:$ios-spacing-md;margin-bottom:$ios-spacing-lg;flex-wrap:wrap}
|
|
|
|
+.change-item{background-color:$ios-background-tertiary;border-radius:$ios-radius-md;padding:$ios-spacing-lg;margin-bottom:$ios-spacing-md}
|
|
|
|
+.change-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:$ios-spacing-md}
|
|
|
|
+.change-time{font-size:$ios-font-size-sm;color:$ios-text-secondary;font-weight:$ios-font-weight-semibold}
|
|
|
|
+.accept-change-btn{background-color:$ios-success;color:white;border:none;padding:$ios-spacing-xs $ios-spacing-md;border-radius:$ios-radius-md;font-size:$ios-font-size-sm;cursor:pointer;font-weight:$ios-font-weight-medium}
|
|
|
|
+.accept-change-btn:hover{background-color:#2e7d32;transform:translateY(-1px)}
|
|
|
|
+.designer-change-info{display:grid;grid-template-columns:1fr;gap:$ios-spacing-sm;margin-bottom:$ios-spacing-md}
|
|
|
|
+.designer-change{display:flex;gap:$ios-spacing-sm;align-items:center}
|
|
|
|
+.designer-label{color:$ios-text-secondary;font-size:$ios-font-size-sm;width:80px;flex-shrink:0}
|
|
|
|
+.designer-name{color:$ios-text-primary;font-size:$ios-font-size-base;font-weight:$ios-font-weight-medium}
|
|
|
|
+.workload-info{font-size:$ios-font-size-sm;color:$ios-text-secondary;margin-bottom:$ios-spacing-md}
|
|
|
|
+.achievements{margin-bottom:$ios-spacing-md}
|
|
|
|
+.achievements ul{margin:0;padding-left:$ios-spacing-lg}
|
|
|
|
+.achievements li{color:$ios-text-primary;font-size:$ios-font-size-sm;margin-bottom:$ios-spacing-xs;position:relative}
|
|
|
|
+.change-status{font-size:$ios-font-size-sm;color:$ios-text-secondary;background-color:$ios-background;padding:$ios-spacing-sm;border-radius:$ios-radius-md}
|
|
|
|
+
|
|
|
|
+/* 分阶段结算记录卡片 */
|
|
|
|
+.settlement-table{overflow-x:auto;border-radius:$ios-radius-md;background-color:$ios-background;border:1px solid $ios-border}
|
|
|
|
+.settlement-table table{width:100%;border-collapse:collapse}
|
|
|
|
+.settlement-table th,.settlement-table td{padding:$ios-spacing-md;text-align:left;border-bottom:1px solid $ios-border;font-size:$ios-font-size-sm}
|
|
|
|
+.settlement-table th{background-color:$ios-background-secondary;font-weight:$ios-font-weight-semibold;color:$ios-text-primary;position:sticky;top:0;z-index:10}
|
|
|
|
+.settlement-table td{color:$ios-text-primary;font-weight:$ios-font-weight-regular}
|
|
|
|
+.settlement-table tr:last-child td{border-bottom:none}
|
|
|
|
+.settlement-table tr:hover td{background-color:#f5f5f5}
|
|
|
|
+.status-badge{padding:$ios-spacing-xs $ios-spacing-sm;border-radius:$ios-radius-full;font-size:$ios-font-size-xs;font-weight:$ios-font-weight-medium}
|
|
|
|
+.status-pending{background-color:#fff3cd;color:$ios-warning}
|
|
|
|
+.status-settled{background-color:#e6f7e6;color:$ios-success}
|
|
|
|
+
|
|
|
|
+/* 响应式设计 */
|
|
|
|
+@media (max-width: 768px){
|
|
|
|
+.project-detail-container{padding:$ios-spacing-md}
|
|
|
|
+.main-content-grid{grid-template-columns:1fr;gap:$ios-spacing-lg}
|
|
|
|
+.project-header{flex-direction:column;align-items:flex-start;gap:$ios-spacing-md}
|
|
|
|
+.header-actions{width:100%;justify-content:flex-end}
|
|
|
|
+.project-info-card .info-grid{grid-template-columns:1fr;gap:$ios-spacing-md}
|
|
|
|
+.stage-progress{flex-direction:column;gap:$ios-spacing-lg}
|
|
|
|
+.stage-progress::before{display:none}
|
|
|
|
+.stage{flex-direction:row;gap:$ios-spacing-md;width:100%;justify-content:flex-start}
|
|
|
|
+.stage-icon{margin-bottom:0;width:36px;height:36px;font-size:$ios-font-size-sm}
|
|
|
|
+.progress-details{grid-template-columns:1fr;gap:$ios-spacing-md}
|
|
|
|
+.feedback-actions,.change-actions{flex-direction:column}
|
|
|
|
+.feedback-actions button,.change-actions button{width:100%}
|
|
|
|
+.tags-grid{grid-template-columns:1fr}
|
|
|
|
+.settlement-table th,.settlement-table td{padding:$ios-spacing-sm;font-size:$ios-font-size-xs}
|
|
|
|
+.stage-tag{font-size:$ios-font-size-xs}
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* 滚动条样式 */
|
|
|
|
+::-webkit-scrollbar{width:8px;height:8px}
|
|
|
|
+::-webkit-scrollbar-track{background:$ios-scrollbar-track;border-radius:$ios-radius-full}
|
|
|
|
+::-webkit-scrollbar-thumb{background:$ios-scrollbar-thumb;border-radius:$ios-radius-full}
|
|
|
|
+::-webkit-scrollbar-thumb:hover{background:$ios-scrollbar-thumb-hover}
|