Prechádzať zdrojové kódy

feat(s6): 生产执行三页只读页面 + 菜单重指

- 新增 过程检验单列表/生产设备台账/模工具台账管理 3 个只读 UI 页面(照截图还原查询区/列名/空态,无接口、静态空表)
- SysMenuSeedData.cs 3 条菜单 Component 由 placeholder 重指真实页面
- UpdateScripts/1.0.218.sql 重指既有 3 条菜单 Component(幂等 UPDATE)
- bump version Web 2.4.213 / server 1.0.218
YY968XX 2 mesiacov pred
rodič
commit
8a43b14dbb

+ 1 - 1
Web/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "admin.net",
   "name": "admin.net",
   "type": "module",
   "type": "module",
-  "version": "2.4.212",
+  "version": "2.4.213",
   "packageManager": "pnpm@10.32.1",
   "packageManager": "pnpm@10.32.1",
   "lastBuildTime": "2026.03.15",
   "lastBuildTime": "2026.03.15",
   "description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
   "description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",

+ 97 - 0
Web/src/views/aidop/s6/equipment-tooling/productionEquipmentLedger.vue

@@ -0,0 +1,97 @@
+<template>
+	<AidopDemoShell :title="pageTitle" subtitle="只读列表">
+		<el-form :inline="true" :model="query" class="mb12" @submit.prevent>
+			<el-form-item label="厂内设备名称">
+				<el-input v-model="query.equipmentName" clearable style="width: 200px" />
+			</el-form-item>
+			<el-form-item label="厂内设备编码">
+				<el-input v-model="query.equipmentCode" clearable style="width: 200px" />
+			</el-form-item>
+			<el-form-item label="资产编码">
+				<el-input v-model="query.assetCode" clearable style="width: 200px" />
+			</el-form-item>
+			<el-form-item>
+				<el-button type="primary" @click="doSearch">查询</el-button>
+				<el-button @click="resetQuery">重置</el-button>
+			</el-form-item>
+		</el-form>
+
+		<el-table :data="rows" row-key="id" v-loading="loading" border stripe>
+			<el-table-column prop="equipmentName" label="厂内设备名称" min-width="150" show-overflow-tooltip resizable />
+			<el-table-column prop="equipmentIdentCode" label="设备识别码" min-width="130" show-overflow-tooltip resizable />
+			<el-table-column prop="importance" label="重要度" min-width="100" resizable />
+			<el-table-column prop="factoryDate" label="出厂日期" min-width="130" resizable />
+			<el-table-column prop="ratedPower" label="额定功率" min-width="110" resizable />
+			<el-table-column prop="manufacturer" label="制造厂商" min-width="150" show-overflow-tooltip resizable />
+			<el-table-column prop="workshop" label="车间" min-width="110" show-overflow-tooltip resizable />
+			<el-table-column prop="keeper" label="保管人" min-width="110" show-overflow-tooltip resizable />
+			<el-table-column prop="standard" label="标准" min-width="100" resizable />
+			<el-table-column prop="operationProcedure" label="设备操作规程" min-width="140" show-overflow-tooltip resizable />
+			<el-table-column prop="equipmentStatus" label="设备状态" min-width="110" resizable />
+			<el-table-column prop="servedYears" label="已服役年限" min-width="120" resizable />
+			<el-table-column prop="remark" label="备注" min-width="160" show-overflow-tooltip resizable />
+			<el-table-column prop="equipmentCode" label="厂内设备编码" min-width="140" show-overflow-tooltip resizable />
+			<el-table-column prop="model" label="型号" min-width="120" show-overflow-tooltip resizable />
+			<el-table-column prop="attachment" label="附件" min-width="100" resizable />
+			<el-table-column prop="suggestedUsageYears" label="建议使用年限" min-width="130" resizable />
+			<el-table-column prop="equipmentTypeName" label="设备类型名称" min-width="140" show-overflow-tooltip resizable />
+			<template #empty>
+				<el-empty description="暂无数据" />
+			</template>
+		</el-table>
+
+		<div class="pager">
+			<el-pagination
+				v-model:current-page="query.page"
+				v-model:page-size="query.pageSize"
+				:total="total"
+				:page-sizes="[10, 20, 50]"
+				layout="total, sizes, prev, pager, next"
+			/>
+		</div>
+	</AidopDemoShell>
+</template>
+
+<script setup lang="ts" name="aidopS6EquipmentToolingEquipmentLedger">
+import { computed, reactive, ref } from 'vue';
+import { useRoute } from 'vue-router';
+import AidopDemoShell from '/@/views/aidop/components/AidopDemoShell.vue';
+
+const route = useRoute();
+const pageTitle = computed(() => (route.meta?.title as string) || '生产设备台账');
+
+const query = reactive({
+	equipmentName: '',
+	equipmentCode: '',
+	assetCode: '',
+	page: 1,
+	pageSize: 10,
+});
+
+// 本批次为只读 UI 骨架,尚无真实生产设备台账接口:渲染空表,不发请求、不造数据。
+const loading = ref(false);
+const rows = ref<Record<string, unknown>[]>([]);
+const total = ref(0);
+
+function doSearch() {
+	query.page = 1;
+}
+
+function resetQuery() {
+	query.equipmentName = '';
+	query.equipmentCode = '';
+	query.assetCode = '';
+	query.page = 1;
+}
+</script>
+
+<style scoped lang="scss">
+.mb12 {
+	margin-bottom: 12px;
+}
+.pager {
+	margin-top: 12px;
+	display: flex;
+	justify-content: flex-end;
+}
+</style>

