OptionPanel.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <template>
  2. <option-panel-tabs v-model:options="localOptions">
  3. <template #main-tab>
  4. <div class="option-panel-container q-py-md">
  5. <div class="row q-gutter-sm">
  6. <div class="input-container col-md-3">
  7. <div class="outsideLabel">label</div>
  8. <q-input v-model="localOptions.label"
  9. label="label" />
  10. </div>
  11. <div class="input-container col-md-2">
  12. <div class="outsideLabel">icon name</div>
  13. <q-input v-model="localOptions.icon"
  14. label="icon name" />
  15. </div>
  16. <div v-if="!localOptions.flat"
  17. class="col-md-5 row">
  18. <div class="input-container col-md-6">
  19. <div class="outsideLabel">background color</div>
  20. <q-input v-model="localOptions.style.background"
  21. icon="colorize"
  22. label="background color">
  23. <template v-slot:append>
  24. <q-icon name="colorize"
  25. class="cursor-pointer">
  26. <q-popup-proxy cover
  27. transition-show="scale"
  28. transition-hide="scale">
  29. <q-color v-model="localOptions.style.background"
  30. label="backgroundColor"
  31. format-model="rgba" />
  32. </q-popup-proxy>
  33. </q-icon>
  34. </template>
  35. </q-input>
  36. </div>
  37. <div class="input-container col-md-5 q-mx-sm">
  38. <div class="outsideLabel">color</div>
  39. <q-input v-model="localOptions.style.color"
  40. label="color">
  41. <template v-slot:append>
  42. <q-icon name="colorize"
  43. class="cursor-pointer">
  44. <q-popup-proxy cover
  45. transition-show="scale"
  46. transition-hide="scale">
  47. <q-color v-model="localOptions.style.color"
  48. label="backgroundColor"
  49. format-model="rgba" />
  50. </q-popup-proxy>
  51. </q-icon>
  52. </template>
  53. </q-input>
  54. </div>
  55. </div>
  56. <div v-else
  57. class="col-md-4">
  58. <div class="input-container col-md-12">
  59. <div class="outsideLabel">color</div>
  60. <q-input v-model="localOptions.style.color"
  61. label="color">
  62. <template v-slot:append>
  63. <q-icon name="colorize"
  64. class="cursor-pointer">
  65. <q-popup-proxy cover
  66. transition-show="scale"
  67. transition-hide="scale">
  68. <q-color v-model="localOptions.style.color"
  69. label="backgroundColor"
  70. format-model="rgba" />
  71. </q-popup-proxy>
  72. </q-icon>
  73. </template>
  74. </q-input>
  75. </div>
  76. </div>
  77. <div class="input-container col-md-1">
  78. <div class="outsideLabel">flat</div>
  79. <q-checkbox v-model="localOptions.flat"
  80. left-label />
  81. </div>
  82. <div class="input-container col-md-2">
  83. <div class="outsideLabel">fix</div>
  84. <q-checkbox v-model="localOptions.fixed"
  85. left-label />
  86. </div>
  87. <div class="input-container col-md-4">
  88. <div class="outsideLabel">flat</div>
  89. <q-select v-model="localOptions.fixedPosition"
  90. :options="positionOptions"
  91. left-label />
  92. </div>
  93. </div>
  94. <div class="input-container q-my-md">
  95. <div class="outsideLabel">image source</div>
  96. <q-input v-model="localOptions.imageSource"
  97. label="image source" />
  98. </div>
  99. <div class="row q-col-gutter-sm">
  100. <div class="input-container col-md-2">
  101. <div class="outsideLabel">action</div>
  102. <q-select v-model="localOptions.action"
  103. :options="actionOptions" />
  104. </div>
  105. <div v-if="localOptions.action === 'scroll'"
  106. class="input-container col-md-10">
  107. <div class="outsideLabel">scrollTo</div>
  108. <q-input v-model="localOptions.scrollTo"
  109. label="scrollTo" />
  110. </div>
  111. <div v-if="localOptions.action === 'link'"
  112. class="input-container col-md-10">
  113. <div class="outsideLabel">route</div>
  114. <q-input v-model="localOptions.route"
  115. label="route" />
  116. </div>
  117. <div v-if="localOptions.action === 'external-link'"
  118. class="input-container col-md-10">
  119. <div class="outsideLabel">route</div>
  120. <q-input v-model="localOptions.route"
  121. label="route" />
  122. </div>
  123. <div v-if="localOptions.action === 'event'"
  124. class="input-container col-md-5">
  125. <div class="outsideLabel">eventName</div>
  126. <q-input v-model="localOptions.eventName"
  127. label="eventName" />
  128. </div>
  129. <div v-if="localOptions.action === 'event'"
  130. class="input-container col-md-5">
  131. <div class="outsideLabel">eventArgs</div>
  132. <q-input v-model="localOptions.eventArgs"
  133. label="eventArgs" />
  134. </div>
  135. </div>
  136. </div>
  137. </template>
  138. </option-panel-tabs>
  139. </template>
  140. <script>
  141. import { defineComponent } from 'vue'
  142. import { mixinOptionPanel } from 'quasar-ui-q-page-builder'
  143. import OptionPanelTabs from 'quasar-ui-q-page-builder/src/components/OptionPanelComponents/OptionPanelTabs.vue'
  144. export default defineComponent({
  145. name: 'OptionPanel',
  146. components: { OptionPanelTabs },
  147. mixins: [mixinOptionPanel],
  148. props: {
  149. options: {
  150. type: Object,
  151. default() {
  152. return {}
  153. }
  154. }
  155. },
  156. data () {
  157. return {
  158. actionOptions: ['scroll', 'link', 'event', 'external-link'],
  159. positionOptions: ['top-right', 'top-left', 'bottom-right', 'bottom-left'],
  160. defaultOptions: {
  161. color: null,
  162. icon: null,
  163. label: null,
  164. flat: false,
  165. callBack: null,
  166. imageSource: null,
  167. className: null,
  168. fixed: false,
  169. fixedPosition: null,
  170. eventArgs: null,
  171. action: null,
  172. scrollTo: null,
  173. route: null,
  174. eventName: null
  175. }
  176. }
  177. },
  178. watch: {
  179. 'localOptions.flat': function (val) {
  180. if (val) {
  181. this.localOptions.style.background = ''
  182. }
  183. },
  184. 'localOptions.fixed': function (val) {
  185. if (!val) {
  186. this.localOptions.fixedPosition = null
  187. }
  188. }
  189. }
  190. })
  191. </script>