itemConfigModel.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <template>
  2. <div>
  3. <!-- 数据项表达式配置 -->
  4. <el-dialog :title="title" width="80%" top="5vh" center :before-close="dialogClose" :visible.sync="visible"
  5. @open="handleOpen" @close="handleClose">
  6. <el-form label-width="100px">
  7. <el-row>
  8. <el-col :span="6">
  9. <el-form-item label="数据源:" style="margin-bottom: 5px; width: 100%">
  10. <el-select v-model="dataSourceId" disabled>
  11. <el-option v-for="dict in dataSourceList" :key="dict.id" :label="dict.dataSourceName"
  12. :value="dict.id"></el-option>
  13. </el-select>
  14. </el-form-item>
  15. </el-col>
  16. <el-col :span="6">
  17. <el-form-item label="点位:" style="margin-bottom: 5px; width: 100%">
  18. <el-input placeholder="请输入点位进行过滤" style="" @input="chooseItemChangeEvent"
  19. v-model="filterChooseItemText"></el-input>
  20. </el-form-item>
  21. </el-col>
  22. </el-row>
  23. </el-form>
  24. <el-button type="primary" size="small" @click="multipleModel"
  25. style="position: absolute; right: 30px; top: 80px">批量设置表达式</el-button>
  26. <CommonTable ref="itemConfigTable" :tableHeaderTitle="tableHeaderTitle" :tableData="tableData"
  27. :isShowCheckbox="isShowCheckbox" :isShowIndex="isShowIndex" :tableHight="tableHight"
  28. :tableOperate="tableOperate" @receiveCheckedData="receiveCheckedData" @chooseModel="chooseModel">
  29. </CommonTable>
  30. <span slot="footer">
  31. <el-button type="primary" @click="saveItemChoose" size="small">确定</el-button>
  32. <el-button @click="dialogClose" size="small">取消</el-button>
  33. </span>
  34. </el-dialog>
  35. <!-- 选择表达式 -->
  36. <ChooseModel ref="chooseModel" @saveDataModelEvent="saveDataModelEvent"></ChooseModel>
  37. </div>
  38. </template>
  39. <script>
  40. import CommonTable from '@/components/CommonTable/index.vue'
  41. import ChooseModel from './chooseModel.vue'
  42. export default {
  43. components: {
  44. CommonTable,
  45. ChooseModel
  46. },
  47. data() {
  48. return {
  49. visible: false,
  50. title: '点位表达式设置',
  51. dataSourceId: null,
  52. filterChooseItemText: null,
  53. dataSourceList: [],
  54. dataModelList: [],
  55. leavesChooseList: [],
  56. checkItemList: [],
  57. // 是否展示复选框列
  58. isShowCheckbox: true,
  59. // 是否展示序号索引列
  60. isShowIndex: true,
  61. tableHight: '68vh',
  62. tableHeaderTitle: [
  63. {
  64. propName: "itemName",
  65. labelName: "点位名称",
  66. },
  67. {
  68. propName: "remark",
  69. labelName: "四则运算表达式",
  70. }
  71. ],
  72. tableDataF: [],
  73. tableData: [],
  74. tableOperate: [
  75. {
  76. btnName: '选择表达式',
  77. size: "mini",
  78. style: '',
  79. icon: 'el-icon-edit',
  80. methodName: "chooseModel",
  81. }
  82. ],
  83. queryParams: {
  84. page: 1,
  85. limit: 10
  86. },
  87. tableTotal: 0
  88. }
  89. },
  90. methods: {
  91. /** 弹窗打开事件 */
  92. handleOpen() {
  93. this.tableDataF = this.tableData
  94. },
  95. /** 弹窗关闭事件 */
  96. handleClose() {
  97. this.dataSourceId = null
  98. this.filterChooseItemText = null
  99. this.tableData = []
  100. },
  101. /** 关闭弹出层 */
  102. dialogClose() {
  103. this.visible = false
  104. },
  105. // 接收子组件勾选的行的数据
  106. receiveCheckedData(checked) {
  107. this.checkItemList = checked
  108. },
  109. /** 确定数据项的设置 */
  110. saveItemChoose() {
  111. this.$emit('saveItemChoose', this.tableDataF)
  112. this.dialogClose()
  113. this.$emit('dialogClose')
  114. },
  115. /** 选择数据项表达式 */
  116. chooseModel(row) {
  117. this.$refs.chooseModel.title = '选择表达式'
  118. this.$refs.chooseModel.visible = true
  119. this.$refs.chooseModel.dataModelList = this.dataModelList
  120. this.$refs.chooseModel.chooseDataModelId = row.dataModelId
  121. let arr = [];
  122. arr.push(row.itemName)
  123. this.$refs.chooseModel.itemNameList = arr
  124. },
  125. /** 批量设置表达式 */
  126. multipleModel() {
  127. if (this.checkItemList.length == 0) {
  128. this.$message({
  129. message: '请至少选择一个点位!',
  130. type: 'warning'
  131. })
  132. return;
  133. }
  134. this.$refs.chooseModel.title = '选择表达式'
  135. this.$refs.chooseModel.visible = true
  136. this.$refs.chooseModel.dataModelList = this.dataModelList
  137. let arr = [];
  138. for (let i = 0; i < this.checkItemList.length; i++) {
  139. arr.push(this.checkItemList[i].itemName)
  140. }
  141. this.$refs.chooseModel.itemNameList = arr
  142. },
  143. /** 过滤数据项事件 */
  144. chooseItemChangeEvent(val) {
  145. let arr = JSON.parse(JSON.stringify(this.tableDataF));
  146. if (!val || !val.trim()) {
  147. this.tableData = arr;
  148. return;
  149. }
  150. this.tableData = arr.filter((v) => v.itemName.indexOf(val) !== -1)
  151. },
  152. /** 保存数据模型事件 */
  153. saveDataModelEvent(itemNameList, dataModelId) {
  154. let remark = '';
  155. for (let i = 0; i < this.dataModelList.length; i++) {
  156. if (this.dataModelList[i].id == dataModelId) {
  157. remark = this.dataModelList[i].remark
  158. break
  159. }
  160. }
  161. let arr = []
  162. for (let i = 0; i < this.tableDataF.length; i++) {
  163. let temp = this.tableDataF[i]
  164. for (let j = 0; j < itemNameList.length; j++) {
  165. if (itemNameList[j] == temp.itemName) {
  166. temp.dataModelId = dataModelId
  167. temp.remark = remark
  168. break
  169. }
  170. }
  171. arr.push(temp)
  172. }
  173. this.tableDataF = arr
  174. this.chooseItemChangeEvent(this.filterChooseItemText)
  175. }
  176. }
  177. }
  178. </script>