+ 99 - 0
Web/src/views/aidop/s6/equipment-tooling/toolingLedgerList.vue

@@ -0,0 +1,99 @@
+<template>
+	<AidopDemoShell :title="pageTitle" subtitle="只读列表">
+		<el-form :inline="true" :model="query" class="mb12" @submit.prevent>
+			<el-form-item label="名称">
+				<el-input v-model="query.name" clearable style="width: 200px" />
+			</el-form-item>
+			<el-form-item label="工作组">
+				<el-input v-model="query.workGroup" clearable style="width: 200px" />
+			</el-form-item>
+			<el-form-item label="使用部门">
+				<el-input v-model="query.usageDept" clearable style="width: 200px" />
+			</el-form-item>
+			<el-form-item label="类型">
+				<el-select v-model="query.type" placeholder="请选择" clearable style="width: 200px" />
+			</el-form-item>
+			<el-form-item label="模具类型编码">
+				<el-input v-model="query.moldTypeCode" clearable style="width: 200px" />
+			</el-form-item>
+			<el-form-item>
+				<el-button type="primary" @click="doSearch">查询</el-button>
+				<el-button @click="resetQuery">重置</el-button>
+			</el-form-item>
+		</el-form>
+
+		<el-table :data="rows" row-key="id" v-loading="loading" border stripe>
+			<el-table-column prop="type" label="类型" min-width="110" resizable />
+			<el-table-column prop="name" label="名称" min-width="150" show-overflow-tooltip resizable />
+			<el-table-column prop="supplierName" label="供应商名" min-width="150" show-overflow-tooltip resizable />
+			<el-table-column prop="qty" label="数量" min-width="100" resizable />
+			<el-table-column prop="functionAppName" label="功能应用名称" min-width="140" show-overflow-tooltip resizable />
+			<el-table-column prop="moldTypeCode" label="模具类型编码" min-width="140" show-overflow-tooltip resizable />
+			<el-table-column prop="productMaterialCode" label="对应产品物料编码" min-width="160" show-overflow-tooltip resizable />
+			<el-table-column prop="productDrawingNo" label="对应产品图纸号" min-width="150" show-overflow-tooltip resizable />
+			<el-table-column prop="productName" label="对应产品名称" min-width="150" show-overflow-tooltip resizable />
+			<el-table-column prop="process" label="对应工序" min-width="130" show-overflow-tooltip resizable />
+			<template #empty>
+				<el-empty description="暂无数据" />
+			</template>
+		</el-table>
+
+		<div class="pager">
+			<el-pagination
+				v-model:current-page="query.page"
+				v-model:page-size="query.pageSize"
+				:total="total"
+				:page-sizes="[10, 20, 50]"
+				layout="total, sizes, prev, pager, next"
+			/>
+		</div>
+	</AidopDemoShell>
+</template>
+
+<script setup lang="ts" name="aidopS6EquipmentToolingToolingLedger">
+import { computed, reactive, ref } from 'vue';
+import { useRoute } from 'vue-router';
+import AidopDemoShell from '/@/views/aidop/components/AidopDemoShell.vue';
+
+const route = useRoute();
+const pageTitle = computed(() => (route.meta?.title as string) || '模工具台账管理');
+
+const query = reactive({
+	name: '',
+	workGroup: '',
+	usageDept: '',
+	type: '',
+	moldTypeCode: '',
+	page: 1,
+	pageSize: 10,
+});
+
+// 本批次为只读 UI 骨架,尚无真实模工具台账接口:渲染空表,不发请求、不造数据。
+const loading = ref(false);
+const rows = ref<Record<string, unknown>[]>([]);
+const total = ref(0);
+
+function doSearch() {
+	query.page = 1;
+}
+
+function resetQuery() {
+	query.name = '';
+	query.workGroup = '';
+	query.usageDept = '';
+	query.type = '';
+	query.moldTypeCode = '';
+	query.page = 1;
+}
+</script>
+
+<style scoped lang="scss">
+.mb12 {
+	margin-bottom: 12px;
+}
+.pager {
+	margin-top: 12px;
+	display: flex;
+	justify-content: flex-end;
+}
+</style>

