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 @@
-
-