$v) { $html[] = sprintf(Form::label("{$name}-{$k}", "%s {$v}"), Form::radio($name, $k, in_array($k, $selected), ['id' => "{$name}-{$k}"])); } return '
' . implode(' ', $html) . '
'; } } if (!function_exists('build_checkboxs')) { /** * 生成复选按钮组 * @param string $name * @param array $list * @param mixed $selected * @return string */ function build_checkboxs($name, $list = [], $selected = null) { $html = []; $selected = is_null($selected) ? [] : $selected; $selected = is_array($selected) ? $selected : explode(',', $selected); foreach ($list as $k => $v) { $html[] = sprintf(Form::label("{$name}-{$k}", "%s {$v}"), Form::checkbox($name, $k, in_array($k, $selected), ['id' => "{$name}-{$k}"])); } return '
' . implode(' ', $html) . '
'; } } if (!function_exists('build_category_select')) { /** * 生成分类下拉列表框 * @param string $name * @param string $type * @param mixed $selected * @param array $attr * @param array $header * @return string */ function build_category_select($name, $type, $selected = null, $attr = [], $header = []) { $tree = Tree::instance(); $tree->init(Category::getCategoryArray($type), 'pid'); $categorylist = $tree->getTreeList($tree->getTreeArray(0), 'name'); $categorydata = $header ? $header : []; foreach ($categorylist as $k => $v) { $categorydata[$v['id']] = $v['name']; } $attr = array_merge(['id' => "c-{$name}", 'class' => 'form-control selectpicker'], $attr); return build_select($name, $categorydata, $selected, $attr); } } if (!function_exists('build_toolbar')) { /** * 生成表格操作按钮栏 * @param array $btns 按钮组 * @param array $attr 按钮属性值 * @return string */ function build_toolbar($btns = null, $attr = []) { $auth = \app\admin\library\Auth::instance(); $controller = str_replace('.', '/', strtolower(think\Request::instance()->controller())); $btns = $btns ? $btns : ['refresh', 'add', 'edit', 'del', 'import']; $btns = is_array($btns) ? $btns : explode(',', $btns); $index = array_search('delete', $btns); if ($index !== false) { $btns[$index] = 'del'; } $btnAttr = [ 'refresh' => ['javascript:;', 'btn btn-primary btn-refresh', 'fa fa-refresh', '', __('Refresh')], 'add' => ['javascript:;', 'btn btn-success btn-add', 'fa fa-plus', __('Add'), __('Add')], 'edit' => ['javascript:;', 'btn btn-success btn-edit btn-disabled disabled', 'fa fa-pencil', __('Edit'), __('Edit')], 'del' => ['javascript:;', 'btn btn-danger btn-del btn-disabled disabled', 'fa fa-trash', __('Delete'), __('Delete')], 'import' => ['javascript:;', 'btn btn-info btn-import', 'fa fa-upload', __('Import'), __('Import')], ]; $btnAttr = array_merge($btnAttr, $attr); $html = []; foreach ($btns as $k => $v) { //如果未定义或没有权限 if (!isset($btnAttr[$v]) || ($v !== 'refresh' && !$auth->check("{$controller}/{$v}"))) { continue; } list($href, $class, $icon, $text, $title) = $btnAttr[$v]; //$extend = $v == 'import' ? 'id="btn-import-file" data-url="ajax/upload" data-mimetype="csv,xls,xlsx" data-multiple="false"' : ''; //$html[] = ' ' . $text . ''; if ($v == 'import') { $template = str_replace('/', '_', $controller); $download = ''; if (file_exists("./template/{$template}.xlsx")) { $download .= "
  • XLSX模版
  • "; } if (file_exists("./template/{$template}.xls")) { $download .= "
  • XLS模版
  • "; } if (file_exists("./template/{$template}.csv")) { $download .= empty($download) ? '' : "
  • "; $download .= "
  • CSV模版
  • "; } $download .= empty($download) ? '' : "\n "; if (!empty($download)) { $html[] = << EOT; } else { $html[] = ' ' . $text . ''; } } else { $html[] = ' ' . $text . ''; } } return implode(' ', $html); } } if (!function_exists('build_heading')) { /** * 生成页面Heading * * @param string $path 指定的path * @return string */ function build_heading($path = null, $container = true) { $title = $content = ''; if (is_null($path)) { $action = request()->action(); $controller = str_replace('.', '/', request()->controller()); $path = strtolower($controller . ($action && $action != 'index' ? '/' . $action : '')); } // 根据当前的URI自动匹配父节点的标题和备注 $data = Db::name('auth_rule')->where('name', $path)->field('title,remark')->find(); if ($data) { $title = __($data['title']); $content = __($data['remark']); } if (!$content) { return ''; } $result = '
    ' . $title . '' . $content . '
    '; if ($container) { $result = '
    ' . $result . '
    '; } return $result; } } if (!function_exists('dd')) { function dd($data) { echo '
    ';
            var_dump($data);
            die;
        }
    }
    
    if (!function_exists('getNewRand'))
    {
        /**
         * 获取字母数字随机数
         * @param int $len
         * @return string
         * @author matielong
         */
        function getNewRand($len = 4)
        {
            $chars_array = array(
                "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
                "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",
            );
            $charsLen = count($chars_array) - 1;
            $outputstr = "";
            for ($i=0; $i<$len; $i++)
            {
                $outputstr .= $chars_array[mt_rand(0, $charsLen)];
            }
            return $outputstr;
        }
    }
    
    if (!function_exists('ch2arr'))
    {
        /**
         * 字符串转换数组
         * @param $str
         * @return array
         */
        function ch2arr($str)
        {
            $length = mb_strlen($str, 'utf-8');
            $array = [];
            for ($i=0; $i<$length; $i++)
                $array[] = mb_substr($str, $i, 1, 'utf-8');
            return $array;
        }
    }
    
    if (!function_exists('exportOrderExcel')) {
        /**
         * execl数据导出
         * 应用场景:订单导出
         * @param string $title 模型名(如Member),用于导出生成文件名的前缀
         * @param array $cellName 表头及字段名
         * @param array $data 导出的表数据
         * 特殊处理:合并单元格需要先对数据进行处理
         * @throws PHPExcel_Exception
         * @throws PHPExcel_Reader_Exception
         * @throws PHPExcel_Writer_Exception
         */
        function exportOrderExcel($title,$cellName,$data)
        {
            //引入核心文件
            include EXTEND_PATH.'PHPExcel/PHPExcel.php';
            $objPHPExcel = new \PHPExcel();
            //定义配置
            $topNumber = 1;//表头有几行占用
            $xlsTitle = iconv('utf-8', 'gb2312', $title);//文件名称
    //		$fileName = $title.date('_YmdHis');//文件名称
            $fileName = $title;//文件名称
            $cellKey = 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',
                'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM',
                'AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ'
            );
            //写在处理的前面(了解表格基本知识,已测试)
    //     $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20);//所有单元格(行)默认高度
    //     $objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(20);//所有单元格(列)默认宽度
    //     $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(30);//设置行高度
    //     $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(30);//设置列宽度
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(18);//设置文字大小
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);//设置是否加粗
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);// 设置文字颜色
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置文字居左(HORIZONTAL_LEFT,默认值)中(HORIZONTAL_CENTER)右(HORIZONTAL_RIGHT)
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);//设置填充颜色
    //     $objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->getStartColor()->setARGB('FF7F24');//设置填充颜色
    //	   $objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
    
    
            //处理表头标题
    //		$objPHPExcel->getActiveSheet()->mergeCells('A1:'.$cellKey[count($cellName)-1].'1');//合并单元格(如果要拆分单元格是需要先合并再拆分的,否则程序会报错)
    //		$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1','订单信息');
    //		$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
    //		$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(18);
    //		$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    //		$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
    
    
            //处理表头
            foreach ($cellName as $k=>$v)
            {
                $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellKey[$k].$topNumber, $v[1]);//设置表头数据
    //			$objPHPExcel->getActiveSheet()->freezePane($cellKey[$k].($topNumber+1));//冻结窗口
                $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k].$topNumber)->getFont()->setBold(true);//设置是否加粗
                $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k].$topNumber)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);// 设置文字颜色
                $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k].$topNumber)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中
                if($v[3] > 0)//大于0表示需要设置宽度
                {
                    $objPHPExcel->getActiveSheet()->getColumnDimension($cellKey[$k])->setWidth($v[3]);//设置列宽度
                }
            }
    
            //处理数据
            foreach ($data as $k=>$v)
            {
                foreach ($cellName as $k1=>$v1)
                {
                    $objPHPExcel->getActiveSheet()->setCellValue($cellKey[$k1].($k+1+$topNumber), $v[$v1[0]]);
                    if(isset($v['end']) && $v['end'] > 0)
                    {
                        if($v1[2] == 1)//这里表示合并单元格
                        {
                            $objPHPExcel->getActiveSheet()->mergeCells($cellKey[$k1].$v['start'].':'.$cellKey[$k1].$v['end']);
                            $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k1].$v['start'])->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
                        }
                    }
                    if($v1[4] != "" && in_array($v1[4], array("LEFT","CENTER","RIGHT")))
                    {
                        $v1[4] = eval('return PHPExcel_Style_Alignment::HORIZONTAL_'.$v1[4].';');
                        //这里也可以直接传常量定义的值,即left,center,right;小写的strtolower
                        $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k1].($k+1+$topNumber))->getAlignment()->setHorizontal($v1[4]);
                    }
                }
            }
    
            ob_end_clean();//解决乱码核心 就在此处添加此函数
            //导出execl
            header('pragma:public');
            header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xlsx"');
            header("Content-Disposition:attachment;filename=$fileName.xlsx");//attachment新窗口打印inline本窗口打印
            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
            $objWriter->save('php://output');
            exit;
        }
    }