Parcourir la source

Merge branch 'master' of https://gitee.com/ZhongBangKeJi/CRMEB

吴昊天 il y a 1 an
Parent
commit
3b28ee6bcf

+ 5 - 0
.gitignore

@@ -19,3 +19,8 @@
 /template/uni-app/node_modules/
 /template/uni-app/unpackage/
 /template/uni-app/.hbuilderx/
+/crmeb/.idea/
+/docker-compose/MacArm/mysql/data/
+/docker-compose/MacArm/mysql/log/
+/docker-compose/linux/mysql/data/
+/docker-compose/linux/mysql/log/

+ 87 - 54
README.md

@@ -63,7 +63,7 @@ CRMEB开源商城Java版:https://gitee.com/ZhongBangKeJi/crmeb_java
 
 ### 🫧 系统亮点
 ~~~
-1.前后端分离:后端TP6,管理端Element UI,移动端Uni-app;
+1.前后端分离:后端TP6,管理端Element UI(支持多种风格和布局切换),移动端Uni-app;
 2.代码规范:遵循PSR-2命名规范、Restful标准接口、代码严格分层、注释齐全、统一错误码;
 3.权限管理:内置强大灵活的权限管理,可以控制到每一个菜单;
 4.开发配置:低代码增加配置、系统组合数据模块;
@@ -75,23 +75,10 @@ CRMEB开源商城Java版:https://gitee.com/ZhongBangKeJi/crmeb_java
 10.二开效率:应用form-builder PHP可以快速生成表单;
 11.快速上手:详细帮助文档、后台接口管理、后台数据库字典、系统文件管理备注、代码注释、一键安装;
 12.系统安全:系统操作日志、系统生产日志、文件校验、数据备份;
-13.高 性 能:支持Redis缓存、队列、长连接、多种云储存、支持集群部署。
-
+13.高 性 能:支持Redis缓存、队列、长连接、多种云储存、支持集群部署;
+14.多 语 言:支持自动识别浏览器多语言展示;
+15.驱动扩展:支持多种支付方式、多种短信、多种云储存等;
 ~~~
----
-
-### 🖥 运行环境
-
-```
-Nignx/Apache/IIS
-PHP 7.1 ~ 7.4 
-MySQL 5.7 ~ 8.0
-Redis
-```
-
-
-> 温馨提示:虚拟空间不支持,推荐使用bt宝塔面板,服务器推荐京东云服务器:<a href="https://partner.jdcloud.com/partner/notice/b06c3232b6394fdfa496923b8e00b286" target="_blank">注册即享6.5折专属优惠,点我领取!</a>
-
 
 ###  📱 系统演示
 
@@ -111,17 +98,72 @@ APP下载:http://app.crmeb.cn/bzv (苹果手机直接在APP Store里搜索CR
 
 ---
 
-###  🔐 安装教程
-
-想要快速安装,教程来助攻!<a href="https://doc.crmeb.com/single/v5/7714" target="_blank">查看安装教程!</a>
-
----
-
-
-
 ###  📲 核心功能
