QF 参考

QF 是 QuickAdmin.Net 框架在浏览器端提供的一个 JS 对象,封装了一些属性、工具方法和 UI 操作。
以下所列属性/方法为全局成员,即所有页面都具有的成员。标注了只读的属性,表示你不要去更改它。
其中有一些方法是对 FineUICore 控件的操作,需要知道控件的 ID,为方便调用,QF 内对控件的 ID 做了以下默认约定:表格的默认 ID 为 "gridCtrl", 表单的默认 ID 为 "formCtrl",树控件的默认 ID 为 "treeCtrl",窗体的默认 ID 为 "winCtrl"。 即若在调用方法时没有提供控件 ID,将按照这个约定使用。在页面里命名控件时也按照这个约定去做,这样方便调用。

如果想在后端给 QF 添加全局自定义成员(即所有页面都具有的自定义成员),需要定制一下 RCLService:从该类继承,重写一下 GetGlobalQFObjectopen in new window 方法,在其中返回自定义对象,然后在 AddQuickAdmin() 之后将该类单例注入系统。

如果想在后端给指定页面修改 QF 或添加自定义属性,可通过在该页面代码里重写 QFObjectopen in new window 属性或通过调用 RegisterQFObjectCustomDataopen in new window 方法(通常在 OnGet() 里调用)来进行。

Properties

appVer

QF.appVer : string
只读。当前应用版本。

curLang

QF.curLang : string
只读。当前语言。若未启用多语言,值为 null

curTheme

QF.curTheme : string
只读。当前主题。

handlerFormat

QF.handlerFormat : string
当前页处理程序 URL 的格式(绝对地址,包含基路径,包含queryString)。Razor 页面和 MVC 视图页对应的默认值分别为:

// 假设当前页面为:/Samples/SimplePage1?p1=123&p2=abc
// 对于 Razor 页面:
QF.handlerFormat == '/Samples/SimplePage1?handler={0}&p1=123&p2=abc'
// 对于 MVC 视图页:
QF.handlerFormat == '/Samples/{0}?p1=123&p2=abc'

此属性可用来构造调用当前页面后端方法的 Url。

isBuiltIn

QF.isBuiltIn : boolean
只读。指示当前页面是否是内置页面。

loginPage

QF.loginPage : string
只读。当前应用登录页面的相对地址,不含基路径。

notifyDefaultPositionX

QF.notifyDefaultPositionX : number
消息通知框的默认横向位置:0 - 左(left),1 - 中(center),2 - 右(right)。默认值 1

notifyDefaultPositionY

QF.notifyDefaultPositionY : number
消息通知框的默认纵向位置:0 - 上(top),1 - 中(center),2 - 下(bottom)。默认值 0

openBuiltInPageInFloatingPanel

QF.openBuiltInPageInFloatingPanel : boolean
只读。取自配置项 OpenBuiltInPageInFloatingPanelopen in new window

path

QF.path : string
只读。当前页面绝对路径,包含基路径,不包含路由参数、queryString。

pathBase

QF.pathBase : string
只读。当前应用的基路径。
这个与 F.baseUrl 的区别见下:

// 当应用部署在根目录时:
QF.pathBase == ''
F.baseUrl == '/'
// 当应用部署在子目录时(比如在 QSample 子目录下):
QF.pathBase == '/QSample'
F.baseUrl == '/QSample/'

queryString

QF.queryString : string
只读。当前页面的查询字符串(不含问号?)。参数值将被编码,如:

// 若查询字符串为:?q1=123&q2=abc&q3=参数
QF.queryString == 'q1=123&q2=abc&q3=%E5%8F%82%E6%95%B0'

routeValues

QF.routeValues : object
只读。当前 MVC 视图页的路由参数。对于 Razor 页面,返回 null
返回的对象有哪些属性由你的路由设置决定。例如,你的路由设置为:

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}"
);

那页面 /Samples/SimplePage1/123 里的 routeValues 将为:
routeValues

showLoadingCtrl

QF.showLoadingCtrl : object
指示在进行提交操作时,在当前页面哪个 FineUICore 控件上遮罩显示 loading 动画。
默认为 null。设置时通常设置为页面最外层的 FineUICore 控件,设置后调用 QF.ajaxPostForm()QF.ajaxPostJson() 等等时将自动在其上显示 loading 动画,执行完成后则自动隐藏动画。

version

QF.version : string
只读。框架版本。

Methods

notify 方法

用来显示通知消息的方法,共有三个方法,原型一致:
在当前窗口显示通知:QF.notifySelf(msg, [iconFlag], [displayMS], [positionY], [positionX])
在父窗口显示通知:QF.notifyParent(msg, [iconFlag], [displayMS], [positionY], [positionX])
在顶层窗口显示通知:QF.notifyTop(msg, [iconFlag], [displayMS], [positionY], [positionX])

ParamTypeDefaultDescription
msgstring要显示的消息
[iconFlag]number1图标标志 (-1:错误图标, 0:无图标, 1:信息图标)
[displayMS]number3000指定显示多长时间后自动消失(毫秒), 0 表示一直显示
[positionY]numberY轴位置 (0:顶部, 1:中部, 2:底部), 若未提供, 将用 QF.notifyDefaultPositionY
[positionX]numberX轴位置 (0:左侧, 1:中部, 2:右侧), 若未提供, 将用 QF.notifyDefaultPositionX

这几个方法是对 F.notify() 的二次封装,以便简化调用。
其中对消息字符串里的换行符进行了识别,可方便地显示多行消息,见示例:

QF.notifySelf('操作成功');
QF.notifySelf('操作失败', -1);

// F.notify() 换行得传入 "<raw>这是第一行<br/>这是第二行</raw>"
QF.notifySelf('这是第一行\n这是第二行');

// 也可传入 html,用 <raw></raw> 包裹
QF.notifySelf('<raw><span style="font-weight: bold; color: red;">红色文字</span></raw>');

alert 方法

用来弹出消息框的方法,共有三个方法,原型一致:
在当前窗口出消息框:QF.alertSelf(msg, [iconFlag], [onOK], [title])
在父窗口出消息框:QF.alertParent(msg, [iconFlag], [onOK], [title])
在顶层窗口出消息框:QF.alertTop(msg, [iconFlag], [onOK], [title])

ParamTypeDefaultDescription
msgstring要显示的消息
[iconFlag]number1图标标志 (-1:错误图标, 0:无图标, 1:信息图标)
[onOK]function点击确定时的回调函数
[title]string'提示'消息框标题

这几个方法是对 F.alert() 的二次封装,以便简化调用。
其中对消息字符串里的换行符进行了识别,可方便地显示多行消息,见示例:

QF.alertSelf('操作成功');
QF.alertSelf('操作失败', -1);