+ 93 - 0
Web/src/views/aidop/s6/process-quality/processInspectionList.vue

@@ -0,0 +1,93 @@
+<template>
+	<AidopDemoShell :title="pageTitle" subtitle="只读列表">
+		<el-form :inline="true" :model="query" class="mb12" @submit.prevent>
+			<el-form-item label="单据编号">
+				<el-input v-model="query.billNo" clearable style="width: 220px" />
+			</el-form-item>
+			<el-form-item label="生产批号">
+				<el-input v-model="query.productionBatchNo" clearable style="width: 220px" />
+			</el-form-item>
+			<el-form-item>
+				<el-button type="primary" @click="doSearch">查询</el-button>
+				<el-button @click="resetQuery">重置</el-button>
+			</el-form-item>
+		</el-form>
+
+		<el-table :data="rows" row-key="id" v-loading="loading" border stripe>
+			<el-table-column prop="billNo" label="单据编号" min-width="150" show-overflow-tooltip resizable />
+			<el-table-column prop="productModel" label="产品型号" min-width="140" show-overflow-tooltip resizable />
+			<el-table-column prop="productionBatchNo" label="生产批号" min-width="140" show-overflow-tooltip resizable />
+			<el-table-column prop="productionWorkOrder" label="生产工单" min-width="150" show-overflow-tooltip resizable />
+			<el-table-column prop="resultJudgement" label="结果判定" min-width="110" resizable />
+			<el-table-column prop="attachment" label="附件" min-width="100" resizable />
+			<el-table-column prop="remark" label="备注" min-width="160" show-overflow-tooltip resizable />
+			<el-table-column prop="inspector" label="检验人" min-width="120" show-overflow-tooltip resizable />
+			<el-table-column prop="processCode" label="工序编码" min-width="130" show-overflow-tooltip resizable />
+			<el-table-column prop="processName" label="工序名称" min-width="140" show-overflow-tooltip resizable />
+			<el-table-column prop="productionPerson" label="生产人员" min-width="120" show-overflow-tooltip resizable />
+			<el-table-column prop="sampleQty" label="样本量" min-width="100" resizable />
+			<el-table-column prop="formNo" label="表单编号" min-width="140" show-overflow-tooltip resizable />
+			<el-table-column prop="versionNo" label="版本号" min-width="100" resizable />
+			<el-table-column prop="effectiveDate" label="生效日期" min-width="150" resizable />
+			<el-table-column prop="materialCode" label="物料编码" min-width="140" show-overflow-tooltip resizable />
+			<el-table-column prop="materialName" label="物料名称" min-width="160" show-overflow-tooltip resizable />
+			<el-table-column prop="inspecStandardVersion" label="检规版本" min-width="110" resizable />
+			<el-table-column prop="inspecStandardCode" label="检规编号" min-width="130" show-overflow-tooltip resizable />
+			<template #empty>
+				<el-empty description="暂无数据" />
+			</template>
+		</el-table>
+
+		<div class="pager">
+			<el-pagination
+				v-model:current-page="query.page"
+				v-model:page-size="query.pageSize"
+				:total="total"
+				:page-sizes="[10, 20, 50]"
+				layout="total, sizes, prev, pager, next"
+			/>
+		</div>
+	</AidopDemoShell>
+</template>
+
+<script setup lang="ts" name="aidopS6ProcessQualityInspectionList">
+import { computed, reactive, ref } from 'vue';
+import { useRoute } from 'vue-router';
+import AidopDemoShell from '/@/views/aidop/components/AidopDemoShell.vue';
+
+const route = useRoute();
+const pageTitle = computed(() => (route.meta?.title as string) || '过程检验单列表');
+
+const query = reactive({
+	billNo: '',
+	productionBatchNo: '',
+	page: 1,
+	pageSize: 10,
+});
+
+// 本批次为只读 UI 骨架,尚无真实过程检验单接口:渲染空表,不发请求、不造数据。
+const loading = ref(false);
+const rows = ref<Record<string, unknown>[]>([]);
+const total = ref(0);
+
+function doSearch() {
+	query.page = 1;
+}
+
+function resetQuery() {
+	query.billNo = '';
+	query.productionBatchNo = '';
+	query.page = 1;
+}
+</script>
+
+<style scoped lang="scss">
+.mb12 {
+	margin-bottom: 12px;
+}
+.pager {
+	margin-top: 12px;
+	display: flex;
+	justify-content: flex-end;
+}
+</style>

