1c80a84e71d75433b582575d7c22b6e16f421fea.svn-base 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. <template>
  2. <div :style="{'overflow-y':'auto','height':htSize+'px'}">
  3. <el-form label-position="top" class="panel" style="text-align:left;">
  4. <el-form-item v-show="false" :label="$t('common.dataSource')+':'">
  5. <el-select v-model="selectedBase" size="mini" filterable :placeholder="$t('dataSource.sourcePlaceholder')" style="width:200px;" clearable @change="handleBaseChange">
  6. <el-option v-for="item in baseList" :key="item.source_id" :label="item.base_alias || item.database" :value="item.source_id" />
  7. </el-select>
  8. </el-form-item>
  9. <!-- 表下拉框 -->
  10. <!-- label看到的 key=id -->
  11. <el-form-item label="数据类型:">
  12. <el-radio-group v-model="selectedTable" @change="handleDataSrcChange">
  13. <el-radio-button label="trainnumber">车次</el-radio-button>
  14. <el-radio-button label="barroport">栏舍</el-radio-button>
  15. </el-radio-group>
  16. </el-form-item>
  17. <!-- <el-form-item>
  18. <el-select v-model="selectedTable" size="mini" filterable :placeholder="$t('dataSource.tablePlaceholder')" style="width:200px;" clearable @change="handleDataSrcChange">
  19. <el-option v-for="item in tableList" :key="item.table" :label="item.table_alias || item.tablename" :value="item.table" />
  20. </el-select>
  21. </el-form-item> -->
  22. <el-form-item v-show="false" :label="$t('dataSource.table')+':'">
  23. <span style="font-size: 12px;margin-right: 5px;">{{ selectedTableName }}</span>
  24. <el-button type="text" size="mini" @click="editDataSrc">
  25. {{ $t('common.edit') }}
  26. </el-button>
  27. </el-form-item>
  28. <!-- 字段 -->
  29. <!-- <el-form-item :label="$t('dataSource.fields')+':'">
  30. <draggable v-model="tableSchema" v-loading="schemaLoading" :group="{name: 'col',pull: 'clone', put: false}" :move="handleMove">
  31. <div v-for="col in tableSchema" :key="col.Column" class="drag-list-item">
  32. <i class="el-icon-rank" style="font-size: 12px;color:#409EFF;" /> {{ col.Comment }}
  33. </div>
  34. </draggable>
  35. </el-form-item> -->
  36. <el-form-item :label="$t('dataSource.fields')+':'">
  37. <draggable v-if="isEdit == 'edit' || isEdit == set_edit" v-model="tableSchema" v-loading="schemaLoading" :group="{name: 'col',pull: 'clone', put: false}" :move="handleMove">
  38. <div v-for="col in tableSchema" :key="col.Column" class="drag-list-item">
  39. <i class="el-icon-rank" style="font-size: 12px;color:#409EFF;" /> {{ col.Comment }}
  40. </div>
  41. </draggable>
  42. <div v-if="isEdit == 'view' || isEdit == set_edit" v-for="col in tableSchema" :key="col.Column" class="drag-list-item">
  43. <i class="el-icon-rank" style="font-size: 12px;color:#409EFF;" /> {{ col.Comment }}
  44. </div>
  45. </el-form-item>
  46. </el-form>
  47. </div>
  48. </template>
  49. <script>
  50. import { sourceList, linkedTablesByBase } from '@/api/source'
  51. import { GetDataByName } from '@/api/common'
  52. import draggable from 'vuedraggable'
  53. import exeSql from '@/api/exeSql'
  54. import store from '../store'
  55. export default {
  56. components: { draggable },
  57. props: {
  58. resultLoading: {
  59. default: false
  60. },
  61. dataSrc: {
  62. requred: true
  63. },
  64. isEdit: "",
  65. },
  66. watch: {
  67. isEdit: function (newValue) {
  68. console.log('isEdit:', newValue); //可以看到数据已经拿到
  69. this.isEdit = newValue
  70. }
  71. },
  72. data() {
  73. return {
  74. radio1: '上海',
  75. schemaLoading: false,
  76. baseList: [],
  77. tableList: [],
  78. selectedTable: undefined,
  79. tableSchema: undefined,
  80. dataSrcVisible: true,
  81. existWarning: null,
  82. selectedBase: undefined,
  83. set_edit: localStorage.getItem('ChartPanelIsEdit')
  84. }
  85. },
  86. computed: {
  87. allSelected() {
  88. return store.state.dimensions.concat(store.state.caculCols).concat(store.state.caculCols2)
  89. },
  90. selectedBaseName() {
  91. const selectedBase = this.baseList.find(item => item.source_id === this.selectedBase)
  92. if (!selectedBase) return ''
  93. return selectedBase.base_alias || selectedBase.database
  94. },
  95. selectedTableName() {
  96. const selectedTable = this.tableList.find(item => item.table === this.selectedTable)
  97. if (!selectedTable) return ''
  98. return selectedTable.table_alias || selectedTable.table
  99. }
  100. },
  101. created() {
  102. console.log('this.dataSrc', this.dataSrc)
  103. console.log('height', document.documentElement.clientHeight)
  104. var height = document.documentElement.clientHeight - 260
  105. this.htSize = height
  106. // this.getBaseList()
  107. // this.get_table_list()
  108. },
  109. methods: {
  110. // async getBaseList() {
  111. // const { data } = await sourceList()
  112. // this.baseList = data
  113. // },
  114. get_table_list() {
  115. var send_data = {
  116. name: 'getTABLESV2',
  117. page: 1,
  118. offset: 1
  119. }
  120. GetDataByName(send_data).then(response => {
  121. console.log('tableList数据', response.data.list)
  122. if (response.data.list !== null) {
  123. this.tableList = response.data.list
  124. } else {
  125. this.tableList = []
  126. }
  127. })
  128. },
  129. initWithDataSrc(dataSrc) {
  130. console.log('dataSrc:', dataSrc)
  131. if (dataSrc) {
  132. this.selectedTable = dataSrc.table
  133. this.selectedBase = dataSrc.source_id
  134. // this.fetchTables()
  135. this.fetchSchema()
  136. } else {
  137. this.selectedBase = ''
  138. // this.tableSchema = []
  139. // this.dataSrcVisible = true
  140. this.selectedTable = 'trainnumber'
  141. this.fetchSchema()
  142. store.setAllColsAction([])
  143. this.$emit('change', {
  144. table: this.selectedTable,
  145. source_id: this.selectedBase
  146. })
  147. }
  148. },
  149. editDataSrc() {
  150. this.dataSrcVisible = true
  151. this.selectedTable = undefined
  152. },
  153. handleBaseChange() {
  154. this.fetchTables()
  155. },
  156. // async fetchTables() {
  157. // const { data } = await linkedTablesByBase(this.selectedBase)
  158. // this.tableList = data
  159. // },
  160. // handleDataSrcChange() {
  161. // this.dataSrcVisible = false
  162. // this.fetchSchema()
  163. // store.setAllColsAction([])
  164. // this.$emit('change', {
  165. // table: this.selectedTable,
  166. // source_id: this.selectedBase
  167. // })
  168. // },
  169. handleDataSrcChange(e) {
  170. console.log('selectedTable:', this.selectedTable)
  171. this.dataSrcVisible = false
  172. this.fetchSchema()
  173. store.setAllColsAction([])
  174. this.$emit('change', {
  175. table: this.selectedTable,
  176. source_id: this.selectedBase
  177. })
  178. },
  179. // fetchSchema() {
  180. // if (!this.selectedTable) {
  181. // this.tableSchema = []
  182. // return
  183. // }
  184. // this.schemaLoading = true
  185. // exeSql().fetch({ source_id: this.selectedBase, sql: `desc ${this.selectedTable}` }).then(resp => {
  186. // this.schemaLoading = false
  187. // this.tableSchema = resp.data.map((item, index) => {
  188. // return {
  189. // Column: item.Field,
  190. // Type: item.Type,
  191. // id: index
  192. // }
  193. // })
  194. // store.setAllColsAction(this.tableSchema)
  195. // })
  196. // },
  197. // 字段下拉框
  198. fetchSchema() {
  199. console.log('selectedTable:', this.selectedTable)
  200. // if (!this.selectedTable) {
  201. // this.tableSchema = []
  202. // return
  203. // }
  204. this.schemaLoading = true
  205. var send_data2 = {
  206. name: 'getColumnName',
  207. page: 1,
  208. offset: 1,
  209. returntype: 'Map',
  210. parammaps: {
  211. table_name: this.selectedTable
  212. }
  213. }
  214. GetDataByName(send_data2).then(resp => {
  215. console.log('字段数据:', resp.data.list)
  216. if (resp.data.list !== null) {
  217. this.schemaLoading = false
  218. this.tableSchema = resp.data.list.map((item, index) => {
  219. return {
  220. Column: item.Field,
  221. Type: item.Type,
  222. id: index,
  223. Comment: item.Comment
  224. }
  225. })
  226. store.setAllColsAction(this.tableSchema)
  227. } else {
  228. this.tableSchema = []
  229. }
  230. console.log('tableSchema数据:', this.tableSchema)
  231. })
  232. },
  233. handleMove(evt, originalEvent) {
  234. if (this.allSelected.find(item => item.Column === evt.draggedContext.element.Column)) {
  235. if (!this.existWarning) {
  236. this.existWarning = this.$message({
  237. type: 'warning',
  238. message: this.$t('chart.fieldExisted'),
  239. onClose: (instance) => {
  240. this.existWarning = null
  241. }
  242. })
  243. }
  244. return false
  245. }
  246. }
  247. }
  248. }
  249. </script>
  250. <style lang="scss" scoped>
  251. body .el-scrollbar__wrap {
  252. overflow-x: hidden;
  253. }
  254. .panel {
  255. /deep/ .el-form-item__label {
  256. line-height: initial;
  257. }
  258. /deep/ .el-form-item__content {
  259. line-height: initial;
  260. }
  261. }
  262. .drag-list-item {
  263. line-height: 1.5;
  264. font-size: 14px;
  265. color: #606266;
  266. cursor: -webkit-grab;
  267. }
  268. </style>