如果你有开发需求,可以联系一秒互联公司, 联系电话:400-716-8908  微信:diycloud 

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

DeepSeek - AI生成摘要

系统介绍 基于ThinkPHP与LayUI构建的全方位进销存解决方案 本系统集成了采购、销售、零售、多仓库管理、财务管理等核心功能模块,旨在为企业提供一站式进销存管理体验。借助详尽的报表分析和灵活的设置选项,企业可实现精细化管理,提升运营效率。 技术框架 后端:采用ThinkPHP框架,确保系统稳定可靠、易于扩展。 前端:运用LayUI前端框架,打造美观、易用的用户界面。 功能概览 采购管理 支持

系统介绍
基于ThinkPHP与LayUI构建的全方位进销存解决方案

本系统集成了采购、销售、零售、多仓库管理、财务管理等核心功能模块,旨在为企业提供一站式进销存管理体验。借助详尽的报表分析和灵活的设置选项,企业可实现精细化管理,提升运营效率。

技术框架
后端:采用ThinkPHP框架,确保系统稳定可靠、易于扩展。
前端:运用LayUI前端框架,打造美观、易用的用户界面。
功能概览
采购管理
支持采购订单、采购入库单等操作,实现采购流程的全程跟踪与管理。
销售管理
包括销货单、销货退货单等功能,助力企业提升销售效率和客户满意度。
零售管理
支持零售单、零售退货单、服务单、积分兑换单等多种零售场景,满足企业多样化需求。
仓库管理
提供库存查询、库存盘点、库存预警等功能,确保库存数据的准确性和及时性。
财务管理
涵盖收款单、付款单、其他收入单、其他支出单等财务操作,实现财务精细化管理。
报表分析
提供详尽的数据报表和单据核销功能,为企业决策提供有力支持。
系统设置
包括基础资料、辅助资料、高级设置等选项,助力企业轻松完成系统配置和个性化定制。
开源版下载与联系方式
下载地址:
点可云ERP-V6.0开源进销存系统
https://gitee.com/yimiaoOpen/nodcloud

功能概览与截图:
点可云-专注于行业软件开发与综合服务 – 一秒云软件中心
化繁为简,引领高效新纪元!点可云公司及一秒开源团队感谢您的支持,开源地址在下方 文字不多,但可能对您的业务有帮助,辛苦您花费几分钟阅读一下!如果多我们有什么建议和反馈 可以联系下面的客服微信。购买等…
https://2024.okmg.cn/277.html

安装教程
下载代码:
点击GIT开源社区里的右侧发行版,下载所需版本(任选一种压缩方式)。

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

配置站点:
打开宝塔面板,点击添加站点。

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

配置站点信息,输入域名,勾选创建MySQL,选择PHP版本5.6-7.3。

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

 

确定后,进入刚创建的站点目录。

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

上传并解压代码:
上传下载好的代码压缩包。

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

 

解压后,将代码从nodcloud-6.0.6目录剪切到根目录。

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

 

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

 

 

检查与配置:
确保代码在根目录。

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

检查下方检测项目,确保均为绿色(如有红色项,按要求修改)。

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

 

 

 

伪静态勾选thinkphp,避免登录无反应问题。
伪静态勾选 thinkphp,否则会出现点击登录没有反应的问题

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

至此安装完成,请尽情的使用吧!!!

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

至此,安装完成!请尽情使用!

