VideoSetting.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <template>
  2. <div>
  3. <el-form :model="property" :label-position="labelPosition" label-width="72px">
  4. <el-form-item label="序号" class="serial-number">
  5. <el-input v-model="property.serial_number" />
  6. <SvgIcon icon-class="switch" size="16" @click="switchSerialNumber(property)" />
  7. </el-form-item>
  8. <el-form-item>
  9. <el-radio
  10. v-for="{ value, label } in snGenerationMethodList"
  11. :key="value"
  12. v-model="property.sn_generation_method"
  13. :label="value"
  14. >
  15. {{ label }}
  16. </el-radio>
  17. </el-form-item>
  18. <el-form-item label="序号位置">
  19. <div class="grid-container">
  20. <el-button
  21. v-for="{ value } in serialNumberPositionList"
  22. :key="value"
  23. :class="[value, { active: value === property.sn_position }]"
  24. :style="{ gridArea: value }"
  25. @click="changeNumberPosition(value)"
  26. />
  27. <div class="main"></div>
  28. </div>
  29. </el-form-item>
  30. <el-divider />
  31. <el-form-item label="查看方式">
  32. <el-radio v-for="{ value, label } in viewMethodList" :key="value" v-model="property.view_method" :label="value">
  33. {{ label }}
  34. </el-radio>
  35. </el-form-item>
  36. </el-form>
  37. </div>
  38. </template>
  39. <script>
  40. import SettingMixin from '@/views/book/courseware/create/components/common/SettingMixin';
  41. import {
  42. snGenerationMethodList,
  43. viewMethodList,
  44. switchSerialNumber,
  45. checkString,
  46. serialNumberPositionList,
  47. } from '@/views/book/courseware/data/common';
  48. export default {
  49. name: 'VideoSetting',
  50. mixins: [SettingMixin],
  51. data() {
  52. return {
  53. switchSerialNumber,
  54. checkString,
  55. serialNumberPositionList,
  56. snGenerationMethodList,
  57. viewMethodList,
  58. labelPosition: 'left',
  59. property: {
  60. serial_number: 1, // 序号
  61. sn_type: 'number',
  62. sn_position: 'top-start', // 序号位置:top-start top top-end 等
  63. sn_generation_method: snGenerationMethodList[0].value, // 序号生成方式:recalculate 重新计算follow 跟随
  64. view_method: viewMethodList[0].value, // 查看方式
  65. },
  66. };
  67. },
  68. watch: {
  69. property: {
  70. handler(val) {
  71. if (this.isSet) {
  72. val.sn_type = checkString(val.serial_number);
  73. this.$emit('updateSetting', val);
  74. }
  75. },
  76. deep: true,
  77. },
  78. },
  79. methods: {
  80. /**
  81. * @description 设置属性
  82. * @param {object} property 属性
  83. */
  84. setSetting(property) {
  85. this.isSet = true;
  86. this.property = property;
  87. },
  88. /**
  89. * @description 改变序号位置
  90. * @param {String} sn_position
  91. */
  92. changeNumberPosition(sn_position) {
  93. this.property.sn_position = sn_position;
  94. },
  95. },
  96. };
  97. </script>
  98. <style lang="scss" scoped>
  99. .el-form {
  100. .serial-number {
  101. :deep .el-form-item__content {
  102. display: flex;
  103. align-items: center;
  104. justify-content: space-between;
  105. }
  106. .svg-icon {
  107. cursor: pointer;
  108. }
  109. }
  110. .el-input {
  111. margin-right: 16px;
  112. }
  113. .main {
  114. grid-area: main;
  115. }
  116. .grid-container {
  117. display: grid;
  118. grid:
  119. '. top-start top top-end .'
  120. 'left-start main main main right-start'
  121. 'left main main main right'
  122. 'left-end main main main right-end'
  123. '. bottom-start bottom bottom-end .';
  124. place-items: center center;
  125. width: 134px;
  126. height: 80px;
  127. padding: 8px;
  128. line-height: 10px;
  129. border: 1px solid #ebebeb;
  130. .el-button {
  131. width: 16px;
  132. height: 8px;
  133. padding: 0;
  134. margin: 0;
  135. border: 1px solid #e4e4e4;
  136. border-radius: 2px;
  137. &.active {
  138. background-color: $setting-active-color;
  139. }
  140. }
  141. .main {
  142. width: 64px;
  143. height: 32px;
  144. background-color: #f8f8f8;
  145. border: 1px solid #e4e4e4;
  146. border-radius: 2px;
  147. }
  148. }
  149. .el-divider {
  150. margin: 16px 0;
  151. }
  152. }
  153. </style>