// F.alert() 换行得传入 "<raw>这是第一行<br/>这是第二行</raw>"
QF.alertSelf('这是第一行\n这是第二行');

// 也可传入 html,用 <raw></raw> 包裹
QF.alertSelf('<raw><span style="font-weight: bold; color: red;">红色文字</span></raw>');

QF.alertSelf(
  'Hello!', 
  1, 
  () => { 
    QF.notifySelf('你点击了确定');
  }
);

confirm 方法

用来显示确认对话框的方法,支持二次确认,共有三个方法,原型一致:
在当前窗口显示确认对话框:QF.confirmSelf(msg, [onOK], [onCancel], [title])
在父窗口显示确认对话框:QF.confirmParent(msg, [onOK], [onCancel], [title])
在顶层窗口显示确认对话框:QF.confirmTop(msg, [onOK], [onCancel], [title])

ParamTypeDefaultDescription
msgstring | Array.<string>确认消息
[onOK]function点击确定时的回调函数
[onCancel]function点击取消时的回调函数
[title]string'提示'对话框标题

这几个方法是对 F.confirm() 的二次封装,以便简化调用。图标固定为 'question'
与前边的 notify/alert 一样,其中也对消息字符串里的换行符进行了识别,可方便地显示多行消息。
另外,支持二次确认msg 参数传入包含 两个消息字符串 的数组即可,见示例。

// 换行消息
QF.confirmSelf(
  '确定执行吗?\n(注意:操作不可逆)', 
  () => {
    console.log('执行逻辑');
  }
);

// 二次确认
QF.confirmSelf(
  [
    '确定删除所选记录吗?',
    '请再次确认要删除所选记录吗?'
  ], 
  () => {
    console.log('删除操作');
  }
);

// HTML 消息
QF.confirmSelf(
  '<raw>确定删除所选菜单项吗?<br/><span style="font-weight: bold; color: red;">注意:所有子菜单项以及授权数据将被一并删除!</span></raw>',
  () => {
    console.log('删除操作');
  }
);

post 方法

QF 提供了 ajaxPostForm()ajaxPostJson() 方法,是对 $.ajax() 的封装,支持相对url、自动带上防伪令牌、包含应用版本号请求头、支持先进行确认以及二次确认等等,让你能更方便地发起 POST 请求,具体见后边说明。
简化调用:
QF.ajaxPostForm(url, [data], [success])
QF.ajaxPostJson(url, [data], [success])

QF.ajaxPostForm('~/api/MyTest/Test1', { val1: 123, val2: 'abc' }, (res) => { console.log(res); });

传入选项调用:
QF.ajaxPostForm(options)
QF.ajaxPostJson(options)

QF.ajaxPostJson({
  url: '~/api/MyTest/Test2',
  data: {
    val1: 123,
    val2: 'abc'
  },
  success: (res) => {
    console.log(res); 
  },
  error: () => {
    console.warn('post error'); 
  },
  complete: () => {
    console.log('post complete');
  }
});

具体功能:

  • ajaxPostForm 发送 application/x-www-form-urlencoded 请求,ajaxPostJson 则发送 application/json 请求。
  • ajaxPostForm 还可发送 FormData 数据(比如上传文件),选项里加上 isFormData: true 即可:
var formData = new FormData();
formData.append("file", $('#fileInput')[0].files[0]);
formData.append("val1", 123);
formData.append("val2", 'abc');
QF.ajaxPostForm({
  url: '~/MyTest/UploadFile',
  isFormData: true,
  data: formData,
  success: (res) => {
    console.log(res); 
  }
});
  • ajaxPostJson 里,会把传入的 data 对象用 JSON.stringify() 转为 json 字符串然后再提交。当然你也可以直接给 data 传入 json 字符串。
  • 提交时会自动带上当前页面的防伪令牌。
  • url 建议传入以 ~/ 打头的相对地址,方法内会自动将其转为绝对地址,可确保不论在哪调用都可以。已禁止向外部地址提交。
  • url 可为当前页面后端处理程序名称,例如以下为某页面后端代码,有 MyHandler1、MyHandler2 两个 post 处理方法:
// 异步版本方法
public async Task<IActionResult> OnPostMyHandler1Async()
{
    ...
    if (failed)
        return ServiceResult.Failed("error msg").ToCamelCaseJsonContentResult();
    return ServiceResult.Ok().ToCamelCaseJsonContentResult();
}

// 同步版本方法
public IActionResult OnPostMyHandler2()
{
    ...
    if (failed)
        return ServiceResult.Failed("error msg").ToCamelCaseJsonContentResult();
    return ServiceResult.Ok().ToCamelCaseJsonContentResult();
}

提交到 MyHandler1 或 MyHandler2 的 url 可以这些写:

QF.ajaxPostForm({
  url: 'MyHandler1', // 内部会去自动构造完整 url,而且如果当前页面有 queryString,url 里会自动把 queryString 都带上
  success: function (res) {
    if (res.code == 0) {
      QF.notifySelf('操作成功');
    } else {
      QF.notifySelf('操作失败:' + res.msg, -1);
    }
  }
});

 








  • 支持提交前先弹出确认框让用户确认,并且支持二次确认,选项里加上 confirmMsg: 'xxx' 即可:
// 提交前先确认
QF.ajaxPostForm({
  confirmMsg: '确定执行吗?',
  url: '~/api/MyTest/Test1',
  success: function (res) {
    console.log(res);
  }
});

// 二次确认,confirmMsg 传入字符串数组即可
QF.ajaxPostForm({
  confirmMsg: ['确定执行吗?', '请再次确认要执行吗?'],
  url: '~/api/MyTest/Test1',
  success: function (res) {
    console.log(res);
  }
});


 








 





  • 可指定在提交时在哪个控件上层遮罩显示 loading 动画,选项里加上 showLoadingCtrl: F.ui.XXX 即可。
    若选项里没有指定 showLoadingCtrl,将从 QF.showLoadingCtrl 获取,若仍然没有,动画将不会显示。
    另外,如果 loading 动画显示了,而且你提供了 complete 方法,则你需要自行在 complete 方法隐藏动画。
  • 内有对 Session 过期的判断,若发现 Session 过期了,将会弹出错误消息框提示用户,并引导用户去重新登录:
    SessionTimeout
    如果你不希望做这个判断(比如在做与前端无交互的 post back),选项里传入 doNotCheckSessionTimeout: true 即可。

render 函数

QF 提供了若干渲染函数,可直接给表格列的 RendererFunction 使用,或者在你自己的 js 渲染函数里调用:

