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