丰富redis接口
example/ExampleApeart.Application.Contracts/usermodels/UserGradeDto.cs
diff --git a/example/ExampleApeart.Application.Contracts/usermodels/UserGradeDto.cs b/example/ExampleApeart.Application.Contracts/usermodels/UserGradeDto.cs
index 6b754cc..70a9252 100644
--- a/example/ExampleApeart.Application.Contracts/usermodels/UserGradeDto.cs
+++ b/example/ExampleApeart.Application.Contracts/usermodels/UserGradeDto.cs
@@ -91,6 +91,7 @@ namespace ExampleApeart.usermodels
///用户绑定角色 解绑的直接删除数据
///</summary>
[Description("用户绑定角色 解绑的直接删除数据")]
+ [PasteBatch("批量禁用","func_batch_disable_usergrade(this);")]
public class UserGradeListDto : EntityDto<int>
{
///<summary>
example/ExampleApeart.Application/usermodels/RoleInfoAppService.cs
diff --git a/example/ExampleApeart.Application/usermodels/RoleInfoAppService.cs b/example/ExampleApeart.Application/usermodels/RoleInfoAppService.cs
index ab81e7a..de8fed6 100644
--- a/example/ExampleApeart.Application/usermodels/RoleInfoAppService.cs
+++ b/example/ExampleApeart.Application/usermodels/RoleInfoAppService.cs
@@ -7,6 +7,7 @@ using PasteApeart;
using PasteApeart.Application.Contracts;
using PasteApeart.Handler;
using PasteApeart.Handler.Extensions;
+using PasteApeart.Handler.Level;
using PasteApeart.Helper;
using System.Linq.Dynamic.Core;
example/ExampleApeart.Handler/SerilogCustomHandler.cs
diff --git a/example/ExampleApeart.Handler/SerilogCustomHandler.cs b/example/ExampleApeart.Handler/SerilogCustomHandler.cs
index eee13dd..ed2cf8d 100644
--- a/example/ExampleApeart.Handler/SerilogCustomHandler.cs
+++ b/example/ExampleApeart.Handler/SerilogCustomHandler.cs
@@ -1,5 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using PasteApeart;
+using PasteApeart.Handler;
using Serilog.Core;
using Serilog.Events;
example/ExampleApeart.HttpApi.Host/ExampleApeart.Application.xml
diff --git a/example/ExampleApeart.HttpApi.Host/ExampleApeart.Application.xml b/example/ExampleApeart.HttpApi.Host/ExampleApeart.Application.xml
index 409f8e4..fca88b9 100644
--- a/example/ExampleApeart.HttpApi.Host/ExampleApeart.Application.xml
+++ b/example/ExampleApeart.HttpApi.Host/ExampleApeart.Application.xml
@@ -90,7 +90,7 @@
</summary>
</member>
- <member name="M:ExampleApeart.Application.ExampleApeartDefaultService.#ctor(PasteApeart.Application.IPasteDefaultHelper,PasteApeart.IChannelHelper,ExampleApeart.EntityFrameworkCore.IExampleApeartDbContext)">
+ <member name="M:ExampleApeart.Application.ExampleApeartDefaultService.#ctor(PasteApeart.Application.IPasteDefaultHelper,PasteApeart.Handler.IChannelHelper,ExampleApeart.EntityFrameworkCore.IExampleApeartDbContext)">
<summary>
</summary>
example/ExampleApeart.HttpApi.Host/ExampleApeart.HttpApi.Host.xml
diff --git a/example/ExampleApeart.HttpApi.Host/ExampleApeart.HttpApi.Host.xml b/example/ExampleApeart.HttpApi.Host/ExampleApeart.HttpApi.Host.xml
index 7c70fd4..4a8a077 100644
--- a/example/ExampleApeart.HttpApi.Host/ExampleApeart.HttpApi.Host.xml
+++ b/example/ExampleApeart.HttpApi.Host/ExampleApeart.HttpApi.Host.xml
@@ -444,7 +444,7 @@
系统初始化
</summary>
</member>
- <member name="M:ExampleApeart.StartHostedService.#ctor(System.IServiceProvider,Microsoft.Extensions.Options.IOptions{PasteApeart.Application.Contracts.RabbitConfig},PasteApeart.Handler.rabbit.IRabbitMultiConsumerHandler,Microsoft.Extensions.Logging.ILogger{ExampleApeart.StartHostedService},PasteApeart.IChannelHelper,PasteApeart.Handler.IEventActionHandler,Microsoft.Extensions.Options.IOptions{ExampleApeart.AppConfig})">
+ <member name="M:ExampleApeart.StartHostedService.#ctor(System.IServiceProvider,Microsoft.Extensions.Options.IOptions{PasteApeart.Application.Contracts.RabbitConfig},PasteApeart.Handler.rabbit.IRabbitMultiConsumerHandler,Microsoft.Extensions.Logging.ILogger{ExampleApeart.StartHostedService},PasteApeart.Handler.IChannelHelper,PasteApeart.Handler.IEventActionHandler,Microsoft.Extensions.Options.IOptions{ExampleApeart.AppConfig})">
<summary>
</summary>
framework/Directory.Build.props
diff --git a/framework/Directory.Build.props b/framework/Directory.Build.props
index a19d739..6250c4d 100644
--- a/framework/Directory.Build.props
+++ b/framework/Directory.Build.props
@@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
- <Version>26.9.23</Version>
- <FileVersion>26.9.23</FileVersion>
- <AssemblyVersion>26.9.23</AssemblyVersion>
+ <Version>26.9.24</Version>
+ <FileVersion>26.9.24</FileVersion>
+ <AssemblyVersion>26.9.24</AssemblyVersion>
</PropertyGroup>
</Project>
\ No newline at end of file
framework/PasteApeart.Handler/redis/IAppCache.cs
diff --git a/framework/PasteApeart.Handler/redis/IAppCache.cs b/framework/PasteApeart.Handler/redis/IAppCache.cs
index ab93a2e..8942cb7 100644
--- a/framework/PasteApeart.Handler/redis/IAppCache.cs
+++ b/framework/PasteApeart.Handler/redis/IAppCache.cs
@@ -645,6 +645,130 @@ namespace PasteApeart.Handler.redis
+ #region -----------------------blog---------------------------------
+
+
+
+ /// <summary>
+ /// 添加某一个数据
+ /// </summary>
+ /// <param name="key"></param>
+ /// <param name="felid"></param>
+ /// <param name="num"></param>
+ Task HashIncrementAsync(string key, string felid, int num = 1);
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="key"></param>
+ /// <returns></returns>
+ Task<string> ReadStringAsync(string key);
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="key"></param>
+ /// <returns></returns>
+ Task<T> ReadObjectAsync<T>(string key);
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="val"></param>
+ /// <returns></returns>
+ Task<bool> SetAddAsync(string skey, int val);
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="filed"></param>
+ /// <returns></returns>
+ Task<bool> SetContainsAsync(string skey, int filed);
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="filed"></param>
+ /// <returns></returns>
+ Task<bool> SetRemoveAsync(string skey, int filed);
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <returns></returns>
+ Task<long> SetRandomMemberAsync(string skey);
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <returns></returns>
+ Task<long> SetLengthAsync(string skey);
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="sval"></param>
+ /// <returns></returns>
+ Task<long> ListRightPushAsync(string skey, string sval);
+
+ /// <summary>
+ /// 返回最小的一个
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="score">时间戳秒</param>
+ /// <returns></returns>
+ Task<string> SortedSetRangeByScoreAsync(string skey, long score);
+
+ /// <summary>
+ /// 获取当前排期最长的任务时间戳 如果没有则返回当前时间戳
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <returns>时间戳秒</returns>
+ Task<long> SortedSetRangeByRankWithScoresAsync(string skey);
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <returns></returns>
+ Task<long> ListLengthAsync(string skey);
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <returns></returns>
+ Task<string> ListLeftPopAsync(string skey);
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="start"></param>
+ /// <param name="stop"></param>
+ /// <returns></returns>
+ Task<List<string>> ListRangeAsync(string skey, int start = 0, int stop = 30);
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="start"></param>
+ /// <param name="stop"></param>
+ /// <returns></returns>
+ Task<List<T>> ListRangeAsync<T>(string skey, int start = 0, int stop = 30);
+
+
+ #endregion
+
+
}
}
framework/PasteApeart.Handler/redis/MemoryClient.cs
diff --git a/framework/PasteApeart.Handler/redis/MemoryClient.cs b/framework/PasteApeart.Handler/redis/MemoryClient.cs
index 48a088e..229d2a2 100644
--- a/framework/PasteApeart.Handler/redis/MemoryClient.cs
+++ b/framework/PasteApeart.Handler/redis/MemoryClient.cs
@@ -1447,6 +1447,81 @@ namespace PasteApeart.Handler.redis
}
}
+ public Task HashIncrementAsync(string key, string felid, int num = 1)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<string> ReadStringAsync(string key)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<T> ReadObjectAsync<T>(string key)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<bool> SetAddAsync(string skey, int val)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<bool> SetContainsAsync(string skey, int filed)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<bool> SetRemoveAsync(string skey, int filed)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<long> SetRandomMemberAsync(string skey)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<long> SetLengthAsync(string skey)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<long> ListRightPushAsync(string skey, string sval)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<string> SortedSetRangeByScoreAsync(string skey, long score)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<long> SortedSetRangeByRankWithScoresAsync(string skey)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<long> ListLengthAsync(string skey)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<string> ListLeftPopAsync(string skey)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<List<string>> ListRangeAsync(string skey, int start = 0, int stop = 30)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task<List<T>> ListRangeAsync<T>(string skey, int start = 0, int stop = 30)
+ {
+ throw new NotImplementedException();
+ }
+
#endregion
framework/PasteApeart.Handler/redis/RedisClient.cs
diff --git a/framework/PasteApeart.Handler/redis/RedisClient.cs b/framework/PasteApeart.Handler/redis/RedisClient.cs
index 65faf29..7f68d6d 100644
--- a/framework/PasteApeart.Handler/redis/RedisClient.cs
+++ b/framework/PasteApeart.Handler/redis/RedisClient.cs
@@ -1,4 +1,5 @@
using Microsoft.Extensions.Options;
+using PasteApeart.Handler.Extend;
using StackExchange.Redis;
using System.Text.Json;
@@ -833,18 +834,6 @@ namespace PasteApeart.Handler.redis
/// <param name="key"></param>
/// <param name="start"></param>
/// <param name="end"></param>
- /// <param name="bit"></param>
- /// <returns></returns>
- public long StringBitPosition(string key, int start, int end, bool bit)
- {
- return _database.StringBitPosition(setKey(key), bit, start, end);
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="key"></param>
- /// <param name="start"></param>
- /// <param name="end"></param>
/// <param name="bit"></param>
/// <returns></returns>
public async Task<long> StringBitPositionAsync(string key, int start, int end, bool bit)
@@ -852,43 +841,6 @@ namespace PasteApeart.Handler.redis
return await _database.StringBitPositionAsync(setKey(key), bit, start, end);
}
-
- /// <summary>
- /// 获取个数?
- /// </summary>
- /// <param name="deskey"></param>
- /// <param name="key"></param>
- /// <returns></returns>
- public long StringBitOperation(string deskey, string key)
- {
- return _database.StringBitOperation(Bitwise.And, setKey(deskey), setKey(key));
- }
-
-
- /// <summary>
- /// 设置值
- /// </summary>
- /// <param name="key"></param>
- /// <param name="offset"></param>
- /// <param name="bit"></param>
- /// <returns></returns>
- public bool StringSetBit(string key, long offset, bool bit)
- {
- return _database.StringSetBit(setKey(key), offset, bit);
- }
-
- /// <summary>
- ///
- /// </summary>
- /// <param name="key"></param>
- /// <param name="start"></param>
- /// <param name="end"></param>
- /// <returns></returns>
- public long StringBitCount(string key, long start = 0, long end = -1)
- {
- return _database.StringBitCount(setKey(key), start, end);
- }
-
/// <summary>
///
/// </summary>
@@ -1205,7 +1157,328 @@ namespace PasteApeart.Handler.redis
}
+ #region -----------------blog--------------------------------
+
+
+ #region Hash模块
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="key"></param>
+ /// <returns></returns>
+ public async Task<string[]> HashKeysAsync(string key)
+ {
+ var keys = await _database.HashKeysAsync(setKey(key));
+ var list = new List<string>();
+ foreach (var item in keys)
+ {
+ list.Add(item.ToString());
+ }
+ return list.ToArray();
+ }
+
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="key"></param>
+ /// <returns></returns>
+ public Task<string> ReadStringAsync(string key)
+ {
+ return Task.Run<string>((Func<Task<string>>)(async () =>
+ {
+ return await this._database.StringGetAsync(setKey(key));
+ }));
+
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="key"></param>
+ /// <returns></returns>
+ public async Task<T> ReadObjectAsync<T>(string key)
+ {
+
+ string str = await _database.StringGetAsync(setKey(key));
+ if (!string.IsNullOrEmpty(str))
+ {
+ return JsonSerializer.Deserialize<T>(str, JsonConfig.Options);// Newtonsoft.Json.JsonConvert.DeserializeObject<T>(str);
+ }
+ return default(T);
+
+
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="val"></param>
+ /// <returns></returns>
+ public async Task<bool> SetAddAsync(string skey, int val)
+ {
+ return await _database.SetAddAsync(setKey(skey), val);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="filed"></param>
+ /// <returns></returns>
+ public async Task<bool> SetContainsAsync(string skey, int filed)
+ {
+ return await _database.SetContainsAsync(setKey(skey), filed);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="filed"></param>
+ /// <returns></returns>
+ public async Task<bool> SetRemoveAsync(string skey, int filed)
+ {
+ return await _database.SetRemoveAsync(setKey(skey), filed);
+ }
+
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <returns></returns>
+ public async Task<long> SetRandomMemberAsync(string skey)
+ {
+ (await _database.SetRandomMemberAsync(setKey(skey))).TryParse(out long val);
+ return val;
+ }
+
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <returns></returns>
+ public async Task<long> SetLengthAsync(string skey)
+ {
+ return (await _database.SetLengthAsync(setKey(skey)));
+ }
+
+ /// <summary>
+ /// 获取排序中的第一个field并删除
+ /// type.action.randcode.id
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <returns></returns>
+ public async Task<string> SortedSetRangeByRankAsync(string skey)
+ {
+ var _read = await _database.SortedSetRangeByRankAsync(setKey(skey), 0, 1);
+ if (_read != null && _read.Length > 0)
+ {
+ var _current = _read[0];
+ await _database.SortedSetRemoveAsync(setKey(skey), _current);
+ return _current.ToString();
+ }
+ return String.Empty;
+ }
+
+ /// <summary>
+ /// 返回最近的一个!并删除
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="_time"></param>
+ /// <returns></returns>
+ public async Task<string> SortedSetRangeByScoreWithScoresAsync(string skey, long _time)
+ {
+ var reads = await _database.SortedSetRangeByScoreWithScoresAsync(setKey(skey), 0, _time, take: 1);
+ if (reads != null && reads.Length > 0)
+ {
+ var _field = reads[0].Element.ToString();
+ await _database.SortedSetRemoveAsync(setKey(skey), _field);
+ return _field;
+ }
+ return String.Empty;
+ }
+
+ /// <summary>
+ /// 返回最近的一个!并删除
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="_time">yyyyMMddHHmmss</param>
+ /// <returns></returns>
+ public async Task<string> SortedSetRangeByScoreAsync(string skey, long _time)
+ {
+ var reads = await _database.SortedSetRangeByScoreAsync(setKey(skey), 0, _time, take: 1);
+ if (reads != null && reads.Length > 0)
+ {
+ var _field = reads[0].ToString();
+ await _database.SortedSetRemoveAsync(setKey(skey), _field);
+ return _field;
+ }
+ return String.Empty;
+ }
+
+ /// <summary>
+ /// 获取当前排期最长的任务时间戳 如果没有则返回当前时间戳
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <returns>时间戳秒</returns>
+ public async Task<long> SortedSetRangeByRankWithScoresAsync(string skey)
+ {
+ var _read = await _database.SortedSetRangeByRankWithScoresAsync(setKey(skey), 0, 1, Order.Descending);
+ if (_read != null && _read.Length > 0)
+ {
+ var _current = _read[0];
+ return (long)_current.Score;
+ }
+ return DateTime.Now.ToUnixTimeSeconds();
+ }
+
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="start"></param>
+ /// <param name="stop"></param>
+ /// <returns></returns>
+ public List<string> ListRange(string skey, int start = 0, int stop = 30)
+ {
+ var vals = _database.ListRange(setKey(skey), start, stop);
+ if (vals != null && vals.Length > 0)
+ {
+ var strs = new List<string>();
+ foreach (var item in vals)
+ {
+ if (item.HasValue)
+ {
+ strs.Add(item.ToString());
+ }
+ }
+ return strs;
+ }
+ return new List<string>();
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="start"></param>
+ /// <param name="stop"></param>
+ /// <returns></returns>
+ public async Task<List<string>> ListRangeAsync(string skey, int start = 0, int stop = 30)
+ {
+ var vals = await _database.ListRangeAsync(setKey(skey), start, stop);
+ if (vals != null && vals.Length > 0)
+ {
+ var strs = new List<string>();
+ foreach (var item in vals)
+ {
+ if (item.HasValue)
+ {
+ strs.Add(item.ToString());
+ }
+ }
+ return strs;
+ }
+ return new List<string>();
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="start"></param>
+ /// <param name="stop"></param>
+ /// <returns></returns>
+ public List<T> ListRange<T>(string skey, int start = 0, int stop = 30)
+ {
+ var vals = _database.ListRange(setKey(skey), start, stop);
+ if (vals != null && vals.Length > 0)
+ {
+ var strs = new List<T>();
+ foreach (var item in vals)
+ {
+ if (item.HasValue)
+ {
+ strs.Add(JsonSerializer.Deserialize<T>(item.ToString(), JsonConfig.Options));// Newtonsoft.Json.JsonConvert.DeserializeObject<T>(item.ToString()));
+ }
+ }
+ return strs;
+ }
+ return new List<T>();
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="start"></param>
+ /// <param name="stop"></param>
+ /// <returns></returns>
+ public async Task<List<T>> ListRangeAsync<T>(string skey, int start = 0, int stop = 30)
+ {
+ var vals = await _database.ListRangeAsync(setKey(skey), start, stop);
+ if (vals != null && vals.Length > 0)
+ {
+ var strs = new List<T>();
+ foreach (var item in vals)
+ {
+ if (item.HasValue)
+ {
+ strs.Add(JsonSerializer.Deserialize<T>(item.ToString(), JsonConfig.Options));
+ }
+ }
+ return strs;
+ }
+ return new List<T>();
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <param name="sval"></param>
+ /// <returns></returns>
+ public async Task<long> ListRightPushAsync(string skey, string sval)
+ {
+ return await _database.ListRightPushAsync(setKey(skey), sval);
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <returns></returns>
+ public async Task<long> ListLengthAsync(string skey)
+ {
+ return await _database.ListLengthAsync(setKey(skey));
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="skey"></param>
+ /// <returns></returns>
+ public async Task<string> ListLeftPopAsync(string skey)
+ {
+ return await _database.ListLeftPopAsync(setKey(skey));
+ }
+
+
+
+
+ #endregion
+
+
+
+ #endregion
manage/page/pasteform/index.css
diff --git a/manage/page/pasteform/index.css b/manage/page/pasteform/index.css
index 18d42da..0d60a9f 100644
--- a/manage/page/pasteform/index.css
+++ b/manage/page/pasteform/index.css
@@ -44,7 +44,7 @@ body {
display: flex;
flex-direction: column;
position: relative;
- height: 400px;
+ height: 200px;
}
.table_wrap,
.mt-20 {
manage/page/pasteform/index.js
diff --git a/manage/page/pasteform/index.js b/manage/page/pasteform/index.js
index e1788cb..5fa89a6 100644
--- a/manage/page/pasteform/index.js
+++ b/manage/page/pasteform/index.js
@@ -984,6 +984,17 @@ function handlerReadRowData(elc) {
rowData[dataName] = value;
});
+ if(!rowData.hasOwnProperty('id')) {
+ rowData.id = $(row).attr('dataid'); // 从tr的dataid属性获取id
+ //关键在于如何获得类型???
+ const idProperty = findPropertyByName(_global_list_properties, 'id');
+ if(idProperty) {
+ if(IsNumberDataType(idProperty.dataType)) {
+ rowData.id = Number(rowData.id);
+ }
+ }
+ }
+
if (rowData.id) {
if (global_page_data) {
for (let item of global_page_data) {
@@ -1006,6 +1017,26 @@ function handlerReadRowData(elc) {
}
/**
+ * 判断是否是Number类型
+ * @param {*} dataType
+ * @returns
+ */
+function IsNumberDataType(dataType) {
+ const numberTypes = ["Int32", "Int64", "UInt32", "UInt64", "number", "Double"];
+ return numberTypes.includes(dataType);
+}
+
+/**
+ * 判断是否是Number数组类型
+ * @param {*} dataType
+ * @returns
+ */
+function IsNumberArrayDataType(dataType) {
+ const numberTypes = ["Int32[]", "Int64[]", "UInt32[]", "UInt64[]", "number[]", "Double[]"];
+ return numberTypes.includes(dataType);
+}
+
+/**
* 查询模型信息
*/
function QueryModel() {
@@ -1493,13 +1524,7 @@ function findExistsPropertyByName(properties, targetName) {
* @returns
*/
function findPropertyByName(properties, propertyName) {
- //这里后续要做优化 做成map的形式,或者是用一些更高效的查找方式,现在先这样简单实现
- for (const property of properties) {
- if (property.name == propertyName) {
- return property;
- }
- }
- return false;
+ return properties.find(p => p.name === propertyName) ?? null;
}
/**
@@ -2250,7 +2275,7 @@ function HandlerQueryItem(listproperties, pageData) {
if (item.name == "next_key") {
_config.next.key = item.name;
- if (item.dataType == "Int32" || item.dataType == "Int64" || item.dataType == "UInt32" || item.dataType == "UInt64") {
+ if (IsNumberDataType(item.dataType)) {
_config.next.type = "number";
} else {
_config.next.type = "string";
@@ -2487,7 +2512,7 @@ function handlerInputValue(_info) {
_array.push($(_elcs[k]).attr('value'));
}
if (item.dataFrom.indexOf("[]") >= 0) {
- if (item.dataFrom == "Int32[]" || item.dataFrom == "Int64[]" || item.dataFrom == "UInt32[]" || item.dataFrom == "UInt64[]") {
+ if ( IsNumberArrayDataType(item.dataFrom)) {
var _newarray = new Array();
_array.forEach(_ary => {
_newarray.push(Number(_ary));
@@ -2499,7 +2524,7 @@ function handlerInputValue(_info) {
} else {
//string
- if (item.dataFrom == 'Int32' || item.dataFrom == 'Int64' || item.dataFrom == 'UInt32' || item.dataFrom == 'UInt64') {
+ if ( IsNumberDataType(item.dataFrom)) {
_info[item.name] = Number(_array[0]);
} else {
var _splitchar = ',';
@@ -2532,7 +2557,7 @@ function handlerInputValue(_info) {
var _val = _info[item.name];
if (_val) {
_val = _val.replace(/,/g, _split_char);
- if (item.dataFrom == "Int32[]" || item.dataFrom == "Int64[]" || item.dataFrom == "UInt32[]" || item.dataFrom == "UInt64[]") {
+ if (IsNumberArrayDataType(item.dataFrom)) {
var strs = _val.split(_split_char);
var arr = new Array();
for (var ia of strs) {
manage/page/pasteform/index.less
diff --git a/manage/page/pasteform/index.less b/manage/page/pasteform/index.less
index 655496a..d2b844b 100644
--- a/manage/page/pasteform/index.less
+++ b/manage/page/pasteform/index.less
@@ -52,7 +52,7 @@ body {
display: flex;
flex-direction: column;
position: relative;
- height: 400px;
+ height: 200px;
}
.table_wrap,
manage/page/welcome.html
diff --git a/manage/page/welcome.html b/manage/page/welcome.html
index 9fdb486..b8828f5 100644
--- a/manage/page/welcome.html
+++ b/manage/page/welcome.html
@@ -43,10 +43,12 @@
background-color: #f5f7fa;
color: #333;
padding: 20px;
+ height:100%;
+ overflow-y:auto;
}
.dashboard {
- max-width: 1200px;
+ max-width: 1900px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(4, 1fr);
@@ -101,8 +103,8 @@
}
.chart-container {
- height: 300px;
- margin-top: 20px;
+ height: 240px;
+ padding:20px 20px 40px 40px;
position: relative;
}
@@ -148,11 +150,13 @@
text-align: right;
padding-right: 5px;
}
-
+
.conversion-rate {
- display: flex;
+ display: grid;
justify-content: space-between;
margin-top: 20px;
+ grid-gap: 20px;
+ grid-template-columns: repeat(4, 1fr);
}
.conversion-item {
@@ -161,13 +165,14 @@
}
.conversion-item .label {
- font-size: 14px;
+ font-size: 16px;
color: #7f8c8d;
margin-bottom: 5px;
+ background:#fff;
}
.conversion-item .value {
- font-size: 18px;
+ font-size: 20px;
font-weight: 600;
color: #2c3e50;
}
@@ -372,6 +377,22 @@
<div class="label">时间</div>
<div class="value">15:30</div>
</div>
+ <div class="conversion-item">
+ <div class="label">老客户</div>
+ <div class="value">32.5%</div>
+ </div>
+ <div class="conversion-item">
+ <div class="label">注册率</div>
+ <div class="value">18.3%</div>
+ </div>
+ <div class="conversion-item">
+ <div class="label">环比</div>
+ <div class="value">+21.1%</div>
+ </div>
+ <div class="conversion-item">
+ <div class="label">日期</div>
+ <div class="value">09-20</div>
+ </div>
</div>
</div>