帆软决策平台数据连接界面库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
旭旭 1853994494 REPORT-91727 对用户输入的参数进行统一校验 DCM仓库也要改下 2 years ago
assets/scripts
config
i18n
lib
private
src
types
webpack
.eslintignore
.eslintrc
.gitignore
.npmrc
README.md
babel.config.js
index.html
jest.config.js
package.json
redis.js
tsconfig.json

README.md

Database Connection Manager

用于决策平台和设计器中管理数据连接的通用管理器

fineui

开始

安装依赖

yarn install

开始开发

yarn dev

决策平台开发:

A.项目运行

1. 工程decision-webui-dev添加代理(可跳过)

   webpack/webpack.config
                   "/plugin/dcm": {
                    pathRewrite: { "^/plugin/dcm": "" },
                    target: "http://localhost:10002",
                },

2. 工程decision-webui-dev引入

fr环境:templates/bundle.report.html bi环境:templates/bundle.bi.html

   // css 文件:
   <head>
   
   <link rel="stylesheet" type="text/css" href="/plugin/dcm/show.dev.css" />
   <link rel="stylesheet" type="text/css" href="http://localhost:10002/show.dev.css" />
   </head>
   // js 文件
   <script type="text/javascript" src="/plugin/dcm/show.dev.js"></script>

若未设1,将/plugin/dcm替换成http://localhost:10002亦可

3. 启动工程[decision-webui-dev]以及数据连接[desicion-webui-dcm]工程

4. 此时工程decision-webui-devhttp://localhost:9002/#management/connnection数据连接模块已替换成该工程

B.插件形式添加数据连接-数据库

1. 以多版本的tdsql为例 单一版本数据库不需drivers,versions,hasSchemas

BI.config("dec.connection.provider.datebase", function (provider) {
        BI.isFunction(provider.registerJdbcDatabase) && provider.registerJdbcDatabase({
            text: 'TDSQL', // 数据库名称
            databaseType: 'tdsql', // 数据库key
            driver: 'org.postgresql.Driver', // 默认驱动
            drivers: {
                "pgsql": ["org.postgresql.Driver"],
                "mysql": ["com.mysql.jdbc.Driver"]
            }, // 驱动可选项,version: array[driver],[0]为该版本的默认驱动
            versions: ["pgsql", "mysql"], // array[version]
            urls: {
                "org.postgresql.Driver": "jdbc:postgresql://hostname:port/database?finedbType=tdsql-pgsql",
                "com.mysql.jdbc.Driver": "jdbc:mysql://hostname:port/database?finedbType=tdsql-mysql"
            }, // urlkey : url 一个驱动对应一个url
            url: 'jdbc:postgresql://hostname:port/database?finedbType=tdsql-pgsql',
            commonly: false,
            internal: true,
            type: 'jdbc', 数据库类型
            hasSchema: true, // 默认是否支持模式
            hasSchemas: {
                "pgsql": true,
                "mysql": false,
            },是否支持模式 version: boolean
            kerberos: false, // 是否添加kerberos认证方式
        }, function (url) {
            var result = url.match(/^jdbc:(mysql|postgresql):\/\/([0-9a-zA-Z_\\.-]+)(:([0-9|port]+))?\/([0-9a-zA-Z_\\.]+)(.*)finedbType=([^&]+)(|(&.*))/i); // 匹配正则
            if (result) {
                return {
                    host: result[2], //主机
                    port: result[4] === "port" ? "" : result[4], // 端口
                    databaseName: result[5], // 数据库名称
                    version: result[7].split('-')[1] ?? "pgsql", // 版本 单版本不要返回这个
                };
            }
//适配原先tbase的url
            result = url.match(/^jdbc:postgresql:\/\/([0-9a-zA-Z_\\.-]+)(:([0-9|port]+))?\/([0-9a-zA-Z_\\.]+)(.*)/i);
            if (result) {
                return {
                    host: result[1],
                    port: result[3] === "port" ? "" : result[3],
                    databaseName: result[4],
                    version: "pgsql",
                };
            }
 
        });
    });

C 工程开发

1. 图片资源添加

工程decision-webui-dev decision-webui/dist/images/1x/icon/database decision-webui/dist/images/2x/icon/database

2. 国际化添加

工程decision-webui-dev decision-i18n/decision-main-i18n/src/main/resources/com/fr/decision/web/i18n

