完成店铺增删改查
This commit is contained in:
Binary file not shown.
@@ -14,7 +14,6 @@ from blueprints.auth import auth
|
||||
from blueprints.main import main
|
||||
from blueprints.admin_api import admin_api
|
||||
from blueprints.version import version_bp
|
||||
from blueprints.get_resource import get_resource
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
app = Flask(__name__, template_folder=BASE_DIR, static_folder=BASE_DIR)
|
||||
@@ -28,7 +27,6 @@ app.register_blueprint(auth)
|
||||
app.register_blueprint(main)
|
||||
app.register_blueprint(admin_api)
|
||||
app.register_blueprint(version_bp)
|
||||
app.register_blueprint(get_resource)
|
||||
|
||||
|
||||
def run_app(host='0.0.0.0', port=15124):
|
||||
|
||||
Binary file not shown.
@@ -938,3 +938,205 @@ def delete_dedupe_total_data(item_id):
|
||||
'success': True,
|
||||
'msg': result.get('message') or '删除成功',
|
||||
})
|
||||
|
||||
|
||||
# ---------- 店铺管理 ----------
|
||||
|
||||
@admin_api.route('/shop-manages')
|
||||
@admin_required
|
||||
def list_shop_manages():
|
||||
page = max(1, int(request.args.get('page', 1)))
|
||||
page_size = min(100, max(1, int(request.args.get('page_size', 15))))
|
||||
result, error_response, status = _proxy_backend_java(
|
||||
'GET',
|
||||
'/api/admin/shop-manages',
|
||||
params={'page': page, 'pageSize': page_size},
|
||||
)
|
||||
if error_response is not None:
|
||||
return error_response, status
|
||||
payload = result.get('data') or {}
|
||||
items = [
|
||||
{
|
||||
'id': item.get('id'),
|
||||
'group_id': item.get('groupId'),
|
||||
'group_name': item.get('groupName') or '',
|
||||
'shop_name': item.get('shopName') or '',
|
||||
'account': item.get('account') or '',
|
||||
'password': item.get('passwordMasked') or '',
|
||||
'created_at': (item.get('createdAt') or '').replace('T', ' ')[:16],
|
||||
'updated_at': (item.get('updatedAt') or '').replace('T', ' ')[:16],
|
||||
}
|
||||
for item in (payload.get('items') or [])
|
||||
]
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'items': items,
|
||||
'total': payload.get('total') or 0,
|
||||
'page': payload.get('page') or page,
|
||||
'page_size': payload.get('pageSize') or page_size,
|
||||
})
|
||||
|
||||
|
||||
@admin_api.route('/shop-manage', methods=['POST'])
|
||||
@admin_required
|
||||
def create_shop_manage():
|
||||
data = request.get_json() or {}
|
||||
payload = {
|
||||
'groupId': data.get('group_id'),
|
||||
'shopName': (data.get('shop_name') or '').strip(),
|
||||
'account': (data.get('account') or '').strip(),
|
||||
'password': (data.get('password') or '').strip(),
|
||||
}
|
||||
result, error_response, status = _proxy_backend_java(
|
||||
'POST',
|
||||
'/api/admin/shop-manages',
|
||||
json_data=payload,
|
||||
)
|
||||
if error_response is not None:
|
||||
return error_response, status
|
||||
item = result.get('data') or {}
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'msg': result.get('message') or '创建成功',
|
||||
'item': {
|
||||
'id': item.get('id'),
|
||||
'group_id': item.get('groupId'),
|
||||
'group_name': item.get('groupName') or '',
|
||||
'shop_name': item.get('shopName') or '',
|
||||
'account': item.get('account') or '',
|
||||
'password': item.get('password') or '',
|
||||
'created_at': (item.get('createdAt') or '').replace('T', ' ')[:16],
|
||||
'updated_at': (item.get('updatedAt') or '').replace('T', ' ')[:16],
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@admin_api.route('/shop-manage/<int:item_id>', methods=['PUT'])
|
||||
@admin_required
|
||||
def update_shop_manage(item_id):
|
||||
data = request.get_json() or {}
|
||||
payload = {
|
||||
'groupId': data.get('group_id'),
|
||||
'shopName': (data.get('shop_name') or '').strip(),
|
||||
'account': (data.get('account') or '').strip(),
|
||||
'password': (data.get('password') or '').strip(),
|
||||
}
|
||||
result, error_response, status = _proxy_backend_java(
|
||||
'PUT',
|
||||
f'/api/admin/shop-manages/{item_id}',
|
||||
json_data=payload,
|
||||
)
|
||||
if error_response is not None:
|
||||
return error_response, status
|
||||
item = result.get('data') or {}
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'msg': result.get('message') or '更新成功',
|
||||
'item': {
|
||||
'id': item.get('id'),
|
||||
'group_name': item.get('groupName') or '',
|
||||
'shop_name': item.get('shopName') or '',
|
||||
'account': item.get('account') or '',
|
||||
'password': item.get('password') or '',
|
||||
'created_at': (item.get('createdAt') or '').replace('T', ' ')[:16],
|
||||
'updated_at': (item.get('updatedAt') or '').replace('T', ' ')[:16],
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@admin_api.route('/shop-manage/<int:item_id>', methods=['DELETE'])
|
||||
@admin_required
|
||||
def delete_shop_manage(item_id):
|
||||
result, error_response, status = _proxy_backend_java(
|
||||
'DELETE',
|
||||
f'/api/admin/shop-manages/{item_id}',
|
||||
)
|
||||
if error_response is not None:
|
||||
return error_response, status
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'msg': result.get('message') or '删除成功',
|
||||
})
|
||||
|
||||
|
||||
@admin_api.route('/shop-manage-groups')
|
||||
@admin_required
|
||||
def list_shop_manage_groups():
|
||||
result, error_response, status = _proxy_backend_java(
|
||||
'GET',
|
||||
'/api/admin/shop-manages/groups',
|
||||
)
|
||||
if error_response is not None:
|
||||
return error_response, status
|
||||
items = [
|
||||
{
|
||||
'id': item.get('id'),
|
||||
'group_name': item.get('groupName') or '',
|
||||
'created_at': (item.get('createdAt') or '').replace('T', ' ')[:16],
|
||||
'updated_at': (item.get('updatedAt') or '').replace('T', ' ')[:16],
|
||||
}
|
||||
for item in (result.get('data') or [])
|
||||
]
|
||||
return jsonify({'success': True, 'items': items})
|
||||
|
||||
|
||||
@admin_api.route('/shop-manage-group', methods=['POST'])
|
||||
@admin_required
|
||||
def create_shop_manage_group():
|
||||
data = request.get_json() or {}
|
||||
payload = {'groupName': (data.get('group_name') or '').strip()}
|
||||
result, error_response, status = _proxy_backend_java(
|
||||
'POST',
|
||||
'/api/admin/shop-manages/groups',
|
||||
json_data=payload,
|
||||
)
|
||||
if error_response is not None:
|
||||
return error_response, status
|
||||
item = result.get('data') or {}
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'msg': result.get('message') or '创建成功',
|
||||
'item': {
|
||||
'id': item.get('id'),
|
||||
'group_name': item.get('groupName') or '',
|
||||
'created_at': (item.get('createdAt') or '').replace('T', ' ')[:16],
|
||||
'updated_at': (item.get('updatedAt') or '').replace('T', ' ')[:16],
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@admin_api.route('/shop-manage-group/<int:item_id>', methods=['PUT'])
|
||||
@admin_required
|
||||
def update_shop_manage_group(item_id):
|
||||
data = request.get_json() or {}
|
||||
payload = {'groupName': (data.get('group_name') or '').strip()}
|
||||
result, error_response, status = _proxy_backend_java(
|
||||
'PUT',
|
||||
f'/api/admin/shop-manages/groups/{item_id}',
|
||||
json_data=payload,
|
||||
)
|
||||
if error_response is not None:
|
||||
return error_response, status
|
||||
item = result.get('data') or {}
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'msg': result.get('message') or '更新成功',
|
||||
'item': {
|
||||
'id': item.get('id'),
|
||||
'group_name': item.get('groupName') or '',
|
||||
'created_at': (item.get('createdAt') or '').replace('T', ' ')[:16],
|
||||
'updated_at': (item.get('updatedAt') or '').replace('T', ' ')[:16],
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@admin_api.route('/shop-manage-group/<int:item_id>', methods=['DELETE'])
|
||||
@admin_required
|
||||
def delete_shop_manage_group(item_id):
|
||||
result, error_response, status = _proxy_backend_java(
|
||||
'DELETE',
|
||||
f'/api/admin/shop-manages/groups/{item_id}',
|
||||
)
|
||||
if error_response is not None:
|
||||
return error_response, status
|
||||
return jsonify({'success': True, 'msg': result.get('message') or '删除成功'})
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
<div class="tab" data-tab="columns">栏目权限配置</div>
|
||||
<div class="tab" data-tab="dedupe-total-data">数据去重总数据</div>
|
||||
<div class="tab" data-tab="shop-keys">店铺密钥管理</div>
|
||||
<div class="tab" data-tab="shop-manage">店铺管理</div>
|
||||
<div class="tab" data-tab="history">查看生成记录</div>
|
||||
<div class="tab" data-tab="version">版本管理</div>
|
||||
</div>
|
||||
@@ -345,6 +346,57 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 店铺管理 -->
|
||||
<div id="panel-shop-manage" class="tab-panel">
|
||||
<div class="form-box">
|
||||
<h3 style="margin-bottom:16px;font-size:15px;">新增店铺</h3>
|
||||
<div class="form-row">
|
||||
<div class="form-group" style="min-width:220px;">
|
||||
<label>分组</label>
|
||||
<div style="display:flex;gap:8px;align-items:center;">
|
||||
<select id="shopManageGroupSelect" style="min-width:150px;">
|
||||
<option value="">请选择分组</option>
|
||||
</select>
|
||||
<button class="btn btn-secondary" id="btnManageShopGroups" type="button">管理分组</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group" style="min-width:160px;">
|
||||
<label>店铺名</label>
|
||||
<input type="text" id="shopManageShopName" placeholder="请输入店铺名称">
|
||||
</div>
|
||||
<div class="form-group" style="min-width:180px;">
|
||||
<label>账号</label>
|
||||
<input type="text" id="shopManageAccount" placeholder="请输入账号">
|
||||
</div>
|
||||
<div class="form-group" style="min-width:180px;">
|
||||
<label>密码</label>
|
||||
<input type="text" id="shopManagePassword" placeholder="请输入密码">
|
||||
</div>
|
||||
<button class="btn" id="btnCreateShopManage">新增店铺</button>
|
||||
</div>
|
||||
<p class="msg" id="msgShopManage"></p>
|
||||
</div>
|
||||
<div class="panel-box">
|
||||
<h3 style="margin-bottom:16px;font-size:15px;">店铺列表</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>分组</th>
|
||||
<th>店铺名</th>
|
||||
<th>账号</th>
|
||||
<th>密码</th>
|
||||
<th>创建时间</th>
|
||||
<th>修改时间</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="shopManageListBody"></tbody>
|
||||
</table>
|
||||
<div class="pagination" id="shopManagePagination"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 查看生成记录 -->
|
||||
<div id="panel-history" class="tab-panel">
|
||||
<div class="form-box">
|
||||
@@ -460,6 +512,66 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 分组管理弹窗 -->
|
||||
<div class="modal-mask" id="shopManageGroupModal">
|
||||
<div class="modal" style="max-width:760px;">
|
||||
<h3>分组管理</h3>
|
||||
<div class="form-row">
|
||||
<input type="hidden" id="shopManageGroupEditId">
|
||||
<div class="form-group" style="min-width:260px;">
|
||||
<label>分组名称</label>
|
||||
<input type="text" id="shopManageGroupInput" placeholder="请输入分组名称">
|
||||
</div>
|
||||
<button class="btn" id="btnSaveShopManageGroup" type="button">保存分组</button>
|
||||
<button class="btn btn-secondary" id="btnCancelShopManageGroupEdit" type="button">取消编辑</button>
|
||||
</div>
|
||||
<p class="msg" id="msgShopManageGroup"></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>序号</th><th>分组名称</th><th>创建时间</th><th>修改时间</th><th>操作</th></tr>
|
||||
</thead>
|
||||
<tbody id="shopManageGroupListBody"></tbody>
|
||||
</table>
|
||||
<div style="margin-top:16px;display:flex;gap:8px;justify-content:flex-end;">
|
||||
<button class="btn btn-secondary" id="btnCloseShopManageGroupModal" type="button">关闭</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 编辑店铺管理弹窗 -->
|
||||
<div class="modal-mask" id="editShopManageModal">
|
||||
<div class="modal">
|
||||
<h3>编辑店铺</h3>
|
||||
<input type="hidden" id="editShopManageId">
|
||||
<div class="form-group">
|
||||
<label>分组</label>
|
||||
<div style="display:flex;gap:8px;align-items:center;">
|
||||
<select id="editShopManageGroupSelect" style="min-width:200px;">
|
||||
<option value="">请选择分组</option>
|
||||
</select>
|
||||
<button class="btn btn-secondary" id="btnManageShopGroupsFromEdit" type="button">管理分组</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>店铺名</label>
|
||||
<input type="text" id="editShopManageShopName" placeholder="店铺名">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>账号</label>
|
||||
<input type="text" id="editShopManageAccount" placeholder="账号">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>密码</label>
|
||||
<input type="text" id="editShopManagePassword" placeholder="密码">
|
||||
</div>
|
||||
<p class="msg" id="msgEditShopManage"></p>
|
||||
<div style="margin-top:16px;display:flex;gap:8px;">
|
||||
<button class="btn" id="btnSaveShopManage">保存</button>
|
||||
<button class="btn btn-secondary" id="btnCloseEditShopManage">取消</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 编辑店铺密钥弹窗 -->
|
||||
<div class="modal-mask" id="editShopKeyModal">
|
||||
<div class="modal">
|
||||
@@ -495,6 +607,7 @@
|
||||
else if (t.dataset.tab === 'columns') loadColumns();
|
||||
else if (t.dataset.tab === 'dedupe-total-data') loadDedupeTotalData(1);
|
||||
else if (t.dataset.tab === 'shop-keys') loadShopKeys(1);
|
||||
else if (t.dataset.tab === 'shop-manage') loadShopManage(1);
|
||||
else if (t.dataset.tab === 'history') loadHistory(1);
|
||||
else if (t.dataset.tab === 'version') loadVersions();
|
||||
};
|
||||
@@ -1329,6 +1442,281 @@
|
||||
document.getElementById('editShopKeyModal').classList.remove('show');
|
||||
};
|
||||
|
||||
// ========== 店铺管理 ==========
|
||||
var shopManagePage = 1, shopManagePageSize = 15;
|
||||
var shopManageGroups = [];
|
||||
|
||||
function buildShopManageQuery(page) {
|
||||
return 'page=' + (page || 1) + '&page_size=' + shopManagePageSize;
|
||||
}
|
||||
|
||||
function refreshShopGroupSelects(selectedCreateId, selectedEditId) {
|
||||
var createSel = document.getElementById('shopManageGroupSelect');
|
||||
var editSel = document.getElementById('editShopManageGroupSelect');
|
||||
var opts = ['<option value="">请选择分组</option>'];
|
||||
shopManageGroups.forEach(function(g) {
|
||||
opts.push('<option value="' + g.id + '">' + (g.group_name || '') + '</option>');
|
||||
});
|
||||
createSel.innerHTML = opts.join('');
|
||||
editSel.innerHTML = opts.join('');
|
||||
if (selectedCreateId != null) createSel.value = String(selectedCreateId);
|
||||
if (selectedEditId != null) editSel.value = String(selectedEditId);
|
||||
}
|
||||
|
||||
function loadShopManageGroups(selectedCreateId, selectedEditId) {
|
||||
return fetch('/api/admin/shop-manage-groups')
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(res) {
|
||||
if (!res.success) throw new Error(res.error || '加载分组失败');
|
||||
shopManageGroups = res.items || [];
|
||||
refreshShopGroupSelects(selectedCreateId, selectedEditId);
|
||||
return shopManageGroups;
|
||||
})
|
||||
.catch(function() {
|
||||
shopManageGroups = [];
|
||||
refreshShopGroupSelects();
|
||||
return [];
|
||||
});
|
||||
}
|
||||
|
||||
function openShopManageGroupModal() {
|
||||
document.getElementById('shopManageGroupEditId').value = '';
|
||||
document.getElementById('shopManageGroupInput').value = '';
|
||||
document.getElementById('msgShopManageGroup').textContent = '';
|
||||
document.getElementById('msgShopManageGroup').className = 'msg';
|
||||
loadShopManageGroups().then(function() {
|
||||
renderShopManageGroupRows();
|
||||
document.getElementById('shopManageGroupModal').classList.add('show');
|
||||
});
|
||||
}
|
||||
|
||||
function renderShopManageGroupRows() {
|
||||
var tbody = document.getElementById('shopManageGroupListBody');
|
||||
if (!shopManageGroups.length) {
|
||||
tbody.innerHTML = '<tr><td colspan="5" class="empty-tip">暂无分组</td></tr>';
|
||||
return;
|
||||
}
|
||||
tbody.innerHTML = shopManageGroups.map(function(item, index) {
|
||||
return '<tr><td>' + (index + 1) + '</td><td>' + (item.group_name || '') + '</td><td>' + (item.created_at || '') + '</td><td>' + (item.updated_at || '') + '</td><td>' +
|
||||
'<button class="btn btn-sm" data-shop-group-edit="' + item.id + '" data-shop-group-name="' + (item.group_name || '').replace(/"/g, '"') + '">编辑</button> ' +
|
||||
'<button class="btn btn-sm btn-danger" data-shop-group-delete="' + item.id + '" data-shop-group-name="' + (item.group_name || '').replace(/"/g, '"') + '">删除</button>' +
|
||||
'</td></tr>';
|
||||
}).join('');
|
||||
|
||||
document.querySelectorAll('[data-shop-group-edit]').forEach(function(btn) {
|
||||
btn.onclick = function() {
|
||||
document.getElementById('shopManageGroupEditId').value = btn.dataset.shopGroupEdit;
|
||||
document.getElementById('shopManageGroupInput').value = (btn.dataset.shopGroupName || '').replace(/"/g, '"');
|
||||
};
|
||||
});
|
||||
|
||||
document.querySelectorAll('[data-shop-group-delete]').forEach(function(btn) {
|
||||
btn.onclick = function() {
|
||||
var gid = btn.dataset.shopGroupDelete;
|
||||
var gname = (btn.dataset.shopGroupName || '').replace(/"/g, '"');
|
||||
if (!confirm('确定删除分组「' + gname + '」吗?')) return;
|
||||
fetch('/api/admin/shop-manage-group/' + gid, { method: 'DELETE' })
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(res) {
|
||||
if (!res.success) {
|
||||
alert(res.error || '删除失败');
|
||||
return;
|
||||
}
|
||||
loadShopManageGroups().then(function() {
|
||||
renderShopManageGroupRows();
|
||||
loadShopManage(shopManagePage);
|
||||
});
|
||||
});
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function loadShopManage(page) {
|
||||
shopManagePage = page || 1;
|
||||
fetch('/api/admin/shop-manages?' + buildShopManageQuery(shopManagePage))
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(res) {
|
||||
var tbody = document.getElementById('shopManageListBody');
|
||||
if (!res.success) {
|
||||
tbody.innerHTML = '<tr><td colspan="8" class="empty-tip">加载失败: ' + (res.error || '') + '</td></tr>';
|
||||
return;
|
||||
}
|
||||
var items = res.items || [];
|
||||
if (items.length === 0) {
|
||||
tbody.innerHTML = '<tr><td colspan="8" class="empty-tip">暂无店铺</td></tr>';
|
||||
} else {
|
||||
tbody.innerHTML = items.map(function(item, index) {
|
||||
var rowNo = (shopManagePage - 1) * shopManagePageSize + index + 1;
|
||||
return '<tr><td>' + rowNo + '</td><td>' + (item.group_name || '') + '</td><td>' + (item.shop_name || '') + '</td><td>' + (item.account || '') + '</td><td>' + (item.password || '') + '</td><td>' + (item.created_at || '') + '</td><td>' + (item.updated_at || '') + '</td><td>' +
|
||||
'<button class="btn btn-sm" data-shop-manage-edit="' + item.id + '" data-shop-manage="' + (JSON.stringify(item).replace(/"/g, '"')) + '">编辑</button> ' +
|
||||
'<button class="btn btn-sm btn-danger" data-shop-manage-delete="' + item.id + '" data-shop-manage-name="' + (item.shop_name || '').replace(/"/g, '"') + '">删除</button>' +
|
||||
'</td></tr>';
|
||||
}).join('');
|
||||
}
|
||||
renderPagination('shopManagePagination', res.total, res.page, res.page_size, loadShopManage);
|
||||
bindShopManageActions();
|
||||
})
|
||||
.catch(function() {
|
||||
document.getElementById('shopManageListBody').innerHTML = '<tr><td colspan="8" class="empty-tip">请求失败</td></tr>';
|
||||
});
|
||||
}
|
||||
|
||||
function bindShopManageActions() {
|
||||
document.querySelectorAll('[data-shop-manage-edit]').forEach(function(btn) {
|
||||
btn.onclick = function() {
|
||||
var item = {};
|
||||
try { item = JSON.parse((btn.dataset.shopManage || '').replace(/"/g, '"')); } catch (e) { item = {}; }
|
||||
document.getElementById('editShopManageId').value = item.id || '';
|
||||
document.getElementById('editShopManageShopName').value = item.shop_name || '';
|
||||
document.getElementById('editShopManageAccount').value = item.account || '';
|
||||
document.getElementById('editShopManagePassword').value = item.password || '';
|
||||
document.getElementById('msgEditShopManage').textContent = '';
|
||||
document.getElementById('msgEditShopManage').className = 'msg';
|
||||
loadShopManageGroups(null, item.group_id).then(function() {
|
||||
document.getElementById('editShopManageModal').classList.add('show');
|
||||
});
|
||||
};
|
||||
});
|
||||
document.querySelectorAll('[data-shop-manage-delete]').forEach(function(btn) {
|
||||
btn.onclick = function() {
|
||||
var name = (btn.dataset.shopManageName || '').replace(/"/g, '"');
|
||||
if (!confirm('确定删除店铺「' + name + '」吗?')) return;
|
||||
fetch('/api/admin/shop-manage/' + btn.dataset.shopManageDelete, { method: 'DELETE' })
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(res) {
|
||||
if (res.success) { loadShopManage(shopManagePage); }
|
||||
else { alert(res.error || '删除失败'); }
|
||||
});
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
document.getElementById('btnManageShopGroups').onclick = openShopManageGroupModal;
|
||||
document.getElementById('btnManageShopGroupsFromEdit').onclick = openShopManageGroupModal;
|
||||
document.getElementById('btnCloseShopManageGroupModal').onclick = function() {
|
||||
document.getElementById('shopManageGroupModal').classList.remove('show');
|
||||
};
|
||||
document.getElementById('btnCancelShopManageGroupEdit').onclick = function() {
|
||||
document.getElementById('shopManageGroupEditId').value = '';
|
||||
document.getElementById('shopManageGroupInput').value = '';
|
||||
};
|
||||
document.getElementById('btnSaveShopManageGroup').onclick = function() {
|
||||
var editId = (document.getElementById('shopManageGroupEditId').value || '').trim();
|
||||
var groupName = (document.getElementById('shopManageGroupInput').value || '').trim();
|
||||
var msgEl = document.getElementById('msgShopManageGroup');
|
||||
msgEl.textContent = '';
|
||||
msgEl.className = 'msg';
|
||||
if (!groupName) {
|
||||
msgEl.textContent = '请输入分组名称';
|
||||
msgEl.className = 'msg err';
|
||||
return;
|
||||
}
|
||||
var method = editId ? 'PUT' : 'POST';
|
||||
var url = editId ? ('/api/admin/shop-manage-group/' + editId) : '/api/admin/shop-manage-group';
|
||||
fetch(url, {
|
||||
method: method,
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ group_name: groupName })
|
||||
})
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(res) {
|
||||
if (!res.success) {
|
||||
msgEl.textContent = res.error || '保存失败';
|
||||
msgEl.className = 'msg err';
|
||||
return;
|
||||
}
|
||||
document.getElementById('shopManageGroupEditId').value = '';
|
||||
document.getElementById('shopManageGroupInput').value = '';
|
||||
msgEl.textContent = res.msg || '保存成功';
|
||||
msgEl.className = 'msg ok';
|
||||
loadShopManageGroups().then(function() {
|
||||
renderShopManageGroupRows();
|
||||
loadShopManage(shopManagePage);
|
||||
});
|
||||
})
|
||||
.catch(function() {
|
||||
msgEl.textContent = '请求失败';
|
||||
msgEl.className = 'msg err';
|
||||
});
|
||||
};
|
||||
|
||||
document.getElementById('btnCreateShopManage').onclick = function() {
|
||||
var groupId = (document.getElementById('shopManageGroupSelect').value || '').trim();
|
||||
var shopName = (document.getElementById('shopManageShopName').value || '').trim();
|
||||
var account = (document.getElementById('shopManageAccount').value || '').trim();
|
||||
var password = (document.getElementById('shopManagePassword').value || '').trim();
|
||||
var msgEl = document.getElementById('msgShopManage');
|
||||
msgEl.textContent = '';
|
||||
msgEl.className = 'msg';
|
||||
if (!groupId || !shopName || !account || !password) {
|
||||
msgEl.textContent = '请完整填写分组、店铺名、账号、密码';
|
||||
msgEl.classList.add('err');
|
||||
return;
|
||||
}
|
||||
fetch('/api/admin/shop-manage', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ group_id: Number(groupId), shop_name: shopName, account: account, password: password })
|
||||
})
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(res) {
|
||||
if (res.success) {
|
||||
document.getElementById('shopManageGroupSelect').value = '';
|
||||
document.getElementById('shopManageShopName').value = '';
|
||||
document.getElementById('shopManageAccount').value = '';
|
||||
document.getElementById('shopManagePassword').value = '';
|
||||
msgEl.textContent = res.msg || '创建成功';
|
||||
msgEl.className = 'msg ok';
|
||||
loadShopManage(1);
|
||||
} else {
|
||||
msgEl.textContent = res.error || '创建失败';
|
||||
msgEl.className = 'msg err';
|
||||
}
|
||||
})
|
||||
.catch(function() {
|
||||
msgEl.textContent = '请求失败';
|
||||
msgEl.className = 'msg err';
|
||||
});
|
||||
};
|
||||
|
||||
document.getElementById('btnSaveShopManage').onclick = function() {
|
||||
var itemId = document.getElementById('editShopManageId').value;
|
||||
var groupId = (document.getElementById('editShopManageGroupSelect').value || '').trim();
|
||||
var shopName = (document.getElementById('editShopManageShopName').value || '').trim();
|
||||
var account = (document.getElementById('editShopManageAccount').value || '').trim();
|
||||
var password = (document.getElementById('editShopManagePassword').value || '').trim();
|
||||
var msgEl = document.getElementById('msgEditShopManage');
|
||||
msgEl.textContent = '';
|
||||
msgEl.className = 'msg';
|
||||
if (!groupId || !shopName || !account || !password) {
|
||||
msgEl.textContent = '请完整填写分组、店铺名、账号、密码';
|
||||
msgEl.classList.add('err');
|
||||
return;
|
||||
}
|
||||
fetch('/api/admin/shop-manage/' + itemId, {
|
||||
method: 'PUT',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ group_id: Number(groupId), shop_name: shopName, account: account, password: password })
|
||||
})
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(res) {
|
||||
if (res.success) {
|
||||
document.getElementById('editShopManageModal').classList.remove('show');
|
||||
loadShopManage(shopManagePage);
|
||||
} else {
|
||||
msgEl.textContent = res.error || '保存失败';
|
||||
msgEl.classList.add('err');
|
||||
}
|
||||
})
|
||||
.catch(function() {
|
||||
msgEl.textContent = '请求失败';
|
||||
msgEl.classList.add('err');
|
||||
});
|
||||
};
|
||||
document.getElementById('btnCloseEditShopManage').onclick = function() {
|
||||
document.getElementById('editShopManageModal').classList.remove('show');
|
||||
};
|
||||
|
||||
// ========== 版本管理 ==========
|
||||
function loadVersions() {
|
||||
fetch('/api/admin/versions')
|
||||
@@ -1530,6 +1918,8 @@
|
||||
loadColumnsForPermission();
|
||||
loadDedupeTotalData(1);
|
||||
loadShopKeys(1);
|
||||
loadShopManageGroups();
|
||||
loadShopManage(1);
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user