-
-![输入图片说明](readme/pic/功能列表.jpg)
+系统功能
+~~~
+移动端支持DIY:22种组建;
+多种风格和布局切换:8种风格4种布局;
+多种语言配置:支持200多个国家语言;
+多应用端展示:公众号端、H5端、小程序端、APP端、PC端(需要购买);
+多种消息通知:公众号模版、小程序模版、短信、打印机、企业微信;
+低代码:生成功能模块、增加系统配置、组合数据;
+对外接口:包含用户、商品、订单等接口,方便其它系统对接;
+多种云储存:阿里云、腾讯云、华为云、京东云、七牛云、天翼云;
+~~~
+商城功能
+~~~
+多种支付方式:微信支付、支付宝支持、通联支付;
+多种商品类型:标准商品、虚拟商品、卡密商品、优惠券商品;
+多种营销功能:拼团、砍价、秒杀、抽奖、优惠券、积分、经验、分销、充值、签到、渠道码;
+多种运费方式:快递、配送、自提、包邮、超强运费模版管理、多自提点;
+~~~
+用户管理
+~~~
+用户等级:用户等级 经验升级 经验任务;
+SVIP会员:付费会员 试用会员 实体会员卡 会员权益
+用户管理:用户类型 添加用户 用户标签/分组 用户操作 浏览记录
+登录方式:H5登录 微信快速登录 密码登录/注册
+微信端登录:微信授权登录 手机号快速登录 账号密码登录
+支持单点登录:快速接入第三方系统
+~~~
+微信小程序直播	
+~~~
+直播间管理 主播管理 直播商品管理
+~~~
+CMS管理
+~~~
+文章内容	文章管理	文章分类 文章列表
+~~~
+客服系统
+~~~
+客服管理:客服添加 客服权限 关键字回复
+客服工作台:客服状态 发送信息 订单处理 商品记录 转接客服 客服常用语 客户信息管理 支持H5端和PC端
+客户端:支持平台用户H5端、PC端,支持广告配置
+~~~
+第三方设置
+~~~
+短信
+商品采集
+小票打印
+电子面单打印
+物流查询
+电子发票
+云存储
+~~~
+开发工具
+~~~
+数据库管理
+文件在线管理
+接口文档管理
+代码功能模块生成
+数据字典管理
+对外接口管理
+低代码事件
+低代码定时任务
+多语言一键配置
+数据维护
+安全维护
+~~~
 
 
 ---
@@ -135,48 +177,35 @@ APP下载:http://app.crmeb.cn/bzv (苹果手机直接在APP Store里搜索CR
 
 ---
 
+### 🖥 运行环境
 
-###  📕 CRMEB公益
-做开源,帮助更多人!CRMEB开源项目,不仅让开发者从中受益,也在公益活动中帮助了很多人,对此,我们很荣幸,也乐此不疲!
+```
+Nignx(推荐)/Apache/IIS
+PHP 7.1 ~ 7.4 
+MySQL 5.7 ~ 8.0
+Redis (可选)
+```
 
-So~~想要用CRMEB开源商城系统做公益项目的朋友,可以来免费申请商业版系统哦!有需要的朋友,快去找官方客服咨询吧!
 
-![输入图片说明](readme/pic/gongyi1.jpg)
-![输入图片说明](readme/pic/gongyi2.jpg)
+> 温馨提示:虚拟空间不支持,推荐使用bt宝塔面板,服务器推荐京东云服务器:<a href="https://partner.jdcloud.com/partner/notice/b06c3232b6394fdfa496923b8e00b286" target="_blank">注册即享6.5折专属优惠,点我领取!</a>
+
+###  🔐 安装教程
+
+想要快速安装,教程来助攻!<a href="https://doc.crmeb.com/single/v5/7714" target="_blank">查看安装教程!</a>
 
 ---
