From d871e73d231e61d9559a307b6639880247ee3a49 Mon Sep 17 00:00:00 2001 From: MiAn Date: Mon, 26 Oct 2026 09:21:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E4=BC=9A=E5=91=98?= =?UTF-8?q?=E6=9D=83=E7=9B=8A=E4=B8=8E=E5=88=86=E9=94=80=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=A5=97=E9=A4=90=E7=BB=B4=E5=BA=A6?= =?UTF-8?q?=E6=9D=83=E7=9B=8A=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增会员权益配置控制器 Memberbenefit 和 Publish,拆分运营配置模块 2. 新增套餐表字段 free_view_quota、post_discount,支持按套餐配置免费看和发帖折扣 3. 优化前端页面,新增套餐编辑表单、区域选择器、发布配置交互 4. 新增调试支持,支持 mock openid、本地 IP 绕过权限,便于自动化测试 5. 新增数据库工具脚本,用于检查配置、修复数据、验证会员功能 6. 优化会员接口,返回套餐维度的权益信息,支持无限次免费看场景 --- application/admin/command/FcInstall.php | 35 +- application/admin/command/FcMenu.php | 28 +- application/admin/command/FcVerifyMember.php | 11 +- application/admin/controller/fc/Area.php | 6 +- .../admin/controller/fc/Distrelation.php | 19 +- .../admin/controller/fc/Memberbenefit.php | 48 + application/admin/controller/fc/Plan.php | 27 +- application/admin/controller/fc/Publish.php | 50 ++ application/admin/lang/zh-cn/fc/plan.php | 28 +- application/admin/view/fc/area/add.html | 43 +- application/admin/view/fc/area/edit.html | 45 +- .../admin/view/fc/distrelation/index.html | 1 - .../admin/view/fc/memberbenefit/index.html | 227 +++++ application/admin/view/fc/plan/add.html | 52 +- application/admin/view/fc/plan/edit.html | 48 +- application/admin/view/fc/plan/index.html | 14 +- application/admin/view/fc/publish/index.html | 224 +++++ application/api/controller/Auth.php | 5 + application/api/controller/Member.php | 104 ++- application/api/controller/Post.php | 353 ++++---- application/api/controller/V1.php | 4 + .../common/library/DistributionService.php | 7 +- application/common/library/FcConfig.php | 396 ++++++--- public/assets/css/backend/fc-area.css | 141 +++ public/assets/js/backend/fc/area.js | 824 ++++++++++++++++-- public/assets/js/backend/fc/memberbenefit.js | 15 + public/assets/js/backend/fc/plan.js | 34 +- public/assets/js/backend/fc/publish.js | 35 +- tools/check_admin_rules.php | 17 + tools/check_db_stats.php | 24 + tools/inspect_configs.php | 15 + tools/patch_d4.php | 43 + tools/patch_fixes.php | 64 ++ tools/patch_openid.php | 24 + tools/test_admin_login.php | 23 + uniapp/common/config/index.js | 2 +- uniapp/pages/detail/detail.vue | 37 +- uniapp/pages/index/index.vue | 8 +- uniapp/pages/member/index.vue | 163 ++-- uniapp/pages/post/create.vue | 353 ++++++-- 40 files changed, 2956 insertions(+), 641 deletions(-) create mode 100644 application/admin/controller/fc/Memberbenefit.php create mode 100644 application/admin/controller/fc/Publish.php create mode 100644 application/admin/view/fc/memberbenefit/index.html create mode 100644 application/admin/view/fc/publish/index.html create mode 100644 public/assets/js/backend/fc/memberbenefit.js create mode 100644 tools/check_admin_rules.php create mode 100644 tools/check_db_stats.php create mode 100644 tools/inspect_configs.php create mode 100644 tools/patch_d4.php create mode 100644 tools/patch_fixes.php create mode 100644 tools/patch_openid.php create mode 100644 tools/test_admin_login.php diff --git a/application/admin/command/FcInstall.php b/application/admin/command/FcInstall.php index a4a9d27..e25a10f 100644 --- a/application/admin/command/FcInstall.php +++ b/application/admin/command/FcInstall.php @@ -185,14 +185,45 @@ class FcInstall extends Command $changed++; } - // ② 会员套餐:含发布条数 + // ② 会员套餐:含发布条数、每日免费看条数、超额发布折扣(直接挂在每个套餐上) $planTable = $prefix . 'fc_plan'; if (!$this->hasColumn($planTable, 'post_quota')) { Db::execute("ALTER TABLE `{$planTable}` ADD COLUMN `post_quota` int(10) NOT NULL DEFAULT 0" - . " COMMENT '含发布条数(月/年套餐赠送额度)' AFTER `days`"); + . " COMMENT '含发布条数(套餐赠送额度)' AFTER `days`"); $output->writeln(' - ' . $planTable . ' 新增列 post_quota'); $changed++; } + if (!$this->hasColumn($planTable, 'free_view_quota')) { + Db::execute("ALTER TABLE `{$planTable}` ADD COLUMN `free_view_quota` int(10) NOT NULL DEFAULT 20" + . " COMMENT '每日免费查看条数(0=无限次)' AFTER `post_quota`"); + // 按月卡/季卡/年卡初始化阶梯权益 + Db::execute("UPDATE `{$planTable}` SET `free_view_quota` = 20 WHERE `plan_code` = 'M1'"); + Db::execute("UPDATE `{$planTable}` SET `free_view_quota` = 50 WHERE `plan_code` = 'M3'"); + Db::execute("UPDATE `{$planTable}` SET `free_view_quota` = 0 WHERE `plan_code` = 'M12'"); + $output->writeln(' - ' . $planTable . ' 新增列 free_view_quota(0=无限次免费看)'); + $changed++; + } + if (!$this->hasColumn($planTable, 'post_discount')) { + Db::execute("ALTER TABLE `{$planTable}` ADD COLUMN `post_discount` decimal(4,1) NOT NULL DEFAULT 8.0" + . " COMMENT '超额单条发布折扣(0.1~10,10=不打折)' AFTER `free_view_quota`"); + Db::execute("UPDATE `{$planTable}` SET `post_discount` = 8.5 WHERE `plan_code` = 'M1'"); + Db::execute("UPDATE `{$planTable}` SET `post_discount` = 8.0 WHERE `plan_code` = 'M3'"); + Db::execute("UPDATE `{$planTable}` SET `post_discount` = 7.0 WHERE `plan_code` = 'M12'"); + $output->writeln(' - ' . $planTable . ' 新增列 post_discount'); + $changed++; + } + if (!$this->hasColumn($extTable, 'free_view_quota')) { + Db::execute("ALTER TABLE `{$extTable}` ADD COLUMN `free_view_quota` int(10) NOT NULL DEFAULT 20" + . " COMMENT '当前会员每日免费查看条数(0=无限)' AFTER `free_view_used`"); + $output->writeln(' - ' . $extTable . ' 新增列 free_view_quota'); + $changed++; + } + if (!$this->hasColumn($extTable, 'post_discount')) { + Db::execute("ALTER TABLE `{$extTable}` ADD COLUMN `post_discount` decimal(4,1) NOT NULL DEFAULT 8.0" + . " COMMENT '当前会员超额发布折扣(0.1~10,10=不打折)' AFTER `post_quota_expire`"); + $output->writeln(' - ' . $extTable . ' 新增列 post_discount'); + $changed++; + } // ③ 配置项(只补缺失的,不覆盖运营已改的值) $defaults = [ diff --git a/application/admin/command/FcMenu.php b/application/admin/command/FcMenu.php index ba7a392..7ef9f63 100644 --- a/application/admin/command/FcMenu.php +++ b/application/admin/command/FcMenu.php @@ -68,6 +68,7 @@ class FcMenu extends Command // 运营推广 'fc/banner' => ['fc/marketing', '轮播管理', 'fa fa-image', 95], 'fc/plan' => ['fc/marketing', '会员套餐', 'fa fa-diamond', 90], + 'fc/publish' => ['fc/marketing', '运营配置', 'fa fa-sliders', 88], 'fc/coupon' => ['fc/marketing', '优惠券', 'fa fa-ticket', 85], 'fc/distrelation' => ['fc/marketing', '分销关系', 'fa fa-sitemap', 80], // 权限配置 @@ -84,21 +85,24 @@ class FcMenu extends Command 'addon' => ['fc/system', '插件管理', 'fa fa-rocket', 60], ]; - /** 已并入系统配置页、不再单独显示的历史菜单 */ - const RETIRED = ['fc/setting', 'fc/publish/index']; + /** 已并入对应主菜单、不再单独显示的历史菜单 */ + const RETIRED = ['fc/setting', 'fc/memberbenefit']; /** 权限节点:name => [上级菜单, 标题] */ const NODES = [ - 'fc/dashboard/index' => ['fc/dashboard', '查看'], - 'fc/post/audit' => ['fc/post', '审核'], - 'fc/post/top' => ['fc/post', '置顶'], - 'fc/post/offline' => ['fc/post', '下架'], - 'fc/post/online' => ['fc/post', '上架'], - 'fc/coupon/index' => ['fc/coupon', '查看'], - 'fc/coupon/add' => ['fc/coupon', '添加'], - 'fc/coupon/edit' => ['fc/coupon', '编辑'], - 'fc/coupon/del' => ['fc/coupon', '删除'], - 'fc/coupon/multi' => ['fc/coupon', '批量更新'], + 'fc/dashboard/index' => ['fc/dashboard', '查看'], + 'fc/publish/index' => ['fc/publish', '查看'], + 'fc/plan/savebenefit' => ['fc/plan', '保存特权'], + 'fc/distrelation/saveconfig' => ['fc/distrelation', '保存配置'], + 'fc/post/audit' => ['fc/post', '审核'], + 'fc/post/top' => ['fc/post', '置顶'], + 'fc/post/offline' => ['fc/post', '下架'], + 'fc/post/online' => ['fc/post', '上架'], + 'fc/coupon/index' => ['fc/coupon', '查看'], + 'fc/coupon/add' => ['fc/coupon', '添加'], + 'fc/coupon/edit' => ['fc/coupon', '编辑'], + 'fc/coupon/del' => ['fc/coupon', '删除'], + 'fc/coupon/multi' => ['fc/coupon', '批量更新'], ]; /** 需要整体下线的 FastAdmin 内置菜单(公众号模块 / 框架会员模块) */ diff --git a/application/admin/command/FcVerifyMember.php b/application/admin/command/FcVerifyMember.php index 0afdf67..ef7fafa 100644 --- a/application/admin/command/FcVerifyMember.php +++ b/application/admin/command/FcVerifyMember.php @@ -53,13 +53,16 @@ class FcVerifyMember extends Command // 步骤 1:基础配置与套餐合法性校验 // ---------------------------------------------------- $output->writeln('[+] 步骤 1/7:检查后台会员套餐与权益配置数据'); + Db::execute("UPDATE `fa_fc_plan` SET `post_discount` = 8.5 WHERE `plan_code` = 'M1' AND `post_discount` = 8.0"); + Db::execute("UPDATE `fa_fc_plan` SET `post_discount` = 7.0 WHERE `plan_code` = 'M12' AND `post_discount` = 8.0"); $plans = Db::name('fc_plan')->where('enabled', 1)->order('sort asc')->select(); if (empty($plans)) { throw new \Exception('后台未配置任何启用的会员套餐(fc_plan)'); } $output->writeln(' - 已读取到启用套餐数量: ' . count($plans) . ' 个'); foreach ($plans as $p) { - $output->writeln(" • 套餐 [{$p['plan_code']}] {$p['name']}: 售价¥{$p['price']}, 原价¥{$p['origin_price']}, 有效期{$p['days']}天, 含发布额度{$p['post_quota']}条"); + $fv = (int)$p['free_view_quota'] === 0 ? '无限次' : ($p['free_view_quota'] . '条/日'); + $output->writeln(" • 套餐 [{$p['plan_code']}] {$p['name']}: 售价¥{$p['price']}, 有效期{$p['days']}天, 赠发布{$p['post_quota']}条, 免费看{$fv}, 超额发帖{$p['post_discount']}折"); } $monthPlan = null; @@ -363,6 +366,7 @@ class FcVerifyMember extends Command 'updatetime' => $now, ]); + Db::name('fc_user_ext')->where('user_id', $uid)->delete(); Db::name('fc_user_ext')->insert([ 'user_id' => $uid, 'openid' => 'mock_' . $username, @@ -404,6 +408,11 @@ class FcVerifyMember extends Command } Db::name('fc_post')->where('title', 'like', '%' . $rand . '%')->delete(); Db::name('fc_order')->where('order_no', 'like', '%' . $rand . '%')->delete(); + $wxUsers = Db::name('user')->where('username', 'like', 'test_wx_buyer_%')->column('id'); + if (!empty($wxUsers)) { + Db::name('fc_user_ext')->where('user_id', 'in', $wxUsers)->delete(); + Db::name('user')->where('id', 'in', $wxUsers)->delete(); + } Db::name('user')->where('username', 'like', 'test_%_' . $rand)->delete(); } } diff --git a/application/admin/controller/fc/Area.php b/application/admin/controller/fc/Area.php index 30fdad1..43648e4 100644 --- a/application/admin/controller/fc/Area.php +++ b/application/admin/controller/fc/Area.php @@ -50,11 +50,13 @@ class Area extends Backend return parent::edit($ids); } - /** 省 / 市 / 区县候选值,供表单级联下拉使用 */ + /** + * 省 / 市 / 区县已添加记录,供表单级联下拉合并全国行政区划及已添加状态标记使用 + */ protected function assignAreaOptions() { $rows = Db::name('fc_area') - ->field('province,city,district') + ->field('id,province,city,district,lat,lng') ->order('province asc, city asc, district asc') ->select(); $this->view->assign('areaOptionsJson', json_encode($rows, JSON_UNESCAPED_UNICODE)); diff --git a/application/admin/controller/fc/Distrelation.php b/application/admin/controller/fc/Distrelation.php index aa02a82..05ba8df 100644 --- a/application/admin/controller/fc/Distrelation.php +++ b/application/admin/controller/fc/Distrelation.php @@ -7,31 +7,24 @@ use app\common\controller\Backend; /** * 同城-分销关系 * - * @icon fa fa-circle-o + * @icon fa fa-sitemap */ class Distrelation extends Backend { - /** * FcDistRelation模型对象 * @var \app\admin\model\FcDistRelation */ protected $model = null; + /** + * 初始化模型 + * + * @return void + */ public function _initialize() { parent::_initialize(); $this->model = new \app\admin\model\FcDistRelation; - } - - - - /** - * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法 - * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑 - * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改 - */ - - } diff --git a/application/admin/controller/fc/Memberbenefit.php b/application/admin/controller/fc/Memberbenefit.php new file mode 100644 index 0000000..4a9c679 --- /dev/null +++ b/application/admin/controller/fc/Memberbenefit.php @@ -0,0 +1,48 @@ +request->isPost()) { + $params = $this->request->post('row/a'); + if (!is_array($params)) { + $params = $this->request->post(); + } + try { + FcConfig::saveMember($params); + if (isset($params['fc_dist_enabled']) || isset($params['fc_dist_level1Rate'])) { + FcConfig::saveDistribution($params); + } + } catch (\Exception $e) { + $this->error($e->getMessage()); + } + $this->success('会员权益与分销配置已保存生效'); + } + + $plans = Db::name('fc_plan')->order('sort asc, id asc')->select(); + $this->view->assign('plans', $plans); + $this->view->assign('row', FcConfig::getMemberBenefitConfig()); + return $this->view->fetch(); + } +} diff --git a/application/admin/controller/fc/Plan.php b/application/admin/controller/fc/Plan.php index d2dbaaf..e51dfee 100644 --- a/application/admin/controller/fc/Plan.php +++ b/application/admin/controller/fc/Plan.php @@ -5,33 +5,32 @@ namespace app\admin\controller\fc; use app\common\controller\Backend; /** - * 同城-会员套餐 + * 同城-会员套餐管理(套餐定价与会员权益一体化) * - * @icon fa fa-circle-o + * @icon fa fa-diamond */ class Plan extends Backend { - /** * FcPlan模型对象 * @var \app\admin\model\FcPlan */ protected $model = null; + /** + * 允许列表直接切换的字段 + * @var string + */ + protected $multiFields = 'status,enabled'; + + /** + * 初始化模型 + * + * @return void + */ public function _initialize() { parent::_initialize(); $this->model = new \app\admin\model\FcPlan; - } - - - - /** - * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法 - * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑 - * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改 - */ - - } diff --git a/application/admin/controller/fc/Publish.php b/application/admin/controller/fc/Publish.php new file mode 100644 index 0000000..3967702 --- /dev/null +++ b/application/admin/controller/fc/Publish.php @@ -0,0 +1,50 @@ +request->isPost()) { + $this->token(); + $row = $this->request->post('row/a', []); + if (empty($row)) { + $this->error(__('Parameter %s can not be empty', 'row')); + } + try { + if (isset($row['fc_post_mode']) || isset($row['fc_fee_viewMode'])) { + FcConfig::savePublish($row); + } + if (isset($row['fc_dist_level']) || isset($row['fc_dist_level1Rate'])) { + FcConfig::saveDistribution($row); + } + } catch (Exception $e) { + $this->error($e->getMessage()); + } + $this->success('运营配置保存成功'); + } + + $row = array_merge( + FcConfig::getPublishConfig(), + FcConfig::getDistributionConfig() + ); + $this->view->assign('row', $row); + $this->view->assign('title', '运营配置'); + return $this->view->fetch(); + } +} diff --git a/application/admin/lang/zh-cn/fc/plan.php b/application/admin/lang/zh-cn/fc/plan.php index a9b2da8..503ae87 100644 --- a/application/admin/lang/zh-cn/fc/plan.php +++ b/application/admin/lang/zh-cn/fc/plan.php @@ -1,17 +1,19 @@ 'ID', - 'Plan_code' => '套餐编码', - 'Name' => '套餐名称', - 'Price' => '售价', - 'Origin_price' => '原价', - 'Days' => '有效天数', - 'Post_quota' => '含发布条数', - 'Tag' => '标签', - 'Sort' => '排序', - 'Enabled' => '是否启用', - 'Createtime' => '创建时间', - 'Updatetime' => '更新时间', - 'Operate' => '操作', + 'Id' => 'ID', + 'Plan_code' => '套餐编码', + 'Name' => '套餐名称', + 'Price' => '售价', + 'Origin_price' => '原价', + 'Days' => '有效天数', + 'Post_quota' => '赠送发布条数', + 'Free_view_quota' => '每日免费看', + 'Post_discount' => '超额发帖折扣', + 'Tag' => '标签', + 'Sort' => '排序', + 'Enabled' => '是否启用', + 'Createtime' => '创建时间', + 'Updatetime' => '更新时间', + 'Operate' => '操作', ]; diff --git a/application/admin/view/fc/area/add.html b/application/admin/view/fc/area/add.html index 3e8d41d..cdddcc1 100644 --- a/application/admin/view/fc/area/add.html +++ b/application/admin/view/fc/area/add.html @@ -5,26 +5,41 @@
区域信息
-
省 / 市 / 区县支持下拉选择,也可直接输入新增
+
覆盖全国省 / 市 / 区县,支持点击级联选择、关键字搜索或直接输入新增
- - - + +
+ + + +
+
+
- - - + +
+ + + +
+
+
- - - + +
+ + + +
+
+
@@ -37,20 +52,20 @@
中心坐标
-
用于用户端按定位匹配服务区域
+
选择区域后自动匹配坐标,也可点击「地图选点」微调
- +
- +
@@ -63,7 +78,7 @@
-
未设置坐标:点击「地图选点」后自动填充,用户端才能按定位匹配
+
未设置坐标:选择区域后将自动匹配中心坐标,也可点击「地图选点」手动指定
diff --git a/application/admin/view/fc/area/edit.html b/application/admin/view/fc/area/edit.html index 33445e6..24b946d 100644 --- a/application/admin/view/fc/area/edit.html +++ b/application/admin/view/fc/area/edit.html @@ -5,26 +5,41 @@
区域信息
-
省 / 市 / 区县支持下拉选择,也可直接输入新增
+
覆盖全国省 / 市 / 区县,支持点击级联选择、关键字搜索或直接输入新增
- - - + +
+ + + +
+
+
- - - + +
+ + + +
+
+
- - - + +
+ + + +
+
+
@@ -37,20 +52,20 @@
中心坐标
-
用于用户端按定位匹配服务区域
+
选择区域后自动匹配坐标,也可点击「地图选点」微调
- +
- +
@@ -63,7 +78,7 @@
-
未设置坐标:点击「地图选点」后自动填充,用户端才能按定位匹配
+
未设置坐标:选择区域后将自动匹配中心坐标,也可点击「地图选点」手动指定
@@ -93,7 +108,7 @@
- +
diff --git a/application/admin/view/fc/distrelation/index.html b/application/admin/view/fc/distrelation/index.html index 179fee5..b57e4fd 100644 --- a/application/admin/view/fc/distrelation/index.html +++ b/application/admin/view/fc/distrelation/index.html @@ -15,7 +15,6 @@
-
diff --git a/application/admin/view/fc/memberbenefit/index.html b/application/admin/view/fc/memberbenefit/index.html new file mode 100644 index 0000000..0ced95e --- /dev/null +++ b/application/admin/view/fc/memberbenefit/index.html @@ -0,0 +1,227 @@ + + +
+
+
+ 会员权益配置 + 统一配置 VIP 会员的核心特权参数(免费查看联系方式额度、发帖专属折扣、前端特权清单)与分销裂变比例。 +
+
+ +
+ +
+
+
+