3. 版本控制

版本和平台保持一致

接口文档:

增加数据连接类型

使用BI.config,ConstantName名称为dec.constant.database.conf.connect.types,值为连接的名称

例如增加Redis的连接:

BI.config(ConstantPluginTyps, (datas: string[]) => [...datas, {
    text: 'Redis',
    databaseType: 'Redis',
    edit: '',
    show: '',
}]);

数据连接填写页面

edit属性值为填写组件shortcut的名称

数据连接展示页面

show属性值为组件shortcut的名称

示例

const DataBaseConfigProvider = 'dec.connection.provider.datebase';

const RedisShowName = 'dec.dcm.connection.plugin.redis.show';
const RedisEditName = 'dec.dcm.connection.plugin.redis.edit';
BI.config(DataBaseConfigProvider, function (provider) {
    provider.registerDatabaseType({
        text: "Redis",
        databaseType: "Redis",
        edit: "dec.dcm.connection.plugin.demo.edit",
        show: "dec.dcm.connection.plugin.demo.show",
    });
});

const RedisShow = BI.inherit(BI.Widget, {
    props: {
        formData: {
            url: '',
            port: '6379',
            password: '',
        },
    },
    render() {
        const o = this.options;
        
        return {
            type: 'bi.vertical',
            hgap: 15,
            vgap: 10,
            items: [
                {
                    type: 'bi.left',
                    items: [
                        {
                            type: 'bi.label',
                            cls: 'bi-font-bold',
                            width: 100,
                            textAlign: 'left',
                            text: '数据库地址',
                        },
                        {
                            type: 'bi.label',
                            text: o.formData.url,
                        },
                    ],
                },
                {
                    type: 'bi.left',
                    items: [
                        {
                            type: 'bi.label',
                            cls: 'bi-font-bold',
                            width: 100,
                            textAlign: 'left',
                            text: '端口号',
                        },
                        {
                            type: 'bi.label',
                            text: o.formData.port,
                        },
                    ],
                },
                {
                    type: 'bi.left',
                    items: [
                        {
                            type: 'bi.label',
                            cls: 'bi-font-bold',
                            width: 100,
                            textAlign: 'left',
                            text: '密码',
                        },
                        {
                            type: 'bi.label',
                            text: o.formData.password,
                        },
                    ],
                },
            ],
        };
    },
});
BI.shortcut(RedisShowName, RedisShow);

const RedisEdit = BI.inherit(BI.Widget, {
    props: {
        value: {
            url: '',
            port: '6379',
            password: '',
        },
    },
    render() {
        const o = this.options;
        
        return {
            type: 'bi.vertical',
            hgap: 15,
            vgap: 10,
            items: [
                {
                    type: 'bi.left',
                    items: [
                        {
                            type: 'bi.label',
                            cls: 'bi-font-bold',
                            width: 100,
                            textAlign: 'left',
                            text: '数据库地址',
                        },
                        {
                            type: 'bi.text_editor',
                            width: 300,
                            allowBlank: true,
                            ref: _ref => {
                                this.url = _ref;
                            },
                            text: o.value.url,
                        },
                    ],
                },
                {
                    type: 'bi.left',
                    items: [
                        {
                            type: 'bi.label',
                            cls: 'bi-font-bold',
                            width: 100,
                            textAlign: 'left',
                            text: '端口号',
                        },
                        {
                            type: 'bi.text_editor',
                            width: 300,
                            allowBlank: true,
                            ref: _ref => {
                                this.port = _ref;
                            },
                            text: o.value.port,
                        },
                    ],
                },
                {
                    type: 'bi.left',
                    items: [
                        {
                            type: 'bi.label',
                            cls: 'bi-font-bold',
                            width: 100,
                            textAlign: 'left',
                            text: '密码',
                        },
                        {
                            type: 'bi.text_editor',
                            width: 300,
                            allowBlank: true,
                            inputType: 'password',
                            ref: _ref => {
                                this.password = _ref;
                            },
                            text: o.value.password,
                        },
                    ],
                },
            ],
        };
    },
    getValue() {
        return {
            url: this.url.getValue(),
            port: this.port.getValue(),
            password: this.password.getValue(),
        };
    },
});
BI.shortcut(RedisEditName, RedisEdit);