123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- <template>
- <a-modal
- :title="title"
- :width="800"
- :visible="visible"
- :confirmLoading="confirmLoading"
- @ok="handleOk"
- @cancel="handleCancel"
- cancelText="关闭">
- <a-spin :spinning="confirmLoading">
- <a-form :form="form">
- <a-form-item
- :labelCol="labelCol"
- :wrapperCol="wrapperCol"
- label="数据源编码">
- <a-input placeholder="请输入数据源编码" :disabled="!!model.id" v-decorator="['code', validatorRules.code]"/>
- </a-form-item>
- <a-form-item
- :labelCol="labelCol"
- :wrapperCol="wrapperCol"
- label="数据源名称">
- <a-input placeholder="请输入数据源名称" v-decorator="['name', validatorRules.name]"/>
- </a-form-item>
- <a-form-item
- :labelCol="labelCol"
- :wrapperCol="wrapperCol"
- label="数据库类型">
- <j-dict-select-tag placeholder="请选择数据库类型" dict-code="database_type" triggerChange v-decorator="['dbType', validatorRules.dbType]" @change="handleDbTypeChange"/>
- </a-form-item>
- <a-form-item
- :labelCol="labelCol"
- :wrapperCol="wrapperCol"
- label="驱动类">
- <a-input placeholder="请输入驱动类" v-decorator="['dbDriver', validatorRules.dbDriver]"/>
- </a-form-item>
- <a-form-item
- :labelCol="labelCol"
- :wrapperCol="wrapperCol"
- label="数据源地址">
- <a-input placeholder="请输入数据源地址" v-decorator="['dbUrl', validatorRules.dbUrl]"/>
- </a-form-item>
- <!-- <a-form-item
- :labelCol="labelCol"
- :wrapperCol="wrapperCol"
- label="数据库名称">
- <a-input placeholder="请输入数据库名称" v-decorator="['dbName', validatorRules.dbName]"/>
- </a-form-item>-->
- <a-form-item
- :labelCol="labelCol"
- :wrapperCol="wrapperCol"
- label="用户名">
- <a-input placeholder="请输入用户名" v-decorator="['dbUsername', validatorRules.dbUsername]"/>
- </a-form-item>
- <a-form-item
- :labelCol="labelCol"
- :wrapperCol="wrapperCol"
- label="密码">
- <a-row :gutter="8">
- <a-col :span="21">
- <a-input-password placeholder="请输入密码" v-decorator="['dbPassword', validatorRules.dbPassword]"/>
- </a-col>
- <a-col :span="3">
- <a-button type="primary" size="small" style="width: 100%" @click="handleTest">测试</a-button>
- </a-col>
- </a-row>
- </a-form-item>
- <a-form-item
- :labelCol="labelCol"
- :wrapperCol="wrapperCol"
- label="备注">
- <a-textarea placeholder="请输入备注" v-decorator="['remark', {}]"/>
- </a-form-item>
- </a-form>
- </a-spin>
- </a-modal>
- </template>
- <script>
- import pick from 'lodash.pick'
- import { httpAction, postAction } from '@/api/manage'
- import { validateDuplicateValue } from '@/utils/util'
- export default {
- name: 'SysDataSourceModal',
- components: {},
- data() {
- return {
- title: '操作',
- visible: false,
- model: {},
- labelCol: {
- xs: { span: 24 },
- sm: { span: 5 },
- },
- wrapperCol: {
- xs: { span: 24 },
- sm: { span: 16 },
- },
- confirmLoading: false,
- form: this.$form.createForm(this),
- validatorRules: {
- code: {
- validateFirst: true,
- rules: [
- { required: true, message: '请输入数据源编码!' },
- {
- validator: (rule, value, callback) => {
- let pattern = /^[a-z|A-Z][a-z|A-Z\d_-]{0,}$/
- if (!pattern.test(value)) {
- callback('编码必须以字母开头,可包含数字、下划线、横杠')
- } else {
- validateDuplicateValue('sys_data_source', 'code', value, this.model.id, callback)
- }
- }
- }
- ]
- },
- name: { rules: [{ required: true, message: '请输入数据源名称!' }] },
- dbType: { rules: [{ required: true, message: '请选择数据库类型!' }] },
- dbDriver: { rules: [{ required: true, message: '请输入驱动类!' }] },
- dbUrl: { rules: [{ required: true, message: '请输入数据源地址!' }] },
- dbName: { rules: [{ required: true, message: '请输入数据库名称!' }] },
- dbUsername: { rules: [{ required: true, message: '请输入用户名!' }] },
- dbPassword: { rules: [{ required: false, message: '请输入密码!' }] }
- },
- url: {
- add: '/sys/dataSource/add',
- edit: '/sys/dataSource/edit',
- },
- dbDriverMap: {
- // MySQL 数据库
- '1': { dbDriver: 'com.mysql.jdbc.Driver' },
- //MySQL5.7+ 数据库
- '4': { dbDriver: 'com.mysql.cj.jdbc.Driver' },
- // Oracle
- '2': { dbDriver: 'oracle.jdbc.OracleDriver' },
- // SQLServer 数据库
- '3': { dbDriver: 'com.microsoft.sqlserver.jdbc.SQLServerDriver' },
- // marialDB 数据库
- '5': { dbDriver: 'org.mariadb.jdbc.Driver' },
- // postgresql 数据库
- '6': { dbDriver: 'org.postgresql.Driver' },
- // 达梦 数据库
- '7': { dbDriver: 'dm.jdbc.driver.DmDriver' },
- // 人大金仓 数据库
- '8': { dbDriver: 'com.kingbase8.Driver' },
- // 神通 数据库
- '9': { dbDriver: 'com.oscar.Driver' },
- // SQLite 数据库
- '10': { dbDriver: 'org.sqlite.JDBC' },
- // DB2 数据库
- '11': { dbDriver: 'com.ibm.db2.jcc.DB2Driver' },
- // Hsqldb 数据库
- '12': { dbDriver: 'org.hsqldb.jdbc.JDBCDriver' },
- // Derby 数据库
- '13': { dbDriver: 'org.apache.derby.jdbc.ClientDriver' },
- // H2 数据库
- '14': { dbDriver: 'org.h2.Driver' },
- // 其他数据库
- '15': { dbDriver: '' }
- },
- dbUrlMap: {
- // MySQL 数据库
- '1': { dbUrl: 'jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false' },
- //MySQL5.7+ 数据库
- '4': { dbUrl: 'jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai' },
- // Oracle
- '2': { dbUrl: 'jdbc:oracle:thin:@127.0.0.1:1521:ORCL' },
- // SQLServer 数据库
- '3': { dbUrl: 'jdbc:sqlserver://127.0.0.1:1433;SelectMethod=cursor;DatabaseName=jeecgboot' },
- // Mariadb 数据库
- '5': { dbUrl: 'jdbc:mariadb://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useSSL=false' },
- // Postgresql 数据库
- '6': { dbUrl: 'jdbc:postgresql://127.0.0.1:5432/jeecg-boot' },
- // 达梦 数据库
- '7': { dbUrl: 'jdbc:dm://127.0.0.1:5236/?jeecg-boot&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8' },
- // 人大金仓 数据库
- '8': { dbUrl: 'jdbc:kingbase8://127.0.0.1:54321/jeecg-boot' },
- // 神通 数据库
- '9': { dbUrl: 'jdbc:oscar://192.168.1.125:2003/jeecg-boot' },
- // SQLite 数据库
- '10': { dbUrl: 'jdbc:sqlite://opt/test.db' },
- // DB2 数据库
- '11': { dbUrl: 'jdbc:db2://127.0.0.1:50000/jeecg-boot' },
- // Hsqldb 数据库
- '12': { dbUrl: 'jdbc:hsqldb:hsql://127.0.0.1/jeecg-boot' },
- // Derby 数据库
- '13': { dbUrl: 'jdbc:derby://127.0.0.1:1527/jeecg-boot' },
- // H2 数据库
- '14': { dbUrl: 'jdbc:h2:tcp://127.0.0.1:8082/jeecg-boot' },
- // 其他数据库
- '15': { dbUrl: '' }
- }
- }
- },
- created() {
- },
- methods: {
- add() {
- this.edit({})
- },
- edit(record) {
- this.form.resetFields()
- this.model = Object.assign({}, record)
- this.visible = true
- this.$nextTick(() => {
- this.form.setFieldsValue(pick(this.model, 'code', 'name', 'remark', 'dbType', 'dbDriver', 'dbUrl', 'dbName', 'dbUsername', 'dbPassword'))
- })
- },
- close() {
- this.$emit('close')
- this.visible = false
- },
- handleOk() {
- // 触发表单验证
- this.form.validateFields((err, values) => {
- if (!err) {
- this.confirmLoading = true
- let formData = Object.assign(this.model, values)
- let httpUrl = this.url.add, method = 'post'
- if (this.model.id) {
- httpUrl = this.url.edit
- //method = 'put'
- // 由于编码的特殊性,所以不能更改
- formData['code'] = undefined
- }
- httpAction(httpUrl, formData, method).then((res) => {
- if (res.success) {
- this.$message.success(res.message)
- this.$emit('ok')
- this.close()
- } else {
- this.$message.warning(res.message)
- }
- }).finally(() => {
- this.confirmLoading = false
- })
- }
- })
- },
- handleCancel() {
- this.close()
- },
- // 测试数据源配置是否可以正常连接
- handleTest() {
- let keys = ['dbType', 'dbDriver', 'dbUrl', 'dbName', 'dbUsername', 'dbPassword']
- // 获取以上字段的值,并清除校验状态
- let fieldsValues = this.form.getFieldsValue(keys)
- let setFields = {}
- keys.forEach(key => setFields[key] = { value: fieldsValues[key], errors: null })
- // 清除校验状态,目的是可以让错误文字闪烁
- this.form.setFields(setFields)
- // 重新校验
- this.$nextTick(() => {
- this.form.validateFields(keys, (errors, values) => {
- if (!errors) {
- let loading = this.$message.loading('连接中……', 0)
- postAction('/online/cgreport/api/testConnection', fieldsValues).then(res => {
- if (res.success) {
- this.$message.success('连接成功')
- } else throw new Error(res.message)
- }).catch(error => {
- this.$warning({ title: '连接失败', content: error.message || error })
- }).finally(() => loading())
- }
- })
- })
- },
- // 数据库类型更改时,联动更改数据库驱动
- handleDbTypeChange(val) {
- let dbDriver = this.dbDriverMap[val]
- let dbUrl = this.dbUrlMap[val]
- if (dbDriver) {
- this.form.setFieldsValue(dbDriver)
- }
- if (dbUrl) {
- this.form.setFieldsValue(dbUrl)
- }
- },
- }
- }
- </script>
- <style lang="less" scoped></style>
|