Parcourir la source

!885 生成代码增加绑定打印模版功能【已完成】【需测试】
Merge pull request !885 from IMaster/next

zuohuaijun il y a 2 ans
Parent
commit
4ece5a77c0

+ 14 - 0
Admin.NET/Admin.NET.Core/Entity/SysCodeGen.cs

@@ -16,6 +16,20 @@ namespace Admin.NET.Core;
 [SysTable]
 public class SysCodeGen : EntityBase
 {
+    /// <summary>
+    /// 支持打印类型
+    /// </summary>
+    [SugarColumn(ColumnDescription = "支持打印类型", Length = 32)]
+    [MaxLength(32)]
+    public string? PrintType { get; set; }
+
+    /// <summary>
+    /// 打印模版名称
+    /// </summary>
+    [SugarColumn(ColumnDescription = "打印模版名称", Length = 32)]
+    [MaxLength(32)]
+    public string? PrintName { get; set; }
+
     /// <summary>
     /// 作者姓名
     /// </summary>

+ 3 - 0
Admin.NET/Admin.NET.Core/SeedData/SysDictDataSeedData.cs

@@ -74,6 +74,9 @@ public class SysDictDataSeedData : ISqlSugarEntitySeedData<SysDictData>
             new SysDictData{ Id=1300000000603, DictTypeId=1300000000106, Value="部门", Code="301", OrderNo=102, Remark="部门", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00") },
             new SysDictData{ Id=1300000000604, DictTypeId=1300000000106, Value="区域", Code="401", OrderNo=103, Remark="区域", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00") },
             new SysDictData{ Id=1300000000605, DictTypeId=1300000000106, Value="组", Code="501", OrderNo=104, Remark="组", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00") },
+
+            new SysDictData{ Id=1300000000701, DictTypeId=1300000000107, Value="不需要", Code="off", OrderNo=100, Remark="不需要打印支持", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-12-04 00:00:00") },
+            new SysDictData{ Id=1300000000702, DictTypeId=1300000000107, Value="绑定打印模版", Code="custom", OrderNo=101, Remark="绑定打印模版", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-12-04 00:00:00") },
         };
     }
 }

+ 1 - 0
Admin.NET/Admin.NET.Core/SeedData/SysDictTypeSeedData.cs

@@ -28,6 +28,7 @@ public class SysDictTypeSeedData : ISqlSugarEntitySeedData<SysDictType>
             new SysDictType{ Id=1300000000104, Name="代码生成方式", Code="code_gen_create_type", OrderNo=103, Remark="代码生成方式", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysDictType{ Id=1300000000105, Name="代码生成基类", Code="code_gen_base_class", OrderNo=104, Remark="代码生成基类", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
             new SysDictType{ Id=1300000000106, Name="机构类型", Code="org_type", OrderNo=105, Remark="机构类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00") },
+            new SysDictType{ Id=1300000000107, Name="代码生成支持打印类型", Code="code_gen_print_type", OrderNo=106, Remark="代码生成支持打印类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-12-04 00:00:00") },
         };
     }
 }

+ 4 - 0
Admin.NET/Admin.NET.Core/Service/CodeGen/CustomViewEngine.cs

@@ -27,6 +27,10 @@ public class CustomViewEngine : ViewEngineModel
     /// </summary>
     public string ConfigId { get; set; } = SqlSugarConst.MainConfigId;
 
+    public string PrintType { get; set; }
+
+    public string PrintName { get; set; }
+
     public string AuthorName { get; set; }
 
     public string BusName { get; set; }

+ 10 - 0
Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/CodeGenInput.cs

