您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

restaurantMenuItemOptions.vue 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <template>
  2. <div class="container">
  3. <div class="row">
  4. <div class="col-md-12" style="margin-bottom: 1em">
  5. <h1>Menu Option</h1>
  6. </div>
  7. </div>
  8. <div class="row" style="text-align:left">
  9. <div class="col-md-6" style="margin-bottom: 1em">
  10. <label>Description</label>
  11. <div class="input-group-prepend">
  12. <span class="input-group-text">
  13. <eva-icon name="credit-card-outline" fill="#6c757d"></eva-icon>
  14. </span>
  15. <input class="form-control" type="text" v-model="menuOption.description" />
  16. </div>
  17. </div>
  18. </div>
  19. <div class="row" style="text-align:left">
  20. <div class="col-md-6" style="margin-bottom: 1em">
  21. <label>Option Type</label>
  22. <div class="input-group-prepend">
  23. <span class="input-group-text">
  24. <eva-icon name="credit-card-outline" fill="#6c757d"></eva-icon>
  25. </span>
  26. <select class="form-control" v-model="menuOption.optionType">
  27. <option v-for="item in optionTypes" :value="item.id" :key="item.id">
  28. {{
  29. item.description
  30. }}
  31. </option>
  32. </select>
  33. </div>
  34. </div>
  35. <div class="col-md-6" style="margin-bottom: 1em" v-if="menuOption.optionType === 3">
  36. <label>Option Limit</label>
  37. <div class="input-group-prepend">
  38. <span class="input-group-text">
  39. <eva-icon name="credit-card-outline" fill="#6c757d"></eva-icon>
  40. </span>
  41. <input class="form-control" type="number" v-model="menuOption.optionLimit" />
  42. </div>
  43. </div>
  44. </div>
  45. <div class="row" style="text-align:left">
  46. <div class="col-md-6" style="margin-bottom: 1em">
  47. <label>Is Base Price?</label>
  48. <div class="input-group-prepend">
  49. <input
  50. style="margin-left: 1px"
  51. type="checkbox"
  52. class="custom-control-input"
  53. id="thCloseSwitch"
  54. :checked="menuOption.isBasePrice"
  55. @change="selectionChanged"
  56. />
  57. <label class="custom-control-label" for="thCloseSwitch" style="margin-left: 40px">
  58. {{
  59. menuOption.isBasePrice ? "Yes" : "No"
  60. }}
  61. </label>
  62. </div>
  63. </div>
  64. </div>
  65. <div class="row" style="text-align:left">
  66. <div class="col-md-6" style="margin-bottom: 1em">
  67. <label>Rank</label>
  68. <div class="input-group-prepend">
  69. <span class="input-group-text">
  70. <eva-icon name="credit-card-outline" fill="#6c757d"></eva-icon>
  71. </span>
  72. <input class="form-control" type="number" v-model="menuOption.rank" />
  73. </div>
  74. </div>
  75. </div>
  76. <div class="row" style="text-align:left">
  77. <div class="col-md-12" style="margin-bottom: 1em">
  78. <label>Options</label>
  79. <ListView
  80. :items="menuOption.options"
  81. :showColumnChooser="false"
  82. :editable="true"
  83. :deleteable="true"
  84. :displayColumns="columns"
  85. @onEdit="Edit"
  86. @onDelete="Delete"
  87. @onNew="New"
  88. />
  89. <modal name="OptionItem" :width="600" :height="400">
  90. <OptionItem @MenuItemUpdated="MenuItemUpdated" :editMenuOptionItem="selectedItem" />
  91. </modal>
  92. </div>
  93. </div>
  94. <div class="row"></div>
  95. <div class="row">
  96. <div class="col-md-12" style="margin-bottomL 1em">
  97. <div class="row offset-md-5">
  98. <div class="col-md-2">
  99. <b-button class="mt-2" @click="Save()">Save</b-button>
  100. </div>
  101. <div class="col-md-2">
  102. <b-button class="mt-2" @click="Close()">Close</b-button>
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. <div v-if="wait" id="preloader"></div>
  108. </div>
  109. </template>
  110. <script>
  111. import ListView from "../shared/listView";
  112. import { mapState, mapActions } from "vuex";
  113. import OptionItem from "./restaurantMenuOptionItem";
  114. import Log from "../../assets/Log";
  115. export default {
  116. name: "MenuOption",
  117. components: {
  118. ListView,
  119. OptionItem,
  120. },
  121. props: {
  122. menuOption: { default: {} },
  123. },
  124. data() {
  125. return {
  126. selectedOption: "Single",
  127. selectedItem: {},
  128. isEdit: false,
  129. columns: ["description", "price", "rank"],
  130. wait: false,
  131. restaurantId: Log.restaurantId(),
  132. menuItemId: 0,
  133. };
  134. },
  135. methods: {
  136. ...mapActions("menuOptions", ["getOptionTypes"]),
  137. selectionChanged() {
  138. this.menuOption.isBasePrice = !this.menuOption.isBasePrice;
  139. },
  140. Close() {
  141. this.$emit("Close", true);
  142. },
  143. Save() {
  144. //this.wait = true;
  145. alert(JSON.stringify(this.menuOption));
  146. // if (this.menuOption.categoryDescription !== "All") {
  147. // var category = this.categories.find(
  148. // c => c.description === this.menuOption.categoryDescription
  149. // );
  150. // this.menuOption.categoryId = category.id;
  151. // } else {
  152. // this.menuOption.categoryId = 0;
  153. // }
  154. // if (this.menuOption.id === 0) {
  155. // this.addMenuOption(this.menuOption).then(result => {
  156. // this.$router.push("/MenuOptions");
  157. // });
  158. // } else {
  159. // this.updateMenuOption(this.menuOption);
  160. // this.$router.push("/MenuOptions");
  161. // }
  162. },
  163. New() {
  164. this.selectedItem = null;
  165. this.$modal.show("OptionItem");
  166. },
  167. Edit(item) {
  168. this.isEdit = true;
  169. this.selectedItem = item;
  170. this.$modal.show("OptionItem");
  171. },
  172. Delete(item) {
  173. this.deleteMenuOptionItem(item);
  174. },
  175. MenuItemUpdated(item) {
  176. //alert(JSON.stringify(item));
  177. item.menuOptionId = this.menuOption.id;
  178. if (this.isEdit) {
  179. this.menuOption.options.push(item);
  180. }
  181. this.$modal.hide("OptionItem");
  182. this.isEdit = false;
  183. },
  184. },
  185. computed: {
  186. ...mapState("menuOptions", ["optionTypes"]),
  187. },
  188. mounted() {
  189. this.wait = false;
  190. this.getOptionTypes();
  191. },
  192. watch: {
  193. menuOption: {
  194. immediate: true,
  195. handler(val, oldVal) {
  196. if (val) {
  197. this.menuOption = val;
  198. }
  199. },
  200. },
  201. },
  202. };
  203. </script>