# 0551shengteng
**Repository Path**: adymilk/0551shengteng
## Basic Information
- **Project Name**: 0551shengteng
- **Description**: 合肥盛腾网站
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2018-11-21
- **Last Updated**: 2024-05-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# H-UI+TP5 档案管理系统
## 运行环境要求
- php 5.4
- composer 依赖包管理工具
- git
## 安装步骤
1、下载项目代码道本地
`git clone `后面接项目地址
2、在项目根目录下 安装依赖包
`composer uodate`
3、创建数据库名字并且导入数据库表结构(.sql)文件
> 数据库名在 `项目根目录/application/datebase.php` 查看。(.sql文件在项目根目录)
## 功能模块介绍
- 用户权限管理(不同用户可以有不同的访问权限)
- 消息通知管理(新消息声音通知和桌面弹窗)
### Q:遇到的问题
- 1.1 上传图片过大,无法上传
### A:解决方法
1.1 修改 `php.ini` 配置
- upload_max_filesize = 200M
- post_max_size = 200M
- memory_limit = 200M
- 重启apache
### Q:TP5 官方多图上传文档无法使用
````
public function upload(){
// 获取表单上传文件
$files = request()->file('image');
foreach($files as $file){
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
if($info){
// 成功上传后 获取上传信息
// 输出 jpg
echo $info->getExtension();
// 输出 42a79759f284b767dfcb2a0197904287.jpg
echo $info->getFilename();
}else{
// 上传失败获取错误信息
echo $file->getError();
}
}
}
````
### A:可改为如下即可
````
public function upload(){
// 获取表单上传文件
$files = request()->file('image');
foreach($files as $file){
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
if($info){
//注意此处 echo 会导致循环中断,不可使用
}else{
// 上传失败获取错误信息
echo $file->getError();
}
}
}
````
### 数据分组换行输出
````
{volist name="list" id="vo" mod="6"}
{eq name="mod" value="2"}
{/eq}
{/volist}
````
- 第1行的 mod 是指,你要显示几条记录;
- 第2行的 value 是到了第几个换行(从0开始,0表示第1个,1表示第2个...),
- 这里是3,也就是到了第4个就换行。即:第5条记录开始是第2行。
- [详细介绍](http://www.thinkphp.cn/topic/5890.html)
### Q:图片上传裁剪
### Q:tp5分页 变量名必须是 $list吗?
```
{$list->render()}
```
#### A:
### taskList
- 数据表数据创建时间和修改时间要分开
- 修改上传的图片之前删除旧照片
- 优化新闻修改重复代码
> Q:tp5 如何验证用户是否登录?
> A: - TP提供了一个自动执行的函数_initialize(), 你创建一个公共控制器CommonController.php文件
```php
public function _initialize()
{
if (!Session::has('curUser','think')){
$this->error('请先登录!','User/login',null,1);
}
}
```
- 之后所有的控制器都继承这个公共控制器
```php
class Index extends Common
{
public function index(){
}
}
```
# tp5 多文件上传问题!只有一张图片
解决办法:修改框架thinkphp\library\think\File.php文件中,大概在348行开始。
[github在此处已经表明修改部分](https://github.com/adymilk/ShengTeng-Group/commit/1aa29add9f6b065c4d1fcad05f6ad0903901698a)
[详情点击这里查看解决方法](https://www.csweigou.com/article/1858.html)
# Q:解决后台添加案例用户可能重复提交的问题。
## A:解决方案
- 用隐藏体按钮,然后弹出一个模态框提示信息:数据真正提交中,请稍等
# url中文传参问题
url直接拼接中文会引起乱码问题,可用此方法解决
```
?c=city&city=
```
# banner图片上传思路图
选择图片->ajax提交到后台->移动到指定目录
## 导出数据到表格
```php
/**
* excel表格导出
* @param string $fileName 文件名称
* @param array $headArr 表头名称
* @param array $data 要导出的数据
* @throws PHPExcel_Exception
* @throws PHPExcel_Reader_Exception
* @throws PHPExcel_Writer_Exception
*/
function excelExport($fileName,$headArr,$data) {
$fileName .= "_" . date("Y_m_d", Request::instance()->time()) . ".xls";
$objPHPExcel = new \PHPExcel();
$objPHPExcel->getProperties();
$key = ord("A"); // 设置表头
foreach ($headArr as $v) {
$colum = chr($key);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
$key += 1;
}
$column = 2;
$objActSheet = $objPHPExcel->getActiveSheet();
foreach ($data as $key => $rows) { // 行写入
$span = ord("A");
foreach ($rows as $keyName => $value) { // 列写入
$objActSheet->setCellValue(chr($span) . $column, $value);
$span++;
}
$column++;
}
$fileName = iconv("utf-8", "gb2312", $fileName); // 重命名表
$objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename='$fileName'");
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output'); // 文件通过浏览器下载
exit();
}
```
## 发送邮件
- 第一步:使用 `composer` 安装 `phpmailer` 扩展
```php
composer require phpmailer/phpmailer
```
- 编写公共方法
```php
/**
* 发送邮件方法
* @param string $to:接收者邮箱地址
* @param string $title:邮件的标题
* @param string $content:邮件内容
* @return boolean true:发送成功 false:发送失败
*/
function sendMail($to,$title,$content){
//实例化PHPMailer核心类
$mail = new PHPMailer();
//是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
$mail->SMTPDebug = 1;
//使用smtp鉴权方式发送邮件
$mail->isSMTP();
//smtp需要鉴权 这个必须是true
$mail->SMTPAuth=true;
//链接qq域名邮箱的服务器地址
$mail->Host = 'smtp.qq.com';
//设置使用ssl加密方式登录鉴权
$mail->SMTPSecure = 'ssl';
//设置ssl连接smtp服务器的远程服务器端口号,以前的默认是25,但是现在新的好像已经不可用了 可选465或587
$mail->Port = 465;
//设置smtp的helo消息头 这个可有可无 内容任意
$mail->Helo = 'Hello smtp.qq.com Server';
//设置发件人的主机域 可有可无 默认为localhost 内容任意,建议使用你的域名
$mail->Hostname = 'localhost';
//设置发送的邮件的编码 可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码
$mail->CharSet = 'UTF-8';
//设置发件人姓名(昵称) 任意内容,显示在收件人邮件的发件人邮箱地址前的发件人姓名
$mail->FromName = '亲爱的管理员';
//smtp登录的账号 这里填入字符串格式的qq号即可
$mail->Username ='924114103';
//smtp登录的密码 使用生成的授权码 你的最新的授权码
$mail->Password = 'lfwhrsdxqobhbddc';
//设置发件人邮箱地址 这里填入上述提到的“发件人邮箱”
$mail->From = '924114103@qq.com';
//邮件正文是否为html编码 注意此处是一个方法 不再是属性 true或false
$mail->isHTML(true);
//设置收件人邮箱地址 该方法有两个参数 第一个参数为收件人邮箱地址 第二参数为给该地址设置的昵称 不同的邮箱系统会自动进行处理变动 这里第二个参数的意义不大
$mail->addAddress($to,'测试通知');
//添加多个收件人 则多次调用方法即可
// $mail->addAddress('xxx@qq.com','lsgo在线通知');
//添加该邮件的主题
$mail->Subject = $title;
//添加邮件正文 上方将isHTML设置成了true,则可以是完整的html字符串 如:使用file_get_contents函数读取本地的html文件
$mail->Body = $content;
//为该邮件添加附件 该方法也有两个参数 第一个参数为附件存放的目录(相对目录、或绝对目录均可) 第二参数为在邮件附件中该附件的名称
// $mail->addAttachment('./d.jpg','mm.jpg');
//同样该方法可以多次调用 上传多个附件
// $mail->addAttachment('./Jlib-1.1.0.js','Jlib.js');
}
- 函数调用
```
## tp5 上传文件后反斜杠导致图片路径错误问题
tp5 在WINDWOS环境下上传图片、文件的路径都是反斜杠(\)形式保存到数据的,需要转成斜杠(/)
比如上传后的图片路径`20180914\a6587063b2abbda94058120dbf1c7dad.png`
要转为:`20180914/a6587063b2abbda94058120dbf1c7dad.png`
$getSaveName=str_replace("\\","/",$info->getSaveName());//把反斜杠(\)替换成斜杠(/) 因为在windows下上传路是反斜杠径20180914\a6587063b2abbda94058120dbf1c7dad.png

[来源链接](https://blog.csdn.net/haibo0668/article/details/82743956)
## tp5 判断数值是否为空
````
{empty name="name"}
name为空
{else /}
name不为空
````
## tp5 volist 控制前5条数据输出格式
```angular2html
{volist name='list' id='vo' offset='0' length='10' key='k'}
{if condition="$k == 5">前5条输出的数据可以看到我{/if}
{/volist}
```
## tp5 分页保留原来的参数
```php
$list = Db::name('decoration_case')
->where($map)
->order('case_create_time desc')
->alias('a')
->join('designer b','a.designer_id = b.id')
->paginate(8,false, [
'query' => Request::instance()->param(),//不丢失已存在的url参数
]);
```
## 前端 ajax 操作 通过 form.serialize() 无法获取 file 文件
> 解决办法
- 1. 给 form 添加一个 id ,名为 `uploadForm`
```angular2html
```
```javascript
var formData = new FormData($( "#uploadForm" )[0]);
$.ajax({
type: "POST",
url: "/front/api/orderAdd",
data : formData,//上面的formData
async: false,
cache: false,
contentType: false,
processData: false,
success: function(data) {
}
});
```
## 文字滚动(跑马灯)
```html
```
## 动态数字滚动特效插件
https://github.com/HubSpot/odometer