feat(fsgx): 完成全部24项开发任务 Phase1-7

Phase1 后端核心:
- 新增 fsgx_v1.sql 迁移脚本(is_queue_goods/frozen_points/available_points/no_assess)
- SystemConfigServices 返佣设置扩展(周期人数/分档比例/范围/时机)
- StoreOrderCreateServices 周期循环佣金计算
- StoreOrderTakeServices 佣金发放后同步冻结积分
- StoreProductServices/StoreProduct 保存 is_queue_goods

Phase2 后端接口:
- GET /api/hjf/brokerage/progress 佣金周期进度
- GET /api/hjf/assets/overview 资产总览
- HjfPointsServices 每日 frozen_points 0.4‰ 释放定时任务
- PUT /adminapi/hjf/member/{uid}/no_assess 不考核接口
- GET /adminapi/hjf/points/release_log 积分日志接口

Phase3 前端清理:
- hjfCustom.js 路由精简(仅保留 points/log)
- hjfQueue.js/hjfMember.js API 清理/重定向至 CRMEB 原生接口
- pages.json 公排→推荐佣金/佣金记录/佣金规则

Phase4-5 前端改造:
- queue/status.vue 推荐佣金进度页整体重写
- 商品详情/订单确认/支付结果页文案与逻辑改造
- 个人中心/资产页/引导页/规则页文案改造
- HjfQueueProgress/HjfRefundNotice/HjfAssetCard 组件改造
- 推广中心嵌入佣金进度摘要
- hjfMockData.js 全量更新(公排字段→佣金字段)

Phase6 Admin 增强:
- 用户列表新增 frozen_points/available_points 列及不考核操作按钮
- hjfPoints.js USE_MOCK=false 对接真实积分日志接口

Phase7 配置文档:
- docs/fsgx-phase7-config-checklist.md 后台配置与全链路验收清单

Made-with: Cursor
This commit is contained in:
apple
2026-03-23 22:32:19 +08:00
parent 788ee0c0c0
commit 434aa8c69d
13098 changed files with 2008990 additions and 961 deletions

View File

