From bdc0ff2399eab02f55dbc5aacdb2640335a340e6 Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Tue, 28 Apr 2026 16:13:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E4=BC=9A=E5=91=98=E7=BA=A7?= =?UTF-8?q?=E5=88=AB=E4=B8=8E=E4=BC=9A=E5=91=98=E6=9D=83=E7=9B=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/wdsxh/member/Level.php | 4 +- .../admin/controller/wdsxh/member/Rights.php | 8 +- .../admin/model/wdsxh/member/Level.php | 4 - .../admin/view/wdsxh/member/level/add.html | 72 ++++++++--------- .../admin/view/wdsxh/member/level/edit.html | 78 +++++++++---------- .../admin/view/wdsxh/member/rights/add.html | 12 +-- .../admin/view/wdsxh/member/rights/edit.html | 11 +-- 7 files changed, 83 insertions(+), 106 deletions(-) diff --git a/application/admin/controller/wdsxh/member/Level.php b/application/admin/controller/wdsxh/member/Level.php index 46b2da0..9517c3e 100644 --- a/application/admin/controller/wdsxh/member/Level.php +++ b/application/admin/controller/wdsxh/member/Level.php @@ -202,9 +202,7 @@ class Level extends Backend if (false === $this->request->isPost()) { $benefits = $this->benefit_model->getSimpleByStatus(0); $this->view->assign('benefits', $benefits); - if (is_null($row['benefits_id'])) { - $row['benefits_id'] = []; - } + $join_config = $this->join_config_model->getSimpleByStatus(); $this->view->assign('join_config', $join_config); diff --git a/application/admin/controller/wdsxh/member/Rights.php b/application/admin/controller/wdsxh/member/Rights.php index b1e6bca..1b7b5a9 100755 --- a/application/admin/controller/wdsxh/member/Rights.php +++ b/application/admin/controller/wdsxh/member/Rights.php @@ -20,7 +20,7 @@ use app\common\controller\Backend; */ class Rights extends Backend { - protected $join_config_model = null; + protected $level_model = null; public function _initialize() { @@ -28,8 +28,10 @@ class Rights extends Backend $this->model = new \app\admin\model\wdsxh\member\MemberBenefits(); $this->view->assign("statusList", $this->model->getDisabledList()); - $this->join_config_model = new \app\admin\model\wdsxh\member\JoinConfig(); - $this->view->assign('join_config', $this->join_config_model->getSimpleByStatus()); + $this->level_model = new \app\admin\model\wdsxh\member\Level; + $level_id = $this->request->get('level_id'); + $level = $this->level_model->get($level_id); + $this->view->assign('join_config_id', $level['join_config_id']); $this->searchFields = ['title']; } diff --git a/application/admin/model/wdsxh/member/Level.php b/application/admin/model/wdsxh/member/Level.php index fbd0d60..82c8ff6 100644 --- a/application/admin/model/wdsxh/member/Level.php +++ b/application/admin/model/wdsxh/member/Level.php @@ -32,10 +32,6 @@ class Level extends Model protected $updateTime = 'updatetime'; protected $deleteTime = false; - protected $type = [ - 'benefits_id' => 'json', - ]; - // 追加属性 protected $append = [ 'status_text' diff --git a/application/admin/view/wdsxh/member/level/add.html b/application/admin/view/wdsxh/member/level/add.html index 371d9d9..96fb748 100644 --- a/application/admin/view/wdsxh/member/level/add.html +++ b/application/admin/view/wdsxh/member/level/add.html @@ -23,7 +23,7 @@ -
+ +
@@ -85,12 +85,12 @@ // 获取DOM元素 var joinConfigSelect = document.getElementById('input-join-config'); var benefitsSelect = document.getElementById('input-benefits'); - + if (!joinConfigSelect || !benefitsSelect) return; - + var pendingXhr = null; var benefitsCache = {}; - + // 刷新 bootstrap-select (因为selectpicker需要jQuery,这里用原生方式触发) function refreshSelectpicker(selectEl) { // bootstrap-select 的刷新方法需要通过 jQuery 调用 @@ -98,13 +98,13 @@ $(selectEl).selectpicker('refresh'); } } - + // 设置禁用状态 function setDisabled(selectEl, disabled) { selectEl.disabled = disabled; refreshSelectpicker(selectEl); } - + // 清空已选中的权益值 function clearBenefitsSelected() { // 清空所有option的selected状态 @@ -115,12 +115,12 @@ benefitsSelect.value = ''; refreshSelectpicker(benefitsSelect); } - + // 渲染权益选项 function renderBenefits(benefitsList) { // 清空原有选项 benefitsSelect.innerHTML = ''; - + if (!benefitsList || benefitsList.length === 0) { var emptyOption = document.createElement('option'); emptyOption.value = ''; @@ -135,10 +135,10 @@ benefitsSelect.appendChild(option); } } - + refreshSelectpicker(benefitsSelect); } - + // 防XSS function escapeHtml(str) { if (!str) return ''; @@ -149,7 +149,7 @@ return m; }); } - + // 请求接口获取权益 function fetchBenefits(joinConfigId) { return new Promise(function(resolve, reject) { @@ -157,35 +157,35 @@ resolve([]); return; } - + if (benefitsCache[joinConfigId]) { resolve(benefitsCache[joinConfigId]); return; } - + var apiUrl = '/fxWbNZyTRt.php/wdsxh/member/level/benefits?join_config_id=' + encodeURIComponent(joinConfigId); - + if (pendingXhr) { pendingXhr.abort(); } - + setDisabled(benefitsSelect, true); - + var xhr = new XMLHttpRequest(); pendingXhr = xhr; xhr.open('GET', apiUrl, true); xhr.timeout = 10000; - + xhr.onreadystatechange = function() { if (xhr.readyState === 4) { pendingXhr = null; setDisabled(benefitsSelect, false); - + if (xhr.status === 200) { try { var res = JSON.parse(xhr.responseText); var benefitsList = []; - + // 解析接口返回数据 if (Array.isArray(res)) { benefitsList = res; @@ -198,7 +198,7 @@ } else if (res && res.code === 0 && Array.isArray(res.data)) { benefitsList = res.data; } - + // 标准化格式 var normalized = []; for (var i = 0; i < benefitsList.length; i++) { @@ -209,7 +209,7 @@ normalized.push({ id: id, title: title }); } } - + benefitsCache[joinConfigId] = normalized; resolve(normalized); } catch(e) { @@ -222,27 +222,27 @@ } } }; - + xhr.onerror = function() { pendingXhr = null; setDisabled(benefitsSelect, false); reject(new Error('网络错误')); }; - + xhr.ontimeout = function() { pendingXhr = null; setDisabled(benefitsSelect, false); reject(new Error('请求超时')); }; - + xhr.send(); }); } - + // 入会类型变更处理 function onJoinConfigChange() { var joinId = joinConfigSelect.value; - + if (!joinId) { benefitsSelect.innerHTML = ''; var emptyOption = document.createElement('option'); @@ -254,12 +254,12 @@ setDisabled(benefitsSelect, true); return; } - + // 先清空已选中的权益值 clearBenefitsSelected(); - + setDisabled(benefitsSelect, false); - + fetchBenefits(joinId).then(function(benefitsList) { if (!benefitsList.length) { benefitsSelect.innerHTML = ''; @@ -271,7 +271,7 @@ refreshSelectpicker(benefitsSelect); return; } - + renderBenefits(benefitsList); }).catch(function() { benefitsSelect.innerHTML = ''; @@ -283,15 +283,15 @@ refreshSelectpicker(benefitsSelect); }); } - + // 监听入会类型变化 joinConfigSelect.addEventListener('change', onJoinConfigChange); - + // 页面初始化 setTimeout(function() { refreshSelectpicker(joinConfigSelect); refreshSelectpicker(benefitsSelect); - + var defaultJoinId = joinConfigSelect.value; if (defaultJoinId) { fetchBenefits(defaultJoinId).then(function(benefitsList) { @@ -311,4 +311,4 @@ } }, 100); })(); - \ No newline at end of file + diff --git a/application/admin/view/wdsxh/member/level/edit.html b/application/admin/view/wdsxh/member/level/edit.html index ff1f66e..b866475 100644 --- a/application/admin/view/wdsxh/member/level/edit.html +++ b/application/admin/view/wdsxh/member/level/edit.html @@ -22,18 +22,18 @@
- -
+ + +
@@ -85,12 +85,12 @@ // 获取DOM元素 var joinConfigSelect = document.getElementById('input-join-config'); var benefitsSelect = document.getElementById('input-benefits'); - + if (!joinConfigSelect || !benefitsSelect) return; - + var pendingXhr = null; var benefitsCache = {}; - + // 保存原始的权益选中值(页面渲染时PHP已经设置的选中状态) var originalSelectedBenefits = []; for (var i = 0; i < benefitsSelect.options.length; i++) { @@ -98,20 +98,20 @@ originalSelectedBenefits.push(benefitsSelect.options[i].value); } } - + // 刷新 bootstrap-select function refreshSelectpicker(selectEl) { if (typeof $ !== 'undefined' && $ && $(selectEl).selectpicker) { $(selectEl).selectpicker('refresh'); } } - + // 设置禁用状态 function setDisabled(selectEl, disabled) { selectEl.disabled = disabled; refreshSelectpicker(selectEl); } - + // 清空已选中的权益值 function clearBenefitsSelected() { for (var i = 0; i < benefitsSelect.options.length; i++) { @@ -120,7 +120,7 @@ benefitsSelect.value = ''; refreshSelectpicker(benefitsSelect); } - + // 设置权益选中的值(用于初始化时还原选中项) function setBenefitsSelected(selectedValues) { for (var i = 0; i < benefitsSelect.options.length; i++) { @@ -133,12 +133,12 @@ } refreshSelectpicker(benefitsSelect); } - + // 渲染权益选项 function renderBenefits(benefitsList, selectedValues) { // 清空原有选项 benefitsSelect.innerHTML = ''; - + if (!benefitsList || benefitsList.length === 0) { var emptyOption = document.createElement('option'); emptyOption.value = ''; @@ -157,10 +157,10 @@ benefitsSelect.appendChild(option); } } - + refreshSelectpicker(benefitsSelect); } - + // 请求接口获取权益 function fetchBenefits(joinConfigId) { return new Promise(function(resolve, reject) { @@ -168,35 +168,35 @@ resolve([]); return; } - + if (benefitsCache[joinConfigId]) { resolve(benefitsCache[joinConfigId]); return; } - + var apiUrl = '/fxWbNZyTRt.php/wdsxh/member/level/benefits?join_config_id=' + encodeURIComponent(joinConfigId); - + if (pendingXhr) { pendingXhr.abort(); } - + setDisabled(benefitsSelect, true); - + var xhr = new XMLHttpRequest(); pendingXhr = xhr; xhr.open('GET', apiUrl, true); xhr.timeout = 10000; - + xhr.onreadystatechange = function() { if (xhr.readyState === 4) { pendingXhr = null; setDisabled(benefitsSelect, false); - + if (xhr.status === 200) { try { var res = JSON.parse(xhr.responseText); var benefitsList = []; - + if (Array.isArray(res)) { benefitsList = res; } else if (res && Array.isArray(res.data)) { @@ -208,7 +208,7 @@ } else if (res && res.code === 0 && Array.isArray(res.data)) { benefitsList = res.data; } - + var normalized = []; for (var i = 0; i < benefitsList.length; i++) { var item = benefitsList[i]; @@ -218,7 +218,7 @@ normalized.push({ id: id, title: title }); } } - + benefitsCache[joinConfigId] = normalized; resolve(normalized); } catch(e) { @@ -230,27 +230,27 @@ } } }; - + xhr.onerror = function() { pendingXhr = null; setDisabled(benefitsSelect, false); reject(new Error('网络错误')); }; - + xhr.ontimeout = function() { pendingXhr = null; setDisabled(benefitsSelect, false); reject(new Error('请求超时')); }; - + xhr.send(); }); } - + // 入会类型变更处理(切换时清空已选中的权益,重新加载) function onJoinConfigChange() { var joinId = joinConfigSelect.value; - + if (!joinId) { benefitsSelect.innerHTML = ''; var emptyOption = document.createElement('option'); @@ -262,12 +262,12 @@ setDisabled(benefitsSelect, true); return; } - + // 切换时清空已选中的权益值 clearBenefitsSelected(); - + setDisabled(benefitsSelect, false); - + fetchBenefits(joinId).then(function(benefitsList) { if (!benefitsList.length) { benefitsSelect.innerHTML = ''; @@ -279,7 +279,7 @@ refreshSelectpicker(benefitsSelect); return; } - + // 切换后不保留任何选中值(因为权益列表已变) renderBenefits(benefitsList, []); }).catch(function() { @@ -292,15 +292,15 @@ refreshSelectpicker(benefitsSelect); }); } - + // 监听入会类型变化 joinConfigSelect.addEventListener('change', onJoinConfigChange); - + // 页面初始化:根据当前选中的入会类型,重新加载对应的权益列表,并还原选中的权益值 setTimeout(function() { refreshSelectpicker(joinConfigSelect); refreshSelectpicker(benefitsSelect); - + var defaultJoinId = joinConfigSelect.value; if (defaultJoinId) { // 根据当前入会类型加载权益列表,并尝试还原原始选中的权益值(匹配的才保留) @@ -332,4 +332,4 @@ } }, 100); })(); - \ No newline at end of file + diff --git a/application/admin/view/wdsxh/member/rights/add.html b/application/admin/view/wdsxh/member/rights/add.html index 589a207..5e94417 100755 --- a/application/admin/view/wdsxh/member/rights/add.html +++ b/application/admin/view/wdsxh/member/rights/add.html @@ -6,17 +6,6 @@
- -
- -
- -
-
@@ -65,6 +54,7 @@ -
- -
- -
@@ -64,6 +54,7 @@