setting.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. 1<template>
  2. <div class="bs-setting-wrap">
  3. <el-form
  4. ref="form"
  5. :model="config"
  6. label-width="100px"
  7. label-position="left"
  8. class="setting-body bs-el-form"
  9. >
  10. <div>
  11. <slot name="top" />
  12. <el-form
  13. :model="config.customize"
  14. label-position="left"
  15. class="setting-body bs-el-form"
  16. label-width="100px"
  17. >
  18. <SettingTitle>标题</SettingTitle>
  19. <div class="lc-field-body">
  20. <el-form-item label="是否显示标题">
  21. <el-switch
  22. v-model="config.customize.showTitle"
  23. class="bs-el-switch"
  24. active-color="#007aff"
  25. />
  26. </el-form-item>
  27. <el-form-item
  28. v-if="config.customize.showTitle"
  29. label="标题"
  30. >
  31. <el-input
  32. v-model="config.customize.title"
  33. class="bs-el-input"
  34. clearable
  35. />
  36. </el-form-item>
  37. <el-form-item
  38. v-if="config.customize.showTitle"
  39. label="标题大小"
  40. >
  41. <el-input-number
  42. v-model="config.customize.titleStyle.fontSize"
  43. class="bs-el-input-number"
  44. controls-position="right"
  45. :min="12"
  46. :max="100"
  47. />
  48. </el-form-item>
  49. <el-form-item
  50. v-if="config.customize.showTitle"
  51. label="标题颜色"
  52. >
  53. <ColorPicker
  54. v-model="config.customize.titleStyle.color"
  55. :predefine="predefineThemeColors"
  56. />
  57. </el-form-item>
  58. <el-form-item
  59. v-if="config.customize.showTitle"
  60. label="标题右间距"
  61. >
  62. <el-input-number
  63. v-model="config.customize.titleStyle.marginRight"
  64. class="bs-el-input-number"
  65. controls-position="right"
  66. :min="0"
  67. :max="100"
  68. />
  69. </el-form-item>
  70. </div>
  71. <SettingTitle>位置</SettingTitle>
  72. <div class="lc-field-body">
  73. <PosWhSetting :config="config" />
  74. </div>
  75. <SettingTitle v-if="config.border">边框</SettingTitle>
  76. <div class="lc-field-body">
  77. <BorderSetting
  78. v-if="config.border"
  79. label-width="100px"
  80. :config="config.border"
  81. :bigTitle='config.title'
  82. />
  83. </div>
  84. <SettingTitle>旋转</SettingTitle>
  85. <div class="lc-field-body">
  86. <RotateSetting
  87. :config="config"
  88. />
  89. </div>
  90. <SettingTitle>基础</SettingTitle>
  91. <div class="lc-field-body">
  92. <el-form-item label="输入值字体大小">
  93. <el-input-number
  94. v-model="config.customize.inputStyle.fontSize"
  95. class="bs-el-input-number"
  96. controls-position="right"
  97. :min="12"
  98. :max="100"
  99. />
  100. </el-form-item>
  101. <el-form-item label="输入值字体颜色">
  102. <ColorPicker
  103. v-model="config.customize.inputStyle.color"
  104. :predefine="predefineThemeColors"
  105. />
  106. </el-form-item>
  107. <!-- <el-form-item label="输入值左间距">
  108. <el-input-number
  109. v-model="config.customize.inputStyle.paddingLeft"
  110. class="bs-el-input-number"
  111. controls-position="right"
  112. :min="0"
  113. :max="100"
  114. />
  115. </el-form-item> -->
  116. <el-form-item label="背景颜色">
  117. <ColorPicker
  118. v-model="config.customize.backgroundStyle.backgroundColor"
  119. :predefine="predefineThemeColors"
  120. />
  121. </el-form-item>
  122. <el-form-item label="占位符">
  123. <el-input
  124. v-model="config.customize.placeholderStyle.placeholder"
  125. class="bs-el-input"
  126. clearable
  127. />
  128. </el-form-item>
  129. <el-form-item label="图标选择">
  130. <IconPicker v-model="config.customize.icon.name" />
  131. </el-form-item>
  132. <el-form-item label="图标位置">
  133. <el-select
  134. v-model="config.customize.icon.position"
  135. popper-class="bs-el-select"
  136. class="bs-el-select"
  137. >
  138. <el-option
  139. v-for="iconPosition in iconPositionOptions"
  140. :key="iconPosition.value"
  141. :label="iconPosition.label"
  142. :value="iconPosition.value"
  143. />
  144. </el-select>
  145. </el-form-item>
  146. <!-- <el-form-item label="占位符字体颜色">
  147. <ColorPicker
  148. v-model="config.customize.placeholderStyle.placeholderColor"
  149. :predefine="predefineThemeColors"
  150. />
  151. </el-form-item> -->
  152. <el-form-item label="边框颜色">
  153. <ColorPicker
  154. v-model="config.customize.borderStyle.borderColor"
  155. :predefine="predefineThemeColors"
  156. />
  157. </el-form-item>
  158. <el-form-item label="边框宽度">
  159. <el-input-number
  160. v-model="config.customize.borderStyle.borderWidth"
  161. class="bs-el-input-number"
  162. controls-position="right"
  163. :min="0"
  164. :max="10"
  165. />
  166. </el-form-item>
  167. <el-form-item label="边框样式">
  168. <el-select
  169. v-model="config.customize.borderStyle.borderStyle"
  170. popper-class="bs-el-select"
  171. class="bs-el-select"
  172. clearable
  173. >
  174. <el-option
  175. v-for="borderStyle in borderStyleOptions"
  176. :key="borderStyle.value"
  177. :label="borderStyle.label"
  178. :value="borderStyle.value"
  179. />
  180. </el-select>
  181. </el-form-item>
  182. <el-form-item label="边框圆角">
  183. <el-input-number
  184. v-model="config.customize.borderStyle.borderRadius"
  185. class="bs-el-input-number"
  186. controls-position="right"
  187. :min="0"
  188. :max="100"
  189. />
  190. </el-form-item>
  191. </div>
  192. </el-form>
  193. </div>
  194. </el-form>
  195. </div>
  196. </template>
  197. <script>
  198. import SettingTitle from 'data-room-ui/SettingTitle/index.vue'
  199. import IconPicker from 'data-room-ui/IconPicker/index.vue'
  200. import ColorPicker from 'data-room-ui/ColorPicker/index.vue'
  201. import BorderSetting from 'data-room-ui/BigScreenDesign/RightSetting/BorderSetting.vue'
  202. import PosWhSetting from 'data-room-ui/BigScreenDesign/RightSetting/PosWhSetting.vue'
  203. import RotateSetting from 'data-room-ui/BigScreenDesign/RightSetting/RotateSetting.vue'
  204. export default {
  205. name: 'InputSetting',
  206. components: {
  207. ColorPicker,
  208. IconPicker,
  209. PosWhSetting,
  210. SettingTitle,
  211. BorderSetting,
  212. RotateSetting
  213. },
  214. props: {
  215. config: {
  216. type: Object,
  217. required: true
  218. },
  219. predefineThemeColors: {
  220. type: Array,
  221. default: () => {
  222. return [
  223. '#007aff',
  224. '#1aa97b',
  225. '#ff4d53',
  226. '#1890FF',
  227. '#DF0E1B',
  228. '#0086CC',
  229. '#2B74CF',
  230. '#00BC9D',
  231. '#ED7D32'
  232. ]
  233. }
  234. }
  235. },
  236. data () {
  237. return {
  238. // 输入框类型
  239. // typeOptions: [
  240. // {
  241. // label: '单行文本',
  242. // value: 'text'
  243. // },
  244. // {
  245. // label: '多行文本',
  246. // value: 'textarea'
  247. // }
  248. // ],
  249. // 标题位置
  250. titlePositionOptions: [
  251. {
  252. label: '左',
  253. value: 'left'
  254. },
  255. {
  256. label: '右',
  257. value: 'right'
  258. },
  259. {
  260. label: '上',
  261. value: 'top'
  262. },
  263. {
  264. label: '下',
  265. value: 'bottom'
  266. }
  267. ],
  268. // 边框样式
  269. borderStyleOptions: [
  270. {
  271. label: '实线',
  272. value: 'solid'
  273. },
  274. {
  275. label: '虚线',
  276. value: 'dashed'
  277. },
  278. {
  279. label: '点线',
  280. value: 'dotted'
  281. }
  282. ],
  283. iconPositionOptions: [
  284. {
  285. label: '左',
  286. value: 'left'
  287. },
  288. {
  289. label: '右',
  290. value: 'right'
  291. }
  292. ]
  293. }
  294. },
  295. watch: {},
  296. mounted () {},
  297. methods: {}
  298. }
  299. </script>
  300. <style lang="scss" scoped>
  301. .lc-field-body {
  302. width: 97%;
  303. padding: 12px 16px;
  304. //padding-bottom: 65px;
  305. }
  306. </style>