F.ExtGeneralGrid(true, false)
  ...
  .Columns(
    F.RenderFieldFor(m => m.TestMenuItems.First().Name),
    F.RenderFieldFor(m => m.TestMenuItems.First().NavigateUrl).RendererFunction("QF.renderRelUrlLink"),
    F.RenderFieldFor(m => m.TestMenuItems.First().SuperAdminOnly).RendererFunction("QF.renderYesBoldHighlight"),
    F.RenderFieldFor(m => m.TestMenuItems.First().Hidden).RendererFunction("QF.renderNoBold"),
    F.RenderFieldFor(m => m.TestMenuItems.First().AttributeDataTag),
    F.RenderFieldFor(m => m.TestMenuItems.First().NodeId)
  )
  ...




 
 
 




这些函数有:

函数功能说明
QF.renderYesNo
QF.renderYesBold/QF.renderYesHighlight/QF.renderYesBoldHighlight
QF.renderNoBold/QF.renderNoHighlight/QF.renderNoBoldHighlight
渲染布尔字段,显示为 '是'/'否'支持布尔、数值字段。对于数值字段,0 表示 false,非 0 表示 true
可对 '是'/'否' 进行加粗或高亮显示,使用对应函数即可。
QF.renderEncodedString将字段值 HTML 编码后显示
QF.renderRelUrlLink/QF.renderAbsUrlLink渲染超链字段renderRelUrlLink 里会先把相对 url 转为绝对地址,renderAbsUrlLink 里则不会,字段值是啥就显示啥。
QF.renderFormattedNumber将字段值进行数值格式化显示内部调用了 QF.formatNumber(value, format),格式由 RendererArgument 指定,并支持 TrimZero 设置
QF.renderFormattedHexNumber将十六进制字段值进行格式化显示内部调用了 QF.formatNumber(value, format, 16),格式由 RendererArgument 指定

浮动面板

openFloatingPanel
打开浮动面板,并返回面板 id。
QF.openFloatingPanel(options) ⇒ string

选项有:

NameTypeDefaultDescription
targetstring'self'面板目标位置:'self'/'parent'/'top'
positionstring'right'面板在页面的停靠位置:'left'/'right'/'top'/'bottom'
widthnumber | string指定停靠在页面左侧、右侧时面板的宽度,可接受的值:500/'500'/'500px'/'80%'
heightnumber | string指定停靠在页面顶部、底部时面板的高度,可接受的值同 width
titlestring面板标题
contentElstring | jQueryElement | DOMElement指定面板内容为页面上的某个元素,可传入 jQuery selector/jQuery元素/DOM元素
contentHtmlstring指定面板内容为一段 HTML
contentUrlstring指定面板内容为另一个页面:将在面板内创建一个 iframe 来嵌入该页面
showTitlebooleantrue是否显示标题栏
showCloseButtonbooleantrue标题栏上是否显示关闭按钮
showOverlaybooleantrue是否显示遮罩层
closeOnOverlayClickbooleanfalse指示当显示遮罩层时,点击它时是否关闭面板
closeOnEscbooleanfalse指示按 ESC 键时是否关闭面板
cssClassstring面板额外的 css class
autoCloseDelaynumber自动关闭的延迟时长,单位:毫秒。大于零表示面板将在指定时长后自动关闭
animationDurationnumber300面板动画时长,单位:毫秒
zIndexBasenumber2000面板 z-index 基数,创建面板时的 z-index 将在此基数基础上依次增加
onClosefunction面板关闭时的回调函数,原型:function(panelId, options) { }

面板内容设置的优先级为:contentEl > contentHtml > contentUrl
contentUrl 建议设置为以 ~/ 打头的相对地址如:'~/path/page',内部会自动将其转为绝对地址,这样可确保在哪调用都不会有问题。已禁止外部网址。

简化调用版本:
QF.openFloatingPanel(title, contentUrl, [width]) ⇒ string
将在当前页面的右侧打开嵌入了指定页面的浮动面板。

Example

QF.openFloatingPanel('Test', '~/path/page', 500);

QF.openFloatingPanel({
  title:'Test', 
  width: 300,
  contentEl: '#myHidden'
});

QF.openFloatingPanel({
  target: 'parent',
  position: 'bottom',
  title:'Test', 
  height: '30%',
  contentHtml: '<h3>这是 html 内容</h3>'
});

浮动面板选项的默认值存储在 QF.floatingPanelDefaults,可在当前页面加载时修改:

F.ready(function () {
  // 修改当前页面浮动面板默认选项:点击遮罩层或按下 ESC 键将关闭面板
  QF.floatingPanelDefaults.closeOnOverlayClick = true;
  QF.floatingPanelDefaults.closeOnEsc = true;
});

closeFloatingPanel
QF.closeFloatingPanel(panelId, [noCloseEvent])
关闭当前页面里的指定面板。

ParamTypeDefaultDescription
panelIdstring面板 id
[noCloseEvent]booleanfalse指示关闭时是否禁止调用 onClose

closeTopFloatingPanel
QF.closeTopFloatingPanel([noCloseEvent])
关闭当前页面里的顶层面板。

ParamTypeDefaultDescription
[noCloseEvent]booleanfalse指示关闭时是否禁止调用 onClose

重复调用此方法将依次关闭各个面板。

closeAllFloatingPanels
QF.closeAllFloatingPanels([noCloseEvent])
关闭当前页面里的所有面板。

ParamTypeDefaultDescription
[noCloseEvent]booleanfalse指示关闭时是否禁止调用 onClose

getTopFloatingPanelId
QF.getTopFloatingPanelId() ⇒ string | null
获取当前页面里的顶层面板的 id。

isHostingInFloatPanel
QF.isHostingInFloatPanel() ⇒ boolean
检查当前页面是否是在浮动面板里打开的。

getHostingFloatPanelId
QF.getHostingFloatPanelId() ⇒ string | null
若当前页面是在浮动面板里打开的,返回对应面板的 id,否则返回 null

getHostingFloatPanelTrigger
QF.getHostingFloatPanelTrigger() ⇒ window | null
当当前页面是在浮动面板里打开的时,返回打开该浮动面板的上下文 window 对象,否则返回 null

生成超链相关函数

QF 提供了若干用来生成文本/图片超链 HTML 的函数,可在你自己的 js 渲染函数里调用。
对于有 url 的参数,要传入相对地址,请以 '~/' 打头,如:'~/path/page'

genRelUrlTxtLink/genAbsUrlTxtLink
生成文本链接。
QF.genRelUrlTxtLink(url, [txt], [title], [cssClass])
QF.genAbsUrlTxtLink(url, [txt], [title], [cssClass])

ParamTypeDefaultDescription
urlstringURL
[txt]stringurl链接文本,内部会对其进行 HTML 编码
[title]string链接标题
[cssClass]stringCSS类名

