Преглед изворни кода

!1440 优化“打印模板功能"
Merge pull request !1440 from koy0755/优化打印模板工具

zuohuaijun пре 1 година
родитељ
комит
41b88f95ae

+ 8 - 2
Admin.NET/Admin.NET.Core/Entity/SysPrint.cs

@@ -1,4 +1,4 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
 //
 // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
 //
@@ -65,5 +65,11 @@ public partial class SysPrint : EntityTenant
     /// </summary>
     [SugarColumn(ColumnDescription = "备注", Length = 128)]
     [MaxLength(128)]
-    public string? Remark { get; set; }
+    public string? Remark { get; set; }
+
+    /// <summary>
+    /// 打印预览测试数据
+    /// </summary>
+    [SugarColumn(ColumnDescription = "打印预览测试数据", ColumnDataType = StaticConfig.CodeFirst_BigString)]
+    public string ? PrintDataDemo { get; set; }
 }

+ 1 - 1
Admin.NET/Admin.NET.Web.Entry/wwwroot/template/index.vue.vm

@@ -215,6 +215,7 @@
   import { ref } from "vue";
   import { ElMessageBox, ElMessage } from "element-plus";
   import { auth } from '/@@/utils/authFunction';
+  import { getAPI } from '/@@/utils/axios-utils';
 
   @if(@Model.TableField.Any(x=>x.EffectType == "ConstSelector")){
   @:import { codeToName, getConstType } from "/@@/utils/constHelper";
@@ -245,7 +246,6 @@
   }
   }
   @if(@Model.QueryWhetherList.Any(x=>x.EffectType == "EnumSelector")){
-	@:import { getAPI } from '/@@/utils/axios-utils';
 	@:import { SysEnumApi } from '/@@/api-services/api';
   @:import commonFunction from '/@@/utils/commonFunction';
 	}

+ 8 - 8
Web/src/api-services/apis/sys-auth-api.ts