@@ -0,0 +1,155 @@
<!doctype html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>{$title|default=''} - {$powered|default=''}</title>
<link rel="stylesheet" href="css/install2.css"/>
<link rel="stylesheet" href="css/step1.css"/>
<link rel="stylesheet" href="css/theme-chalk.css"/>
</head>
<body>
<div id="step1" class="wrap">
<div class="title">
<img class="logo" src="./images/install/logo-step1.png" alt="">
<h1>欢迎使用 CRMEB PRO版</h1>
<div class="df agreement cp">
<div class="radio-box" :class="{'is-shock': isShock}" @click="radio = !radio">
<img v-if="radio" src="./images/install/success.png" alt="">
</div>
<span @click="radio = !radio">详细阅读并勾选同意</span>
<span class="agreements" @click.stop="isShow = 1">《软件使用协议》</span>
</div>
<div class="bottom tac"> <span class="btn" :class="{'more-text': radio}" @click="jump">
开始安装</span> </div>
<img class="solgen" src="./images/install/solgen.png" alt="">
</div>
<div class="section" v-if="isShow">
<div class="main cc">
<pre class="pact" readonly="readonly">
<h1 class="title">软件许可协议</h1>
提示条款:
<strong>本协议是您与西安众邦网络科技有限公司共同签署。</strong>
CRMEB客户管理+电商系统以下称“CRMEB”由西安众邦网络科技有限公司以下称“众邦科技”独创开发版权所有Copyright (c)2014-2024众邦科技保留所有权利。CRMEB是国内最稳定、最强大、最先进的互联网电商平台解决方案之一CRMEB基于 PHP + MySQL 的技术采用ThinkPHP框架开发。CRMEB官方对此拥有最终修改权和解释权。
在使用CRMEB客户管理+电商系统(以下称“许可软件”或“本软件”)之前,请您仔细阅读本协议,特别是法律适用和争议解决条款,此等条款将以粗体标识,您需要重点阅读。如您对协议有任何疑问,可向客服咨询。如果您已下载、复制、安装或以其他任何方式使用该软件,则视为已经接受本协议。如果您不接受本协议的全部或部分条款,您将无权使用本软件。请立即终止安装、或以其他方式使用该软件,删除您已经安装或保留的该软件的任何组件。
由于互联网高速发展,您与我们签署的本协议列明的条款并不能完整罗列并覆盖您与我们所有权利与义务,现有的约定也不能保证完全符合未来发展的需求。
因此,《版权声明》及其他规则均为本协议的补充协议,与本协议不可分割且具有同等法律效力。如您使用许可软件,视为您同意上述补充协议。我们如修改本协议或其补充协议,协议条款修改后,请您仔细阅读并接受修改后的协议后再继续使用许可软件。
<br/>
一、定义
软件许可软件或本软件本协议中的“软件”是指CRMEB客户管理+电商系统,由若干模块或功能组成的已经植入或即将植入众邦科技指定产品内的信息处理程序或支持文件,其中支持文件具体包括软件的源代码、目标码以及相关软件中所包含的图片、照片、图标、动画、录音、录像、音乐、文字、代码的全部或部分,还包括与许可软件或众邦产品相关的所有描述其功能、特点、内容、质量、测试、用户手册、用户许可协议等纸质或电子版的资料、技术文档等。
您:本协议中的“您”是指取得众邦科技合法许可使用本软件权利的个人或单个法人实体,法人实体包括公司、企业、机构、组织或单位。
我们本协议中的“我们”即是CRMEB官方是指众邦科技即西安众邦网络科技有限公司及其关联公司。
二次开发:本协议中的“二次开发”在现有的软件上进行定制修改,如对功能扩展,达到您想要的功能,原则不得改变本软件原有系统内核及系统设定的框架,我们允许的二次开发仅指对部分软件界面、功能删改或扩展,并非对内核及框架进行实质性修改。
<br/>
二、软件许可使用内容
在您遵守本协议内容的前提下,您通过我们指定合法渠道购买软件商用许可后,众邦科技授予您的商用许可权利包括:
1、安装和使用权利您可以为商用目的安装和使用本软件使用本软件提供的全部功能。
2、绑定唯一域名的权利在安装本软件前您应当自备一个域名并告知我们以便我们将域名与本软件进行绑定。该绑定域名是商用许可软件的唯一指向。您应确保域名的唯一性、有效性域名一经绑定不得随意更换。您自备的域名可以是顶级、二级、或三级域名您应对域名合法性、有效性承担责任。在使用本软件过程中如需更换域名应提前三个工作日以书面方式告知我们并如实告知被更换域名存在的问题否则我们有权利不予更换。
3、申请商用授权码的权利您在我们指定合法渠道购买软件商用许可后凭借订单号可以在我们官网申请商用授权码并通过我们官方网站下载授权证书。
4、获取商用授权证书的权利通过我们官方网站下载的商用授权证书是许可您将软件商用的合法凭证。该授权证书是授予您以本协议约定方式合法使用软件的永久授权但我们不对授权作无限制使用的永久承诺。
5、授权内容使用权在取得我们许可后您拥有使用本软件构建的网站全部内容使用权并独立承担与之相关法律义务。您可以在协议规定的约束条件下和限制范围内修改 CRMEB 源代码或界面风格以适应您的网站要求,但应保留我们的版权信息。不管你的网站是否整体使用 CRMEB ,还是部份栏目使用 CRMEB在你使用了 CRMEB 的网站主页上必须加上 CRMEB 官方网址(www.CRMEB.com)的链接。
6、在获得商业授权之后您才可以将本软件应用于商业用途同时依据所购买的授权类型确定技术支持内容。商业授权用户享有反馈意见和提出建议的权力相关意见和建议将在我们下一次软件升级中被优先考虑但我们对此不作承诺或保证。
7、CRMEB著作权已在中华人民共和国国家版权局注册(中国国家版权局著作权登记号 2018SR024463),著作权受到法律和国际公约保护。未经我们书面许可,不得删除网站底部及相应的官方链接。购买商业授权请联系众邦科技了解最新说明。
8、本软件适用运营环境在软件相关文档中已经明确提示如因软件安装不符运营环境造成的故障我们不承担任何责任。
<br/>
三、权利限制
1、单一使用限制同一个域名只允许绑定一次。您购买的许可只允许您自己使用不得再许可任何第三人使用。
2、共享软件限制您不得通过共享软件的全部或部分允许多人使用软件的部分或全部功能。
3、软件分解限制您不得通过分解软件把不同功能或把软件的不同部分嵌入到其他软件系统。
4、软件完整性限制您不得删除软件中的任何版权申明、提示亦不得对软件中出现的任何商标或标识进行涂抹、修改或删除除非已经获得我们的书面同意您应将需要修改的标识等详细情况书面告知我们以便我们评估您的需要。
5、反向工程、反编译、反汇编限制您不得对软件进行反向工程、反编译、反汇编除非法律明确规定允许这些行为除外。
6、转让限制未经众邦科技的书面同意您不得公开、转让、出租、出借、再许可、分发该软件的全部或任何部分或软件单一备份副本给第三方。
7、保密限制未经众邦科技书面同意您不得将本软件的性能或其他任何评估、测试结果、技术秘密透露给任何第三方。
<br/>
四、权利保留
1、众邦科技依法保留未在本协议中明确授予给您的其他一切在法律上属于众邦科技的权利。
2、本软件受著作权法、国际著作权条约和其他的知识产权法律或国际条约保护。根据本协议在此仅许可您非独占性的、非排他性的一般许可使用该软件的权利而不是出售或转让。
3、商标权本协议不授予您众邦科技或其供应商的任何商标或服务标志相关的任何权利。
4、本软件所涉及到的一切知识产权包括但不限于专利权、著作权、商标权、商业秘密、技术秘密均属于各自内容拥有者的财产众邦科技保留从其所拥有的知识产权获取利益的权利。
5、未经我们书面许可不得对本软件或与之关联的商业授权进行出租、出售、抵押或发放子许可证。
6、未经我们书面许可禁止在 CRMEB 的整体或任何部分基础上以发展任何派生版本、修改版本或第三方版本用于重新分发。
7、您一旦开始确认本协议并安装 CRMEB即被视为完全理解并接受本协议的各项条款在享有上述条款授予的权力的同时受到相关的约束和限制。协议许可范围以外的行为将直接违反本授权协议并构成侵权我们有权立即终止授权责令停止损害并保留追究相关责任的权力。
<br/>
五、知识产权
1、我们拥有许可软件的著作权、商业秘密以及其他相关的知识产权包括与许可软件有关的各种文档资料。许可软件的相关标识属于我们及我们的关联公司的知识产权并受到相关法律法规的保护。
2、在未获得我们明确同意前您不得复制、模仿、使用或发布上述图标也不得修改或删除应用产品中体现我们及其关联公司的任何标识、图标或身份信息。
3、未经我们及我们的关联公司事先书面同意您不得为任何营利性或非营利性的目的自行实施、利用、转让或许可任何第三方实施、利用、转让上述知识产权。
4、除非在此明确地许可或授予本协议并不涉及任何技术转让软件里所包含和涉及所有权利产权和利益属于我们独自所有。除非在此明确地许可本合同并不将任何技术转让给您。
<br/>
六、升级版本
1、我们会根据需要在后续进行一系列免费升级操作您只有在获得商业使用授权许可后才享有软件免费升级权益。我们有权决定将升级包何时以何种方式发送给您。
2、升级版本的许可如果该软件经众邦科技同意升级除非升级版本有替代的软件许可协议否则升级版本仍应遵循本协议条款。
3、不论软件是否升级您必须遵守本协议。
<br/>
七、无担保和责任限制
1、除众邦科技明确明示保证的事项以外对其他任何默示、特定用途、适销性不做任何默示或明示的保证由此引起的风险由您自己承担。
2、有关本软件在使用过程中存在不适用性情况您应当立即以书面方式反馈给我们在我们现有技术可以解决的情况下将依照众邦科技的软件产品标准保修政策规定。
1)众邦科技不对试用期及免费试用软件因使用而产生的损失承担任何明示或暗示的责任。
2)众邦科技承担的所有责任以您购买该软件所支付的价款为限。
3、对因意外事故、滥用、错误使用、擅自修改所引起的软件使用问题我们不承担任何责任也不做任何保证。对因软件产品存在被攻击或者自然灾害等不可抗力因素或非众邦科技原因导致软件不能使用或造成损失的我们不承担任何责任也不做任何保证。
4、对因使用软件引起的其他任何附带的、间接的或惩罚性的损失包括但不限于商业利润的损失、信息或数据的丢失众邦科技不承担任何责任即使众邦科技已被告知存在此种损害的可能性也不例外。
5、除法律法规有明确规定外我们将尽最大努力确保许可软件及其所涉及的技术及信息安全、有效、准确、可靠但受限于我们现有技术您充分理解我们不能对此进行担保。您理解对于因您自身、不可抗力及第三方原因导致的您的直接或间接损失我们无法承担责任。
6、由于您因下述任一情况所引起或与此有关的人身伤害或附带的、间接的损害赔偿包括但不限于利润损失、资料损失、业务中断的损害赔偿或其他商业损害赔偿或损失需由您自行承担使用或未能使用许可软件第三方未经批准的使用许可软件或更改您的数据使用许可软件进行的行为产生的费用及损失您对许可软件的误解非因我们的原因而引起的与许可软件有关的其他损失。
7、非经我们或我们授权开发并正式发布的其他任何由许可软件衍生的软件均属非法下载、安装、使用此类软件或未经绑定唯一指向域名可能导致不可预知的风险由此产生的法律责任与纠纷与我们无关我们有权中止、终止使用许可和其他一切服务。
8、您与其他使用许可软件的用户之间通过许可软件进行时因您受误导或欺骗而导致或可能导致的任何心理、生理上的伤害以及经济上的损失均应由侵权方依法承担所有责任。
<br/>
八、保密条款
双方都应为可能获知另一方的商业计划、客户方资料、技术、产品、代码、文档和其他作为该方商业秘密的秘密信息予以保密。秘密信息包括所有有形的或无形的、标明为秘密的信息。秘密信息归披露方所有,除非经披露方声明许可否则不得披露或使用。
<br/>
九、协议终止和违约责任
1、如果您没有遵守本协议的部分或全部条款众邦科技可以随时单方终止本协议。协议终止后我们将取消对您的商用许可授权同时您必须立即停止使用该软件对已经安装的软件进行卸载如果由于您违反了本协议的规定给众邦科技造成损失应承担损失赔偿责任。
2、您应理解按授权范围使用许可软件、尊重软件及软件包含内容的知识产权、按规范使用软件、按本协议约定履行义务是您获取我们授权使用软件的前提如您违反本协议我们有权终止使用许可。
3、您对软件的使用有赖于我们及关联公司为您提供的配套服务您违反与我们或我们关联公司的条款、协议、规则、通告等相关规定我们有权终止使用许可。您违反了本协议的规定给众邦科技造成损失应承担给我们造成损失的赔偿责任。
4、您理解出于维护软件系统及软件平台秩序的目的如果您向我们及我们的关联公司作出任何形式的承诺且相关公司已确认您违反了该承诺并通知我们依据您与其相关约定进行处理的则我们可按您的承诺或协议约定的方式对您的使用许可及其他我们可控制的权益采取限制措施包括中止或终止对您的使用许可并追究您相关法律责任的权利。
5、您如从获得我们授权认可的第三方取得许可软件您需要遵守本协议及第三方对您使用许可软件方式与限制的约定如果您违反本协议及与第三方约定我们有权终止对您的使用许可并追究您相关法律责任。
6、您应对从本软件获得的代码、文档等技术信息保密不得对源代码、文档及框架进行删改不得破译加密部分不得非法进行倒卖本软件我们不对非法软件使用后果承担任何责任并有权追究您的法律责任您应当赔偿因您的侵权行为给我们造成的直接和间接损失。
7、如您违反本协议规定的条款则构成违约应当承担软件销售价格十倍至五十倍不等的违约金如给我们或其他用户造成损失的您必须承担全部的赔偿责任包括直接损失和间接损失包括但不限于咨询费、诉讼费、执行费、保全费、保险费、律师费等费用。
<br/>
十、管辖法律及可分割性
1、<strong>本协议之效力、解释、变更、执行与争议解决均适用中华人民共和国法律,如无相关法律规定的,则应参照通用国际商业惯例和(或)行业惯例。本协议由您与我们于我们服务器所在地陕西省西安市莲湖区签署。因本协议产生或与本协议有关的争议,您可与我们以友好协商,协商不成时,提交西安仲裁委员会予以裁决。仲裁裁决是终局的,对双方均有拘束力。</strong>
2、本协议任何条款被认定为无效的不应影响其他条款或其任何部分的效力您与我们仍应善意履行。
<br/>
十一、其它说明
1.<strong>CRMEB产品没有收集任何最终用户的个人隐私信息。</strong>
2.为了保障您使用CRMEB的产品与/或服务稳定性和版权合法性我们需要收集您的设备信息操作系统及软件版本、安装站点域名、IP地址、浏览器信息
<br/>
十二、其它条款
1、本协议未约定的由双方另行商定。
2、本协议的所有标题仅是为了醒目及阅读方便本身并没有实际涵义不能作为解释本协议涵义的依据。
西安众邦网络科技有限公司
协议发布时间: 2017年08月01日
CRMEB官方网站https://www.crmeb.com
</pre>
</div>
<div class="bottom" @click="agree">我知道了</div>
</div>
</div>
</body>
<script src="js/vue2.6.11.js"></script>
<script src="js/element-ui.js"></script>
<script>
new Vue({
el: '#step1',
data() {
return { radio: 0,isShow: 0,isShock:false }
},
methods:{
jump(){
if(this.radio==1){
window.location.href = "./index?step=2";
} else {
this.isShock = true
setTimeout(e=>{this.isShock = false},500)
}
},
agree(){
this.isShow = 0
}
}
})
</script>
</html>