url 可以是:

  • 相对 url 或绝对 url。genRelUrlTxtLink 里会把相对 url 转为绝对 url,genAbsUrlTxtLink 则不会,url 被原样使用。
  • javascript: 打头的 js,如:"javascript:myFunc(123, 'abc')"。注意若函数有字符串参数,请用单引号包裹。

genRelUrlImgLink/genAbsUrlImgLink
生成图片链接。
QF.genRelUrlImgLink(url, icon, [title], [cssClass])
QF.genAbsUrlImgLink(url, icon, [title], [cssClass])

ParamTypeDefaultDescription
urlstringURL
iconstring图标
[title]string链接标题
[cssClass]stringCSS类名

url 可以是:

  • 相对 url 或绝对 url。genRelUrlImgLink 里会把相对 url 转为绝对 url,genAbsUrlImgLink 则不会,url 被原样使用。
  • javascript: 打头的 js,如:"javascript:myFunc(123, 'abc')"。注意若函数有字符串参数,请用单引号包裹。

icon 可以是:

  • img 元素 HTML:'<img alt="xxx" src="/imgs/xxx.png"></img>'
  • 图片地址:相对地址:'~/imgs/xxx.png',或绝对地址:'/imgs/xxx.png/'。相对图片地址将被自动转为绝对地址。
  • FineUICore 图标名称:如 'Add''anchor' 等等(不区分大小写)。可用图标名称参见这里open in new window

genJsTxtLink
生成点击时执行指定 js 函数的文本链接。
QF.genJsTxtLink(jsFunc, txt, [title], [cssClass])

ParamTypeDefaultDescription
jsFuncstringjs 函数调用代码,或 js 函数名称。注意若函数调用有字符串参数,请用单引号包裹。
txtstring链接文本,内部会对其进行 HTML 编码
[title]string链接标题
[cssClass]stringCSS类名

jsFunc 可传入 null 或空白,此时将不会有 onclick 事件注册,你可利用 cssClass 自行进行事件注册。
jsFunc 只传入了函数名称,会自动加入 event 事件参数,例如传入 'myFunc',函数可这样定义:

function myFunc (e) {
  // const el = e.currentTarget; // el 将为该超链元素
}

genJsImgLink
生成点击时执行指定 js 函数的图片链接。
QF.genJsImgLink(jsFunc, icon, [title], [cssClass])

ParamTypeDefaultDescription
jsFuncstringjs 函数调用代码,或 js 函数名称。注意若函数调用有字符串参数,请用单引号包裹。
iconstring图标
[title]string链接标题
[cssClass]stringCSS类名

jsFunc 可传入 null 或空白,此时将不会有 onclick 事件注册,你可利用 cssClass 自行进行事件注册。
jsFunc 只传入了函数名称,会自动加入 event 事件参数,例如传入 'myFunc',函数可这样定义:

function myFunc (e) {
  // const el = e.currentTarget; // el 将为该超链元素
}

icon 可以是:

  • img 元素 HTML:'<img alt="xxx" src="/imgs/xxx.png"></img>'
  • 图片地址:相对地址:'~/imgs/xxx.png',或绝对地址:'/imgs/xxx.png/'。相对图片地址将被自动转为绝对地址。
  • FineUICore 图标名称:如 'Add''anchor' 等等(不区分大小写)。可用图标名称参见这里open in new window

genDisabledTxtLink
生成禁用状态的文本链接。
QF.genDisabledTxtLink(txt, [cssClass], [title])

ParamTypeDefaultDescription
txtstring链接文本,内部会对其进行 HTML 编码
[cssClass]stringCSS类名
[title]string链接标题

genDisabledImgLink
生成禁用状态的图片链接。
QF.genDisabledImgLink(icon, [cssClass], [title])

ParamTypeDefaultDescription
iconstring图标
[cssClass]stringCSS类名
[title]string链接标题

icon 可以是:

  • img 元素 HTML:'<img alt="xxx" src="/imgs/xxx.png"></img>'
  • 图片地址:相对地址:'~/imgs/xxx.png',或绝对地址:'/imgs/xxx.png/'。相对图片地址将被自动转为绝对地址。
  • FineUICore 图标名称:如 'Add''anchor' 等等(不区分大小写)。可用图标名称参见这里open in new window

genDownloadTxtLink
生成下载文本链接。
QF.genDownloadTxtLink(url, [cssClass], [txt])

ParamTypeDefaultDescription
urlstring下载URL。若为相对 url,将被转为绝对地址
[cssClass]stringCSS类名
[txt]string'下载'链接文本,内部会对其进行 HTML 编码

genDownloadImgLink
生成下载图片链接。
QF.genDownloadImgLink(url, [cssClass], [icon], [title])

ParamTypeDefaultDescription
urlstring下载URL。若为相对 url,将被转为绝对地址
[cssClass]stringCSS类名
[icon]string内置的一个下载图标图标
[title]string链接标题

icon 可以是:

  • img 元素 HTML:'<img alt="xxx" src="/imgs/xxx.png"></img>'
  • 图片地址:相对地址:'~/imgs/xxx.png',或绝对地址:'/imgs/xxx.png/'。相对图片地址将被自动转为绝对地址。
  • FineUICore 图标名称:如 'Add''anchor' 等等(不区分大小写)。可用图标名称参见这里open in new window

appendHighlightedJson

QF.appendHighlightedJson(container, json, [space], [forceReParse])
向容器追加高亮显示 JSON 的 HTML。

ParamTypeDefaultDescription
containerjQueryElement目标容器元素
jsonobject | string要显示的对象或字符串
[space]number2缩进空格数
[forceReParse]booleanfalse是否强制重新解析

内部调用了 QF.jsonHighlighting() 取得高亮 JSON 的 HTML。

Example

QF.appendHighlightedJson($('.my-json-area'), myObj);

appendItemsToDDLWithObjects

QF.appendItemsToDDLWithObjects(ddlCtrlOrID, objs)
把传入的对象作为下拉项追加到下拉列表里,并把这些项追加选中。
适用于多选下拉列表。

ParamTypeDescription
ddlCtrlOrIDstring | Element下拉列表ID 或 下拉列表控件
objsobject | Array.<object>对象或对象数组

将识别传入对象的以下属性值作为下拉项的值:obj.id || obj.Id || obj.ID || obj.value || obj.Value || obj.VALUE || obj.val || obj.Val || obj.VAL
将识别传入对象的以下属性值作为下拉项的显示文本:obj.name || obj.Name || obj.NAME || obj.displayName || obj.DisplayName || obj.DISPLAYNAME || obj.text || obj.Text || obj.TEXT || obj.txt || obj.Txt || obj.TXT

Example

QF.appendItemsToDDLWithObjects('myddl', { id: '123', name: 'abc' });
QF.appendItemsToDDLWithObjects(F('myddl'), [
  { id: '1', displayName: 'a' },
  { id: '2', displayName: 'b' },
  { id: '3', displayName: 'c' },
  { id: '4', displayName: 'd' },
]);

