Umi Max 国际化使用

ReactElement内使用

import { FormattedMessage } from '@umijs/max';
<FormattedMessage id="project.tunnel.label" />

函数内使用

import { useIntl } from '@umijs/max';
const AppLayout = ({ children, version }: any) => {
  const intl = useIntl();
  const msg = intl.formatMessage({ id: 'project.menu.draw.index' });
}

外部文件使用

import { getIntl, getLocale } from '@umijs/max';
const intl = getIntl(getLocale());
message.error(intl.formatMessage({ id: error.response.data.message}));

injectIntl还没遇到需要的地方,暂时不了解用法。

php 加密解密调用

function encrypted($data)
{
    $key = "liumanaiqiaoqiaonicaibudao";
    $key = strtoupper(md5($key));
    $x = 0;
    $len = strlen($data);
    $l = strlen($key);
    $char = "";
    $str = "";
    for ($i = 0; $i < $len; $i++)
    {
        if ($x == $l)
        {
            $x = 0;
        }
        $char .= substr($key, $x, 1);
        $x++;
    }
    for ($i = 0; $i < $len; $i++)
    {
        $str .= substr("00" . (ord(substr($data, $i, 1)) + (ord(substr($char, $i, 1))) % 256), -3);
    }
    return $str;
}

function decrypt($data)
{
	$key = "liumanaiqiaoqiaonicaibudao";
	$key = strtoupper(md5($key));
    $x = 0;
    $len = strlen($data)/3;
    $l = strlen($key);
    $char = "";
    $str = "";
    for ($i = 0; $i < $len; $i++)
    {
        if ($x == $l) 
        {
         $x = 0;
        }
        $char .= substr($key, $x, 1);
        $x++;
    }
    
    for ($i = 0; $i < $len; $i++)
    {
        if (substr($data, $i*3, 3) < ord(substr($char, $i, 1)))
        {
            $str .= chr((substr($data, $i*3, 3) + 256) - ord(substr($char, $i, 1)));
        }
        else
        {
            $str .= chr(substr($data, $i*3, 3) - ord(substr($char, $i, 1)));
        }
    }
    return $str;
}
Function 解密字符串(字符串)
    解密字符串 = ""
    临时字符串 = ""
    秘钥 = "liumanaiqiaoqiaonicaibudao"
    秘钥 = Plugin.Encrypt.Md5String(秘钥)
    秘钥位置 = 1
    字符串长度 = Len(字符串)/3
    秘钥长度 = Len(秘钥)
    For i = 1 To 字符串长度
        If 秘钥位置 > 秘钥长度 Then 
            秘钥位置 = 1
        End If
        临时字符串 = 临时字符串 & Mid(秘钥,秘钥位置,1)
        秘钥位置 = 秘钥位置 + 1
    Next
    For i = 0 To 字符串长度 - 1
        If Mid(字符串, i*3 + 1, 3) < Asc(Mid(临时字符串, i + 1, 1)) Then 
            解密字符串 = 解密字符串 & Chr((Mid(字符串, i*3 + 1, 3) + 256) - Asc(Mid(临时字符串, i + 1, 1)))
        Else 
            解密字符串 = 解密字符串 & Chr((Mid(字符串, i*3 + 1, 3)) - Asc(Mid(临时字符串, i + 1, 1)))
        End If
    Next
End Function

Function 加密字符串(字符串)
    加密字符串 = ""
    临时字符串 = ""
    秘钥 = "liumanaiqiaoqiaonicaibudao"
    秘钥 = Plugin.Encrypt.Md5String(秘钥)
    秘钥位置 = 1
    字符串长度 = Len(字符串)
    秘钥长度 = Len(秘钥)
    For i = 1 To 字符串长度
        If 秘钥位置 > 秘钥长度 Then 
            秘钥位置 = 1
        End If
        临时字符串 = 临时字符串 & Mid(秘钥,秘钥位置,1)
        秘钥位置 = 秘钥位置 + 1
    Next
    For i = 1 To 字符串长度
        加密字符串 = 加密字符串 & Right("00" & (Asc(Mid(字符串,i,1)) + Asc(Mid(临时字符串,i,1)) Mod 256), 3)
    Next