当前会员套餐档位速览

+
套餐价格、有效天数与随卡赠送的免费发布条数在「会员套餐」中维护
+
+ + 前往修改套餐价格与赠送条数 + +
+
+ {foreach $plans as $p} +
+
+ {$p.name|htmlentities}({$p.plan_code|htmlentities}) + {if $p.tag}{$p.tag|htmlentities}{/if} + {if !$p.enabled}已停用{/if} +
+
+ ¥{$p.price|htmlentities} + ¥{$p.origin_price|htmlentities} +
+
+ 有效期:{$p.days|htmlentities} 天  |  赠送发布:{$p.post_quota|htmlentities} 条 +
+
+ {/foreach} +
+
+ +
+ {:token()} + + +
+
+
+

一、VIP 会员核心权益设置

+
配置会员在浏览联系方式、付费发帖时的专属优待规则
+
+
+ +
+ +
+
+ + 条 / 日 +
+
+
+ 填 >0(如 20)表示会员每天可免费解锁 20 条联系方式(次日零点重置);填 0 表示会员不限次数无限免费看 +
+
+ +
+ +
+ +
+
+ 当会员赠送的发布额度用尽后,单条付费发布享受的折扣(如填 8 折 则 5 元/条自动折算为 4 元/条) +
+
+ +
+ +
+ + 每行一条,实时同步展示在小程序「会员中心」专属权益说明列表中 +
+
+
+ + +
+
+
+

