parent
1fd6bb630a
commit
2db9e3bfd5
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CompanyController extends Controller
|
||||
{
|
||||
/**
|
||||
* 显示公司查询页面
|
||||
*/
|
||||
public function search()
|
||||
{
|
||||
return view('company_search');
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,316 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>公司信息查询</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
min-height: 100vh;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
background: white;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.header {
|
||||
background: linear-gradient(135deg, #006987 0%, #0084a8 100%);
|
||||
color: white;
|
||||
padding: 30px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-size: 28px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.header p {
|
||||
font-size: 14px;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.search-section {
|
||||
padding: 30px;
|
||||
}
|
||||
|
||||
.search-form {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.search-input {
|
||||
flex: 1;
|
||||
padding: 12px 16px;
|
||||
border: 2px solid #e0e0e0;
|
||||
border-radius: 8px;
|
||||
font-size: 16px;
|
||||
transition: border-color 0.3s;
|
||||
}
|
||||
|
||||
.search-input:focus {
|
||||
outline: none;
|
||||
border-color: #006987;
|
||||
}
|
||||
|
||||
.search-btn {
|
||||
padding: 12px 30px;
|
||||
background: #006987;
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
transition: background 0.3s;
|
||||
}
|
||||
|
||||
.search-btn:hover {
|
||||
background: #0084a8;
|
||||
}
|
||||
|
||||
.search-btn:disabled {
|
||||
background: #ccc;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.loading {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
color: #666;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.error {
|
||||
background: #fee;
|
||||
color: #c33;
|
||||
padding: 15px;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 20px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.results {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.result-item {
|
||||
background: #f8f9fa;
|
||||
border: 1px solid #e0e0e0;
|
||||
border-radius: 8px;
|
||||
padding: 20px;
|
||||
margin-bottom: 15px;
|
||||
transition: box-shadow 0.3s;
|
||||
}
|
||||
|
||||
.result-item:hover {
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.result-item h3 {
|
||||
color: #006987;
|
||||
margin-bottom: 15px;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.result-info {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
.info-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
font-weight: 600;
|
||||
color: #666;
|
||||
font-size: 13px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
color: #333;
|
||||
font-size: 15px;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.no-results {
|
||||
text-align: center;
|
||||
padding: 40px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.empty-state {
|
||||
text-align: center;
|
||||
padding: 60px 20px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.empty-state-icon {
|
||||
font-size: 64px;
|
||||
margin-bottom: 20px;
|
||||
opacity: 0.5;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h1>🔍 公司信息查询</h1>
|
||||
<p>输入公司名称,查询企业详细信息</p>
|
||||
</div>
|
||||
|
||||
<div class="search-section">
|
||||
<form class="search-form" id="searchForm" onsubmit="searchCompany(event)">
|
||||
<input
|
||||
type="text"
|
||||
class="search-input"
|
||||
id="companyName"
|
||||
placeholder="请输入公司名称..."
|
||||
required
|
||||
>
|
||||
<button type="submit" class="search-btn" id="searchBtn">查询</button>
|
||||
</form>
|
||||
|
||||
<div class="error" id="errorMsg"></div>
|
||||
<div class="loading" id="loading">查询中,请稍候...</div>
|
||||
|
||||
<div class="results" id="results">
|
||||
<div class="empty-state">
|
||||
<div class="empty-state-icon">🏢</div>
|
||||
<p>请输入公司名称进行查询</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function searchCompany(event) {
|
||||
event.preventDefault();
|
||||
|
||||
const companyName = document.getElementById('companyName').value.trim();
|
||||
if (!companyName) {
|
||||
showError('请输入公司名称');
|
||||
return;
|
||||
}
|
||||
|
||||
const searchBtn = document.getElementById('searchBtn');
|
||||
const loading = document.getElementById('loading');
|
||||
const errorMsg = document.getElementById('errorMsg');
|
||||
const results = document.getElementById('results');
|
||||
|
||||
// 重置状态
|
||||
hideError();
|
||||
searchBtn.disabled = true;
|
||||
loading.style.display = 'block';
|
||||
results.innerHTML = '';
|
||||
|
||||
// 调用API
|
||||
fetch(`/api/mobile/other/company?company_name=${encodeURIComponent(companyName)}`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
loading.style.display = 'none';
|
||||
searchBtn.disabled = false;
|
||||
|
||||
if (data.code === 200 && data.data && data.data.length > 0) {
|
||||
displayResults(data.data);
|
||||
} else {
|
||||
showError(data.msg || '未找到相关公司信息');
|
||||
results.innerHTML = '<div class="no-results">未找到相关公司信息</div>';
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
loading.style.display = 'none';
|
||||
searchBtn.disabled = false;
|
||||
showError('查询失败,请稍后重试');
|
||||
console.error('Error:', error);
|
||||
});
|
||||
}
|
||||
|
||||
function displayResults(companies) {
|
||||
const results = document.getElementById('results');
|
||||
|
||||
if (!companies || companies.length === 0) {
|
||||
results.innerHTML = '<div class="no-results">未找到相关公司信息</div>';
|
||||
return;
|
||||
}
|
||||
|
||||
let html = '';
|
||||
companies.forEach(company => {
|
||||
html += `
|
||||
<div class="result-item">
|
||||
<h3>${escapeHtml(company.enterpriseName || company.name || '')}</h3>
|
||||
<div class="result-info">
|
||||
${getInfoItem('统一社会信用代码', company.creditCode)}
|
||||
${getInfoItem('法人代表', company.operName)}
|
||||
${getInfoItem('注册状态', company.status)}
|
||||
${getInfoItem('成立日期', company.startDate)}
|
||||
${getInfoItem('注册资本', formatRegistAmount(company.registAmount, company.registCapiType))}
|
||||
${getInfoItem('企业地址', company.address)}
|
||||
${getInfoItem('所属城市', company.city)}
|
||||
${getInfoItem('所属省份', company.province)}
|
||||
${getInfoItem('企业类型', company.enterpriseType)}
|
||||
${getInfoItem('经营范围', company.businessScope)}
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
|
||||
results.innerHTML = html;
|
||||
}
|
||||
|
||||
function getInfoItem(label, value) {
|
||||
if (!value && value !== 0) {
|
||||
return '';
|
||||
}
|
||||
return `
|
||||
<div class="info-item">
|
||||
<div class="info-label">${escapeHtml(label)}</div>
|
||||
<div class="info-value">${escapeHtml(value)}</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
function formatRegistAmount(amount, type) {
|
||||
if (!amount) return '';
|
||||
return `${amount} ${type || ''}`;
|
||||
}
|
||||
|
||||
function showError(message) {
|
||||
const errorMsg = document.getElementById('errorMsg');
|
||||
errorMsg.textContent = message;
|
||||
errorMsg.style.display = 'block';
|
||||
}
|
||||
|
||||
function hideError() {
|
||||
const errorMsg = document.getElementById('errorMsg');
|
||||
errorMsg.style.display = 'none';
|
||||
}
|
||||
|
||||
function escapeHtml(text) {
|
||||
if (!text) return '';
|
||||
const div = document.createElement('div');
|
||||
div.textContent = text;
|
||||
return div.innerHTML;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Loading…
Reference in new issue