View File

@@ -0,0 +1,169 @@
<!doctype html>
<html>
<head>
<meta charset="UTF-8"/>
<title>{$title|default=''} - {$powered|default=''}</title>
<link rel="stylesheet" href="css/install2.css"/>
<link rel="stylesheet" href="css/step2.css?v=1.1"/>
<link rel="stylesheet" href="css/theme-chalk.css"/>
</head>
<body>
<div class="wrap" id="step2">
<div class="title">安装检测</div>
<div class="content">
<div class="menu">
<div class="head">
<h1>安装检测</h1>
<a class="again" href="?step=2">重新检测
<img class="upload" src="./images/install/upload.png" alt="">
</a>
</div>
<div class="p8">安装环境需满足系统运行要求</div>
<div>
<div class="tab" :class="{'on': index === 0}" @click="index = 0">
<div class="left-img">
<img class="env" src="./images/install/environment.png" alt="">
<img class="warring" src="./images/install/sure.png" alt="">
</div>
<div>
<div>环境及配置</div>
<div class="p8">基础的系统操作环境</div>
</div>
</div>
<div class="tab" :class="{'on': index === 1}" @click="index = 1">
<div class="left-img">
<img class="jur" src="./images/install/jurisdiction.png" alt="">
<img class="warring btn-warning" src="./images/install/sure.png" alt="">
</div>
<div>
<div>权限检测</div>
<div class="p8">目录及文件权限检测</div>
</div>
</div>
</div>
</div>
<section class="config-list">
<div class="server">
<table width="100%" v-if="index === 0">
<tr>
<td class="td1">环境检测</td>
<td class="td1" width="25%">推荐配置</td>
<td class="td1" width="25%">最低要求</td>
<td class="td1" width="25%">当前状态</td>
</tr>
<tr>
<td>操作系统</td>
<td>类UNIX</td>
<td>不限制</td>
<td><div class="ls-td"><img class="yes" src="./images/install/yes.png" alt="对">{$os}</div></td>
</tr>
<tr>
<td>PHP版本</td>
<td>8.0</td>
<td>8.0</td>
<td><div class="ls-td"><img class="yes" src="./images/install/yes.png" alt="对">{$phpv}</div></td>
</tr>
<tr>
<td>附件上传</td>
<td>>2M</td>
<td>不限制</td>
<td><div class="ls-td"><img class="yes" src="./images/install/yes.png" alt="对">{$uploadSize|raw}</div></td>
</tr>
<tr>
<td>session</td>
<td>启用</td>
<td>启用</td>
<td><div class="ls-td"><img class="yes" src="./images/install/yes.png" alt="对">{$session|raw}</div></td>
</tr>
<tr>
<td>GD库</td>
<td>必须开启</td>
<td>1.0以上</td>
<td>{$gd|raw}</td>
</tr>
<tr>
<td>swoole_loader</td>
<td>必须开启</td>
<td>启用</td>
<td>{$swoole|raw}</td>
</tr>
<tr>
<td>redis</td>
<td>必须开启</td>
<td>启用</td>
<td>{$redis|raw}</td>
</tr>
<tr>
<td>mysql</td>
<td>必须开启</td>
<td>启用</td>
<td>{$mysql|raw}</td>
</tr>
<tr>
<td>curl_init</td>
<td>必须扩展</td>
<td>启用</td>
<td>{$curl|raw}</td>
</tr>
<tr>
<td>bcmath</td>
<td>必须扩展</td>
<td>启用</td>
<td>{$bcmath|raw}</td>
</tr>
<tr>
<td>openssl</td>
<td>必须扩展</td>
<td>启用</td>
<td>{$openssl|raw}</td>
</tr>
<tr>
<td>fileinfo</td>
<td>必须扩展</td>
<td>启用</td>
<td>{$finfo_open|raw}</td>
</tr>
</table>
<table width="100%" v-if="index === 1">
<tr>
<td class="td1">权限检查</td>
<td class="td1" width="25%">推荐配置</td>
<td class="td1" width="25%">写入</td>
<td class="td1" width="25%">读取</td>
</tr>
{$dirStr|raw}
</table>
</div>
</section>
</div>
<div class="bottom-btn">
<div class="bottom tac up-btn">
<a href="?step=1" class="btn">上一步</a>
</div>
<div class="bottom tac">{$next|raw}</div>
</div>
</div>
<div class="footer"> &copy; 2014-2024 <a href="http://www.crmeb.com" target="_blank">www.crmeb.com</a> 西安众邦网络科技有限公司出品</div>
</body>
<script src="js/vue2.6.11.js"></script>
<script src="js/element-ui.js"></script>
<script>
new Vue({
el: '#step2',
data() {
return {
index: 0
}
},
methods:{
next() {
this.$message({
message: '安装环境检测未通过,请检查',
type: 'warning'
});
}
}
})
</script>
</html>

