Commit c76c8ec9 by suyuchen

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

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