附带部分代码参考
————————————————

  1. <?php
  2. //通用函数库
  3. //获取系统版本号
  4. function get_ver(){
  5. return file_get_contents($_SERVER['DOCUMENT_ROOT'].DS.'application'.DS.'index'.DS.'ver');
  6. }
  7. //获取文件夹大小
  8. function get_dir_size($dir){
  9. static $sizeResult = 0;
  10. $handle = opendir($dir);
  11. while (false!==($FolderOrFile = readdir($handle))) {
  12. if($FolderOrFile != "." && $FolderOrFile != "..") {
  13. if(is_dir("$dir/$FolderOrFile")){
  14. $sizeResult += get_dir_size("$dir/$FolderOrFile");
  15. }else{
  16. $sizeResult += filesize("$dir/$FolderOrFile");
  17. }
  18. }
  19. }
  20. closedir($handle);
  21. return round(($sizeResult/1048576),2);
  22. }
  23. //二维数组返回指定键名集合
  24. function array_field($arr,$key){
  25. $data=array();
  26. foreach ($arr as $arr_vo) {
  27. $arr=array();
  28. foreach ($key as $key_vo) {
  29. if(isset($arr_vo[$key_vo])){
  30. $arr[$key_vo]=$arr_vo[$key_vo];
  31. }
  32. }
  33. $data[]=$arr;
  34. }
  35. return $data;
  36. }
  37. //递归获取指定ID树状数组结构
  38. function find_tree_arr($mode,$arr){
  39. static $tree=array();
  40. foreach ($arr as $vo) {
  41. $sub=db($mode)->where(['pid'=>$vo])->select()->toarray();
  42. array_push($tree,$vo);
  43. if(!empty($sub)){
  44. $more=find_tree_arr($mode,array_column($sub,'id'));
  45. }
  46. }
  47. return $tree;
  48. }
  49. //获取文件目录列表,该方法返回数组
  50. function getDir($dir){
  51. $dirArray[]=NULL;
  52. if (false!=($handle=opendir($dir))){
  53. $i=0;
  54. while(false!==($file = readdir($handle))){
  55. //去掉.|..|以及带.xxx后缀的文件
  56. if($file!="."&&$file!=".."&&!strpos($file,".")){
  57. $dirArray[$i]=$file;
  58. $i++;
  59. }
  60. }
  61. closedir ($handle);//关闭句柄
  62. }
  63. return $dirArray;
  64. }
  65. //数组指定条件搜索
  66. //$data数据内容,$arr搜索条件['key|key1'=>['in|eq','val']]
  67. //in是包含,eq是等于
  68. function searchdata($data,$arr){
  69. $info=[];
  70. if(is_array($data) && is_array($arr)){
  71. foreach ($data as $data_vo){
  72. $nod=true;//初始化状态
  73. foreach ($arr as $key=>$arr_vo){
  74. //判断多键值
  75. $val='nod_initial';
  76. foreach (explode('|',$key) as $key_vo) {
  77. $val=$val==='nod_initial'?$data_vo[$key_vo]:$val[$key_vo];
  78. }
  79. //val取值成功
  80. if($val!=='nod_initial'){
  81. if($arr_vo[0]=='in'){
  82. //包含判断
  83. strstr($val, $arr_vo[1])||($nod=false);
  84. }else if($arr_vo[0]=='eq'){
  85. //相等判断
  86. $val==$arr_vo[1]||($nod=false);
  87. }
  88. }
  89. }
  90. $nod&&(array_push($info,$data_vo));//加入数据
  91. }
  92. }
  93. return $info;
  94. }
  95. //多表多条件find查询
  96. //$arr [['table'=>'plug','where'=>['only'=>1]]]]
  97. function more_table_find($arr){
  98. $resule=false;//默认未找到
  99. foreach ($arr as $vo) {
  100. $find=db($vo['table'])->where($vo['where'])->find();
  101. if(!empty($find)){
  102. $resule=true;//找到数据
  103. break;
  104. }
  105. }
  106. return $resule;
  107. }
  108. //删除目录
  109. function removedir($dirName){
  110. if(!is_dir($dirName)){
  111. return false;
  112. }
  113. $handle=@opendir($dirName);
  114. while(($file=@readdir($handle))!==false){
  115. if($file!='.'&&$file != '..'){
  116. $dir=$dirName.DS.$file;
  117. is_dir($dir)?removedir($dir):@unlink($dir);
  118. }
  119. }
  120. closedir($handle);
  121. return rmdir($dirName);
  122. }
  123. //生成插件秘钥
  124. function get_plug_key($time){
  125. $key=config('api_key');//私有秘钥
  126. return md5($time.'|'.$key);
  127. }
  128. //HTML代码压缩
  129. function compress_html($string) {
  130. $string = str_replace("\r\n", '', $string);
  131. $string = str_replace("\n", '', $string);
  132. $string = str_replace("\t", '', $string);
  133. $pattern = ["/> *([^ ]*) *</","/[\s]+/","/<!--[^!]*-->/","/\" /","/ \"/","'/\*[^*]*\*/'"];
  134. $replace = [">\\1<"," ","","\"","\"",""];
  135. return preg_replace($pattern, $replace, $string);
  136. }
  137. //CSS代码压缩
  138. function compress_css($string) {
  139. $string = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $string);
  140. $string = str_replace(["", "\r", "\n", "\t", ' ', ' ', ' '], '', $string);
  141. return $string;
  142. }
  143. //构造SQL-返回设置项的指定处理方式
  144. //$info原始数据内容,$set设置项,$model数据表,$full是否允许为空(默认不允许)
  145. //md5:MD5加密|like:包含查询|full_like:不为空包含查询|in:包含查询(传入数组)
  146. //full_dec_1:不为空内容减1|stime和etime:时间区间查询|full_eq:不为空等于数据
  147. //full_name_py_link:不为空扩展包含查询|full_division_in:不为空分割集合查询
  148. //full_goodsclass_tree_sub:不为空商品分类集合查询//continue:不处理跳过
  149. function get_sql($info,$set=[],$model,$full=true){
  150. $sql=[];//预设返回数据
  151. $field=db($model)->getTableFields();//读取数据表字段信息
  152. array_push($field,'start_time','end_time');//加入时间字段
  153. //循环数据
  154. foreach ($info as $info_key=>$info_vo) {
  155. //判断数据字段是否存在
  156. if(!in_array($info_key,$field)){
  157. continue;
  158. }
  159. //判断字段是否需要单独处理
  160. if(isset($set[$info_key])){
  161. //需要处理,判断类型
  162. if($set[$info_key]=='md5'){
  163. //md5加密
  164. $sql[$info_key]=md5($info_vo);
  165. }elseif($set[$info_key]=='like'){
  166. //包含查询
  167. $sql[$info_key]=['like','%'.$info_vo.'%'];
  168. }elseif($set[$info_key]=='full_like'){
  169. //不为空包含查询
  170. empty($info_vo)||($sql[$info_key]=['like','%'.$info_vo.'%']);
  171. }elseif($set[$info_key]=='in'){
  172. //包含查询
  173. $sql[$info_key]=['in',$info_vo];
  174. }elseif($set[$info_key]=='full_dec_1'){
  175. //不为空内容减1
  176. empty($info_vo)||($sql[$info_key]=$info_vo-1);
  177. }elseif($set[$info_key]=='stime' || $set[$info_key]=='etime'){
  178. //时间查询
  179. if(!isset($sql['time'])){
  180. $time_key='time';//时间字段KEY
  181. $start_time=$info[array_search("stime",$set)];//取出开始时间KEY并读取数值
  182. $end_time=$info[array_search("etime",$set)];//取出结束时间KEY并读取数值
  183. $egt=['egt',strtotime($start_time)];//大于等于
  184. $elt=['elt',strtotime($end_time)+86399];//小于等于(加当天)
  185. if(!empty($start_time) && empty($end_time)){
  186. //开始时间不为空,结束时间为空
  187. $sql[$time_key]=$egt;
  188. }elseif(!empty($end_time) && empty($start_time)){
  189. //结束时间不为空,开始时间为空.
  190. $sql[$time_key]=$elt;
  191. }elseif(!empty($end_time) && !empty($start_time)){
  192. //开始时间不为空,结束时间不为空
  193. $sql[$time_key]=[$egt,$elt];
  194. }
  195. }
  196. }elseif($set[$info_key]=='full_eq'){
  197. //不为空等于数据
  198. empty($info_vo)||($sql[$info_key]=$info_vo);
  199. }elseif($set[$info_key]=='full_name_py_link'){
  200. //不为空扩展包含查询
  201. empty($info_vo)||($sql['name|py']=['like','%'.$info_vo.'%']);
  202. }elseif($set[$info_key]=='full_division_in'){
  203. //不为空分割集合查询
  204. empty($info_vo)||($sql[$info_key]=['in',explode(",",$info_vo)]);
  205. }elseif($set[$info_key]=='full_goodsclass_tree_sub'){
  206. //不为空分割集合查询
  207. empty($info_vo)||($sql[$info_key]=['in',tree_sub('goodsclass',$info_vo)]);
  208. }elseif($set[$info_key]=='continue'){
  209. //不处理跳过
  210. continue;
  211. }
  212. }else{
  213. //无需单独处理
  214. //判断是否允许空值
  215. if($full){
  216. if(is_array($info_vo)||!preg_match('/^\s*$/',$info_vo)){
  217. $sql[$info_key]=$info_vo;
  218. }
  219. }else{
  220. $sql[$info_key]=$info_vo;
  221. }
  222. }
  223. }
  224. return $sql;
  225. }
  226. //同步SQL字段
  227. //$exclude:需要排除的字段
  228. function syn_sql($info,$model,$exclude=[]){
  229. $sql=[];
  230. //读取数据表字段信息
  231. if(empty(Session('syn_sql_'.$model))){
  232. $field=db($model)->getTableFields();
  233. Session('syn_sql_'.$model,$field);
  234. }else{
  235. $field=Session('syn_sql_'.$model);
  236. }
  237. foreach ($info as $key=>$vo) {
  238. //判断数据字段是否存在
  239. if(in_array($key,$field) && !in_array($key,$exclude)){
  240. //排除ID等于0的
  241. if($key=='id' && empty($vo)){
  242. continue;
  243. }else{
  244. $sql[$key]=$vo;
  245. }
  246. }else{
  247. continue;
  248. }
  249. }
  250. return $sql;
  251. }
  252. //判断字段存在并不为空
  253. function isset_full($arr,$key){
  254. if(isset($arr[$key])&&!empty($arr[$key])){
  255. return true;
  256. }else{
  257. return false;
  258. }
  259. }
  260. //计算多维数组最多数组数量
  261. function CalArrMaxCount($arr){
  262. static $nums = 0;
  263. //对多维数组进行循环
  264. foreach ($arr as $vo) {
  265. if(is_array($vo)){
  266. $count=count($vo);
  267. //判断是否多维数组
  268. if ($count==count($vo,1)) {
  269. $count > $nums&&($nums=$count);
  270. }else{
  271. CalArrMaxCount($vo);
  272. }
  273. }
  274. }
  275. return $nums;
  276. }
  277. //删除超时文件|危险功能-慎用
  278. //$path='skin/upload/xlsx/'del_time_file
  279. function del_time_file($path,$time=30){
  280. $filesnames=scandir($path);//获取文件目录
  281. $now=time();//当前时间
  282. foreach ($filesnames as $key=>$name){
  283. //排除掉..
  284. if ($key>1){
  285. $nod=$path.$name;//文件路径
  286. if ($now-filectime($nod)>$time){
  287. unlink($nod);
  288. }
  289. }
  290. }
  291. }
  292. //优化小数位
  293. function opt_decimal($val){
  294. $val=bcsub($val,0,config('decimal'));//统一小数位
  295. $arr=explode('.',$val);
  296. if(count($arr)>1){
  297. if($arr[1]=='00'){
  298. $val=$arr[0];
  299. }else{
  300. $nod=str_split($arr[1]);
  301. foreach (array_reverse($nod,true) as $key=>$vo) {
  302. if($vo=='0'){
  303. unset($nod[$key]);
  304. }else{
  305. break;
  306. }
  307. }
  308. $val=$arr[0].'.'.implode('',$nod);
  309. }
  310. }
  311. return $val;
  312. }
  313. //计算二维数组字段总和
  314. //$tab_data,['total','actual','money']
  315. function get_sums($arr,$keys){
  316. $resule=[];
  317. foreach ($keys as $key) {
  318. $list = array_column($arr, $key);
  319. $resule[$key]=array_sum($list);
  320. }
  321. return $resule;
  322. }
  323. //导出EXCEL
  324. function export_excel($file_name,$data,$down=true){
  325. vendor("Execl.PHPExcel");
  326. $PHPExcel=new PHPExcel();//实例化
  327. $cellname=['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'];//列标识
  328. $shell=$PHPExcel->getActiveSheet (0);//当前工作簿
  329. $shell->setTitle ('NODCLOUD.COM');//工作簿名称
  330. $shell->getDefaultColumnDimension()->setWidth(13);//设置默认行宽
  331. $shell->getDefaultRowDimension()->setRowHeight(16);//设置默认行高
  332. $shell->getDefaultStyle()->getFont()->setName('宋体');//设置默认字体
  333. $shell->getPageMargins ()->setTop (0.2);//设置上边距
  334. $shell->getPageMargins ()->setBottom (0.2);//设置下边距
  335. $shell->getPageMargins ()->setLeft (0.2);//设置左边距
  336. $shell->getPageMargins ()->setRight (0.2);//设置右边距
  337. //循环加入数据
  338. $rownums=1;//初始化行数
  339. $max_cell=CalArrMaxCount($data);//获取多维数组最多数组数量
  340. //循环增加数据
  341. foreach ($data as $data_vo) {
  342. //判断数据类型
  343. if($data_vo['type']=='title'){
  344. //标题行
  345. $cellnums=0;//初始化列数
  346. $shell->mergeCells ($cellname[$cellnums].$rownums.':'.$cellname[$max_cell-1].$rownums);//合并单元格
  347. $shell->setCellValue ($cellname[$cellnums].$rownums,$data_vo['info'])->getStyle ($cellname[$cellnums].$rownums)->applyFromArray ([
  348. 'font'=>['bold'=>true,'size'=>12],
  349. 'alignment'=>['horizontal'=>PHPExcel_Style_Alignment::HORIZONTAL_CENTER]
  350. ]);//设置内容|居中|粗体|12号
  351. $shell->getRowDimension($rownums)->setRowHeight(28);//设置行高
  352. $rownums++;//自增行数
  353. }elseif($data_vo['type']=='node'){
  354. //节点行
  355. $cellnums=0;//初始化列数
  356. //设置背景色
  357. $shell->getStyle($cellname[$cellnums].$rownums.':'.$cellname[$max_cell-1].$rownums)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB('e7e6e6');;//设置背景颜色;
  358. foreach ($data_vo['info'] as $data_info) {
  359. $shell->setCellValue ($cellname[$cellnums].$rownums,$data_info);
  360. $cellnums++;//自增列数
  361. }
  362. $shell->getRowDimension($rownums)->setRowHeight(16);//设置行高
  363. $rownums++;//自增行数
  364. }elseif($data_vo['type']=='table'){
  365. //表格数据
  366. $key_arr=[];
  367. //循环增加表头
  368. $cellnums=0;//初始化列数
  369. foreach ($data_vo['info']['cell'] as $cell_key=>$cell_vo) {
  370. $shell->setCellValue ($cellname[$cellnums].$rownums,$cell_vo)->getStyle ($cellname[$cellnums].$rownums)->applyFromArray ([
  371. 'font'=>['bold'=>true],
  372. 'alignment'=>['horizontal'=>PHPExcel_Style_Alignment::HORIZONTAL_CENTER]
  373. ]);//设置内容|居中|粗体;
  374. array_push($key_arr,$cell_key);//加入键值
  375. $cellnums++;//自增列数
  376. }
  377. $shell->getRowDimension($rownums)->setRowHeight(16);//设置标题行高
  378. $rownums++;//自增行数
  379. //循环增加表格数据头
  380. foreach ($data_vo['info']['data'] as $data_vo) {
  381. $cellnums=0;//初始化列数
  382. $RowHeight=16;//是否存在扩展信息
  383. foreach ($key_arr as $key_vo) {
  384. if(is_array($data_vo[$key_vo])){
  385. //扩展信息
  386. if($data_vo[$key_vo]['type']=='img'){
  387. //图像
  388. $drawing=new PHPExcel_Worksheet_Drawing();
  389. $drawing->setPath ($data_vo[$key_vo]['info']);//设置图像路径
  390. $drawing->setOffsetX (3);//设置X偏移距离
  391. $drawing->setOffsetY (3);//设置Y偏移距离
  392. $drawing->setWidth (98);//设置图像宽度
  393. $drawing->setCoordinates ($cellname[$cellnums].$rownums)->setWorksheet ($shell);//设置内容
  394. $imginfo=getimagesize($data_vo[$key_vo]['info']);//读取图像信息
  395. $NodHeight=$imginfo[1]/($imginfo[0]/86);//计算行高|按照宽度缩放比例缩放
  396. $NodHeight>16&&($RowHeight=$NodHeight);//最小高度16
  397. }
  398. }else{
  399. //文本信息
  400. $shell->setCellValueExplicit($cellname[$cellnums].$rownums,$data_vo[$key_vo],PHPExcel_Cell_DataType::TYPE_STRING);//设置内容并指定文本格式
  401. }
  402. $cellnums++;//自增列数
  403. }
  404. $shell->getRowDimension($rownums)->setRowHeight($RowHeight);//设置数据行高
  405. $rownums++;//自增行数
  406. }
  407. }
  408. }
  409. //设置边框
  410. $shell->getStyle ('A1:'.$cellname[$max_cell-1].($rownums-1))->applyFromArray ([
  411. 'borders'=>['allborders'=>['style'=>PHPExcel_Style_Border::BORDER_THIN]],
  412. 'alignment'=>['vertical'=>PHPExcel_Style_Alignment::VERTICAL_CENTER]
  413. ]);
  414. //输出文件
  415. ob_get_contents()&&(ob_end_clean());//清除缓冲区,避免乱码
  416. $writer=PHPExcel_IOFactory::createWriter ($PHPExcel,'Excel2007');
  417. //判断文件操作
  418. if($down==true){
  419. //直接下载
  420. header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$file_name.'.xlsx"');
  421. header("Content-Disposition:attachment;filename=$file_name.xlsx");//attachment新窗口打印inline本窗口打印
  422. $writer->save ('php://output');
  423. exit;
  424. }else{
  425. //保存文件
  426. $file_path=ROOT_PATH.'skin/file/xlsx/'.$file_name.'.xlsx';
  427. $writer->save ($file_path);
  428. return $file_path;//返回文件路径
  429. }
  430. }
  431. //获取xlsx文件数据
  432. function get_xlsx($file){
  433. vendor("Execl.PHPExcel");
  434. $reader=PHPExcel_IOFactory::createReader ('Excel2007')->setReadDataOnly (true)->load ($file);//简易方式加载xlsx文件
  435. $resule=$reader->getSheet (0)->toArray (null,false,false,true);//获取首个工作簿信息并转为数组
  436. //过滤空白行
  437. foreach ($resule as $key=>$vo) {
  438. if(count(array_unique($vo))==1){
  439. unset($resule[$key]);
  440. }
  441. }
  442. array_walk_recursive($resule,function(&$nod){$nod===null?($nod=''):$nod=htmlentities($nod);});//NULL转空白字符|拦截XSS
  443. return $resule;
  444. }
  445. //获取通用正则
  446. function get_regex($nod){
  447. $regex=[
  448. 'empty'=>"/^\s*$/g",//空判断
  449. 'tel'=>"/^1\d{10}$/",//手机号判断
  450. 'phone'=>"/^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/",//座机号判断
  451. 'tax'=>"/^[A-Z0-9]{15}$|^[A-Z0-9]{17}$|^[A-Z0-9]{18}$|^[A-Z0-9]{20}$/",//税号判断
  452. 'number'=>"/^[0-9]*$/",//数字组合判断
  453. 'plus'=>"/^\d+(\.\d{1,2})?$/",//含0正数判断最多2位小数
  454. 'email'=>"/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/",//邮箱判断
  455. 'time'=>"/^(19|20)\d{2}-(0?\d|1[012])-(0?\d|[12]\d|3[01])$/",//时间正则
  456. "numerical"=>"/^(\-)?\d+(\.\d{1,2})?$/",//正负数值2位小数
  457. ];
  458. return $regex[$nod];
  459. }
  460. //汉字转拼音
  461. //$type[head:首字母|all:全拼音]
  462. function zh2py($text,$type='head'){
  463. $nod=new \org\zh2py();
  464. $resule=$nod::encode($text,$type);
  465. return strtolower($resule);//返回结果转小写
  466. }
  467. //生成条形码
  468. //$type[true:直接输出|false:保存文件]
  469. function txm($text,$type=true){
  470. $file_name=time().'_'.mt_rand();
  471. //当前时间戳加随机数
  472. $file_path=$_SERVER['DOCUMENT_ROOT'].'/skin/images/code/'.$file_name.'.png';
  473. $root=$_SERVER['DOCUMENT_ROOT'];
  474. require_once($root.'/vendor/Barcode/BCGFontFile.php');
  475. require_once($root.'/vendor/Barcode/BCGColor.php');
  476. require_once($root.'/vendor/Barcode/BCGDrawing.php');
  477. // 条形码的编码格式
  478. require_once($root.'/vendor/Barcode/BCGcode128.barcode.php');
  479. // 加载字体大小
  480. $font=new \BCGFontFile ($_SERVER['DOCUMENT_ROOT'].'/vendor/Barcode/Arial.ttf',18);
  481. //颜色条形码
  482. $color_black=new \BCGColor (0,0,0);
  483. $color_white=new \BCGColor (255,255,255);
  484. $drawException=null;
  485. try {
  486. $code=new \BCGcode128 ();
  487. $code->setScale (2);
  488. $code->setThickness (30);
  489. // 条形码的厚度
  490. $code->setForegroundColor ($color_black);
  491. // 条形码颜色
  492. $code->setBackgroundColor ($color_white);
  493. // 空白间隙颜色
  494. $code->setFont ($font);
  495. //
  496. $code->parse ($text);
  497. // 条形码需要的数据内容
  498. }
  499. catch (Exception $exception){
  500. $drawException=$exception;
  501. }
  502. //根据以上条件绘制条形码
  503. $drawing=new \BCGDrawing ('',$color_white);
  504. if ($drawException){
  505. $drawing->drawException ($drawException);
  506. }else {
  507. $drawing->setBarcode ($code);
  508. $drawing->draw ();
  509. }
  510. // 生成PNG格式的图片
  511. if ($type){
  512. $drawing->finish (\BCGDrawing::IMG_FORMAT_PNG ,$file_path,$type);
  513. exit;
  514. }else {
  515. $drawing->finish (\BCGDrawing::IMG_FORMAT_PNG ,$file_path,$type);
  516. return $file_path;
  517. }
  518. }
  519. //生成二维码
  520. //$type[true:直接输出|false:返回文件地址]
  521. function ewm ($text,$type=true){
  522. $file_name=time().'_'.mt_rand();
  523. //当前时间戳加随机数
  524. vendor ("phpqrcode.phpqrcode");
  525. $size='6';
  526. $level='H';
  527. $padding=2;
  528. $nod=$_SERVER['DOCUMENT_ROOT'].'/skin/images/code/'.$file_name.'.png';
  529. $re=QRcode::png ($text,$nod,$level,$size,$padding);
  530. if ($type){
  531. ob_end_clean();
  532. //清除缓冲区,避免乱码
  533. header('Content-Type:image/png');
  534. imagepng(imagecreatefromstring(file_get_contents($nod)));
  535. exit ;
  536. }else {
  537. return $nod;
  538. }
  539. }
  540. //递归查询数据表树结构归属数据
  541. function tree_sub ($model,$id){
  542. static $resule=[];
  543. $db=db($model);
  544. $info=$db->where(['pid'=>$id])->column ('id');
  545. foreach ($info as $vo) {
  546. $sub=$db->where(['pid'=>$vo])->column ('id');
  547. if(empty($sub)){
  548. array_push($resule,$vo);
  549. }else{
  550. tree_sub($model,$vo);
  551. }
  552. }
  553. array_push($resule,$id);
  554. return $resule;
  555. }
  556. //多维数组重组指定字段一维数组
  557. function arraychange($arr,$key){
  558. return array_unique(array_column($arr,$key));
  559. }
  560. //查询数组指定字段合并赋值
  561. //$type merge 组合 intersect 交集
  562. function sql_assign(&$sql,$field,$data,$type='merge'){
  563. if(isset($sql[$field])){
  564. if($type=='merge'){
  565. $arr=array_merge($sql[$field][1],$data);
  566. }elseif($type=='intersect'){
  567. $arr=array_intersect($sql[$field][1],$data);
  568. }
  569. $data=array_unique($arr);
  570. }
  571. $sql[$field]=['in',$data];
  572. }
  573. //合并单个二维数组
  574. function arr_merge($arr){
  575. $resule=[];
  576. foreach ($arr as $vo) {
  577. $resule=array_merge($resule,$vo);
  578. }
  579. return array_unique($resule);
  580. }
  581. //压缩文件为ZIP并下载
  582. function file_to_zip($zip_name,$file_arr,$down=true){
  583. del_time_file('skin/file/zip/');
  584. empty($file_arr)&&(die('[ 文件数据为空 ]'));//空数据检验
  585. $path="skin/file/zip/".$zip_name.".zip";
  586. $zip=new ZipArchive();
  587. if ($zip->open($path,ZIPARCHIVE::CREATE)!==TRUE) {
  588. exit('创建压缩文件失败!');
  589. }
  590. foreach ($file_arr as $file_vo) {
  591. $zip->addFile($file_vo,basename($file_vo));
  592. }
  593. $zip->close();
  594. if($down){
  595. header("Cache-Control: max-age=0");
  596. header("Content-Description: File Transfer");
  597. header('Content-disposition: attachment; filename='.basename($path)); //文件名
  598. header("Content-Type: application/zip"); //zip格式的
  599. header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
  600. header('Content-Length: '.filesize($path)); //告诉浏览器,文件大小
  601. @readfile($path);//输出文件;
  602. exit;
  603. }else{
  604. return true;
  605. }
  606. }
  607. //二维数组删除KEY指定条件数组
  608. function arrs_key_del(&$arr,$condition){
  609. foreach ($arr as $key=>$vo) {
  610. //匹配数据
  611. if(isset($vo[$condition[0]]) && $vo[$condition[0]]==$condition[1]){
  612. unset($arr[$key]);
  613. }
  614. }
  615. }
  616. //GET POST提交
  617. function http($url,$param,$action="GET"){
  618. $ch=curl_init();
  619. $config=array(CURLOPT_RETURNTRANSFER=>true,CURLOPT_URL=>$url);
  620. if($action=="POST"){
  621. $config[CURLOPT_POST]=true;
  622. }
  623. $config[CURLOPT_POSTFIELDS]=http_build_query($param);
  624. curl_setopt_array($ch,$config);
  625. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  626. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  627. $result=curl_exec($ch);
  628. curl_close($ch);
  629. return $result;
  630. }

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/yimiaonet/article/details/144527217

