config.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <template>
  2. <base-page>
  3. <view class="common-wrap common-form">
  4. <view class="common-title">预约设置</view>
  5. <view class="common-form-item">
  6. <label class="form-label">预约时间</label>
  7. <view class="form-block">
  8. <checkbox-group class="form-checkbox-group" @change="checkboxChange">
  9. <label class="form-checkbox-item">
  10. <checkbox value="1" :checked="week.includes('1') || week.includes(1)" />
  11. 周一
  12. </label>
  13. <label class="form-checkbox-item">
  14. <checkbox value="2" :checked="week.includes('2') || week.includes(2)" />
  15. 周二
  16. </label>
  17. <label class="form-checkbox-item">
  18. <checkbox value="3" :checked="week.includes('3') || week.includes(3)" />
  19. 周三
  20. </label>
  21. <label class="form-checkbox-item">
  22. <checkbox value="4" :checked="week.includes('4') || week.includes(4)" />
  23. 周四
  24. </label>
  25. <label class="form-checkbox-item">
  26. <checkbox value="5" :checked="week.includes('5') || week.includes(5)" />
  27. 周五
  28. </label>
  29. <label class="form-checkbox-item">
  30. <checkbox value="6" :checked="week.includes('6') || week.includes(6)" />
  31. 周六
  32. </label>
  33. <label class="form-checkbox-item">
  34. <checkbox value="0" :checked="week.includes('0') || week.includes(0)" />
  35. 周日
  36. </label>
  37. </checkbox-group>
  38. </view>
  39. </view>
  40. <view class="common-form-item">
  41. <label class="form-label"></label>
  42. <view class="form-inline">
  43. <view class="form-input-inline">
  44. <picker mode="time" class="form-input" :value="time.start" @change="bindStartTimeChange">
  45. <view class="uni-input">{{ time.start }}</view>
  46. </picker>
  47. </view>
  48. <text class="form-mid">-</text>
  49. <view class="form-input-inline">
  50. <picker mode="time" class="form-input" :value="time.end" @change="bindEndTimeChange">
  51. <view class="uni-input">{{ time.end }}</view>
  52. </picker>
  53. </view>
  54. </view>
  55. </view>
  56. <view class="common-form-item">
  57. <label class="form-label">预约时间间隔</label>
  58. <view class="form-inline">
  59. <radio-group @change="radioChange" class="form-radio-group">
  60. <label class="radio form-radio-item">
  61. <radio value="30" :checked="interval == 30" />
  62. 30分钟
  63. </label>
  64. <label class="radio form-radio-item">
  65. <radio value="60" :checked="interval == 60" />
  66. 1个小时
  67. </label>
  68. <label class="radio form-radio-item">
  69. <radio value="90" :checked="interval == 90" />
  70. 90分钟
  71. </label>
  72. <label class="radio form-radio-item">
  73. <radio value="120" :checked="interval == 120" />
  74. 2小时
  75. </label>
  76. </radio-group>
  77. </view>
  78. </view>
  79. <view class="common-form-item">
  80. <label class="form-label">预约提前</label>
  81. <view class="form-input-inline"><input type="number" v-model="advance" class="form-input" /></view>
  82. <text class="form-word-aux">小时</text>
  83. </view>
  84. <view class="common-form-item">
  85. <label class="form-label">每时段可预约</label>
  86. <view class="form-input-inline"><input type="number" v-model="max" class="form-input" /></view>
  87. <text class="form-word-aux">人</text>
  88. </view>
  89. <view class="common-btn-wrap"><button type="default" class="screen-btn" @click="saveFn">保存</button></view>
  90. <nc-loading :layer-background="{ background: 'rgba(255,255,255,.8)' }" ref="loading"></nc-loading>
  91. </view>
  92. </base-page>
  93. </template>
  94. <script>
  95. export default {
  96. data() {
  97. return {
  98. time: {
  99. start: '08:30',
  100. end: '23:30'
  101. },
  102. interval: 30,
  103. advance: '',
  104. max: '',
  105. week: [],
  106. flag: false
  107. };
  108. },
  109. onLoad() {},
  110. onShow() {
  111. this.getData();
  112. uni.setLocale('zh-Hans');
  113. },
  114. methods: {
  115. getData() {
  116. this.$api.sendRequest({
  117. url: '/store/storeapi/reserve/getconfig',
  118. success: res => {
  119. if (res.code >= 0) {
  120. ({ start: this.time.start, end: this.time.end, interval: this.interval, advance: this.advance, max: this.max, week: this.week } = res.data);
  121. this.time.start = this.timeFormat(this.time.start);
  122. this.time.end = this.timeFormat(this.time.end);
  123. this.$refs.loading.hide();
  124. } else {
  125. this.$util.showToast({
  126. title: res.message
  127. });
  128. }
  129. }
  130. });
  131. },
  132. bindStartTimeChange(e) {
  133. this.time.start = e.detail.value;
  134. },
  135. bindEndTimeChange(e) {
  136. this.time.end = e.detail.value;
  137. },
  138. radioChange(e) {
  139. this.interval = e.detail.value;
  140. },
  141. checkboxChange(e) {
  142. this.week = e.detail.value;
  143. },
  144. getSaveData() {
  145. let data = {};
  146. data.start = this.timeTurnTimeStamp(this.time.start);
  147. data.end = this.timeTurnTimeStamp(this.time.end);
  148. data.interval = this.interval;
  149. data.advance = this.advance;
  150. data.max = this.max;
  151. data.week = this.week.toString();
  152. return data;
  153. },
  154. saveFn() {
  155. if (this.flag) return false;
  156. this.flag = true;
  157. this.$api.sendRequest({
  158. url: '/store/storeapi/reserve/setConfig',
  159. data: this.getSaveData(),
  160. success: res => {
  161. this.flag = false;
  162. this.$util.showToast({
  163. title: res.message
  164. });
  165. if (res.code >= 0) {
  166. this.$refs.loading.show();
  167. this.getData();
  168. }
  169. }
  170. });
  171. },
  172. timeTurnTimeStamp(time) {
  173. let data = time.split(':');
  174. return data[0] * 3600 + data[1] * 60;
  175. },
  176. timeFormat(time) {
  177. let h = time / 3600;
  178. let i = (time % 3600) / 60;
  179. h = h < 10 ? '0' + h : h;
  180. i = i < 10 ? '0' + i : i;
  181. return h + ':' + i;
  182. }
  183. }
  184. };
  185. </script>
  186. <style lang="scss">
  187. .common-wrap {
  188. position: relative;
  189. padding: 30rpx;
  190. height: calc(100vh - 51px);
  191. .form-label {
  192. width: 1.5rem !important;
  193. }
  194. .common-btn-wrap {
  195. position: absolute;
  196. left: 0;
  197. right: 0;
  198. bottom: 0;
  199. padding-bottom: 0.2rem;
  200. margin-left: 0;
  201. text-align: center;
  202. button {
  203. width: 95%;
  204. height: 0.4rem;
  205. line-height: 0.4rem;
  206. }
  207. }
  208. }
  209. .common-title {
  210. font-size: 0.18rem;
  211. margin-bottom: 0.2rem;
  212. }
  213. </style>