config.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. <template>
  2. <el-form ref="form" :model="form" label-width="100px" size="mini">
  3. <el-row>
  4. <el-col :span="12">
  5. <el-form-item label="数据库类型">
  6. <el-select v-model="form.dbType">
  7. <el-option label="MySql" value="MySql"> </el-option>
  8. </el-select>
  9. </el-form-item>
  10. </el-col>
  11. <el-col :span="12">
  12. <el-form-item label="页面标题">
  13. <el-input v-model="form.title"> </el-input>
  14. </el-form-item>
  15. </el-col>
  16. </el-row>
  17. <el-form-item label="SQL">
  18. <el-input
  19. v-model="form.sqlString"
  20. type="textarea"
  21. :rows="5"
  22. v-on:change="sqlChange"
  23. ></el-input>
  24. </el-form-item>
  25. <el-row>
  26. <el-col :span="18">
  27. <el-form-item label="排序">
  28. <el-tooltip
  29. class="item"
  30. effect="dark"
  31. content="直接写入sql的order by子句"
  32. placement="bottom-start"
  33. >
  34. <el-input v-model="form.orderBy"></el-input>
  35. </el-tooltip>
  36. </el-form-item>
  37. </el-col>
  38. <el-col :span="6">
  39. <el-form-item label="限制条数">
  40. <el-input-number v-model="form.limit" :min="1" :max="1000"></el-input-number>
  41. </el-form-item>
  42. </el-col>
  43. </el-row>
  44. <el-row>
  45. <el-col :span="3">
  46. <el-form-item label="分页显示">
  47. <el-tooltip
  48. class="item"
  49. effect="dark"
  50. content="开启分页后,限制条数设置无效"
  51. placement="bottom-start"
  52. >
  53. <el-checkbox v-model="form.pagination" size="mini"></el-checkbox>
  54. </el-tooltip>
  55. </el-form-item>
  56. </el-col>
  57. <el-col :span="6">
  58. <el-form-item label="每页条数">
  59. <el-input-number v-model="form.pageSize" :min="1" :max="1000"></el-input-number>
  60. </el-form-item>
  61. </el-col>
  62. <el-col :span="9">
  63. <el-form-item label="条数选择">
  64. <el-input v-model="form.pageSizeList"></el-input>
  65. </el-form-item>
  66. </el-col>
  67. <el-col :span="6">
  68. <el-form-item label="自动刷新变量">
  69. <el-input v-model="form.refreshKey"></el-input>
  70. </el-form-item>
  71. </el-col>
  72. </el-row>
  73. <el-row>
  74. <el-col :span="3">
  75. <el-form-item label="数据导出">
  76. <el-checkbox v-model="form.export" size="mini"></el-checkbox>
  77. </el-form-item>
  78. </el-col>
  79. </el-row>
  80. <el-row>
  81. <el-col>
  82. <el-tabs v-model="tabName" type="card">
  83. <el-tab-pane label="列设置" name="columns">
  84. <el-table border :data="form.columns" :cell-style="{ padding: '1px' }">
  85. <el-table-column label="显示" width="50" align="center">
  86. <template slot-scope="scope">
  87. <el-checkbox v-model="scope.row.show" size="mini"></el-checkbox>
  88. </template>
  89. </el-table-column>
  90. <el-table-column label="固定" width="50" align="center">
  91. <template slot-scope="scope">
  92. <el-checkbox v-model="scope.row.fixed" size="mini"></el-checkbox>
  93. </template>
  94. </el-table-column>
  95. <el-table-column label="导出" width="50" align="center">
  96. <template slot-scope="scope">
  97. <el-checkbox v-model="scope.row.export" size="mini"></el-checkbox>
  98. </template>
  99. </el-table-column>
  100. <el-table-column
  101. prop="prop"
  102. :show-overflow-tooltip="true"
  103. label="字段名"
  104. width="130"
  105. align="center"
  106. >
  107. </el-table-column>
  108. <el-table-column label="标题" width="130" align="center">
  109. <template slot-scope="scope">
  110. <el-input v-model="scope.row.label" size="mini"></el-input>
  111. </template>
  112. </el-table-column>
  113. <el-table-column label="宽度" width="70" align="center">
  114. <template slot-scope="scope">
  115. <el-input v-model="scope.row.width" size="mini"></el-input>
  116. </template>
  117. </el-table-column>
  118. <el-table-column label="对齐" width="70" align="center">
  119. <template slot-scope="scope">
  120. <el-select v-model="scope.row.align" size="mini" placeholder="">
  121. <el-option label="左" value="left"> </el-option>
  122. <el-option label="中" value="center"> </el-option>
  123. <el-option label="右" value="right"> </el-option>
  124. </el-select>
  125. </template>
  126. </el-table-column>
  127. </el-table>
  128. </el-tab-pane>
  129. <el-tab-pane label="查询设置" name="filters">
  130. <el-table border :data="form.filters" :cell-style="{ padding: '1px' }">
  131. <el-table-column
  132. prop="Name"
  133. :show-overflow-tooltip="true"
  134. label="查询项"
  135. width="110"
  136. align="center"
  137. >
  138. </el-table-column>
  139. <el-table-column label="标签" width="110" align="center">
  140. <template slot-scope="scope">
  141. <el-input v-model="scope.row.displayName" size="mini"></el-input>
  142. </template>
  143. </el-table-column>
  144. <el-table-column label="类型" width="100" align="center">
  145. <template slot-scope="scope">
  146. <el-select v-model="scope.row.type" size="mini" placeholder="">
  147. <el-option label="输入框" value="input"> </el-option>
  148. <el-option label="下拉框(单)" value="select"> </el-option>
  149. <el-option label="下拉框(多)" value="select-multi"> </el-option>
  150. <el-option label="日期" value="date"> </el-option>
  151. <el-option label="日期时间" value="datetime"> </el-option>
  152. </el-select>
  153. </template>
  154. </el-table-column>
  155. <el-table-column label="默认值" width="100" align="center">
  156. <template slot-scope="scope">
  157. <el-input v-model="scope.row.defaultValue" size="mini"></el-input>
  158. </template>
  159. </el-table-column>
  160. <el-table-column label="数据源" width="80" align="center">
  161. <template slot-scope="scope">
  162. <el-select
  163. v-model="scope.row.dataSource"
  164. size="mini"
  165. placeholder=""
  166. :disabled="!scope.row.type.startsWith('select')"
  167. >
  168. <el-option label="固定值" value="string"> </el-option>
  169. <el-option label="字典" value="dict"> </el-option>
  170. <el-option label="Sql" value="sql"> </el-option>
  171. <el-option label="DP" value="dp"> </el-option>
  172. </el-select>
  173. </template>
  174. </el-table-column>
  175. <el-table-column label="表达式" width="*" align="center">
  176. <template slot-scope="scope">
  177. <el-tooltip
  178. class="item"
  179. effect="dark"
  180. :disabled="scope.row.dataSource ? false : true"
  181. :content="tooltip.datasource[scope.row.dataSource]"
  182. placement="top"
  183. >
  184. <el-input
  185. v-model="scope.row.dataSourceExpression"
  186. size="mini"
  187. :disabled="!scope.row.type.startsWith('select')"
  188. ></el-input>
  189. </el-tooltip>
  190. </template>
  191. </el-table-column>
  192. <el-table-column label="联动依赖" width="200" align="center">
  193. <template slot-scope="scope">
  194. <el-tooltip
  195. class="item"
  196. effect="dark"
  197. content="下拉框有效,多个以英文逗号分隔,仅能依赖其他下拉框"
  198. placement="top"
  199. >
  200. <el-input
  201. v-model="scope.row.dependency"
  202. size="mini"
  203. :disabled="
  204. !scope.row.type.startsWith('select') ||
  205. ['sql', 'dp'].indexOf(scope.row.dataSource) < 0
  206. "
  207. ></el-input>
  208. </el-tooltip>
  209. </template>
  210. </el-table-column>
  211. </el-table>
  212. </el-tab-pane>
  213. </el-tabs>
  214. </el-col>
  215. </el-row>
  216. <el-form-item> </el-form-item>
  217. <el-form-item label="数据闪烁功能">
  218. <el-checkbox v-model="form.flash" size="mini"></el-checkbox>
  219. </el-form-item>
  220. <el-row>
  221. <el-col :span="7">
  222. <el-form-item label="闪烁列">
  223. <el-input v-model="form.flashColumn"></el-input>
  224. </el-form-item>
  225. </el-col>
  226. <el-col :span="7">
  227. <el-form-item label="闪烁频率(ms)" label-width="130px">
  228. <el-input v-model="form.flashInterval"></el-input>
  229. </el-form-item>
  230. </el-col>
  231. <el-col :span="10">
  232. <el-form-item label="闪烁条件">
  233. <el-input v-model="form.flashFilter"></el-input>
  234. </el-form-item>
  235. </el-col>
  236. </el-row>
  237. <el-form-item label="闪烁颜色">
  238. <el-input v-model="form.flashColorFilter"></el-input>
  239. </el-form-item>
  240. <el-row>
  241. <el-col> </el-col>
  242. </el-row>
  243. <el-row>
  244. <el-col> </el-col>
  245. </el-row>
  246. </el-form>
  247. </template>
  248. <script>
  249. import { getConfig } from '@/api/dataQuery/query'
  250. import { getColumnsAndFilters, setConfig, getDepartmentList } from '@/api/dataQuery/config'
  251. export default {
  252. data() {
  253. return {
  254. tabName: 'columns',
  255. form: {
  256. configName: 'alarmreal',
  257. dbType: 'MySql',
  258. sqlString: '',
  259. connectionString: '',
  260. columns: [],
  261. filters: [],
  262. },
  263. tooltip: {
  264. datasource: {
  265. string: '示例:[{value:"val1",label:"label1"},{value:"val2",label:"label2"},……]',
  266. dict: '直接输入字典分类编码',
  267. sql: '符合mysql查询的sql语句',
  268. dp: 'dp中的udp维度',
  269. },
  270. },
  271. }
  272. },
  273. methods: {
  274. //sql变化后获取新的列
  275. sqlChange() {
  276. let p = {
  277. configname: this.form.configName,
  278. sql: this.form.sqlString,
  279. connection: this.form.connectionString,
  280. }
  281. let _this = this
  282. getColumnsAndFilters(p)
  283. .then(function (response) {
  284. let data = response.data
  285. console.log(data)
  286. _this.form.columns = data.columns
  287. _this.form.filters = data.filters
  288. })
  289. .catch(function (error) {
  290. console.log(error)
  291. })
  292. },
  293. saveForm(index) {
  294. console.log(this)
  295. let _this = this
  296. if (this.form.pageSizeList) {
  297. if (this.form.pageSizeList instanceof Array) {
  298. this.form.pageSizeList = this.form.pageSizeList.join(',')
  299. }
  300. this.form.pageSizeList = this.form.pageSizeList.split(',')
  301. }
  302. setConfig(this.form)
  303. .then(function (response) {
  304. console.log(response.data)
  305. let obj = response.data
  306. if (obj.Tag == 1) {
  307. ys.msgSuccess('保存成功')
  308. //parent.layer.close(index);
  309. //parent.vue.loadTableData();
  310. } else {
  311. ys.msgError(obj.Message)
  312. }
  313. })
  314. .catch(function (error) {
  315. console.log(error)
  316. })
  317. },
  318. loadConfig() {
  319. let _this = this
  320. getConfig({ configname: this.form.ConfigName })
  321. .then(function (response) {
  322. let data = response.data
  323. _this.form = data
  324. })
  325. .catch(function (error) {
  326. console.log(error)
  327. })
  328. },
  329. loadDepartment() {
  330. let _this = this
  331. getDepartmentList()
  332. .then(function (response) {
  333. let data = response.data
  334. })
  335. .catch(function (error) {
  336. console.log(error)
  337. })
  338. },
  339. getConfigName() {
  340. return this.$parent.$parent.resolveConfigName()
  341. },
  342. },
  343. mounted() {
  344. this.form.ConfigName = this.getConfigName()
  345. this.loadConfig()
  346. },
  347. }
  348. </script>
  349. <style lang="scss" scoped></style>