View File

@@ -0,0 +1,228 @@
<!doctype html>
<html>
<head>
<meta charset="UTF-8"/>
<title>{$title|default=''} - {$powered|default=''}</title>
<link rel="stylesheet" href="css/install2.css"/>
<link rel="stylesheet" href="css/step3.css?v=1.1"/>
<link rel="stylesheet" href="css/theme-chalk.css"/>
</head>
<body>
<div class="wrap" id="step3">
<div class="title">创建数据</div>
<section class="section">
<form id="J_install_form" action="index?step=4" method="post">
<div class="server" ref="mianscroll">
<table width="100%">
<tr>
<td class="td1" width="100">数据库信息</td>
<td class="td1" width="200">&nbsp;</td>
<td class="td1">&nbsp;</td>
</tr>
<tr>
<td class="tar">数据库服务器:</td>
<td><input type="text" name="dbhost" id="dbhost" value="127.0.0.1" class="input"></td>
<td><div id="J_install_tip_dbhost"><span class="gray">数据库服务器地址一般为127.0.0.1</span></div></td>
</tr>
<tr>
<td class="tar">数据库端口:</td>
<td><input type="text" name="dbport" id="dbport" value="3306" class="input"></td>
<td><div id="J_install_tip_dbport"><span class="gray">数据库服务器端口一般为3306</span></div></td>
</tr>
<tr>
<td class="tar">数据库用户名:</td>
<td><input type="text" name="dbuser" id="dbuser" value="root" class="input"></td>
<td><div id="J_install_tip_dbuser"></div></td>
</tr>
<tr>
<td class="tar">数据库密码:</td>
<td><input type="password" name="dbpw" id="dbpw" value="" class="input" autoComplete="off" onBlur="TestDbPwd(0)"></td>
<td><div id="J_install_tip_dbpw"></div></td>
</tr>
<tr>
<td class="tar">数据库名:</td>
<td><input type="text" name="dbname" id="dbname" value="crmeb" class="input" onBlur="TestDbPwd(0)"></td>
<td><div id="J_install_tip_dbname"></div></td>
</tr>
<tr>
<td class="tar">数据库表前缀:</td>
<td><input type="text" name="dbprefix" id="dbprefix" value="eb_" class="input" ></td>
<td><div id="J_install_tip_dbprefix"><span class="gray">建议使用默认同一数据库安装多个CRMEB时需修改</span></div></td>
</tr>
<!-- <tr>-->
<!-- <td class="tar">演示数据:</td>-->
<!-- <td colspan="2"><input style="width:14px;height:14px;" type="checkbox" id="demo" name="demo" value="demo" checked></td>-->
<!-- </tr>-->
</table>
<table width="100%">
<tr>
<td class="td1" width="100">redis信息</td>
<td class="td1" width="200">&nbsp;</td>
<td class="td1">&nbsp;</td>
</tr>
<tr>
<td class="tar">服务器地址:</td>
<td><input type="text" name="rbhost" id="rbhost" value="127.0.0.1" class="input"></td>
<td><div id="J_install_rbhost"><span class="gray">redis服务器地址一般为127.0.0.1</span></div></td>
</tr>
<tr>
<td class="tar">端口号:</td>
<td><input type="text" name="rbport" id="rbport" value="6379" class="input" autoComplete="off"></td>
<td><div id="J_install_tip_manager_pwd"><span class="gray">redis端口,默认为6379</span></div></td>
</tr>
<tr>
<td class="tar">数据库:</td>
<td><input type="text" name="rbselect" id="rbselect" value="0" class="input" autoComplete="off"></td>
<td><div id="J_install_tip_manager_ckpwd"><span class="gray">redis数据库默认为0,一般不做更改</span></div></td>
</tr>
<tr>
<td class="tar">数据库密码:</td>
<td><input type="password" name="rbpw" onBlur="TestDbPwd(0)" id="rbpw" value="" class="input" autoComplete="off"></td>
<td><div id="J_install_tip_dbpw"></div><span class="gray">redis数据库密码</span></td>
</tr>
</table>
<table width="100%">
<tr>
<td class="td1" width="100">管理员信息</td>
<td class="td1" width="200">&nbsp;</td>
<td class="td1">&nbsp;</td>
</tr>
<tr>
<td class="tar">管理员帐号:</td>
<td><input type="text" name="manager" id="manager" value="admin" class="input"></td>
<td><div id="J_install_tip_manager"></div></td>
</tr>
<tr>
<td class="tar">管理员密码:</td>
<td><input type="password" name="manager_pwd" id="manager_pwd" class="input" value="" autoComplete="off"></td>
<td><div id="J_install_tip_manager_pwd"></div></td>
</tr>
<tr>
<td class="tar">重复密码:</td>
<td><input type="password" name="manager_ckpwd" id="manager_ckpwd" class="input" value="" autoComplete="off"></td>
<td><div id="J_install_tip_manager_ckpwd"></div></td>
</tr>
</table>
</div>
<div class="bottom-btn">
<div class="bottom tac up-btn">
<a href="./index?step=2" class="btn">上一步</a>
</div>
<div class="bottom tac next">
<a onClick="checkForm();" class="btn">下一步</a>
</div>
</div>
</form>
</section>
<div style="width:0;height:0;overflow:hidden;"><img src="images/install/pop_loading.gif"></div>
<script src="js/jquery.js?v=9.0"></script>
<script src="js/validate.js?v=9.0"></script>
<script src="js/ajaxForm.js?v=9.0"></script>
<script>
$('.on-other').click(function () {
$('.other').toggle();
}).mouseover(function () {
$(this).css('color','#417b9d');
}).mouseout(function () {
$(this).css('color','#ccc');
});
function TestDbPwd(connect_db)
{
var dbHost = $('#dbhost').val();
var dbUser = $('#dbuser').val();
var dbPwd = $('#dbpw').val();
var dbName = $('#dbname').val();
var dbport = $('#dbport').val();
// var demo = $('#demo').val();
var data={
'dbHost': dbHost,
'dbUser': dbUser,
'dbPwd': dbPwd,
'dbName': dbName,
'dbport': dbport,
// 'demo': demo,
rbhost: $('#rbhost').val(),
rbport: $("#rbport").val(),
rbselect: $("#rbselect").val(),
rbpw: $('#rbpw').val(),
cache_prefix:$('#cache_prefix').val(),
cache_tag_prefix:$('#cache_tag_prefix').val(),
workerman_admin_port:$('#workerman_admin_port').val(),
workerman_chat_port:$('#workerman_chat_port').val(),
workerman_channel_port:$('#workerman_channel_port').val(),
};
var url = "?step=3&testdbpwd=1";
$.ajax({
type: "POST",
url: url,
data: data,
dataType:'JSON',
beforeSend:function(){
},
success: function(msg){
if(msg == 1){
if(connect_db == 1)
{
$("#J_install_form").submit(); // ajax 验证通过后再提交表单
}
$('#J_install_tip_dbpw').html('');
$('#J_install_tip_dbname').html('');
$('#J_install_rbhost').html('');
}
else if(msg == -1)
{
$('#J_install_tip_dbpw').html('<span for="dbname" generated="true" class="tips_error" style="">请在mysql配置文件修sql-mode或sql_mode为NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION</span>');
}
else if(msg == -2)
{
$('#J_install_tip_dbname').html('<span for="dbname" generated="true" class="tips_error" style="">你的不是空数据库, 请更换一个数据库名字</span>');
} else if(msg == -3){
$('#J_install_tip_dbpw').html('');
$('#J_install_tip_dbname').html('');
$('#J_install_rbhost').html('<span for="dbname" generated="true" class="tips_error" style="">Redis数据库没有启动或者密码错误</span>');
}else{
$('#dbpw').val("");
$('#J_install_tip_dbpw').html('<span for="dbname" generated="true" class="tips_error" style="">数据库链接配置失败</span>');
}
},
complete:function(){
},
error:function(){
$('#J_install_tip_dbpw').html('<span for="dbname" generated="true" class="tips_error" style="">数据库链接配置失败</span>');
$('#dbpw').val("");
}
});
}
function checkForm() {
manager = $.trim($('#manager').val()); //用户名表单
manager_pwd = $.trim($('#manager_pwd').val()); //密码表单
manager_ckpwd = $.trim($('#manager_ckpwd').val()); //密码提示区
if (manager.length == 0) {
alert('管理员账号不能为空');
return false;
}
if (!/^[0-9a-zA-Z]{3,20}$/.test(manager)) {
alert('管理员账号应为3-20位数字和字母');
return false;
}
if (manager_pwd.length < 6) {
alert('管理员密码必须6位数以上');
return false;
}
if (manager_ckpwd != manager_pwd) {
alert('两次密码不一致');
return false;
}
TestDbPwd(1);
}
</script>
</div>
<div class="footer"> &copy; 2014-2022 <a href="http://www.crmeb.com" target="_blank">www.crmeb.com</a> 西安众邦网络科技有限公司出品
</div>
</body>
</html>