appendQuery

QF.appendQuery(url, s) ⇒ string
向 URL 追加查询字符串。

ParamTypeDescription
urlstring原始 URL
sstring要追加的查询字符串

Example

QF.appendQuery('/page', 'id=123');       // 返回 '/page?id=123'
QF.appendQuery('/page?q=abc', 'id=123'); // 返回 '/page?q=abc&id=123'

checkBoxListGetSelection

QF.checkBoxListGetSelection(ctrlID) ⇒ Array.<string>
获取复选框列表的选中项的值数组。

ParamTypeDescription
ctrlIDstring复选框列表控件ID

checkBoxListSelectAll

QF.checkBoxListSelectAll(ctrlID)
全选复选框列表。

ParamTypeDescription
ctrlIDstring复选框列表控件ID

checkBoxListSelectInvert

QF.checkBoxListSelectInvert(ctrlID)
反选复选框列表。

ParamTypeDescription
ctrlIDstring复选框列表控件ID

closeSelf

QF.closeSelf([noCloseEvent])
关闭当前页面自己。

ParamTypeDefaultDescription
[noCloseEvent]booleanfalse指示关闭时是否禁用对应关闭事件。具体事件由页面打开方式决定。

将自动检测页面打开方式并尝试关闭自己。
若是在 TAB 标签里打开的,将关闭所在标签;若是弹窗打开的,将关闭所在窗口;若是在浮动面板打开的,将关闭所在面板;若是用 window.open() 打开的,将用 window.close() 关闭。

copyToClipboard

QF.copyToClipboard(txt, [bTip]) ⇒ boolean
复制文本到剪贴板。返回 true 表示复制成功,false 表示复制失败。

ParamTypeDefaultDescription
txtstring要复制的文本
[bTip]booleantrue指示是否显示复制结果通知。若为 true,将会调用 QF.notifySelf() 通知复制结果

doFineUIPostBack

QF.doFineUIPostBack(options)
此方法是对 FineUI F.doPostBack(options)open in new window 方法的二次封装,加入了以下功能:

  • 提交前确认
    传入一个参数名为 confirmMsg 的确认消息字符串即可。支持二次确认:用 confirmMsg 传入包含两个确认消息的字符串数组。支持 HTML 消息,参见本页里 QF.confirmSelf() 等方法的说明。
  • 简化 url 参数
    url 参数无需书写完整 Url,可仅设置为当前页面后端处理程序名称比如 url: 'MyHandler',内部会去自动构造完整 Url,参见本页里 QF.ajaxPostForm()/QF.ajaxPostJson() 方法的说明。
  • 显示加载动画
    可指定提交时在哪个控件上层遮罩显示 loading 动画,选项里加上 showLoadingCtrl: F.ui.XXX 即可。
    若选项里没有指定 showLoadingCtrl,将从 QF.showLoadingCtrl 获取。

Example

// 例如保存表单前确认一下:
QF.doFineUIPostBack({
  confirmMsg: '确定保存吗?',       // 确认消息
  showLoadingCtrl: F.ui.formCtrl,  // 在 formCtrl 上遮罩显示 loading 动画
  url: 'Save',                     // 对应页面后端 OnPostSaveAsync 或 OnPostSave 方法
  fields: 'formCtrl',              // 要提交的表单
  params: { file: F.ui.ddlFiles.getValue(), minimal: minimal }, // 额外提交的参数
});

ensureString

QF.ensureString(input, [nullAsEmpty]) ⇒ string
将输入转为字符串。

ParamTypeDefaultDescription
inputany输入
[nullAsEmpty]booleantrue

inputundefinednull 时,若 nullAsEmptytrue,将返回空字符串 '',否则返回 input 自己。
方法内部使用的是 String(input)

formatNumber

QF.formatNumber(value, format, [integerRadix], [noTrailingZeros]) ⇒ string
数值格式化。

ParamTypeDefaultDescription
valuenumber | string数值或数值字符串
formatstring格式字符串。支持以下 C# 标准格式:F/N/P/E/D/Xopen in new window,例如 'F2''P0''N2' 等等
[integerRadix]number指示整数值 value 的进制
[noTrailingZeros]booleanfalse指示对含有小数的结果是否移除末尾的 0

valueNaN,返回空字符串 ''
由于格式 D 和 X 只支持整数,若此时 value 是浮点数,将会先截断其小数后再格式化。
若提供了 integerRadix 参数,将认为输入的是个整数,内部将用 parseInt(value, integerRadix) 解析输入。

Example

// 固定小数 F/f
console.log(QF.formatNumber(123.456, 'F2') === '123.46');
console.log(QF.formatNumber(123.456, 'F')  === '123.46');  // 小数位数默认为 2
console.log(QF.formatNumber(-12.345, 'f2') === '-12.35');
console.log(QF.formatNumber('12.3',  'F3') === '12.300');  // 输入可以是数值字符串

// 千分位 N/n
console.log(QF.formatNumber(123456.789, 'N2') === '123,456.79');
console.log(QF.formatNumber(123456.789, 'N')  === '123,456.79');  // 小数位数默认为 2
console.log(QF.formatNumber(123456.789, 'n0') === '123,457');
console.log(QF.formatNumber('1234.5',   'N3') === '1,234.500');

// 百分比 P/p
console.log(QF.formatNumber(0.1234,   'P2') === '12.34%');
console.log(QF.formatNumber(1.2345,   'P')  === '123.45%');  // 小数位数默认为 2
console.log(QF.formatNumber(0.5,      'p0') === '50%');
console.log(QF.formatNumber('-0.075', 'P1') === '-7.5%');

// 科学计数 E/e
console.log(QF.formatNumber(12345,     'E2') === '1.23E+004');
console.log(QF.formatNumber(12345,     'E')  === '1.234500E+004');  // 小数位数默认为 6
console.log(QF.formatNumber(0.012345,  'e3') === '1.235e-002');
console.log(QF.formatNumber('-987654', 'E1') === '-9.9E+005');

// 十进制 D/d
console.log(QF.formatNumber(123,     'D5') === '00123');
console.log(QF.formatNumber(123,     'D')  === '123');
console.log(QF.formatNumber(42,      'D3') === '042');
console.log(QF.formatNumber(-12,     'D4') === '-0012');
console.log(QF.formatNumber(123.678, 'D5') === '00123');  // 输入为浮点数 123.678,将截断小数部分,即按 123 处理