-[![输入图片说明](readme/pic/多商户.jpg)](https://www.crmeb.com/index/merchant)
----
+
 ###  📞 CRMEB互动
-#### CRMEB开源技术交流群
-#### 扫码进群可领取开源版接口文档、产品功能清单、高清UI设计图、思维脑图!
+#### CRMEB开源技术交流群(扫码进群可领取开源版接口文档、产品功能清单、高清UI设计图、思维脑图!)
 ![输入图片说明](readme/pic/开源群.jpg)
 #### 技术社区!找方法、提bug、看官方消息、拿活跃大奖!都在 <a href="https://www.crmeb.com/ask" target="_blank">CRMEB 技术社区</a> 应有尽有
 
 ---
 
-###  📻 感谢参与开发者
-#### 感谢大神们提交代码(排名不分先后)
-@yizhisamoye,@bys1123,@xaboy,@youngxj0,@jacklincheung,@392256866,@sxsea
-
 欢迎<a href="https://gitee.com/ZhongBangKeJi/CRMEB/issues" target="_blank">反馈问题</a>
 
 欢迎<a href="https://gitee.com/ZhongBangKeJi/CRMEB/pulls" target="_blank">提交代码</a>
 
----
-###  📸 特别鸣谢
-排名不分先后,感谢这些软件的开发者:thinkphp、iview、vue、mysql、redis、uniapp、echarts、tree-table-vue、swiper、form-create等,如有遗漏请联系我!
-
----
-###  🎬 核心开发团队
-产品:木子刀客
-
-技术:聆听、等风来、xaboy、吴汐、最后一片叶、旺仔、小小、娜娜、归来仍是少年
-
-UI:xy-yyds、LXT
-
-测试:夏天、绵绵羊、。ws、半山
-
 
 ---
 ###  📺 版权须知
@@ -206,7 +235,11 @@ All rights reserved。
 
 CRMEB® 商标和著作权所有者为西安众邦网络科技有限公司。
 
+---
+
+###  📕 CRMEB多商户
 
+[![输入图片说明](readme/pic/多商户.jpg)](https://www.crmeb.com/index/merchant)
 
 ---
 

+ 322 - 0
crmeb/baota.sh

@@ -0,0 +1,322 @@
+#!/bin/bash
+PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
+export PATH
+
+php_version='74'
+mysql_version='5.7'
+redis_version='6.2'
+action_type='install'
+root_path=$(cat /var/bt_setupPath.conf)
+setup_path=$root_path/server
+
+#宝塔是否已安装
+if [ -z "$root_path" ]; then
+    echo "请先安装宝塔"
+    exit 1
+fi
+
+#nginx是否已安装
+if [ ! -f "${setup_path}/nginx/sbin/nginx" ]; then
+    echo "请先安装nginx并配置网站"
+    exit 1
+fi
+
+#安装php
+php_install=1
+#php路径变量
+php_path="${setup_path}/php/74/bin/php"
+# 获取已安装的php版本
+for phpVer in 71 72 73 74; do
+    if [ -d "${setup_path}/php/${phpVer}/bin" ]; then
+        php_version=${phpVer}
+        php_install=0
+    fi
+done
+if [ $php_install == 1 ]; then
+. ${setup_path}/panel/install/install_soft.sh 1 $action_type php $php_version
+fi
+case "${php_version}" in
+    '71')
+        extFile="${setup_path}/php/71/lib/php/extensions/no-debug-non-zts-20160303"
+        php_path="${setup_path}/php/71/bin/php"
+    ;;
+    '72')
+        extFile="${setup_path}/php/72/lib/php/extensions/no-debug-non-zts-20170718"
+        php_path="${setup_path}/php/72/bin/php"
+    ;;
+    '73')
+        extFile="${setup_path}/php/73/lib/php/extensions/no-debug-non-zts-20180731"
+        php_path="${setup_path}/php/73/bin/php"
+    ;;
+    '74')
+        extFile="${setup_path}/php/74/lib/php/extensions/no-debug-non-zts-20190902"
+        php_path="${setup_path}/php/74/bin/php"
+    ;;
+esac
+
+echo "PHP $php_version 安装成功"
+echo '---------------------------------'
+
+#安装mysql
+if [ ! -d "${setup_path}/mysql" ]; then
+. ${setup_path}/panel/install/install_soft.sh 1 $action_type mysql $mysql_version
+fi
+
+echo "mysql $mysql_version 安装成功"
+echo '---------------------------------'
+
+#安装redis
+if [ ! -d "${setup_path}/redis" ]; then
+. ${setup_path}/panel/install/install_soft.sh 0 $action_type redis $redis_version
+fi
+
+echo "redis $redis_version 安装成功"
+echo '---------------------------------'
+
+#安装php-redis 插件
+if [ ! -e "${extFile}/redis.so" ]; then
+. ${setup_path}/panel/install/install_soft.sh 1 $action_type redis $php_version
+fi
+echo 'php-redis 插件安装成功'
+echo '---------------------------------'
+
+#安装php-fileinfo 插件
+if [ ! -e "${extFile}/fileinfo.so" ]; then
+. ${setup_path}/panel/install/install_soft.sh 1 $action_type fileinfo $php_version
+fi
+
+echo 'php-fileinfo 插件安装成功'
+echo '---------------------------------'
+
+
+#安装php-swoole 插件
+# if [ ! -e "${extFile}/swoole.so" ]; then
+# . ${setup_path}/panel/install/install_soft.sh 1 $action_type swoole4 $php_version
+# fi
+
+
+
+# 定义函数,用于检查并修改php.ini中的disable_functions配置
+function modify_disable_functions {
+    local setup_path="$1"
+    local php_version="$2"
+    local functions_to_check=("proc_open" "pcntl_signal" "pcntl_signal_dispatch" "pcntl_fork" "pcntl_wait" "pcntl_alarm")
+    local ini_file="${setup_path}/php/${php_version}/etc/php.ini"
+
+    # 检查文件是否存在
+    if [ ! -f "$ini_file" ]; then
+        echo "Error: PHP configuration file not found at $ini_file"
+        return 1
+    fi
+
+    # 遍历函数列表,检查并修改disable_functions配置
+    for func in "${functions_to_check[@]}"; do
+        # 检查函数是否已经在disable_functions列表中
+        if grep -q "disable_functions.*$func" "$ini_file"; then
+            echo "Info: $func is already disabled in $ini_file, removing..."
+
+            # 使用sed命令精确地删除函数及其周围的逗号和空格
+            # 注意:这里假设函数周围总是存在逗号和空格,这可能需要根据实际情况调整
+            sed -i "s/, \+$func,/,/g" "$ini_file"
+
+            # 检查命令是否成功执行
+            if [ $? -eq 0 ]; then
+                echo "Info: Successfully removed $func from $ini_file"
+            else
+                echo "Error: Failed to remove $func from $ini_file"
+                return 1
+            fi
+        else
+            echo "Info: $func is not disabled in $ini_file, skipping..."
+        fi
+    done
+
+    return 0
+}
+
+# 调用函数,传入正确的参数
+modify_disable_functions "${setup_path}" "$php_version"
+#pcntl_signal pcntl_signal_dispatch pcntl_fork pcntl_wait pcntl_alarm 禁用函数删除
+#sed -i 's/,proc_open//' ${setup_path}/php/$php_version/etc/php.ini
+# 注意:请根据实际的PHP版本和安装路径调整参数
+
+echo '修改mysql sql_mode配置'
+echo '---------------------------------'
+#修改mysql配置
+# MySQL配置文件路径
+CONFIG_FILE="/etc/my.cnf"
+
+# 检查配置文件是否存在
+if [ ! -f "$CONFIG_FILE" ]; then
+    echo "MySQL配置文件 $CONFIG_FILE 不存在,请检查路径"
+    exit 1
+fi
+# 首先检查是否存在 [mysqld] 段落
+if ! grep -q "\[mysqld\]" "$CONFIG_FILE"; then
+    echo "\[mysqld\]" >> "$CONFIG_FILE"
+fi
+
+# 备份原配置文件(可选)
+cp "$CONFIG_FILE" "${CONFIG_FILE}.bak"
+echo "MySQL配置文件已备份至 ${CONFIG_FILE}.bak"
+
+# 使用grep检查sql_mode是否存在,如果存在,则替换其值
+if grep -q "^[[:space:]]*sql_mode[[:space:]]*=" "$CONFIG_FILE"; then
+    # 如果存在,修改 sql_mode 的值
+    sed -i 's/^ *sql_mode *=.*$/sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION/' "$CONFIG_FILE"
+fi
+
+# 使用grep检查sql-mode是否存在
+if grep -q "^[[:space:]]*sql-mode[[:space:]]*=" "$CONFIG_FILE"; then
+    # 如果存在,修改 sql-mode 的值
+    sed -i 's/^ *sql-mode *=.*$/sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION/' "$CONFIG_FILE"
+fi
+# 使用grep -E支持扩展正则表达式,同时匹配sql_mode和sql-mode,如果行不存在,则在[mysqld]段末尾添加新的sql_mode设置
+if ! grep -qE "^[[:space:]]*(sql_mode|sql-mode)[[:space:]]*=" "$CONFIG_FILE"; then
+    sed -i '/\[mysqld\]/a\sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' "$CONFIG_FILE"
+fi
+
+
+# 检查并显示修改后的配置文件中关于sql_mode的部分
+grep 'sql-mode' "$CONFIG_FILE"
+grep 'sql_mode' "$CONFIG_FILE"
+
+# 重启mysql
+echo "MySQL配置文件已更新,正在重载MySQL配置..."
+/etc/init.d/mysqld reload
+echo "如果没生效请重启MySQL服务。"
+echo "--------------------------------------"
+
+#修改nginx配置
+project_path=$(cd `dirname $0`; pwd)
+project_name="${project_path##*/}"
+domain="${project_name//_/.}"
+if [ -e "${setup_path}/panel/vhost/nginx/${domain}.conf" ]; then
+echo -e "
+server
+{
+    listen 80;
+    server_name ${domain};
+    index index.php index.html index.htm default.php default.htm default.html;
+    root /www/wwwroot/${project_name}/public;
+
+    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
+    #error_page 404/404.html;
+    #SSL-END
+
+    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
+    #error_page 404 /404.html;
+    #error_page 502 /502.html;
+    #ERROR-PAGE-END
+
+    #PHP-INFO-START  PHP引用配置,可以注释或修改
+    #清理缓存规则
+
+    location ~ /purge(/.*) {
+        proxy_cache_purge cache_one \$host\$1\$is_args\$args;
+    }
+    #引用反向代理规则,注释后配置的反向代理将无效
+    location /notice {
+        proxy_pass http://127.0.0.1:40001/;
+        proxy_http_version 1.1;
+        proxy_set_header Upgrade \$http_upgrade;
+        proxy_set_header Connection "upgrade";
+        proxy_set_header X-real-ip \$remote_addr;
+        proxy_set_header X-Forwarded-For \$remote_addr;
+    }
+    #提示:v4.3.0 以前版本,可不用配置一下代码
+    location /msg {
+        proxy_pass http://127.0.0.1:40002/;
+        proxy_http_version 1.1;
+        proxy_set_header Upgrade \$http_upgrade;
+        proxy_set_header Connection "upgrade";
+        proxy_set_header X-real-ip \$remote_addr;
+        proxy_set_header X-Forwarded-For \$remote_addr;
+    }
+
+	include enable-php-$php_version.conf;
+    #PHP-INFO-END
+
+    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
+    include ${setup_path}/panel/vhost/rewrite/${domain}.conf;
+    #REWRITE-END
+
+    #禁止访问的文件或目录
+    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
+    {
+        return 404;
+    }
+
+    #一键申请SSL证书验证目录相关设置
+    location ~ \.well-known{
+        allow all;
+    }
+
+    access_log  /www/wwwlogs/${domain}.log;
+    error_log  /www/wwwlogs/${domain}.error.log;
+}
+" > ${setup_path}/panel/vhost/nginx/${domain}.conf
+fi
+echo 'nginx配置成功'
+echo '---------------------------------'
+
+# 伪静态配置
+if [ -e "${setup_path}/panel/vhost/rewrite/${domain}.conf" ]; then
+echo -e "
+location / {
+   if (!-e \$request_filename) {
+   	rewrite  ^(.*)$  /index.php?s=/\$1  last;
+   	break;
+   }
+}
+" > ${setup_path}/panel/vhost/rewrite/${domain}.conf
+fi
+echo '伪静态配置成功'
+echo '---------------------------------'
+
+echo '重载nginx配置'
+/etc/init.d/nginx reload
+echo '---------------------------------'
+
+#获取域名列表
+
+# config_file=${setup_path}/panel/vhost/nginx/${domain}.conf
+# #获取域名列表
+# domain_list=$(cat $config_file|grep server_name|head -n 1|sed "s/server_name//"|sed "s/;//"|xargs)
+# #获取PHP版本
+# php_version=$(cat $config_file|grep 'enable-php'|grep -Eo "[0-9]+"|head -n 1)
+# echo $php_version
+
+
+
+echo '系统环境安装成功!'
+echo '==============================================='
+# 设置目录权限
+echo '---------------------------------'
+echo "设置目录权限"
+chmod -R 777 runtime
+chmod -R 777 .version
+chmod -R 777 .env
+chmod -R 777 .constant
+chmod -R 777 backup
+chmod -R 777 public
+
+
+echo '正在启动系统定时任务、长连接、队列'
+# 启动定时任务
+echo '---------------------------------'
+echo "启动定时任务:$php_path think timer start --d"
+$php_path think timer start --d
+
+# 启动长连接
+echo '---------------------------------'
+echo "启动长连接:$php_path think workerman start --d"
+$php_path think workerman start --d
+
+# 启动队列
+echo '---------------------------------'
+echo "启动队列:$php_path think queue:listen --queue"
+$php_path think queue:listen --queue
+
+
+# 操作说明,进入程序根目录运行 /bin/bash baota.sh

