add-project.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <template>
  2. <view class="page-container">
  3. <scroll-view scroll-y class="form-content">
  4. <view class="form-card">
  5. <!-- Project Name -->
  6. <view class="form-item">
  7. <view class="label-row">
  8. <text class="label">项目名称</text>
  9. <text class="tag-missing" v-if="!form.name">待完善</text>
  10. </view>
  11. <view class="input-box">
  12. <input type="text" v-model="form.name" placeholder="请输入" placeholder-class="ph-style" />
  13. </view>
  14. </view>
  15. <!-- Role -->
  16. <view class="form-item">
  17. <view class="label-row">
  18. <text class="label">担任角色</text>
  19. <text class="tag-missing" v-if="!form.role">待完善</text>
  20. </view>
  21. <view class="input-box">
  22. <input type="text" v-model="form.role" placeholder="请输入" placeholder-class="ph-style" />
  23. </view>
  24. </view>
  25. <!-- Time -->
  26. <view class="form-item">
  27. <view class="label-row">
  28. <text class="label">项目时间</text>
  29. <text class="tag-missing" v-if="!form.startTime">待完善</text>
  30. </view>
  31. <view class="input-box">
  32. <view class="date-picker-wrap" style="justify-content: space-between; padding: 0 10rpx;">
  33. <view @tap="openDatePicker('start')">
  34. <text :class="['date-text', !form.startTime ? 'is-empty' : '']">{{ form.startTime || '开始时间' }}</text>
  35. </view>
  36. <text class="date-separator">—</text>
  37. <view @tap="openDatePicker('end')">
  38. <text :class="['date-text', !form.endTime ? 'is-empty' : '']">{{ form.endTime || '至今' }}</text>
  39. </view>
  40. </view>
  41. </view>
  42. </view>
  43. <!-- Project Desc -->
  44. <view class="form-item">
  45. <view class="label-row">
  46. <text class="label">项目描述</text>
  47. <text class="tag-missing" v-if="!form.desc">待完善</text>
  48. </view>
  49. <view class="textarea-box">
  50. <textarea v-model="form.desc" placeholder="请输入项目具体内容和职责" placeholder-class="ph-style" :maxlength="500"></textarea>
  51. </view>
  52. </view>
  53. <!-- Project Performance -->
  54. <view class="form-item">
  55. <view class="label-row">
  56. <view>
  57. <text class="label">项目业绩</text>
  58. <text class="optional">(选填)</text>
  59. </view>
  60. </view>
  61. <view class="textarea-box">
  62. <textarea v-model="form.performance" placeholder="请输入您的项目产出或收益" placeholder-class="ph-style" :maxlength="500"></textarea>
  63. </view>
  64. </view>
  65. <!-- Project Link -->
  66. <view class="form-item">
  67. <view class="label-row">
  68. <view>
  69. <text class="label">项目链接</text>
  70. <text class="optional">(选填)</text>
  71. </view>
  72. </view>
  73. <view class="input-box">
  74. <input type="text" v-model="form.link" placeholder="请输入" placeholder-class="ph-style" />
  75. </view>
  76. </view>
  77. </view>
  78. </scroll-view>
  79. <view class="footer-btn-area">
  80. <button class="btn-save" :class="{'is-disabled': !isComplete}" @tap="saveForm">
  81. <text v-if="isEdit">修改</text>
  82. <text v-else>保存</text>
  83. </button>
  84. </view>
  85. <!-- Custom Date Picker Popup (Two-columns with Title Active State) -->
  86. <view class="picker-popup" v-if="showDatePicker" @touchmove.stop.prevent>
  87. <view class="picker-mask" @tap.stop="closeDatePicker"></view>
  88. <view class="picker-content">
  89. <!-- Range Tab Header -->
  90. <view class="range-tabs-header">
  91. <view :class="['tab-item', datePickerType === 'start' ? 'active' : '']" @tap="switchDateTab('start')">
  92. <text class="tab-label">开始时间</text>
  93. <text class="tab-val">{{ tempStartTime || '开始时间' }}</text>
  94. </view>
  95. <view :class="['tab-item', datePickerType === 'end' ? 'active' : '']" @tap="switchDateTab('end')">
  96. <text class="tab-label">结束时间</text>
  97. <text class="tab-val">{{ tempEndTime || '至今' }}</text>
  98. </view>
  99. </view>
  100. <picker-view class="picker-view" style="height: 340rpx;" :value="datePickerValue" @change="onDatePickerChange" indicator-style="height: 50px;">
  101. <picker-view-column>
  102. <view class="picker-item" v-for="(item, index) in yearOptions" :key="index">{{item}}</view>
  103. </picker-view-column>
  104. <picker-view-column>
  105. <view class="picker-item" v-for="(item, index) in monthOptions" :key="index">{{item}}</view>
  106. </picker-view-column>
  107. </picker-view>
  108. <!-- Bottom Confirm Button -->
  109. <view class="picker-bottom-btn-area">
  110. <text class="btn-bottom" @tap.stop="confirmDatePicker">确定</text>
  111. </view>
  112. </view>
  113. </view>
  114. </view>
  115. </template>
  116. <script src="./add-project.js"></script>
  117. <style lang="scss" scoped>
  118. @import './add-project.scss';
  119. </style>