// 十六进制 X/x
console.log(QF.formatNumber(255,    'X')  === 'FF');
console.log(QF.formatNumber(255,    'x')  === 'ff');
console.log(QF.formatNumber(16,     'X4') === '0010');
console.log(QF.formatNumber(10,     'x2') === '0a');
console.log(QF.formatNumber(10.678, 'X2') === '0A');  // 输入为浮点数 10.678,将截断小数部分,即按 10 处理

// 指定 integerRadix 参数,比如指示输入为 16 进制整数
console.log(QF.formatNumber('10',   'F2', 16) === '16.00');
console.log(QF.formatNumber(10,     'F2', 16) === '16.00');
console.log(QF.formatNumber('FF',   'D5', 16) === '00255');
console.log(QF.formatNumber('D0D0', 'N0', 16) === '53,456');

// 移除小数点后末尾的零
console.log(QF.formatNumber(123.4996,  'F3', null, true) === '123.5');
console.log(QF.formatNumber('123.000', 'F3', null, true) === '123');
console.log(QF.formatNumber(1234.5,    'N3', null, true) === '1,234.5');
console.log(QF.formatNumber(0.681,     'P2', null, true) === '68.1%');
console.log(QF.formatNumber(12000,     'E3', null, true) === '1.2E+004');

// 无效参数
console.log(QF.formatNumber('qadmin', 'F') === 'qadmin');
console.log(QF.formatNumber(NaN, 'F') === '');
console.log(QF.formatNumber(null, 'F') == undefined);
console.log(QF.formatNumber(undefined, 'F') == undefined);
console.log(QF.formatNumber(123, 'XXX') === '123');

fromBase64

QF.fromBase64(s) ⇒ string
将Base64编码的字符串解码。

ParamTypeDescription
sstringBase64编码的字符串

getAbsUrl

QF.getAbsUrl(relUrl) ⇒ string
获取相对URL的,包含基路径的绝对URL。

ParamTypeDescription
relUrlstring相对URL,如 '~/path/page'

relUrl 本身为绝对URL,直接返回其自己。

Example

// 假设当前页面是 ~/Samples/SimplePage1,应用部署在子目录 QSample 下
QF.getAbsUrl('~/path/page'); // 返回 '/QSample/path/page'
QF.getAbsUrl('/path/page');  // 返回 '/path/page'
QF.getAbsUrl('path/page');   // 返回 '/QSample/Samples/path/page'

getDDLSelIndex

QF.getDDLSelIndex(ddlCtrl, [returnNullWhenNoSel]) ⇒ number | null
获取下拉列表所选项的索引。
只适用于单选下拉列表。

ParamTypeDefaultDescription
ddlCtrlFineUICoreCtrl下拉列表控件
[returnNullWhenNoSel]booleanfalse无选中项时是否返回null

无选中项时,若 returnNullWhenNoSel==true,返回 null,否则返回 -1

getDDLText

QF.getDDLText(ddlCtrl) ⇒ string | null
获取下拉列表里的文本。返回文本或 null

ParamTypeDescription
ddlCtrlFineUICoreCtrl下拉列表控件

getDDLValue

QF.getDDLValue(ddlCtrl) ⇒ string | null
获取下拉列表所选值。返回所选值或 null
对于多选下拉列表,若未选取任何项,将返回 null

ParamTypeDescription
ddlCtrlFineUICoreCtrl下拉列表控件

对于单选下拉列表,内部有检查,确保返回的值是下列选项里的。

getDPDayString

QF.getDPDayString(dpCtrl) ⇒ string | null
获取日期控件的选取日期,并返回为日期字符串,格式为 'yyyy-MM-dd'
若未选日期,返回 null

ParamTypeDescription
dpCtrlFineUICoreCtrl日期控件
QF.getDPDayString(F.ui.dpBegin); // 返回示例:'2022-09-01'

getDPDateTimeString

QF.getDPDateTimeString(dpCtrl, [isEndTime], [timePartCtrl]) ⇒ string | null
获取日期控件的选取日期,并根据输入参数追加时间部分,最后返回完整的日期时间字符串。返回格式为:'yyyy-MM-dd HH:mm:ss'
若未选日期,返回 null

ParamTypeDefaultDescription
dpCtrlFineUICoreCtrl日期控件
[isEndTime]booleanfalse是否为结束时间
[timePartCtrl]FineUICoreCtrl时间部分控件

时间部分处理规则:
当未提供 timePartCtrl 时:isEndTime==true 时时间部分将为 '23:59:59',否则将为 '00:00:00'
当提供 timePartCtrl 了时:时间部分将先取其值。如果有缺失部分(比如只有小时,或者有小时、分钟,没有秒),将根据 isEndTime 去追加 '59''00'

Example

QF.getDPDateTimeString(F.ui.dpBegin);     // 返回示例:'2022-09-01 00:00:00'
QF.getDPDateTimeString(F.ui.dpEnd, true); // 返回示例:'2022-09-08 23:59:59'

getDPDateTime

QF.getDPDateTime(dpCtrl, [isEndTime], [timePartCtrl]) ⇒ Date | null
获取日期控件的选取日期,返回 Date 对象。
若未选日期,返回 null

ParamTypeDefaultDescription
dpCtrlFineUICoreCtrl日期时间选择器控件
[isEndTime]booleanfalse是否为结束时间
[timePartCtrl]FineUICoreCtrl时间部分控件

时间部分处理规则同 getDPDateTimeString()

getGridSelCellData

QF.getGridSelCellData([gridCtrlOrID]) ⇒ object | null
获取表格选中单元格的相关数据。无选中时返回 null

ParamTypeDefaultDescription
[gridCtrlOrID]string | Element'gridCtrl'表格控件ID 或 表格控件

返回的对象的属性有:

NameDescription
rowId所在行的记录 id 值
colName所在列的名称
colVal单元格对应值

getGridSelectedRowDatas

QF.getGridSelectedRowDatas([gridCtrlOrID]) ⇒ Array.<object>
获取表格中所有选中行的行数据数组。无选中行时返回空数组。

ParamTypeDefaultDescription
[gridCtrlOrID]string | Element'gridCtrl'表格控件ID 或 表格控件

getGridSelectedRowIds

QF.getGridSelectedRowIds([gridCtrlOrID]) ⇒ Array.<string>
获取表格中所有选中行的行 id 值数组。无选中行时返回空数组。

ParamTypeDefaultDescription
[gridCtrlOrID]string | Element'gridCtrl'表格控件ID 或 表格控件

getNodeTextPath

QF.getNodeTextPath(childNodeID, [treeCtrlOrID], [getFullPath]) ⇒ string
获取树控件指定节点的文本路径。

ParamTypeDefaultDescription
childNodeIDstring子节点ID
[treeCtrlOrID]string | Element'treeCtrl'树控件ID 或 树控件
[getFullPath]booleanfalse指示是否获取完整路径

getFullPathfalse 时,返回的文本路径将不包含根节点。例如对以下树:

