MapTextEdit.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <div>
  3. <el-dialog
  4. v-loading="loading"
  5. :show-close="false"
  6. :close-on-click-modal="false"
  7. :visible.sync="isShow"
  8. :title="mteStr === 'polygonAdd' || mteStr === 'polylineAdd' ? '多边形或折线操作' : '文字操作'"
  9. :fullscreen="false"
  10. width="400px"
  11. custom-class="xl-dialog"
  12. center
  13. >
  14. <base-form ref="ruleForm" :data="formData" :is-inline="false" label-width="70px">
  15. </base-form>
  16. <div class="scoped-color-quick" v-if="mteStr === 'polygonAdd' || mteStr === 'polylineAdd'">
  17. <div class="t">快速选择颜色</div>
  18. <div :class="fillColor === item.color ? 'op cur' : 'op'" v-for="(item, i) in colorArr" @click="colorHandle(item)" :style="`background: ${item.color}`" :key="i">{{fillColor === item.color ? '已选' : ' '}}</div>
  19. </div>
  20. <div class="xl-form">
  21. <div class="xl-form-footer">
  22. <el-button class="xl-form-btn t2" @click="close">关 闭</el-button>
  23. <el-button v-if="curObj.obj" class="xl-form-btn t1" @click="close('confirm')">保存</el-button>
  24. <el-button v-else class="xl-form-btn t3" @click="close('confirm')">去画图</el-button>
  25. </div>
  26. </div>
  27. </el-dialog>
  28. </div>
  29. </template>
  30. <script>
  31. import { arrToObj } from '@/utils'
  32. export default {
  33. components: { },
  34. mixins,
  35. props: {
  36. isShow: Boolean,
  37. curObj: Object,
  38. mteStr: String,
  39. },
  40. data() {
  41. return {
  42. loading: false,
  43. formData: [],
  44. fillColor: '#DC3021',
  45. strokeColor: '#DC3021',
  46. colorArr: [
  47. {color: '#fb6557'},
  48. {color: '#ff9149'},
  49. {color: '#9f7df4'},
  50. {color: '#60c68b'},
  51. {color: '#4da4ee'},
  52. {color: '#e77ad4'}
  53. ],
  54. cObj: {},
  55. }
  56. },
  57. watch: {
  58. isShow: function(val) {
  59. if (val) {
  60. this.cObj = JSON.parse(JSON.stringify(this.curObj))
  61. this.getDef()
  62. }
  63. },
  64. },
  65. methods: {
  66. getDef (str) {
  67. let params = { ...this.curObj.obj }
  68. if (str === 'color') {
  69. const oldform = this.$refs.ruleForm.baseForm
  70. params = {...oldform}
  71. params.fillColor = this.fillColor
  72. params.strokeColor = this.strokeColor
  73. }
  74. if (!params.text) params.text = '标题示例'
  75. if (this.mteStr === 'polygonAdd' || this.mteStr === 'polylineAdd') {
  76. if (!params.fillColor) {
  77. params.fillColor = this.fillColor
  78. params.fillOpacity = '0.4'
  79. params.strokeColor = this.strokeColor
  80. }
  81. this.formData = [
  82. { label: '标题', key: 'text', rules: 1},
  83. { label: '填充色', key: 'fillColor', type: 'colorPicker', rules: 1},
  84. { label: '透明度', key: 'fillOpacity', rules: 1},
  85. { label: '轮廓色', key: 'strokeColor', type: 'colorPicker', rules: 1},
  86. ]
  87. } else {
  88. if (!params.color) {
  89. params.color = '#fff'
  90. }
  91. this.formData = [
  92. { label: '内容', key: 'text', rules: 1},
  93. { label: '颜色', key: 'color', type: 'colorPicker', rules: 1},
  94. ]
  95. }
  96. this.setDefaultValue(params)
  97. },
  98. colorHandle (item) {
  99. this.fillColor = item.color
  100. this.strokeColor = item.color
  101. this.getDef('color')
  102. },
  103. close (str) {
  104. if (str === 'confirm') {
  105. this.$refs['ruleForm'].$refs['baseForm'].validate((valid) => {
  106. if (valid) {
  107. const oldform = this.$refs.ruleForm.baseForm
  108. const newForm = { ...oldform }
  109. if (this.curObj.obj) {
  110. this.$emit('close', newForm, 'edit')
  111. } else {
  112. this.$emit('close', newForm)
  113. }
  114. this.setDefaultValue()
  115. }
  116. })
  117. } else {
  118. this.$emit('close')
  119. this.setDefaultValue()
  120. }
  121. },
  122. }
  123. }
  124. </script>
  125. <style lang="scss" scoped>
  126. @import '../../../../styles/libEdit.scss';
  127. .lib-edit {
  128. padding-top: 0;
  129. ::v-deep .el-date-editor.el-input {
  130. width: 100%;
  131. }
  132. ::v-deep .el-textarea__inner {
  133. height: 300px;
  134. }
  135. }
  136. .scoped-color-quick {
  137. margin-bottom: 20px;
  138. .t {
  139. color: #313131;
  140. }
  141. .op {
  142. display: inline-block;
  143. vertical-align: middle;
  144. width: 40px;
  145. height: 26px;
  146. line-height: 26px;
  147. color: #fff;
  148. cursor: pointer;
  149. text-align: center;
  150. margin-right: 10px;
  151. }
  152. }
  153. </style>