DeepSeek 推理问答

×

如问我这篇文章讲了什么。这篇文章是什么意思等。

声明:注意:本站部分图片由 :https://unsplash.com/ 提供
**免责声明**
本网站所载的所有文章内容仅供参考,不构成任何形式的专业建议、意见或判断依据。对于本网站提供的开源代码及免费下载的代码,用户应仅将其用于个人学习、研究或非商业目的,并应在下载后合理期限内完成必要的使用或评估。本网站明确要求用户不得将这些代码用于任何商业用途。
本网站对于所提供的开源代码及免费下载的代码仅用于分享参考,版权归原作者所有。本网站坚决支持并维护软件著作权持有人的合法权益,并强调对原著者的尊重与保护,不会将这些代码用于任何形式的商业盈利目的。
本网站内图片素材、文章内容部分来源于网络收集转载,如有侵权,请联系我们以便及时处理。联系方式:meng#yimiaonet.com(请将“#”替换为“@”)。
未经本网站书面许可,任何个人或组织不得复制、盗用、采集、发布或以其他方式传播本网站的内容至任何形式的网站、书籍、媒体平台或其他公共领域。若本网站内容涉及对原著者合法权益的侵犯,原著者或本网站有权采取法律措施维护自身权益。
本声明由一秒云软件中心发布,并保留随时修改本声明的权利。官方网站信息如下:本站网站:2024.okmg.cn。“OKMG”为本网站注册商标,受法律保护。
开源系列

CRMChat客服系统

2024-9-13 15:22:40

开源系列

开源ERP源码下载指南:点可云V6深度解析与二开推荐

2025-4-6 21:28:10

0 条回复A文章作者M管理员
欢迎您,新朋友,感谢参与互动!
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
搜索