View File

@@ -0,0 +1,91 @@
<!doctype html>
<html>
<head>
<meta charset="UTF-8"/>
<title>{$title|default=''} - {$powered|default=''}</title>
<link rel="stylesheet" href="css/install2.css"/>
<link rel="stylesheet" href="css/step4.css"/>
<link rel="stylesheet" href="css/theme-chalk.css"/>
</head>
<body>
<div class="wrap" id="step4">
<div class="title">安装进度</div>
<section class="section">
<div class="title">
<h1>系统安装中,请稍等片刻...</h1>
</div>
<div class="progress">
<el-progress :percentage="percentage" color="#37CA71" define-back-color="rgba(255,255,255,0.5)"
:stroke-width="8"
status="success"></el-progress>
<div class="progress-msg" v-if="!isShow">
<div id="loginner_item" class="msg p8">{{installList[installList.length]}}</div>
</div>
</div>
<div class="bottom tac">
<a href="javascript:;" class="btn_old mid">
<img class="shuaxin" src="./images/install/shuaxin.png" align="absmiddle"/>&nbsp;正在安装...
</a>
</div>
</section>
</div>
<div class="footer"> &copy; 2014-2022 <a href="http://www.crmeb.com" target="_blank">www.crmeb.com</a> 西安众邦网络科技有限公司出品
</div>
</body>
<script src="js/vue2.6.11.js"></script>
<script src="js/element-ui.js"></script>
<script src="js/jquery.js"></script>
<script type="text/javascript">
var n = -1;
var data = <?php echo $data;?>;
$.ajaxSetup({cache: false});
new Vue({
el: '#step4',
data() {
return {
percentage: 0,
isShow: 0,
installList: []
}
},
mounted() {
this.reloads(n);
},
methods: {
reloads(n) {
var url = "?step=4&install=1&n=" + n;
$.ajax({
type: "POST",
url: url,
data: data,
dataType: 'json',
beforeSend: function () {
},
success: (msg)=> {
this.percentage = Math.round((msg.n / msg.count) * 100) > 100 ? 100 : Math.round((msg.n / msg.count) * 100)
if (msg.n >= 0) {
$('#loginner_item').html(msg.msg);
if (msg.n == '999999') {
setTimeout(e => {
this.gonext()
}, 1000);
return false;
} else {
this.reloads(msg.n);
}
} else {
//alert('指定的数据库不存在,系统也无法创建,请先通过其他方式建立好数据库!');
alert(msg.msg);
}
}
});
},
gonext() {
window.location.href = '?step=5';
}
},
})
</script>
</html>