+ 1 - 1
crmeb/public/install/index.php

@@ -302,7 +302,7 @@ switch ($step) {
                 $sql = trim($sqlFormat[$i]);
                 if (strstr($sql, 'CREATE TABLE')) {
                     preg_match('/CREATE TABLE (IF NOT EXISTS)? `eb_([^ ]*)`/is', $sql, $matches);
-                    mysqli_query($conn, "DROP TABLE IF EXISTS `$matches[2]");
+                    mysqli_query($conn, "DROP TABLE IF EXISTS `$matches[2]`");
                     $sql = str_replace('`eb_', '`' . $dbPrefix, $sql);//替换表前缀
                     $ret = mysqli_query($conn, $sql);
                     if ($ret) {

+ 14 - 15
docker-compose/linux/docker-compose.yml

@@ -4,24 +4,24 @@ services:
   mysql:
     container_name: crmeb_mysql #指定容器名
     image: mysql:5.7 #一般电脑可以用这个镜像
+    platform: linux/x86_64
     ports:
       - 3336:3306
     # 环境变量
     environment:
       TZ: Asia/Shanghai
-      MYSQL_ROOT_PASSWORD: '123456'
-      MYSQL_USER: 'crmeb'
-      MYSQL_PASS: '123456'
-      MYSQL_DATABASE: 'crmeb'
+      MYSQL_ROOT_PASSWORD: "123456"
+      MYSQL_USER: "crmeb"
+      MYSQL_PASS: "123456"
+      MYSQL_DATABASE: "crmeb"
     privileged: true
-    command:
-       --character-set-server=utf8mb4
-       --collation-server=utf8mb4_general_ci
-       --explicit_defaults_for_timestamp=true
-       --lower_case_table_names=1
-       --max_allowed_packet=128M
-       --default-authentication-plugin=mysql_native_password
-       --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
+    command: --character-set-server=utf8mb4
+      --collation-server=utf8mb4_general_ci
+      --explicit_defaults_for_timestamp=true
+      --lower_case_table_names=1
+      --max_allowed_packet=128M
+      --default-authentication-plugin=mysql_native_password
+      --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
     working_dir: /var/lib/mysql
     volumes:
       - ./mysql/my.cnf:/etc/mysql/my.cnf
@@ -34,7 +34,7 @@ services:
   # redis 容器
   redis:
     container_name: crmeb_redis
-    image: 'redis:alpine'
+    image: "redis:alpine"
     # image: daocloud.io/library/redis:6.0.5-alpine
     # image: redis:5.0
     ports:
@@ -71,11 +71,10 @@ services:
     networks:
       app_net:
         ipv4_address: 192.168.10.90
-#    command: /bin/bash -c "php -v"
   # nginx 容器
   nginx:
     container_name: crmeb_nginx
-    image: 'nginx:alpine'
+    image: "nginx:alpine"
     # image: daocloud.io/library/nginx:1.19.1-alpine
     restart: always
     ports:

BIN
readme/pic/gongyi1.jpg


BIN
readme/pic/gongyi2.jpg


+ 5 - 0
template/uni-app/utils/util.js

@@ -613,6 +613,11 @@ export default {
 
 					}
 				})
+			},
+            fail: function(res) {
+				that.Tips({
+					title: res.errMsg
+				});
 			}
 		})