+ 6 - 3
server/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj

@@ -11,9 +11,9 @@
     <GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
     <GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
     <Copyright>Admin.NET</Copyright>
     <Copyright>Admin.NET</Copyright>
     <Description>Admin.NET ͨ��Ȩ�޿���ƽ̨</Description>
     <Description>Admin.NET ͨ��Ȩ�޿���ƽ̨</Description>
-    <AssemblyVersion>1.0.217</AssemblyVersion>
-    <FileVersion>1.0.217</FileVersion>
-    <Version>1.0.217</Version>
+    <AssemblyVersion>1.0.218</AssemblyVersion>
+    <FileVersion>1.0.218</FileVersion>
+    <Version>1.0.218</Version>
   </PropertyGroup>
   </PropertyGroup>
 
 
   <ItemGroup>
   <ItemGroup>
@@ -211,6 +211,9 @@
     <None Update="UpdateScripts\1.0.217.sql">
     <None Update="UpdateScripts\1.0.217.sql">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
     </None>
+    <None Update="UpdateScripts\1.0.218.sql">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
   </ItemGroup>
   </ItemGroup>
 
 
   <ItemGroup>
   <ItemGroup>

+ 19 - 0
server/Admin.NET.Web.Entry/UpdateScripts/1.0.218.sql

@@ -0,0 +1,19 @@
+-- ============================================================
+-- 1.0.218.sql
+-- A3-S6-PRODUCTION-EXECUTION-3PAGES-REAL-PAGE-1
+--
+-- 业务目标:将 S6 生产执行下 3 条既有三级菜单的 Component
+--   由占位组件 /aidop/planning/index 重指到真实只读页面:
+--     - 1329016020001 过程检验单列表 → /aidop/s6/process-quality/processInspectionList
+--     - 1329016030001 生产设备台账   → /aidop/s6/equipment-tooling/productionEquipmentLedger
+--     - 1329016030002 模工具台账管理 → /aidop/s6/equipment-tooling/toolingLedgerList
+--
+-- 安全保证:
+--   - 仅 UPDATE 三条既有菜单的 Component / Remark / UpdateTime;不新增、不 DELETE / DROP / TRUNCATE。
+--   - 菜单 Id / Pid / Path / Name / 租户分配(SysTenantMenu)均不变,无需补分配。
+--   - 不动 SysRoleMenu / SysOrg / SysUser / SysRole / SysTenant;不动 S5 / S7 / S8 及其他 S6 菜单。
+-- ============================================================
+
+UPDATE SysMenu SET Component = '/aidop/s6/process-quality/processInspectionList',        Remark = 'S6 过程检验单列表(只读列表)', UpdateTime = NOW() WHERE Id = 1329016020001;
+UPDATE SysMenu SET Component = '/aidop/s6/equipment-tooling/productionEquipmentLedger',   Remark = 'S6 生产设备台账(只读列表)',   UpdateTime = NOW() WHERE Id = 1329016030001;
+UPDATE SysMenu SET Component = '/aidop/s6/equipment-tooling/toolingLedgerList',           Remark = 'S6 模工具台账管理(只读列表)', UpdateTime = NOW() WHERE Id = 1329016030002;