End Function

thinkphp sqlserver could not find driver

windows 宝塔php安装sqlsrv

https://www.microsoft.com/en-us/download/details.aspx?id=20098

下载SQLSRV40.EXE,右键解压,复制对应ts或者nts64位到宝塔目录php的扩展文件夹ext里。

修改php.ini里扩展

extension=php_pdo_sqlsrv_7_nts_x64.dll
extension=php_sqlsrv_7_nts_x64.dll

宝塔php服务,重载配置。

下载 ODBC Driver:

Microsoft® ODBC Driver 11 for SQL Server® – Windows (支持Sql Server® 2005)

https://www.microsoft.com/zh-CN/download/details.aspx?id=36434

Microsoft® ODBC Driver 13 for SQL Server® – Windows + Linux (支持最新的SQL Server® 2016)

https://www.microsoft.com/zh-CN/download/details.aspx?id=50420

这里下一步下一步安装…

建议 安装ODBC Driver,根据自己的需要选择上面的地址下载并安装。

如果上面的ODBC版本太高,那么用这个低一点的 ODBC Driver 下载 https://files.cnblogs.com/files/wtcl/sqlserverodbc.zip

现在可以使用phpinfo() 来查看是否成功加载了 pdo_sqlsrv 模块。

Sequelize查询条件限制

查询条件限制
const Op = Sequelize.Op
 
[Op.and]: {a: 5}           // 且 (a = 5)
[Op.or]: [{a: 5}, {a: 6}]  // (a = 5 或 a = 6)
[Op.gt]: 6,                // id > 6
[Op.gte]: 6,               // id >= 6
[Op.lt]: 10,               // id < 10
[Op.lte]: 10,              // id <= 10
[Op.ne]: 20,               // id != 20
[Op.eq]: 3,                // = 3
[Op.not]: true,            // 不是 TRUE
[Op.between]: [6, 10],     // 在 6 和 10 之间
[Op.notBetween]: [11, 15], // 不在 11 和 15 之间
[Op.in]: [1, 2],           // 在 [1, 2] 之中
[Op.notIn]: [1, 2],        // 不在 [1, 2] 之中
[Op.like]: '%hat',         // 包含 '%hat'
[Op.notLike]: '%hat'       // 不包含 '%hat'
[Op.iLike]: '%hat'         // 包含 '%hat' (不区分大小写)  (仅限 PG)
[Op.notILike]: '%hat'      // 不包含 '%hat'  (仅限 PG)
[Op.regexp]: '^[h|a|t]'    // 匹配正则表达式/~ '^[h|a|t]' (仅限 MySQL/PG)
[Op.notRegexp]: '^[h|a|t]' // 不匹配正则表达式/!~ '^[h|a|t]' (仅限 MySQL/PG)
[Op.iRegexp]: '^[h|a|t]'    // ~* '^[h|a|t]' (仅限 PG)
[Op.notIRegexp]: '^[h|a|t]' // !~* '^[h|a|t]' (仅限 PG)
[Op.like]: { [Op.any]: ['cat', 'hat']} // 包含任何数组['cat', 'hat'] - 同样适用于 iLike 和 notLike
[Op.overlap]: [1, 2]       // && [1, 2] (PG数组重叠运算符)
[Op.contains]: [1, 2]      // @> [1, 2] (PG数组包含运算符)
[Op.contained]: [1, 2]     // <@ [1, 2] (PG数组包含于运算符)
[Op.any]: [2,3]            // 任何数组[2, 3]::INTEGER (仅限PG)
[Op.col]: 'user.organization_id' // = 'user'.'organization_id', 使用数据库语言特定的列标识符, 本例使用 PG

数码管码表

共阳
[0xC0 , 0xF9 , 0xA4 , 0xB0 , 0x99 , 0x92 , 0x82 , 0xF8 , 0x80 , 0x90 , 0x88 , 0x83 , 0xC6 , 0xA1 , 0x86 , 0x8E , 0xFF]
//0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 无显示
共阴
[0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d , 0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c , 0x39 , 0x5e , 0x79 , 0x71 , 0x00]
//0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 无显示