后台会员级别与会员权益
This commit is contained in:
@@ -202,9 +202,7 @@ class Level extends Backend
|
|||||||
if (false === $this->request->isPost()) {
|
if (false === $this->request->isPost()) {
|
||||||
$benefits = $this->benefit_model->getSimpleByStatus(0);
|
$benefits = $this->benefit_model->getSimpleByStatus(0);
|
||||||
$this->view->assign('benefits', $benefits);
|
$this->view->assign('benefits', $benefits);
|
||||||
if (is_null($row['benefits_id'])) {
|
|
||||||
$row['benefits_id'] = [];
|
|
||||||
}
|
|
||||||
$join_config = $this->join_config_model->getSimpleByStatus();
|
$join_config = $this->join_config_model->getSimpleByStatus();
|
||||||
$this->view->assign('join_config', $join_config);
|
$this->view->assign('join_config', $join_config);
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ use app\common\controller\Backend;
|
|||||||
*/
|
*/
|
||||||
class Rights extends Backend
|
class Rights extends Backend
|
||||||
{
|
{
|
||||||
protected $join_config_model = null;
|
protected $level_model = null;
|
||||||
|
|
||||||
public function _initialize()
|
public function _initialize()
|
||||||
{
|
{
|
||||||
@@ -28,8 +28,10 @@ class Rights extends Backend
|
|||||||
$this->model = new \app\admin\model\wdsxh\member\MemberBenefits();
|
$this->model = new \app\admin\model\wdsxh\member\MemberBenefits();
|
||||||
$this->view->assign("statusList", $this->model->getDisabledList());
|
$this->view->assign("statusList", $this->model->getDisabledList());
|
||||||
|
|
||||||
$this->join_config_model = new \app\admin\model\wdsxh\member\JoinConfig();
|
$this->level_model = new \app\admin\model\wdsxh\member\Level;
|
||||||
$this->view->assign('join_config', $this->join_config_model->getSimpleByStatus());
|
$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'];
|
$this->searchFields = ['title'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,10 +32,6 @@ class Level extends Model
|
|||||||
protected $updateTime = 'updatetime';
|
protected $updateTime = 'updatetime';
|
||||||
protected $deleteTime = false;
|
protected $deleteTime = false;
|
||||||
|
|
||||||
protected $type = [
|
|
||||||
'benefits_id' => 'json',
|
|
||||||
];
|
|
||||||
|
|
||||||
// 追加属性
|
// 追加属性
|
||||||
protected $append = [
|
protected $append = [
|
||||||
'status_text'
|
'status_text'
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!--会员权益-->
|
<!--会员权益-->
|
||||||
<div class="form-group">
|
<!--<div class="form-group">
|
||||||
<label class="control-label col-xs-12 col-sm-2">会员权益:</label>
|
<label class="control-label col-xs-12 col-sm-2">会员权益:</label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
<select id="input-benefits" name="row[benefits_id][]" class="selectpicker form-control" multiple title="请选择权益" placeholder="请选择权益">
|
<select id="input-benefits" name="row[benefits_id][]" class="selectpicker form-control" multiple title="请选择权益" placeholder="请选择权益">
|
||||||
@@ -32,8 +32,8 @@
|
|||||||
{/foreach}
|
{/foreach}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>-->
|
||||||
|
|
||||||
<!--会员轮播背景图-->
|
<!--会员轮播背景图-->
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-12 col-sm-2">会员卡片:</label>
|
<label class="control-label col-xs-12 col-sm-2">会员卡片:</label>
|
||||||
@@ -85,12 +85,12 @@
|
|||||||
// 获取DOM元素
|
// 获取DOM元素
|
||||||
var joinConfigSelect = document.getElementById('input-join-config');
|
var joinConfigSelect = document.getElementById('input-join-config');
|
||||||
var benefitsSelect = document.getElementById('input-benefits');
|
var benefitsSelect = document.getElementById('input-benefits');
|
||||||
|
|
||||||
if (!joinConfigSelect || !benefitsSelect) return;
|
if (!joinConfigSelect || !benefitsSelect) return;
|
||||||
|
|
||||||
var pendingXhr = null;
|
var pendingXhr = null;
|
||||||
var benefitsCache = {};
|
var benefitsCache = {};
|
||||||
|
|
||||||
// 刷新 bootstrap-select (因为selectpicker需要jQuery,这里用原生方式触发)
|
// 刷新 bootstrap-select (因为selectpicker需要jQuery,这里用原生方式触发)
|
||||||
function refreshSelectpicker(selectEl) {
|
function refreshSelectpicker(selectEl) {
|
||||||
// bootstrap-select 的刷新方法需要通过 jQuery 调用
|
// bootstrap-select 的刷新方法需要通过 jQuery 调用
|
||||||
@@ -98,13 +98,13 @@
|
|||||||
$(selectEl).selectpicker('refresh');
|
$(selectEl).selectpicker('refresh');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置禁用状态
|
// 设置禁用状态
|
||||||
function setDisabled(selectEl, disabled) {
|
function setDisabled(selectEl, disabled) {
|
||||||
selectEl.disabled = disabled;
|
selectEl.disabled = disabled;
|
||||||
refreshSelectpicker(selectEl);
|
refreshSelectpicker(selectEl);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 清空已选中的权益值
|
// 清空已选中的权益值
|
||||||
function clearBenefitsSelected() {
|
function clearBenefitsSelected() {
|
||||||
// 清空所有option的selected状态
|
// 清空所有option的selected状态
|
||||||
@@ -115,12 +115,12 @@
|
|||||||
benefitsSelect.value = '';
|
benefitsSelect.value = '';
|
||||||
refreshSelectpicker(benefitsSelect);
|
refreshSelectpicker(benefitsSelect);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 渲染权益选项
|
// 渲染权益选项
|
||||||
function renderBenefits(benefitsList) {
|
function renderBenefits(benefitsList) {
|
||||||
// 清空原有选项
|
// 清空原有选项
|
||||||
benefitsSelect.innerHTML = '';
|
benefitsSelect.innerHTML = '';
|
||||||
|
|
||||||
if (!benefitsList || benefitsList.length === 0) {
|
if (!benefitsList || benefitsList.length === 0) {
|
||||||
var emptyOption = document.createElement('option');
|
var emptyOption = document.createElement('option');
|
||||||
emptyOption.value = '';
|
emptyOption.value = '';
|
||||||
@@ -135,10 +135,10 @@
|
|||||||
benefitsSelect.appendChild(option);
|
benefitsSelect.appendChild(option);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
refreshSelectpicker(benefitsSelect);
|
refreshSelectpicker(benefitsSelect);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 防XSS
|
// 防XSS
|
||||||
function escapeHtml(str) {
|
function escapeHtml(str) {
|
||||||
if (!str) return '';
|
if (!str) return '';
|
||||||
@@ -149,7 +149,7 @@
|
|||||||
return m;
|
return m;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 请求接口获取权益
|
// 请求接口获取权益
|
||||||
function fetchBenefits(joinConfigId) {
|
function fetchBenefits(joinConfigId) {
|
||||||
return new Promise(function(resolve, reject) {
|
return new Promise(function(resolve, reject) {
|
||||||
@@ -157,35 +157,35 @@
|
|||||||
resolve([]);
|
resolve([]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (benefitsCache[joinConfigId]) {
|
if (benefitsCache[joinConfigId]) {
|
||||||
resolve(benefitsCache[joinConfigId]);
|
resolve(benefitsCache[joinConfigId]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var apiUrl = '/fxWbNZyTRt.php/wdsxh/member/level/benefits?join_config_id=' + encodeURIComponent(joinConfigId);
|
var apiUrl = '/fxWbNZyTRt.php/wdsxh/member/level/benefits?join_config_id=' + encodeURIComponent(joinConfigId);
|
||||||
|
|
||||||
if (pendingXhr) {
|
if (pendingXhr) {
|
||||||
pendingXhr.abort();
|
pendingXhr.abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
setDisabled(benefitsSelect, true);
|
setDisabled(benefitsSelect, true);
|
||||||
|
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
pendingXhr = xhr;
|
pendingXhr = xhr;
|
||||||
xhr.open('GET', apiUrl, true);
|
xhr.open('GET', apiUrl, true);
|
||||||
xhr.timeout = 10000;
|
xhr.timeout = 10000;
|
||||||
|
|
||||||
xhr.onreadystatechange = function() {
|
xhr.onreadystatechange = function() {
|
||||||
if (xhr.readyState === 4) {
|
if (xhr.readyState === 4) {
|
||||||
pendingXhr = null;
|
pendingXhr = null;
|
||||||
setDisabled(benefitsSelect, false);
|
setDisabled(benefitsSelect, false);
|
||||||
|
|
||||||
if (xhr.status === 200) {
|
if (xhr.status === 200) {
|
||||||
try {
|
try {
|
||||||
var res = JSON.parse(xhr.responseText);
|
var res = JSON.parse(xhr.responseText);
|
||||||
var benefitsList = [];
|
var benefitsList = [];
|
||||||
|
|
||||||
// 解析接口返回数据
|
// 解析接口返回数据
|
||||||
if (Array.isArray(res)) {
|
if (Array.isArray(res)) {
|
||||||
benefitsList = res;
|
benefitsList = res;
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
} else if (res && res.code === 0 && Array.isArray(res.data)) {
|
} else if (res && res.code === 0 && Array.isArray(res.data)) {
|
||||||
benefitsList = res.data;
|
benefitsList = res.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 标准化格式
|
// 标准化格式
|
||||||
var normalized = [];
|
var normalized = [];
|
||||||
for (var i = 0; i < benefitsList.length; i++) {
|
for (var i = 0; i < benefitsList.length; i++) {
|
||||||
@@ -209,7 +209,7 @@
|
|||||||
normalized.push({ id: id, title: title });
|
normalized.push({ id: id, title: title });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
benefitsCache[joinConfigId] = normalized;
|
benefitsCache[joinConfigId] = normalized;
|
||||||
resolve(normalized);
|
resolve(normalized);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
@@ -222,27 +222,27 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
xhr.onerror = function() {
|
xhr.onerror = function() {
|
||||||
pendingXhr = null;
|
pendingXhr = null;
|
||||||
setDisabled(benefitsSelect, false);
|
setDisabled(benefitsSelect, false);
|
||||||
reject(new Error('网络错误'));
|
reject(new Error('网络错误'));
|
||||||
};
|
};
|
||||||
|
|
||||||
xhr.ontimeout = function() {
|
xhr.ontimeout = function() {
|
||||||
pendingXhr = null;
|
pendingXhr = null;
|
||||||
setDisabled(benefitsSelect, false);
|
setDisabled(benefitsSelect, false);
|
||||||
reject(new Error('请求超时'));
|
reject(new Error('请求超时'));
|
||||||
};
|
};
|
||||||
|
|
||||||
xhr.send();
|
xhr.send();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 入会类型变更处理
|
// 入会类型变更处理
|
||||||
function onJoinConfigChange() {
|
function onJoinConfigChange() {
|
||||||
var joinId = joinConfigSelect.value;
|
var joinId = joinConfigSelect.value;
|
||||||
|
|
||||||
if (!joinId) {
|
if (!joinId) {
|
||||||
benefitsSelect.innerHTML = '';
|
benefitsSelect.innerHTML = '';
|
||||||
var emptyOption = document.createElement('option');
|
var emptyOption = document.createElement('option');
|
||||||
@@ -254,12 +254,12 @@
|
|||||||
setDisabled(benefitsSelect, true);
|
setDisabled(benefitsSelect, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 先清空已选中的权益值
|
// 先清空已选中的权益值
|
||||||
clearBenefitsSelected();
|
clearBenefitsSelected();
|
||||||
|
|
||||||
setDisabled(benefitsSelect, false);
|
setDisabled(benefitsSelect, false);
|
||||||
|
|
||||||
fetchBenefits(joinId).then(function(benefitsList) {
|
fetchBenefits(joinId).then(function(benefitsList) {
|
||||||
if (!benefitsList.length) {
|
if (!benefitsList.length) {
|
||||||
benefitsSelect.innerHTML = '';
|
benefitsSelect.innerHTML = '';
|
||||||
@@ -271,7 +271,7 @@
|
|||||||
refreshSelectpicker(benefitsSelect);
|
refreshSelectpicker(benefitsSelect);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderBenefits(benefitsList);
|
renderBenefits(benefitsList);
|
||||||
}).catch(function() {
|
}).catch(function() {
|
||||||
benefitsSelect.innerHTML = '';
|
benefitsSelect.innerHTML = '';
|
||||||
@@ -283,15 +283,15 @@
|
|||||||
refreshSelectpicker(benefitsSelect);
|
refreshSelectpicker(benefitsSelect);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听入会类型变化
|
// 监听入会类型变化
|
||||||
joinConfigSelect.addEventListener('change', onJoinConfigChange);
|
joinConfigSelect.addEventListener('change', onJoinConfigChange);
|
||||||
|
|
||||||
// 页面初始化
|
// 页面初始化
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
refreshSelectpicker(joinConfigSelect);
|
refreshSelectpicker(joinConfigSelect);
|
||||||
refreshSelectpicker(benefitsSelect);
|
refreshSelectpicker(benefitsSelect);
|
||||||
|
|
||||||
var defaultJoinId = joinConfigSelect.value;
|
var defaultJoinId = joinConfigSelect.value;
|
||||||
if (defaultJoinId) {
|
if (defaultJoinId) {
|
||||||
fetchBenefits(defaultJoinId).then(function(benefitsList) {
|
fetchBenefits(defaultJoinId).then(function(benefitsList) {
|
||||||
@@ -311,4 +311,4 @@
|
|||||||
}
|
}
|
||||||
}, 100);
|
}, 100);
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -22,18 +22,18 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!--会员权益-->
|
<!--会员权益-->
|
||||||
<div class="form-group">
|
<!--<div class="form-group">
|
||||||
<label class="control-label col-xs-12 col-sm-2">会员权益:</label>
|
<label class="control-label col-xs-12 col-sm-2">会员权益:</label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
<select id="input-benefits" name="row[benefits_id][]" class="selectpicker form-control" multiple title="请选择权益" placeholder="请选择权益">
|
<select id="input-benefits" name="row[benefits_id][]" class="selectpicker form-control" multiple title="请选择权益" placeholder="请选择权益">
|
||||||
{foreach $benefits as $benefit}
|
{foreach $benefits as $benefit}
|
||||||
<option value="{$benefit.id}" {if condition="in_array($benefit.id, $row.benefits_id)"}selected{/if}>{$benefit.title}</option>
|
<option value="{$benefit.id}" >{$benefit.title}</option>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>-->
|
||||||
|
|
||||||
<!--会员轮播背景图-->
|
<!--会员轮播背景图-->
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-12 col-sm-2">会员卡片:</label>
|
<label class="control-label col-xs-12 col-sm-2">会员卡片:</label>
|
||||||
@@ -85,12 +85,12 @@
|
|||||||
// 获取DOM元素
|
// 获取DOM元素
|
||||||
var joinConfigSelect = document.getElementById('input-join-config');
|
var joinConfigSelect = document.getElementById('input-join-config');
|
||||||
var benefitsSelect = document.getElementById('input-benefits');
|
var benefitsSelect = document.getElementById('input-benefits');
|
||||||
|
|
||||||
if (!joinConfigSelect || !benefitsSelect) return;
|
if (!joinConfigSelect || !benefitsSelect) return;
|
||||||
|
|
||||||
var pendingXhr = null;
|
var pendingXhr = null;
|
||||||
var benefitsCache = {};
|
var benefitsCache = {};
|
||||||
|
|
||||||
// 保存原始的权益选中值(页面渲染时PHP已经设置的选中状态)
|
// 保存原始的权益选中值(页面渲染时PHP已经设置的选中状态)
|
||||||
var originalSelectedBenefits = [];
|
var originalSelectedBenefits = [];
|
||||||
for (var i = 0; i < benefitsSelect.options.length; i++) {
|
for (var i = 0; i < benefitsSelect.options.length; i++) {
|
||||||
@@ -98,20 +98,20 @@
|
|||||||
originalSelectedBenefits.push(benefitsSelect.options[i].value);
|
originalSelectedBenefits.push(benefitsSelect.options[i].value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 刷新 bootstrap-select
|
// 刷新 bootstrap-select
|
||||||
function refreshSelectpicker(selectEl) {
|
function refreshSelectpicker(selectEl) {
|
||||||
if (typeof $ !== 'undefined' && $ && $(selectEl).selectpicker) {
|
if (typeof $ !== 'undefined' && $ && $(selectEl).selectpicker) {
|
||||||
$(selectEl).selectpicker('refresh');
|
$(selectEl).selectpicker('refresh');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置禁用状态
|
// 设置禁用状态
|
||||||
function setDisabled(selectEl, disabled) {
|
function setDisabled(selectEl, disabled) {
|
||||||
selectEl.disabled = disabled;
|
selectEl.disabled = disabled;
|
||||||
refreshSelectpicker(selectEl);
|
refreshSelectpicker(selectEl);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 清空已选中的权益值
|
// 清空已选中的权益值
|
||||||
function clearBenefitsSelected() {
|
function clearBenefitsSelected() {
|
||||||
for (var i = 0; i < benefitsSelect.options.length; i++) {
|
for (var i = 0; i < benefitsSelect.options.length; i++) {
|
||||||
@@ -120,7 +120,7 @@
|
|||||||
benefitsSelect.value = '';
|
benefitsSelect.value = '';
|
||||||
refreshSelectpicker(benefitsSelect);
|
refreshSelectpicker(benefitsSelect);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置权益选中的值(用于初始化时还原选中项)
|
// 设置权益选中的值(用于初始化时还原选中项)
|
||||||
function setBenefitsSelected(selectedValues) {
|
function setBenefitsSelected(selectedValues) {
|
||||||
for (var i = 0; i < benefitsSelect.options.length; i++) {
|
for (var i = 0; i < benefitsSelect.options.length; i++) {
|
||||||
@@ -133,12 +133,12 @@
|
|||||||
}
|
}
|
||||||
refreshSelectpicker(benefitsSelect);
|
refreshSelectpicker(benefitsSelect);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 渲染权益选项
|
// 渲染权益选项
|
||||||
function renderBenefits(benefitsList, selectedValues) {
|
function renderBenefits(benefitsList, selectedValues) {
|
||||||
// 清空原有选项
|
// 清空原有选项
|
||||||
benefitsSelect.innerHTML = '';
|
benefitsSelect.innerHTML = '';
|
||||||
|
|
||||||
if (!benefitsList || benefitsList.length === 0) {
|
if (!benefitsList || benefitsList.length === 0) {
|
||||||
var emptyOption = document.createElement('option');
|
var emptyOption = document.createElement('option');
|
||||||
emptyOption.value = '';
|
emptyOption.value = '';
|
||||||
@@ -157,10 +157,10 @@
|
|||||||
benefitsSelect.appendChild(option);
|
benefitsSelect.appendChild(option);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
refreshSelectpicker(benefitsSelect);
|
refreshSelectpicker(benefitsSelect);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 请求接口获取权益
|
// 请求接口获取权益
|
||||||
function fetchBenefits(joinConfigId) {
|
function fetchBenefits(joinConfigId) {
|
||||||
return new Promise(function(resolve, reject) {
|
return new Promise(function(resolve, reject) {
|
||||||
@@ -168,35 +168,35 @@
|
|||||||
resolve([]);
|
resolve([]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (benefitsCache[joinConfigId]) {
|
if (benefitsCache[joinConfigId]) {
|
||||||
resolve(benefitsCache[joinConfigId]);
|
resolve(benefitsCache[joinConfigId]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var apiUrl = '/fxWbNZyTRt.php/wdsxh/member/level/benefits?join_config_id=' + encodeURIComponent(joinConfigId);
|
var apiUrl = '/fxWbNZyTRt.php/wdsxh/member/level/benefits?join_config_id=' + encodeURIComponent(joinConfigId);
|
||||||
|
|
||||||
if (pendingXhr) {
|
if (pendingXhr) {
|
||||||
pendingXhr.abort();
|
pendingXhr.abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
setDisabled(benefitsSelect, true);
|
setDisabled(benefitsSelect, true);
|
||||||
|
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
pendingXhr = xhr;
|
pendingXhr = xhr;
|
||||||
xhr.open('GET', apiUrl, true);
|
xhr.open('GET', apiUrl, true);
|
||||||
xhr.timeout = 10000;
|
xhr.timeout = 10000;
|
||||||
|
|
||||||
xhr.onreadystatechange = function() {
|
xhr.onreadystatechange = function() {
|
||||||
if (xhr.readyState === 4) {
|
if (xhr.readyState === 4) {
|
||||||
pendingXhr = null;
|
pendingXhr = null;
|
||||||
setDisabled(benefitsSelect, false);
|
setDisabled(benefitsSelect, false);
|
||||||
|
|
||||||
if (xhr.status === 200) {
|
if (xhr.status === 200) {
|
||||||
try {
|
try {
|
||||||
var res = JSON.parse(xhr.responseText);
|
var res = JSON.parse(xhr.responseText);
|
||||||
var benefitsList = [];
|
var benefitsList = [];
|
||||||
|
|
||||||
if (Array.isArray(res)) {
|
if (Array.isArray(res)) {
|
||||||
benefitsList = res;
|
benefitsList = res;
|
||||||
} else if (res && Array.isArray(res.data)) {
|
} else if (res && Array.isArray(res.data)) {
|
||||||
@@ -208,7 +208,7 @@
|
|||||||
} else if (res && res.code === 0 && Array.isArray(res.data)) {
|
} else if (res && res.code === 0 && Array.isArray(res.data)) {
|
||||||
benefitsList = res.data;
|
benefitsList = res.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
var normalized = [];
|
var normalized = [];
|
||||||
for (var i = 0; i < benefitsList.length; i++) {
|
for (var i = 0; i < benefitsList.length; i++) {
|
||||||
var item = benefitsList[i];
|
var item = benefitsList[i];
|
||||||
@@ -218,7 +218,7 @@
|
|||||||
normalized.push({ id: id, title: title });
|
normalized.push({ id: id, title: title });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
benefitsCache[joinConfigId] = normalized;
|
benefitsCache[joinConfigId] = normalized;
|
||||||
resolve(normalized);
|
resolve(normalized);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
@@ -230,27 +230,27 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
xhr.onerror = function() {
|
xhr.onerror = function() {
|
||||||
pendingXhr = null;
|
pendingXhr = null;
|
||||||
setDisabled(benefitsSelect, false);
|
setDisabled(benefitsSelect, false);
|
||||||
reject(new Error('网络错误'));
|
reject(new Error('网络错误'));
|
||||||
};
|
};
|
||||||
|
|
||||||
xhr.ontimeout = function() {
|
xhr.ontimeout = function() {
|
||||||
pendingXhr = null;
|
pendingXhr = null;
|
||||||
setDisabled(benefitsSelect, false);
|
setDisabled(benefitsSelect, false);
|
||||||
reject(new Error('请求超时'));
|
reject(new Error('请求超时'));
|
||||||
};
|
};
|
||||||
|
|
||||||
xhr.send();
|
xhr.send();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 入会类型变更处理(切换时清空已选中的权益,重新加载)
|
// 入会类型变更处理(切换时清空已选中的权益,重新加载)
|
||||||
function onJoinConfigChange() {
|
function onJoinConfigChange() {
|
||||||
var joinId = joinConfigSelect.value;
|
var joinId = joinConfigSelect.value;
|
||||||
|
|
||||||
if (!joinId) {
|
if (!joinId) {
|
||||||
benefitsSelect.innerHTML = '';
|
benefitsSelect.innerHTML = '';
|
||||||
var emptyOption = document.createElement('option');
|
var emptyOption = document.createElement('option');
|
||||||
@@ -262,12 +262,12 @@
|
|||||||
setDisabled(benefitsSelect, true);
|
setDisabled(benefitsSelect, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 切换时清空已选中的权益值
|
// 切换时清空已选中的权益值
|
||||||
clearBenefitsSelected();
|
clearBenefitsSelected();
|
||||||
|
|
||||||
setDisabled(benefitsSelect, false);
|
setDisabled(benefitsSelect, false);
|
||||||
|
|
||||||
fetchBenefits(joinId).then(function(benefitsList) {
|
fetchBenefits(joinId).then(function(benefitsList) {
|
||||||
if (!benefitsList.length) {
|
if (!benefitsList.length) {
|
||||||
benefitsSelect.innerHTML = '';
|
benefitsSelect.innerHTML = '';
|
||||||
@@ -279,7 +279,7 @@
|
|||||||
refreshSelectpicker(benefitsSelect);
|
refreshSelectpicker(benefitsSelect);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 切换后不保留任何选中值(因为权益列表已变)
|
// 切换后不保留任何选中值(因为权益列表已变)
|
||||||
renderBenefits(benefitsList, []);
|
renderBenefits(benefitsList, []);
|
||||||
}).catch(function() {
|
}).catch(function() {
|
||||||
@@ -292,15 +292,15 @@
|
|||||||
refreshSelectpicker(benefitsSelect);
|
refreshSelectpicker(benefitsSelect);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听入会类型变化
|
// 监听入会类型变化
|
||||||
joinConfigSelect.addEventListener('change', onJoinConfigChange);
|
joinConfigSelect.addEventListener('change', onJoinConfigChange);
|
||||||
|
|
||||||
// 页面初始化:根据当前选中的入会类型,重新加载对应的权益列表,并还原选中的权益值
|
// 页面初始化:根据当前选中的入会类型,重新加载对应的权益列表,并还原选中的权益值
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
refreshSelectpicker(joinConfigSelect);
|
refreshSelectpicker(joinConfigSelect);
|
||||||
refreshSelectpicker(benefitsSelect);
|
refreshSelectpicker(benefitsSelect);
|
||||||
|
|
||||||
var defaultJoinId = joinConfigSelect.value;
|
var defaultJoinId = joinConfigSelect.value;
|
||||||
if (defaultJoinId) {
|
if (defaultJoinId) {
|
||||||
// 根据当前入会类型加载权益列表,并尝试还原原始选中的权益值(匹配的才保留)
|
// 根据当前入会类型加载权益列表,并尝试还原原始选中的权益值(匹配的才保留)
|
||||||
@@ -332,4 +332,4 @@
|
|||||||
}
|
}
|
||||||
}, 100);
|
}, 100);
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -6,17 +6,6 @@
|
|||||||
<input id="c-name" data-rule="required" class="form-control" name="row[title]" type="text" placeholder="请输入权益名称">
|
<input id="c-name" data-rule="required" class="form-control" name="row[title]" type="text" placeholder="请输入权益名称">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-xs-12 col-sm-2">入会类型:</label>
|
|
||||||
<div class="col-xs-12 col-sm-8">
|
|
||||||
<select id="input-group" name="row[join_config_id]" class="selectpicker form-control" placeholder="请选择入会类型" >
|
|
||||||
{foreach $join_config as $item}
|
|
||||||
<option value="{$item.id}">{$item.name}</option>
|
|
||||||
{/foreach}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-12 col-sm-2">权益介绍:</label>
|
<label class="control-label col-xs-12 col-sm-2">权益介绍:</label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
@@ -65,6 +54,7 @@
|
|||||||
<div class="form-group layer-footer">
|
<div class="form-group layer-footer">
|
||||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
<input type="hidden" name="row[join_config_id]" value="{$join_config_id}">
|
||||||
<input type="hidden" name="row[level_id]" value="{$Think.get.level_id}">
|
<input type="hidden" name="row[level_id]" value="{$Think.get.level_id}">
|
||||||
<button type="submit" class="btn btn-primary btn-embossed disabled">确认</button>
|
<button type="submit" class="btn btn-primary btn-embossed disabled">确认</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -5,16 +5,6 @@
|
|||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
<input id="c-name" data-rule="required" class="form-control" name="row[title]" value="{$row.title|htmlentities}" type="text" placeholder="请输入权益名称">
|
<input id="c-name" data-rule="required" class="form-control" name="row[title]" value="{$row.title|htmlentities}" type="text" placeholder="请输入权益名称">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="control-label col-xs-12 col-sm-2">入会类型:</label>
|
|
||||||
<div class="col-xs-12 col-sm-8">
|
|
||||||
<select id="input-group" name="row[join_config_id]" class="selectpicker form-control" placeholder="请选择入会类型" >
|
|
||||||
{foreach $join_config as $item}
|
|
||||||
<option value="{$item.id}" {eq name="row.join_config_id" value="$item.id"}selected{/eq}>{$item.name}</option>
|
|
||||||
{/foreach}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-12 col-sm-2">权益介绍:</label>
|
<label class="control-label col-xs-12 col-sm-2">权益介绍:</label>
|
||||||
@@ -64,6 +54,7 @@
|
|||||||
<div class="form-group layer-footer">
|
<div class="form-group layer-footer">
|
||||||
<label class="control-label col-xs-12 col-sm-2"></label>
|
<label class="control-label col-xs-12 col-sm-2"></label>
|
||||||
<div class="col-xs-12 col-sm-8">
|
<div class="col-xs-12 col-sm-8">
|
||||||
|
<input type="hidden" name="row[join_config_id]" value="{$join_config_id}">
|
||||||
<input type="hidden" name="row[level_id]" value="{$Think.get.level_id|htmlentities}">
|
<input type="hidden" name="row[level_id]" value="{$Think.get.level_id|htmlentities}">
|
||||||
<button type="submit" class="btn btn-primary btn-embossed disabled">确认</button>
|
<button type="submit" class="btn btn-primary btn-embossed disabled">确认</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user