fastadmin批量导入的坑——导入失败?日期转换时间戳?日期早了8小时?二三级用户没批量导入权限?
1:
首先,修改assets/js/wxcms/xxxx.js的Table.api.init({})
增加一行
import_url: 'wxcms/xxxx/import',
顺便说一下批量导出的按钮可以在这个文件的table.bootstrapTable里添加红框区域内容即可
2:
然后再到application/admin/view/wxcms/xxxx/index.html新增红框内容
3:然后到application/admin/controller/wxcms/xxxx.php往控制器里增加一个方法
贴心小棉袄已经为各位大佬贴出下面代代码:
public function import(){return parent::import();}
4、登录管理员账号,就发现界面显示了一个导入按钮
怀着激动的心,颤抖的手,点击导入按钮,哟,弹出文件选择窗口了,竟然就这样可以了?内心默默赞一句
好家伙,这么方便!
然后按下导出按钮,导出了一份数据,主要是想获取表头,懒得自己再写表头,然后情况所有数据,留下一条测试数据稍作修改打算测测。
然后把这个文件丢进导入,哦豁!!!绿窗弹出操作成功!!!不会吧不会吧 做完了?我还丧心病狂的报了一天工期,10分钟搞好了???
然后默默赞叹自己真棒棒,一边打算看看新数据,
完犊子了,不是说操作成功吗?怎么列表没有新增数据。
5、找问题
吾日三省吾身,我错哪了,我错哪了,我错哪了?
提示绿绿的操作成功,没有报错返回,但凡它warn一下,红一下,我也能有点方向,如今只能先去数据库康康有没有数据,不看不知道,一看吓一跳,好家伙,一半数据进去了,一半没有,也没找到规律
在/library/traits/Backend.php里的protected function import(){}里看了半天,发现下面这里,原来是将表头和数据库字段的备注做匹配,匹配上了就把Excel的值赋值给数据库里的该字段。因为项目开发中有的备注并没有作为前端显示的样式,类似产品分类在数据库的备注是分类id,在前端写的却是分产品分类名称,因此表头是产品分类,与数据库的字段匹配不上,因此录不进该数据。
天!竟然忽视了这个!!!
改,麻溜的改了过来之后。。。。。
注:打码处的代码是为了填一会的坑加的
6:
改完表头之后,妙啊~妙啊~可以了?
眼睛瞪得像铜铃。
害!我就知道没这么顺利,时间戳错的,导入方法加个时间转时间戳方法即可
注意引入:
7:
聪明的小伙伴可能已经发现,打码部分还没清空,还有坑。
是的,小洪眉头一皱发现事情并没有那么简单。
为什么?为什么?实际存入的时间比Excel表录入的时间大正好8小时,为啥是正好8小时,不是13个小时14分,为什么不是5分20秒?难道是因为代码世界没有爱情吗?经过一番百度,原来
获取单元格的类型经过判定后,时间格式类型会成为为Object,这种获取时间的方式会少8个小时。具体解决方法,我用了一个大一就能看懂的方法解决,噗嗤。
噗嗤哈哈哈哈
小棉袄继续贴出参考代码:
try {if (!$PHPExcel = $reader->load($filePath)) {$this->error(__('Unknown data format'));}$currentSheet = $PHPExcel->getSheet(0); //读取文件中的第一个工作表$allColumn = $currentSheet->getHighestDataColumn(); //取得最大的列号$allRow = $currentSheet->getHighestRow(); //取得一共有多少行$maxColumnNumber = Coordinate::columnIndexFromString($allColumn);$fields = [];for ($currentRow = 1; $currentRow <= 1; $currentRow++) {for ($currentColumn = 1; $currentColumn <= $maxColumnNumber; $currentColumn++) {$val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();$fields[] = $val;}}for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {$values = [];for ($currentColumn = 1; $currentColumn <= $maxColumnNumber; $currentColumn++) {$cell = $currentSheet->getCellByColumnAndRow($currentColumn,$currentRow);$val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();if($cell->getDataType()==DataType::TYPE_NUMERIC){ $cellstyleformat = $cell->getStyle($cell->getCoordinate())->getNumberFormat(); $formatcode = $cellstyleformat->getFormatCode(); if (preg_match('/^(\[\$[A-Z]*-[0-9A-F]*\])*[hmsdy]/i', $formatcode)) { $val =DateChange::excelToTimestamp($val);$num = 8*60*60*1000;$val = $val-$num;}}$values[] = is_null($val) ? '' : $val;}$row = [];$temp = array_combine($fields, $values);foreach ($temp as $k => $v) {if (isset($fieldArr[$k]) && $k !== '') {$row[$fieldArr[$k]] = $v;}}if ($row) {$insert[] = $row;}}} catch (Exception $exception) {$this->error($exception->getMessage());}
8:
测试后,写好数据批量录入操作文档,准备发给客户爸爸,好家伙,发现除了超级管理员,其他用户都不显示这个按钮,去看角色组打算编辑权限,发现并没有批量导入这个选项可以勾选。
经过社区一番百度,目前找到两个比较简单的方法:
一个是创始人回答的
一个是大佬lihoo回答的
我用的是第二个方法,在fa_auth_rule直接加一条rule。然后再到角色组编辑权限即可看到有该权限可以勾选。
但是直接操作数据库,实在是不太好~
要是小伙伴有更简单正常的方法可以告诉小洪~
以上,解决~收工~
fastadmin批量导入的坑——导入失败?日期转换时间戳?日期早了8小时?二三级用户没批量导入权限?相关推荐
- 日期转换--接收日期与数据库存储不兼容问题时间段查询
一.日期转换--接收日期与数据库存储不兼容问题 问题描述: 页面获取的日期,无法查询或者存储到数据库: 页面获取的格式为"yyyy-MM-dd HH:mm:ss",数据库数据类型为 ...
- 将字符串形式的日期转换成日期对象
JS 将字符串转换成日期类型 将字符串形式的日期转换成日期对象 var strTime="2011-04-16"; //字符串日期格式 var date= n ...
- JS 将字符串形式的日期转换成日期类型
1.将字符串形式的日期转换成日期对象 var strTime="2011-04-16"; //字符串日期格式 var date=new Date(Date.parse(strTim ...
- js时间戳转换日期,日期转换时间戳
日期转换时间戳 支持获取当前提供日期之前或之后的n天.n小时.n分钟.n秒钟 /*** 获取时间戳* @param date 日期:2022/02/19 13:49:55* @param num 当前 ...
- Oracle SQL实现日期转换时间戳时间戳转化日期
Oracle SQL实现日期转换时间戳时间戳转化日期 -- 日期转换为毫秒级时间戳 24*60*60 *1000 SELECT (to_date('2019/4/11 14:45:43' ...
- 微信小程序日期转换时间戳
微信小程序日期转换时间戳 安卓正常,IOS需要转换. 微信小程序内,字符串时间转换为时间戳 如果字符串格式为 "2020-02-02 15:35:08",此时直接 new Da ...
- oracle 日期改字符格式_oracle怎么把数值型日期转换成日期字符型
展开全部 oracle把数值型日期转换bai成日期字符du型的操作方法和详细步骤zhi如下: 1.首先dao,将字符串类型版转换为权数字类型. 此方法使用to_number()直接进行转换. 具体语法 ...
- java程序日期转换_Java 日期转换详解及实例代码
Java 日期转换 涉及的核心类:Date类.SimpleDateFormat类.Calendar类 一. Date型与long型 Date型转换为long型 Date date = new Date ...
- php计算日期函数,php日期处理函数(计算时间差,转换时间戳日期)
php教程 转换时间戳为常用的日期格式与计算时间差:默认返回类型为"分钟" function trans_time($timestamp){ if($timestamp < ...
最新文章
- thinkphp6 接收不到数据_单片机红外接收与红外发射
- 通过Java反射做实体查询
- linux-shell命令之chgrp(change group)【更改群组】
- PL/SQL 语言 一
- 串口通讯编程一日通2(Overlapped IO模型)
- lc 115. Distinct Subsequences
- 被迫开源的都是快要死的
- grep mysql_详解grep获取MySQL错误日志信息的方法
- Windows 平台下Git 服务器搭建
- sha1校验工具android,Android 正式版与测试版签名(MD5,SHA1,SHA256)以及忘记keystore的应用正式版签名获取...
- 智能制造案例——面向重型机械车间智能制造系统解决方案
- 名帖97 赵孟頫 小楷《洛神赋》
- Python验证信用卡号的有效性(算法)(称为Luhn检测或者mod 10 检测)
- 指针和结构体(初级)
- 自由软件之父抛弃OLPC,支持中国的龙梦:教孩子们使用Windows无异于教他们抽烟
- 六类水晶头的接线方法(分体式安装图解)
- Compose Multiplatform 实战:联机五子棋
- 东方国信CirroData分布式数据库与长城超云、广东鸿数完成产品兼容互认证
- 揭秘:宜信科技中心如何支持公司史上最大规模全员远程办公|上篇
- 像素、灰度、RGB、分辨率
热门文章
- 电磁炉主谐振电路研究与功率控制
- nVisual综合布线可视化管理系统解决方案
- 关于FloTHERM破解后无法打开的问题的解决方法
- 自定义UIPageControl圆点背景图片
- 全球与中国液体壁纸行业需求趋势及投资策略分析报告2022-2028年
- Visual Studio 源码文件UTF-8 带签名 格式保存
- 世界主要国家和城市经纬度(2023年3月14日整理)
- Android4.2.2 Gallery2源码分析(9)——三个界面的跳转
- php 智能输入提示插件,phph 输入邮箱时自动提示邮箱后缀 实现代码
- Warframe 大黄脸结合目标位置