View File

@@ -0,0 +1,51 @@
<!doctype html>
<html>
<head>
<meta charset="UTF-8"/>
<title>{$title|default=''} - {$powered|default=''}</title>
<link rel="stylesheet" href="css/install2.css"/>
<link rel="stylesheet" href="css/step5.css"/>
</head>
<body>
<div class="wrap">
<div class="title">
<img class="yes" src="./images/install/success.png" alt="对">
安装完成</div>
<div class="progress">
<div class="trip p8 mt-10 tip">
请【重启守护进程】后再访问
</div>
</div>
<div class="bottom-btn">
<div class="pre btn">
<a href="/" class="btn mid">进入前台</a>
</div>
<div class="admin btn">
<a href="/admin" class="btn btn_submit J_install_btn mid">进入后台</a>
</div>
</div>
</div>
</body>
<script src="js/jquery.js"></script>
<script>
$(function () {
$.ajax({
type: "POST",
url: "http://shop.crmeb.net/index.php/admin/server.upgrade_api/updatewebinfo",
header: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'X-Requested-With',
'Access-Control-Allow-Methods': 'PUT,POST,GET,DELETE,OPTIONS'
},
data: {
host: '<?php echo $host;?>',
https: '<?php echo "http://".$host;?>',
version: '<?php echo $version;?>',
ip: <?php echo json_encode($ip); ?>
},
dataType: 'json',
success:function () {}
})
});
</script>
</html>