@@ -5736,6 +5741,9 @@ document.getElementById('checkpointModal').addEventListener('click', function(e)
// ============== 许可事项筛选器相关函数 ==============
+ // 区域-部门映射关系缓存
+ let regionDepartmentMap = {};
+
let permitFilterOptions = {
regions: [],
themes: [],
@@ -5748,6 +5756,12 @@ document.getElementById('checkpointModal').addEventListener('click', function(e)
// 加载筛选选项
async function loadPermitFilterOptions() {
+ // 显示加载状态
+ const loadingElement = document.getElementById('filterOptionsLoading');
+ if (loadingElement) {
+ loadingElement.style.display = 'flex';
+ }
+
try {
const response = await fetch('/fs-ai-asistant/api/workflow/lawrisk/admin/permits/filter-options');
const data = await response.json();
@@ -5760,11 +5774,21 @@ document.getElementById('checkpointModal').addEventListener('click', function(e)
renderPermitFilterOptions();
} catch (error) {
console.error('加载筛选选项失败:', error);
+ // 可以在这里显示错误提示
+ alert('加载筛选选项失败: ' + error.message);
+ } finally {
+ // 隐藏加载状态
+ if (loadingElement) {
+ loadingElement.style.display = 'none';
+ }
}
}
// 渲染筛选选项
function renderPermitFilterOptions() {
+ // 构建区域-部门映射关系
+ buildRegionDepartmentMapping();
+
// 渲染区域选项
const regionOptionsList = document.getElementById('regionOptionsList');
if (regionOptionsList) {
@@ -5799,21 +5823,83 @@ document.getElementById('checkpointModal').addEventListener('click', function(e)
});
}
- // 渲染部门选项
- const departmentOptionsList = document.getElementById('departmentOptionsList');
- if (departmentOptionsList) {
- departmentOptionsList.innerHTML = '';
- permitFilterOptions.departments.forEach(dept => {
- const div = document.createElement('div');
- div.style.padding = '6px 12px';
- div.innerHTML = `
-
-
- ${dept.name} (${dept.code})
-
- `;
- departmentOptionsList.appendChild(div);
+ // 渲染部门选项(显示所有部门)
+ renderDepartmentOptions(permitFilterOptions.departments);
+
+ // 自动加载权限范围内的许可事项
+ // 注意:不要在渲染过程中直接调用,需要延迟执行确保DOM更新完成
+ setTimeout(() => {
+ loadAllVisiblePermits();
+ }, 100);
+ }
+
+ // 构建区域-部门映射关系
+ function buildRegionDepartmentMapping() {
+ // 初始化映射对象
+ regionDepartmentMap = {};
+
+ // 获取所有部门数据
+ const allDepartments = permitFilterOptions.departments || [];
+
+ // 为每个区域建立部门映射
+ permitFilterOptions.regions.forEach(region => {
+ const regionId = region.id || region;
+ regionDepartmentMap[regionId] = [];
+ });
+
+ // 将部门分配到对应区域
+ allDepartments.forEach(dept => {
+ const regionId = dept.region_id;
+ if (regionId && regionDepartmentMap.hasOwnProperty(regionId)) {
+ regionDepartmentMap[regionId].push(dept);
+ }
+ });
+
+ console.log('区域-部门映射关系构建完成:', regionDepartmentMap);
+ }
+
+ // 自动加载所有可见的许可事项(按权限过滤)
+ async function loadAllVisiblePermits() {
+ // 重置分页到第一页
+ permitCurrentPage = 0;
+
+ // 显示加载状态
+ showPermitsLoading(true);
+ hidePermitsError();
+
+ try {
+ // 不传递任何筛选参数,直接获取权限范围内的所有许可事项
+ const filters = {
+ limit: permitPageSize,
+ offset: permitCurrentPage * permitPageSize
+ };
+
+ const params = new URLSearchParams();
+ Object.keys(filters).forEach(key => {
+ if (filters[key]) {
+ params.append(key, filters[key]);
+ }
});
+
+ console.log('自动加载许可事项,参数:', params.toString());
+ const response = await fetch(`/fs-ai-asistant/api/workflow/lawrisk/admin/permits/advanced-filter?${params}`);
+ const data = await response.json();
+
+ if (!data.success) {
+ throw new Error(data.message || '加载失败');
+ }
+
+ console.log('自动加载结果:', data.data);
+ renderPermitResults(data.data.permits || []);
+ updatePermitPagination(data.data.pagination || {});
+
+ } catch (error) {
+ console.error('自动加载失败:', error);
+ showPermitsError(error.message);
+ renderPermitResults([]);
+ updatePermitPagination({});
+ } finally {
+ showPermitsLoading(false);
}
}
@@ -5897,7 +5983,7 @@ document.getElementById('checkpointModal').addEventListener('click', function(e)
if (selectedText) {
if (checkboxes.length === 0) {
- selectedText.textContent = `请选择${type === 'region' ? '区域' : type === 'theme' ? '主题' : '部门'}...`;
+ selectedText.textContent = `全部${type === 'region' ? '区域' : type === 'theme' ? '主题' : '部门'}`;
} else if (checkboxes.length === 1) {
const label = checkboxes[0].closest('label');
selectedText.textContent = label ? label.querySelector('span').textContent : '已选择';
@@ -5915,71 +6001,81 @@ document.getElementById('checkpointModal').addEventListener('click', function(e)
}
}
- // 区域选择变化处理
- async function onRegionSelectionChange() {
+ // 区域选择变化处理(基于前端缓存)
+ function onRegionSelectionChange() {
+ console.log('onRegionSelectionChange 被调用'); // 调试日志
// 更新区域显示文本
updateSelectedText('region');
// 获取当前选中的区域
const regionCheckboxes = document.querySelectorAll('input[name="regionFilter"]:checked');
const selectedRegions = Array.from(regionCheckboxes).map(cb => cb.value);
+ console.log('选中的区域:', selectedRegions); // 调试日志
- // 如果只选择了一个区域,则重新加载部门列表
+ // 根据选中的区域,动态更新部门列表
if (selectedRegions.length === 1) {
- await loadDepartmentsByRegion(selectedRegions[0]);
+ // 只选择一个区域时,显示该区域的部门
+ const regionId = selectedRegions[0];
+ console.log('显示区域关联部门:', regionId); // 调试日志
+ const departments = regionDepartmentMap[regionId] || [];
+ renderDepartmentOptions(departments);
} else if (selectedRegions.length === 0) {
- // 如果没有选择任何区域,则重新加载所有部门
- await loadDepartmentsByRegion(null);
- }
- // 如果选择了多个区域,暂时不做处理(可以选择是否显示所有关联部门)
- }
+ // 没有选择区域时,清空已选部门并显示所有部门
+ console.log('显示所有部门,清空部门选择'); // 调试日志
+ // 清空部门选择状态
+ const departmentCheckboxes = document.querySelectorAll('input[name="departmentFilter"]:checked');
+ departmentCheckboxes.forEach(cb => cb.checked = false);
+ updateSelectedText('department');
+ // 重新加载所有部门
+ renderDepartmentOptions(permitFilterOptions.departments || []);
+ } else {
+ // 选择多个区域时,显示所有选中区域关联的部门(去重)
+ console.log('显示多个区域关联部门'); // 调试日志
+ const allDepartments = [];
+ const departmentIds = new Set();
- // 根据区域加载部门列表
- async function loadDepartmentsByRegion(regionId) {
- try {
- // 构建API URL
- let url = '/fs-ai-asistant/api/workflow/lawrisk/admin/permits/filter-options';
- if (regionId) {
- url += `?region_id=${encodeURIComponent(regionId)}`;
- }
+ selectedRegions.forEach(regionId => {
+ const depts = regionDepartmentMap[regionId] || [];
+ depts.forEach(dept => {
+ if (!departmentIds.has(dept.id)) {
+ departmentIds.add(dept.id);
+ allDepartments.push(dept);
+ }
+ });
+ });
- // 获取筛选选项
- const response = await fetch(url);
- const data = await response.json();
-
- if (!data.success) {
- throw new Error(data.message || '加载部门列表失败');
- }
-
- // 更新部门列表(保留原有的themes和regions,但更新departments)
- permitFilterOptions.themes = data.data.themes || [];
- permitFilterOptions.regions = data.data.regions || [];
- permitFilterOptions.departments = data.data.departments || [];
-
- // 重新渲染部门选项
- renderDepartmentOptions();
-
- } catch (error) {
- console.error('加载部门列表失败:', error);
+ renderDepartmentOptions(allDepartments);
}
}
- // 渲染部门选项(仅渲染部门部分)
- function renderDepartmentOptions() {
+ // 渲染部门选项(基于传入的部门列表)
+ function renderDepartmentOptions(departments) {
const departmentOptionsList = document.getElementById('departmentOptionsList');
if (departmentOptionsList) {
departmentOptionsList.innerHTML = '';
- permitFilterOptions.departments.forEach(dept => {
+
+ if (!departments || departments.length === 0) {
+ // 如果没有部门,显示提示信息
const div = document.createElement('div');
- div.style.padding = '6px 12px';
- div.innerHTML = `
-
-
- ${dept.name} (${dept.code})
-
- `;
+ div.style.padding = '12px';
+ div.style.textAlign = 'center';
+ div.style.color = '#999';
+ div.style.fontSize = '13px';
+ div.innerHTML = '该区域暂无关联部门';
departmentOptionsList.appendChild(div);
- });
+ } else {
+ departments.forEach(dept => {
+ const div = document.createElement('div');
+ div.style.padding = '6px 12px';
+ div.innerHTML = `
+
+
+ ${dept.name} (${dept.code})
+
+ `;
+ departmentOptionsList.appendChild(div);
+ });
+ }
// 更新部门显示文本
updateSelectedText('department');
@@ -6010,6 +6106,203 @@ document.getElementById('checkpointModal').addEventListener('click', function(e)
updateSelectedText('department');
}
+ // 查看许可详情
+ async function viewPermitDetail(permitId, regionId) {
+ if (!regionId) {
+ showAlert('error', '缺少区域信息,无法查看详情');
+ return;
+ }
+
+ // 显示加载动画
+ const loadingHtml = `
+
+ `;
+ showModal('许可事项详情', loadingHtml);
+
+ // 构建请求参数
+ const params = new URLSearchParams();
+ params.append('permit_id', permitId);
+ params.append('region_id', regionId);
+
+ try {
+ const response = await fetch(`/fs-ai-asistant/api/workflow/lawrisk/admin/permit-details?${params}`);
+ const data = await response.json();
+
+ if (!data.success) {
+ throw new Error(data.message || '获取许可详情失败');
+ }
+
+ const permit = data.data.permit;
+ const themeDisplay = data.data.theme_display;
+
+ // 构建风险列表
+ const risksHtml = (permit.risks || [])
+ .map((risk, index) => `
+
+
+
风险提示内容
+
${escapeHtml(risk.risk_content || '')}
+
+
+ ${risk.summary ? `
+
+
风险概述
+
${escapeHtml(risk.summary || '')}
+
+ ` : ''}
+
+ ${risk.legal_basis ? `
+
+
法律依据
+
${escapeHtml(risk.legal_basis)}
+
+ ` : ''}
+
+ ${risk.document_no ? `
+
+
文件文号
+
${escapeHtml(risk.document_no)}
+
+ ` : ''}
+
+ ${risk.remarks ? `
+
+
备注
+
${escapeHtml(risk.remarks)}
+
+ ` : ''}
+
+ `).join('');
+
+ // 构建主题列表
+ const themesList = (permit.themes || [])
+ .map(t => `
${escapeHtml(t.name)} `)
+ .join('');
+
+ const detailHtml = `
+
+
+
${escapeHtml(permit.name || '未知许可')}
+
+
行政区域: ${escapeHtml(permit.region?.name || '-')}
+
风险数量: ${permit.risks?.length || 0}
+
+
+
+ ${themesList ? `
关联主题: ${themesList}
` : ''}
+
+
+
+
许可信息
+
+ ${permit.permit_status ? `
+
+
许可情况
+
${escapeHtml(permit.permit_status)}
+
+ ` : ''}
+
+ ${permit.subitem_summary ? `
+
+
许可(备案)事项子项
+
${escapeHtml(permit.subitem_summary)}
+
+ ` : ''}
+
+ ${permit.region?.name ? `
+
+
行政区域
+
${escapeHtml(permit.region.name)}
+
+ ` : ''}
+
+ ${permit.responsible_contact ? `
+
+
负责部门
+
${escapeHtml(permit.responsible_contact)}
+
+ ` : ''}
+
+ ${permit.jurisdiction_scope ? `
+
+
权限划分
+
${escapeHtml(permit.jurisdiction_scope)}
+
+ ` : ''}
+
+ ${permit.business_scope ? `
+
+
经营范围
+
${escapeHtml(permit.business_scope)}
+
+ ` : ''}
+
+
+
+
+
风险信息
+ ${risksHtml || '
暂无风险信息
'}
+
+
+ `;
+
+ showModal('许可事项详情', detailHtml);
+
+ } catch (error) {
+ console.error('获取许可详情失败:', error);
+ const errorHtml = `
+
+
❌ 获取许可详情失败
+
${escapeHtml(error.message || '未知错误')}
+
关闭
+
+ `;
+ showModal('许可事项详情', errorHtml);
+ }
+ }
+
+ // 删除许可事项
+ async function deletePermit(permitId, regionId) {
+ if (!confirm('确定要删除该许可事项吗?此操作不可恢复,并且会创建风险快照。')) {
+ return;
+ }
+
+ try {
+ const response = await fetch('/fs-ai-asistant/api/workflow/lawrisk/admin/permits', {
+ method: 'DELETE',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+ },
+ body: JSON.stringify({
+ permit_id: permitId,
+ region_id: regionId,
+ edited_by: currentUser?.display_name || currentUser?.username || '未知用户',
+ change_summary: '通过管理界面删除许可事项'
+ })
+ });
+
+ const data = await response.json();
+
+ if (!data.success) {
+ throw new Error(data.message || '删除失败');
+ }
+
+ showAlert('success', '许可事项删除成功');
+ // 重新加载当前页面的数据
+ loadAllVisiblePermits();
+
+ } catch (error) {
+ console.error('删除许可失败:', error);
+ showAlert('error', '删除许可失败:' + error.message);
+ }
+ }
+
// 渲染筛选结果
function renderPermitResults(permits) {
const permitsList = document.getElementById('permitsList');
@@ -6038,7 +6331,7 @@ document.getElementById('checkpointModal').addEventListener('click', function(e)
行政区域
主题
风险数
-
操作
+
操作
@@ -6049,6 +6342,8 @@ document.getElementById('checkpointModal').addEventListener('click', function(e)
.map(t => `${escapeHtml(t.name)} `)
.join('');
+ const regionId = permit.region?.id || '';
+
html += `
@@ -6059,9 +6354,12 @@ document.getElementById('checkpointModal').addEventListener('click', function(e)
${permit.theme_count || 0} 个
${permit.risk_count || 0}
-
+
查看
+
+ 删除
+
`;
@@ -6185,9 +6483,41 @@ document.getElementById('checkpointModal').addEventListener('click', function(e)
return div.innerHTML;
}
- // 查看许可详情
- function viewPermitDetail(permitId) {
- alert('查看许可详情功能待实现,许可ID: ' + permitId);
+ // 显示通用模态框
+ function showModal(title, contentHtml) {
+ // 移除已存在的详情模态框
+ const existingModal = document.getElementById('permitDetailModal');
+ if (existingModal) {
+ existingModal.remove();
+ }
+
+ // 创建新的模态框
+ const modalDiv = document.createElement('div');
+ modalDiv.className = 'modal';
+ modalDiv.id = 'permitDetailModal';
+ modalDiv.innerHTML = `
+
+ `;
+
+ document.body.appendChild(modalDiv);
+ modalDiv.classList.add('show');
+ }
+
+ // 关闭许可详情模态框
+ function closePermitDetailModal() {
+ const modal = document.getElementById('permitDetailModal');
+ if (modal) {
+ modal.classList.remove('show');
+ setTimeout(() => modal.remove(), 300);
+ }
}
// 加载文件管理