BorderSetting.vue 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. <template>
  2. <div>
  3. <el-form-item
  4. :label-width="labelWidth"
  5. label="边框"
  6. >
  7. <el-input
  8. v-model="title"
  9. clearable
  10. read-only
  11. placeholder="请选择边框"
  12. @focus="init"
  13. >
  14. <template slot="append">
  15. <el-button
  16. size="small"
  17. type="primary"
  18. @click="init"
  19. >
  20. 选择
  21. </el-button>
  22. </template>
  23. </el-input>
  24. <BorderSelect
  25. v-model="config.type"
  26. ref="BorderSelect"
  27. />
  28. </el-form-item>
  29. <el-form-item
  30. :label-width="labelWidth"
  31. label="上边距"
  32. >
  33. <el-input-number
  34. v-model="config.padding[0]"
  35. class="bs-el-input-number"
  36. :min="0"
  37. :step="1"
  38. />
  39. </el-form-item>
  40. <el-form-item
  41. :label-width="labelWidth"
  42. label="右边距"
  43. >
  44. <el-input-number
  45. v-model="config.padding[1]"
  46. class="bs-el-input-number"
  47. :min="0"
  48. :step="1"
  49. />
  50. </el-form-item>
  51. <el-form-item
  52. :label-width="labelWidth"
  53. label="下边距"
  54. >
  55. <el-input-number
  56. v-model="config.padding[2]"
  57. class="bs-el-input-number"
  58. :min="0"
  59. :step="1"
  60. />
  61. </el-form-item>
  62. <el-form-item
  63. :label-width="labelWidth"
  64. label="左边距"
  65. >
  66. <el-input-number
  67. v-model="config.padding[3]"
  68. class="bs-el-input-number"
  69. :min="0"
  70. :step="1"
  71. />
  72. </el-form-item>
  73. <div v-if="config.type">
  74. <div v-if="bigTitle&&config.type!='GcBorder11'">
  75. <el-form-item
  76. :label-width="labelWidth"
  77. label="是否显示标题"
  78. >
  79. <el-switch
  80. v-model="config.isTitle"
  81. class="bs-el-switch"
  82. :active-value="true"
  83. :inactive-value="false"
  84. />
  85. </el-form-item>
  86. <el-form-item
  87. v-if="config.isTitle"
  88. :label-width="labelWidth"
  89. label="标题高度"
  90. >
  91. <el-input-number
  92. v-model="config.titleHeight"
  93. class="bs-el-input-number"
  94. :min="0"
  95. :step="1"
  96. />
  97. </el-form-item>
  98. <el-form-item
  99. v-if="config.isTitle"
  100. :label-width="labelWidth"
  101. label="标题字体大小"
  102. >
  103. <el-input-number
  104. v-model="config.fontSize"
  105. class="bs-el-input-number"
  106. :min="0"
  107. :step="1"
  108. />
  109. </el-form-item>
  110. <el-form-item
  111. v-if="config.isTitle"
  112. :label-width="labelWidth"
  113. label="标题颜色"
  114. >
  115. <el-color-picker
  116. v-model="config.fontColor"
  117. popper-class="bs-el-color-picker"
  118. class="bs-el-color-picker"
  119. show-alpha
  120. />
  121. </el-form-item>
  122. </div>
  123. <div
  124. v-for="(setting, settingIndex) in list"
  125. :key="settingIndex+1"
  126. >
  127. <el-form-item
  128. :label="setting.type=== 'padding' ? '' : setting.label"
  129. :label-width="labelWidth"
  130. >
  131. <el-input
  132. v-if="setting.type === 'input'"
  133. v-model="config[setting.field]"
  134. :placeholder="`请输入${setting.label}`"
  135. clearable
  136. />
  137. <el-select
  138. v-else-if="setting.type === 'select'"
  139. v-model="config[setting.field]"
  140. popper-class="bs-el-select"
  141. class="bs-el-select"
  142. :placeholder="`请选择${setting.label}`"
  143. :multiple="setting.multiple"
  144. clearable
  145. >
  146. <el-option
  147. v-for="(opt, optIndex) in setting.options"
  148. :key="optIndex"
  149. :label="opt.label"
  150. :value="opt.value"
  151. />
  152. </el-select>
  153. <template v-else-if="setting.type === 'colorSelect'">
  154. <color-select
  155. v-model="colorScheme"
  156. @update="updateColorScheme"
  157. />
  158. <div
  159. style="
  160. display: flex;
  161. align-items: center;
  162. flex-wrap: wrap;
  163. "
  164. class="color-picker-box"
  165. >
  166. <el-color-picker
  167. v-for="(colorItem, colorItemIndex) in colors"
  168. :key="colorItemIndex"
  169. v-model="setting.value[colorItemIndex]"
  170. popper-class="bs-el-color-picker"
  171. show-alpha
  172. class="start-color"
  173. />
  174. <span
  175. class="el-icon-circle-plus-outline"
  176. style="color: #007aff; font-size: 20px"
  177. @click="addColor"
  178. />
  179. <span
  180. v-if="colors.length"
  181. class="el-icon-remove-outline"
  182. style="color: #ea0b30; font-size: 20px"
  183. @click="delColor()"
  184. />
  185. </div>
  186. </template>
  187. <el-color-picker
  188. v-else-if="setting.type === 'colorPicker'"
  189. v-model="config[setting.field]"
  190. popper-class="bs-el-color-picker"
  191. class="bs-el-color-picker"
  192. show-alpha
  193. />
  194. <GradualSetting
  195. v-else-if="setting.type === 'gradual'"
  196. v-model="config[setting.field]"
  197. />
  198. <el-input-number
  199. v-else-if="setting.type === 'inputNumber'"
  200. v-model="config[setting.field]"
  201. class="bs-el-input-number"
  202. :step="setting.step || 1"
  203. :min="setting.min || 0"
  204. :max="setting.max || 100000"
  205. />
  206. <el-radio-group
  207. v-else-if="setting.type === 'radio'"
  208. v-model="config[setting.field]"
  209. class="bs-el-radio-group"
  210. >
  211. <template v-for="(opt, optIndex) in setting.options">
  212. <el-radio-button
  213. :key="optIndex"
  214. :label="opt.value"
  215. >
  216. {{ opt.label }}
  217. </el-radio-button>
  218. </template>
  219. </el-radio-group>
  220. <el-switch
  221. v-else-if="setting.type === 'switch'"
  222. v-model="config[setting.field]"
  223. class="bs-el-switch"
  224. :active-value="setting.active"
  225. :inactive-value="setting.inactive"
  226. />
  227. <el-slider
  228. v-else-if="setting.type === 'slider'"
  229. v-model="config[setting.field]"
  230. :min="0"
  231. :max="1"
  232. :step="0.01"
  233. />
  234. <PaddingSetting
  235. v-else-if="setting.type === 'padding'"
  236. v-model="config[setting.field]"
  237. />
  238. </el-form-item>
  239. </div>
  240. </div>
  241. </div>
  242. </template>
  243. <script>
  244. import plotList from 'data-room-ui/BorderComponents/settingList.js'
  245. import ColorSelect from 'data-room-ui/ColorMultipleSelect/index.vue'
  246. import BorderSelect from 'data-room-ui/BorderSelect/index.vue'
  247. export default {
  248. name: '',
  249. components: {
  250. BorderSelect,
  251. ColorSelect
  252. },
  253. props: {
  254. bigTitle:{
  255. type: String,
  256. default: ''
  257. },
  258. config: {
  259. type: Object,
  260. default: () => ({
  261. type: '',
  262. titleHeight: 0,
  263. fontSize: 0,
  264. h: 0,
  265. })
  266. },
  267. labelWidth: {
  268. type: String,
  269. default: '100px'
  270. }
  271. },
  272. computed:{
  273. title:{
  274. set(){
  275. this.config.type=''
  276. },
  277. get(){
  278. plotList[Symbol.iterator]=function*(){
  279. let keys=Object.keys(plotList)
  280. for(let k of keys){
  281. yield [k,plotList[k]]
  282. }
  283. }
  284. let name
  285. for(let [key,value] of plotList){
  286. if(value.type==this.config.type){
  287. name=value.name
  288. }
  289. }
  290. return name
  291. }
  292. },
  293. list(){
  294. plotList[Symbol.iterator]=function*(){
  295. let keys=Object.keys(plotList)
  296. for(let k of keys){
  297. yield [k,plotList[k]]
  298. }
  299. }
  300. let arr=[]
  301. for(let [key,value] of plotList){
  302. if(value.type==this.config.type){
  303. arr=value.setting
  304. value.setting.forEach((item)=>{
  305. if(item.value){
  306. this.config[item.field]=this.config[item.field]||item.value
  307. }
  308. })
  309. }
  310. }
  311. return arr
  312. }
  313. },
  314. data () {
  315. return {
  316. }
  317. },
  318. mounted () {
  319. },
  320. methods: {
  321. init(){
  322. this.$refs.BorderSelect.init()
  323. }
  324. }
  325. }
  326. </script>
  327. <style lang="scss" scoped>
  328. ::v-deep .el-color-picker__trigger {
  329. border-color: var(--bs-el-border);
  330. }
  331. ::v-deep .el-input--suffix .el-input__inner{
  332. padding-right: 10px !important;
  333. }
  334. .color-picker-box{
  335. ::v-deep .el-color-picker__trigger {
  336. width: 27px!important;
  337. }
  338. }
  339. </style>