+ 3 - 3
server/Plugins/Admin.NET.Plugin.AiDOP/SeedData/SysMenuSeedData.cs

@@ -580,13 +580,13 @@ public class SysMenuSeedData : ISqlSugarEntitySeedData<SysMenu>
         // 过程质量管理 (1322000000020) 下 1 个三级
         // 过程质量管理 (1322000000020) 下 1 个三级
         const long processQualityDirId = 1322000000020L;
         const long processQualityDirId = 1322000000020L;
         const long processQualityBase = 1329016020000L;
         const long processQualityBase = 1329016020000L;
-        yield return new SysMenu { Id = processQualityBase + 1, Pid = processQualityDirId, Title = "过程检验单列表", Path = "/aidop/s6/process-quality/inspection-list", Name = "aidopS6ProcessQualityInspectionList", Component = placeholderComponent, Icon = "ele-Document", Type = MenuTypeEnum.Menu, CreateTime = ct, OrderNo = 10, Remark = "S6 过程检验单列表(真实页面待交付)" };
+        yield return new SysMenu { Id = processQualityBase + 1, Pid = processQualityDirId, Title = "过程检验单列表", Path = "/aidop/s6/process-quality/inspection-list", Name = "aidopS6ProcessQualityInspectionList", Component = "/aidop/s6/process-quality/processInspectionList", Icon = "ele-Document", Type = MenuTypeEnum.Menu, CreateTime = ct, OrderNo = 10, Remark = "S6 过程检验单列表(只读列表)" };
 
 
         // 设备工装管理 (1322000000021) 下 2 个三级
         // 设备工装管理 (1322000000021) 下 2 个三级
         const long equipmentToolingDirId = 1322000000021L;
         const long equipmentToolingDirId = 1322000000021L;
         const long equipmentToolingBase = 1329016030000L;
         const long equipmentToolingBase = 1329016030000L;
-        yield return new SysMenu { Id = equipmentToolingBase + 1, Pid = equipmentToolingDirId, Title = "生产设备台账", Path = "/aidop/s6/equipment-tooling/equipment-ledger", Name = "aidopS6EquipmentToolingEquipmentLedger", Component = placeholderComponent, Icon = "ele-Document", Type = MenuTypeEnum.Menu, CreateTime = ct, OrderNo = 10, Remark = "S6 生产设备台账(真实页面待交付)" };
-        yield return new SysMenu { Id = equipmentToolingBase + 2, Pid = equipmentToolingDirId, Title = "模工具台账管理", Path = "/aidop/s6/equipment-tooling/tooling-ledger", Name = "aidopS6EquipmentToolingToolingLedger", Component = placeholderComponent, Icon = "ele-Document", Type = MenuTypeEnum.Menu, CreateTime = ct, OrderNo = 20, Remark = "S6 模工具台账管理(真实页面待交付)" };
+        yield return new SysMenu { Id = equipmentToolingBase + 1, Pid = equipmentToolingDirId, Title = "生产设备台账", Path = "/aidop/s6/equipment-tooling/equipment-ledger", Name = "aidopS6EquipmentToolingEquipmentLedger", Component = "/aidop/s6/equipment-tooling/productionEquipmentLedger", Icon = "ele-Document", Type = MenuTypeEnum.Menu, CreateTime = ct, OrderNo = 10, Remark = "S6 生产设备台账(只读列表)" };
+        yield return new SysMenu { Id = equipmentToolingBase + 2, Pid = equipmentToolingDirId, Title = "模工具台账管理", Path = "/aidop/s6/equipment-tooling/tooling-ledger", Name = "aidopS6EquipmentToolingToolingLedger", Component = "/aidop/s6/equipment-tooling/toolingLedgerList", Icon = "ele-Document", Type = MenuTypeEnum.Menu, CreateTime = ct, OrderNo = 20, Remark = "S6 模工具台账管理(只读列表)" };
 
 
         // 生产执行看板 (1322000000022) 下 4 个三级
         // 生产执行看板 (1322000000022) 下 4 个三级
         const long executionKanbanDirId = 1322000000022L;
         const long executionKanbanDirId = 1322000000022L;