Просмотр исходного кода

feat(s6): 模工具台账管理只读查询接口 + 前端接线

S6 设备工装管理/模工具台账管理:新增 ToolingLedger 只读查询(list/type-options),忠实复刻证据 sql.txt(select * from MoldToolList)+字段配置图,列映射 类型=lx/名称=MoldName/供应商名=gysmc/数量=MoldCount/功能应用名称=gnyymc/模具类型编码=MoldTypeCode/对应产品物料编码=product_material_code/图纸号=product_drawing_number/产品名称=product_name/工序=process;查询 名称/工作组(gnyymc)/使用部门(MoldUsingDepartment)/类型(lx下拉:模具·工装·检具)/模具类型编码。lx 三型同表同页同源,类型下拉筛选模具。前端骨架接线未改列结构。数据源 aidopdev 只读,无 DDL/无写路径。

chore: bump version Web 2.4.223 / server 1.0.228
YY968XX 1 неделя назад
Родитель
Сommit
f71dd5628f

+ 1 - 1
Web/package.json

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

+ 48 - 0
Web/src/views/aidop/s6/api/toolingLedger.ts

@@ -0,0 +1,48 @@
+import service from '/@/utils/request';
+import { withAidopTenantParams } from '../../api/aidopTenant';
+
+export interface ToolingLedgerPaged<T> {
+	total: number;
+	page: number;
+	pageSize: number;
+	list: T[];
+}
+
+// ── S6 模工具台账管理(只读,数据源 aidopdev.MoldToolList,sql.txt: select * from MoldToolList)──
+export interface ToolingLedgerRow {
+	id?: number;
+	/** 类型 lx(模具/工装/检具) */
+	type?: string;
+	/** 名称 MoldName */
+	name?: string;
+	/** 供应商名 gysmc */
+	supplierName?: string;
+	/** 数量 MoldCount */
+	qty?: number;
+	/** 功能应用名称 gnyymc */
+	functionAppName?: string;
+	/** 模具类型编码 MoldTypeCode */
+	moldTypeCode?: string;
+	/** 对应产品物料编码 product_material_code */
+	productMaterialCode?: string;
+	/** 对应产品图纸号 product_drawing_number */
+	productDrawingNo?: string;
+	/** 对应产品名称 product_name */
+	productName?: string;
+	/** 对应工序 process */
+	process?: string;
+}
+
+export interface ToolingLedgerTypeOption {
+	val?: string;
+}
+
+export function fetchToolingLedgerList(params: any) {
+	return service
+		.get<ToolingLedgerPaged<ToolingLedgerRow>>('/api/S6ToolingLedger/list', { params: withAidopTenantParams(params) })
+		.then((r) => r.data);
+}
+
+export function fetchToolingLedgerTypeOptions() {
+	return service.get<ToolingLedgerTypeOption[]>('/api/S6ToolingLedger/type-options').then((r) => r.data);
+}

+ 49 - 4
Web/src/views/aidop/s6/equipment-tooling/toolingLedgerList.vue

@@ -11,7 +11,9 @@
 				<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-select v-model="query.type" placeholder="请选择" clearable style="width: 200px">
+					<el-option v-for="o in typeOptions" :key="o.val" :label="o.val" :value="o.val!" />
+				</el-select>
 			</el-form-item>
 			<el-form-item label="模具类型编码">
 				<el-input v-model="query.moldTypeCode" clearable style="width: 200px" />
@@ -45,15 +47,19 @@
 				:total="total"
 				:page-sizes="[10, 20, 50]"
 				layout="total, sizes, prev, pager, next"
+				@current-change="loadList"
+				@size-change="loadList"
 			/>
 		</div>
 	</AidopDemoShell>
 </template>
 
 <script setup lang="ts" name="aidopS6EquipmentToolingToolingLedger">
-import { computed, reactive, ref } from 'vue';
+import { computed, onActivated, onMounted, reactive, ref } from 'vue';
 import { useRoute } from 'vue-router';
