ScreenVolume.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <template>
  2. <div :class="defaultClass">
  3. <slot
  4. name="trigger"
  5. :invoke="invoke"
  6. >
  7. <i
  8. class="o-icon lg u-pointer"
  9. @click="invoke"
  10. />
  11. <div class="has-padding u-color--black u-bold">{{ type }}</div>
  12. </slot>
  13. <c-dialog
  14. ref="dialog"
  15. size="medium"
  16. :title="settings"
  17. >
  18. <template #default>
  19. <tabbar
  20. :items="tabs"
  21. :active.sync="active"
  22. />
  23. <template v-if="isImmediate">
  24. <div class="l-flex__auto l-flex--col jcenter center has-bottom-padding">
  25. <div class="c-sibling-item--v c-grid-form auto">
  26. <span class="c-grid-form__label u-required">{{ tip }}</span>
  27. <div class="l-flex--row">
  28. <el-input-number
  29. v-model="taskValue"
  30. :min="0"
  31. :max="100"
  32. step-strictly
  33. />&nbsp;%
  34. </div>
  35. </div>
  36. <button
  37. class="c-sibling-item--v o-button"
  38. @click="onInvoke"
  39. >
  40. 应用
  41. </button>
  42. </div>
  43. </template>
  44. <schema-table
  45. v-else
  46. ref="table"
  47. :schema="schema"
  48. :proxy.sync="options"
  49. />
  50. </template>
  51. </c-dialog>
  52. <task-dialog
  53. ref="taskDialog"
  54. :title="dialogTitle"
  55. @confirm="onSave"
  56. >
  57. <span class="c-grid-form__label u-required">{{ tip }}</span>
  58. <div class="l-flex--row">
  59. <el-input-number
  60. v-model="task"
  61. :min="0"
  62. :max="100"
  63. step-strictly
  64. />&nbsp;%
  65. </div>
  66. </task-dialog>
  67. </div>
  68. </template>
  69. <script>
  70. import simpleTaskMixin from './mixins/simple-task'
  71. export default {
  72. name: 'ScreenVolumn',
  73. mixins: [simpleTaskMixin],
  74. data () {
  75. return {
  76. type: '音量',
  77. functionKey: 'volumeControl',
  78. valueKey: 'volume',
  79. schema: this.createSchema([
  80. { label: '音量值(%)', render ({ inputs }) { return inputs[0]?.value } }
  81. ])
  82. }
  83. },
  84. computed: {
  85. defaultClass () {
  86. return this.$scopedSlots.trigger
  87. ? ''
  88. : 'l-flex--col center has-border radius has-padding'
  89. }
  90. }
  91. }
  92. </script>
  93. <style lang="scss" scoped>
  94. .o-icon {
  95. background-image: url("~@/assets/icon_screen_volume.png");
  96. }
  97. </style>