| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 | <?php// 应用公共文件/** *  * @param type $algo * @param type $password * @param type $salt * @param type $hash_iterations * @return type */function simple_hash($algo = 'md5', $password = '', $salt = '', $hash_iterations = 2) {    $res = '';    $pass = $salt . $password;    $encoded = hash($algo, $pass, true);    $iteration = $hash_iterations - 1;    if ($iteration > 0) {        for ($i = 0; $i < $iteration; $i++) {            $encoded = hash($algo, $encoded, true);        }    }    $tmp = unpack('H*', $encoded);    if (!empty($tmp) && !empty($tmp[1])) {        $res = $tmp[1];    }    return $res;}/** * 检查权限 * @param type $url * @param type $old_url * @return type */function chkCommission($url, $old_url) {    return app\common\api\MenuApi::chkPermission($url, $old_url);}/** * 随机字符ID * @return type */function getStringId() {    $day = random_int(10, 30);    $time = strtotime("-4 years -6 months -" . $day . " days");    $randnum = random_int(100000000, 999999999);    $randnum = str_shuffle($randnum);    return $time . $randnum;}function isNullOrEmpty($obj) {    if (!$obj || $obj == "" || !isset($obj))        return "";    return $obj;}function getTreeList($array, $id_field = "id", $pid_field = "pid", $value = "0") {    static $result = [];    foreach ($array as $key => $item) {        if ($value == $item[$pid_field]) {            $result[] = $item;            unset($array[$key]);            getTreeList($array, $id_field, $pid_field, $item[$id_field]);        }    }    return $result;}/** * 读取excel * @param type $filepath * @param type $sheetIndex * @return type */function getExcelDatas($filepath, $sheetIndex = 0) {    $reader_type = \PHPExcel_IOFactory::identify($filepath);    $reader = \PHPExcel_IOFactory::createReader($reader_type);    $phpexcel = $reader->load($filepath);    $sheet = $phpexcel->getSheet($sheetIndex);    return $sheet->toArray();}/** * 导出excel * @param type $columns 列标题 * @param type $rows 内容 * @param string $filename 文件名 * @param string $settings 样式批设置 * @param type $sheetname sheet标题 * @param type $saveurl 保存位置 * @param type $author 作者 */function export($columns, $rows, $filename = "jjrcw", $settings = [], $sheetname = "sheet1", $saveurl = "php://output", $author = "晋江人才网") {    $datatype = new \PhpOffice\PhpSpreadsheet\Cell\DataType;    $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();    $spreadsheet->getProperties()->setCreator($author)            ->setLastModifiedBy($author)            ->setTitle($filename)            ->setSubject($filename);    $spreadsheet->setActiveSheetIndex(0);    $objPHPExcel = $spreadsheet->getActiveSheet();    $objPHPExcel->setTitle($sheetname);    $filename .= "_" . time();    $titleStartLine = 1;    $rowStartLine = $titleStartLine + 1;    $colCount = count($columns);    $rowCount = count($rows);    //设置表头    for ($i = 0; $i < $colCount; $i++) {        $objPHPExcel->setCellValue(getExcelColumnByIndex($i) . $titleStartLine, $columns[$i]);    }    //设置正文内容    for ($i = 0; $i < $rowCount; $i++) {        for ($n = 0; $n < $colCount; $n++) {            if (is_numeric($rows[$i][$n]) && strlen($rows[$i][$n]) > 17) {                //超过17位的数字转成文本方以免被转化为科学数                $objPHPExcel->setCellValueExplicit(getExcelColumnByIndex($n) . ($rowStartLine + $i), $rows[$i][$n], $datatype::TYPE_STRING);            } else {                $objPHPExcel->setCellValue(getExcelColumnByIndex($n) . ($rowStartLine + $i), $rows[$i][$n]);            }        }    }    $objPHPExcel->getDefaultColumnDimension()->setWidth(16); //默认列宽    $objPHPExcel->getDefaultRowDimension()->setRowHeight(30); //默认列高    //样式设置    $settings = $settings ?: getCommonExcelSetting($colCount, $rowCount);    foreach ($settings as $type => $cfg) {        switch ($type) {            case "width":                for ($i = 0; $i < count($cfg); $i++) {                    $objPHPExcel->getColumnDimension($cfg[$i][0])->setWidth($cfg[$i][1]);                }                break;            case "height":                for ($i = 0; $i < count($cfg); $i++) {                    $objPHPExcel->getRowDimension($cfg[$i][0])->setRowHeight($cfg[$i][1]);                }                break;            case "background-color":                for ($i = 0; $i < count($cfg); $i++) {                    $objPHPExcel->getStyle($cfg[$i][0])->getFill()->setFillType(PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor($cfg[$i][1])->setARGB($cfg[$i][1]);                }                break;            case "border":                $objPHPExcel->getStyle($cfg)->applyFromArray(array(                    "borders" => array(                        "allBorders" => array(                            'borderStyle' => PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN                        )                    )                ));                break;            case "align":                for ($i = 0; $i < count($cfg); $i++) {                    switch ($cfg[$i][1]) {                        case "left":                            $hAlign = PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT;                            break;                        case "right":                            $hAlign = PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT;                            break;                        case "hCenter":                            $hAlign = PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER;                            break;                        case "hJustify":                            $hAlign = PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_JUSTIFY;                            break;                        case "top":                            $vAlign = PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_TOP;                            break;                        case "bottom":                            $vAlign = PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_BOTTOM;                            break;                        case "vCenter":                            $vAlign = PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER;                            break;                        case "vJustify":                            $vAlign = PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_JUSTIFY;                            break;                    }                    $align = [];                    if ($hAlign) {                        $align["horizontal"] = $hAlign;                    }                    if ($vAlign) {                        $align["vertical"] = $vAlign;                    }                    $objPHPExcel->getStyle($cfg[$i][0])->applyFromArray([                        "alignment" => $align                    ]);                }                break;            case "color":                for ($i = 0; $i < count($cfg); $i++) {                    $objPHPExcel->getStyle($cfg[$i][0])->getFont()->getColor()->setARGB($cfg[$i][1]);                }                break;            case "wrap":                for ($i = 0; $i < count($cfg); $i++) {                    $objPHPExcel->getStyle($cfg[$i])->getAlignment()->setWrapText(true); //cellvalue包含\n设为自动换行                }                break;        }    }    header('Content-Type: application/vnd.ms-excel');    header('Content-Disposition: attachment;filename="' . $filename . '"');    $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xls($spreadsheet);    $writer->save($saveurl);    //删除临时的sheet    $spreadsheet->disconnectWorksheets();    unset($spreadsheet);    exit;}/** * 根据传入的数值(游标),从26个英文字母的数组中查询,返回excel列标 * @param int $index 游标从0开始 * @return string 返回列标 */function getExcelColumnByIndex(int $index) {    $letters = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');    if ($letters[$index])        return $letters[$index];    $rowIndex = floor($index / 26) - 1;    $colIndex = $index % 26;    return $letters[$rowIndex] . $letters[$colIndex];}/** * 公共的excel设置 * @return type */function getCommonExcelSetting($columns, $rows) {    return $settings = [        "background-color" => [[sprintf("A1:%s1", getExcelColumnByIndex($columns - 1)), "0066CC"]],        "color" => [[sprintf("A1:%s1", getExcelColumnByIndex($columns - 1)), "FFFFFF"]],        "border" => sprintf("A1:%s%d", getExcelColumnByIndex($columns - 1), $rows + 1),        "wrap" => [sprintf("A2:%s%d", getExcelColumnByIndex($columns - 1), $rows + 1)],        "align" => [[sprintf("A1:%s%d", getExcelColumnByIndex($columns - 1), $rows + 1), "hCenter"], [sprintf("A1:%s%d", getExcelColumnByIndex($columns - 1), $rows + 1), "vCenter"]]    ];}/** * 检查是不是excel格式,不确定是否都是可用文件,主要还是第一和最后一个比较常见 * @param type $mime * @return type */function isExcelFile($mime) {    return in_array($mime, [        "application/vnd.ms-excel",        "application/msexcel",        "application/x-msexcel",        "application/x-ms-excel",        "application/x-excel",        "application/x-dos_ms_excel",        "application/xls",        "application/x-xls",        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"    ]);}/** * 获取主机名带协议 * @return http[s]://xxxx */function getHostWithProtocol() {    $protocol = (strpos(strtolower($_SERVER['SERVER_PROTOCOL']), 'http/2.0') !== false || $_SERVER["HTTPS"] == "on" || $_SERVER["REQUEST_SCHEME"] == "https" ? 'https' : 'http') . "://";    return $protocol . $_SERVER["HTTP_HOST"];}/** * 获得上传文件的路径 * @param $path * @return string */function getStoragePath($path) {    if (!$path)        return "";    if (strpos($path, "jjrcw") === 0) {        $path = "https://rc.jucai.gov.cn/ftp/{$path}";    } else {        $path = getHostWithProtocol() . "/storage/{$path}";    }    if (isImage($path))        return $path;    return getFileView($path);}function getFileView($path) {    //$complete_path = "https://report.jinjianghc.com/" . getStoragePath($path);    return "https://fileview.jinjianghc.com/onlinePreview?url=" . base64_encode($path);}function isImage($filename) {    $types = '.gif|.jpeg|.png|.bmp'; //定义检查的图片类型    try {        $info = getimagesize($filename);        if ($info && stripos($types, image_type_to_extension($info['2'])) !== false) {            return true;        }        return false;    } catch (\think\exception $e) {        //文件不存在,根据拓展名返回        $types = "gif|jpg|jpeg|png|bmp";        $pathinfo = pathinfo($filename);        $ext = $pathinfo["extension"];        if ($pathinfo && $ext && stripos($types, $ext) !== false) {            return true;        }        return false;    }}function chkEnterpriseFull($ep) {    $checkEnterpriseFullFields = ["industryFieldNew", "enterpriseType", "bankCard", "bankNetwork", "bank", "bankImg", "domainImg", "beian"];    $errorCounts = 0;    while ($chk = array_shift($checkEnterpriseFullFields)) {        if ($ep[$chk] == null)            $errorCounts++;    }    if ($ep->special == 0 && $errorCounts > 0) {        echo sprintf("<script>"                . "parent.layer.confirm('系统升级,您的资料需要同步更新,请移步机构用户进行修改【机构信息变更】。',"                . "function(){"                . "var url='/enterprise/index/centerPage';"                . "top.$('a.J_menuItem[href=\"'+url+'\"]').click();clkTab();"                . "},function(){parent.layer.closeAll();});function clkTab(){setTimeout(function(){if(top.$('iframe.J_iframe[data-id=\"/enterprise/index/centerPage\"]').contents().find('a[href=\"#tab-2\"]').length==1){"                . "top.$('iframe.J_iframe[data-id=\"/enterprise/index/centerPage\"]').contents().find('*.active').removeClass('active');"                . "top.$('iframe.J_iframe[data-id=\"/enterprise/index/centerPage\"]').contents().find('ul.nav-tabs li').eq(1).addClass('active');"                . "top.$('iframe.J_iframe[data-id=\"/enterprise/index/centerPage\"]').contents().find('#tab-2').addClass('active');parent.layer.closeAll();"                . "}else{clkTab();}},20);};"                . "</script>");        return false;    }    return true;}
 |