+import { ElMessage } from 'element-plus';
 import AidopDemoShell from '/@/views/aidop/components/AidopDemoShell.vue';
+import { fetchToolingLedgerList, fetchToolingLedgerTypeOptions, type ToolingLedgerRow, type ToolingLedgerTypeOption } from '../api/toolingLedger';
 
 const route = useRoute();
 const pageTitle = computed(() => (route.meta?.title as string) || '模工具台账管理');
@@ -68,13 +74,45 @@ const query = reactive({
 	pageSize: 10,
 });
 
-// 本批次为只读 UI 骨架,尚无真实模工具台账接口:渲染空表,不发请求、不造数据。
 const loading = ref(false);
-const rows = ref<Record<string, unknown>[]>([]);
+const rows = ref<ToolingLedgerRow[]>([]);
 const total = ref(0);
+const typeOptions = ref<ToolingLedgerTypeOption[]>([]);
+
+async function loadList() {
+	loading.value = true;
+	try {
+		const data = await fetchToolingLedgerList({
+			name: query.name,
+			workGroup: query.workGroup,
+			usageDept: query.usageDept,
+			type: query.type,
+			moldTypeCode: query.moldTypeCode,
+			page: query.page,
+			pageSize: query.pageSize,
+		});
+		rows.value = data.list || [];
+		total.value = data.total || 0;
+	} catch (e: any) {
+		rows.value = [];
+		total.value = 0;
+		ElMessage.error(e?.message || '加载模工具台账列表失败');
+	} finally {
+		loading.value = false;
+	}
+}
+
+async function loadOptions() {
+	try {
+		typeOptions.value = (await fetchToolingLedgerTypeOptions()) || [];
+	} catch {
+		typeOptions.value = [];
+	}
+}
 
 function doSearch() {
 	query.page = 1;
+	loadList();
 }
 
 function resetQuery() {
@@ -84,7 +122,14 @@ function resetQuery() {
 	query.type = '';
 	query.moldTypeCode = '';
 	query.page = 1;
+	loadList();
 }
+
+onMounted(() => {
+	loadOptions();
+	loadList();
+});
+onActivated(() => loadList());
 </script>
 
 <style scoped lang="scss">

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

@@ -11,9 +11,9 @@
     <GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
     <Copyright>Admin.NET</Copyright>
     <Description>Admin.NET ͨ��Ȩ�޿���ƽ̨</Description>
-    <AssemblyVersion>1.0.227</AssemblyVersion>
-    <FileVersion>1.0.227</FileVersion>
-    <Version>1.0.227</Version>
+    <AssemblyVersion>1.0.228</AssemblyVersion>
+    <FileVersion>1.0.228</FileVersion>
+    <Version>1.0.228</Version>
   </PropertyGroup>
 
   <ItemGroup>

+ 82 - 0
server/Plugins/Admin.NET.Plugin.AiDOP/Manufacturing/Dto/ToolingLedgerDto.cs

@@ -0,0 +1,82 @@
+namespace Admin.NET.Plugin.AiDOP.Manufacturing.Dto;
+
+/// <summary>
+/// S6 模工具台账管理 列表查询入参(只读)。
+///
+/// 数据源:aidopdev.MoldToolList(模工具台账,证据 sql.txt: select * from MoldToolList)。
+/// 类型(lx) 含 模具 / 工装 / 检具,同表同页同源;类型下拉可筛选。
+/// MoldToolList 有 tenant_id 但 sql.txt 无 WHERE 过滤(旧系统全表查询),本查询亦不据 tenant_id 过滤;
+/// TenantId 仅为前端 withAidopTenantParams 注入的透传参数。
+/// </summary>
+public class ToolingLedgerListInput
+{
+    /// <summary>页码(从 1 开始)</summary>
+    public int Page { get; set; } = 1;
+
+    /// <summary>每页条数</summary>
+    public int PageSize { get; set; } = 10;
+
+    /// <summary>名称(MoldToolList.MoldName,模糊匹配)</summary>
+    public string? Name { get; set; }
+
+    /// <summary>工作组(MoldToolList.gnyymc,模糊匹配)</summary>
+    public string? WorkGroup { get; set; }
+
+    /// <summary>使用部门(MoldToolList.MoldUsingDepartment,模糊匹配)</summary>
+    public string? UsageDept { get; set; }
+
+    /// <summary>类型(MoldToolList.lx:模具 / 工装 / 检具,精确匹配,下拉选择)</summary>
+    public string? Type { get; set; }
+
+    /// <summary>模具类型编码(MoldToolList.MoldTypeCode,模糊匹配)</summary>
+    public string? MoldTypeCode { get; set; }
+
+    /// <summary>租户 ID(前端 withAidopTenantParams 注入;本查询不据其过滤)</summary>
+    public long? TenantId { get; set; }
+}
+
+/// <summary>
+/// S6 模工具台账管理 列表行(只读)。字段对齐前端列 prop(camelCase),源列见注释(MoldToolList / 字段配置图)。
+/// </summary>
+public class ToolingLedgerListRow
+{
+    /// <summary>主键 id(MoldToolList.id,子表 id)</summary>
+    public int Id { get; set; }
+
+    /// <summary>类型(MoldToolList.lx:模具 / 工装 / 检具)</summary>
+    public string? Type { get; set; }
+
+    /// <summary>名称(MoldToolList.MoldName)</summary>
+    public string? Name { get; set; }
+
+    /// <summary>供应商名(MoldToolList.gysmc)</summary>
+    public string? SupplierName { get; set; }
+
+    /// <summary>数量(MoldToolList.MoldCount)</summary>
+    public int? Qty { get; set; }
+
+    /// <summary>功能应用名称(MoldToolList.gnyymc)</summary>
+    public string? FunctionAppName { get; set; }
+
+    /// <summary>模具类型编码(MoldToolList.MoldTypeCode)</summary>
+    public string? MoldTypeCode { get; set; }
+
+    /// <summary>对应产品物料编码(MoldToolList.product_material_code)</summary>
+    public string? ProductMaterialCode { get; set; }
+
+    /// <summary>对应产品图纸号(MoldToolList.product_drawing_number)</summary>
+    public string? ProductDrawingNo { get; set; }
+
+    /// <summary>对应产品名称(MoldToolList.product_name)</summary>
+    public string? ProductName { get; set; }
+
+    /// <summary>对应工序(MoldToolList.process)</summary>
+    public string? Process { get; set; }
+}
+
+/// <summary>类型下拉选项(MoldToolList.lx distinct:模具 / 工装 / 检具)。</summary>
+public class ToolingLedgerTypeOption
+{
+    /// <summary>类型值(MoldToolList.lx)</summary>
+    public string? Val { get; set; }
+}

+ 113 - 0
server/Plugins/Admin.NET.Plugin.AiDOP/Manufacturing/ToolingLedgerService.cs

@@ -0,0 +1,113 @@
+using Admin.NET.Plugin.AiDOP.Manufacturing.Dto;
+
+namespace Admin.NET.Plugin.AiDOP.Manufacturing;
+
+/// <summary>
+/// S6 模工具台账管理 只读 list 服务。
+///
+/// 数据源:aidopdev.MoldToolList(模工具台账),忠实复刻证据 sql.txt(select * from MoldToolList),
+/// 列映射见字段配置图:类型=lx / 名称=MoldName / 供应商名=gysmc / 数量=MoldCount / 功能应用名称=gnyymc /
+/// 模具类型编码=MoldTypeCode / 对应产品物料编码=product_material_code / 图纸号=product_drawing_number /
+/// 产品名称=product_name / 工序=process。lx 含 模具 / 工装 / 检具(同表同页同源,类型下拉可筛选)。
+/// sql.txt 无 WHERE,本服务不按 tenant_id/Domain 过滤(与旧系统全表查询一致)。排序 id DESC。
+///
+/// 本服务仅 SELECT:无新增/编辑/删除/写入;MoldToolList 有 tenant_id 但不据其过滤(透传参数)。
+/// </summary>
+[ApiDescriptionSettings(Order = 320, Description = "模工具台账管理")]
+[Route("api/S6ToolingLedger")]
+[AllowAnonymous]
+[NonUnify]
+public class ToolingLedgerService : IDynamicApiController, ITransient
+{
+    private readonly ISqlSugarClient _db;
+
+    public ToolingLedgerService(ISqlSugarClient db)
+    {
+        _db = db;
+    }
+
+    /// <summary>
+    /// 模工具台账列表(只读分页查询)。
+    /// </summary>
+    [DisplayName("模工具台账列表")]
+    [HttpGet("list")]
+    public async Task<object> GetList([FromQuery] ToolingLedgerListInput input)
+    {
+        var page = input.Page <= 0 ? 1 : input.Page;
+        var pageSize = input.PageSize <= 0 ? 10 : input.PageSize;
+        var offset = (page - 1) * pageSize;
+
+        var where = new List<string> { "1=1" };
+        var pars = new List<SugarParameter>();
+
+        if (!string.IsNullOrWhiteSpace(input.Name))
+        {
+            where.Add("m.MoldName LIKE @Name");
+            pars.Add(new SugarParameter("@Name", $"%{input.Name.Trim()}%"));
+        }
+        if (!string.IsNullOrWhiteSpace(input.WorkGroup))
+        {
+            where.Add("m.gnyymc LIKE @WorkGroup");
+            pars.Add(new SugarParameter("@WorkGroup", $"%{input.WorkGroup.Trim()}%"));
+        }
+        if (!string.IsNullOrWhiteSpace(input.UsageDept))
+        {
+            where.Add("m.MoldUsingDepartment LIKE @UsageDept");
+            pars.Add(new SugarParameter("@UsageDept", $"%{input.UsageDept.Trim()}%"));
+        }
+        if (!string.IsNullOrWhiteSpace(input.Type))
+        {
+            where.Add("m.lx = @Type");
+            pars.Add(new SugarParameter("@Type", input.Type.Trim()));
+        }
+        if (!string.IsNullOrWhiteSpace(input.MoldTypeCode))
+        {
+            where.Add("m.MoldTypeCode LIKE @MoldTypeCode");
+            pars.Add(new SugarParameter("@MoldTypeCode", $"%{input.MoldTypeCode.Trim()}%"));
+        }
+
+        var whereSql = string.Join(" AND ", where);
+
+        var total = await _db.Ado.GetIntAsync($"SELECT COUNT(1) FROM MoldToolList m WHERE {whereSql}", pars);
+
+        var list = await _db.Ado.SqlQueryAsync<ToolingLedgerListRow>(
+            $"""
+            SELECT
+                m.id                    AS Id,
+                m.lx                    AS Type,
+                m.MoldName              AS Name,
+                m.gysmc                 AS SupplierName,
+                m.MoldCount             AS Qty,
+                m.gnyymc                AS FunctionAppName,
+                m.MoldTypeCode          AS MoldTypeCode,
+                m.product_material_code AS ProductMaterialCode,
+                m.product_drawing_number AS ProductDrawingNo,
+                m.product_name          AS ProductName,
+                m.process               AS Process
+            FROM MoldToolList m
+            WHERE {whereSql}
+            ORDER BY m.id DESC
+            LIMIT {pageSize} OFFSET {offset}
+            """,
+            pars);
+
+        return new { total, page, pageSize, list };
+    }
+
+    /// <summary>
+    /// 类型下拉选项(MoldToolList.lx distinct:模具 / 工装 / 检具,只读)。
+    /// </summary>
+    [DisplayName("模工具台账类型选项")]
+    [HttpGet("type-options")]
+    public async Task<object> GetTypeOptions()
+    {
+        var list = await _db.Ado.SqlQueryAsync<ToolingLedgerTypeOption>(
+            """
+            SELECT DISTINCT lx AS Val
+            FROM MoldToolList
+            WHERE IFNULL(lx,'') <> ''
+            ORDER BY lx
+            """);
+        return list;
+    }
+}