reserveSimple.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. define({
  2. template: `
  3. <div id="store_projects">
  4. <el-form label-width="15%" >
  5. <div id="vue_head">
  6. <div class="vue-main-title">
  7. <div class="vue-main-title-left"></div>
  8. <div class="vue-main-title-content">分时预约规格</div>
  9. </div>
  10. </div>
  11. <div>
  12. 更换服务后,排序/预约对象/规格会清空,需要重新选择,请先确认好选择的服务,避免重复操作。<br>
  13. 商品启用规格,以下的规格项必选。
  14. </div>
  15. <div class="vue-main-form">
  16. <div style="margin:0 auto;width:100%;">
  17. <el-form label-width="150">
  18. <el-form-item :label="'选择'+lang_set.service" prop="goods_service_id">
  19. <el-select v-model="goods_service_id" filterable placeholder="请选择" @change="cahangeService">
  20. <el-option
  21. v-for="item in services"
  22. :key="item.id"
  23. :label="item.title"
  24. :value="item.id"
  25. >
  26. </el-option>
  27. </el-select>
  28. </el-form-item>
  29. </el-form>
  30. <el-table :data="bookingItems" style="width: 100%">
  31. <el-table-column label="排序" align="center" prop="display_order" width="100">
  32. <template slot-scope="scope">
  33. <div>
  34. <el-input v-model="scope.row.display_order"></el-input>
  35. </div>
  36. </template>
  37. </el-table-column>
  38. <el-table-column label="预约对象" align="center" prop="obj_id">
  39. <template slot-scope="scope">
  40. <div>
  41. <el-select v-model="scope.row.obj_id" filterable placeholder="请选择">
  42. <el-option
  43. v-for="item in obj_list"
  44. :key="item.id"
  45. :label="item.name"
  46. :value="item.id"
  47. >
  48. </el-option>
  49. </el-select>
  50. </div>
  51. </template>
  52. </el-table-column>
  53. <el-table-column label="规格" align="center" prop="goods_option_id">
  54. <template slot-scope="scope">
  55. <div>
  56. <el-select v-model="scope.row.goods_option_id" filterable clearable placeholder="请选择">
  57. <el-option
  58. v-for="item in goods_options"
  59. :key="item.id"
  60. :label="item.title"
  61. :value="item.id"
  62. >
  63. </el-option>
  64. </el-select>
  65. </div>
  66. </template>
  67. </el-table-column>
  68. <el-table-column label="操作" align="center">
  69. <template slot-scope="scope">
  70. <div>
  71. <el-button icon="el-icon-delete" @click="delItem(scope.$index)"></el-button>
  72. </div>
  73. </template>
  74. </el-table-column>
  75. </el-table>
  76. <div style="margin-top: 20px">
  77. <el-button icon="el-icon-plus" @click="addItems">添加</el-button>
  78. </div>
  79. </div>
  80. </div>
  81. </el-form>
  82. </div>
  83. `,
  84. style: `
  85. .item-card{
  86. border: 1px solid #b4bccc;
  87. padding-top: 20px;
  88. margin-bottom: 20px;
  89. }
  90. #store_projects .el-icon-close{
  91. margin-left: 20px;
  92. font-weight: bold;
  93. font-size: 20px;
  94. color:#EE3939;
  95. }
  96. `,
  97. props: {
  98. form: {
  99. default() {
  100. return {};
  101. },
  102. },
  103. },
  104. data() {
  105. return {
  106. lang_set:{},
  107. services: [],
  108. bookingItems:[{
  109. id:"",
  110. display_order:"",
  111. obj_id:"",
  112. service_id:"",
  113. goods_option_id:"",
  114. // merchant_staff_commission:""
  115. }],
  116. get_objs_url:'',
  117. goods_options:[],
  118. goods_service_id:'',
  119. obj_list:[],
  120. };
  121. },
  122. created() {
  123. this.lang_set = this.form.lang_set;
  124. if(this.form.item && this.form.item.length>0) {
  125. this.bookingItems = this.form.item;
  126. if(this.bookingItems.length>0 && this.bookingItems[0]['service_id']){
  127. this.goods_service_id = this.bookingItems[0]['service_id'];
  128. this.getObjs();
  129. }
  130. }
  131. if(this.form.services && this.form.services.length>0) {
  132. this.services = this.form.services;
  133. }
  134. if(this.form.goods_options && this.form.goods_options.length>0){
  135. this.goods_options = this.form.goods_options;
  136. }
  137. },
  138. methods: {
  139. initItems(){
  140. this.bookingItems = [{
  141. id:"",
  142. display_order:"",
  143. obj_id:"",
  144. goods_option_id:"",
  145. service_id:""
  146. // merchant_staff_commission:""
  147. }]
  148. },
  149. addItems(){
  150. this.bookingItems.push({
  151. id:"",
  152. display_order:"",
  153. obj_id:"",
  154. goods_option_id:"",
  155. service_id:""
  156. // merchant_staff_commission:""
  157. })
  158. },
  159. delItem(index){
  160. this.bookingItems.splice(index,1)
  161. },
  162. validate() {
  163. let error_status = false;
  164. /*if(this.bookingItems.length<1){
  165. this.$message({message: '请选择', type: 'warning'});
  166. error_status = true;
  167. return false;
  168. }*/
  169. for (let i=0;i<this.bookingItems.length;i++){
  170. this.bookingItems[i]['service_id'] = this.goods_service_id;
  171. }
  172. this.bookingItems.forEach(item => {
  173. if (!item.service_id ) {
  174. this.$message({message: '请选择'+ this.lang_set.service, type: 'warning'});
  175. error_status = true;
  176. return false;
  177. }
  178. if (!item.obj_id) {
  179. this.$message({message: '请选择'+ this.lang_set.reserve_obj, type: 'warning'});
  180. error_status = true;
  181. return false;
  182. }
  183. if(this.form.goods_has_option){
  184. if (!item.goods_option_id) {
  185. this.$message({message: '启用商品规格的商品必须选择规格', type: 'warning'});
  186. error_status = true;
  187. return false;
  188. }
  189. }
  190. });
  191. if (error_status) {
  192. return false;
  193. }
  194. return this.bookingItems;
  195. },
  196. cahangeService(){
  197. this.getObjs();
  198. this.initItems();
  199. },
  200. getObjs() {
  201. this.$http.post(this.form.get_objs_url,{service_id:this.goods_service_id}).then(function (response) {
  202. if (response.data.result) {
  203. this.obj_list = response.data.data;
  204. }
  205. else{
  206. this.$message({type: 'error',message: response.data.msg});
  207. }
  208. },function (response) {
  209. this.$message({type: 'error',message: response.data.msg});
  210. }
  211. );
  212. },
  213. },
  214. });