@@ -14,6 +14,16 @@ namespace Admin.NET.Core.Service;
 /// </summary>
 public class CodeGenInput : BasePageInput
 {
+    /// <summary>
+    /// 支持打印类型
+    /// </summary>
+    public virtual string PrintType { get; set; }
+
+    /// <summary>
+    /// 打印模版名称
+    /// </summary>
+    public virtual string PrintName { get; set; }
+
     /// <summary>
     /// 作者姓名
     /// </summary>

+ 10 - 0
Admin.NET/Admin.NET.Core/Service/CodeGen/Dto/CodeGenOutput.cs

@@ -19,6 +19,16 @@ public class CodeGenOutput
     /// </summary>
     public long Id { get; set; }
 
+    /// <summary>
+    /// 支持打印类型
+    /// </summary>
+    public string PrintType { get; set; }
+
+    /// <summary>
+    /// 打印模版名称
+    /// </summary>
+    public string PrintName { get; set; }
+
     /// <summary>
     /// 作者姓名
     /// </summary>

+ 2 - 0
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs

@@ -329,6 +329,8 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         var data = new CustomViewEngine(_db)
         {
             ConfigId = input.ConfigId,
+            PrintType = input.PrintType,
+            PrintName = input.PrintName,
             AuthorName = input.AuthorName,
             BusName = input.BusName,
             NameSpace = input.NameSpace,

+ 37 - 4
Admin.NET/Admin.NET.Web.Entry/wwwroot/Template/index.vue.vm

@@ -160,8 +160,14 @@
         }
         }
         }
-        <el-table-column label="操作" width="140" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('@(@Model.LowerClassName):edit') || auth('@(@Model.LowerClassName):delete')">
-          <template #default="scope">
+        @if(@Model.PrintType == "custom"){
+        @:<el-table-column label="操作" width="200" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('@(@Model.LowerClassName):edit') || auth('@(@Model.LowerClassName):delete')">
+          @:<template #default="scope">
+            @:<el-button icon="ele-Printer" size="small" text="" type="primary" @@click="openPrint@(@Model.ClassName)(scope.row)" v-auth="'@(@Model.LowerClassName):print'"> 打印 </el-button>
+        }else{
+        @:<el-table-column label="操作" width="140" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('@(@Model.LowerClassName):edit') || auth('@(@Model.LowerClassName):delete')">
+          @:<template #default="scope">
+        }
             <el-button icon="ele-Edit" size="small" text="" type="primary" @@click="openEdit@(@Model.ClassName)(scope.row)" v-auth="'@(@Model.LowerClassName):edit'"> 编辑 </el-button>
             <el-button icon="ele-Delete" size="small" text="" type="primary" @@click="del@(@Model.ClassName)(scope.row)" v-auth="'@(@Model.LowerClassName):delete'"> 删除 </el-button>
           </template>
@@ -178,6 +184,10 @@
 				@@current-change="handleCurrentChange"
 				layout="total, sizes, prev, pager, next, jumper"
 	/>
+      <printDialog
+        ref="printDialogRef"
+        :title="print@(@Model.ClassName)Title"
+        @@reloadTable="handleQuery" />
       <editDialog
         ref="editDialogRef"
         :title="edit@(@Model.ClassName)Title"
@@ -195,8 +205,16 @@
   @:import { codeToName, getConstType } from "/@@/utils/constHelper";
   } 
   import { getDictDataItem as di, getDictDataList as dl } from '/@@/utils/dict-utils';
-  //import { formatDate } from '/@@/utils/formatTime';
+  import { formatDate } from '/@@/utils/formatTime';
+
+  @if(@Model.PrintType == "custom"){
+  @:// 推荐设置操作 width 为 200
+  @:import { hiprint } from 'vue-plugin-hiprint';
+  @:import { SysPrintApi } from '/@@/api-services/api';
+  @:import { SysPrint } from '/@@/api-services/models';
+  }
 
+  import printDialog from '/@@/views/system/print/component/hiprint/preview.vue'
   import editDialog from '/@@/views/main/@(@Model.LowerClassName)/component/editDialog.vue'
   import { page@(@Model.ClassName), delete@(@Model.ClassName) } from '/@@/api/main/@(@Model.LowerClassName)';
   @foreach (var column in Model.QueryWhetherList){
@@ -224,6 +242,7 @@
   }else {
   @:const showAdvanceQueryUI = ref(true);
   }
+  const printDialogRef = ref();
   const editDialogRef = ref();
   const loading = ref(false);
   const tableData = ref<any>([]);
@@ -233,6 +252,8 @@
     pageSize: 10,
     total: 0,
   });
+
+  const print@(@Model.ClassName)Title = ref("");
   const edit@(@Model.ClassName)Title = ref("");
 
   // 改变高级查询的控件显示状态
