form-day.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <template>
  2. <view class="page-container">
  3. <u-navbar title="新建团餐" :autoBack="true" :placeholder="true"></u-navbar>
  4. <view class="content">
  5. <view class="title">
  6. 售卖时间
  7. </view>
  8. <view class="tips">
  9. 商品售卖周天(可多选)
  10. <span>*</span>
  11. </view>
  12. <view class="day-list">
  13. <view class="day-item" v-for="item in dayList" :key="item.code" @click="selectDay(item)"
  14. :class="{ 'selected': isDaySelected(item) }">
  15. {{item.name}}
  16. </view>
  17. </view>
  18. <view class="footer-bar">
  19. <u-button :custom-style="{
  20. width: '324rpx',
  21. fontWeight: '400',
  22. fontSize: '28rpx',
  23. color: '#449AFF',
  24. border: '1rpx solid #449AFF',
  25. background: '#fff',
  26. marginRight: '24rpx'
  27. }" @click="goBack">上一步</u-button>
  28. <u-button :custom-style="{
  29. width: '324rpx',
  30. fontWeight: '400',
  31. fontSize: '28rpx',
  32. color: '#449AFF',
  33. border: '1rpx solid #449AFF',
  34. background: '#fff',
  35. marginRight: '24rpx'
  36. }" @click="goNextStep">下一步</u-button>
  37. </view>
  38. </view>
  39. </view>
  40. </template>
  41. <script>
  42. export default {
  43. data() {
  44. return {
  45. form: {
  46. dayCodes: []
  47. },
  48. dayList: [],
  49. selectedDayCodes: []
  50. }
  51. },
  52. methods: {
  53. goBack() {
  54. uni.navigateBack({
  55. delta: 1
  56. });
  57. },
  58. async getDayList() {
  59. const res = await this.$http.get('/groupmeal/gmMerchantPackage/getSaleDay')
  60. if (res.data.code === 200 && res.data.result) {
  61. this.dayList = res.data.result
  62. }
  63. },
  64. normalizeDayCodes(codes) {
  65. const dayCodes = Array.isArray(codes) ? codes : String(codes || '').split(',');
  66. return dayCodes.map(code => String(code).trim()).filter(Boolean);
  67. },
  68. isDaySelected(item) {
  69. return this.selectedDayCodes.includes(String(item.code));
  70. },
  71. selectDay(item) {
  72. const code = String(item.code);
  73. const index = this.selectedDayCodes.indexOf(code);
  74. if (index > -1) {
  75. this.selectedDayCodes.splice(index, 1);
  76. } else {
  77. this.selectedDayCodes.push(code);
  78. }
  79. this.form.dayCodes = [...this.selectedDayCodes];
  80. },
  81. goNextStep() {
  82. const dayCodes = this.normalizeDayCodes(this.selectedDayCodes);
  83. if (!dayCodes.length) {
  84. this.$u.toast('请选择日期');
  85. return;
  86. }
  87. this.selectedDayCodes = dayCodes;
  88. this.form.dayCodes = [...dayCodes];
  89. const goods = uni.getStorageSync('gm_goods') || {};
  90. goods.saleDays = dayCodes.join(',');
  91. uni.setStorageSync('gm_goods', goods);
  92. uni.navigateTo({
  93. url: '/pages/groupMeal/goods/form-step2'
  94. });
  95. }
  96. },
  97. async onShow() {
  98. await this.getDayList()
  99. const goods = uni.getStorageSync('gm_goods') || {}
  100. if (goods.saleDays) {
  101. this.selectedDayCodes = this.normalizeDayCodes(goods.saleDays)
  102. this.form.dayCodes = [...this.selectedDayCodes]
  103. } else if (goods.dayCodes?.length) {
  104. this.selectedDayCodes = this.normalizeDayCodes(goods.dayCodes)
  105. this.form.dayCodes = [...this.selectedDayCodes]
  106. }
  107. },
  108. }
  109. </script>
  110. <style lang="scss" scoped>
  111. .page-container {
  112. min-height: 100vh;
  113. background-color: #f5f5f5;
  114. .content {
  115. margin: 24rpx;
  116. padding: 16rpx;
  117. .title{
  118. font-weight: 600;
  119. font-size: 30rpx;
  120. color: #333333;
  121. margin-bottom: 18rpx;
  122. height: 44rpx;
  123. line-height: 44rpx;
  124. }
  125. .tips{
  126. height: 40rpx;
  127. line-height: 40rpx;
  128. font-weight: 400;
  129. font-size: 28rpx;
  130. color: #333333;
  131. span{
  132. color: red;
  133. }
  134. }
  135. }
  136. }
  137. .day-list {
  138. display: flex;
  139. flex-wrap: wrap;
  140. padding: 16rpx;
  141. .day-item {
  142. margin: 0 38rpx 16rpx 0;
  143. width: 132rpx;
  144. height: 58rpx;
  145. font-size: 26rpx;
  146. display: flex;
  147. align-items: center;
  148. justify-content: center;
  149. box-sizing: border-box;
  150. &:nth-child(4n) {
  151. margin-right: 0;
  152. }
  153. &.selected {
  154. color: #2983EC;
  155. font-weight: bold;
  156. border: 1rpx solid #2983EC;
  157. background: rgba(68,154,255,0.1);
  158. border-radius: 8rpx;
  159. }
  160. }
  161. }
  162. .footer-bar {
  163. ::v-deep .u-btn {
  164. width: 324rpx;
  165. height: 76rpx;
  166. border-radius: 54rpx;
  167. &::after {
  168. display: none;
  169. }
  170. }
  171. }
  172. </style>