二、分销裂变返佣设置

+
用户邀请好友开通会员、付费发帖、付费看电话时自动按比例结算推广佣金
+
+
+ +
+ +
+ + + + +
+
+ +
+ +
+ +
+
+ +
+ +
+
+ + % +
+
+
+ 直接推荐人获得的订单实付金额百分比 +
+
+ +
+ +
+
+ + % +
+
+
+ 间接推荐人获得的订单实付金额百分比 +
+
+ +
+ +
+ +
+
+ 如 T+7,展示在小程序推广中心 +
+
+ +
+ +
+
+ + 元 +
+
+
+
+ + +
+
+
diff --git a/application/admin/view/fc/plan/add.html b/application/admin/view/fc/plan/add.html index a889557..21ff336 100644 --- a/application/admin/view/fc/plan/add.html +++ b/application/admin/view/fc/plan/add.html @@ -3,43 +3,76 @@
- +
- +
- +
+ + 元 +
- +
+ + 元 +
- +
+ + 天 +
- +
+ + 条 +
+ 开通本套餐附赠的免费发布条数(填 0 表示不赠送) +
+
+
+ +
+
+ + 条 / 日 +
+ 会员每日免费查看联系方式条数(填 0 表示无限次免费查看) +
+
+
+ +
+
+ + 折 +
+ 赠送额度用完后单条付费发布的折扣(填 8 代表 8 折,填 10 代表原价不打折)
- +
@@ -51,7 +84,10 @@
- + + + +