@@ -261,6 +282,18 @@
     editDialogRef.value.openDialog({});
   };
 
+  // 打开打印页面
+  const openPrint@(@Model.ClassName) = async (row: any) => {
+    print@(@Model.ClassName)Title.value = '打印@(@Model.BusName)';
+    @if(@Model.PrintType == "custom"){
+    @:var res = await getAPI(SysPrintApi).apiSysPrintPrintNameGet('@Model.PrintName');
+	  @:var printTemplate = res.data.result as SysPrint;
+    @:var template = JSON.parse(printTemplate.template);
+    @:row['printDate'] = formatDate(new Date(), 'YYYY-mm-dd HH:MM:SS')
+    @:printDialogRef.value.showDialog(new hiprint.PrintTemplate({template: template}), row, template.panels[0].width);
+    }
+  }
+  
   // 打开编辑页面
   const openEdit@(@Model.ClassName) = (row: any) => {
     edit@(@Model.ClassName)Title.value = '编辑@(@Model.BusName)';
@@ -302,7 +335,7 @@
     @:@LowerFirstLetter(@column.FkEntityName)@(@column.PropertyName)DropdownList.value = list.data.result ?? [];
   @:};
   @:get@(@column.FkEntityName)@(@column.PropertyName)DropdownList();
-@:
+  @:
   }
 }
   handleQuery();

+ 14 - 0
Web/src/api-services/models/update-code-gen-input.ts

@@ -64,6 +64,20 @@ export interface UpdateCodeGenInput {
      */
     descStr?: string | null;
 
+    /**
+     * 打印模版名称
+     * @type {number}
+     * @memberof UpdateCodeGenInput
+     */
+    printName?: string | null;
+
+    /**
+     * 支持打印类型
+     * @type {string}
+     * @memberof UpdateCodeGenInput
+     */
+    printType?: string | null;
+    
     /**
      * 作者姓名
      *

+ 24 - 2
Web/src/views/system/codeGen/component/editCodeGenDialog.vue

@@ -92,6 +92,20 @@
 							</el-select>
 						</el-form-item>
 					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="支持打印" prop="printType">
+							<el-select v-model="state.ruleForm.printType" filterable class="w100">
+								<el-option v-for="item in state.printTypeList" :key="item.value" :label="item.value" :value="item.code" />
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="state.ruleForm.printType == 'custom'">
+						<el-form-item label="打印模版" prop="printName">
+							<el-select v-model="state.ruleForm.printName" filterable class="w100">
+								<el-option v-for="item in state.printList" :key="item.id" :label="item.name" :value="item.name" />
+							</el-select>
+						</el-form-item>
+					</el-col>
 				</el-row>
 			</el-form>
 			<template #footer>
@@ -108,8 +122,8 @@
 import { onMounted, reactive, ref } from 'vue';
 
 import { getAPI } from '/@/utils/axios-utils';
-import { SysCodeGenApi, SysDictDataApi, SysMenuApi } from '/@/api-services/api';
-import { UpdateCodeGenInput, AddCodeGenInput, SysMenu } from '/@/api-services/models';
+import { SysCodeGenApi, SysDictDataApi, SysMenuApi, SysPrintApi } from '/@/api-services/api';
+import { UpdateCodeGenInput, AddCodeGenInput, SysMenu, SysPrint } from '/@/api-services/models';
 
 const props = defineProps({
 	title: String,
@@ -124,6 +138,8 @@ const state = reactive({
 	dbData: [] as any,
 	menuData: [] as Array<SysMenu>,
 	codeGenTypeList: [] as any,
+	printTypeList: [] as any,
+	printList: [] as Array<SysPrint>,
 });
 
 onMounted(async () => {
@@ -135,6 +151,12 @@ onMounted(async () => {
 
 	let resDicData = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('code_gen_create_type');
 	state.codeGenTypeList = resDicData.data.result;
+
+	let printTypeResDicData = await getAPI(SysDictDataApi).apiSysDictDataDataListCodeGet('code_gen_print_type');
+	state.printTypeList = printTypeResDicData.data.result;
+
+	let resPrintIdData = await getAPI(SysPrintApi).apiSysPrintPagePost();
+	state.printList = resPrintIdData.data.result?.items ?? [];
 });
 
 // db改变