├─系统管理(n1)
  └─系统配置(n2)
    └─系统菜单(n3)
    └─快速链接(n4)
QF.getNodeTextPath('n3');                   // 返回:'系统配置/系统菜单'
QF.getNodeTextPath('n3', 'treeCtrl', true); // 返回:'系统管理/系统配置/系统菜单'

getNumericValue

QF.getNumericValue(numCtrl) ⇒ number | null
获取数值控件的值。

ParamTypeDescription
numCtrlFineUICoreCtrl数值控件(或其它控件)

若控件值的不是有效数值,返回 null

getQueryString

QF.getQueryString(name) ⇒ string | null
获取当前页面查询字符串里指定的参数值。

ParamTypeDescription
namestring参数名

返回的值已被用 decodeURIComponent() 解码。

ifNull

QF.ifNull(v1, v2) ⇒ *
如果第一个值为null则返回第二个值。

ParamTypeDescription
v1*第一个值
v2*第二个值

如果俩个都为 null,返回空字符串,即始终不会返回 null

Example

QF.ifNull(123, 456);          // 返回 123
QF.ifNull(null, 'abc');       // 返回 'abc'
QF.ifNull(undefined, 'abc');  // 返回 'abc'
QF.ifNull('', 'abc');         // 返回 ''
QF.ifNull(undefined, null);   // 返回 ''

ifNullOrEmpty

QF.ifNullOrEmpty(v1, v2) ⇒ *

如果第一个值为null或空字符串则返回第二个值。

ParamTypeDescription
v1*第一个值
v2*第二个值

注意与 ifNull() 的区别,有可能返回 null

Example

QF.ifNullOrEmpty(123, 456);          // 返回 123
QF.ifNullOrEmpty(null, 'abc');       // 返回 'abc'
QF.ifNullOrEmpty(undefined, 'abc');  // 返回 'abc'
QF.ifNullOrEmpty('', 'abc');         // 返回 'abc'
QF.ifNullOrEmpty(undefined, null);   // 返回 null

jsonHighlighting

QF.jsonHighlighting(json, [space], [forceReParse]) ⇒ string
对 JSON 进行语法高亮处理,并返回加了高亮显示的 HTML。

ParamTypeDefaultDescription
jsonobject | string要处理的对象或 JSON 字符串
[space]number2缩进空格数
[forceReParse]booleanfalse是否强制重新解析

若输入是对象,将用 JSON.stringify(json) 转为字符串。
若输入是字符串,且 forceReParsetrue,将先用 JSON.parse(json) 取得 JSON 对象,再用 JSON.stringify() 转为字符串。
高亮效果参见内置的 已注册 CRUDProxy 列表 页面。

replaceWithHighlightedJson

QF.replaceWithHighlightedJson(container, json, [space], [forceReParse])
用高亮显示 JSON 的 HTML 替换容器内容。

ParamTypeDefaultDescription
containerjQueryElement目标容器元素
jsonobject | string要显示的对象或字符串
[space]number2缩进空格数
[forceReParse]booleanfalse是否强制重新解析

内部调用了 QF.jsonHighlighting() 取得高亮 JSON 的 HTML。

Example

QF.replaceWithHighlightedJson($('.my-json-area'), myObj);

resetDDLAndForceSetValue

QF.resetDDLAndForceSetValue(ddlCtrlOrID, value, [text])
重置下拉列表并强制选中指定的数据。
下拉列表里原有的选项将被清除,然后加入传入的项目并将其选中。
适用于单选下拉列表。

ParamTypeDescription
ddlCtrlOrIDstring | Element下拉列表ID 或 下拉列表控件
valuestring要选中的值
[text]string显示的文本,若未提供将与 value 相同

resetInputCtrls

QF.resetInputCtrls(ctrls)
重置输入控件。

ParamTypeDescription
ctrlsArray.<FineUICoreCtrl>控件数组
function resetFilter() {
  QF.resetInputCtrls([
    F.ui.ddlDeptRecursive,
    F.ui.ddlIsLocked,
    F.ui.ddlDataItem1Name,
    F.ui.ddlDataItem1Value
  ]);
}

safeOpenUrl

QF.safeOpenUrl(url, [noReferrer], [target]) ⇒ object
安全打开指定 url 并返回 window 对象。

ParamTypeDefaultDescription
urlstringurl 地址
[noReferrer]booleanfalse指示是否要让浏览器省略 Referer 标头
[target]string'_blank'

此方法可用来安全打开外部 url 网址。
url'http:''https:' 打头的地址时认为是外部网址,将确保打开的页面内取不到 opener,若 noReferrer 传入 true,则同时确保其取不到 referrer。
对于其它 url 将不做什么处理,效果等同 window.open(url)

selectGridRow

QF.selectGridRow(id, [gridCtrlOrID])
选取表格中指定的行。

ParamTypeDefaultDescription
idstring要选取的行的 id 值
[gridCtrlOrID]string | Element'gridCtrl'表格控件ID 或 表格控件

与表格自带的 selectRow() 方法的区别是:QF.selectGridRow() 会先检查列表里有没有 id 为指定值的行。

setGridCellVals

QF.setGridCellVals(id, data, [gridCtrlOrID]) ⇒ boolean
设置表格指定行的单元格的值。返回 true 表示设置成功,false 表示设置失败。

ParamTypeDefaultDescription
idstring要设置的行的 id 值
dataobject | string包含列名和值的对象。也可以是 JSON 字符串
[gridCtrlOrID]string | Element'gridCtrl'表格控件ID 或 表格控件

其中有对包含渲染函数的列以及扩展列的处理。

showWindow

QF.showWindow(urlOrOptions, [winTitle], [winCtrlOrID])
显示 iframe 窗口。窗体控件需要确保启用 IFrame。

ParamTypeDefaultDescription
urlOrOptionsstring | objectiframe 的 Url 字符串或配置对象
[winTitle]string窗口标题
[winCtrlOrID]string | Element'winCtrl'窗口控件ID 或 窗口控件

urlOrOptions 为配置对象时,后边参数将被忽略。其中的配置项有:

NameTypeDefaultDescription
urlstringiframe 的 Url
titlestring窗口标题
[width]number窗口宽度,若未提供将为窗体控件的初始宽度
[height]number窗口高度,若未提供将为窗体控件的初始高度
[maximized]booleanfalse是否最大化显示(前提:窗口控件启用了最大化)
[ctrlID]string'winCtrl'窗口控件ID

url 支持传入相对地址如 "~/path/page",内部将自动将其转换为绝对地址,确保了不论在哪调用都可以。

QF.showWindow('~/path/page', '页面标题');
QF.showWindow({
  url: '~/path/page',
  title: '页面标题',
  width: 800,
  height: 600
});

