Commit c76c8ec9 by suyuchen

feat(service): 统一将零件费用相关术语更新为配件费用

- 将所有页面中的零件费用标准相关文本替换为配件费用标准 - 更新首页统计卡片中零件费用标准数量标签为配件费用标准数量 - 修改导航菜单中零件费用管理为配件费用管理 - 重命名零件费用标准管理列表页标题为配件费用标准管理 - 更新零件费用标准新增编辑页标题为配件费用标准新增编辑 - 替换标准报价单生成页中零件费用明细为配件费用明细 - 修改标准报价单详情页中零件费用明细为配件费用明细 - 更新服务价格白皮书中
parent 71f3f4aa
<!DOCTYPE html> <!DOCTYPE html>
...@@ -205,7 +205,7 @@ ...@@ -205,7 +205,7 @@
<div style="font-size: 12px; margin-top: 10px; opacity: 0.8;">已配置标准</div> <div style="font-size: 12px; margin-top: 10px; opacity: 0.8;">已配置标准</div>
</div> </div>
<div class="stat-card success"> <div class="stat-card success">
<div class="stat-label">件费用标准数量</div> <div class="stat-label">件费用标准数量</div>
<div class="stat-value">{{ stats.partCount }}</div> <div class="stat-value">{{ stats.partCount }}</div>
<div style="font-size: 12px; margin-top: 10px; opacity: 0.8;">已配置标准</div> <div style="font-size: 12px; margin-top: 10px; opacity: 0.8;">已配置标准</div>
</div> </div>
...@@ -227,8 +227,8 @@ ...@@ -227,8 +227,8 @@
</a> </a>
<a href="4-零件费用标准管理列表页.html" class="action-btn"> <a href="4-零件费用标准管理列表页.html" class="action-btn">
<div class="action-icon">🔧</div> <div class="action-icon">🔧</div>
<div class="action-title">件费用管理</div> <div class="action-title">件费用管理</div>
<div class="action-desc">管理件费用标准</div> <div class="action-desc">管理件费用标准</div>
</a> </a>
<a href="6-报价规则配置列表页.html" class="action-btn"> <a href="6-报价规则配置列表页.html" class="action-btn">
<div class="action-icon">⚙️</div> <div class="action-icon">⚙️</div>
......
<!DOCTYPE html> <!DOCTYPE html>
...@@ -258,20 +258,20 @@ ...@@ -258,20 +258,20 @@
</div> </div>
</div> </div>
<!-- 件费用说明 --> <!-- 件费用说明 -->
<div class="section"> <div class="section">
<div class="section-title">三、件费用说明</div> <div class="section-title">三、件费用说明</div>
<div class="section-content"> <div class="section-content">
<p>零件费用按照标准零件价格表执行,主要包括:</p> <p>配件费用按照标准配件价格表执行,主要包括:</p>
<ul style="margin-left: 20px; margin-top: 10px;"> <ul style="margin-left: 20px; margin-top: 10px;">
<li>件价格以系统标准价格表为准</li> <li>件价格以系统标准价格表为准</li>
<li>件价格可能因市场波动而调整,以实际报价时价格为准</li> <li>件价格可能因市场波动而调整,以实际报价时价格为准</li>
<li>部分件价格含税,部分不含税,具体以报价单为准</li> <li>部分件价格含税,部分不含税,具体以报价单为准</li>
<li>件数量以实际使用为准</li> <li>件数量以实际使用为准</li>
</ul> </ul>
<div class="info-box" style="margin-top: 20px;"> <div class="info-box" style="margin-top: 20px;">
<div class="info-box-title">件价格查询</div> <div class="info-box-title">件价格查询</div>
<div>详细的零件价格标准请参考系统中的零件费用标准管理模块,或联系客服获取最新价格信息。</div> <div>详细的配件价格标准请参考系统中的配件费用标准管理模块,或联系客服获取最新价格信息。</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -322,7 +322,7 @@ ...@@ -322,7 +322,7 @@
<ol style="margin-left: 20px; margin-top: 10px;"> <ol style="margin-left: 20px; margin-top: 10px;">
<li><strong>自动匹配规则:</strong>系统根据服务场景(停机/非停机)自动匹配相应的报价规则</li> <li><strong>自动匹配规则:</strong>系统根据服务场景(停机/非停机)自动匹配相应的报价规则</li>
<li><strong>人工费用计算:</strong>根据选择的服务类型和技术等级,按照标准价格计算</li> <li><strong>人工费用计算:</strong>根据选择的服务类型和技术等级,按照标准价格计算</li>
<li><strong>零件费用计算:</strong>根据实际使用的零件数量和标准价格计算</li> <li><strong>配件费用计算:</strong>根据实际使用的配件数量和标准价格计算</li>
<li><strong>加急费用:</strong>如适用,按照加急费规则计算并累加</li> <li><strong>加急费用:</strong>如适用,按照加急费规则计算并累加</li>
<li><strong>折扣规则:</strong>如适用,按照折扣规则进行减免</li> <li><strong>折扣规则:</strong>如适用,按照折扣规则进行减免</li>
<li><strong>最终价格:</strong>所有费用项目相加得出最终报价</li> <li><strong>最终价格:</strong>所有费用项目相加得出最终报价</li>
...@@ -341,7 +341,7 @@ ...@@ -341,7 +341,7 @@
<p>本白皮书中的所有价格数据均来源于系统价格配置模块:</p> <p>本白皮书中的所有价格数据均来源于系统价格配置模块:</p>
<ul style="margin-left: 20px; margin-top: 10px;"> <ul style="margin-left: 20px; margin-top: 10px;">
<li>人工费用标准:来源于"人工费用标准管理"模块</li> <li>人工费用标准:来源于"人工费用标准管理"模块</li>
<li>零件费用标准:来源于"零件费用标准管理"模块</li> <li>配件费用标准:来源于"配件费用标准管理"模块</li>
<li>报价规则:来源于"报价规则配置"模块</li> <li>报价规则:来源于"报价规则配置"模块</li>
</ul> </ul>
<div class="info-box" style="margin-top: 20px;"> <div class="info-box" style="margin-top: 20px;">
......
<!DOCTYPE html> <!DOCTYPE html>
...@@ -485,7 +485,7 @@ ...@@ -485,7 +485,7 @@
{ {
quoteNo: 'QT' + (Date.now() - 86400000), quoteNo: 'QT' + (Date.now() - 86400000),
customerName: '示例客户有限公司', customerName: '示例客户有限公司',
serviceDescription: '服务器故障维修服务,包括硬件检测、故障排查、件更换等', serviceDescription: '服务器故障维修服务,包括硬件检测、故障排查、件更换等',
quoteDate: new Date(Date.now() - 2 * 86400000).toISOString().split('T')[0], quoteDate: new Date(Date.now() - 2 * 86400000).toISOString().split('T')[0],
validUntil: new Date(Date.now() + 28 * 86400000).toISOString().split('T')[0], validUntil: new Date(Date.now() + 28 * 86400000).toISOString().split('T')[0],
status: '有效', status: '有效',
......
<!DOCTYPE html> <!DOCTYPE html>
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>件费用标准管理 - 服务价格标准化管理系统</title> <title>件费用标准管理 - 服务价格标准化管理系统</title>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<style> <style>
* { * {
...@@ -178,7 +178,7 @@ ...@@ -178,7 +178,7 @@
<div class="container"> <div class="container">
<div class="header"> <div class="header">
<div class="header-top"> <div class="header-top">
<h1>件费用标准管理</h1> <h1>件费用标准管理</h1>
<div class="nav-menu"> <div class="nav-menu">
<a href="1-服务价格标准首页.html" class="nav-item">首页</a> <a href="1-服务价格标准首页.html" class="nav-item">首页</a>
<a href="2-人工费用标准管理列表页.html" class="nav-item">人工费用</a> <a href="2-人工费用标准管理列表页.html" class="nav-item">人工费用</a>
...@@ -190,18 +190,18 @@ ...@@ -190,18 +190,18 @@
<div class="card"> <div class="card">
<div class="toolbar"> <div class="toolbar">
<div class="card-title">件费用标准列表</div> <div class="card-title">件费用标准列表</div>
<div style="display: flex; gap: 10px;"> <div style="display: flex; gap: 10px;">
<button class="btn btn-success" @click="handleImport">批量导入</button> <button class="btn btn-success" @click="handleImport">批量导入</button>
<button class="btn btn-primary" @click="handleAdd">+ 新增</button> <button class="btn btn-primary" @click="handleAdd">+ 新增</button>
</div> </div>
</div> </div>
<table class="data-table"> <table class="data-table">
<thead> <thead>
<tr> <tr>
<th>件编号</th> <th>件编号</th>
<th>件名称</th> <th>件名称</th>
<th>型号规格</th> <th>型号规格</th>
<th>标准单价</th> <th>标准单价</th>
<th>单位</th> <th>单位</th>
......
<!DOCTYPE html> <!DOCTYPE html>
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>件费用标准{{ isEdit ? '编辑' : '新增' }} - 服务价格标准化管理系统</title> <title>件费用标准{{ isEdit ? '编辑' : '新增' }} - 服务价格标准化管理系统</title>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<style> <style>
* { * {
...@@ -188,7 +188,7 @@ ...@@ -188,7 +188,7 @@
<div id="app"> <div id="app">
<div class="container"> <div class="container">
<div class="header"> <div class="header">
<h1>件费用标准{{ isEdit ? '编辑' : '新增' }}</h1> <h1>件费用标准{{ isEdit ? '编辑' : '新增' }}</h1>
</div> </div>
<div class="card"> <div class="card">
...@@ -196,22 +196,22 @@ ...@@ -196,22 +196,22 @@
<form @submit.prevent="handleSubmit"> <form @submit.prevent="handleSubmit">
<div class="form-row"> <div class="form-row">
<div class="form-group"> <div class="form-group">
<label class="form-label">件编号 <span class="required">*</span></label> <label class="form-label">件编号 <span class="required">*</span></label>
<input <input
type="text" type="text"
v-model="form.partNo" v-model="form.partNo"
class="form-control" class="form-control"
placeholder="请输入件编号" placeholder="请输入件编号"
required required
/> />
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="form-label">件名称 <span class="required">*</span></label> <label class="form-label">件名称 <span class="required">*</span></label>
<input <input
type="text" type="text"
v-model="form.partName" v-model="form.partName"
class="form-control" class="form-control"
placeholder="请输入件名称" placeholder="请输入件名称"
required required
/> />
</div> </div>
......
<!DOCTYPE html> <!DOCTYPE html>
...@@ -382,11 +382,11 @@ ...@@ -382,11 +382,11 @@
<!-- 零件费用明细 --> <!-- 零件费用明细 -->
<div class="quote-detail"> <div class="quote-detail">
<div class="quote-detail-title">件费用明细(可选)</div> <div class="quote-detail-title">件费用明细(可选)</div>
<table class="detail-table"> <table class="detail-table">
<thead> <thead>
<tr> <tr>
<th>件名称</th> <th>件名称</th>
<th>型号规格</th> <th>型号规格</th>
<th>数量</th> <th>数量</th>
<th>单价</th> <th>单价</th>
...@@ -398,7 +398,7 @@ ...@@ -398,7 +398,7 @@
<tr v-for="(item, index) in partDetails" :key="index"> <tr v-for="(item, index) in partDetails" :key="index">
<td> <td>
<select v-model="item.partId" class="form-control" @change="updatePartInfo(index)"> <select v-model="item.partId" class="form-control" @change="updatePartInfo(index)">
<option value="">请选择</option> <option value="">请选择</option>
<option v-for="part in availableParts" :key="part.id" :value="part.id"> <option v-for="part in availableParts" :key="part.id" :value="part.id">
{{ part.partName }} {{ part.partName }}
</option> </option>
...@@ -423,7 +423,7 @@ ...@@ -423,7 +423,7 @@
</tr> </tr>
<tr> <tr>
<td colspan="6"> <td colspan="6">
<button type="button" class="btn btn-primary btn-small" @click="addPart">+ 添加</button> <button type="button" class="btn btn-primary btn-small" @click="addPart">+ 添加</button>
</td> </td>
</tr> </tr>
</tbody> </tbody>
...@@ -439,7 +439,7 @@ ...@@ -439,7 +439,7 @@
<td>¥{{ laborSubtotal.toFixed(2) }}</td> <td>¥{{ laborSubtotal.toFixed(2) }}</td>
</tr> </tr>
<tr> <tr>
<td style="text-align: right; font-weight: 600;">件费用小计:</td> <td style="text-align: right; font-weight: 600;">件费用小计:</td>
<td>¥{{ partSubtotal.toFixed(2) }}</td> <td>¥{{ partSubtotal.toFixed(2) }}</td>
</tr> </tr>
<tr class="total-row"> <tr class="total-row">
......
<!DOCTYPE html> <!DOCTYPE html>
...@@ -328,14 +328,14 @@ ...@@ -328,14 +328,14 @@
</table> </table>
</div> </div>
<!-- 件费用明细 --> <!-- 件费用明细 -->
<div class="detail-section" v-if="partDetails.length > 0"> <div class="detail-section" v-if="partDetails.length > 0">
<div class="detail-section-title">件费用明细</div> <div class="detail-section-title">件费用明细</div>
<table class="detail-table"> <table class="detail-table">
<thead> <thead>
<tr> <tr>
<th>序号</th> <th>序号</th>
<th>件名称</th> <th>件名称</th>
<th>型号规格</th> <th>型号规格</th>
<th>数量</th> <th>数量</th>
<th>单价</th> <th>单价</th>
...@@ -365,7 +365,7 @@ ...@@ -365,7 +365,7 @@
<td>¥{{ laborSubtotal.toFixed(2) }}</td> <td>¥{{ laborSubtotal.toFixed(2) }}</td>
</tr> </tr>
<tr v-if="partSubtotal > 0"> <tr v-if="partSubtotal > 0">
<td>件费用小计:</td> <td>件费用小计:</td>
<td>¥{{ partSubtotal.toFixed(2) }}</td> <td>¥{{ partSubtotal.toFixed(2) }}</td>
</tr> </tr>
<tr class="total-row"> <tr class="total-row">
......
<!DOCTYPE html> <!DOCTYPE html>
...@@ -966,3 +966,4 @@ ...@@ -966,3 +966,4 @@
...@@ -30,22 +30,7 @@ ...@@ -30,22 +30,7 @@
<path d="M4 4h12a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V6a2 2 0 012-2z"/> <path d="M4 4h12a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V6a2 2 0 012-2z"/>
<path d="M7 9h6M7 12h4"/> <path d="M7 9h6M7 12h4"/>
</svg> </svg>
<span>设备管理</span> <span>服务管理</span>
</div>
<svg class="nav-arrow nav-icon" viewBox="0 0 20 20">
<path d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"/>
</svg>
</div>
<a href="零件管理.html" class="nav-subitem ">
配件管理
</a>
<div class="nav-item has-submenu expanded" onclick="toggleSubmenu(this)">
<div style="display: flex; align-items: center; gap: 12px;">
<svg class="nav-icon" viewBox="0 0 20 20">
<path d="M4 4h12a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V6a2 2 0 012-2z"/>
<path d="M7 9h6M7 12h4"/>
</svg>
<span>服务订单</span>
</div> </div>
<svg class="nav-arrow nav-icon" viewBox="0 0 20 20"> <svg class="nav-arrow nav-icon" viewBox="0 0 20 20">
<path d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"/> <path d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z"/>
...@@ -55,11 +40,14 @@ ...@@ -55,11 +40,14 @@
<a href="人工费用标准管理列表页.html" class="nav-subitem "> <a href="人工费用标准管理列表页.html" class="nav-subitem ">
人工报价 人工报价
</a> </a>
<a href="零件管理.html" class="nav-subitem ">
配件报价
</a>
<!--<a href="标准报价单生成.html" class="nav-subitem "> <!--<a href="标准报价单生成.html" class="nav-subitem ">
报价管理 报价管理
</a>--> </a>-->
<a href="服务单列表.html" class="nav-subitem "> <a href="服务单列表.html" class="nav-subitem ">
服务单列表 服务订单
</a> </a>
</div> </div>
<div class="nav-item has-submenu expanded" onclick="toggleSubmenu(this)"> <div class="nav-item has-submenu expanded" onclick="toggleSubmenu(this)">
...@@ -84,6 +72,9 @@ ...@@ -84,6 +72,9 @@
<a href="设备机型.html" class="nav-subitem "> <a href="设备机型.html" class="nav-subitem ">
设备机型 设备机型
</a> </a>
<a href="配件管理.html" class="nav-subitem ">
配件管理
</a>
</div> </div>
<!-- <div class="nav-item has-submenu expanded" onclick="toggleSubmenu(this)"> <!-- <div class="nav-item has-submenu expanded" onclick="toggleSubmenu(this)">
<div style="display: flex; align-items: center; gap: 12px;"> <div style="display: flex; align-items: center; gap: 12px;">
......
...@@ -143,6 +143,8 @@ let crawlerSites = [ ...@@ -143,6 +143,8 @@ let crawlerSites = [
lastCrawlTime: '2026-01-05T14:30', lastCrawlTime: '2026-01-05T14:30',
nextCrawlTime: '2026-01-06T14:30', nextCrawlTime: '2026-01-06T14:30',
crawlStatus: '正常', crawlStatus: '正常',
systemUrl: 'https://sys.industrynews.com',
statistics: '数据量: 500条/天, 成功率: 98.5%',
targetDataType: '新闻标题、发布时间、内容摘要', targetDataType: '新闻标题、发布时间、内容摘要',
pageStructureStable: '是', pageStructureStable: '是',
antiCrawlMechanism: 'IP限制,需使用代理池', antiCrawlMechanism: 'IP限制,需使用代理池',
...@@ -165,6 +167,8 @@ let crawlerSites = [ ...@@ -165,6 +167,8 @@ let crawlerSites = [
lastCrawlTime: '2026-01-06T10:15', lastCrawlTime: '2026-01-06T10:15',
nextCrawlTime: '2026-01-06T11:15', nextCrawlTime: '2026-01-06T11:15',
crawlStatus: '正常', crawlStatus: '正常',
systemUrl: 'https://sys.competitoranalysis.com',
statistics: '数据量: 200条/天, 成功率: 92.3%',
targetDataType: '产品价格、功能列表、更新日志', targetDataType: '产品价格、功能列表、更新日志',
pageStructureStable: '否', pageStructureStable: '否',
antiCrawlMechanism: '验证码,需OCR识别', antiCrawlMechanism: '验证码,需OCR识别',
...@@ -187,6 +191,8 @@ let crawlerSites = [ ...@@ -187,6 +191,8 @@ let crawlerSites = [
lastCrawlTime: '', lastCrawlTime: '',
nextCrawlTime: '', nextCrawlTime: '',
crawlStatus: '已停用', crawlStatus: '已停用',
systemUrl: 'https://sys.policyregulation.com',
statistics: '数据量: 0条/天, 成功率: 0%',
targetDataType: '', targetDataType: '',
pageStructureStable: '', pageStructureStable: '',
antiCrawlMechanism: '', antiCrawlMechanism: '',
...@@ -230,6 +236,8 @@ function renderCrawlerSitesTable() { ...@@ -230,6 +236,8 @@ function renderCrawlerSitesTable() {
<td>${site.crawlFrequency}</td> <td>${site.crawlFrequency}</td>
<td>${site.lastCrawlTime || '-'}</td> <td>${site.lastCrawlTime || '-'}</td>
<td><span class="${crawlStatusClass}">${site.crawlStatus}</span></td> <td><span class="${crawlStatusClass}">${site.crawlStatus}</span></td>
<td>${site.systemUrl || '-'}</td>
<td>${site.statistics || '-'}</td>
<!-- <td>${site.targetDataType}</td>--> <!-- <td>${site.targetDataType}</td>-->
<!-- <td>${site.antiCrawlMechanism}</td>--> <!-- <td>${site.antiCrawlMechanism}</td>-->
<!-- <td>${site.负责人}</td>--> <!-- <td>${site.负责人}</td>-->
...@@ -297,6 +305,8 @@ function showEditSiteModal(site) { ...@@ -297,6 +305,8 @@ function showEditSiteModal(site) {
document.getElementById('collection-plan').value = site.collectionPlan; document.getElementById('collection-plan').value = site.collectionPlan;
document.getElementById('crawl-frequency').value = site.crawlFrequency || ''; document.getElementById('crawl-frequency').value = site.crawlFrequency || '';
document.getElementById('crawl-status').value = site.crawlStatus || ''; document.getElementById('crawl-status').value = site.crawlStatus || '';
document.getElementById('system-url').value = site.systemUrl || '';
document.getElementById('statistics').value = site.statistics || '';
document.getElementById('target-data-type').value = site.targetDataType || ''; document.getElementById('target-data-type').value = site.targetDataType || '';
document.getElementById('anti-crawl-mechanism').value = site.antiCrawlMechanism || ''; document.getElementById('anti-crawl-mechanism').value = site.antiCrawlMechanism || '';
document.getElementById('负责人').value = site.负责人 || ''; document.getElementById('负责人').value = site.负责人 || '';
...@@ -375,6 +385,8 @@ function saveCrawlerSite() { ...@@ -375,6 +385,8 @@ function saveCrawlerSite() {
const collectionPlan = document.getElementById('collection-plan').value; const collectionPlan = document.getElementById('collection-plan').value;
const crawlFrequency = document.getElementById('crawl-frequency').value; const crawlFrequency = document.getElementById('crawl-frequency').value;
const crawlStatus = document.getElementById('crawl-status').value; const crawlStatus = document.getElementById('crawl-status').value;
const systemUrl = document.getElementById('system-url').value;
const statistics = document.getElementById('statistics').value;
const targetDataType = document.getElementById('target-data-type').value; const targetDataType = document.getElementById('target-data-type').value;
const antiCrawlMechanism = document.getElementById('anti-crawl-mechanism').value; const antiCrawlMechanism = document.getElementById('anti-crawl-mechanism').value;
const 负责人 = document.getElementById('负责人').value; const 负责人 = document.getElementById('负责人').value;
...@@ -411,6 +423,8 @@ function saveCrawlerSite() { ...@@ -411,6 +423,8 @@ function saveCrawlerSite() {
// 计算下次爬取时间(这里只是模拟,实际应根据频率计算) // 计算下次爬取时间(这里只是模拟,实际应根据频率计算)
nextCrawlTime: calculateNextCrawlTime(lastCrawlTime, crawlFrequency), nextCrawlTime: calculateNextCrawlTime(lastCrawlTime, crawlFrequency),
crawlStatus, crawlStatus,
systemUrl,
statistics,
targetDataType, targetDataType,
pageStructureStable: '是', // 默认值,实际应用中可能需要从表单获取 pageStructureStable: '是', // 默认值,实际应用中可能需要从表单获取
antiCrawlMechanism, antiCrawlMechanism,
...@@ -439,6 +453,8 @@ function saveCrawlerSite() { ...@@ -439,6 +453,8 @@ function saveCrawlerSite() {
// 计算下次爬取时间(这里只是模拟,实际应根据频率计算) // 计算下次爬取时间(这里只是模拟,实际应根据频率计算)
nextCrawlTime: calculateNextCrawlTime(lastCrawlTime, crawlFrequency), nextCrawlTime: calculateNextCrawlTime(lastCrawlTime, crawlFrequency),
crawlStatus, crawlStatus,
systemUrl,
statistics,
targetDataType, targetDataType,
pageStructureStable: '是', // 默认值 pageStructureStable: '是', // 默认值
antiCrawlMechanism, antiCrawlMechanism,
......
<!DOCTYPE html> <!DOCTYPE html>
...@@ -1783,6 +1783,8 @@ ...@@ -1783,6 +1783,8 @@
<th>爬取频率</th> <th>爬取频率</th>
<th>上次爬取时间</th> <th>上次爬取时间</th>
<th>爬取状态</th> <th>爬取状态</th>
<th>预览网址</th>
<th>统计</th>
<!-- <th>目标数据类型</th>--> <!-- <th>目标数据类型</th>-->
<!-- <th>反爬机制</th>--> <!-- <th>反爬机制</th>-->
<!-- <th>负责人</th>--> <!-- <th>负责人</th>-->
...@@ -1855,6 +1857,13 @@ ...@@ -1855,6 +1857,13 @@
</select> </select>
</div> </div>
</div> </div>
<div class="form-row">
<div class="form-group">
<label for="PreviewURL">预览网址 *</label>
<input type="text" id="PreviewURL" required placeholder="系统内网址">
</div>
</div>
<!-- <div class="form-row"> <!-- <div class="form-row">
<div class="form-group"> <div class="form-group">
<label for="target-data-type">目标数据类型 *</label> <label for="target-data-type">目标数据类型 *</label>
......
<!DOCTYPE html> <!DOCTYPE html>
...@@ -664,7 +664,7 @@ ...@@ -664,7 +664,7 @@
<!-- 零件费用标准 --> <!-- 零件费用标准 -->
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
<h2 class="card-title">件费用标准</h2> <h2 class="card-title">件费用标准</h2>
</div> </div>
<table class="price-table"> <table class="price-table">
<thead> <thead>
...@@ -826,3 +826,4 @@ ...@@ -826,3 +826,4 @@
<!DOCTYPE html> <!DOCTYPE html>
...@@ -1685,7 +1685,7 @@ ...@@ -1685,7 +1685,7 @@
<div class=""> <div class="">
<div class="card-title"> <div class="card-title">
<span>报价单列表 (共 {{ filteredQuotes.length }} 条)</span> <span>报价单列表 (共 {{ filteredQuotes.length }} 条)</span>
<button class="btn btn-primary btn-sm" style=""><a href="标准报价单生成.html" style="color:#fff;">报价单生成</a></button> <button class="btn btn-primary btn-sm" style=""><a href="标准报价单生成.html" style="color:#fff;">新增报价单</a></button>
</div> </div>
<!-- 筛选栏 --> <!-- 筛选栏 -->
......
<!DOCTYPE html> <!DOCTYPE html>
...@@ -1781,7 +1781,7 @@ ...@@ -1781,7 +1781,7 @@
<!-- 零件费用明细 --> <!-- 零件费用明细 -->
<div class="quote-detail"> <div class="quote-detail">
<div class="quote-detail-title">件费用明细(可选)</div> <div class="quote-detail-title">件费用明细(可选)</div>
<table class="detail-table"> <table class="detail-table">
<thead> <thead>
<tr> <tr>
......
<!DOCTYPE html> <!DOCTYPE html>
...@@ -1333,7 +1333,7 @@ ...@@ -1333,7 +1333,7 @@
<div class="card" style="padding: 20px;"> <div class="card" style="padding: 20px;">
<!-- <div class="toolbar"> <!-- <div class="toolbar">
<div class="card-title">件费用标准列表</div> <div class="card-title">件费用标准列表</div>
<div style="display: flex; gap: 10px;"> <div style="display: flex; gap: 10px;">
<button class="btn btn-success" @click="handleImport">批量导入</button> <button class="btn btn-success" @click="handleImport">批量导入</button>
<button class="btn btn-primary" @click="handleAdd">+ 新增零件</button> <button class="btn btn-primary" @click="handleAdd">+ 新增零件</button>
...@@ -1341,11 +1341,11 @@ ...@@ -1341,11 +1341,11 @@
</div>--> </div>-->
<div class="page-header"> <div class="page-header">
<div> <div>
<h1 class="page-title" data-i18n="title">配件管理</h1> <h1 class="page-title" data-i18n="title">配件报价</h1>
</div> </div>
<div class="toolbar" style="display:flex;justify-content: end;margin-bottom: 20px;"> <div class="toolbar" style="display:flex;justify-content: end;margin-bottom: 20px;">
<button class="btn btn-primary" style="text-align: right;padding: 8px 28px;margin-right: 4px;" @click="handleAdd">批量导入</button> <button class="btn btn-primary" style="text-align: right;padding: 8px 28px;margin-right: 4px;" @click="handleAdd">批量导入</button>
<button class="btn btn-primary" style="text-align: right;padding: 8px 28px;" @click="handleAdd">+ 新增</button> <button class="btn btn-primary" style="text-align: right;padding: 8px 28px;" @click="handleAdd">+ 新增</button>
</div> </div>
</div> </div>
...@@ -1358,6 +1358,8 @@ ...@@ -1358,6 +1358,8 @@
<th>标准单价</th> <th>标准单价</th>
<th>单位</th> <th>单位</th>
<th>适用设备</th> <th>适用设备</th>
<th>寿命周期</th>
<th>保养周期</th>
<th>状态</th> <th>状态</th>
<th>操作</th> <th>操作</th>
</tr> </tr>
...@@ -1370,6 +1372,8 @@ ...@@ -1370,6 +1372,8 @@
<td>¥{{ item.price }}</td> <td>¥{{ item.price }}</td>
<td>{{ item.unit }}</td> <td>{{ item.unit }}</td>
<td>{{ item.applicableEquipment }}</td> <td>{{ item.applicableEquipment }}</td>
<td>{{ item.lifecycle }} 月</td>
<td>{{ item.maintenanceCycle }} 天</td>
<td> <td>
<span :class="item.status === '启用' ? 'badge badge-success' : 'badge badge-danger'"> <span :class="item.status === '启用' ? 'badge badge-success' : 'badge badge-danger'">
{{ item.status }} {{ item.status }}
...@@ -1402,6 +1406,8 @@ ...@@ -1402,6 +1406,8 @@
price: 800, price: 800,
unit: '块', unit: '块',
applicableEquipment: '服务器', applicableEquipment: '服务器',
lifecycle: 60,
maintenanceCycle: 30,
status: '启用' status: '启用'
}, },
{ {
...@@ -1412,6 +1418,8 @@ ...@@ -1412,6 +1418,8 @@
price: 600, price: 600,
unit: '条', unit: '条',
applicableEquipment: '服务器/工作站', applicableEquipment: '服务器/工作站',
lifecycle: 36,
maintenanceCycle: 90,
status: '启用' status: '启用'
}, },
{ {
...@@ -1422,6 +1430,8 @@ ...@@ -1422,6 +1430,8 @@
price: 2000, price: 2000,
unit: '台', unit: '台',
applicableEquipment: '网络设备', applicableEquipment: '网络设备',
lifecycle: 120,
maintenanceCycle: 180,
status: '启用' status: '启用'
}, },
{ {
...@@ -1432,6 +1442,8 @@ ...@@ -1432,6 +1442,8 @@
price: 3500, price: 3500,
unit: '台', unit: '台',
applicableEquipment: '电源设备', applicableEquipment: '电源设备',
lifecycle: 120,
maintenanceCycle: 30,
status: '启用' status: '启用'
} }
] ]
......
<!DOCTYPE html> <!DOCTYPE html>
...@@ -1507,11 +1507,11 @@ ...@@ -1507,11 +1507,11 @@
<div id="app"> <div id="app">
<div class="container"> <div class="container">
<div class="header"> <div class="header">
<h1>件费用标准{{ isEdit ? '编辑' : '新增' }}</h1> <h1>件费用标准{{ isEdit ? '编辑' : '新增' }}</h1>
</div> </div>
<div class="card"> <div class="card">
<div class="card-title">件费用标准{{ isEdit ? '编辑' : '新增' }}</div> <div class="card-title">件费用标准{{ isEdit ? '编辑' : '新增' }}</div>
<form @submit.prevent="handleSubmit"> <form @submit.prevent="handleSubmit">
<div class="form-row"> <div class="form-row">
<div class="form-group"> <div class="form-group">
...@@ -1585,6 +1585,7 @@ ...@@ -1585,6 +1585,7 @@
</div> --> </div> -->
</div> </div>
<div class="form-row">
<div class="form-group"> <div class="form-group">
<label class="form-label">生效时间 <span class="required">*</span></label> <label class="form-label">生效时间 <span class="required">*</span></label>
<input <input
...@@ -1594,7 +1595,29 @@ ...@@ -1594,7 +1595,29 @@
required required
/> />
</div> </div>
<div class="form-group">
<label class="form-label">寿命周期</label>
<input
type="number"
v-model.number="form.lifecycle"
class="form-control"
placeholder="请输入寿命周期(月)"
/>
<div class="form-hint">单位:月</div>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label class="form-label">保养周期</label>
<input
type="number"
v-model.number="form.maintenanceCycle"
class="form-control"
placeholder="请输入保养周期(天)"
/>
<div class="form-hint">单位:天</div>
</div>
<div class="form-group"> <div class="form-group">
<label class="form-label">备注</label> <label class="form-label">备注</label>
<textarea <textarea
...@@ -1604,6 +1627,7 @@ ...@@ -1604,6 +1627,7 @@
placeholder="请输入备注信息" placeholder="请输入备注信息"
></textarea> ></textarea>
</div> </div>
</div>
<div class="form-actions"> <div class="form-actions">
<button type="button" class="btn btn-default" @click="handleCancel">取消</button> <button type="button" class="btn btn-default" @click="handleCancel">取消</button>
...@@ -1633,6 +1657,8 @@ ...@@ -1633,6 +1657,8 @@
price: null, price: null,
taxIncluded: true, taxIncluded: true,
effectiveDate: '', effectiveDate: '',
lifecycle: null,
maintenanceCycle: null,
remark: '' remark: ''
} }
} }
...@@ -1651,6 +1677,8 @@ ...@@ -1651,6 +1677,8 @@
price: 800, price: 800,
taxIncluded: true, taxIncluded: true,
effectiveDate: '2024-01-01', effectiveDate: '2024-01-01',
lifecycle: 60,
maintenanceCycle: 30,
remark: '标准服务器硬盘' remark: '标准服务器硬盘'
}; };
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment