BorderSetting.vue 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  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. <el-form-item
  75. :label-width="labelWidth"
  76. label="是否显示标题"
  77. >
  78. <el-switch
  79. v-model="config.isTitle"
  80. class="bs-el-switch"
  81. :active-value="true"
  82. :inactive-value="false"
  83. />
  84. </el-form-item>
  85. <el-form-item
  86. v-if="config.isTitle&&config.type!='GcBorder11'"
  87. :label-width="labelWidth"
  88. label="标题高度"
  89. >
  90. <el-input-number
  91. v-model="config.titleHeight"
  92. class="bs-el-input-number"
  93. :min="0"
  94. :step="1"
  95. />
  96. </el-form-item>
  97. <el-form-item
  98. v-if="config.isTitle&&config.type!='GcBorder11'"
  99. :label-width="labelWidth"
  100. label="标题字体大小"
  101. >
  102. <el-input-number
  103. v-model="config.fontSize"
  104. class="bs-el-input-number"
  105. :min="0"
  106. :step="1"
  107. />
  108. </el-form-item>
  109. <el-form-item
  110. v-if="config.isTitle&&config.type!='GcBorder11'"
  111. :label-width="labelWidth"
  112. label="标题颜色"
  113. >
  114. <el-color-picker
  115. v-model="config.fontColor"
  116. popper-class="bs-el-color-picker"
  117. class="bs-el-color-picker"
  118. show-alpha
  119. />
  120. </el-form-item>
  121. <!-- <el-form-item
  122. v-if="config.type=='GcBorder15'"
  123. :label-width="labelWidth"
  124. label="外侧边框线宽度"
  125. >
  126. <el-input-number
  127. v-model="borderWidth"
  128. class="bs-el-input-number"
  129. :step="1"
  130. :min="0"
  131. :max="100000"
  132. />
  133. </el-form-item> -->
  134. <div
  135. v-for="(setting, settingIndex) in list.setting"
  136. :key="settingIndex+1"
  137. >
  138. <el-form-item
  139. :label="setting.type=== 'padding' ? '' : setting.label"
  140. :label-width="labelWidth"
  141. >
  142. <el-input
  143. v-if="setting.type === 'input'"
  144. v-model="config[setting.field]"
  145. :placeholder="`请输入${setting.label}`"
  146. clearable
  147. />
  148. <el-select
  149. v-else-if="setting.type === 'select'"
  150. v-model="config[setting.field]"
  151. popper-class="bs-el-select"
  152. class="bs-el-select"
  153. :placeholder="`请选择${setting.label}`"
  154. :multiple="setting.multiple"
  155. clearable
  156. >
  157. <el-option
  158. v-for="(opt, optIndex) in setting.options"
  159. :key="optIndex"
  160. :label="opt.label"
  161. :value="opt.value"
  162. />
  163. </el-select>
  164. <template v-else-if="setting.type === 'colorSelect'">
  165. <color-select
  166. v-model="colorScheme"
  167. @update="updateColorScheme"
  168. />
  169. <div
  170. style="
  171. display: flex;
  172. align-items: center;
  173. flex-wrap: wrap;
  174. "
  175. class="color-picker-box"
  176. >
  177. <el-color-picker
  178. v-for="(colorItem, colorItemIndex) in colors"
  179. :key="colorItemIndex"
  180. v-model="setting.value[colorItemIndex]"
  181. popper-class="bs-el-color-picker"
  182. show-alpha
  183. class="start-color"
  184. />
  185. <span
  186. class="el-icon-circle-plus-outline"
  187. style="color: #007aff; font-size: 20px"
  188. @click="addColor"
  189. />
  190. <span
  191. v-if="colors.length"
  192. class="el-icon-remove-outline"
  193. style="color: #ea0b30; font-size: 20px"
  194. @click="delColor()"
  195. />
  196. </div>
  197. </template>
  198. <el-color-picker
  199. v-else-if="setting.type === 'colorPicker'"
  200. v-model="config[setting.field]"
  201. popper-class="bs-el-color-picker"
  202. class="bs-el-color-picker"
  203. show-alpha
  204. />
  205. <BorderColorSetting
  206. v-else-if="setting.type === 'gradual'"
  207. v-model="config[setting.field]"
  208. />
  209. <el-input-number
  210. v-else-if="setting.type === 'inputNumber'"
  211. v-model="config[setting.field]"
  212. class="bs-el-input-number"
  213. :step="setting.step || 1"
  214. :min="setting.min || 0"
  215. :max="setting.max || 100000"
  216. />
  217. <el-radio-group
  218. v-else-if="setting.type === 'radio'"
  219. v-model="config[setting.field]"
  220. class="bs-el-radio-group"
  221. >
  222. <template v-for="(opt, optIndex) in setting.options">
  223. <el-radio-button
  224. :key="optIndex"
  225. :label="opt.value"
  226. >
  227. {{ opt.label }}
  228. </el-radio-button>
  229. </template>
  230. </el-radio-group>
  231. <el-switch
  232. v-else-if="setting.type === 'switch'"
  233. v-model="config[setting.field]"
  234. class="bs-el-switch"
  235. :active-value="setting.active"
  236. :inactive-value="setting.inactive"
  237. />
  238. <el-slider
  239. v-else-if="setting.type === 'slider'"
  240. v-model="config[setting.field]"
  241. :min="0"
  242. :max="1"
  243. :step="0.01"
  244. />
  245. <PaddingSetting
  246. v-else-if="setting.type === 'padding'"
  247. v-model="config[setting.field]"
  248. />
  249. </el-form-item>
  250. </div>
  251. </div>
  252. </div>
  253. </template>
  254. <script>
  255. import _ from 'lodash'
  256. import plotList from 'data-room-ui/BorderComponents/settingList.js'
  257. import BorderColorSetting from 'data-room-ui/BigScreenDesign/RightSetting/BorderColorSetting/index.vue'
  258. import ColorSelect from 'data-room-ui/ColorMultipleSelect/index.vue'
  259. import BorderSelect from 'data-room-ui/BorderSelect/index.vue'
  260. export default {
  261. name: '',
  262. components: {
  263. BorderSelect,
  264. ColorSelect,
  265. BorderColorSetting
  266. },
  267. props: {
  268. bigTitle:{
  269. type: String,
  270. default: ''
  271. },
  272. config: {
  273. type: Object,
  274. default: () => ({
  275. type: '',
  276. titleHeight: 0,
  277. fontSize: 0,
  278. h: 0,
  279. })
  280. },
  281. labelWidth: {
  282. type: String,
  283. default: '100px'
  284. }
  285. },
  286. watch:{
  287. // borderWidth:{
  288. // handler (val) {
  289. // this.config.borderWidth=val
  290. // }
  291. // },
  292. 'config.type':{
  293. handler (val) {
  294. this.config.isTitle=this.list.isTitle
  295. plotList[Symbol.iterator]=function*(){
  296. let keys=Object.keys(plotList)
  297. for(let k of keys){
  298. yield [k,plotList[k]]
  299. }
  300. }
  301. for(let [key,value] of plotList){
  302. if(value.padding&&val==value.type){
  303. this.config.padding=[...value.padding]
  304. }
  305. if(value.type==this.config.type){
  306. value.setting.forEach((item)=>{
  307. this.$set(this.config,item.field,item.value)
  308. })
  309. }
  310. }
  311. }
  312. },
  313. },
  314. computed:{
  315. title:{
  316. set(){
  317. this.config.type=''
  318. this.config.padding=[16,16,16,16]
  319. },
  320. get(){
  321. plotList[Symbol.iterator]=function*(){
  322. let keys=Object.keys(plotList)
  323. for(let k of keys){
  324. yield [k,plotList[k]]
  325. }
  326. }
  327. let name
  328. for(let [key,value] of plotList){
  329. if(value.type==this.config.type){
  330. name=value.name
  331. }
  332. }
  333. return name
  334. }
  335. },
  336. list(){
  337. plotList[Symbol.iterator]=function*(){
  338. let keys=Object.keys(plotList)
  339. for(let k of keys){
  340. yield [k,plotList[k]]
  341. }
  342. }
  343. let obj={}
  344. for(let [key,value] of plotList){
  345. if(value.type==this.config.type){
  346. obj={setting:value.setting,isTitle:value.isTitle}
  347. }
  348. }
  349. return obj
  350. }
  351. },
  352. data () {
  353. return {
  354. // borderWidth:0
  355. }
  356. },
  357. mounted () {
  358. // if(this.config.borderWidth){
  359. // this.borderWidth=this.config.borderWidth
  360. // }
  361. },
  362. methods: {
  363. init(){
  364. this.$refs.BorderSelect.init()
  365. }
  366. }
  367. }
  368. </script>
  369. <style lang="scss" scoped>
  370. ::v-deep .el-color-picker__trigger {
  371. border-color: var(--bs-el-border);
  372. }
  373. ::v-deep .el-input--suffix .el-input__inner{
  374. padding-right: 10px !important;
  375. }
  376. .color-picker-box{
  377. ::v-deep .el-color-picker__trigger {
  378. width: 27px!important;
  379. }
  380. }
  381. </style>