index.php 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <div id="app" v-cloak>
  2. <el-card shadow="never" style="border:0;min-width: 1200px;" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  3. <div slot="header">
  4. <div style="display:flex;justify-content:space-between;align-items:center;">
  5. <span>预约设置</span>
  6. </div>
  7. </div>
  8. <div class="table-body" v-loading="loading">
  9. <el-form size="small" ref="form" label-width="auto" :model="form" :rules="rules" >
  10. <el-form-item label="预约范围:" prop="is_enable">
  11. 客户可预约
  12. <el-select v-model="form.range_start" placeholder="请选择">
  13. <el-option
  14. v-for="item in range_start_options"
  15. :key="item.value"
  16. :label="item.label"
  17. :value="item.value">
  18. </el-option>
  19. </el-select>
  20. <el-select v-model="form.range_end" placeholder="请选择">
  21. <el-option
  22. v-for="item in range_end_options"
  23. :key="item.value"
  24. :label="item.label"
  25. :value="item.value">
  26. </el-option>
  27. </el-select>
  28. 以内的任意时间到店
  29. </el-form-item>
  30. <el-form-item label="员工选择:" prop="employee_selection" >
  31. <el-radio-group v-model="form.employee_selection" class="vertical-radio-group">
  32. <el-radio :label="1">客户添加预约时,技师可选不可选</el-radio><br>
  33. <el-radio :label="2">客户添加预约时,技师必选</el-radio><br>
  34. <el-radio :label="3">客户添加预约时,技师不可选</el-radio>
  35. </el-radio-group>
  36. <br/>
  37. <div style="color: #6b7280;line-height: 1.5;">
  38. 1.当技师不可选时,则门店的技师列表不显示.<br>
  39. 2.从商品详情入口预约,将默认展示到店分配,不可选择技师.
  40. </div>
  41. </el-form-item>
  42. <el-form-item label="完成预约:" prop="complete_reservation" >
  43. <el-radio-group v-model="form.complete_reservation">
  44. <el-radio :label="1">预约单完成后,占用时间不变。</el-radio>
  45. </el-radio-group>
  46. <br/>
  47. <div style="color: #6b7280">
  48. 例如:我下单了10:00-11:00的服务,但是我实际上10:40就完成了服务,但是10:40-11:00这个时间段依然被占用。
  49. </div>
  50. </el-form-item>
  51. <el-form-item label="预约时间间隔:" prop="appointment_interval" >
  52. <el-radio-group v-model="form.appointment_interval">
  53. <el-radio :label="1">预约的时间间隔按服务时长为间隔</el-radio>
  54. </el-radio-group>
  55. <br/>
  56. <div style="color: #6b7280">
  57. 例如:我选择了a商品,项目时长为100分钟,因此在选择时间时,时间间隔为100分钟。
  58. </div>
  59. </el-form-item>
  60. <el-form-item label="技师核销开关:" prop="technician_verification_switch">
  61. <el-switch
  62. v-model="form.technician_verification_switch"
  63. active-value="1"
  64. inactive-value="0">
  65. </el-switch>
  66. <br/>
  67. <div style="color: #6b7280">
  68. 只限制技师在该门店的排班时间,当服务类型选择了上门服务时,需要开启,否则会导致技师无法核销,从而订单无法推进。
  69. </div>
  70. </el-form-item>
  71. <el-form-item label="是否允许用户进行验收:" prop="user_acceptance">
  72. <el-switch
  73. v-model="form.user_acceptance"
  74. active-value="1"
  75. inactive-value="0">
  76. </el-switch>
  77. <br/>
  78. <div style="color: #6b7280">
  79. 当关闭后,用户无法进行验收,验收对象为门店
  80. </div>
  81. </el-form-item>
  82. <el-form-item>
  83. <el-button size="small" type="primary" @click="onSubmit" :loading="loading">保存</el-button>
  84. </el-form-item>
  85. </el-form>
  86. </div>
  87. </el-card>
  88. </div>
  89. <script>
  90. const app = new Vue({
  91. el: '#app',
  92. data: {
  93. loading: false,
  94. range_start_options:[
  95. {
  96. value: 1,
  97. label: '从现在开始'
  98. },
  99. {
  100. value: 2,
  101. label: '30分钟后'
  102. },
  103. {
  104. value: 3,
  105. label: '1小时后'
  106. },
  107. ],
  108. range_end_options:[
  109. {
  110. value: 1,
  111. label: '7天'
  112. },
  113. {
  114. value: 2,
  115. label: '14天'
  116. },
  117. {
  118. value: 3,
  119. label: '30天'
  120. },
  121. ],
  122. form: {
  123. range_start:1,
  124. range_end:1,
  125. employee_selection: 2,
  126. complete_reservation:1,
  127. appointment_interval:1,
  128. technician_verification_switch:'1',
  129. user_acceptance:'1',
  130. offline_orders_commission:'1'
  131. },
  132. rules: {
  133. },
  134. original_custom_text: '',
  135. },
  136. mounted() {
  137. this.getData()
  138. },
  139. methods: {
  140. handleClick(tab, event) {},
  141. getData() {
  142. this.loading = true
  143. request({
  144. method: 'get',
  145. params: {
  146. r: 'store/client/reserve-setting/index',
  147. },
  148. }).then(e => {
  149. this.loading = false;
  150. if (e.data.code === 0) {
  151. try {
  152. if(e.data.data.setting.range_start){
  153. Object.assign(this.form, e.data.data.setting);
  154. this.form.technician_verification_switch = this.form.technician_verification_switch.toString();
  155. this.form.user_acceptance = this.form.user_acceptance.toString();
  156. this.form.offline_orders_commission = this.form.offline_orders_commission.toString();
  157. }
  158. } catch (e) {
  159. console.error(e)
  160. }
  161. } else {
  162. this.$message.error(e.data.msg);
  163. }
  164. }).catch(e => {
  165. this.loading = false;
  166. });
  167. },
  168. onSubmit() {
  169. this.$refs['form'].validate((valid) => {
  170. if (valid) {
  171. this.loading = true
  172. request({
  173. method: 'post',
  174. params: {
  175. r: 'store/client/reserve-setting/index',
  176. },
  177. data: {
  178. setting: this.form
  179. }
  180. }).then(e => {
  181. this.loading = false;
  182. if (e.data.code === 0) {
  183. this.$message.success(e.data.msg);
  184. } else {
  185. this.$message.error(e.data.msg);
  186. }
  187. }).catch(e => {
  188. this.loading = false;
  189. });
  190. } else {
  191. console.log(valid)
  192. }
  193. })
  194. },
  195. }
  196. });
  197. </script>
  198. <style>
  199. .table-body {
  200. padding: 20px;
  201. background-color: #fff;
  202. }
  203. .el-tag+.el-tag {
  204. margin-left: 10px;
  205. }
  206. .button-new-tag {
  207. margin-left: 10px;
  208. }
  209. .input-new-tag {
  210. width: 90px;
  211. margin-left: 10px;
  212. vertical-align: bottom;
  213. }
  214. .smsDialog .el-dialog__body {
  215. padding-right: 30px;
  216. }
  217. .vertical-radio-group .el-radio {
  218. display: block;
  219. margin-bottom: 10px;
  220. }
  221. </style>