iam-dm-database-form.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <template>
  2. <audit-form-top-banner :handel-save-form="saveForm" :form-data="mode" @handelSaveForm="saveForm">
  3. <template v-slot:beforebtn>
  4. <a-button
  5. :loading="connect"
  6. type="primary"
  7. :class="$style.connectBtn"
  8. @click="testConnection(mode)"
  9. >测试连接</a-button
  10. >
  11. </template>
  12. <sd-detail-form
  13. ref="docform"
  14. form-id="iamFinSysDatabase"
  15. page-id="dm/finsysdatabase/iamFinSysDatabase"
  16. :record-id="this.$route.query.record ? parseInt(this.$route.query.record) : null"
  17. :class="$style.form"
  18. :read-only="!saveFlag"
  19. @close="close(true)"
  20. @saved="saved"
  21. @sdFormReady="sdFormReady"
  22. >
  23. <template v-slot="{ model, fields }">
  24. <table>
  25. <tr>
  26. <td style="padding-left:5px;border:none">
  27. <audit-advanced-group
  28. :expand="basicExpand"
  29. :expand-str="'basicExpand'"
  30. :group-label="'基本信息'"
  31. tablestyle="''"
  32. @changedClick="changedClick"
  33. ></audit-advanced-group>
  34. </td>
  35. </tr>
  36. </table>
  37. <table v-show="basicExpand">
  38. <tr>
  39. <!-- 数据源名称 -->
  40. <sd-form-item-td name="name" />
  41. <!-- 数据源编码 -->
  42. <sd-form-item-td name="code">
  43. <a-form-model-item
  44. :rules="[
  45. {
  46. validator: validator,
  47. trigger: ['change', 'blur'],
  48. },
  49. ]"
  50. prop="code"
  51. >
  52. <a-input v-model="model.code"></a-input>
  53. </a-form-model-item>
  54. </sd-form-item-td>
  55. </tr>
  56. <tr>
  57. <!-- 数据库类型 -->
  58. <sd-form-item-td name="databaseType" @change="dbtypeChange" />
  59. <!-- 数据源类型 -->
  60. <sd-form-item-td name="databaseStatus" />
  61. </tr>
  62. <tr>
  63. <!-- IP地址 -->
  64. <sd-form-item-td name="host" />
  65. <!-- 端口号 -->
  66. <sd-form-item-td name="port" :input-props="{ style: 'width:100%' }" />
  67. </tr>
  68. <tr>
  69. <!-- 数据库名称 -->
  70. <sd-form-item-td name="useSchema" />
  71. <!-- 用户名 -->
  72. <sd-form-item-td name="userName" />
  73. </tr>
  74. <tr>
  75. <!-- 密码 -->
  76. <sd-form-item-td name="password" />
  77. </tr>
  78. <tr>
  79. <!-- 说明 -->
  80. <sd-form-item-td name="remark" :colspan="3">
  81. <a-textarea v-model="model.remark" :rows="3" />
  82. </sd-form-item-td>
  83. </tr>
  84. <tr>
  85. <!-- 维护人员 -->
  86. <sd-form-item-td name="creatorName" />
  87. <!-- 维护日期 -->
  88. <sd-form-item-td name="creationTime" />
  89. </tr>
  90. </table>
  91. </template>
  92. </sd-detail-form>
  93. </audit-form-top-banner>
  94. </template>
  95. <script>
  96. import debounce from 'lodash.debounce'
  97. import crossWindowWatcher from '@/common/services/cross-window-watcher'
  98. import { message } from '@/common/one-ui'
  99. import axios from '@/common/services/axios-instance'
  100. import auditFormTopBanner from '@product/iam/components/audit-form-top-banner'
  101. import auditAdvancedGroup from '@product/iam/components/audit-advanced-group'
  102. import auditAdvancedGroupMixins from '@product/iam/components/audit-advanced-group-mixins'
  103. import components from './_import-components/iam-dm-database-form-import'
  104. export default {
  105. name: 'IamDmDatabaseForm',
  106. metaInfo: {
  107. title: '数据源定义',
  108. },
  109. components: {
  110. ...components,
  111. auditAdvancedGroup,
  112. auditFormTopBanner,
  113. },
  114. mixins: [auditAdvancedGroupMixins],
  115. data() {
  116. return {
  117. mode: null,
  118. saveFlag: true,
  119. basicExpand: true,
  120. connect: false, // 测试连接按钮状态
  121. }
  122. },
  123. methods: {
  124. // 页面加载完成后
  125. sdFormReady() {
  126. this.mode = this.$refs.docform.formData.mode
  127. },
  128. // 保存
  129. saveForm() {
  130. this.$refs.docform.validateFields().then(() => {
  131. message.success('保存成功').then(() => {
  132. this.$refs.docform.saveBtnClick()
  133. })
  134. })
  135. // this.$refs.docform.saveBtnClick()
  136. },
  137. // 测试连接
  138. testConnection(model) {
  139. this.connect = true
  140. this.$refs.docform.$refs.form
  141. .validateFields()
  142. .then((flag) => {
  143. const databaseBean = {
  144. databaseType: this.$refs.docform.getFieldValue('databaseType'),
  145. host: this.$refs.docform.getFieldValue('host'),
  146. port: this.$refs.docform.getFieldValue('port'),
  147. useSchema: this.$refs.docform.getFieldValue('useSchema'),
  148. userName: this.$refs.docform.getFieldValue('userName'),
  149. password: this.$refs.docform.getFieldValue('password'),
  150. }
  151. axios({
  152. url: 'api/xcoa-mobile/v1/iamfinsysdatabase/testDbConnection',
  153. method: 'post',
  154. data: databaseBean,
  155. })
  156. .then((res) => {
  157. if (res.data.indexOf('成功') !== -1) {
  158. message.success(res.data, 1)
  159. } else {
  160. message.error(res.data, 1)
  161. }
  162. setTimeout(() => {
  163. this.connect = false
  164. }, 3000)
  165. })
  166. .catch((err) => {
  167. console.log(err)
  168. setTimeout(() => {
  169. this.connect = false
  170. }, 3000)
  171. })
  172. })
  173. .catch((err) => {
  174. console.log('必填校验失败:' + err)
  175. setTimeout(() => {
  176. this.connect = false
  177. }, 3000)
  178. })
  179. },
  180. // 编号验证是否重复
  181. validator(rule, value, callback) {
  182. value = encodeURIComponent(value)
  183. debounce(() => {
  184. axios
  185. .get(
  186. `api/xcoa-mobile/v1/iamfinsysdatabase/code?code=${value}&id=${this.$route.query
  187. .record || ''}`
  188. )
  189. .then((res) => {
  190. if (res?.data === true) {
  191. callback()
  192. } else {
  193. callback('数据源原编码已存在,不允许重复')
  194. }
  195. })
  196. }, 500)()
  197. },
  198. // 选择数据库之后生成对应的端口号
  199. // mysql:3306 oracle:1521 sql server:1433 db2:5000 postgresql:5432 dm:5236
  200. dbtypeChange(val) {
  201. if (val) {
  202. if (val.toUpperCase() === 'MYSQL') {
  203. this.$refs.docform.setFieldValue('port', 3306)
  204. } else if (val.toUpperCase() === 'DB2') {
  205. this.$refs.docform.setFieldValue('port', 5000)
  206. } else if (val.toUpperCase() === 'ORACLE') {
  207. this.$refs.docform.setFieldValue('port', 1521)
  208. } else if (val.toUpperCase() === 'SQLSERVER') {
  209. this.$refs.docform.setFieldValue('port', 1433)
  210. }
  211. }
  212. },
  213. saved() {
  214. this.close(true)
  215. },
  216. close(flag) {
  217. crossWindowWatcher.notifyChange(this.$route.fullPath, flag)
  218. window.close()
  219. },
  220. },
  221. }
  222. </script>
  223. <style module lang="scss">
  224. @use '@/common/design' as *;
  225. @import '@/webflow/sd-flow-form.scss';
  226. .connect-btn {
  227. float: right;
  228. font-weight: 400;
  229. font-size: 16px;
  230. top: 8px;
  231. cursor: pointer;
  232. margin-right: 10px;
  233. }
  234. </style>