toBase64

QF.toBase64(s) ⇒ string
将字符串转换为Base64编码。

ParamTypeDescription
sstring要编码的字符串

toBase64Image

QF.toBase64Image(imgDom, [type]) ⇒ string
将图片转换为Base64编码图片字符串。

ParamTypeDefaultDescription
imgDomHTMLElement图片DOM元素
[type]string'png'图像类型:'png''jpeg'

toFixedOrInt

QF.toFixedOrInt(number, scale) ⇒ string
把数值转换为 固定小数位数或整数 字符串。

ParamTypeDefaultDescription
numbernumber要转换的数值
scalenumber0小数位数

不会返回小数点后全为 0 的结果,见示例:

QF.toFixedOrInt(1.23456, 2);   // 返回 '1.23'
QF.toFixedOrInt(5.6789, 2);    // 返回 '5.68'
QF.toFixedOrInt(1.23456, 0);   // 返回 '1'
QF.toFixedOrInt(5.6789, 0);    // 返回 '6'
QF.toFixedOrInt(1.23, 3);      // 返回 '1.230'
QF.toFixedOrInt(123, 3);       // 返回 '123'
QF.toFixedOrInt(1.999, 2);     // 返回 '2'

toggleParentCellsCssInTreeGrid

QF.toggleParentCellsCssInTreeGrid(rowId, [gridCtrlOrID], [cssClassName])
切换树形表格中,指定行的所有树字段对应父单元格的 CSS 类。

ParamTypeDefaultDescription
rowIdstring所在行的记录 id 值
[gridCtrlOrID]string | Element'gridCtrl'表格控件ID 或 表格控件
[cssClassName]string'qf-grid-tree-parent'要切换的CSS类名

此方法通常用来在树形表格列表里,高亮显示用户当前选取的行的,所有父行里的树字段对应的单元格,以方便看到节点路径:响应表格控件的 rowselect 客户端事件,在其中调用此方法:

function onGridRowSelect(e, rowId, rowIndex) {
  QF.toggleParentCellsCssInTreeGrid(rowId);
}

toggleParentNodesCss

QF.toggleParentNodesCss(treeCtrlOrID, childNodeID, [getFullPath], [cssClassName]) ⇒ string
切换树控件中指定字节的所有父节点的 CSS 类,同时返回该节点的文本路径。

ParamTypeDefaultDescription
treeCtrlOrIDstring | Element树控件ID 或 树控件(注意没有默认值,必须传入)
childNodeIDstring子节点ID
[getFullPath]booleanfalse指示是否获取完整路径,参见 getNodeTextPath() 方法说明
[cssClassName]string'qf-tree-parent'要切换的CSS类名

此方法通常用来高亮显示用户当前选取的节点的所有父节点,以方便看到节点路径:响应树控件的 nodeselect 客户端事件,在其中调用此方法:

function onTreeNodeSelect(e, nodeId) {
  var nodeTextPath = QF.toggleParentNodesCss('treeCtrl', nodeId);
  ...
}

toQueryString

QF.toQueryString(o, [noEmpty]) ⇒ string
将对象转换为查询字符串。

ParamTypeDefaultDescription
oobject要转换的对象
[noEmpty]booleantrue是否忽略空值

noEmpty==true,将忽略 o 里值为 null 或空字符串的属性。
始终不会返回 null,若无有效属性,将返回空字符串 ''。
属性值已被用 encodeURIComponent() 编码。

triggerSelectUser

QF.triggerSelectUser(userDDL, [options])
触发用户选取对话框。
将弹出内置的用户选取页面,并把选取结果自动填充到指定的下拉列表控件里。之前已选的用户还会被高亮显示。

ParamTypeDescription
userDDLstring | Element接收选取结果的下拉列表控件,可为控件ID 或 控件元素
[options]object选项

options 中的选项有:

NameTypeDescription
[deptCtrl]string | Element部门控件ID或部门控件(通常为一个部门下拉列表)。若提供了此选项,表示将要从 deptCtrl 所选的部门里选取用户,若尚未选部门,会弹出提示,提示内容则由 noDeptTips 选项指定
[noDeptTips]string尚未选部门时的提示信息,若未提供将使用一个默认提示
[deptId]string部门ID值,指示要从哪个部门里选取用户。deptCtrldeptId 选项不要同时提供。
[multiSelect]boolean指示是否多选,默认 false。注意若要多选,确保 userDDL 是一个多选下拉列表
[title]string窗口标题,若未提供将使用一个默认标题
[width]number窗口宽度,若未提供将为当前页面里窗体控件的初始宽度
[height]number窗口高度,若未提供将为当前页面里窗体控件的初始高度

v2.0.0+: 调取用户选取对话框时必须使用令牌,在 Razor 页面里可用基类提供的 RegisterSelUserContextTokenopen in new window 方法在页面初始化时生成。

trimEnd

QF.trimEnd(input, suffix, [ignoreCase]) ⇒ string
移除输入里所有以指定字符串结尾的部分。

ParamTypeDefaultDescription
inputany要处理的输入
suffixany要移除的尾部字符串
[ignoreCase]booleanfalse指示查找时是否忽略大小写

inputsuffix 将会先被用 QF.ensureString() 强制转为字符串再进行下一步处理。

trimEndOnce

QF.trimEndOnce(input, suffix, [ignoreCase]) ⇒ string
移除输入里尾部与指定字符串匹配的内容一次。

ParamTypeDefaultDescription
inputany要处理的输入
suffixany要移除的尾部字符串
[ignoreCase]booleanfalse指示查找时是否忽略大小写

inputsuffix 将会先被用 QF.ensureString() 强制转为字符串再进行下一步处理。

trimStart

QF.trimStart(input, prefix, [ignoreCase]) ⇒ string
移除输入里所有以指定字符串打头的部分。

ParamTypeDefaultDescription
inputany要处理的输入
prefixany要移除的头部字符串
[ignoreCase]booleanfalse指示查找时是否忽略大小写

inputprefix 将会先被用 QF.ensureString() 强制转为字符串再进行下一步处理。

trimStartOnce

QF.trimStartOnce(input, prefix, [ignoreCase]) ⇒ string
移除输入里头部与指定字符串匹配的内容一次。

ParamTypeDefaultDescription
inputany要处理的输入
prefixany要移除的头部字符串
[ignoreCase]booleanfalse指示查找时是否忽略大小写

inputprefix 将会先被用 QF.ensureString() 强制转为字符串再进行下一步处理。

trimTrailingZeros

QF.trimTrailingZeros(val) ⇒ string
移除小数字符串里的小数点后末尾的零。

ParamTypeDescription
valnumber | string数值或数值字符串

val 将会先被用 QF.ensureString() 强制转为字符串再进行下一步处理。