@@ -31,7 +31,7 @@ import { LoginPhoneInput } from '../models';
 export const SysAuthApiAxiosParamCreator = function (configuration?: Configuration) {
     return {
         /**
-         * 
+         * Swagger登录检查
          * @summary Swagger登录检查 🔖
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
@@ -74,7 +74,7 @@ export const SysAuthApiAxiosParamCreator = function (configuration?: Configurati
             };
         },
         /**
-         * 
+         * Swagger登录提交
          * @summary Swagger登录提交 🔖
          * @param {string} [userName] 
          * @param {string} [password] 
@@ -473,7 +473,7 @@ export const SysAuthApiAxiosParamCreator = function (configuration?: Configurati
 export const SysAuthApiFp = function(configuration?: Configuration) {
     return {
         /**
-         * 
+         * Swagger登录检查
          * @summary Swagger登录检查 🔖
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
@@ -486,7 +486,7 @@ export const SysAuthApiFp = function(configuration?: Configuration) {
             };
         },
         /**
-         * 
+         * Swagger登录提交
          * @summary Swagger登录提交 🔖
          * @param {string} [userName] 
          * @param {string} [password] 
@@ -605,7 +605,7 @@ export const SysAuthApiFp = function(configuration?: Configuration) {
 export const SysAuthApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
     return {
         /**
-         * 
+         * Swagger登录检查
          * @summary Swagger登录检查 🔖
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
@@ -614,7 +614,7 @@ export const SysAuthApiFactory = function (configuration?: Configuration, basePa
             return SysAuthApiFp(configuration).apiSwaggerCheckUrlPost(options).then((request) => request(axios, basePath));
         },
         /**
-         * 
+         * Swagger登录提交
          * @summary Swagger登录提交 🔖
          * @param {string} [userName] 
          * @param {string} [password] 
@@ -702,7 +702,7 @@ export const SysAuthApiFactory = function (configuration?: Configuration, basePa
  */
 export class SysAuthApi extends BaseAPI {
     /**
-     * 
+     * Swagger登录检查
      * @summary Swagger登录检查 🔖
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
@@ -712,7 +712,7 @@ export class SysAuthApi extends BaseAPI {
         return SysAuthApiFp(this.configuration).apiSwaggerCheckUrlPost(options).then((request) => request(this.axios, this.basePath));
     }
     /**
-     * 
+     * Swagger登录提交
      * @summary Swagger登录提交 🔖
      * @param {string} [userName] 
      * @param {string} [password] 

+ 8 - 8
Web/src/api-services/apis/sys-database-api.ts

@@ -75,7 +75,7 @@ export const SysDatabaseApiAxiosParamCreator = function (configuration?: Configu
             localVarUrlObj.search = (new URLSearchParams(query)).toString();
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof body !== "string") || (localVarRequestOptions.headers && localVarRequestOptions.headers['Content-Type'] === 'application/json');
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
             localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
 
             return {
@@ -123,7 +123,7 @@ export const SysDatabaseApiAxiosParamCreator = function (configuration?: Configu
             localVarUrlObj.search = (new URLSearchParams(query)).toString();
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof body !== "string") || (localVarRequestOptions.headers && localVarRequestOptions.headers['Content-Type'] === 'application/json');
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
             localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
 
             return {
@@ -269,7 +269,7 @@ export const SysDatabaseApiAxiosParamCreator = function (configuration?: Configu
             localVarUrlObj.search = (new URLSearchParams(query)).toString();
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof body !== "string") || (localVarRequestOptions.headers && localVarRequestOptions.headers['Content-Type'] === 'application/json');
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
             localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
 
             return {
@@ -317,7 +317,7 @@ export const SysDatabaseApiAxiosParamCreator = function (configuration?: Configu
             localVarUrlObj.search = (new URLSearchParams(query)).toString();
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof body !== "string") || (localVarRequestOptions.headers && localVarRequestOptions.headers['Content-Type'] === 'application/json');
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
             localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
 
             return {
@@ -414,7 +414,7 @@ export const SysDatabaseApiAxiosParamCreator = function (configuration?: Configu
             localVarUrlObj.search = (new URLSearchParams(query)).toString();
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof body !== "string") || (localVarRequestOptions.headers && localVarRequestOptions.headers['Content-Type'] === 'application/json');
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
             localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
 
             return {
@@ -462,7 +462,7 @@ export const SysDatabaseApiAxiosParamCreator = function (configuration?: Configu
             localVarUrlObj.search = (new URLSearchParams(query)).toString();
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof body !== "string") || (localVarRequestOptions.headers && localVarRequestOptions.headers['Content-Type'] === 'application/json');
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
             localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
 
             return {
@@ -602,7 +602,7 @@ export const SysDatabaseApiAxiosParamCreator = function (configuration?: Configu
             localVarUrlObj.search = (new URLSearchParams(query)).toString();
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof body !== "string") || (localVarRequestOptions.headers && localVarRequestOptions.headers['Content-Type'] === 'application/json');
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
             localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
 
             return {
@@ -650,7 +650,7 @@ export const SysDatabaseApiAxiosParamCreator = function (configuration?: Configu
             localVarUrlObj.search = (new URLSearchParams(query)).toString();
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof body !== "string") || (localVarRequestOptions.headers && localVarRequestOptions.headers['Content-Type'] === 'application/json');
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
             localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
 
             return {

+ 280 - 0
Web/src/api-services/apis/sys-wx-open-api.ts

@@ -20,10 +20,12 @@ import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } fr
 import { AddSubscribeMessageTemplateInput } from '../models';
 import { AdminResultGenerateQRImageOutput } from '../models';
 import { AdminResultObject } from '../models';
+import { AdminResultSysFile } from '../models';
 import { AdminResultWxOpenIdOutput } from '../models';
 import { AdminResultWxPhoneOutput } from '../models';
 import { GenerateQRImageInput } from '../models';
 import { SendSubscribeMessageInput } from '../models';
+import { SetNickNameInput } from '../models';
 import { WxOpenIdLoginInput } from '../models';
 /**
  * SysWxOpenApi - axios parameter creator
@@ -218,6 +220,170 @@ export const SysWxOpenApiAxiosParamCreator = function (configuration?: Configura
                 options: localVarRequestOptions,
             };
         },
+        /**
+         * 
+         * @summary 设置小程序用户昵称
+         * @param {SetNickNameInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        apiSysWxOpenSetNickNamePost: async (body?: SetNickNameInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysWxOpen/setNickName`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+            // authentication Bearer required
+            // http bearer authentication required
+            if (configuration && configuration.accessToken) {
+                const accessToken = typeof configuration.accessToken === 'function'
+                    ? await configuration.accessToken()
+                    : await configuration.accessToken;
+                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
+            }
+
+            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
+
+            const query = new URLSearchParams(localVarUrlObj.search);
+            for (const key in localVarQueryParameter) {
+                query.set(key, localVarQueryParameter[key]);
+            }
+            for (const key in options.params) {
+                query.set(key, options.params[key]);
+            }
+            localVarUrlObj.search = (new URLSearchParams(query)).toString();
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
+            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
+
+            return {
+                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @summary 上传小程序头像
+         * @param {string} [openId] 
+         * @param {Blob} [file] 
+         * @param {string} [fileType] 
+         * @param {string} [path] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        apiSysWxOpenUploadAvatarPostForm: async (openId?: string, file?: Blob, fileType?: string, path?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysWxOpen/uploadAvatar`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+            const localVarFormParams = new FormData();
+
+            // authentication Bearer required
+            // http bearer authentication required
+            if (configuration && configuration.accessToken) {
+                const accessToken = typeof configuration.accessToken === 'function'
+                    ? await configuration.accessToken()
+                    : await configuration.accessToken;
+                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
+            }
+
+
+            if (openId !== undefined) { 
+                localVarFormParams.append('OpenId', openId as any);
+            }
+
+            if (file !== undefined) { 
+                localVarFormParams.append('File', file as any);
+            }
+
+            if (fileType !== undefined) { 
+                localVarFormParams.append('FileType', fileType as any);
+            }
+
+            if (path !== undefined) { 
+                localVarFormParams.append('Path', path as any);
+            }
+
+            localVarHeaderParameter['Content-Type'] = 'multipart/form-data';
+            const query = new URLSearchParams(localVarUrlObj.search);
+            for (const key in localVarQueryParameter) {
+                query.set(key, localVarQueryParameter[key]);
+            }
+            for (const key in options.params) {
+                query.set(key, options.params[key]);
+            }
+            localVarUrlObj.search = (new URLSearchParams(query)).toString();
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            localVarRequestOptions.data = localVarFormParams;
+
+            return {
+                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @summary 获取小程序用户信息
+         * @param {string} openid 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        apiSysWxOpenUserInfoOpenidGet: async (openid: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'openid' is not null or undefined
+            if (openid === null || openid === undefined) {
+                throw new RequiredError('openid','Required parameter openid was null or undefined when calling apiSysWxOpenUserInfoOpenidGet.');
+            }
+            const localVarPath = `/api/sysWxOpen/userInfo/{openid}`
+                .replace(`{${"openid"}}`, encodeURIComponent(String(openid)));
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+            // authentication Bearer required
+            // http bearer authentication required
+            if (configuration && configuration.accessToken) {
+                const accessToken = typeof configuration.accessToken === 'function'
+                    ? await configuration.accessToken()
+                    : await configuration.accessToken;
+                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
+            }
+
+            const query = new URLSearchParams(localVarUrlObj.search);
+            for (const key in localVarQueryParameter) {
+                query.set(key, localVarQueryParameter[key]);
+            }
+            for (const key in options.params) {
+                query.set(key, options.params[key]);
+            }
+            localVarUrlObj.search = (new URLSearchParams(query)).toString();
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+            return {
+                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
+                options: localVarRequestOptions,
+            };
+        },
         /**
          * 
          * @summary 获取微信用户OpenId 🔖
@@ -443,6 +609,51 @@ export const SysWxOpenApiFp = function(configuration?: Configuration) {
                 return axios.request(axiosRequestArgs);
             };
         },
+        /**
+         * 
+         * @summary 设置小程序用户昵称
+         * @param {SetNickNameInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysWxOpenSetNickNamePost(body?: SetNickNameInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
+            const localVarAxiosArgs = await SysWxOpenApiAxiosParamCreator(configuration).apiSysWxOpenSetNickNamePost(body, options);
+            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
+                return axios.request(axiosRequestArgs);
+            };
+        },
+        /**
+         * 
+         * @summary 上传小程序头像
+         * @param {string} [openId] 
+         * @param {Blob} [file] 
+         * @param {string} [fileType] 
+         * @param {string} [path] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysWxOpenUploadAvatarPostForm(openId?: string, file?: Blob, fileType?: string, path?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysFile>>> {
+            const localVarAxiosArgs = await SysWxOpenApiAxiosParamCreator(configuration).apiSysWxOpenUploadAvatarPostForm(openId, file, fileType, path, options);
+            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
+                return axios.request(axiosRequestArgs);
+            };
+        },
+        /**
+         * 
+         * @summary 获取小程序用户信息
+         * @param {string} openid 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysWxOpenUserInfoOpenidGet(openid: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultObject>>> {
+            const localVarAxiosArgs = await SysWxOpenApiAxiosParamCreator(configuration).apiSysWxOpenUserInfoOpenidGet(openid, options);
+            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
+                return axios.request(axiosRequestArgs);
+            };
+        },
         /**
          * 
          * @summary 获取微信用户OpenId 🔖
@@ -534,6 +745,39 @@ export const SysWxOpenApiFactory = function (configuration?: Configuration, base
         async apiSysWxOpenSendSubscribeMessagePost(body?: SendSubscribeMessageInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
             return SysWxOpenApiFp(configuration).apiSysWxOpenSendSubscribeMessagePost(body, options).then((request) => request(axios, basePath));
         },
+        /**
+         * 
+         * @summary 设置小程序用户昵称
+         * @param {SetNickNameInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysWxOpenSetNickNamePost(body?: SetNickNameInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
+            return SysWxOpenApiFp(configuration).apiSysWxOpenSetNickNamePost(body, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @summary 上传小程序头像
+         * @param {string} [openId] 
+         * @param {Blob} [file] 
+         * @param {string} [fileType] 
+         * @param {string} [path] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysWxOpenUploadAvatarPostForm(openId?: string, file?: Blob, fileType?: string, path?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysFile>> {
+            return SysWxOpenApiFp(configuration).apiSysWxOpenUploadAvatarPostForm(openId, file, fileType, path, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @summary 获取小程序用户信息
+         * @param {string} openid 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysWxOpenUserInfoOpenidGet(openid: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
+            return SysWxOpenApiFp(configuration).apiSysWxOpenUserInfoOpenidGet(openid, options).then((request) => request(axios, basePath));
+        },
         /**
          * 
          * @summary 获取微信用户OpenId 🔖
@@ -618,6 +862,42 @@ export class SysWxOpenApi extends BaseAPI {
     public async apiSysWxOpenSendSubscribeMessagePost(body?: SendSubscribeMessageInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
         return SysWxOpenApiFp(this.configuration).apiSysWxOpenSendSubscribeMessagePost(body, options).then((request) => request(this.axios, this.basePath));
     }
+    /**
+     * 
+     * @summary 设置小程序用户昵称
+     * @param {SetNickNameInput} [body] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof SysWxOpenApi
+     */
+    public async apiSysWxOpenSetNickNamePost(body?: SetNickNameInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
+        return SysWxOpenApiFp(this.configuration).apiSysWxOpenSetNickNamePost(body, options).then((request) => request(this.axios, this.basePath));
+    }
+    /**
+     * 
+     * @summary 上传小程序头像
+     * @param {string} [openId] 
+     * @param {Blob} [file] 
+     * @param {string} [fileType] 
+     * @param {string} [path] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof SysWxOpenApi
+     */
+    public async apiSysWxOpenUploadAvatarPostForm(openId?: string, file?: Blob, fileType?: string, path?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultSysFile>> {
+        return SysWxOpenApiFp(this.configuration).apiSysWxOpenUploadAvatarPostForm(openId, file, fileType, path, options).then((request) => request(this.axios, this.basePath));
+    }
+    /**
+     * 
+     * @summary 获取小程序用户信息
+     * @param {string} openid 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof SysWxOpenApi
+     */
+    public async apiSysWxOpenUserInfoOpenidGet(openid: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
+        return SysWxOpenApiFp(this.configuration).apiSysWxOpenUserInfoOpenidGet(openid, options).then((request) => request(this.axios, this.basePath));
+    }
     /**
      * 
      * @summary 获取微信用户OpenId 🔖

+ 8 - 0
Web/src/api-services/models/add-print-input.ts

@@ -146,6 +146,14 @@ export interface AddPrintInput {
      */
     remark?: string | null;
 
+    /**
+     * 打印预览测试数据
+     *
+     * @type {string}
+     * @memberof AddPrintInput
+     */
+    printDataDemo?: string | null;
+
     /**
      * 名称
      *

+ 8 - 0
Web/src/api-services/models/create-seed-data-input.ts

@@ -72,4 +72,12 @@ export interface CreateSeedDataInput {
      * @example Web.Application
      */
     suffix?: string | null;
+
+    /**
+     * 过滤已有数据
+     *
+     * @type {boolean}
+     * @memberof CreateSeedDataInput
+     */
+    filterExistingData?: boolean;
 }

+ 2 - 0
Web/src/api-services/models/index.ts

@@ -281,6 +281,7 @@ export * from './search';
 export * from './security-rule-set';
 export * from './send-subscribe-message-input';
 export * from './serialization-format';
+export * from './set-nick-name-input';
 export * from './signature-input';
 export * from './sm-key-pair-output';
 export * from './sms-verify-code-input';
@@ -350,6 +351,7 @@ export * from './sys-user-ext-org';
 export * from './sys-wechat-pay';
 export * from './sys-wechat-refund';
 export * from './sys-wechat-user';
+export * from './sys-wx-open-upload-avatar-body';
 export * from './table-output';
 export * from './tenant-id-input';
 export * from './tenant-input';

+ 38 - 0
Web/src/api-services/models/set-nick-name-input.ts

@@ -0,0 +1,38 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+
+ /**
+ * 
+ *
+ * @export
+ * @interface SetNickNameInput
+ */
+export interface SetNickNameInput {
+
+    /**
+     * 小程序用户身份标识
+     *
+     * @type {string}
+     * @memberof SetNickNameInput
+     */
+    openId: string;
+
+    /**
+     * 昵称
+     *
+     * @type {string}
+     * @memberof SetNickNameInput
+     */
+    nickName: string;
+}

+ 8 - 0
Web/src/api-services/models/sys-print.ts

@@ -153,4 +153,12 @@ export interface SysPrint {
      * @memberof SysPrint
      */
     remark?: string | null;
+
+    /**
+     * 打印预览测试数据
+     *
+     * @type {string}
+     * @memberof SysPrint
+     */
+    printDataDemo?: string | null;
 }

+ 54 - 0
Web/src/api-services/models/sys-wx-open-upload-avatar-body.ts

@@ -0,0 +1,54 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * Admin.NET 通用权限开发平台
+ * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
+ *
+ * OpenAPI spec version: 1.0.0
+ * 
+ *
+ * NOTE: This class is auto generated by the swagger code generator program.
+ * https://github.com/swagger-api/swagger-codegen.git
+ * Do not edit the class manually.
+ */
+
+ /**
+ * 
+ *
+ * @export
+ * @interface SysWxOpenUploadAvatarBody
+ */
+export interface SysWxOpenUploadAvatarBody {
+
+    /**
+     * 小程序用户身份标识
+     *
+     * @type {string}
+     * @memberof SysWxOpenUploadAvatarBody
+     */
+    openId: string;
+
+    /**
+     * 文件
+     *
+     * @type {Blob}
+     * @memberof SysWxOpenUploadAvatarBody
+     */
+    file: Blob;
+
+    /**
+     * 文件类型
+     *
+     * @type {string}
+     * @memberof SysWxOpenUploadAvatarBody
+     */
+    fileType?: string;
+
+    /**
+     * 文件路径
+     *
+     * @type {string}
+     * @memberof SysWxOpenUploadAvatarBody
+     */
+    path?: string;
+}

+ 8 - 0
Web/src/api-services/models/update-print-input.ts

@@ -146,6 +146,14 @@ export interface UpdatePrintInput {
      */
     remark?: string | null;
 
+    /**
+     * 打印预览测试数据
+     *
+     * @type {string}
+     * @memberof UpdatePrintInput
+     */
+    printDataDemo?: string | null;
+
     /**
      * 名称
      *

+ 3 - 1
Web/src/views/system/print/component/editPrint.vue

@@ -118,7 +118,6 @@ const openDialog = (row: any) => {
 	}
 	state.isShowDialog = true;
 	ruleFormRef.value?.resetFields();
-
 	nextTick(() => {
 		loadTemplate();
 	});
@@ -127,6 +126,7 @@ const openDialog = (row: any) => {
 // 加载模板
 const loadTemplate = () => {
 	hiprintDesignRef.value?.hiprintTemplate.clear();
+	hiprintDesignRef.value?.setPrintDataDemo(state.ruleForm.printDataDemo);
 	if (JSON.stringify(state.ruleForm) !== '{}') {
 		hiprintDesignRef.value?.hiprintTemplate.update(JSON.parse(state.ruleForm.template));
 		hiprintDesignRef.value?.initPaper();
@@ -156,6 +156,8 @@ const templateSubmit = async () => {
 	let templateJson=hiprintDesignRef.value?.hiprintTemplate.getJson();
 	templateJson.panels[0].index=hiprintDesignRef.value?.mode;
 	state.ruleForm.template = JSON.stringify(templateJson);
+	const printDataDemo = hiprintDesignRef.value?.printDataDemo;
+	state.ruleForm.printDataDemo = printDataDemo;
 	if (state.ruleForm.id != undefined && state.ruleForm.id > 0) {
 		await getAPI(SysPrintApi).apiSysPrintUpdatePost(state.ruleForm);
 	} else {

+ 47 - 7
Web/src/views/system/print/component/hiprint/index.vue

@@ -82,11 +82,19 @@
 			</el-card>
 		</el-col>
 		<el-col :span="6" class="params_setting_container">
-			<el-card shadow="never" :body-style="{ padding: '0px' }">
-				<el-row class="hinnn-layout-sider">
-					<div id="PrintElementOptionSetting"></div>
-				</el-row>
-			</el-card>
+			<el-tabs type="border-card">
+				<el-tab-pane label="属性" style="height: auto">
+					<el-card shadow="never" :body-style="{ padding: '0px' }">
+						<el-row class="hinnn-layout-sider">
+							<div id="PrintElementOptionSetting"></div>
+						</el-row>
+					</el-card>
+				</el-tab-pane>
+				<el-tab-pane label="测试数据">
+					<el-input v-model="printDataDemo" type="textarea" style="width: 100%" rows="30" placeholder="对整个文档的完整测试数据"></el-input>
+					<el-button @click="formatPrintDataDemo()" style="margin-top: 10px; width:100%" type="success">格式化字符串</el-button>
+				</el-tab-pane>
+			</el-tabs>
 		</el-col>
 	</el-row>
 
@@ -107,7 +115,7 @@ import 'vue-json-pretty/lib/styles.css';
 import { hiprint } from 'vue-plugin-hiprint';
 import providers from './providers';
 import PrintPreview from './preview.vue';
-import printData from './print-data';
+import printDataDefault from './print-data';
 
 var props = defineProps({
 	modeIndex: {
@@ -119,6 +127,7 @@ var props = defineProps({
 let hiprintTemplate = ref();
 let mode = ref(0); // 模板选择
 
+const printDataDemo = ref("");
 const preViewRef = ref();
 const state = reactive({
 	modeList: [] as any,
@@ -154,6 +163,14 @@ const state = reactive({
 			width: 250,
 			height: 175.6,
 		},
+		"4R": {
+			width: 152,
+			height: 102,
+		},
+		"6R": {
+			width: 203,
+			height: 152,
+		},
 	},
 	scaleValue: 1,
 	scaleMax: 5,
@@ -304,11 +321,20 @@ const otherPaper = () => {
 // 预览
 const preView = () => {
 	let { width } = state.curPaper;
+	let printData = null;
+	try {printData = JSON.parse(printDataDemo.value);}
+	catch(e){
+		console.log("出错:" + e)
+	}
+	if (printData == null) {
+		printData = printDataDefault;
+	}
 	preViewRef.value.showDialog(hiprintTemplate.value, printData, width);
 };
 // 直接打印
 const print = () => {
 	console.log('直接打印');
+	preView();
 };
 
 // 查看模板JSON
@@ -339,8 +365,22 @@ const initPaper = () => {
 	hiprintTemplate.value.setPaper(width, height); // 设置纸张大小
 };
 
+// 设置预览测试数据
+const setPrintDataDemo = (strData: string|null|undefined) => {
+	printDataDemo.value = strData as string;
+}
+
+// 格式化打印测试数据
+const formatPrintDataDemo = () => {
+	try{
+		const obj = JSON.parse(printDataDemo.value);
+		printDataDemo.value = JSON.stringify(obj, null, 2);
+	} catch (e) {
+		ElMessageBox.alert("出错:" + e);
+	}
+}
 // 导出对象
-defineExpose({ hiprintTemplate, initPaper, mode });
+defineExpose({ hiprintTemplate, printDataDemo, setPrintDataDemo, initPaper, mode });
 </script>
 
 <style lang="scss" scoped>