后台会员级别与会员权益

This commit is contained in:
2026-04-28 16:13:29 +08:00
parent 317016f2a8
commit bdc0ff2399
7 changed files with 83 additions and 106 deletions

View File

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

View File

@@ -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'];
} }

View File

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

View File

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

View File

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

View File

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

View File

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