RelationSetting.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <!--
  2. * @description: 设置联动的弹窗
  3. * @Date: 2023-01-04 14:57:06
  4. * @Author: xing.heng
  5. * @LastEditors: wujian
  6. * @LastEditTime: 2023-05-23 15:46:03
  7. -->
  8. <template>
  9. <el-dialog
  10. title="组件联动设置"
  11. :visible.sync="settingVisible"
  12. :close-on-click-modal="false"
  13. :before-close="handleClose"
  14. width="800px"
  15. append-to-body
  16. class="bs-dialog-wrap bs-el-dialog"
  17. >
  18. <el-form
  19. ref="form"
  20. label-width="100px"
  21. >
  22. <el-table
  23. :data="configMapConfig.maps"
  24. class="bs-table bs-el-table"
  25. >
  26. <el-empty />
  27. <el-table-column
  28. label="当前组件映射参数"
  29. align="center"
  30. >
  31. <template #default="scope">
  32. <el-select
  33. v-model="configMapConfig.maps[scope.$index].sourceField"
  34. popper-class="bs-el-select"
  35. class="bs-el-select"
  36. >
  37. <el-option
  38. v-for="sourceField in sourceFieldList"
  39. :key="sourceField.value"
  40. :label="sourceField.label"
  41. :value="sourceField.value"
  42. />
  43. </el-select>
  44. </template>
  45. </el-table-column>
  46. <el-table-column
  47. label="操作符"
  48. align="center"
  49. >
  50. <template #default="scope">
  51. <el-select
  52. v-model="configMapConfig.maps[scope.$index].queryRule"
  53. popper-class="bs-el-select"
  54. class="bs-el-select"
  55. >
  56. <el-option
  57. v-for="operator in operatorList"
  58. :key="operator.value"
  59. :label="operator.label"
  60. :value="operator.value"
  61. />
  62. </el-select>
  63. </template>
  64. </el-table-column>
  65. <el-table-column
  66. label="目标组件接收参数"
  67. align="center"
  68. >
  69. <template #default="scope">
  70. <el-select
  71. v-model="configMapConfig.maps[scope.$index].targetField"
  72. popper-class="bs-el-select"
  73. class="bs-el-select"
  74. >
  75. <el-option
  76. v-for="targetField in targetFieldList"
  77. :key="targetField.value"
  78. :label="targetField.label"
  79. :value="targetField.value"
  80. :disabled="choosedTargetFields.includes(targetField.value)"
  81. />
  82. </el-select>
  83. </template>
  84. </el-table-column>
  85. <el-table-column
  86. label="操作"
  87. align="center"
  88. width="100px"
  89. >
  90. <template slot-scope="scope">
  91. <el-button
  92. type="text"
  93. size="small"
  94. @click="handleDelete(scope.$index)"
  95. >
  96. 删除
  97. </el-button>
  98. </template>
  99. </el-table-column>
  100. </el-table>
  101. </el-form>
  102. <el-button
  103. v-block
  104. type="primary"
  105. @click="addRelatedField"
  106. >
  107. 新增联动字段
  108. </el-button>
  109. <div
  110. slot="footer"
  111. class="dialog-footer"
  112. >
  113. <el-button
  114. class="bs-el-button-default"
  115. @click="handleClose"
  116. >
  117. 取消
  118. </el-button>
  119. <el-button
  120. type="primary"
  121. @click="updateConfig"
  122. >
  123. 确定
  124. </el-button>
  125. </div>
  126. </el-dialog>
  127. </template>
  128. <script>
  129. import { operatorList } from 'packages/js/dict/chartDict'
  130. export default {
  131. name: 'RalationSetting',
  132. components: {
  133. },
  134. directives: {
  135. block: {
  136. bind (el, binding) {
  137. el.style.width = binding.value || '100%'
  138. el.style.margin = '10px auto'
  139. }
  140. }
  141. },
  142. props: {
  143. settingVisible: {
  144. type: Boolean,
  145. default: false
  146. },
  147. configMap: {
  148. type: Object,
  149. default: () => ({})
  150. },
  151. sourceFieldList: {
  152. type: Array,
  153. default: () => []
  154. },
  155. targetFieldList: {
  156. type: Array,
  157. default: () => []
  158. }
  159. },
  160. data () {
  161. return {
  162. operatorList
  163. }
  164. },
  165. computed: {
  166. configMapConfig: {
  167. get () {
  168. return this.configMap || {
  169. componentKey: '',
  170. maps: []
  171. }
  172. },
  173. set () { }
  174. },
  175. choosedTargetFields () {
  176. return this.configMapConfig.maps.map(item => item.targetField)
  177. }
  178. },
  179. mounted () { },
  180. methods: {
  181. /**
  182. * @description: 关闭弹窗
  183. */
  184. handleClose () {
  185. this.$emit('update:settingVisible')
  186. },
  187. /**
  188. * @description: 更新配置
  189. */
  190. updateConfig () {
  191. this.$emit('updateConfig', this.configMapConfig)
  192. this.handleClose()
  193. },
  194. /**
  195. * @description: 新增关联字段
  196. */
  197. addRelatedField () {
  198. this.configMapConfig.maps.push({
  199. targetField: '',
  200. sourceField: '',
  201. queryRule: '='
  202. })
  203. },
  204. handleDelete (index) {
  205. this.configMapConfig.maps.splice(index, 1)
  206. }
  207. }
  208. }
  209. </script>
  210. <style lang="scss" scoped>
  211. @import '~packages/assets/style/bsTheme.scss';
  212. </style>