@opentiny/vue-search-box 3.27.1 → 3.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.css +10 -2
- package/index.js +1013 -978
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/types/index.type.d.ts +190 -0
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/utils/date.ts","../../src/utils/dropdown.ts","../../src/utils/index.ts","../../src/utils/tag.ts","../../src/composables/use-tag.ts","../../src/utils/validate.ts","../../src/composables/use-dropdown.ts","../../src/composables/use-match.ts","../../src/composables/use-checkbox.ts","../../src/composables/use-datepicker.ts","../../src/composables/use-num-range.ts","../../src/composables/use-edit.ts","../../src/composables/use-custom.ts","../../src/composables/use-init.ts","../../src/utils/zh_CN.ts","../../src/utils/en_US.ts","../../src/utils/i18n.ts","../../src/renderless.ts","../../src/components/first-level-panel.vue","../../src/components/second-level-panel.vue","../../src/pc.vue","../../src/index.ts","../../index.ts"],"sourcesContent":["/* eslint-disable prefer-rest-params */\n/**\n * Copyright (c) 2022 - present TinyVue Authors.\n * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.\n *\n * Use of this source code is governed by an MIT-style license.\n *\n * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,\n * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR\n * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.\n *\n */\n/**\n * 填充字符串,根据填充模式参数,在字符串前面或后面补充字附到指定的长度。\n *\n * fillChar('1', 3) // \"001\"\n * fillChar('1', 3, true) // \"100\"\n * fillChar('1', 3, true, ' ') // \"1 \"\n *\n * @param {String} string 被填充的字符串\n * @param {Number} length 填充到某个长度\n * @param {Boolean} [append=false] 是否在后面填充,默认为在前面填充\n * @param {String} [chr=\"0\"] 填充的字符,默认为0\n * @returns {String}\n */\nexport const fillChar = (string, length, append, chr = '0') => {\n if (typeof string === 'string' && typeof chr === 'string' && isNumber(length)) {\n let len = string.length - length\n\n if (len > 0) {\n return append ? string.substr(0, length) : string.substr(len, length)\n } else {\n const appendStr = []\n len = Math.abs(len) / chr.length\n\n for (; len > 0; len--) {\n appendStr.push(chr)\n }\n\n const s = appendStr.join('')\n\n return append ? string + s : s + string\n }\n }\n}\n\nexport const toString = Object.prototype.toString\nexport const hasOwn = Object.prototype.hasOwnProperty\n\nconst getProto = Object.getPrototypeOf\nconst fnToString = hasOwn.toString\nconst ObjectFunctionString = fnToString.call(Object)\n\nconst class2type = {\n '[object Error]': 'error',\n '[object Object]': 'object',\n '[object RegExp]': 'regExp',\n '[object Date]': 'date',\n '[object Array]': 'array',\n '[object Function]': 'function',\n '[object AsyncFunction]': 'asyncFunction',\n '[object String]': 'string',\n '[object Number]': 'number',\n '[object Boolean]': 'boolean'\n}\n\n/** 判断是否为 null / undefined */\nexport const isNull = (x: any) => x === null || x === undefined\n\n/**\n * 返回 JavaScript 对象的类型。\n *\n * 如果对象是 undefined 或 null,则返回相应的'undefined'或'null'。\n *\n * 其他一切都将返回它的类型'object'。\n *\n * typeOf( undefined ) === 'undefined'\n * typeOf() === 'undefined'\n * typeOf( window.notDefined ) === 'undefined'\n * typeOf( null ) === 'null'\n * typeOf( true ) === 'boolean'\n * typeOf( 3 ) === 'number'\n * typeOf( \"test\" ) === 'string'\n * typeOf( function (){} ) === 'function'\n * typeOf( [] ) === 'array'\n * typeOf( new Date() ) === 'date'\n * typeOf( new Error() ) === 'error'\n * typeOf( /test/ ) === 'regExp'\n *\n */\nexport const typeOf: (obj: any) => string = (obj) =>\n isNull(obj) ? String(obj) : class2type[toString.call(obj)] || 'object'\n\n/**\n * 判断对象是否为 object 类型。\n *\n * isObject({}) // true\n */\nexport const isObject = (obj: any) => typeOf(obj) === 'object'\n\n/**\n * 判断对象是否为 function 类型。\n *\n * isObject(function (){) // true\n\n */\nexport const isFunction = (fn: any) => ['asyncFunction', 'function'].includes(typeOf(fn))\n\n/**\n * 判断对象是否为简单对象。\n *\n * 即不是 HTML 节点对象,也不是 window 对象,而是纯粹的对象(通过 '{}' 或者 'new Object' 创建的)。\n *\n * let obj = {}\n * isPlainObject(obj) //true\n */\nexport const isPlainObject = (obj: any) => {\n if (!obj || toString.call(obj) !== '[object Object]') {\n return false\n }\n\n const proto = getProto(obj)\n if (!proto) {\n return true\n }\n\n const Ctor = hasOwn.call(proto, 'constructor') && proto.constructor\n return typeof Ctor === 'function' && fnToString.call(Ctor) === ObjectFunctionString\n}\n\n/**\n * 检查对象是否为空(不包含任何属性)。\n *\n * let obj = {}\n * isEmptyObject(obj) // true\n */\nexport const isEmptyObject = (obj: any) => {\n const type = typeOf(obj)\n\n if (type === 'object' || type === 'array') {\n for (const name in obj) {\n if (hasOwn.call(obj, name)) {\n return false\n }\n }\n }\n\n return true\n}\n\n/**\n * 判断对象是否为数字类型。\n *\n * isNumber(369) // true\n */\nexport const isNumber = (value: any) => typeof value === 'number' && isFinite(value)\n\n/**\n * 判断对象是否代表一个数值。\n *\n * isNumeric('-10') // true\n * isNumeric(16) // true\n * isNumeric(0xFF) // true\n * isNumeric('0xFF') // true\n * isNumeric('8e5') // true\n * isNumeric(3.1415) // true\n * isNumeric(+10) // true\n * isNumeric('') // false\n * isNumeric({}) // false\n * isNumeric(NaN) // false\n * isNumeric(null) // false\n * isNumeric(true) // false\n * isNumeric(Infinity) // false\n * isNumeric(undefined) // false\n */\nexport const isNumeric = (value: any) => value - parseFloat(value) >= 0\n\n/**\n * 判断对象是否为日期类型。\n *\n * let date = new Date()\n * isDate(date) // true\n */\nexport const isDate = (value) => typeOf(value) === 'date'\n\n/**\n * 判断两个值是否值相同且类型相同。\n *\n * 注:在 JavaScript 里 NaN === NaN 为 false,因此不能简单的用 === 来判断。\n *\n * isSame(1, 1) // true\n * isSame(NaN, NaN) // true\n */\nexport const isSame = (x: any, y: any) =>\n x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y))\n\n/** 判断是否是正则表达式 */\nexport const isRegExp = (value: any) => typeOf(value) === 'regExp'\n\nexport const isPromise = (val) => isObject(val) && isFunction(val.then) && isFunction(val.catch)\n\nconst daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nconst yyyymmddReg = new RegExp(\n '^(\\\\d{4})(/|-)(((0)?[1-9])|(1[0-2]))((/|-)(((0)?[1-9])|([1-2][0-9])|(3[0-1])))' +\n '?( ((0)?[0-9]|1[0-9]|20|21|22|23):([0-5]?[0-9])((:([0-5]?[0-9]))?(.([0-9]{1,6}))?)?)?$'\n)\nconst mmddyyyyReg = new RegExp(\n '^(((0)?[1-9])|(1[0-2]))(/|-)(((0)?[1-9])|([1-2][0-9])|(3[0-1]))?(/|-)?(\\\\d{4})' +\n '( ((0)?[0-9]|1[0-9]|20|21|22|23):([0-5]?[0-9])((:([0-5]?[0-9]))?(.([0-9]{1,6}))?)?)?$'\n)\nconst iso8601Reg = new RegExp(\n '^(\\\\d{4})-(((0)?[1-9])|(1[0-2]))-(((0)?[1-9])|([1-2][0-9])|(3[0-1]))T' +\n '(((0)?[0-9]|1[0-9]|20|21|22|23):([0-5]?[0-9])((:([0-5]?[0-9]))?(.([0-9]{1,6}))?)?)?(Z|([+-])' +\n '((0)?[0-9]|1[0-9]|20|21|22|23):?([0-5]?[0-9]))$'\n)\n\nconst dateFormatRegs = {\n 'y{1,4}': /y{1,4}/,\n 'M{1,2}': /M{1,2}/,\n 'd{1,2}': /d{1,2}/,\n 'h{1,2}': /h{1,2}/,\n 'H{1,2}': /H{1,2}/,\n 'm{1,2}': /m{1,2}/,\n 's{1,2}': /s{1,2}/,\n 'S{1,3}': /S{1,3}/,\n 'Z{1,1}': /Z{1,1}/\n}\n\nconst maxDateValues = {\n YEAR: 9999,\n MONTH: 11,\n DATE: 31,\n HOUR: 23,\n MINUTE: 59,\n SECOND: 59,\n MILLISECOND: 999\n}\n\nconst timezone1 = '-12:00,-11:00,-10:00,-09:30,-08:00,-07:00,-06:00,-05:00,-04:30,-04:00,-03:30,-02:00,-01:00'\nconst timezone2 = '-00:00,+00:00,+01:00,+02:00,+03:00,+03:30,+04:00,+04:30,+05:00,+05:30,+05:45,+06:00'\nconst timezone3 = '+06:30,+07:00,+08:00,+09:00,+10:00,+10:30,+11:00,+11:30,+12:00,+12:45,+13:00,+14:00'\nconst timezones = [].concat(timezone1.split(','), timezone2.split(','), timezone3.split(','))\n\nconst getTimezone = (date) => {\n const timezoneoffset = 0 - date.getTimezoneOffset() / 60\n let timezone\n\n if (timezoneoffset === 0) {\n timezone = 'Z'\n } else if (timezoneoffset > 0) {\n timezone = '+' + (timezoneoffset > 10 ? timezoneoffset : '0' + timezoneoffset) + '00'\n } else {\n timezone = (timezoneoffset < -10 ? timezoneoffset : '-0' + -timezoneoffset) + '00'\n }\n\n return timezone\n}\n\n/**\n * 判断年份是否为闰年。\n *\n * isLeapYear(2017) // false\n * isLeapYear(2000) // true\n *\n * @param {Number} year 年份\n * @returns {Boolean}\n */\nexport const isLeapYear = (year) => year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n\nconst getMilliseconds = (milliseconds) =>\n milliseconds > maxDateValues.MILLISECOND ? Number(String(milliseconds).substring(0, 3)) : milliseconds\n\nconst getDateFromData = ({ year, month, date, hours, minutes, seconds, milliseconds }) => {\n let daysInMonth = daysInMonths[month]\n\n if (isLeapYear(year) && month === 1) {\n daysInMonth += 1\n }\n\n if (date <= daysInMonth) {\n return new Date(year, month, date, hours, minutes, seconds, getMilliseconds(milliseconds))\n }\n}\n\nconst yyyymmddDateParser = (m) => {\n /* istanbul ignore else */\n if (m.length === 23) {\n const year = Number(m[1])\n const month = m[3] - 1\n const date = Number(m[9] || 1)\n const hours = m[15] || 0\n const minutes = m[17] || 0\n const seconds = m[20] || 0\n const milliseconds = m[22] || 0\n\n return getDateFromData({\n date,\n year,\n hours,\n month,\n seconds,\n minutes,\n milliseconds\n })\n }\n}\n\nconst mmddyyyyDateParser = (m) => {\n /* istanbul ignore else */\n if (m.length === 22) {\n const year = Number(m[12])\n const month = m[1] - 1\n const date = Number(m[6] || 1)\n const hours = m[14] || 0\n const minutes = m[16] || 0\n const seconds = m[19] || 0\n const milliseconds = m[21] || 0\n\n return getDateFromData({\n year,\n month,\n date,\n hours,\n minutes,\n seconds,\n milliseconds\n })\n }\n}\n\nconst iso8601DateParser = (m) => {\n if (m.length !== 25) {\n return\n }\n const year = Number(m[1])\n const month = m[2] - 1\n const date = Number(m[6])\n const offset = new Date(year, month, date).getTimezoneOffset()\n const hours = m[12] || 0\n const minutes = m[14] || 0\n const seconds = m[17] || 0\n const milliseconds = m[19] || 0\n let timeZone = m[20]\n const sign = m[21]\n const offsetHours = m[22] || 0\n const offsetMinutes = m[24] || 0\n let daysInMonth = daysInMonths[month]\n let actHours\n let actMinutes\n if (isLeapYear(year) && month === 1) {\n daysInMonth += 1\n }\n if (date <= daysInMonth) {\n if (timeZone === 'Z') {\n actHours = hours - offset / 60\n actMinutes = minutes\n } else {\n if (!timeZone.includes(':')) {\n timeZone = timeZone.substr(0, 3) + ':' + timeZone.substr(3)\n }\n if (!timezones.includes(timeZone)) {\n return\n }\n\n actHours = sign === '+' ? hours - offsetHours - offset / 60 : Number(hours) + Number(offsetHours) - offset / 60\n actMinutes = sign === '+' ? minutes - offsetMinutes : Number(minutes) + Number(offsetMinutes)\n }\n\n return new Date(year, month, date, actHours, actMinutes, seconds, getMilliseconds(milliseconds))\n }\n}\n\nconst dateParsers = [\n [yyyymmddReg, yyyymmddDateParser],\n [mmddyyyyReg, mmddyyyyDateParser],\n [iso8601Reg, iso8601DateParser]\n]\n\nconst parseDate = (str) => {\n for (let i = 0, len = dateParsers.length; i < len; i++) {\n const m = dateParsers[i][0].exec(str)\n\n if (m && m.length > 0) {\n return dateParsers[i][1](m)\n }\n }\n}\n\nconst matchDateArray = (arr, value, text) => {\n if (text) {\n switch (text) {\n case 'yyyy':\n case 'yy':\n arr[0] = value\n break\n case 'M':\n case 'MM':\n arr[1] = value - 1\n break\n case 'd':\n case 'dd':\n arr[2] = value\n break\n case 'h':\n case 'hh':\n arr[3] = value\n break\n case 'm':\n case 'mm':\n arr[4] = value\n break\n case 's':\n case 'ss':\n arr[5] = value\n break\n case 'S':\n case 'SS':\n case 'SSS':\n arr[6] = value\n break\n default:\n break\n }\n }\n}\n\nconst getDateArray = (str, dateFormat) => {\n const arr = [0, -1, 0, 0, 0, 0]\n\n if (str.length !== dateFormat.length) {\n return arr\n }\n\n let valuePos = 0\n let textPos = 0\n\n for (let i = 0, len = str.length; i < len; i++) {\n const charValue = str.substr(i, 1)\n const notNum = isNaN(Number(charValue)) || charValue?.trim() === ''\n\n if ((notNum && charValue === dateFormat.substr(i, 1)) || i === len - 1) {\n let value\n let text\n\n if (notNum) {\n value = str.substring(valuePos, i)\n valuePos = i + 1\n const end = dateFormat.indexOf(charValue, textPos)\n\n text = dateFormat.substring(textPos, end === -1 ? dateFormat.length : end)\n\n textPos = end + 1\n } else {\n value = str.substring(valuePos, len)\n text = dateFormat.substring(textPos, len)\n }\n\n if (value.length === text.length || value) {\n matchDateArray(arr, value, text)\n }\n }\n }\n\n return arr\n}\n\nconst invalideTime = (time, min, max) => isNaN(time) || time < min || time > max\n\nconst invalideValue = ({ year, month, date, hours, minutes, seconds, milliseconds }) =>\n invalideTime(year, 0, maxDateValues.YEAR) ||\n invalideTime(month, 0, maxDateValues.MONTH) ||\n invalideTime(date, 0, maxDateValues.DATE) ||\n invalideTime(hours, 0, maxDateValues.HOUR) ||\n invalideTime(minutes, 0, maxDateValues.MINUTE) ||\n invalideTime(seconds, 0, maxDateValues.SECOND) ||\n invalideTime(milliseconds, 0, maxDateValues.MILLISECOND)\n\nconst innerParse = (value, dateFormat) => {\n if (typeof dateFormat === 'string') {\n const arr = getDateArray(value, dateFormat)\n const year = Number(arr[0])\n const month = Number(arr[1])\n const date = Number(arr[2] || 1)\n const hours = Number(arr[3] || 0)\n const minutes = Number(arr[4] || 0)\n const seconds = Number(arr[5] || 0)\n const milliseconds = Number(arr[6] || 0)\n\n if (\n invalideValue({\n year,\n month,\n date,\n hours,\n minutes,\n seconds,\n milliseconds\n })\n ) {\n return\n }\n\n return getDateFromData({\n year,\n date,\n month,\n minutes,\n hours,\n milliseconds,\n seconds\n })\n } else {\n return parseDate(value)\n }\n}\n\n/**\n * 将字符串或数字转换成 Date 类型。\n *\n * toDate('2008/02/02') // new Date(2008, 1, 2)\n * toDate(Date.UTC(2008, 1, 2)) // new Date(Date.UTC(2008, 1, 2))\n * toDate('2008/2/2', 'yyyy/M/d') // new Date(2008, 1, 2)\n * toDate('2008/02') // new Date(2008, 1, 1)\n * toDate('02/2008') // new Date(2008, 1, 1)\n * toDate('2008-02-01T20:08+08:00') // new Date(Date.UTC(2008, 0, 31, 16))\n * toDate('2008-02-01T04:08-08:00') // new Date(Date.UTC(2008, 1, 1, 8))\n *\n * @param {String|Number} value 日期类型字符串或数字\n * @param {String} [dateFormat] 转换格式\n *\n * 当 value 为字符串类型时,如果不提供,则尽可能按常见格式去解析。\n * 常见格式为 yyyy[/-]MM[/-]dd hh:mm:ss.SSS, MM[/-]dd [/-]yyyy hh:mm:ss.SSS 及 ISO8601 时间格式。\n *\n * 如果提供,则按具体格式严格匹配解析,并且年份必须为4位。\n * - yyyy 代表年份\n * - M 或 MM 代表1位或2位的月份\n * - d 或 dd 代表1位或2位的天数\n * - h 或 hh 代表24小时的1位或2位的小时\n * - m 或 mm 代表1位或2位的分钟,\n * - s 或 ss 代表1位或2位的秒\n * - S 或 SS 或 SSS 代表1位或2位或3位的毫秒\n *\n * @param {String} [minDate] 最小时间,默认为 0001-01-01 00:00:00.000\n * @returns {Date}\n */\nexport const toDate = (value, dateFormat, minDate) => {\n let date\n\n if (isNumber(value)) {\n date = new Date(value)\n } else if (typeof value === 'string') {\n date = innerParse(value, dateFormat)\n }\n\n if (minDate) {\n const min = (minDate && toDate(minDate)) || new Date(1, 1, 1, 0, 0, 0)\n return date && date < min ? min : date\n }\n\n return date\n}\n\n/**\n * 将 Date 实例转换成日期字符串。\n * 当 date 为日期字符串时,如果只有2个参数,则第2个参数为格式化后的格式化字符串\n * 如果有3个参数,则第2个参数为转换的格式化参数,第3个参数为格式化后的格式化参数\n *\n * let date = new Date(2014, 4, 4, 1, 2, 3, 4)\n * format(date) // \"2014/05/04 01:02:03\"\n * format(date, 'yyyy/MM/dd hh:mm:ss.SSS') // \"2014/05/04 01:02:03.004\"\n * format(date, 'yyyy/MM/dd hh:mm:ss.SSSZ') // \"2014/05/04 01:02:03.004+0800\"\n * format(date, 'yyyy年MM月dd日 hh时mm分ss秒SSS毫秒') // \"2014年05月04日 01时02分03秒004毫秒\"\n * format('2008/01/02', 'yyyy/MM/dd hh:mm:ss.SSS') // \"2008/02/02 00:00:00.000\"\n * format('2014/01/02/03/04/05/06', 'yyyy/MM/dd/hh/mm/ss', 'yyyy年MM月dd日 hh时mm分ss秒') // \"2014年01月02日 03时04分05秒006毫秒\"\n *\n * @param {Date|String} date Date 实例或日期字符串\n * @param {String} [dateFormat='yyyy/MM/dd hh:mm:ss'] 转换格式\n *\n * 常见格式为 yyyy[/-]MM[/-]dd hh:mm:ss.SSS, MM[/-]dd [/-]yyyy hh:mm:ss.SSS 及 ISO8601 时间格式。\n *\n * 如果提供,则按具体格式严格匹配解析,并且年份必须为4位。\n * - yyyy 代表年份\n * - M 或 MM 代表1位或2位的月份\n * - d 或 dd 代表1位或2位的天数\n * - h 或 hh 代表24小时的1位或2位的小时\n * - m 或 mm 代表1位或2位的分钟,\n * - s 或 ss 代表1位或2位的秒\n * - S 或 SS 或 SSS 代表1位或2位或3位的毫秒\n *\n * @returns {String}\n */\nexport const format = function (date, dateFormat = 'yyyy/MM/dd hh:mm:ss') {\n if (isDate(date)) {\n if (typeof dateFormat === 'string') {\n const o = {\n 'y{1,4}': date.getFullYear(),\n 'M{1,2}': date.getMonth() + 1,\n 'd{1,2}': date.getDate(),\n 'h{1,2}': date.getHours(),\n 'H{1,2}': date.getHours(),\n 'm{1,2}': date.getMinutes(),\n 's{1,2}': date.getSeconds(),\n 'S{1,3}': date.getMilliseconds(),\n 'Z{1,1}': getTimezone(date)\n }\n\n Object.keys(o).forEach((k) => {\n const m = dateFormat.match(dateFormatRegs[k])\n\n if (k && m && m.length) {\n dateFormat = dateFormat.replace(m[0], k === 'Z{1,1}' ? o[k] : fillChar(o[k].toString(), m[0].length))\n }\n })\n\n return dateFormat\n }\n } else if (typeof date === 'string' && arguments.length >= 2) {\n let afterFormat = dateFormat\n\n if (arguments.length === 2) {\n dateFormat = undefined\n } else {\n afterFormat = arguments[2]\n }\n\n const dateValue = toDate(date, dateFormat)\n return dateValue ? format(dateValue, afterFormat) : ''\n }\n}\n\n/**\n * 将当前操作的时间变更时区,主要用于转换一个其他时区的时间。\n *\n * var date = new Date(2017, 0, 1)\n * getDateWithNewTimezone(date, 0, -2)\n *\n * @param {Date} date Date 实例或日期字符串\n * @param {Number} otz 原时区 -12~13\n * @param {Number} ntz 目标时区 -12~13 默认为当前时区\n * @param {Boolean} TimezoneOffset 时区偏移量\n * @returns {Date}\n */\nexport const getDateWithNewTimezone = (date, otz, ntz, timezoneOffset = 0) => {\n if (!isDate(date) || !isNumeric(otz) || !isNumeric(ntz) || !isNumeric(timezoneOffset)) {\n return\n }\n\n const otzOffset = -otz * 60\n const ntzOffset = -ntz * 60\n const dstOffeset = timezoneOffset * 60\n const utc = date.getTime() + otzOffset * 60000\n\n return new Date(utc - (ntzOffset - dstOffeset) * 60000)\n}\n\n/**\n * 按时区将 Date 实例转换成字符串。\n *\n * toDateStr(new Date(2017, 0, 1, 12, 30), 'yyyy/MM/dd hh:mm', 3) // \"2017/01/01 15:30\"\n * toDateStr('2008/01/02', 'yyyy/MM/dd hh:mm', 3) // \"2008/01/02 03:00\"\n *\n * @param {Date|String} date Date 实例或日期字符串\n * @param {String} dateFormat 转换格式\n * @param {Number} [timezone] 时区\n * @returns {String}\n */\nexport const toDateStr = (date, dateFormat, timezone) => {\n if (date && isNumeric(timezone)) {\n timezone = parseFloat(parseFloat(timezone).toFixed(2))\n\n date = getDateWithNewTimezone(isDate(date) ? date : new Date(toDate(date)), 0, timezone)\n }\n\n return format(date, dateFormat)\n}\n\n/**\n * 获取日期所在周的第一天,默认周一为第一天(可扩展周日为第一天)。\n *\n * getWeekOfFirstDay() // 返回当前日期所在周的周一同一时间\n * getWeekOfFirstDay(true) // 返回当前日期所在周的周日同一时间\n * getWeekOfFirstDay(new Date(2019, 8, 5)) // new Date(2019, 8, 2)\n * getWeekOfFirstDay(new Date(2019, 8, 5)), true) // new Date(2019, 8, 1)\n *\n * @param {Date} [date=new Date()] date 日期实例,默认当天\n * @param {Boolean} [isSunFirst] 是否设置周日为第一天,非必填\n * @returns {Date}\n */\nexport const getWeekOfFirstDay = (date, isSunFirst) => {\n typeof date === 'boolean' && (isSunFirst = date)\n isDate(date) || (date = new Date())\n\n const day = date.getDay()\n let dayOfMonth = date.getDate()\n\n if (day === 0) {\n !isSunFirst && (dayOfMonth -= 6)\n } else {\n dayOfMonth = dayOfMonth - day + (!isSunFirst && 1)\n }\n\n return new Date(date.getFullYear(), date.getMonth(), dayOfMonth)\n}\n\nconst TZRE = /(-|\\+)(\\d{2}):?(\\d{2})$/\n\nexport const getLocalTimezone = () => 0 - new Date().getTimezoneOffset() / 60\n\nexport const getStrTimezone = (value) => {\n const localTimeZone = getLocalTimezone()\n const match = typeof value === 'string' && value.match(TZRE)\n\n if (match) {\n const minoffset = Number(match[2]) + Number(match[3]) / 60\n value = minoffset * `${match[1]}1`\n }\n\n if (isNumber(value) && value >= -12 && value <= 12) {\n return value\n }\n\n return localTimeZone\n}\n","/**\n * 下拉框显隐\n * @param state 组件响应式数据\n * @param isShow 是否展示下拉框, 默认展示\n */\nexport const showDropdown = (state, isShow = true) => {\n if (isShow) {\n state.visibleTimer = setTimeout(() => {\n state.visible = true\n }, 0)\n } else {\n clearTimeout(state.visibleTimer)\n state.visibleTimer = null\n state.visible = false\n }\n}\n\n/**\n * 编辑下拉框显隐\n * @param state 组件响应式数据\n * @param isShow 是否展示编辑下拉框, 默认展示\n */\nexport const showPopover = (state, isShow = true) => {\n if (!state.instance) return\n state.popoverVisible = isShow\n const { dropdownRef } = state.instance\n\n if (isShow && dropdownRef.state.visible) {\n clearTimeout(Number(dropdownRef.state.timeout))\n dropdownRef.state.timeout = null\n dropdownRef.state.visible = false\n }\n}\n","export const debounce = (func: Function, delay = 200) => {\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const debounced = function (this: any, ...args: any) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n func.apply(this, args);\n timer = null;\n }, delay);\n };\n\n // 添加取消方法\n debounced.cancel = () => {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n };\n\n return debounced;\n}\n\nexport const isNumber = (value: any) => parseFloat(value).toString() !== 'NaN'\n\n/**\n * 深拷贝方法\n * @param obj 元数据\n * @returns\n */\nexport const deepClone = (obj) => {\n const objClone = Array.isArray(obj) ? [] : {}\n if (obj && typeof obj === 'object') {\n const keys = Object.keys(obj)\n if (keys.length) {\n keys.forEach((key) => {\n if (obj[key] && typeof obj[key] === 'object') {\n objClone[key] = deepClone(obj[key])\n } else {\n objClone[key] = obj[key]\n }\n })\n } else {\n return obj\n }\n }\n\n return objClone\n}\n\n/**\n * 过滤复制对象的key值\n * @param obj 复制对象\n * @param keysToOmit key值\n */\nexport const omitObj = (obj, keysToOmit = ['mergeTag', 'options', 'idMapKey']) => {\n const result = { ...obj }\n keysToOmit.forEach((key) => {\n delete result[key]\n })\n return result\n}\n\n","import type { ISearchBoxNewTag } from '../index.type.ts'\nimport { deepClone } from './index.ts'\nimport { showPopover } from './dropdown.ts'\n\n/**\n * 判断是否已选择此标签\n * @param state searchbox的state变量\n * @param itemValue 标签的value值\n * @param itemLabel 标签的label值,可选参数,默认为空字符串,一般用于当prevItem.label为空时\n * @return 已选择则返回true,未选择则返回false\n */\nexport const hasTagItem = (state, itemValue, itemLabel = '') => {\n const { valueMap, prevItem } = state\n const value = (prevItem.label || itemLabel) + itemValue\n return valueMap.has(value)\n}\n\n/**\n * 清空输入框的值\n * @param state searchbox的state变量\n */\nexport const resetInput = (state) => {\n state.propItem = {}\n state.inputValue = ''\n}\n\n/**\n * update:modelValue和change事件\n * @param emit vue的api\n * @param state searchbox的state变量\n * @param args 其他可选参数:\n * @param tagList 尾部添加的新标签数组\n * @param index 替换某标签的索引\n * @param newTag 表示替换的新标签,主要和索引共用\n * @param newValue 表示替换全部的model-value值\n * @param oldValue 表示旧的model-value值\n */\nexport const emitChangeModelEvent = ({ emit, state, nextTick, ...args }) => {\n showPopover(state, false)\n const { tagList = null, index = -1, newTag = null, newValue = null, oldValue = null, isEdit } = args\n if (!isEdit) {\n resetInput(state)\n }\n if (!tagList && index === -1 && !newValue) {\n return\n }\n\n const oldVal = oldValue || deepClone(state.innerModelValue)\n let innerModelValue = []\n \n if (newValue) {\n innerModelValue = [...newValue]\n } else if (index !== -1) {\n innerModelValue = [...state.innerModelValue]\n newTag ? innerModelValue.splice(index, 1, newTag) : innerModelValue.splice(index, 1)\n } else {\n innerModelValue = [...state.innerModelValue, ...tagList]\n }\n \n // 直接赋值新数组,确保 Vue 2 和 Vue 3 都能触发响应式更新\n state.innerModelValue = innerModelValue\n \n // 同步emit,确保立即触发 - Vue 2 需要立即更新才能逐步显示\n emit('update:modelValue', deepClone(innerModelValue))\n emit('change', deepClone(innerModelValue), oldVal)\n}\n\n/**\n * 创建新标签,防止多个地方创建的标签不一致,缺少某些属性\n * @param newTag 新标签对象\n * @return 生成的新标签对象\n */\nexport const createNewTag = (newTag: ISearchBoxNewTag) => newTag\n\n/**\n * 获取元素的唯一标识\n * @param props 组件入参对象\n * @param prevItem 当前标签父级对象\n * @param item 要生成的新标签对象\n * @return 此标签的唯一标识\n */\nexport const getTagId = (props, prevItem, item) => {\n const idKey = prevItem.idMapKey || props.idMapKey\n return item && item[idKey] !== undefined ? { [idKey]: item[idKey] } : null\n}\n","import { showDropdown } from '../utils/dropdown.ts'\nimport { emitChangeModelEvent } from '../utils/tag.ts'\nimport { deepClone } from '../utils/index.ts'\n\nexport function useTag({ props, state, emit, nextTick }) {\n let lastInputValue = deepClone(state.inputValue)\n\n const changeIsChecked = (tag) => {\n if (tag) {\n const parent = state.recordItems.find((item) => item.label === tag.label)\n if (parent && parent.options) {\n const child = parent.options.find((item) => item.label === tag.value)\n child && (child.isChecked = false)\n }\n }\n }\n\n const deleteTag = (tag) => {\n showDropdown(state, false)\n changeIsChecked(tag)\n const newValue = props.modelValue.filter((item) => item !== tag)\n emitChangeModelEvent({ emit, state, nextTick, newValue })\n }\n\n const clearTag = () => {\n showDropdown(state, false)\n props.modelValue.forEach((item) => changeIsChecked(item))\n state.propItem = {}\n state.inputValue = ''\n emitChangeModelEvent({ emit, state, nextTick, newValue: [] })\n emit('clear')\n }\n\n const backspaceDeleteTag = () => {\n if (state.inputValue) {\n return\n }\n if (state.propItem.label) {\n state.propItem = {}\n return\n }\n if (lastInputValue === '' && state.inputValue === '') {\n showDropdown(state, false)\n const lastIndex = props.modelValue.length - 1\n changeIsChecked(props.modelValue[lastIndex])\n const newValue = state.innerModelValue.slice(0, props.modelValue.length - 1)\n emitChangeModelEvent({ emit, state, nextTick, newValue })\n }\n lastInputValue = state.inputValue\n if (state?.instance?.refs?.inputRef?.$el) {\n state.instance.refs.inputRef.$el.click()\n }\n }\n\n return {\n deleteTag,\n clearTag,\n backspaceDeleteTag\n }\n}\n","import { createNewTag, getTagId } from './tag.ts'\nimport { isNumber, omitObj } from './index.ts'\n\n/**\n * 校验正常标签的值,并返回相应的新标签\n * @param instance searchbox 的 instance\n * @param state searchbox 的 state\n * @param props searchbox 的 props\n * @return 验证通过则返回新标签对象,否则返回null\n */\nexport const getVerifyTag = async (instance, state, props) => {\n const { prevItem, inputEditValue } = state\n const { operators } = prevItem\n const rest = omitObj(prevItem)\n let newTag = null\n let isPass = true\n\n await instance.$refs.formRef.validateField(['inputEditValue'], (errMsg) => {\n if (errMsg) {\n isPass = false\n }\n })\n\n if (isPass) {\n let id = null\n const operator = state.operatorValue && operators ? { operator: state.operatorValue } : null\n let value = inputEditValue\n const otherAttr = {}\n // 多选\n if (Array.isArray(inputEditValue)) {\n otherAttr.options = []\n value = ''\n inputEditValue.forEach((editValue) => {\n const item = state.currentEditValue.find((item) => item.label === editValue)\n const label = item?.label || editValue\n value = !value ? label : `${value} | ${label}`\n if (item) {\n const itemId = getTagId(props, prevItem, item)\n otherAttr.options.push({ label, ...itemId })\n } else {\n otherAttr.options.push({ label })\n }\n })\n } else if (Array.isArray(state.currentEditValue)) {\n // 单选\n const item = state.currentEditValue.find((item) => item.label === value)\n id = getTagId(props, prevItem, item)\n }\n\n newTag = createNewTag({ ...rest, label: state.selectValue, ...operator, value, ...id, ...otherAttr })\n }\n\n return newTag\n}\n\n/**\n * 校验 numRange 的值,并返回相应的新标签\n * @param instance searchbox 的 instance\n * @param state searchbox 的 state\n * @param props searchbox 的 props\n * @return 验证通过则返回新标签对象,否则返回null\n */\nexport const getVerifyNumTag = async (instance, state, props) => {\n const { prevItem } = state\n const minNum = `min${prevItem.field}`\n const maxNum = `max${prevItem.field}`\n const start = state[minNum]\n const end = state[maxNum]\n const verifyProps = [minNum, maxNum]\n let isPass = true\n let newTag = null\n await instance.$refs.formRef.validateField(verifyProps, (errMsg) => {\n if (errMsg) {\n isPass = false\n }\n })\n\n if (isPass) {\n const { field, label: prevLabel, unit, type, operators } = prevItem\n const label = unit ? `${prevLabel}(${unit})` : prevLabel\n let value = ''\n if (start && end) {\n value = `${start}-${end}`\n } else {\n value = start ? `≥${start}` : `≤${end}`\n }\n const id = getTagId(props, prevItem, prevItem)\n const operator = state.operatorValue && operators ? { operator: state.operatorValue } : null\n newTag = createNewTag({ type, field, label, value, ...id, start, end, ...operator })\n }\n\n return newTag\n}\n\n/**\n * 校验 dateRange datetimeRange 的值,并返回相应的新标签\n * @param instance searchbox 的 instance\n * @param state searchbox 的 state\n * @param props searchbox 的 props\n * @param isDateTimeType 是否 datetimeRange\n * @return 验证通过则返回新标签对象,否则返回null\n */\nexport const getVerifyDateTag = async (instance, state, props, isDateTimeType) => {\n const { prevItem, startDate, endDate, startDateTime, endDateTime } = state\n let start = null\n let end = null\n let isPass = true\n let newTag = null\n let verifyProps = null\n if (isDateTimeType) {\n start = startDateTime\n end = endDateTime\n verifyProps = ['startDateTime', 'endDateTime']\n } else {\n start = startDate\n end = endDate\n verifyProps = ['startDate', 'endDate']\n }\n\n await instance.$refs.formRef.validateField(verifyProps, (errMsg) => {\n if (errMsg) {\n isPass = false\n }\n })\n\n if (isPass) {\n const { operators } = prevItem\n const rest = omitObj(prevItem)\n let value = ''\n if (start && end) {\n if (start > end) {\n return\n } else if (start === end) {\n value = start\n } else {\n value = `${start}-${end}`\n }\n } else {\n value = start ? `≥${start}` : `≤${end}`\n }\n const id = getTagId(props, prevItem, prevItem)\n const operator = state.operatorValue && operators ? { operator: state.operatorValue } : null\n newTag = createNewTag({ ...rest, value, start, end, ...id, ...operator })\n }\n\n return newTag\n}\n\n/**\n * 按需加载 state 里 numRange 类型的变量,按需加载校验规则\n * @param state searchbox 的 state\n * @param item 当前选择的 item 值\n */\nexport const setStateNumRange = (state, item, t) => {\n const { prevItem } = state\n const { field, start, end, min = prevItem.min, max = prevItem.max } = item\n const nextMinNum = `min${field}`\n const nextMaxNum = `max${field}`\n if (state.curMinNumVar !== nextMinNum || state.curMaxNumVar !== nextMaxNum) {\n delete state[state.curMinNumVar]\n delete state[state.curMaxNumVar]\n delete state.formRules[state.curMinNumVar]\n delete state.formRules[state.curMaxNumVar]\n state.curMinNumVar = nextMinNum\n state.curMaxNumVar = nextMaxNum\n }\n state[state.curMinNumVar] = start\n state[state.curMaxNumVar] = end\n const { curMinNumVar, curMaxNumVar } = state\n const minIsNumber = isNumber(min)\n const maxIsNumber = isNumber(max)\n if (minIsNumber || maxIsNumber) {\n state.formRules[curMinNumVar] = {\n validator: (rule, value, cb) => {\n const valueIsNumber = isNumber(value)\n\n if (\n (!valueIsNumber && isNumber(state[curMaxNumVar])) ||\n (valueIsNumber &&\n ((minIsNumber && !maxIsNumber && value >= min) ||\n (!minIsNumber && maxIsNumber && value <= max) ||\n (value >= min && value <= max)))\n ) {\n cb()\n } else {\n state.numberShowMessage = Boolean(value || state[curMaxNumVar])\n cb(new Error(t('tvp.tvpSearchbox.rangeMinErr', [min, max])))\n }\n }\n }\n state.formRules[curMaxNumVar] = {\n validator: (rule, value, cb) => {\n const MinValueIsNumber = isNumber(state[curMinNumVar])\n const curMin = MinValueIsNumber && min < state[curMinNumVar] ? Number(state[curMinNumVar]) : min\n const curMinIsNumber = isNumber(curMin)\n const valueIsNumber = isNumber(value)\n\n if (\n (!valueIsNumber && MinValueIsNumber) ||\n (valueIsNumber &&\n ((curMinIsNumber && !maxIsNumber && value >= curMin) ||\n (!curMinIsNumber && maxIsNumber && value <= max) ||\n (value >= curMin && value <= max)))\n ) {\n cb()\n } else if (!valueIsNumber && !MinValueIsNumber) {\n cb(new Error(t('tvp.tvpSearchbox.rangeNumberTitle')))\n } else {\n cb(new Error(t('tvp.tvpSearchbox.rangeMaxErr')))\n }\n }\n }\n } else {\n state.formRules[curMaxNumVar] = {\n validator: (rule, value, cb) => {\n const curMin = state[curMinNumVar]\n const valueIsNumber = isNumber(value)\n const curMinIsNumber = isNumber(curMin)\n\n if (\n (valueIsNumber && !curMinIsNumber) ||\n (!valueIsNumber && curMinIsNumber) ||\n (valueIsNumber && curMinIsNumber && value >= Number(curMin))\n ) {\n cb()\n } else if (!valueIsNumber && !curMinIsNumber) {\n cb(new Error(t('tvp.tvpSearchbox.rangeNumberTitle')))\n } else {\n cb(new Error(t('tvp.tvpSearchbox.rangeMaxErr')))\n }\n }\n }\n }\n}\n","import { hasTagItem, resetInput, createNewTag, getTagId, emitChangeModelEvent } from '../utils/tag.ts'\nimport { showDropdown } from '../utils/dropdown.ts'\nimport { setStateNumRange } from '../utils/validate.ts'\nimport { deepClone, omitObj } from '../utils/index.ts'\n\nexport function useDropdown({ props, emit, state, t, format, nextTick, vm, cancelHandleInput }) {\n const instance = vm || state.instance\n const showValueItem = (item) => {\n const { start, end, type } = item\n state.backupList = item.options\n if (type === 'numRange') {\n setStateNumRange(state, item, t)\n } else if (type === 'dateRange') {\n const { dateRangeFormat } = state\n if (!state.startDate && start) {\n const newStart = format(start, dateRangeFormat)\n state.startDate = state.endDate < newStart ? null : newStart\n }\n if (!state.endDate && end) {\n const newEnd = format(end, dateRangeFormat)\n state.endDate = newEnd < state.startDate ? null : newEnd\n }\n } else if (type === 'datetimeRange') {\n const { datetimeRangeFormat } = state\n if (!state.startDateTime && start) {\n const newStart = format(start, datetimeRangeFormat)\n state.startDateTime = state.endDateTime < newStart ? null : newStart\n }\n if (!state.endDateTime && end) {\n const newEnd = format(end, datetimeRangeFormat)\n state.endDateTime = newEnd < state.startDateTime ? null : newEnd\n }\n } else if (state.backupList && type === 'checkbox') {\n state.filterList = state.backupList\n state.checkboxGroup = []\n state.backupList?.forEach((subItem) => {\n if (hasTagItem(state, subItem.label)) {\n state.checkboxGroup.push(`${item.label}${subItem.label}`)\n }\n subItem.isFilter = false\n })\n }\n\n if (type !== 'checkbox' && state.backupList?.length) {\n state.backupList?.forEach((option) => {\n option.isFilter = false\n option.isChecked = hasTagItem(state, option.label)\n })\n }\n\n state.currentOperators = null\n if (!state.backupList && !['dateRange', 'datetimeRange', 'numRange', 'custom'].includes(type)) {\n showDropdown(state, false)\n } else {\n showDropdown(state)\n }\n }\n\n const selectPropItem = (item) => {\n const { field, label } = item\n\n // 创建新对象而不是直接修改属性,确保 Vue 2 响应式检测\n state.propItem = { ...state.propItem, label }\n\n emit('first-level-select', field)\n\n const inputRef = instance.$refs?.inputRef\n state.prevItem = item\n state.backupPrevItem = item\n const { operators } = item\n if (operators?.length) {\n state.operatorValue = ''\n state.currentOperators = operators\n showDropdown(state)\n } else {\n state.operatorValue = ':'\n showValueItem(item)\n }\n state.inputValue = ''\n inputRef.focus()\n }\n\n const setOperator = (operator) => {\n state.operatorValue = operator\n showValueItem(state.prevItem)\n }\n\n /**\n * 更新modelValue值\n * @param prevItem items数组的第一层元素信息,用来识别此类型标签的某些属性作相应处理\n * @param item 当前选中的标签值信息\n * @param label 标签左侧的label\n * @param value 标签右侧值的value\n */\n const updateModelValue = (prevItem, item, label, value) => {\n const { replace, operators, mergeTag } = prevItem\n const rest = omitObj(prevItem)\n const { indexMap } = state\n const index = indexMap.get(label)\n const id = getTagId(props, prevItem, item)\n const operator = state.operatorValue && operators ? { operator: state.operatorValue } : null\n let newTag = null\n\n if (mergeTag) {\n const options = { label: value, ...id }\n if (index >= 0) {\n const newValue = `${state.innerModelValue[index].value} | ${value}`\n const newOptions = [...state.innerModelValue[index].options, options]\n newTag = createNewTag({ ...state.innerModelValue[index], value: newValue, options: newOptions })\n } else {\n newTag = createNewTag({ ...rest, label, value, options: [options] })\n }\n } else {\n newTag = createNewTag({ ...rest, label, value, ...id, ...operator })\n }\n if (hasTagItem(state, value, label)) {\n resetInput(state)\n return\n }\n showDropdown(state, false)\n\n const oldValue = deepClone(state.innerModelValue)\n let newValue = [] as any[]\n if ((replace || mergeTag) && index >= 0) {\n const cloned = [...state.innerModelValue]\n cloned.splice(index, 1)\n newValue = [...cloned, newTag]\n } else {\n newValue = [...state.innerModelValue, newTag]\n }\n emitChangeModelEvent({ emit, state, newValue, oldValue })\n }\n /**\n * 使用输入选项\n * @param val 输入框的值\n *\n */\n const selectInputValue = (val: string) => {\n if (state.propItem?.label) {\n selectRadioItem({ label: val })\n } else {\n createTag()\n }\n }\n\n /**\n * 选中单选标签\n * @param item 选中的标签option项\n * @param isPotential 是否为选择潜在匹配项,默认否。参数可选\n */\n const selectRadioItem = (item, isPotential = false) => {\n showDropdown(state, false)\n // 潜在匹配项没有prevItem\n if (isPotential) {\n state.prevItem = item\n state.backupPrevItem = item\n }\n\n const { prevItem } = state\n const value = item.value || item.label\n const inputRef = instance.$refs?.inputRef\n if (!hasTagItem(state, value)) {\n const tagLabel = state.propItem.label || item.label\n updateModelValue(prevItem, item, tagLabel, value)\n }\n inputRef.focus()\n }\n const hasNotInputValueCreateTag = (propItem, prevItem) => {\n // 有label\n if (propItem.label) {\n if (!prevItem.options) {\n return\n }\n\n const hasTag = props.modelValue.find((item) => item.value === prevItem.options[0].label)\n\n if (!hasTag) {\n const label = prevItem.label\n const value = prevItem.options && prevItem.options[0].label\n updateModelValue(prevItem, prevItem.options[0], label, value)\n return\n }\n } else {\n emit('search', state.innerModelValue)\n }\n }\n\n const newTagUpdateModelValue = (prevItem, propItem, tag) => {\n const item = state.backupList?.find((subItem) => subItem.label === tag)\n updateModelValue(prevItem, item, propItem.label, tag)\n }\n\n const hasInputValueCreateTag = (inputValue, propItem, prevItem) => {\n // 有label的情况\n if (propItem.label) {\n const { regexp, replace, type, mergeTag } = prevItem\n const tagList =\n (type !== 'checkbox' && replace) || (type === 'checkbox' && mergeTag)\n ? [inputValue]\n : inputValue.split(props.splitInputValue)\n\n if (regexp) {\n for (const tag of tagList) {\n if (regexp.test(tag)) {\n newTagUpdateModelValue(prevItem, propItem, tag)\n }\n }\n // 有输入且无正则\n } else {\n for (const tag of tagList) {\n newTagUpdateModelValue(prevItem, propItem, tag)\n }\n }\n // 无label的情况\n } else {\n const { items, defaultField } = props\n const currentItem =\n items.find((item) => {\n const { regexp } = item\n return regexp && regexp.test(state.inputValue)\n }) || (defaultField ? items.find((item) => item.field === defaultField) : state.allTypeAttri)\n const { replace, type, mergeTag } = currentItem\n const tagList =\n (type !== 'checkbox' && replace) || (type === 'checkbox' && mergeTag)\n ? [inputValue]\n : inputValue.split(props.splitInputValue)\n\n if (currentItem?.options?.length) {\n state.backupList = [...currentItem.options]\n state.backupList?.forEach((item) => {\n const label = item.value || item.label\n if (tagList.includes(label)) {\n item.isChecked = true\n }\n })\n }\n const label = currentItem.label\n for (const tag of tagList) {\n updateModelValue(currentItem, {}, label, tag)\n }\n }\n }\n\n const createTag = () => {\n const { inputValue, propItem, prevItem } = state\n // 取消 handleInput 的防抖,防止快速输入后回车导致面板弹出\n if (cancelHandleInput) {\n cancelHandleInput()\n }\n showDropdown(state, false)\n if (!inputValue) {\n // 输入为空的情况\n hasNotInputValueCreateTag(propItem, prevItem)\n } else {\n // 输入不为空的情况\n const { maxlength } = props\n if (maxlength && maxlength < inputValue.length) {\n emit('exceed', maxlength)\n return\n }\n\n hasInputValueCreateTag(inputValue, propItem, prevItem)\n }\n }\n\n // 帮助图标点击事件\n const helpClick = () => {\n emit('help')\n }\n\n return { selectPropItem, selectRadioItem, selectInputValue, createTag, helpClick, setOperator }\n}\n","// import { ref } from 'vue'\nimport Loading from '@opentiny/vue-loading'\nimport { debounce } from '../utils/index.ts'\nimport { hasTagItem, createNewTag, getTagId, emitChangeModelEvent } from '../utils/tag.ts'\nimport { showDropdown } from '../utils/dropdown.ts'\n\nconst escapeRegExp = (string) => string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\nconst getHighlightMatch = (labelRegex, label) => {\n const match = []\n let lastIndex = 0\n let result\n\n // 当正则表达式在label中找到匹配项时,不断进行匹配\n while ((result = labelRegex.exec(label)) !== null) {\n const startIndex = result.index // 获取当前匹配项的开始位置\n const endIndex = labelRegex.lastIndex // 获取当前匹配项的结束位置\n\n // 如果当前匹配项的开始位置大于上一次匹配项的结束位置,说明中间有未匹配的部分\n if (startIndex > lastIndex) {\n match.push(label.slice(lastIndex, startIndex)) // 将未匹配的部分添加到match数组中\n }\n\n match.push(label.slice(startIndex, endIndex)) // 将当前匹配项添加到match数组中\n lastIndex = endIndex // 更新上一次匹配项的结束位置\n }\n\n // 如果最后一次匹配项的结束位置小于label的长度,说明label的末尾还有未匹配的部分\n if (lastIndex < label.length) {\n match.push(label.slice(lastIndex)) // 将未匹配的部分添加到match数组中\n }\n\n return match\n}\n\nexport function useMatch({ props, state, emit, nextTick }) {\n // const loadingInstance = ref(null)\n\n const getMatchList = async (keyword: string) => {\n // if (typeof document !== 'undefined') {\n // !loadingInstance.value &&\n // (loadingInstance.value = Loading.service({\n // target: document.getElementById('potential-loading')\n // }))\n // }\n state.potentialOptions = await props.potentialOptions.getMatchList(keyword)\n // loadingInstance.value && loadingInstance.value.close()\n showDropdown(state, true)\n }\n\n const handleSearch = (e) => {\n const { recordItems, propItem } = state\n const raw = typeof e === 'string' ? e : (e && e.target && typeof e.target.value === 'string' ? e.target.value : state.inputValue || '')\n const inputValue = String(raw)?.trim()\n const { maxlength } = props\n\n if (maxlength && maxlength < inputValue.length) {\n emit('exceed', maxlength)\n return\n }\n\n if (inputValue.length === 0) {\n showDropdown(state)\n return\n }\n\n Object.keys(state.matchItems).forEach((key) => {\n state.matchItems[key].attr = []\n state.matchItems[key].attrValue = []\n })\n\n const value = escapeRegExp(inputValue)\n const patt = new RegExp(value, 'i')\n const hasItem =\n propItem.label || !value ? null : recordItems.find((item) => item.type === 'map' && patt.test(item.label))\n if (hasItem) {\n state.propItem = { ...state.propItem, label: hasItem.label }\n state.inputValue = ''\n state.prevItem = hasItem\n state.backupPrevItem = hasItem\n state.backupList = hasItem.options || []\n return\n }\n\n state.filterList = state.backupList?.filter((item) => {\n if (patt.test(item.label)) {\n delete item.isFilter\n if (hasTagItem(state, item.label)) {\n state.checkboxGroup.push(`${state.prevItem.label}${item.label}`)\n }\n\n return true\n } else {\n item.isFilter = true\n return false\n }\n })\n\n const labelRegex = new RegExp(value, 'ig')\n const hightlighStr = inputValue.toLowerCase()\n\n // 有label,只在backupList搜索\n if (state.propItem.label) {\n state.backupList?.forEach((item) => {\n item.hightlighStr = hightlighStr\n const itemLabel = item.label\n if (patt.test(itemLabel)) {\n item.match = getHighlightMatch(labelRegex, itemLabel)\n item.isFilter = false\n } else {\n item.isFilter = true\n }\n })\n // 添加默认选项,未匹配有输入值到也展示面板\n if (state.backupList?.length || inputValue) {\n showDropdown(state)\n } else {\n showDropdown(state, false)\n }\n return\n }\n\n // 无label,需要全局搜\n for (const item of recordItems) {\n const { options = [], groupKey = '0', ...rest } = item\n const itemLabel = rest.label\n if (patt.test(itemLabel)) {\n const match = getHighlightMatch(labelRegex, itemLabel)\n state.matchItems[groupKey].attr.push({ ...item, match, hightlighStr })\n }\n for (const option of options) {\n const optionLabel = state.propItem.label ? itemLabel : `${itemLabel}:${option.label}`\n if (patt.test(optionLabel)) {\n const match = getHighlightMatch(labelRegex, optionLabel)\n state.matchItems[groupKey].attrValue.push({\n ...option,\n ...rest,\n options,\n hightlighStr,\n value: option.label,\n match\n })\n }\n }\n }\n\n if (value && props.potentialOptions && props.potentialOptions.getMatchList) {\n getMatchList(value)\n } else {\n showDropdown(state)\n }\n }\n\n const handleInput = debounce(handleSearch, 500)\n\n // 保存取消函数,供外部调用\n const cancelHandleInput = () => {\n if (handleInput.cancel) {\n handleInput.cancel()\n }\n }\n\n const resetBackupList = () => {\n state.backupList?.forEach((item) => item.isFilter && delete item.isFilter)\n }\n\n const selectFirstMap = (item, isFirst) => {\n const { options } = item\n const { prevItem, propItem } = state\n if (options) {\n showDropdown(state, false)\n state.propItem = { ...state.propItem, value: `${item.label}=` }\n state.isShowTagKey = false\n state.inputValue = ''\n\n state.backupList = item.options || []\n resetBackupList()\n\n state.backupList?.forEach((subItem) => {\n const value = propItem.value + subItem.label\n subItem.isChecked = hasTagItem(state, value)\n })\n } else {\n if (item.isChecked) {\n return\n }\n\n showDropdown(state, false)\n state.isShowTagKey = true\n resetBackupList()\n const { field, type } = prevItem\n const value = propItem.value + item.label\n const id = getTagId(props, prevItem, item)\n const newTag = createNewTag({ type, field, label: propItem.label, value, ...id })\n const tagList = [newTag]\n emitChangeModelEvent({ emit, state, nextTick, tagList })\n }\n if (isFirst) {\n showDropdown(state)\n }\n }\n\n return {\n handleInput,\n selectFirstMap,\n cancelHandleInput\n }\n}\n","import { hasTagItem, createNewTag, getTagId, emitChangeModelEvent } from '../utils/tag.ts'\nimport { deepClone, omitObj } from '../utils/index.ts'\nimport { showDropdown } from '../utils/dropdown.ts'\n\nexport function useCheckbox({ props, state, emit, nextTick }) {\n const selectCheckbox = (confirm: boolean) => {\n showDropdown(state, false)\n const { checkboxGroup, prevItem, propItem } = state\n const rest = omitObj(prevItem)\n if (confirm) {\n const tagList = []\n const oldValue = deepClone(state.innerModelValue)\n const { mergeTag, operators, label: prevLabel } = prevItem\n if (mergeTag) {\n let value = ''\n const options = []\n const { indexMap } = state\n const hasTagIndex = indexMap.get(prevLabel)\n hasTagIndex !== undefined && state.innerModelValue.splice(hasTagIndex, 1)\n\n state.backupList?.forEach((item) => {\n const { label } = item\n const checkboxLabel = `${prevLabel}${label}`\n const hasItem = checkboxGroup.includes(checkboxLabel)\n if (hasItem) {\n delete item.isFilter\n const id = getTagId(props, prevItem, item)\n const newOptions = { label: item.label, ...id }\n value += !value ? label : ` | ${label}`\n options.push(newOptions)\n }\n })\n if (options.length > 0) {\n const newTag = { ...rest, value, options }\n tagList.push(newTag)\n }\n } else {\n const { valueMap } = state\n const indexList = []\n state.backupList?.forEach((item) => {\n const { label } = item\n const value = `${prevLabel}${label}`\n const hasItem = checkboxGroup.includes(value)\n if (hasItem && !hasTagItem(state, label)) {\n const id = getTagId(props, prevItem, item)\n const operator = state.operatorValue && operators ? { operator: state.operatorValue } : null\n const newTag = createNewTag({ ...rest, label: propItem.label, value: label, ...id, ...operator })\n tagList.push(newTag)\n item.isChecked = true\n } else if (!hasItem && hasTagItem(state, label)) {\n item.isChecked = false\n const index = valueMap.get(value)\n indexList.push(index)\n }\n })\n if (indexList.length) {\n const filtered = state.innerModelValue.filter((item, index) => item && !indexList.includes(index))\n // 直接通过 newValue 强制同步到 modelValue(Vue2 需要显式触发)\n emitChangeModelEvent({ emit, state, nextTick, newValue: filtered, oldValue })\n return\n }\n }\n emitChangeModelEvent({ emit, state, nextTick, tagList, oldValue })\n } else {\n state.propItem = { ...propItem, label: '' }\n state.inputValue = ''\n }\n }\n\n\n return {\n selectCheckbox,\n\n }\n}\n","import { showDropdown } from '../utils/dropdown.ts'\nimport { getVerifyDateTag } from '../utils/validate.ts'\nimport { emitChangeModelEvent } from '../utils/tag.ts'\n\nexport function useDatePicker({ props, state, emit, nextTick, vm }) {\n const instance = vm || state.instance\n const onConfirmDate = async (confirm: boolean, isDateTimeType = false) => {\n if (!confirm) {\n state.propItem = { label: '' } \n\n return\n }\n const newTag = await getVerifyDateTag(instance, state, props, isDateTimeType)\n if (newTag) {\n showDropdown(state, false)\n const newValue = props.modelValue.filter((prev) => prev.type !== newTag.type || prev.field !== newTag.field)\n newValue.push(newTag)\n emitChangeModelEvent({ emit, state, nextTick, newValue })\n } else {\n showDropdown(state)\n }\n }\n\n const handleDateShow = () => showDropdown(state)\n\n const pickerOptions = (startDate, endName = '') => ({\n disabledDate(time) {\n const { maxTimeLength = 0, min, max } = state.prevItem\n\n const endDate = state[endName]\n const curTime = time.getTime()\n // 有限制时间跨度timeLength时\n if (maxTimeLength > 0) {\n if (min || max) {\n if (endName && endDate) {\n const end = new Date(endDate).getTime()\n const start = !min && max ? end - maxTimeLength : Math.max(min.getTime(), end - maxTimeLength)\n return curTime < start || curTime > end\n } else if (!endName && startDate) {\n const start = new Date(startDate).getTime()\n const end = min && !max ? start + maxTimeLength : Math.min(max.getTime(), start + maxTimeLength)\n return curTime < start || curTime > end\n } else {\n return (min && curTime < min.getTime()) || (max && curTime > max.getTime())\n }\n } else {\n if (endName && endDate) {\n const end = new Date(endDate).getTime()\n const start = end - maxTimeLength\n return curTime < start || curTime > end\n } else if (!endName && startDate) {\n const start = new Date(startDate).getTime()\n const end = start + maxTimeLength\n return curTime < start || curTime > end\n } else {\n return false\n }\n }\n } else {\n if (min || max) {\n if (endName && endDate) {\n const end = new Date(endDate).getTime()\n return (min && curTime < min.getTime()) || curTime > end\n } else if (!endName && startDate) {\n const start = new Date(startDate).getTime()\n return curTime < start || (max && curTime > max.getTime())\n } else {\n return curTime < min || curTime > max\n }\n } else {\n if (endName && endDate) {\n const end = new Date(endDate).getTime()\n return curTime > end\n } else if (!endName && startDate) {\n const start = new Date(startDate).getTime()\n return curTime < start\n } else {\n return false\n }\n }\n }\n }\n })\n\n return {\n onConfirmDate,\n handleDateShow,\n pickerOptions\n }\n}\n","import { showDropdown } from '../utils/dropdown.ts'\nimport { getVerifyNumTag } from '../utils/validate.ts'\nimport { emitChangeModelEvent } from '../utils/tag.ts'\n\nexport function useNumRange({ props, state, t, emit, nextTick, vm }) {\n const instance = vm || state.instance\n const sizeChange = async (confirm: boolean) => {\n if (!confirm) {\n state.propItem = { ...state.propItem, label: '' }\n return\n }\n\n const newTag = await getVerifyNumTag(instance, state, props)\n if (newTag) {\n showDropdown(state, false)\n const newValue = props.modelValue.filter((prev) => prev.type !== newTag.type || prev.field !== newTag.field)\n newValue.push(newTag)\n emitChangeModelEvent({ emit, state, nextTick, newValue })\n } else {\n showDropdown(state)\n }\n }\n\n /**\n * 创建 type=dateRange 和 type = datetimeRange 的校验规则\n * @param startKey 校验的开始日期名\n * @param endKey 校验的结束日期名\n */\n const createDateRules = (item, startKey, endKey) => {\n const { maxTimeLength = 0 } = item\n return {\n [startKey]: {\n validator: (rule, value, cb) => {\n if (maxTimeLength > 0 && !value) {\n cb(new Error(t('tvp.tvpSearchbox.notBeNull')))\n } else if (!value && !state[endKey]) {\n cb(new Error(t('tvp.tvpSearchbox.rangeDateTitle')))\n } else {\n cb()\n }\n }\n },\n [endKey]: {\n validator: (rule, value, cb) => {\n if (maxTimeLength > 0 && !value) {\n cb(new Error(t('tvp.tvpSearchbox.notBeNull')))\n } else if (!value && !state[startKey]) {\n cb(new Error(t('tvp.tvpSearchbox.rangeDateTitle')))\n } else {\n cb()\n }\n }\n }\n }\n }\n\n const initFormRule = () => {\n let dateRules = {},\n datetimeRules = {}\n props.items.forEach((item) => {\n if (item.type === 'dateRange') {\n dateRules = createDateRules(item, 'startDate', 'endDate')\n }\n\n if (item.type === 'datetimeRange') {\n datetimeRules = createDateRules(item, 'startDateTime', 'endDateTime')\n }\n })\n state.formRules = {\n ...dateRules,\n ...datetimeRules\n }\n if (props.editable) {\n state.formRules.inputEditValue = {\n required: true,\n message: t('tvp.tvpSearchbox.notBeNull'),\n trigger: ['change', 'blur']\n }\n }\n }\n\n return {\n initFormRule,\n sizeChange\n }\n}\n","import { emitChangeModelEvent } from '../utils/tag.ts'\nimport { getVerifyNumTag, getVerifyDateTag, setStateNumRange, getVerifyTag } from '../utils/validate.ts'\nimport { showDropdown } from '../utils/dropdown.ts'\n\nexport function useEdit({ props, state, t, nextTick, format, emit, vm }) {\n const setDropdownProps = (curTag) => {\n const { operator, value, start, end } = curTag\n const { options, operators, type, mergeTag } = state.prevItem\n if (type === 'custom') {\n return\n } else if (type === 'numRange') {\n setStateNumRange(state, curTag, t)\n } else if (type === 'dateRange') {\n const { dateRangeFormat } = state\n state.startDate = format(start, dateRangeFormat)\n state.endDate = format(end, dateRangeFormat)\n } else if (type === 'datetimeRange') {\n const { datetimeRangeFormat } = state\n state.startDateTime = format(start, datetimeRangeFormat)\n state.endDateTime = format(end, datetimeRangeFormat)\n } else {\n if (mergeTag) {\n const labels = curTag.options?.flatMap((item) => item.label) || []\n // 多选编辑态,tiny-select multiple 需要数组\n state.inputEditValue = labels\n state.currentEditSelectTags = labels\n } else {\n // 其他场景使用字符串\n state.inputEditValue = Array.isArray(value) ? value.join(',') : (value || '')\n }\n state.currentEditValue = options\n }\n state.operatorValue = operator\n state.currentOperators = operators\n }\n\n // 检查表单校验状态\n const checkFormValidation = async () => {\n if (!state.instance?.$refs?.formRef) {\n return\n }\n\n const { prevItem } = state\n let verifyProps = []\n\n if (prevItem.type === 'numRange') {\n verifyProps = [state.curMinNumVar, state.curMaxNumVar]\n } else if (prevItem.type === 'dateRange') {\n verifyProps = ['startDate', 'endDate']\n } else if (prevItem.type === 'datetimeRange') {\n verifyProps = ['startDateTime', 'endDateTime']\n } else if (!['custom', 'map'].includes(prevItem.type)) {\n verifyProps = ['inputEditValue']\n }\n\n if (verifyProps?.length === 0) {\n state.hasFormError = false\n return\n }\n\n let hasError = false\n await state.instance.$refs.formRef.validateField(verifyProps, (errMsg) => {\n if (errMsg) {\n hasError = true\n }\n })\n\n state.hasFormError = hasError\n }\n\n const editTag = (tag, index, e) => {\n if (!props.editable || (tag.type && tag.type === 'map')) {\n return\n }\n\n showDropdown(state, false)\n state.popoverVisible = false\n const dom = e.target.classList.contains('tiny-tag') ? e.target : e.srcElement.parentElement\n\n nextTick(() => {\n const { popoverRef } = state.instance.$refs\n popoverRef.state.referenceElm = dom\n popoverRef.state.popperElm && (popoverRef.state.popperElm.style.display = 'none')\n popoverRef.doDestroy()\n state.popoverVisible = true\n // 打开编辑面板时检查校验状态\n checkFormValidation()\n })\n\n state.prevItem = state.recordItems.find((item) => item.field === tag.field)\n !state.prevItem && (state.prevItem = tag)\n state.selectValue = tag.label\n state.currentModelValueIndex = index\n\n emit('tagClick', tag)\n setDropdownProps(tag)\n }\n\n const selectPropChange = (item, disabled) => {\n if (disabled) return\n state.prevItem = item\n setDropdownProps(item)\n // 切换属性类型时检查校验状态\n nextTick(() => {\n checkFormValidation()\n })\n }\n\n const confirmEditTag = async (isConfirm) => {\n if (!isConfirm) {\n state.popoverVisible = false\n\n return\n }\n\n const { prevItem, currentModelValueIndex: index } = state\n\n let newTag = null\n if (prevItem.type === 'numRange') {\n newTag = await getVerifyNumTag(state.instance, state, props)\n } else if (prevItem.type === 'dateRange') {\n newTag = await getVerifyDateTag(state.instance, state, props, false)\n } else if (prevItem.type === 'datetimeRange') {\n newTag = await getVerifyDateTag(state.instance, state, props, true)\n } else {\n newTag = await getVerifyTag(state.instance, state, props)\n }\n\n if (newTag) {\n showDropdown(state, false)\n state.popoverVisible = false\n emitChangeModelEvent({ emit, state, nextTick, index, newTag, isEdit: true })\n } else {\n state.popoverVisible = true\n }\n\n state.currentEditValue = []\n }\n\n const selectItemIsDisable = (item) => {\n if (item.type && item.type === 'map') {\n return true\n }\n\n if (state.prevItem?.operators || item.operators) {\n return state.prevItem.operators?.length !== item.operators?.length\n }\n\n const typeArr = ['radio', 'checkbox']\n if (state.prevItem.type && typeArr.includes(state.prevItem.type)) {\n return !item.type ? false : !typeArr.includes(item.type)\n }\n\n return state.prevItem?.type !== item.type\n }\n\n return {\n editTag,\n confirmEditTag,\n selectPropChange,\n selectItemIsDisable,\n checkFormValidation\n }\n}\n","import { resetInput, emitChangeModelEvent, hasTagItem } from '../utils/tag.ts'\nimport { showDropdown, showPopover } from '../utils/dropdown.ts'\n\nexport function useCustom({ state, emit, nextTick }) {\n const updateCustomValue = (customTag) => {\n showDropdown(state, false)\n const { prevItem, indexMap } = state\n const { replace, label } = prevItem\n\n const tagList = []\n if (replace && indexMap.has(label)) {\n const index = indexMap.get(label)\n const newTag = { ...prevItem, ...customTag }\n emitChangeModelEvent({ emit, state, nextTick, newTag, index })\n\n return\n } else if (!replace && Array.isArray(customTag)) {\n customTag.forEach((tag) => {\n if (!hasTagItem(state, tag.value)) {\n tagList.push({ ...prevItem, ...tag })\n }\n })\n } else {\n if (!hasTagItem(state, customTag.value)) {\n tagList.push({ ...prevItem, ...customTag })\n }\n }\n emitChangeModelEvent({ emit, state, nextTick, tagList })\n }\n\n const handleConfirm = (customTag) => {\n if (!customTag) {\n resetInput(state)\n showDropdown(state, false)\n return\n }\n\n updateCustomValue(customTag)\n }\n\n const handleEditConfirm = (customTag) => {\n if (!customTag) {\n showPopover(state, false)\n return\n }\n\n updateCustomValue(customTag)\n }\n\n return {\n handleConfirm,\n handleEditConfirm\n }\n}\n","import { showDropdown, showPopover } from '../utils/dropdown.ts'\nimport { hasTagItem } from '../utils/tag.ts'\n\nexport function useInit({ props, state }) {\n const initItems = () => {\n state.groupItems = {}\n state.recordItems.forEach((item) => {\n const { groupKey = '0' } = item\n if (state.groupItems[groupKey]) {\n state.groupItems[groupKey].push({ ...item })\n } else {\n state.groupItems[groupKey] = [{ ...item }]\n state.matchItems[groupKey] = { attr: [], attrValue: [] }\n }\n if (state.prevItem && item.field === state.prevItem.field && item !== state.prevItem) {\n const { options, type } = item\n state.prevItem = item\n if (options?.length) {\n state.backupList = options\n }\n if (type === 'checkbox') {\n state.filterList = state.backupList\n state.checkboxGroup = []\n state.backupList?.forEach((subItem) => {\n const { label } = subItem\n if (hasTagItem(state, label)) {\n state.checkboxGroup.push(`${item.label}${label}`)\n }\n subItem.isFilter = false\n })\n }\n showDropdown(state, item.field === state.prevItem.field && item !== state.prevItem)\n }\n })\n }\n\n const handleClick = (e) => {\n const { backupPrevItem, prevItem } = state\n e.stopPropagation()\n if (props.editable) {\n state.popoverVisible = false\n state.currentEditValue = []\n if (state.propItem.label && backupPrevItem && backupPrevItem !== prevItem) {\n state.prevItem = backupPrevItem\n }\n }\n\n if (\n (state.hasBackupList && (state.backupList?.length === 0 || !state.backupList) && !state.inputValue) ||\n props.items.length === 0\n ) {\n showDropdown(state, false)\n } else {\n showDropdown(state)\n }\n }\n\n const watchOutsideClick = () => {\n if (props.editable) {\n showPopover(state, false)\n }\n\n state.isMouseDown = false\n showDropdown(state, false)\n }\n\n const watchMouseDown = () => {\n state.isMouseDown = true\n }\n\n const watchMouseMove = () => {\n if (state.isMouseDown) {\n state.isMouseDown = false\n }\n }\n\n return {\n initItems,\n watchOutsideClick,\n watchMouseDown,\n watchMouseMove,\n handleClick\n }\n}\n","export default {\n tvp: {\n tvpSearchbox: {\n defaultPlaceholder: '请选择属性筛选,或输入关键字',\n addPlaceholder: '添加筛选条件',\n tagPlaceholder: '请选择标签键/值搜索,或输入“键=值”搜索',\n dynamicPlaceholder: '请选择{newValue}搜索',\n attributeType: '属性类型',\n propertyValue: '{0}的值',\n matched: '潜在匹配项',\n allValues: '所有值',\n allProperty: '全部属性',\n operator: '运算符',\n clearAll: '清空',\n emptyValue: '空 值',\n help: '点击查看帮助',\n switchText: '切换到默认搜索项',\n tagKey: '键',\n tagValue: '值',\n minValueText: '最小值',\n maxValueText: '最大值',\n rangeMinErr: '输入值必须在{0}~{1}之间',\n rangeMaxErr: '最大值必须大于等于最小值,或者为空',\n rangeNumberTitle: '请至少输入一个值',\n rangeDateTitle: '请至少输入一个日期',\n timeLengthTitle: '可选时间跨度为{value}天内',\n rangeBeginLabel: '开始日期',\n rangeEndLabel: '结束日期',\n rulekeyword1: '关键字',\n notBeNull: '值不能为空',\n noData: '暂无匹配数据...',\n selectAll: '全选',\n confirm: '确定',\n cancel: '取消',\n equal: '等于',\n notEqual: '不等于',\n contain: '包含',\n notContain: '不包含',\n initUse: '搜索'\n }\n }\n}\n","export default {\n tvp: {\n tvpSearchbox: {\n defaultPlaceholder: 'Select attribute filtering or enter keywords',\n addPlaceholder: 'Add filtering criteria',\n tagPlaceholder: 'Please select tag key/value search, or enter \"key=value\" to search',\n dynamicPlaceholder: 'Please select {newValue} to search',\n attributeType: 'Attribute Type',\n propertyValue: 'The value of {0}',\n matched: 'Potential matching items',\n allValues: 'All values',\n allProperty: 'All Properties',\n operator: 'Operator',\n clearAll: 'Clear',\n emptyValue: 'Empty value',\n help: 'Click to view help',\n switchText: 'Switch to default search terms',\n tagKey: 'Key',\n tagValue: 'Value',\n minValueText: 'Minimum value',\n maxValueText: 'Maximum value',\n rangeMinErr: 'The input value must be between {0} and {1}',\n rangeMaxErr: 'The maximum value must be greater than or equal to the minimum value, or empty',\n rangeNumberTitle: 'Please enter at least one value',\n rangeDateTitle: 'Please enter at least one date',\n timeLengthTitle: 'The optional time span is within {value} days',\n rangeBeginLabel: 'Start date',\n rangeEndLabel: 'End date',\n rulekeyword1: 'Keywords',\n notBeNull: 'The value cannot be empty',\n noData: 'There is currently no matching data available ..',\n selectAll: 'Select All',\n confirm: 'Confirm',\n cancel: 'Cancel',\n equal: 'Equal',\n notEqual: 'Not equal',\n contain: 'Contain',\n notContain: 'Does not contain',\n initUse: 'Search'\n }\n }\n}\n","/**\n * 国际化工具函数\n * 如果使用组件库的项目有i18n则使用父级项目,如果没有则默认使用中文\n */\n\nimport zhCN from './zh_CN.ts'\nimport enUS from './en_US.ts'\n\n// 默认语言包\nconst defaultLocale = 'zh-CN'\nconst locales = {\n 'zh-CN': zhCN,\n 'en-US': enUS\n}\n\n// 全局应用实例\nlet globalApp: any = null\n\n/**\n * 设置全局应用实例\n * @param {any} app - Vue应用实例\n */\nexport const setGlobalApp = (app: any) => {\n globalApp = app\n}\n\n/**\n * 获取当前语言\n * @returns {string} 当前语言代码\n */\nexport const getCurrentLocale = () => {\n // Vue3: 从 config.globalProperties 获取\n if (globalApp?.config?.globalProperties?.$i18n?.locale) {\n return globalApp.config.globalProperties.$i18n.locale\n }\n\n // Vue2: 从 $i18n 获取(当传入的是包含 $i18n 的对象时)\n if (globalApp?.$i18n?.locale) {\n return globalApp.$i18n.locale\n }\n\n // 尝试从浏览器语言获取\n if (typeof navigator !== 'undefined') {\n const browserLang = navigator.language || navigator.languages?.[0]\n if (browserLang) {\n return browserLang.startsWith('zh') ? 'zh-CN' : 'en-US'\n }\n }\n\n return defaultLocale\n}\n\n/**\n * 获取语言包\n * @param {string} locale - 语言代码\n * @returns {Object} 语言包对象\n */\nexport const getLocaleMessages = (locale) => {\n return locales[locale] || locales[defaultLocale]\n}\n\n/**\n * 翻译函数\n * @param {string} key - 翻译键,格式为 'namespace.key.subkey'\n * @param {Object} params - 参数对象\n * @returns {string} 翻译后的文本\n */\nexport const t = (key, params = {}) => {\n if (!key) return ''\n\n // 尝试使用父级项目的i18n\n if (globalApp?.config?.globalProperties?.$t) {\n try {\n const result = globalApp.config.globalProperties.$t(key, params)\n if (result && result !== key) {\n return result\n }\n } catch (error) {\n console.warn('[TinySearchBox] i18n translation failed:', error)\n }\n }\n\n // 尝试使用Vue实例的$t方法\n if (globalApp?.$t) {\n try {\n const result = globalApp.$t(key, params)\n if (result && result !== key) {\n return result\n }\n } catch (error) {\n console.warn('[TinySearchBox] i18n translation failed:', error)\n }\n }\n\n // 使用默认语言包\n const locale = getCurrentLocale()\n const messages = getLocaleMessages(locale)\n\n // 解析key路径\n const keys = key.split('.')\n let result = messages\n\n for (const k of keys) {\n if (result && typeof result === 'object' && k in result) {\n result = result[k]\n } else {\n // 如果找不到,尝试使用默认语言\n if (locale !== defaultLocale) {\n const defaultMessages = getLocaleMessages(defaultLocale)\n result = defaultMessages\n for (const k2 of keys) {\n if (result && typeof result === 'object' && k2 in result) {\n result = result[k2]\n } else {\n result = key // 最终fallback\n break\n }\n }\n } else {\n result = key // fallback到key本身\n }\n break\n }\n }\n\n // 处理参数替换\n if (typeof result === 'string' && Object.keys(params).length > 0) {\n return result.replace(/\\{(\\w+)\\}/g, (match, paramKey) => {\n return params[paramKey] !== undefined ? params[paramKey] : match\n })\n }\n\n return typeof result === 'string' ? result : key\n}\n\n/**\n * 批量翻译函数\n * @param {Array} keys - 翻译键数组\n * @param {Object} params - 参数对象\n * @returns {Array} 翻译后的文本数组\n */\nexport const tArray = (keys, params = {}) => {\n return keys.map(key => t(key, params))\n}\n\n/**\n * 检查是否支持某个语言\n * @param {string} locale - 语言代码\n * @returns {boolean} 是否支持\n */\nexport const isLocaleSupported = (locale) => {\n return locale in locales\n}\n\n/**\n * 获取支持的语言列表\n * @returns {Array} 支持的语言代码数组\n */\nexport const getSupportedLocales = () => {\n return Object.keys(locales)\n}\n\n/**\n * 添加自定义语言包\n * @param {string} locale - 语言代码\n * @param {Object} messages - 语言包对象\n */\nexport const addLocale = (locale, messages) => {\n locales[locale] = messages\n}\n\n/**\n * 移除语言包\n * @param {string} locale - 语言代码\n */\nexport const removeLocale = (locale) => {\n if (locale !== defaultLocale) {\n delete locales[locale]\n }\n}\n\n// 默认导出\nexport default {\n t,\n zhCN,\n enUS,\n tArray,\n setGlobalApp,\n getCurrentLocale,\n getLocaleMessages,\n isLocaleSupported,\n getSupportedLocales,\n addLocale,\n removeLocale\n}\n","// 导入工具函数和类型\nimport { format } from './utils/date.ts'\nimport { useTag } from './composables/use-tag.ts'\nimport { useDropdown } from './composables/use-dropdown.ts'\nimport { useMatch } from './composables/use-match.ts'\nimport { useCheckbox } from './composables/use-checkbox.ts'\nimport { useDatePicker } from './composables/use-datepicker.ts'\nimport { useNumRange } from './composables/use-num-range.ts'\nimport { useEdit } from './composables/use-edit.ts'\nimport { useCustom } from './composables/use-custom.ts'\nimport { useInit } from './composables/use-init.ts'\n// 类型导入 - 兼容 Vue 2 和 Vue 3\nimport { showDropdown, showPopover } from './utils/dropdown.ts'\n\nimport { deepClone } from './utils/index.ts'\nimport { resetInput } from './utils/tag.ts'\nimport i18n, { t, getCurrentLocale } from './utils/i18n.ts'\nexport const api = [\n 't',\n 'state',\n 'isShowClose',\n 'showHelp',\n 'maxlength',\n 'panelMaxHeight',\n 'editable',\n 'emptyPlaceholder',\n 'deleteTag',\n 'editTag',\n 'backspaceDeleteTag',\n 'createTag',\n 'clearTag',\n 'helpClick',\n 'handleInput',\n 'handleClick',\n 'handleEvents',\n 'pickerOptions',\n 'resetInput',\n 'selectItemIsDisable',\n 'selectPropChange',\n 'confirmEditTag',\n 'handleConfirm',\n 'handleEditConfirm',\n 'showDropdown',\n 'showPopover'\n]\n\nconst initState = ({ reactive, computed, api, i18n, watch, props, emit, vm }) => {\n const state = reactive({\n innerModelValue: [...props.modelValue],\n placeholder: props.emptyPlaceholder || t('tvp.tvpSearchbox.addPlaceholder'),\n emitter: emit,\n recordItems: [],\n groupItems: {},\n inputValue: '',\n matchItems: {},\n propItem: {},\n backupList: [],\n filterList: [],\n checkboxGroup: [],\n prevItem: {},\n backupPrevItem: '',\n formRules: null,\n validType: 'text',\n numberShowMessage: true,\n startDate: null,\n startDateTime: null,\n endDate: null,\n endDateTime: null,\n isShowTagKey: true,\n potentialOptions: null,\n dateRangeFormat: 'yyyy/MM/dd',\n datetimeRangeFormat: 'yyyy/MM/dd HH:mm:ss',\n indexMap: new Map(),\n valueMap: new Map(),\n popoverVisible: false,\n selectValue: '',\n allTypeAttri: { label: t('tvp.tvpSearchbox.rulekeyword1'), field: 'tvpKeyword', type: 'radio' },\n operatorValue: ':',\n inputEditValue: '',\n currentOperators: '',\n currentEditValue: '',\n currentModelValueIndex: -1,\n curMinNumVar: '',\n curMaxNumVar: '',\n instance: null,\n isMouseDown: false,\n currentEditSelectTags: [],\n visible: false,\n visibleTimer: null,\n hasFormError: false, // 表单校验错误状态\n hasBackupList: computed(() => state.propItem.label && [undefined, 'radio', 'checkbox', 'map'].includes(state.prevItem.type)),\n isIndeterminate: computed(() => state.checkboxGroup.length > 0 && state.checkboxGroup.length !== state.filterList.length),\n checkAll: computed({\n get: () => state.checkboxGroup.length && state.checkboxGroup.length === state.filterList.length,\n set: (val) => {\n if (val) {\n state.checkboxGroup = state.filterList.flatMap((item) => `${state.prevItem.label}${item.label}`)\n } else {\n state.checkboxGroup = []\n }\n }\n })\n })\n return state\n}\n\nexport const renderless = (\n props,\n { getCurrentInstance, onMounted, onBeforeUnmount, computed, reactive, watch },\n { emit: $emit, nextTick, refs, vm }\n) => {\n const api = {} as any\n const emit = props.emitter ? props.emitter.emit : $emit\n const state = initState({ reactive, computed, api, i18n, watch, props, emit, vm })\n initAllApi({ api, state, t, props, emit, nextTick, vm, computed })\n initWatch({ watch, state, props, api, nextTick, vm })\n\n state.instance = vm\n\n // 生命周期\n onMounted(() => {\n if (typeof document !== 'undefined') {\n document.addEventListener('click', api.watchOutsideClick)\n document.addEventListener('mousedown', api.watchMouseDown)\n document.addEventListener('mousemove', api.watchMouseMove)\n }\n })\n\n onBeforeUnmount(() => {\n if (typeof document !== 'undefined') {\n document.removeEventListener('click', api.watchOutsideClick)\n document.removeEventListener('mousedown', api.watchMouseDown)\n document.removeEventListener('mousemove', api.watchMouseMove)\n // 清理语言检查定时器\n if (state.localeCheckInterval) {\n clearInterval(state.localeCheckInterval)\n state.localeCheckInterval = null\n }\n }\n })\n\n // 暴露给模板的方法\n return api\n}\n\n\nconst initAllApi = ({ api, state, t, props, emit, nextTick, vm, computed }) => {\n\n const { deleteTag, clearTag, backspaceDeleteTag } = useTag({ props, state, emit, nextTick })\n const { editTag, confirmEditTag, selectPropChange, selectItemIsDisable, checkFormValidation } = useEdit({ props, state, t, nextTick, format, emit, vm })\n const { handleInput, selectFirstMap, cancelHandleInput } = useMatch({ props, state, emit, nextTick })\n const { selectPropItem, selectRadioItem, selectInputValue, createTag, helpClick, setOperator } = useDropdown({ props, emit, state, t, format, nextTick, vm, cancelHandleInput })\n const { selectCheckbox } = useCheckbox({ props, state, emit, nextTick })\n const { onConfirmDate, handleDateShow, pickerOptions } = useDatePicker({ props, state, emit, nextTick, vm })\n const { sizeChange, initFormRule } = useNumRange({ props, state, t, emit, nextTick, vm })\n const { handleConfirm, handleEditConfirm } = useCustom({ state, emit, nextTick })\n const { initItems, watchOutsideClick, watchMouseDown, watchMouseMove, handleClick } = useInit({ props, state })\n\n const isShowClose = computed(() => props.modelValue.length || state.propItem.label || state.inputValue)\n\n const eventsMap = () => ({\n selectInputValue,\n selectPropItem,\n selectRadioItem,\n setOperator,\n selectCheckbox,\n sizeChange,\n onConfirmDate,\n selectFirstMap,\n handleDateShow\n })\n\n\n const setPlaceholder = (placeholderValue: string) => {\n state.placeholder = placeholderValue\n }\n\n // 默认显示 addPlaceholder\n if (props.modelValue.length > 0) {\n setPlaceholder(t('tvp.tvpSearchbox.addPlaceholder'))\n } else {\n setPlaceholder(t('tvp.tvpSearchbox.addPlaceholder'))\n }\n\n\n const handleEvents = (eventName, p1, p2) => {\n const map = eventsMap()\n if (typeof map[eventName] === 'function') {\n map[eventName](p1, p2)\n } else {\n console.warn(`[TinySearchBox] Unknown event: ${eventName}`)\n }\n }\n\n // 解构所有事件方法\n\n Object.assign(api, {\n t,\n state,\n isShowClose,\n deleteTag,\n editTag,\n backspaceDeleteTag,\n createTag,\n clearTag,\n helpClick,\n handleInput,\n handleClick,\n handleEvents,\n pickerOptions,\n resetInput,\n selectItemIsDisable,\n selectPropChange,\n confirmEditTag,\n handleConfirm,\n handleEditConfirm,\n showDropdown,\n showPopover,\n checkFormValidation,\n setPlaceholder,\n initItems,\n initFormRule,\n watchOutsideClick,\n watchMouseDown,\n watchMouseMove,\n })\n}\n\nconst initWatch = ({ watch, state, props, api, nextTick, vm }) => {\n // 更新 placeholder 的函数\n const updatePlaceholder = () => {\n if (state.propItem.label) {\n const { placeholder, type } = state.prevItem\n if (placeholder) {\n api.setPlaceholder(placeholder)\n } else if (type === 'map') {\n api.setPlaceholder(t('tvp.tvpSearchbox.tagPlaceholder'))\n } else if (state.backupList?.length) {\n api.setPlaceholder(t('tvp.tvpSearchbox.dynamicPlaceholder', { newValue: state.propItem.label }))\n } else {\n api.setPlaceholder(t('tvp.tvpSearchbox.addPlaceholder'))\n }\n } else {\n // 默认显示 addPlaceholder\n api.setPlaceholder(t('tvp.tvpSearchbox.addPlaceholder'))\n }\n }\n\n // 获取当前语言(优先从组件实例获取)\n const getI18nLocale = () => {\n // Vue2: 从组件实例获取\n if (vm?.$i18n?.locale) {\n return vm.$i18n.locale\n }\n // Vue3: 从组件实例获取\n if (vm?.proxy?.$i18n?.locale) {\n return vm.proxy.$i18n.locale\n }\n // 回退到默认方法\n return getCurrentLocale()\n }\n\n // 监听语言变化,重新设置 placeholder\n let lastLocale = getI18nLocale()\n\n // Vue2 环境下,使用 vm.$watch 监听 i18n.locale\n if (vm?.$i18n) {\n try {\n vm.$watch(\n () => vm.$i18n.locale,\n (newLocale) => {\n if (newLocale !== lastLocale) {\n lastLocale = newLocale\n updatePlaceholder()\n }\n },\n { immediate: false }\n )\n } catch (e) {\n console.warn('[TinySearchBox] Unable to watch i18n.locale via vm.$watch:', e)\n }\n }\n\n // Vue3 环境下,使用 watch 监听\n if (vm?.proxy?.$i18n) {\n try {\n watch(\n () => vm.proxy.$i18n.locale,\n (newLocale) => {\n if (newLocale !== lastLocale) {\n lastLocale = newLocale\n updatePlaceholder()\n }\n },\n { immediate: false }\n )\n } catch (e) {\n console.warn('[TinySearchBox] Unable to watch i18n.locale via watch:', e)\n }\n }\n\n // 备用方案:通过轮询检查语言变化\n const checkLocaleChange = () => {\n const currentLocale = getI18nLocale()\n if (currentLocale !== lastLocale) {\n lastLocale = currentLocale\n updatePlaceholder()\n }\n }\n\n // 使用定时器定期检查语言变化,存储在 state 中以便清理(降低频率到 200ms)\n if (typeof window !== 'undefined') {\n state.localeCheckInterval = setInterval(checkLocaleChange, 200)\n }\n\n // 监听 props.modelValue 变化时也检查语言\n watch(\n () => props.modelValue,\n () => {\n checkLocaleChange()\n }\n )\n\n // 监听器\n watch(\n () => props.items,\n (newVal) => {\n const wasOpen = state.visible\n const currentField = state.prevItem && state.prevItem.field\n\n state.recordItems = deepClone(newVal)\n api.initItems()\n api.initFormRule()\n nextTick(() => {\n api.initItems()\n api.initFormRule()\n\n // 如果二级面板已打开,则保持不关闭并刷新当前字段的选项\n if (wasOpen && state.propItem.label) {\n const updated = state.recordItems.find((it) => it.field === currentField) || state.prevItem\n state.prevItem = updated || {}\n state.backupList = updated && updated.options ? [...updated.options] : []\n state.filterList = state.backupList ? [...state.backupList] : []\n showDropdown(state) // 保持展开\n }\n })\n },\n {\n deep: true,\n immediate: true\n }\n )\n\n watch(\n () => state.inputValue,\n (newVal) => {\n if (!newVal && !state.propItem.type) {\n state.visible = false\n }\n },\n {\n immediate: true\n }\n )\n\n watch(\n () => state.popoverVisible,\n (newVal) => {\n if (!newVal && !state.inputEditValue.length) {\n if (state.prevItem && state.prevItem.mergeTag) {\n state.inputEditValue = Array.isArray(state.currentEditSelectTags)\n ? state.currentEditSelectTags\n : []\n } else {\n state.inputEditValue = Array.isArray(state.currentEditSelectTags)\n ? state.currentEditSelectTags.join(',')\n : (state.currentEditSelectTags || '')\n }\n }\n // 关闭编辑面板时重置校验错误状态\n if (!newVal) {\n state.hasFormError = false\n }\n },\n {\n immediate: true\n }\n )\n\n // 监听编辑面板相关字段变化,检查校验状态\n watch(\n () => {\n // 获取需要监听的字段值\n const fields = {\n inputEditValue: state.inputEditValue,\n startDate: state.startDate,\n endDate: state.endDate,\n startDateTime: state.startDateTime,\n endDateTime: state.endDateTime\n }\n // 如果是 numRange 类型,添加动态字段\n if (state.curMinNumVar && state.curMaxNumVar) {\n fields[state.curMinNumVar] = state[state.curMinNumVar]\n fields[state.curMaxNumVar] = state[state.curMaxNumVar]\n }\n return fields\n },\n () => {\n if (state.popoverVisible) {\n nextTick(() => {\n api.checkFormValidation()\n })\n }\n },\n { deep: true }\n )\n\n watch(\n () => state.propItem.label,\n (newValue) => {\n // 使用统一的更新函数\n updatePlaceholder()\n }\n )\n\n watch(\n () => props.modelValue,\n (newVal) => {\n if (newVal) {\n state.indexMap.clear()\n state.valueMap.clear()\n newVal.forEach((item, index) => {\n const value = `${item.label}${item.value}`\n state.indexMap.set(item.label, index)\n state.valueMap.set(value, index)\n if (item.options?.length > 0) {\n item.options.forEach((option) => {\n const optionValue = `${item.label}${option.label}`\n state.valueMap.set(optionValue, index)\n })\n }\n })\n showPopover(state, false)\n if (newVal.length === 0) {\n api.setPlaceholder(t('tvp.tvpSearchbox.addPlaceholder'))\n }\n\n if (props.editable && !state.inputEditValue.length && newVal[0]) {\n const tag = newVal[0]\n const prev = state.recordItems.find((it) => it.field === tag.field) || tag\n if (prev.mergeTag && tag.options) {\n const labels = tag.options.flatMap((o) => o.label) || []\n state.inputEditValue = labels\n state.currentEditSelectTags = labels\n } else {\n const v = tag.value\n state.inputEditValue = Array.isArray(v) ? v.join(',') : (v || '')\n }\n }\n state.innerModelValue = [...newVal]\n }\n },\n {\n deep: true,\n immediate: true\n }\n )\n}","<template>\n <div tiny_mode=\"pc\">\n <tiny-dropdown-item\n v-show=\"state.inputValue.trim()\"\n class=\"tvp-search-box__filter-item tvp-search-box__dropdown-item tvp-search-box__dropdown-item-init\"\n :item-data=\"{ label: state.inputValue }\"\n @item-click=\"() => selectInputValue(state.inputValue)\"\n >\n <span> {{ t('tvp.tvpSearchbox.initUse') }}"{{ state.inputValue }}"</span>\n </tiny-dropdown-item>\n <div v-show=\"!state.propItem.label && state.inputValue?.trim()\">\n <div\n v-for=\"(value, key) in state.matchItems\"\n :key=\"key\"\n >\n <div v-if=\"value['attr'].length\">\n <span class=\"tvp-search-box__filter-type\">{{ key === '0' ? t('tvp.tvpSearchbox.attributeType') : key }}</span>\n <tiny-dropdown-item\n v-for=\"(item, index) in value['attr']\"\n :key=\"item.label + index\"\n class=\"tvp-search-box__filter-item tvp-search-box__dropdown-item\"\n :item-data=\"item\"\n @item-click=\"() => selectPropItem(item)\"\n >\n <span>\n <span\n v-for=\"text in item.match\"\n :key=\"text\"\n >\n <span\n v-if=\"text.toLowerCase() === item.hightlighStr\"\n class=\"tvp-search-box__text-highlight\"\n >{{ text }}</span\n >\n <span v-else>{{ text }}</span>\n </span>\n </span>\n </tiny-dropdown-item>\n </div>\n <template v-if=\"value['attrValue'].length\">\n <span class=\"tvp-search-box__filter-type\">{{\n t('tvp.tvpSearchbox.propertyValue', [key === '0' ? t('tvp.tvpSearchbox.attributeType') : key])\n }}</span>\n <tiny-dropdown-item\n v-for=\"(item, index) in value['attrValue']\"\n :key=\"item.label + index\"\n :disabled=\"item.isChecked\"\n class=\"tvp-search-box__filter-item tvp-search-box__dropdown-item\"\n :item-data=\"item\"\n @item-click=\"() => selectRadioItem(item, true)\"\n >\n <span>\n <span\n v-for=\"text in item.match\"\n :key=\"text\"\n >\n <span\n v-if=\"text.toLowerCase() === item.hightlighStr\"\n class=\"tvp-search-box__text-highlight\"\n >{{ text }}</span\n >\n <span v-else>{{ text }}</span>\n </span>\n </span>\n </tiny-dropdown-item>\n </template>\n </div>\n <div v-show=\"state.potentialOptions\">\n <span class=\"tvp-search-box__filter-type\">{{ t('tvp.tvpSearchbox.matched') }}</span>\n <div\n id=\"potential-loading\"\n class=\"tvp-search-box__potential-box\"\n >\n <div v-if=\"state.potentialOptions\">\n <tiny-dropdown-item\n v-for=\"(item, index) in state.potentialOptions\"\n :key=\"item.label + index\"\n class=\"tvp-search-box__filter-item tvp-search-box__dropdown-item\"\n :item-data=\"item\"\n @item-click=\"() => selectRadioItem(item, true)\"\n >\n {{ item.label }}:\n <span class=\"tvp-search-box__text-highlight\">{{ item.value }}</span>\n </tiny-dropdown-item>\n </div>\n </div>\n </div>\n </div>\n <div\n v-show=\"state.visible && !state.propItem.label && !state.inputValue?.trim()\"\n class=\"tvp-search-box__first-panel\"\n >\n <div\n v-for=\"(group, key) in state.groupItems\"\n :key=\"key\"\n >\n <span\n v-if=\"group.length\"\n class=\"tvp-search-box__filter-type\"\n >{{ key === '0' ? t('tvp.tvpSearchbox.attributeType') : key }}</span\n >\n <tiny-dropdown-item\n v-for=\"(item, index) in group\"\n :key=\"(item.field || item.label) + index\"\n class=\"tvp-search-box__dropdown-item\"\n :item-data=\"item\"\n @item-click=\"() => selectPropItem(item)\"\n >\n <span :title=\"item.label\">{{ item.label }}</span>\n </tiny-dropdown-item>\n </div>\n </div>\n </div>\n</template>\n\n<script>\n// Vue2 版本,使用 tiny-vue 的 renderless 架构\nimport { defineComponent, setup, $props, $prefix } from '@opentiny/vue-common'\nimport TinyDropdownItem from '@opentiny/vue-dropdown-item'\nimport { t } from '../utils/i18n.ts'\n\n// 简单的 renderless 函数\nconst renderless = (props, hooks, { emit }) => {\n // 优先使用传入的 events/handleEvents 函数,如果没有则使用 emit\n const handleEvents =\n props.handleEvents ||\n props.events ||\n ((eventName, p1, p2) => {\n emit('events', eventName, p1, p2)\n })\n\n const selectInputValue = (e) => {\n handleEvents('selectInputValue', e)\n }\n\n const selectPropItem = (e) => {\n handleEvents('selectPropItem', e)\n }\n\n const selectRadioItem = (e, v) => {\n handleEvents('selectRadioItem', e, v)\n }\n\n return {\n selectInputValue,\n selectPropItem,\n selectRadioItem,\n t\n }\n}\n\nconst api = ['selectInputValue', 'selectPropItem', 'selectRadioItem', 't']\n\nexport default defineComponent({\n name: $prefix + 'SearchBoxFirstLevelPanel',\n components: {\n TinyDropdownItem\n },\n props: {\n ...$props,\n state: {\n type: Object,\n default: () => ({})\n },\n potentialOptions: {\n type: Array,\n default: () => []\n },\n events: {\n type: Function,\n default: null\n },\n handleEvents: {\n type: Function,\n default: null\n }\n },\n emits: ['events'],\n setup(props, context) {\n return setup({ props, context, renderless, api })\n }\n})\n</script>\n","<template>\n <div tiny_mode=\"pc\">\n <div v-if=\"state.currentOperators?.length\">\n <span class=\"tvp-search-box__filter-type\">{{\n t(\"tvp.tvpSearchbox.operator\")\n }}</span>\n <tiny-dropdown-item\n v-for=\"(item, index) in state.currentOperators\"\n v-show=\"item.includes(state.inputValue)\"\n :key=\"item + index\"\n class=\"tvp-search-box__dropdown-item\"\n :item-data=\"{ label: item }\"\n @item-click=\"() => setOperator(item)\"\n >\n {{ item }}\n </tiny-dropdown-item>\n </div>\n <div\n v-else-if=\"!state.prevItem.type || state.prevItem.type === 'radio'\"\n v-loading=\"isLoading\"\n :class=\"['tvp-search-box__radio-wrap', isLoading && 'tvp-search-box__loading-box']\"\n >\n <tiny-dropdown-item\n v-for=\"(item, index) in state.backupList\"\n v-show=\"!item.isFilter || !state.inputValue\"\n :key=\"index + (item.field || item.label)\"\n :disabled=\"item.isChecked\"\n class=\"tvp-search-box__dropdown-item\"\n :item-data=\"item\"\n @item-click=\"() => selectRadioItem(item)\"\n >\n <span v-if=\"item.match\" :title=\"item.label\">\n <span v-for=\"text in item.match\" :key=\"text\">\n <span\n v-if=\"text.toLowerCase() === item.hightlighStr\"\n class=\"tvp-search-box__text-highlight\"\n >{{ text }}</span\n >\n <span v-else>{{ text }}</span>\n </span>\n </span>\n <span v-else :title=\"item.label\">{{ item.label }}</span>\n </tiny-dropdown-item>\n </div>\n <div\n v-else-if=\"state.prevItem.type === 'checkbox'\"\n v-loading=\"isLoading\"\n :class=\"isLoading && 'tvp-search-box__loading-box'\"\n >\n <div v-if=\"showCheckBoxList\">\n <div class=\"tvp-search-box__checkbox-wrap\">\n <tiny-checkbox-group v-model=\"state.checkAll\" class=\"tvp-search-box__checkbox\">\n <tiny-dropdown-item\n class=\"tvp-search-box__dropdown-item tvp-search-box__checkbox-item\"\n >\n <tiny-checkbox\n v-model=\"state.checkAll\"\n :indeterminate=\"state.isIndeterminate\"\n >\n {{ t(\"tvp.tvpSearchbox.selectAll\") }}\n </tiny-checkbox>\n </tiny-dropdown-item>\n </tiny-checkbox-group>\n <tiny-checkbox-group\n v-model=\"state.checkboxGroup\"\n class=\"tvp-search-box__checkbox\"\n >\n <tiny-dropdown-item\n v-for=\"(item, index) in state.backupList\"\n v-show=\"!item.isFilter\"\n :key=\"(item.field || item.label) + index\"\n class=\"tvp-search-box__dropdown-item tvp-search-box__checkbox-item\"\n >\n <tiny-checkbox\n :label=\"state.prevItem.label + item.label\"\n :title=\"item.label\"\n class=\"tvp-search-box__checkbox-item-label\"\n >\n {{ item.label }}\n </tiny-checkbox>\n </tiny-dropdown-item>\n </tiny-checkbox-group>\n </div>\n <div class=\"tvp-search-box__checkbox-btn\">\n <tiny-button size=\"mini\" @click=\"selectCheckbox(false)\">\n {{ t(\"tvp.tvpSearchbox.cancel\") }}\n </tiny-button>\n <tiny-button size=\"mini\" @click=\"selectCheckbox(true)\">\n {{ t(\"tvp.tvpSearchbox.confirm\") }}\n </tiny-button>\n </div>\n </div>\n </div>\n <div v-else-if=\"state.prevItem.type === 'numRange'\" class=\"tvp-search-box__panel-box\">\n <div class=\"tvp-search-box__number\">\n <div class=\"tvp-search-box__dropdown-title\">\n {{ t(\"tvp.tvpSearchbox.rangeNumberTitle\") }}\n </div>\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t(\"tvp.tvpSearchbox.minValueText\") }}({{ state.prevItem.unit }})\n </div>\n <tiny-form-item\n :prop=\"state.curMinNumVar\"\n class=\"tvp-search-box__number-item\"\n :show-message=\"state.numberShowMessage\"\n >\n <tiny-input\n v-model=\"state[state.curMinNumVar]\"\n type=\"number\"\n class=\"tvp-search-box__number-input\"\n ></tiny-input>\n </tiny-form-item>\n <div class=\"tvp-search-box__dropdown-end\">\n {{ t(\"tvp.tvpSearchbox.maxValueText\") }}({{ state.prevItem.unit }})\n </div>\n <tiny-form-item :prop=\"state.curMaxNumVar\" class=\"tvp-search-box__number-item\">\n <tiny-input\n v-model=\"state[state.curMaxNumVar]\"\n type=\"number\"\n class=\"tvp-search-box__number-input\"\n ></tiny-input>\n </tiny-form-item>\n </div>\n <div class=\"tvp-search-box__bottom-btn\">\n <tiny-button size=\"mini\" @click=\"sizeChange(false)\">{{\n t(\"tvp.tvpSearchbox.cancel\")\n }}</tiny-button>\n <tiny-button size=\"mini\" @click.stop=\"sizeChange(true)\">\n {{ t(\"tvp.tvpSearchbox.confirm\") }}\n </tiny-button>\n </div>\n </div>\n <div\n v-else-if=\"state.prevItem.type === 'dateRange'\"\n class=\"tvp-search-box__panel-box\"\n >\n <div class=\"tvp-search-box__date-wrap\">\n <div class=\"tvp-search-box__dropdown-title\">\n {{\n state.prevItem.maxTimeLength > 0\n ? t(\"tvp.tvpSearchbox.timeLengthTitle\", {\n value: (state.prevItem.maxTimeLength / 86400000).toFixed(1),\n })\n : t(\"tvp.tvpSearchbox.rangeDateTitle\")\n }}\n </div>\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t(\"tvp.tvpSearchbox.rangeBeginLabel\") }}\n </div>\n <tiny-form-item\n prop=\"startDate\"\n :show-message=\"Boolean(state.prevItem.maxTimeLength)\"\n class=\"tvp-search-box__date-item\"\n >\n <tiny-date-picker\n v-model=\"state.startDate\"\n :format=\"state.prevItem.format || state.dateRangeFormat\"\n :value-format=\"state.prevItem.format || state.dateRangeFormat\"\n :picker-options=\"pickerOptions(state.startDate, 'endDate')\"\n class=\"tvp-search-box__date-picker\"\n @visible-change=\"handleDateShow\"\n ></tiny-date-picker>\n </tiny-form-item>\n <div class=\"tvp-search-box__dropdown-end\">\n {{ t(\"tvp.tvpSearchbox.rangeEndLabel\") }}\n </div>\n <tiny-form-item prop=\"endDate\" class=\"tvp-search-box__date-item\">\n <tiny-date-picker\n v-model=\"state.endDate\"\n :format=\"state.prevItem.format || state.dateRangeFormat\"\n :value-format=\"state.prevItem.format || state.dateRangeFormat\"\n :picker-options=\"pickerOptions(state.startDate)\"\n class=\"tvp-search-box__date-picker\"\n @change=\"handleDateShow\"\n @blur=\"handleDateShow\"\n ></tiny-date-picker>\n </tiny-form-item>\n </div>\n <div class=\"tvp-search-box__bottom-btn\">\n <tiny-button size=\"mini\" @click=\"onConfirmDate(false)\">\n {{ t(\"tvp.tvpSearchbox.cancel\") }}\n </tiny-button>\n <tiny-button size=\"mini\" @click=\"onConfirmDate(true)\">\n {{ t(\"tvp.tvpSearchbox.confirm\") }}\n </tiny-button>\n </div>\n </div>\n\n <div\n v-else-if=\"state.prevItem.type === 'datetimeRange'\"\n class=\"tvp-search-box__panel-box\"\n >\n <div class=\"tvp-search-box__date-wrap\">\n <div class=\"tvp-search-box__dropdown-title\">\n {{\n state.prevItem.maxTimeLength > 0\n ? t(\"tvp.tvpSearchbox.timeLengthTitle\", {\n value: (state.prevItem.maxTimeLength / 86400000).toFixed(1),\n })\n : t(\"tvp.tvpSearchbox.rangeDateTitle\")\n }}\n </div>\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t(\"tvp.tvpSearchbox.rangeBeginLabel\") }}\n </div>\n <tiny-form-item\n prop=\"startDateTime\"\n :show-message=\"Boolean(state.prevItem.maxTimeLength)\"\n class=\"tvp-search-box__date-item\"\n >\n <tiny-date-picker\n v-model=\"state.startDateTime\"\n type=\"datetime\"\n :isutc8=\"true\"\n :format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :value-format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :picker-options=\"pickerOptions(state.startDateTime, 'endDateTime')\"\n class=\"tvp-search-box__date-picker\"\n @change=\"handleDateShow\"\n @blur=\"handleDateShow\"\n ></tiny-date-picker>\n </tiny-form-item>\n <div class=\"tvp-search-box__dropdown-end\">\n {{ t(\"tvp.tvpSearchbox.rangeEndLabel\") }}\n </div>\n <tiny-form-item prop=\"endDateTime\" class=\"tvp-search-box__date-item\">\n <tiny-date-picker\n v-model=\"state.endDateTime\"\n type=\"datetime\"\n :isutc8=\"true\"\n :format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :value-format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :picker-options=\"pickerOptions(state.startDateTime)\"\n class=\"tvp-search-box__date-picker\"\n @change=\"handleDateShow\"\n @blur=\"handleDateShow\"\n ></tiny-date-picker>\n </tiny-form-item>\n </div>\n <div class=\"tvp-search-box__bottom-btn\">\n <tiny-button size=\"mini\" @click=\"onConfirmDate(false, true)\">\n {{ t(\"tvp.tvpSearchbox.cancel\") }}\n </tiny-button>\n <tiny-button size=\"mini\" @click=\"onConfirmDate(true, true)\">\n {{ t(\"tvp.tvpSearchbox.confirm\") }}\n </tiny-button>\n </div>\n </div>\n\n <div v-else-if=\"state.prevItem.type === 'map'\" v-loading=\"isLoading\">\n <span v-if=\"state.isShowTagKey\" class=\"tvp-search-box__filter-type\">{{\n t(\"tvp.tvpSearchbox.tagKey\")\n }}</span>\n <span v-else class=\"tvp-search-box__filter-type\">{{\n t(\"tvp.tvpSearchbox.tagValue\")\n }}</span>\n <tiny-dropdown-item\n v-for=\"(item, index) in state.backupList\"\n v-show=\"!item.isFilter\"\n :key=\"item.label + item.value + index\"\n :disabled=\"item.isChecked\"\n class=\"tvp-search-box__dropdown-item\"\n :item-data=\"item\"\n @item-click=\"() => selectFirstMap(item, state.isShowTagKey)\"\n >\n <span :title=\"item.label\">{{ item.label }}</span>\n </tiny-dropdown-item>\n </div>\n </div>\n</template>\n\n<script>\n// Vue2 版本,使用 tiny-vue 的 renderless 架构\nimport { defineComponent, setup, $props, $prefix } from '@opentiny/vue-common'\nimport TinyFormItem from '@opentiny/vue-form-item'\nimport TinyDropdownItem from '@opentiny/vue-dropdown-item'\nimport TinyCheckbox from '@opentiny/vue-checkbox'\nimport TinyCheckboxGroup from '@opentiny/vue-checkbox-group'\nimport TinyDatePicker from '@opentiny/vue-date-picker'\nimport TinyInput from '@opentiny/vue-input'\nimport TinyButton from '@opentiny/vue-button'\nimport TinyLoading from '@opentiny/vue-loading'\nimport { t } from '../utils/i18n.ts'\n\n// 简单的 renderless 函数\nconst renderless = (props, hooks, { emit }) => {\n const { computed } = hooks\n\n // 优先使用传入的 events/handleEvents 函数,如果没有则使用 emit\n const handleEvents = props.handleEvents || props.events || ((eventName, p1, p2) => {\n emit('events', eventName, p1, p2)\n })\n\n const setOperator = (e) => {\n handleEvents('setOperator', e)\n }\n\n const selectRadioItem = (e) => {\n handleEvents('selectRadioItem', e)\n }\n\n const selectCheckbox = (e) => {\n handleEvents('selectCheckbox', e)\n }\n\n const sizeChange = (e) => {\n handleEvents('sizeChange', e)\n }\n\n const onConfirmDate = (e, b) => {\n handleEvents('onConfirmDate', e, b)\n }\n\n const selectFirstMap = (e, b) => {\n handleEvents('selectFirstMap', e, b)\n }\n\n const handleDateShow = (e) => {\n handleEvents('handleDateShow', e)\n }\n\n const isLoading = computed(() => {\n return props.state.hasBackupList && props.state.backupList?.length === 0\n })\n\n const showCheckBoxList = computed(() => {\n return props.state.backupList?.find((item) => !item.isFilter)\n })\n\n return {\n setOperator,\n selectRadioItem,\n selectCheckbox,\n sizeChange,\n onConfirmDate,\n selectFirstMap,\n handleDateShow,\n isLoading,\n showCheckBoxList,\n t\n }\n}\n\nconst api = [\n 'setOperator',\n 'selectRadioItem',\n 'selectCheckbox',\n 'sizeChange',\n 'onConfirmDate',\n 'selectFirstMap',\n 'handleDateShow',\n 'isLoading',\n 'showCheckBoxList',\n 't'\n]\n\nexport default defineComponent({\n name: $prefix + 'SearchBoxSecondLevelPanel',\n emits: ['events'],\n components: {\n TinyFormItem,\n TinyDropdownItem,\n TinyCheckbox,\n TinyCheckboxGroup,\n TinyDatePicker,\n TinyInput,\n TinyButton\n },\n directives: {\n loading: TinyLoading.directive\n },\n props: {\n ...$props,\n state: {\n type: Object,\n default: () => ({}),\n },\n pickerOptions: {\n type: Function,\n default: () => {\n // do nothing.\n }\n },\n events: {\n type: Function,\n default: null\n },\n handleEvents: {\n type: Function,\n default: null\n },\n },\n setup(props, context) {\n return setup({ props, context, renderless, api })\n }\n})\n</script>\n","<template>\n <div\n :class=\"['tvp-search-box', size === 'small' ? 'tvp-search-box--small' : '']\"\n @click.stop=\"showPopover(state, false)\"\n >\n <tiny-icon-search class=\"tvp-search-box__prefix\" />\n <tiny-tag\n v-for=\"(tag, index) in modelValue\"\n :key=\"tag.field + index\"\n closable\n class=\"tvp-search-box__tag\"\n :class=\"editable && tag.type !== 'map' ? 'tvp-search-box__tag-editor' : ''\"\n :title=\"`${tag.label} ${tag.operator || ':'} ${tag.value}`\"\n @close=\"deleteTag(tag)\"\n @click.stop=\"editTag(tag, index, $event)\"\n >\n <span class=\"tvp-search-box__tag-value\"\n >{{ tag.label }} {{ tag.operator || ':'}} {{ tag.value }}\n </span>\n </tiny-tag>\n <span\n v-if=\"modelValue.length\"\n class=\"tvp-search-box__placeholder\"\n ></span>\n <tiny-form\n ref=\"formRef\"\n :model=\"state\"\n :rules=\"state.formRules\"\n :validate-type=\"state.validType\"\n :size=\"size === 'small' ? 'small' : ''\"\n label-width=\"0px\"\n message-type=\"block\"\n class=\"tvp-search-box__form\"\n >\n <div class=\"tvp-search-box__input-wrapper\">\n <section class=\"tvp-search-box__prop\">\n <span v-show=\"state.propItem.label\"\n >{{ state.propItem.label }} {{\n `${state.operatorValue ? state.operatorValue : \"\"} `\n }}</span\n >\n <span v-show=\"state.propItem.value\">{{ state.propItem.value }}</span>\n </section>\n <tiny-dropdown\n ref=\"dropdownRef\"\n v-model:visible=\"state.visible\"\n trigger=\"click\"\n class=\"tvp-search-box__dropdown\"\n :show-icon=\"false\"\n :size=\"size === 'small' ? 'small' : ''\"\n lazy-show-popper\n :close-on-click-outside=\"true\"\n >\n <tiny-input\n ref=\"inputRef\"\n v-model=\"state.inputValue\"\n class=\"tvp-search-box__input\"\n :placeholder=\"state.placeholder\"\n :maxlength=\"maxlength && maxlength + 1\"\n @keydown.delete.stop=\"backspaceDeleteTag\"\n @keydown.enter.stop=\"createTag\"\n @input=\"handleInput\"\n @click=\"handleClick\"\n >\n <template #suffix>\n <tiny-icon-close\n v-show=\"isShowClose\"\n class=\"tvp-search-box__input-close\"\n @click.stop=\"clearTag\"\n />\n <span\n v-show=\"isShowClose\"\n class=\"tvp-search-box__input-separator\"\n ></span>\n <tiny-tooltip\n v-if=\"showHelp\"\n effect=\"light\"\n :content=\"t('tvp.tvpSearchbox.help')\"\n placement=\"top\"\n >\n <tiny-icon-help-query\n class=\"tvp-search-box__input-help\"\n @click.stop=\"helpClick\"\n />\n </tiny-tooltip>\n <tiny-icon-search\n class=\"tvp-search-box__input-search\"\n @click.stop=\"createTag\"\n />\n </template>\n </tiny-input>\n <template #dropdown>\n <tiny-dropdown-menu\n placement=\"bottom-start\"\n popper-class=\"tvp-search-box__dropdown-menu\"\n :style=\"{ 'max-height': panelMaxHeight }\"\n @mouseup.stop=\"() => {}\"\n >\n <div v-show=\"!state.propItem.label || state.inputValue?.trim()\">\n <slot\n v-if=\"state.instance?.slots['first-panel']\"\n name=\"first-panel\"\n v-bind=\"{\n state,\n handleEvents\n }\"\n @click.stop\n ></slot>\n <TinySearchBoxFirstLevelPanel\n v-else\n :state=\"state\"\n :handleEvents=\"handleEvents\"\n >\n </TinySearchBoxFirstLevelPanel>\n </div>\n <div v-show=\"state.propItem.label\">\n <slot\n v-if=\"state.instance?.slots['second-panel']\"\n name=\"second-panel\"\n v-bind=\"{\n state,\n pickerOptions,\n handleEvents,\n back: () => resetInput(state)\n }\"\n @click.stop\n ></slot>\n <TinySearchBoxSecondLevelPanel\n v-else-if=\"state.prevItem.type !== 'custom'\"\n :state=\"state\"\n :picker-options=\"pickerOptions\"\n @events=\"handleEvents\"\n ></TinySearchBoxSecondLevelPanel>\n <div\n v-else\n class=\"tvp-search-box__panel-box\"\n @click=\"showDropdown(state)\"\n >\n <slot\n :name=\"state.prevItem.slotName\"\n v-bind=\"{\n showDropdown: () => showDropdown(state),\n onConfirm: handleConfirm\n }\"\n @click.stop\n ></slot>\n </div>\n </div>\n </tiny-dropdown-menu>\n </template>\n </tiny-dropdown>\n </div>\n\n <template v-if=\"editable\">\n <tiny-popover\n ref=\"popoverRef\"\n v-model=\"state.popoverVisible\"\n placement=\"bottom-start\"\n :visible-arrow=\"false\"\n trigger=\"manual\"\n popper-class=\"tvp-search-box__popover\"\n class=\"tvp-search-box__form-popover\"\n >\n <template v-if=\"state.prevItem.type !== 'custom'\">\n <div class=\"tvp-search-box__date-wrap\">\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t('tvp.tvpSearchbox.attributeType') }}\n </div>\n <tiny-form-item class=\"tvp-search-box__number-item\">\n <tiny-select\n v-model=\"state.selectValue\"\n searchable\n :disabled=\"state.prevItem.editAttrDisabled\"\n >\n <tiny-option\n :key=\"state.allTypeAttri.label\"\n :label=\"t('tvp.tvpSearchbox.allProperty')\"\n :value=\"state.allTypeAttri.label\"\n :disabled=\"selectItemIsDisable(state.allTypeAttri)\"\n @click=\"\n selectPropChange(\n state.allTypeAttri,\n selectItemIsDisable(state.allTypeAttri)\n )\n \"\n >\n </tiny-option>\n <tiny-option\n v-for=\"item in state.recordItems\"\n :key=\"item.label\"\n :label=\"item.label\"\n :value=\"item.label\"\n :disabled=\"selectItemIsDisable(item)\"\n @click=\"selectPropChange(item, selectItemIsDisable(item))\"\n >\n </tiny-option>\n </tiny-select>\n </tiny-form-item>\n <div\n v-if=\"state.prevItem.operators\"\n class=\"tvp-search-box__dropdown-end\"\n >\n {{ t('tvp.tvpSearchbox.operator') }}\n </div>\n <tiny-form-item\n v-if=\"state.prevItem.operators\"\n class=\"tvp-search-box__number-item\"\n >\n <tiny-select v-model=\"state.operatorValue\">\n <tiny-option\n v-for=\"item in state.currentOperators\"\n :key=\"item\"\n :label=\"item\"\n :value=\"item\"\n >\n </tiny-option>\n </tiny-select>\n </tiny-form-item>\n <div\n v-if=\"state.prevItem.type !== 'numRange'\"\n class=\"tvp-search-box__dropdown-end\"\n >\n {{ t('tvp.tvpSearchbox.tagValue') }}\n </div>\n <tiny-form-item\n v-if=\"!['numRange', 'dateRange', 'datetimeRange', 'custom'].includes(state.prevItem.type)\"\n prop=\"inputEditValue\"\n class=\"tvp-search-box__number-item\"\n >\n <tiny-select\n v-if=\"state.currentEditValue?.length > 0\"\n v-model=\"state.inputEditValue\"\n class=\"tvp-search-box-select\"\n :multiple=\"Boolean(state.prevItem.mergeTag)\"\n :allow-create=\"state.prevItem?.allowCreate\"\n filterable\n default-first-option\n clearable\n >\n <tiny-option\n v-for=\"item in state.currentEditValue\"\n :key=\"item.label\"\n :label=\"item.label\"\n :value=\"item.label\"\n >\n </tiny-option>\n </tiny-select>\n <tiny-input\n v-else\n v-model=\"state.inputEditValue\"\n clearable\n ></tiny-input>\n </tiny-form-item>\n <div\n v-if=\"state.prevItem.type === 'numRange'\"\n class=\"tvp-search-box__number\"\n >\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t('tvp.tvpSearchbox.minValueText') }}({{ state.prevItem.unit }})\n </div>\n <tiny-form-item\n :prop=\"state.curMinNumVar\"\n class=\"tvp-search-box__number-item\"\n :show-message=\"state.numberShowMessage\"\n >\n <tiny-input\n v-model=\"state[state.curMinNumVar]\"\n type=\"number\"\n class=\"tvp-search-box__number-input\"\n ></tiny-input>\n </tiny-form-item>\n <div class=\"tvp-search-box__dropdown-end\">\n {{ t('tvp.tvpSearchbox.maxValueText') }}({{ state.prevItem.unit }})\n </div>\n <tiny-form-item\n :prop=\"state.curMaxNumVar\"\n class=\"tvp-search-box__number-item\"\n >\n <tiny-input\n v-model=\"state[state.curMaxNumVar]\"\n type=\"number\"\n class=\"tvp-search-box__number-input\"\n ></tiny-input>\n </tiny-form-item>\n </div>\n <div\n v-if=\"state.prevItem.type === 'dateRange'\"\n class=\"tvp-search-box__date-wrap\"\n >\n <div class=\"tvp-search-box__dropdown-title\">\n {{\n state.prevItem.maxTimeLength > 0\n ? t('tvp.tvpSearchbox.timeLengthTitle', {\n value: (state.prevItem.maxTimeLength / 86400000).toFixed(1)\n })\n : t('tvp.tvpSearchbox.rangeDateTitle')\n }}\n </div>\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t('tvp.tvpSearchbox.rangeBeginLabel') }}\n </div>\n <tiny-form-item\n prop=\"startDate\"\n :show-message=\"Boolean(state.prevItem.maxTimeLength)\"\n class=\"tvp-search-box__date-item\"\n >\n <tiny-date-picker\n v-model=\"state.startDate\"\n :format=\"state.prevItem.format || state.dateRangeFormat\"\n :value-format=\"state.prevItem.format || state.dateRangeFormat\"\n :picker-options=\"pickerOptions(state.startDate, 'endDate')\"\n class=\"tvp-search-box__date-picker\"\n ></tiny-date-picker>\n </tiny-form-item>\n <div class=\"tvp-search-box__dropdown-end\">\n {{ t('tvp.tvpSearchbox.rangeEndLabel') }}\n </div>\n <tiny-form-item\n prop=\"endDate\"\n class=\"tvp-search-box__date-item\"\n >\n <tiny-date-picker\n v-model=\"state.endDate\"\n :format=\"state.prevItem.format || state.dateRangeFormat\"\n :value-format=\"state.prevItem.format || state.dateRangeFormat\"\n :picker-options=\"pickerOptions(state.startDate)\"\n class=\"tvp-search-box__date-picker\"\n ></tiny-date-picker>\n </tiny-form-item>\n </div>\n <div\n v-if=\"state.prevItem.type === 'datetimeRange'\"\n class=\"tvp-search-box__date-wrap\"\n >\n <div class=\"tvp-search-box__dropdown-title\">\n {{\n state.prevItem.maxTimeLength > 0\n ? t('tvp.tvpSearchbox.timeLengthTitle', {\n value: (state.prevItem.maxTimeLength / 86400000).toFixed(1)\n })\n : t('tvp.tvpSearchbox.rangeDateTitle')\n }}\n </div>\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t('tvp.tvpSearchbox.rangeBeginLabel') }}\n </div>\n <tiny-form-item\n prop=\"startDateTime\"\n :show-message=\"Boolean(state.prevItem.maxTimeLength)\"\n class=\"tvp-search-box__date-item\"\n >\n <tiny-date-picker\n v-model=\"state.startDateTime\"\n type=\"datetime\"\n :isutc8=\"true\"\n :format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :value-format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :picker-options=\"pickerOptions(state.startDateTime, 'endDateTime')\"\n class=\"tvp-search-box__date-picker\"\n ></tiny-date-picker>\n </tiny-form-item>\n <div class=\"tvp-search-box__dropdown-end\">\n {{ t('tvp.tvpSearchbox.rangeEndLabel') }}\n </div>\n <tiny-form-item\n prop=\"endDateTime\"\n class=\"tvp-search-box__date-item\"\n >\n <tiny-date-picker\n v-model=\"state.endDateTime\"\n type=\"datetime\"\n :isutc8=\"true\"\n :format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :value-format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :picker-options=\"pickerOptions(state.startDateTime)\"\n class=\"tvp-search-box__date-picker\"\n ></tiny-date-picker>\n </tiny-form-item>\n </div>\n </div>\n <div class=\"tvp-search-box__bottom-btn\">\n <tiny-button\n size=\"mini\"\n @click=\"confirmEditTag(false)\"\n >\n {{ t('tvp.tvpSearchbox.cancel') }}\n </tiny-button>\n <tiny-button\n size=\"mini\"\n :disabled=\"state.hasFormError\"\n @click=\"confirmEditTag(true)\"\n >\n {{ t('tvp.tvpSearchbox.confirm') }}\n </tiny-button>\n </div>\n </template>\n <div\n v-else\n class=\"tvp-search-box__panel-box\"\n >\n <slot\n :name=\"`${state.prevItem.slotName}-edit`\"\n v-bind=\"{\n showDropdown: () => showPopover(state),\n onConfirm: handleEditConfirm\n }\"\n @click.stop\n ></slot>\n </div>\n </tiny-popover>\n </template>\n </tiny-form>\n </div>\n</template>\n\n<script lang=\"ts\">\n// Vue2 版本,使用 tiny-vue 的 renderless 架构\nimport { defineComponent, setup, $props, isVue2 } from '@opentiny/vue-common'\nimport { renderless, api } from './renderless.ts'\n// 导入组件\nimport TinyTag from '@opentiny/vue-tag'\nimport TinyInput from '@opentiny/vue-input'\nimport TinyDropdown from '@opentiny/vue-dropdown'\nimport TinyDropdownMenu from '@opentiny/vue-dropdown-menu'\nimport TinyButton from '@opentiny/vue-button'\nimport TinyTooltip from '@opentiny/vue-tooltip'\nimport TinyDatePicker from '@opentiny/vue-date-picker'\nimport TinyForm from '@opentiny/vue-form'\nimport TinyFormItem from '@opentiny/vue-form-item'\nimport TinyPopover from '@opentiny/vue-popover'\nimport TinySelect from '@opentiny/vue-select'\nimport TinyOption from '@opentiny/vue-option'\n\nimport { iconSearch, iconClose, iconHelpQuery } from '@opentiny/vue-icon'\n\nimport TinySearchBoxFirstLevelPanel from './components/first-level-panel.vue'\nimport TinySearchBoxSecondLevelPanel from './components/second-level-panel.vue'\nimport '../../search-box/theme/index.less'\n\nexport default defineComponent({\n model: {\n prop: 'modelValue',\n event: 'update:modelValue'\n },\n props: {\n ...$props,\n tiny_mode: {\n type: String,\n default: 'pc'\n },\n modelValue: {\n type: Array,\n default: () => []\n },\n items: {\n type: Array,\n default: () => []\n },\n emptyPlaceholder: {\n type: String,\n default: ''\n },\n potentialOptions: {\n type: Object,\n default: () => null\n },\n showHelp: {\n type: Boolean,\n default: true\n },\n idMapKey: {\n type: String,\n default: 'id'\n },\n defaultField: {\n type: String,\n default: ''\n },\n editable: {\n type: Boolean,\n default: false\n },\n maxlength: {\n type: Number,\n default: undefined\n },\n panelMaxHeight: {\n type: String,\n default: '999px'\n },\n splitInputValue: {\n type: String,\n default: ','\n },\n // 尺寸\n size: {\n type: String,\n default: ''\n }\n },\n emits: ['update:modelValue', 'change', 'search', 'exceed', 'first-level-select', 'clear'],\n components: {\n TinyTag,\n TinyInput,\n TinyDropdown,\n TinyDropdownMenu,\n TinyButton,\n TinyTooltip,\n TinyDatePicker,\n TinyForm,\n TinyFormItem,\n TinyPopover,\n TinySelect,\n TinyOption,\n TinySearchBoxFirstLevelPanel,\n TinySearchBoxSecondLevelPanel,\n // 图标组件\n TinyIconSearch: iconSearch(),\n TinyIconClose: iconClose(),\n TinyIconHelpQuery: iconHelpQuery()\n },\n setup(props, context) {\n return setup({ props, context, renderless, api })\n }\n})\n</script>\n","\n/**\n * Copyright (c) 2022 - present TinyVue Authors.\n * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.\n *\n * Use of this source code is governed by an MIT-style license.\n *\n * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,\n * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR\n * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.\n *\n */\nimport { $props, $prefix, $setup, defineComponent, isVue2, isVue3 } from '@opentiny/vue-common'\nimport { type PropType } from '@opentiny/vue-common'\nimport template from './pc.vue'\n\n\nexport const searchBoxProps = {\n ...$props,\n tiny_mode: {\n type: String,\n default: 'pc'\n },\n /** 搜索框的值,支持v-model */\n modelValue: {\n type: Array,\n default: () => []\n },\n /** 搜索项配置数组 */\n items: {\n type: Array,\n default: () => []\n },\n /** 空状态时的占位符文本 */\n emptyPlaceholder: {\n type: String,\n default: ''\n },\n /** 潜在选项配置 */\n potentialOptions: {\n type: Object,\n default: () => null\n },\n /** 是否显示帮助按钮 */\n showHelp: {\n type: Boolean,\n default: true\n },\n /** ID映射键名 */\n idMapKey: {\n type: String,\n default: 'id'\n },\n /** 默认字段 */\n defaultField: {\n type: String,\n default: ''\n },\n /** 是否可编辑 */\n editable: {\n type: Boolean,\n default: false\n },\n /** 最大长度限制 */\n maxlength: {\n type: Number,\n default: undefined\n },\n /** 面板最大高度 */\n panelMaxHeight: {\n type: String,\n default: '999px'\n },\n /** 输入值分隔符 */\n splitInputValue: {\n type: String,\n default: ','\n },\n /** 自定义类名 */\n customClass: {\n type: String,\n default: ''\n },\n /** 自定义样式 */\n customStyle: {\n type: Object,\n default: () => ({})\n },\n /** 组件尺寸 */\n size: {\n type: String as PropType<'small' | ''>,\n default: ''\n }\n}\n// 组件安装函数\nexport default defineComponent({\n name: $prefix + 'SearchBox',\n props: searchBoxProps,\n ...template\n})\n\n\n\n","/**\n * Copyright (c) 2022 - present TinyVue Authors.\n * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.\n *\n * Use of this source code is governed by an MIT-style license.\n *\n * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,\n * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR\n * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.\n *\n */\n\nimport TinySearchBox from \"./src/index.ts\";\nimport { t, setGlobalApp } from './src/utils/i18n'\nimport zhCN from './src/utils/zh_CN'\nimport enUS from './src/utils/en_US'\nimport TinySearchBoxFirstLevelPanel from './src/components/first-level-panel.vue'\nimport TinySearchBoxSecondLevelPanel from './src/components/second-level-panel.vue'\nimport { version } from \"./package.json\";\n// model 配置已在组件内部定义,无需重复设置\n\n/* istanbul ignore next */\nTinySearchBox.install = function (Vue) {\n Vue.component(TinySearchBox.name, TinySearchBox);\n};\n\nTinySearchBox.version = version;\n\n/* istanbul ignore next */\nif (window && typeof window !== \"undefined\" && window.Vue) {\n TinySearchBox.install(window.Vue);\n}\n\n// 导出\nexport * from './src/index.type.ts'\nexport { zhCN, enUS, t, setGlobalApp, TinySearchBoxFirstLevelPanel, TinySearchBoxSecondLevelPanel }\n\nexport default TinySearchBox;\n"],"names":["fillChar","string","length","append","chr","isNumber","len","appendStr","s","toString","hasOwn","fnToString","class2type","isNull","x","typeOf","obj","value","isDate","daysInMonths","yyyymmddReg","mmddyyyyReg","iso8601Reg","dateFormatRegs","maxDateValues","timezone1","timezone2","timezone3","timezones","getTimezone","date","timezoneoffset","timezone","isLeapYear","year","getMilliseconds","milliseconds","getDateFromData","month","hours","minutes","seconds","daysInMonth","yyyymmddDateParser","m","mmddyyyyDateParser","iso8601DateParser","offset","timeZone","sign","offsetHours","offsetMinutes","actHours","actMinutes","dateParsers","parseDate","str","i","matchDateArray","arr","text","getDateArray","dateFormat","valuePos","textPos","charValue","notNum","end","invalideTime","time","min","max","invalideValue","innerParse","toDate","minDate","format","k","afterFormat","dateValue","showDropdown","state","isShow","showPopover","dropdownRef","debounce","func","delay","timer","debounced","args","deepClone","objClone","keys","key","omitObj","keysToOmit","result","hasTagItem","itemValue","itemLabel","valueMap","prevItem","resetInput","emitChangeModelEvent","emit","nextTick","tagList","index","newTag","newValue","oldValue","isEdit","oldVal","innerModelValue","createNewTag","getTagId","props","item","idKey","useTag","lastInputValue","changeIsChecked","tag","parent","child","lastIndex","_c","_b","_a","getVerifyTag","instance","inputEditValue","operators","rest","isPass","errMsg","id","operator","otherAttr","editValue","label","itemId","getVerifyNumTag","minNum","maxNum","start","verifyProps","field","prevLabel","unit","type","getVerifyDateTag","isDateTimeType","startDate","endDate","startDateTime","endDateTime","setStateNumRange","t","nextMinNum","nextMaxNum","curMinNumVar","curMaxNumVar","minIsNumber","maxIsNumber","rule","cb","valueIsNumber","MinValueIsNumber","curMin","curMinIsNumber","useDropdown","vm","cancelHandleInput","showValueItem","dateRangeFormat","newStart","newEnd","datetimeRangeFormat","subItem","option","selectPropItem","inputRef","setOperator","updateModelValue","replace","mergeTag","indexMap","options","newOptions","cloned","selectInputValue","val","selectRadioItem","createTag","isPotential","tagLabel","hasNotInputValueCreateTag","propItem","newTagUpdateModelValue","hasInputValueCreateTag","inputValue","regexp","items","defaultField","currentItem","maxlength","escapeRegExp","getHighlightMatch","labelRegex","match","startIndex","endIndex","useMatch","getMatchList","keyword","handleInput","e","recordItems","raw","patt","hasItem","hightlighStr","_d","groupKey","optionLabel","resetBackupList","isFirst","useCheckbox","confirm","checkboxGroup","hasTagIndex","checkboxLabel","indexList","filtered","useDatePicker","prev","endName","maxTimeLength","curTime","useNumRange","sizeChange","createDateRules","startKey","endKey","dateRules","datetimeRules","useEdit","setDropdownProps","curTag","labels","checkFormValidation","hasError","dom","popoverRef","isConfirm","disabled","typeArr","useCustom","updateCustomValue","customTag","useInit","backupPrevItem","zhCN","enUS","defaultLocale","locales","globalApp","setGlobalApp","app","getCurrentLocale","browserLang","_e","getLocaleMessages","locale","params","error","messages","k2","paramKey","tArray","isLocaleSupported","getSupportedLocales","addLocale","removeLocale","i18n","api","initState","reactive","computed","watch","renderless","getCurrentInstance","onMounted","onBeforeUnmount","$emit","refs","initAllApi","initWatch","deleteTag","clearTag","backspaceDeleteTag","editTag","confirmEditTag","selectPropChange","selectItemIsDisable","selectFirstMap","helpClick","selectCheckbox","onConfirmDate","handleDateShow","pickerOptions","initFormRule","handleConfirm","handleEditConfirm","initItems","watchOutsideClick","watchMouseDown","watchMouseMove","handleClick","isShowClose","eventsMap","setPlaceholder","placeholderValue","eventName","p1","p2","map","updatePlaceholder","placeholder","getI18nLocale","lastLocale","newLocale","checkLocaleChange","currentLocale","newVal","wasOpen","currentField","updated","it","fields","optionValue","o","v","hooks","handleEvents","_sfc_main","defineComponent","$prefix","TinyDropdownItem","$props","context","setup","_hoisted_1","_hoisted_3","_hoisted_6","_hoisted_9","_hoisted_12","_hoisted_13","_hoisted_15","_openBlock","_createElementBlock","_createVNode","_component_tiny_dropdown_item","_ctx","_cache","_withCtx","_createElementVNode","_toDisplayString","_Fragment","_renderList","_hoisted_2","_createBlock","_hoisted_4","_hoisted_5","_createCommentVNode","_hoisted_7","_hoisted_8","_hoisted_10","_hoisted_11","_createTextVNode","_vShow","_withDirectives","group","_hoisted_14","b","isLoading","showCheckBoxList","TinyFormItem","TinyCheckbox","TinyCheckboxGroup","TinyDatePicker","TinyInput","TinyButton","TinyLoading","_hoisted_16","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_32","_normalizeClass","_component_tiny_checkbox_group","$event","_component_tiny_checkbox","_component_tiny_button","_component_tiny_form_item","_component_tiny_input","_withModifiers","_hoisted_17","_component_tiny_date_picker","_hoisted_23","_hoisted_29","_hoisted_30","_hoisted_31","TinyTag","TinyDropdown","TinyDropdownMenu","TinyTooltip","TinyForm","TinyPopover","TinySelect","TinyOption","TinySearchBoxFirstLevelPanel","TinySearchBoxSecondLevelPanel","iconSearch","iconClose","iconHelpQuery","_component_tiny_icon_search","_component_tiny_tag","_component_tiny_form","_component_tiny_dropdown","_component_tiny_dropdown_menu","_normalizeStyle","_renderSlot","_mergeProps","_component_TinySearchBoxFirstLevelPanel","_component_TinySearchBoxSecondLevelPanel","_withKeys","_component_tiny_icon_close","_component_tiny_tooltip","_component_tiny_icon_help_query","_component_tiny_popover","_component_tiny_select","_component_tiny_option","searchBoxProps","TinySearchBox","template","Vue","version"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/utils/date.ts","../../src/utils/dropdown.ts","../../src/utils/index.ts","../../src/utils/tag.ts","../../src/composables/use-tag.ts","../../src/utils/validate.ts","../../src/composables/use-dropdown.ts","../../src/composables/use-match.ts","../../src/composables/use-checkbox.ts","../../src/composables/use-datepicker.ts","../../src/composables/use-num-range.ts","../../src/composables/use-edit.ts","../../src/composables/use-custom.ts","../../src/composables/use-init.ts","../../src/utils/zh_CN.ts","../../src/utils/en_US.ts","../../src/utils/i18n.ts","../../src/renderless.ts","../../src/components/first-level-panel.vue","../../src/components/second-level-panel.vue","../../src/pc.vue","../../src/index.ts","../../index.ts"],"sourcesContent":["/* eslint-disable prefer-rest-params */\n/**\n * Copyright (c) 2022 - present TinyVue Authors.\n * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.\n *\n * Use of this source code is governed by an MIT-style license.\n *\n * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,\n * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR\n * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.\n *\n */\n/**\n * 填充字符串,根据填充模式参数,在字符串前面或后面补充字附到指定的长度。\n *\n * fillChar('1', 3) // \"001\"\n * fillChar('1', 3, true) // \"100\"\n * fillChar('1', 3, true, ' ') // \"1 \"\n *\n * @param {String} string 被填充的字符串\n * @param {Number} length 填充到某个长度\n * @param {Boolean} [append=false] 是否在后面填充,默认为在前面填充\n * @param {String} [chr=\"0\"] 填充的字符,默认为0\n * @returns {String}\n */\nexport const fillChar = (string, length, append, chr = '0') => {\n if (typeof string === 'string' && typeof chr === 'string' && isNumber(length)) {\n let len = string.length - length\n\n if (len > 0) {\n return append ? string.substr(0, length) : string.substr(len, length)\n } else {\n const appendStr = []\n len = Math.abs(len) / chr.length\n\n for (; len > 0; len--) {\n appendStr.push(chr)\n }\n\n const s = appendStr.join('')\n\n return append ? string + s : s + string\n }\n }\n}\n\nexport const toString = Object.prototype.toString\nexport const hasOwn = Object.prototype.hasOwnProperty\n\nconst getProto = Object.getPrototypeOf\nconst fnToString = hasOwn.toString\nconst ObjectFunctionString = fnToString.call(Object)\n\nconst class2type = {\n '[object Error]': 'error',\n '[object Object]': 'object',\n '[object RegExp]': 'regExp',\n '[object Date]': 'date',\n '[object Array]': 'array',\n '[object Function]': 'function',\n '[object AsyncFunction]': 'asyncFunction',\n '[object String]': 'string',\n '[object Number]': 'number',\n '[object Boolean]': 'boolean'\n}\n\n/** 判断是否为 null / undefined */\nexport const isNull = (x: any) => x === null || x === undefined\n\n/**\n * 返回 JavaScript 对象的类型。\n *\n * 如果对象是 undefined 或 null,则返回相应的'undefined'或'null'。\n *\n * 其他一切都将返回它的类型'object'。\n *\n * typeOf( undefined ) === 'undefined'\n * typeOf() === 'undefined'\n * typeOf( window.notDefined ) === 'undefined'\n * typeOf( null ) === 'null'\n * typeOf( true ) === 'boolean'\n * typeOf( 3 ) === 'number'\n * typeOf( \"test\" ) === 'string'\n * typeOf( function (){} ) === 'function'\n * typeOf( [] ) === 'array'\n * typeOf( new Date() ) === 'date'\n * typeOf( new Error() ) === 'error'\n * typeOf( /test/ ) === 'regExp'\n *\n */\nexport const typeOf: (obj: any) => string = (obj) =>\n isNull(obj) ? String(obj) : class2type[toString.call(obj)] || 'object'\n\n/**\n * 判断对象是否为 object 类型。\n *\n * isObject({}) // true\n */\nexport const isObject = (obj: any) => typeOf(obj) === 'object'\n\n/**\n * 判断对象是否为 function 类型。\n *\n * isObject(function (){) // true\n\n */\nexport const isFunction = (fn: any) => ['asyncFunction', 'function'].includes(typeOf(fn))\n\n/**\n * 判断对象是否为简单对象。\n *\n * 即不是 HTML 节点对象,也不是 window 对象,而是纯粹的对象(通过 '{}' 或者 'new Object' 创建的)。\n *\n * let obj = {}\n * isPlainObject(obj) //true\n */\nexport const isPlainObject = (obj: any) => {\n if (!obj || toString.call(obj) !== '[object Object]') {\n return false\n }\n\n const proto = getProto(obj)\n if (!proto) {\n return true\n }\n\n const Ctor = hasOwn.call(proto, 'constructor') && proto.constructor\n return typeof Ctor === 'function' && fnToString.call(Ctor) === ObjectFunctionString\n}\n\n/**\n * 检查对象是否为空(不包含任何属性)。\n *\n * let obj = {}\n * isEmptyObject(obj) // true\n */\nexport const isEmptyObject = (obj: any) => {\n const type = typeOf(obj)\n\n if (type === 'object' || type === 'array') {\n for (const name in obj) {\n if (hasOwn.call(obj, name)) {\n return false\n }\n }\n }\n\n return true\n}\n\n/**\n * 判断对象是否为数字类型。\n *\n * isNumber(369) // true\n */\nexport const isNumber = (value: any) => typeof value === 'number' && isFinite(value)\n\n/**\n * 判断对象是否代表一个数值。\n *\n * isNumeric('-10') // true\n * isNumeric(16) // true\n * isNumeric(0xFF) // true\n * isNumeric('0xFF') // true\n * isNumeric('8e5') // true\n * isNumeric(3.1415) // true\n * isNumeric(+10) // true\n * isNumeric('') // false\n * isNumeric({}) // false\n * isNumeric(NaN) // false\n * isNumeric(null) // false\n * isNumeric(true) // false\n * isNumeric(Infinity) // false\n * isNumeric(undefined) // false\n */\nexport const isNumeric = (value: any) => value - parseFloat(value) >= 0\n\n/**\n * 判断对象是否为日期类型。\n *\n * let date = new Date()\n * isDate(date) // true\n */\nexport const isDate = (value) => typeOf(value) === 'date'\n\n/**\n * 判断两个值是否值相同且类型相同。\n *\n * 注:在 JavaScript 里 NaN === NaN 为 false,因此不能简单的用 === 来判断。\n *\n * isSame(1, 1) // true\n * isSame(NaN, NaN) // true\n */\nexport const isSame = (x: any, y: any) =>\n x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y))\n\n/** 判断是否是正则表达式 */\nexport const isRegExp = (value: any) => typeOf(value) === 'regExp'\n\nexport const isPromise = (val) => isObject(val) && isFunction(val.then) && isFunction(val.catch)\n\nconst daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nconst yyyymmddReg = new RegExp(\n '^(\\\\d{4})(/|-)(((0)?[1-9])|(1[0-2]))((/|-)(((0)?[1-9])|([1-2][0-9])|(3[0-1])))' +\n '?( ((0)?[0-9]|1[0-9]|20|21|22|23):([0-5]?[0-9])((:([0-5]?[0-9]))?(.([0-9]{1,6}))?)?)?$'\n)\nconst mmddyyyyReg = new RegExp(\n '^(((0)?[1-9])|(1[0-2]))(/|-)(((0)?[1-9])|([1-2][0-9])|(3[0-1]))?(/|-)?(\\\\d{4})' +\n '( ((0)?[0-9]|1[0-9]|20|21|22|23):([0-5]?[0-9])((:([0-5]?[0-9]))?(.([0-9]{1,6}))?)?)?$'\n)\nconst iso8601Reg = new RegExp(\n '^(\\\\d{4})-(((0)?[1-9])|(1[0-2]))-(((0)?[1-9])|([1-2][0-9])|(3[0-1]))T' +\n '(((0)?[0-9]|1[0-9]|20|21|22|23):([0-5]?[0-9])((:([0-5]?[0-9]))?(.([0-9]{1,6}))?)?)?(Z|([+-])' +\n '((0)?[0-9]|1[0-9]|20|21|22|23):?([0-5]?[0-9]))$'\n)\n\nconst dateFormatRegs = {\n 'y{1,4}': /y{1,4}/,\n 'M{1,2}': /M{1,2}/,\n 'd{1,2}': /d{1,2}/,\n 'h{1,2}': /h{1,2}/,\n 'H{1,2}': /H{1,2}/,\n 'm{1,2}': /m{1,2}/,\n 's{1,2}': /s{1,2}/,\n 'S{1,3}': /S{1,3}/,\n 'Z{1,1}': /Z{1,1}/\n}\n\nconst maxDateValues = {\n YEAR: 9999,\n MONTH: 11,\n DATE: 31,\n HOUR: 23,\n MINUTE: 59,\n SECOND: 59,\n MILLISECOND: 999\n}\n\nconst timezone1 = '-12:00,-11:00,-10:00,-09:30,-08:00,-07:00,-06:00,-05:00,-04:30,-04:00,-03:30,-02:00,-01:00'\nconst timezone2 = '-00:00,+00:00,+01:00,+02:00,+03:00,+03:30,+04:00,+04:30,+05:00,+05:30,+05:45,+06:00'\nconst timezone3 = '+06:30,+07:00,+08:00,+09:00,+10:00,+10:30,+11:00,+11:30,+12:00,+12:45,+13:00,+14:00'\nconst timezones = [].concat(timezone1.split(','), timezone2.split(','), timezone3.split(','))\n\nconst getTimezone = (date) => {\n const timezoneoffset = 0 - date.getTimezoneOffset() / 60\n let timezone\n\n if (timezoneoffset === 0) {\n timezone = 'Z'\n } else if (timezoneoffset > 0) {\n timezone = '+' + (timezoneoffset > 10 ? timezoneoffset : '0' + timezoneoffset) + '00'\n } else {\n timezone = (timezoneoffset < -10 ? timezoneoffset : '-0' + -timezoneoffset) + '00'\n }\n\n return timezone\n}\n\n/**\n * 判断年份是否为闰年。\n *\n * isLeapYear(2017) // false\n * isLeapYear(2000) // true\n *\n * @param {Number} year 年份\n * @returns {Boolean}\n */\nexport const isLeapYear = (year) => year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n\nconst getMilliseconds = (milliseconds) =>\n milliseconds > maxDateValues.MILLISECOND ? Number(String(milliseconds).substring(0, 3)) : milliseconds\n\nconst getDateFromData = ({ year, month, date, hours, minutes, seconds, milliseconds }) => {\n let daysInMonth = daysInMonths[month]\n\n if (isLeapYear(year) && month === 1) {\n daysInMonth += 1\n }\n\n if (date <= daysInMonth) {\n return new Date(year, month, date, hours, minutes, seconds, getMilliseconds(milliseconds))\n }\n}\n\nconst yyyymmddDateParser = (m) => {\n /* istanbul ignore else */\n if (m.length === 23) {\n const year = Number(m[1])\n const month = m[3] - 1\n const date = Number(m[9] || 1)\n const hours = m[15] || 0\n const minutes = m[17] || 0\n const seconds = m[20] || 0\n const milliseconds = m[22] || 0\n\n return getDateFromData({\n date,\n year,\n hours,\n month,\n seconds,\n minutes,\n milliseconds\n })\n }\n}\n\nconst mmddyyyyDateParser = (m) => {\n /* istanbul ignore else */\n if (m.length === 22) {\n const year = Number(m[12])\n const month = m[1] - 1\n const date = Number(m[6] || 1)\n const hours = m[14] || 0\n const minutes = m[16] || 0\n const seconds = m[19] || 0\n const milliseconds = m[21] || 0\n\n return getDateFromData({\n year,\n month,\n date,\n hours,\n minutes,\n seconds,\n milliseconds\n })\n }\n}\n\nconst iso8601DateParser = (m) => {\n if (m.length !== 25) {\n return\n }\n const year = Number(m[1])\n const month = m[2] - 1\n const date = Number(m[6])\n const offset = new Date(year, month, date).getTimezoneOffset()\n const hours = m[12] || 0\n const minutes = m[14] || 0\n const seconds = m[17] || 0\n const milliseconds = m[19] || 0\n let timeZone = m[20]\n const sign = m[21]\n const offsetHours = m[22] || 0\n const offsetMinutes = m[24] || 0\n let daysInMonth = daysInMonths[month]\n let actHours\n let actMinutes\n if (isLeapYear(year) && month === 1) {\n daysInMonth += 1\n }\n if (date <= daysInMonth) {\n if (timeZone === 'Z') {\n actHours = hours - offset / 60\n actMinutes = minutes\n } else {\n if (!timeZone.includes(':')) {\n timeZone = timeZone.substr(0, 3) + ':' + timeZone.substr(3)\n }\n if (!timezones.includes(timeZone)) {\n return\n }\n\n actHours = sign === '+' ? hours - offsetHours - offset / 60 : Number(hours) + Number(offsetHours) - offset / 60\n actMinutes = sign === '+' ? minutes - offsetMinutes : Number(minutes) + Number(offsetMinutes)\n }\n\n return new Date(year, month, date, actHours, actMinutes, seconds, getMilliseconds(milliseconds))\n }\n}\n\nconst dateParsers = [\n [yyyymmddReg, yyyymmddDateParser],\n [mmddyyyyReg, mmddyyyyDateParser],\n [iso8601Reg, iso8601DateParser]\n]\n\nconst parseDate = (str) => {\n for (let i = 0, len = dateParsers.length; i < len; i++) {\n const m = dateParsers[i][0].exec(str)\n\n if (m && m.length > 0) {\n return dateParsers[i][1](m)\n }\n }\n}\n\nconst matchDateArray = (arr, value, text) => {\n if (text) {\n switch (text) {\n case 'yyyy':\n case 'yy':\n arr[0] = value\n break\n case 'M':\n case 'MM':\n arr[1] = value - 1\n break\n case 'd':\n case 'dd':\n arr[2] = value\n break\n case 'h':\n case 'hh':\n arr[3] = value\n break\n case 'm':\n case 'mm':\n arr[4] = value\n break\n case 's':\n case 'ss':\n arr[5] = value\n break\n case 'S':\n case 'SS':\n case 'SSS':\n arr[6] = value\n break\n default:\n break\n }\n }\n}\n\nconst getDateArray = (str, dateFormat) => {\n const arr = [0, -1, 0, 0, 0, 0]\n\n if (str.length !== dateFormat.length) {\n return arr\n }\n\n let valuePos = 0\n let textPos = 0\n\n for (let i = 0, len = str.length; i < len; i++) {\n const charValue = str.substr(i, 1)\n const notNum = isNaN(Number(charValue)) || charValue?.trim() === ''\n\n if ((notNum && charValue === dateFormat.substr(i, 1)) || i === len - 1) {\n let value\n let text\n\n if (notNum) {\n value = str.substring(valuePos, i)\n valuePos = i + 1\n const end = dateFormat.indexOf(charValue, textPos)\n\n text = dateFormat.substring(textPos, end === -1 ? dateFormat.length : end)\n\n textPos = end + 1\n } else {\n value = str.substring(valuePos, len)\n text = dateFormat.substring(textPos, len)\n }\n\n if (value.length === text.length || value) {\n matchDateArray(arr, value, text)\n }\n }\n }\n\n return arr\n}\n\nconst invalideTime = (time, min, max) => isNaN(time) || time < min || time > max\n\nconst invalideValue = ({ year, month, date, hours, minutes, seconds, milliseconds }) =>\n invalideTime(year, 0, maxDateValues.YEAR) ||\n invalideTime(month, 0, maxDateValues.MONTH) ||\n invalideTime(date, 0, maxDateValues.DATE) ||\n invalideTime(hours, 0, maxDateValues.HOUR) ||\n invalideTime(minutes, 0, maxDateValues.MINUTE) ||\n invalideTime(seconds, 0, maxDateValues.SECOND) ||\n invalideTime(milliseconds, 0, maxDateValues.MILLISECOND)\n\nconst innerParse = (value, dateFormat) => {\n if (typeof dateFormat === 'string') {\n const arr = getDateArray(value, dateFormat)\n const year = Number(arr[0])\n const month = Number(arr[1])\n const date = Number(arr[2] || 1)\n const hours = Number(arr[3] || 0)\n const minutes = Number(arr[4] || 0)\n const seconds = Number(arr[5] || 0)\n const milliseconds = Number(arr[6] || 0)\n\n if (\n invalideValue({\n year,\n month,\n date,\n hours,\n minutes,\n seconds,\n milliseconds\n })\n ) {\n return\n }\n\n return getDateFromData({\n year,\n date,\n month,\n minutes,\n hours,\n milliseconds,\n seconds\n })\n } else {\n return parseDate(value)\n }\n}\n\n/**\n * 将字符串或数字转换成 Date 类型。\n *\n * toDate('2008/02/02') // new Date(2008, 1, 2)\n * toDate(Date.UTC(2008, 1, 2)) // new Date(Date.UTC(2008, 1, 2))\n * toDate('2008/2/2', 'yyyy/M/d') // new Date(2008, 1, 2)\n * toDate('2008/02') // new Date(2008, 1, 1)\n * toDate('02/2008') // new Date(2008, 1, 1)\n * toDate('2008-02-01T20:08+08:00') // new Date(Date.UTC(2008, 0, 31, 16))\n * toDate('2008-02-01T04:08-08:00') // new Date(Date.UTC(2008, 1, 1, 8))\n *\n * @param {String|Number} value 日期类型字符串或数字\n * @param {String} [dateFormat] 转换格式\n *\n * 当 value 为字符串类型时,如果不提供,则尽可能按常见格式去解析。\n * 常见格式为 yyyy[/-]MM[/-]dd hh:mm:ss.SSS, MM[/-]dd [/-]yyyy hh:mm:ss.SSS 及 ISO8601 时间格式。\n *\n * 如果提供,则按具体格式严格匹配解析,并且年份必须为4位。\n * - yyyy 代表年份\n * - M 或 MM 代表1位或2位的月份\n * - d 或 dd 代表1位或2位的天数\n * - h 或 hh 代表24小时的1位或2位的小时\n * - m 或 mm 代表1位或2位的分钟,\n * - s 或 ss 代表1位或2位的秒\n * - S 或 SS 或 SSS 代表1位或2位或3位的毫秒\n *\n * @param {String} [minDate] 最小时间,默认为 0001-01-01 00:00:00.000\n * @returns {Date}\n */\nexport const toDate = (value, dateFormat, minDate) => {\n let date\n\n if (isNumber(value)) {\n date = new Date(value)\n } else if (typeof value === 'string') {\n date = innerParse(value, dateFormat)\n }\n\n if (minDate) {\n const min = (minDate && toDate(minDate)) || new Date(1, 1, 1, 0, 0, 0)\n return date && date < min ? min : date\n }\n\n return date\n}\n\n/**\n * 将 Date 实例转换成日期字符串。\n * 当 date 为日期字符串时,如果只有2个参数,则第2个参数为格式化后的格式化字符串\n * 如果有3个参数,则第2个参数为转换的格式化参数,第3个参数为格式化后的格式化参数\n *\n * let date = new Date(2014, 4, 4, 1, 2, 3, 4)\n * format(date) // \"2014/05/04 01:02:03\"\n * format(date, 'yyyy/MM/dd hh:mm:ss.SSS') // \"2014/05/04 01:02:03.004\"\n * format(date, 'yyyy/MM/dd hh:mm:ss.SSSZ') // \"2014/05/04 01:02:03.004+0800\"\n * format(date, 'yyyy年MM月dd日 hh时mm分ss秒SSS毫秒') // \"2014年05月04日 01时02分03秒004毫秒\"\n * format('2008/01/02', 'yyyy/MM/dd hh:mm:ss.SSS') // \"2008/02/02 00:00:00.000\"\n * format('2014/01/02/03/04/05/06', 'yyyy/MM/dd/hh/mm/ss', 'yyyy年MM月dd日 hh时mm分ss秒') // \"2014年01月02日 03时04分05秒006毫秒\"\n *\n * @param {Date|String} date Date 实例或日期字符串\n * @param {String} [dateFormat='yyyy/MM/dd hh:mm:ss'] 转换格式\n *\n * 常见格式为 yyyy[/-]MM[/-]dd hh:mm:ss.SSS, MM[/-]dd [/-]yyyy hh:mm:ss.SSS 及 ISO8601 时间格式。\n *\n * 如果提供,则按具体格式严格匹配解析,并且年份必须为4位。\n * - yyyy 代表年份\n * - M 或 MM 代表1位或2位的月份\n * - d 或 dd 代表1位或2位的天数\n * - h 或 hh 代表24小时的1位或2位的小时\n * - m 或 mm 代表1位或2位的分钟,\n * - s 或 ss 代表1位或2位的秒\n * - S 或 SS 或 SSS 代表1位或2位或3位的毫秒\n *\n * @returns {String}\n */\nexport const format = function (date, dateFormat = 'yyyy/MM/dd hh:mm:ss') {\n if (isDate(date)) {\n if (typeof dateFormat === 'string') {\n const o = {\n 'y{1,4}': date.getFullYear(),\n 'M{1,2}': date.getMonth() + 1,\n 'd{1,2}': date.getDate(),\n 'h{1,2}': date.getHours(),\n 'H{1,2}': date.getHours(),\n 'm{1,2}': date.getMinutes(),\n 's{1,2}': date.getSeconds(),\n 'S{1,3}': date.getMilliseconds(),\n 'Z{1,1}': getTimezone(date)\n }\n\n Object.keys(o).forEach((k) => {\n const m = dateFormat.match(dateFormatRegs[k])\n\n if (k && m && m.length) {\n dateFormat = dateFormat.replace(m[0], k === 'Z{1,1}' ? o[k] : fillChar(o[k].toString(), m[0].length))\n }\n })\n\n return dateFormat\n }\n } else if (typeof date === 'string' && arguments.length >= 2) {\n let afterFormat = dateFormat\n\n if (arguments.length === 2) {\n dateFormat = undefined\n } else {\n afterFormat = arguments[2]\n }\n\n const dateValue = toDate(date, dateFormat)\n return dateValue ? format(dateValue, afterFormat) : ''\n }\n}\n\n/**\n * 将当前操作的时间变更时区,主要用于转换一个其他时区的时间。\n *\n * var date = new Date(2017, 0, 1)\n * getDateWithNewTimezone(date, 0, -2)\n *\n * @param {Date} date Date 实例或日期字符串\n * @param {Number} otz 原时区 -12~13\n * @param {Number} ntz 目标时区 -12~13 默认为当前时区\n * @param {Boolean} TimezoneOffset 时区偏移量\n * @returns {Date}\n */\nexport const getDateWithNewTimezone = (date, otz, ntz, timezoneOffset = 0) => {\n if (!isDate(date) || !isNumeric(otz) || !isNumeric(ntz) || !isNumeric(timezoneOffset)) {\n return\n }\n\n const otzOffset = -otz * 60\n const ntzOffset = -ntz * 60\n const dstOffeset = timezoneOffset * 60\n const utc = date.getTime() + otzOffset * 60000\n\n return new Date(utc - (ntzOffset - dstOffeset) * 60000)\n}\n\n/**\n * 按时区将 Date 实例转换成字符串。\n *\n * toDateStr(new Date(2017, 0, 1, 12, 30), 'yyyy/MM/dd hh:mm', 3) // \"2017/01/01 15:30\"\n * toDateStr('2008/01/02', 'yyyy/MM/dd hh:mm', 3) // \"2008/01/02 03:00\"\n *\n * @param {Date|String} date Date 实例或日期字符串\n * @param {String} dateFormat 转换格式\n * @param {Number} [timezone] 时区\n * @returns {String}\n */\nexport const toDateStr = (date, dateFormat, timezone) => {\n if (date && isNumeric(timezone)) {\n timezone = parseFloat(parseFloat(timezone).toFixed(2))\n\n date = getDateWithNewTimezone(isDate(date) ? date : new Date(toDate(date)), 0, timezone)\n }\n\n return format(date, dateFormat)\n}\n\n/**\n * 获取日期所在周的第一天,默认周一为第一天(可扩展周日为第一天)。\n *\n * getWeekOfFirstDay() // 返回当前日期所在周的周一同一时间\n * getWeekOfFirstDay(true) // 返回当前日期所在周的周日同一时间\n * getWeekOfFirstDay(new Date(2019, 8, 5)) // new Date(2019, 8, 2)\n * getWeekOfFirstDay(new Date(2019, 8, 5)), true) // new Date(2019, 8, 1)\n *\n * @param {Date} [date=new Date()] date 日期实例,默认当天\n * @param {Boolean} [isSunFirst] 是否设置周日为第一天,非必填\n * @returns {Date}\n */\nexport const getWeekOfFirstDay = (date, isSunFirst) => {\n typeof date === 'boolean' && (isSunFirst = date)\n isDate(date) || (date = new Date())\n\n const day = date.getDay()\n let dayOfMonth = date.getDate()\n\n if (day === 0) {\n !isSunFirst && (dayOfMonth -= 6)\n } else {\n dayOfMonth = dayOfMonth - day + (!isSunFirst && 1)\n }\n\n return new Date(date.getFullYear(), date.getMonth(), dayOfMonth)\n}\n\nconst TZRE = /(-|\\+)(\\d{2}):?(\\d{2})$/\n\nexport const getLocalTimezone = () => 0 - new Date().getTimezoneOffset() / 60\n\nexport const getStrTimezone = (value) => {\n const localTimeZone = getLocalTimezone()\n const match = typeof value === 'string' && value.match(TZRE)\n\n if (match) {\n const minoffset = Number(match[2]) + Number(match[3]) / 60\n value = minoffset * `${match[1]}1`\n }\n\n if (isNumber(value) && value >= -12 && value <= 12) {\n return value\n }\n\n return localTimeZone\n}\n","/**\n * 下拉框显隐\n * @param state 组件响应式数据\n * @param isShow 是否展示下拉框, 默认展示\n */\nexport const showDropdown = (state, isShow = true) => {\n if (isShow) {\n state.visibleTimer = setTimeout(() => {\n state.visible = true\n }, 0)\n } else {\n clearTimeout(state.visibleTimer)\n state.visibleTimer = null\n state.visible = false\n }\n}\n\n/**\n * 编辑下拉框显隐\n * @param state 组件响应式数据\n * @param isShow 是否展示编辑下拉框, 默认展示\n */\nexport const showPopover = (state, isShow = true) => {\n if (!state.instance) return\n state.popoverVisible = isShow\n const { dropdownRef } = state.instance\n\n if (isShow && dropdownRef.state.visible) {\n clearTimeout(Number(dropdownRef.state.timeout))\n dropdownRef.state.timeout = null\n dropdownRef.state.visible = false\n }\n}\n","export const debounce = (func: Function, delay = 200) => {\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const debounced = function (this: any, ...args: any) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n func.apply(this, args);\n timer = null;\n }, delay);\n };\n\n // 添加取消方法\n debounced.cancel = () => {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n };\n\n return debounced;\n}\n\nexport const isNumber = (value: any) => parseFloat(value).toString() !== 'NaN'\n\n/**\n * 深拷贝方法\n * @param obj 元数据\n * @returns\n */\nexport const deepClone = (obj) => {\n const objClone = Array.isArray(obj) ? [] : {}\n if (obj && typeof obj === 'object') {\n const keys = Object.keys(obj)\n if (keys.length) {\n keys.forEach((key) => {\n if (obj[key] && typeof obj[key] === 'object') {\n objClone[key] = deepClone(obj[key])\n } else {\n objClone[key] = obj[key]\n }\n })\n } else {\n return obj\n }\n }\n\n return objClone\n}\n\n/**\n * 过滤复制对象的key值\n * @param obj 复制对象\n * @param keysToOmit key值\n */\nexport const omitObj = (obj, keysToOmit = ['mergeTag', 'options', 'idMapKey']) => {\n const result = { ...obj }\n keysToOmit.forEach((key) => {\n delete result[key]\n })\n return result\n}\n\n","import type { ISearchBoxNewTag } from '../index.type.ts'\nimport { deepClone } from './index.ts'\nimport { showPopover } from './dropdown.ts'\n\n/**\n * 判断是否已选择此标签\n * @param state searchbox的state变量\n * @param itemValue 标签的value值\n * @param itemLabel 标签的label值,可选参数,默认为空字符串,一般用于当prevItem.label为空时\n * @return 已选择则返回true,未选择则返回false\n */\nexport const hasTagItem = (state, itemValue, itemLabel = '') => {\n const { valueMap, prevItem } = state\n const value = (prevItem.label || itemLabel) + itemValue\n return valueMap.has(value)\n}\n\n/**\n * 清空输入框的值\n * @param state searchbox的state变量\n */\nexport const resetInput = (state) => {\n state.propItem = {}\n state.inputValue = ''\n}\n\n/**\n * update:modelValue和change事件\n * @param emit vue的api\n * @param state searchbox的state变量\n * @param args 其他可选参数:\n * @param tagList 尾部添加的新标签数组\n * @param index 替换某标签的索引\n * @param newTag 表示替换的新标签,主要和索引共用\n * @param newValue 表示替换全部的model-value值\n * @param oldValue 表示旧的model-value值\n */\nexport const emitChangeModelEvent = ({ emit, state, nextTick, ...args }) => {\n showPopover(state, false)\n const { tagList = null, index = -1, newTag = null, newValue = null, oldValue = null, isEdit } = args\n if (!isEdit) {\n resetInput(state)\n }\n if (!tagList && index === -1 && !newValue) {\n return\n }\n\n const oldVal = oldValue || deepClone(state.innerModelValue)\n let innerModelValue = []\n \n if (newValue) {\n innerModelValue = [...newValue]\n } else if (index !== -1) {\n innerModelValue = [...state.innerModelValue]\n newTag ? innerModelValue.splice(index, 1, newTag) : innerModelValue.splice(index, 1)\n } else {\n innerModelValue = [...state.innerModelValue, ...tagList]\n }\n \n // 直接赋值新数组,确保 Vue 2 和 Vue 3 都能触发响应式更新\n state.innerModelValue = innerModelValue\n \n // 同步emit,确保立即触发 - Vue 2 需要立即更新才能逐步显示\n emit('update:modelValue', deepClone(innerModelValue))\n emit('change', deepClone(innerModelValue), oldVal)\n}\n\n/**\n * 创建新标签,防止多个地方创建的标签不一致,缺少某些属性\n * @param newTag 新标签对象\n * @return 生成的新标签对象\n */\nexport const createNewTag = (newTag: ISearchBoxNewTag) => newTag\n\n/**\n * 获取元素的唯一标识\n * @param props 组件入参对象\n * @param prevItem 当前标签父级对象\n * @param item 要生成的新标签对象\n * @return 此标签的唯一标识\n */\nexport const getTagId = (props, prevItem, item) => {\n const idKey = prevItem.idMapKey || props.idMapKey\n return item && item[idKey] !== undefined ? { [idKey]: item[idKey] } : null\n}\n","import { showDropdown } from '../utils/dropdown.ts'\nimport { emitChangeModelEvent } from '../utils/tag.ts'\nimport { deepClone } from '../utils/index.ts'\n\nexport function useTag({ props, state, emit, nextTick }) {\n let lastInputValue = deepClone(state.inputValue)\n\n const changeIsChecked = (tag) => {\n if (tag) {\n const parent = state.recordItems.find((item) => item.label === tag.label)\n if (parent && parent.options) {\n const child = parent.options.find((item) => item.label === tag.value)\n child && (child.isChecked = false)\n }\n }\n }\n\n const deleteTag = (tag) => {\n showDropdown(state, false)\n changeIsChecked(tag)\n const newValue = props.modelValue.filter((item) => item !== tag)\n emitChangeModelEvent({ emit, state, nextTick, newValue })\n }\n\n const clearTag = () => {\n showDropdown(state, false)\n props.modelValue.forEach((item) => changeIsChecked(item))\n state.propItem = {}\n state.inputValue = ''\n emitChangeModelEvent({ emit, state, nextTick, newValue: [] })\n emit('clear')\n }\n\n const backspaceDeleteTag = () => {\n if (state.inputValue) {\n return\n }\n if (state.propItem.label) {\n state.propItem = {}\n return\n }\n if (lastInputValue === '' && state.inputValue === '') {\n showDropdown(state, false)\n const lastIndex = props.modelValue.length - 1\n changeIsChecked(props.modelValue[lastIndex])\n const newValue = state.innerModelValue.slice(0, props.modelValue.length - 1)\n emitChangeModelEvent({ emit, state, nextTick, newValue })\n }\n lastInputValue = state.inputValue\n if (state?.instance?.refs?.inputRef?.$el) {\n state.instance.refs.inputRef.$el.click()\n }\n }\n\n return {\n deleteTag,\n clearTag,\n backspaceDeleteTag\n }\n}\n","import { createNewTag, getTagId } from './tag.ts'\nimport { isNumber, omitObj } from './index.ts'\n\n/**\n * 校验正常标签的值,并返回相应的新标签\n * @param instance searchbox 的 instance\n * @param state searchbox 的 state\n * @param props searchbox 的 props\n * @return 验证通过则返回新标签对象,否则返回null\n */\nexport const getVerifyTag = async (instance, state, props) => {\n const { prevItem, inputEditValue } = state\n const { operators } = prevItem\n const rest = omitObj(prevItem)\n let newTag = null\n let isPass = true\n\n await instance.$refs.formRef.validateField(['inputEditValue'], (errMsg) => {\n if (errMsg) {\n isPass = false\n }\n })\n\n if (isPass) {\n let id = null\n const operator = state.operatorValue && operators ? { operator: state.operatorValue } : null\n let value = inputEditValue\n const otherAttr = {}\n // 多选\n if (Array.isArray(inputEditValue)) {\n otherAttr.options = []\n value = ''\n inputEditValue.forEach((editValue) => {\n const item = state.currentEditValue.find((item) => item.label === editValue)\n const label = item?.label || editValue\n value = !value ? label : `${value} | ${label}`\n if (item) {\n const itemId = getTagId(props, prevItem, item)\n otherAttr.options.push({ label, ...itemId })\n } else {\n otherAttr.options.push({ label })\n }\n })\n } else if (Array.isArray(state.currentEditValue)) {\n // 单选\n const item = state.currentEditValue.find((item) => item.label === value)\n id = getTagId(props, prevItem, item)\n }\n\n newTag = createNewTag({ ...rest, label: state.selectValue, ...operator, value, ...id, ...otherAttr })\n }\n\n return newTag\n}\n\n/**\n * 校验 numRange 的值,并返回相应的新标签\n * @param instance searchbox 的 instance\n * @param state searchbox 的 state\n * @param props searchbox 的 props\n * @return 验证通过则返回新标签对象,否则返回null\n */\nexport const getVerifyNumTag = async (instance, state, props) => {\n const { prevItem } = state\n const minNum = `min${prevItem.field}`\n const maxNum = `max${prevItem.field}`\n const start = state[minNum]\n const end = state[maxNum]\n const verifyProps = [minNum, maxNum]\n let isPass = true\n let newTag = null\n await instance.$refs.formRef.validateField(verifyProps, (errMsg) => {\n if (errMsg) {\n isPass = false\n }\n })\n\n if (isPass) {\n const { field, label: prevLabel, unit, type, operators } = prevItem\n const label = unit ? `${prevLabel}(${unit})` : prevLabel\n let value = ''\n if (start && end) {\n value = `${start}-${end}`\n } else {\n value = start ? `≥${start}` : `≤${end}`\n }\n const id = getTagId(props, prevItem, prevItem)\n const operator = state.operatorValue && operators ? { operator: state.operatorValue } : null\n newTag = createNewTag({ type, field, label, value, ...id, start, end, ...operator })\n }\n\n return newTag\n}\n\n/**\n * 校验 dateRange datetimeRange 的值,并返回相应的新标签\n * @param instance searchbox 的 instance\n * @param state searchbox 的 state\n * @param props searchbox 的 props\n * @param isDateTimeType 是否 datetimeRange\n * @return 验证通过则返回新标签对象,否则返回null\n */\nexport const getVerifyDateTag = async (instance, state, props, isDateTimeType) => {\n const { prevItem, startDate, endDate, startDateTime, endDateTime } = state\n let start = null\n let end = null\n let isPass = true\n let newTag = null\n let verifyProps = null\n if (isDateTimeType) {\n start = startDateTime\n end = endDateTime\n verifyProps = ['startDateTime', 'endDateTime']\n } else {\n start = startDate\n end = endDate\n verifyProps = ['startDate', 'endDate']\n }\n\n await instance.$refs.formRef.validateField(verifyProps, (errMsg) => {\n if (errMsg) {\n isPass = false\n }\n })\n\n if (isPass) {\n const { operators } = prevItem\n const rest = omitObj(prevItem)\n let value = ''\n if (start && end) {\n if (start > end) {\n return\n } else if (start === end) {\n value = start\n } else {\n value = `${start}-${end}`\n }\n } else {\n value = start ? `≥${start}` : `≤${end}`\n }\n const id = getTagId(props, prevItem, prevItem)\n const operator = state.operatorValue && operators ? { operator: state.operatorValue } : null\n newTag = createNewTag({ ...rest, value, start, end, ...id, ...operator })\n }\n\n return newTag\n}\n\n/**\n * 按需加载 state 里 numRange 类型的变量,按需加载校验规则\n * @param state searchbox 的 state\n * @param item 当前选择的 item 值\n */\nexport const setStateNumRange = (state, item, t) => {\n const { prevItem } = state\n const { field, start, end, min = prevItem.min, max = prevItem.max } = item\n const nextMinNum = `min${field}`\n const nextMaxNum = `max${field}`\n if (state.curMinNumVar !== nextMinNum || state.curMaxNumVar !== nextMaxNum) {\n delete state[state.curMinNumVar]\n delete state[state.curMaxNumVar]\n delete state.formRules[state.curMinNumVar]\n delete state.formRules[state.curMaxNumVar]\n state.curMinNumVar = nextMinNum\n state.curMaxNumVar = nextMaxNum\n }\n state[state.curMinNumVar] = start\n state[state.curMaxNumVar] = end\n const { curMinNumVar, curMaxNumVar } = state\n const minIsNumber = isNumber(min)\n const maxIsNumber = isNumber(max)\n if (minIsNumber || maxIsNumber) {\n state.formRules[curMinNumVar] = {\n validator: (rule, value, cb) => {\n const valueIsNumber = isNumber(value)\n\n if (\n (!valueIsNumber && isNumber(state[curMaxNumVar])) ||\n (valueIsNumber &&\n ((minIsNumber && !maxIsNumber && value >= min) ||\n (!minIsNumber && maxIsNumber && value <= max) ||\n (value >= min && value <= max)))\n ) {\n cb()\n } else {\n state.numberShowMessage = Boolean(value || state[curMaxNumVar])\n cb(new Error(t('tvp.tvpSearchbox.rangeMinErr', [min, max])))\n }\n }\n }\n state.formRules[curMaxNumVar] = {\n validator: (rule, value, cb) => {\n const MinValueIsNumber = isNumber(state[curMinNumVar])\n const curMin = MinValueIsNumber && min < state[curMinNumVar] ? Number(state[curMinNumVar]) : min\n const curMinIsNumber = isNumber(curMin)\n const valueIsNumber = isNumber(value)\n\n if (\n (!valueIsNumber && MinValueIsNumber) ||\n (valueIsNumber &&\n ((curMinIsNumber && !maxIsNumber && value >= curMin) ||\n (!curMinIsNumber && maxIsNumber && value <= max) ||\n (value >= curMin && value <= max)))\n ) {\n cb()\n } else if (!valueIsNumber && !MinValueIsNumber) {\n cb(new Error(t('tvp.tvpSearchbox.rangeNumberTitle')))\n } else {\n cb(new Error(t('tvp.tvpSearchbox.rangeMaxErr')))\n }\n }\n }\n } else {\n state.formRules[curMaxNumVar] = {\n validator: (rule, value, cb) => {\n const curMin = state[curMinNumVar]\n const valueIsNumber = isNumber(value)\n const curMinIsNumber = isNumber(curMin)\n\n if (\n (valueIsNumber && !curMinIsNumber) ||\n (!valueIsNumber && curMinIsNumber) ||\n (valueIsNumber && curMinIsNumber && value >= Number(curMin))\n ) {\n cb()\n } else if (!valueIsNumber && !curMinIsNumber) {\n cb(new Error(t('tvp.tvpSearchbox.rangeNumberTitle')))\n } else {\n cb(new Error(t('tvp.tvpSearchbox.rangeMaxErr')))\n }\n }\n }\n }\n}\n","import { hasTagItem, resetInput, createNewTag, getTagId, emitChangeModelEvent } from '../utils/tag.ts'\nimport { showDropdown } from '../utils/dropdown.ts'\nimport { setStateNumRange } from '../utils/validate.ts'\nimport { deepClone, omitObj } from '../utils/index.ts'\n\nexport function useDropdown({ props, emit, state, t, format, nextTick, vm, cancelHandleInput }) {\n const instance = vm || state.instance\n const showValueItem = (item) => {\n const { start, end, type } = item\n state.backupList = item.options\n if (type === 'numRange') {\n setStateNumRange(state, item, t)\n } else if (type === 'dateRange') {\n const { dateRangeFormat } = state\n if (!state.startDate && start) {\n const newStart = format(start, dateRangeFormat)\n state.startDate = state.endDate < newStart ? null : newStart\n }\n if (!state.endDate && end) {\n const newEnd = format(end, dateRangeFormat)\n state.endDate = newEnd < state.startDate ? null : newEnd\n }\n } else if (type === 'datetimeRange') {\n const { datetimeRangeFormat } = state\n if (!state.startDateTime && start) {\n const newStart = format(start, datetimeRangeFormat)\n state.startDateTime = state.endDateTime < newStart ? null : newStart\n }\n if (!state.endDateTime && end) {\n const newEnd = format(end, datetimeRangeFormat)\n state.endDateTime = newEnd < state.startDateTime ? null : newEnd\n }\n } else if (state.backupList && type === 'checkbox') {\n state.filterList = state.backupList\n state.checkboxGroup = []\n state.backupList?.forEach((subItem) => {\n if (hasTagItem(state, subItem.label)) {\n state.checkboxGroup.push(`${item.label}${subItem.label}`)\n }\n subItem.isFilter = false\n })\n }\n\n if (type !== 'checkbox' && state.backupList?.length) {\n state.backupList?.forEach((option) => {\n option.isFilter = false\n option.isChecked = hasTagItem(state, option.label)\n })\n }\n\n state.currentOperators = null\n if (!state.backupList && !['dateRange', 'datetimeRange', 'numRange', 'custom'].includes(type)) {\n showDropdown(state, false)\n } else {\n showDropdown(state)\n }\n }\n\n const selectPropItem = (item) => {\n const { field, label } = item\n\n // 创建新对象而不是直接修改属性,确保 Vue 2 响应式检测\n state.propItem = { ...state.propItem, label }\n\n emit('first-level-select', field)\n\n const inputRef = instance.$refs?.inputRef\n state.prevItem = item\n state.backupPrevItem = item\n const { operators } = item\n if (operators?.length) {\n state.operatorValue = ''\n state.currentOperators = operators\n showDropdown(state)\n } else {\n state.operatorValue = ':'\n showValueItem(item)\n }\n state.inputValue = ''\n inputRef.focus()\n }\n\n const setOperator = (operator) => {\n state.operatorValue = operator\n showValueItem(state.prevItem)\n }\n\n /**\n * 更新modelValue值\n * @param prevItem items数组的第一层元素信息,用来识别此类型标签的某些属性作相应处理\n * @param item 当前选中的标签值信息\n * @param label 标签左侧的label\n * @param value 标签右侧值的value\n */\n const updateModelValue = (prevItem, item, label, value) => {\n const { replace, operators, mergeTag } = prevItem\n const rest = omitObj(prevItem)\n const { indexMap } = state\n const index = indexMap.get(label)\n const id = getTagId(props, prevItem, item)\n const operator = state.operatorValue && operators ? { operator: state.operatorValue } : null\n let newTag = null\n\n if (mergeTag) {\n const options = { label: value, ...id }\n if (index >= 0) {\n const newValue = `${state.innerModelValue[index].value} | ${value}`\n const newOptions = [...state.innerModelValue[index].options, options]\n newTag = createNewTag({ ...state.innerModelValue[index], value: newValue, options: newOptions })\n } else {\n newTag = createNewTag({ ...rest, label, value, options: [options] })\n }\n } else {\n newTag = createNewTag({ ...rest, label, value, ...id, ...operator })\n }\n if (hasTagItem(state, value, label)) {\n resetInput(state)\n return\n }\n showDropdown(state, false)\n\n const oldValue = deepClone(state.innerModelValue)\n let newValue = [] as any[]\n if ((replace || mergeTag) && index >= 0) {\n const cloned = [...state.innerModelValue]\n cloned.splice(index, 1)\n newValue = [...cloned, newTag]\n } else {\n newValue = [...state.innerModelValue, newTag]\n }\n emitChangeModelEvent({ emit, state, nextTick, newValue, oldValue })\n }\n /**\n * 使用输入选项\n * @param val 输入框的值\n *\n */\n const selectInputValue = (val: string) => {\n if (state.propItem?.label) {\n selectRadioItem({ label: val })\n } else {\n createTag()\n }\n }\n\n /**\n * 选中单选标签\n * @param item 选中的标签option项\n * @param isPotential 是否为选择潜在匹配项,默认否。参数可选\n */\n const selectRadioItem = (item, isPotential = false) => {\n showDropdown(state, false)\n // 潜在匹配项没有prevItem\n if (isPotential) {\n state.prevItem = item\n state.backupPrevItem = item\n }\n\n const { prevItem } = state\n const value = item.value || item.label\n const inputRef = instance.$refs?.inputRef\n if (!hasTagItem(state, value)) {\n const tagLabel = state.propItem.label || item.label\n updateModelValue(prevItem, item, tagLabel, value)\n }\n inputRef.focus()\n }\n const hasNotInputValueCreateTag = (propItem, prevItem) => {\n // 有label\n if (propItem.label) {\n // 触发 second-level-enter 事件,传递当前选中的 item 和对应的 options\n emit('second-level-enter', prevItem)\n\n if (!prevItem.options || !prevItem.options.length) {\n return\n }\n\n const firstOption = prevItem.options[0]\n if (!firstOption) {\n return\n }\n\n const hasTag = props.modelValue.find((item) => item.value === firstOption.label)\n\n if (!hasTag) {\n const label = prevItem.label\n const value = firstOption.label\n updateModelValue(prevItem, firstOption, label, value)\n return\n }\n } else {\n emit('search', state.innerModelValue)\n }\n }\n\n const newTagUpdateModelValue = (prevItem, propItem, tag) => {\n const item = state.backupList?.find((subItem) => subItem.label === tag)\n updateModelValue(prevItem, item, propItem.label, tag)\n }\n\n const hasInputValueCreateTag = (inputValue, propItem, prevItem) => {\n // 有label的情况\n if (propItem.label) {\n const { regexp, replace, type, mergeTag } = prevItem\n const tagList =\n (type !== 'checkbox' && replace) || (type === 'checkbox' && mergeTag)\n ? [inputValue]\n : inputValue.split(props.splitInputValue)\n\n if (regexp) {\n for (const tag of tagList) {\n if (regexp.test(tag)) {\n newTagUpdateModelValue(prevItem, propItem, tag)\n }\n }\n // 有输入且无正则\n } else {\n for (const tag of tagList) {\n newTagUpdateModelValue(prevItem, propItem, tag)\n }\n }\n // 无label的情况\n } else {\n const { items, defaultField } = props\n const currentItem =\n items.find((item) => {\n const { regexp } = item\n return regexp && regexp.test(state.inputValue)\n }) || (defaultField ? items.find((item) => item.field === defaultField) : state.allTypeAttri)\n const { replace, type, mergeTag } = currentItem\n const tagList =\n (type !== 'checkbox' && replace) || (type === 'checkbox' && mergeTag)\n ? [inputValue]\n : inputValue.split(props.splitInputValue)\n\n if (currentItem?.options?.length) {\n state.backupList = [...currentItem.options]\n state.backupList?.forEach((item) => {\n const label = item.value || item.label\n if (tagList.includes(label)) {\n item.isChecked = true\n }\n })\n }\n const label = currentItem.label\n for (const tag of tagList) {\n updateModelValue(currentItem, {}, label, tag)\n }\n }\n }\n\n const createTag = () => {\n const { inputValue, propItem, prevItem } = state\n // 取消 handleInput 的防抖,防止快速输入后回车导致面板弹出\n if (cancelHandleInput) {\n cancelHandleInput()\n }\n showDropdown(state, false)\n if (!inputValue) {\n // 输入为空的情况\n hasNotInputValueCreateTag(propItem, prevItem)\n } else {\n // 输入不为空的情况\n const { maxlength } = props\n if (maxlength && maxlength < inputValue.length) {\n emit('exceed', maxlength)\n return\n }\n\n hasInputValueCreateTag(inputValue, propItem, prevItem)\n }\n }\n\n // 帮助图标点击事件\n const helpClick = () => {\n emit('help')\n }\n\n return { selectPropItem, selectRadioItem, selectInputValue, createTag, helpClick, setOperator }\n}\n","// import { ref } from 'vue'\nimport Loading from '@opentiny/vue-loading'\nimport { debounce } from '../utils/index.ts'\nimport { hasTagItem, createNewTag, getTagId, emitChangeModelEvent } from '../utils/tag.ts'\nimport { showDropdown } from '../utils/dropdown.ts'\n\nconst escapeRegExp = (string) => string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\nconst getHighlightMatch = (labelRegex, label) => {\n const match = []\n let lastIndex = 0\n let result\n\n // 当正则表达式在label中找到匹配项时,不断进行匹配\n while ((result = labelRegex.exec(label)) !== null) {\n const startIndex = result.index // 获取当前匹配项的开始位置\n const endIndex = labelRegex.lastIndex // 获取当前匹配项的结束位置\n\n // 如果当前匹配项的开始位置大于上一次匹配项的结束位置,说明中间有未匹配的部分\n if (startIndex > lastIndex) {\n match.push(label.slice(lastIndex, startIndex)) // 将未匹配的部分添加到match数组中\n }\n\n match.push(label.slice(startIndex, endIndex)) // 将当前匹配项添加到match数组中\n lastIndex = endIndex // 更新上一次匹配项的结束位置\n }\n\n // 如果最后一次匹配项的结束位置小于label的长度,说明label的末尾还有未匹配的部分\n if (lastIndex < label.length) {\n match.push(label.slice(lastIndex)) // 将未匹配的部分添加到match数组中\n }\n\n return match\n}\n\nexport function useMatch({ props, state, emit, nextTick }) {\n // const loadingInstance = ref(null)\n\n const getMatchList = async (keyword: string) => {\n // if (typeof document !== 'undefined') {\n // !loadingInstance.value &&\n // (loadingInstance.value = Loading.service({\n // target: document.getElementById('potential-loading')\n // }))\n // }\n state.potentialOptions = await props.potentialOptions.getMatchList(keyword)\n // loadingInstance.value && loadingInstance.value.close()\n showDropdown(state, true)\n }\n\n const handleSearch = (e) => {\n const { recordItems, propItem } = state\n const raw = typeof e === 'string' ? e : (e && e.target && typeof e.target.value === 'string' ? e.target.value : state.inputValue || '')\n const inputValue = String(raw)?.trim()\n const { maxlength } = props\n\n if (maxlength && maxlength < inputValue.length) {\n emit('exceed', maxlength)\n return\n }\n\n if (inputValue.length === 0) {\n showDropdown(state)\n return\n }\n\n Object.keys(state.matchItems).forEach((key) => {\n state.matchItems[key].attr = []\n state.matchItems[key].attrValue = []\n })\n\n const value = escapeRegExp(inputValue)\n const patt = new RegExp(value, 'i')\n const hasItem =\n propItem.label || !value ? null : recordItems.find((item) => item.type === 'map' && patt.test(item.label))\n if (hasItem) {\n state.propItem = { ...state.propItem, label: hasItem.label }\n state.inputValue = ''\n state.prevItem = hasItem\n state.backupPrevItem = hasItem\n state.backupList = hasItem.options || []\n return\n }\n\n state.filterList = state.backupList?.filter((item) => {\n if (patt.test(item.label)) {\n delete item.isFilter\n if (hasTagItem(state, item.label)) {\n state.checkboxGroup.push(`${state.prevItem.label}${item.label}`)\n }\n\n return true\n } else {\n item.isFilter = true\n return false\n }\n })\n\n const labelRegex = new RegExp(value, 'ig')\n const hightlighStr = inputValue.toLowerCase()\n\n // 有label,只在backupList搜索\n if (state.propItem.label) {\n state.backupList?.forEach((item) => {\n item.hightlighStr = hightlighStr\n const itemLabel = item.label\n if (patt.test(itemLabel)) {\n item.match = getHighlightMatch(labelRegex, itemLabel)\n item.isFilter = false\n } else {\n item.isFilter = true\n }\n })\n // 添加默认选项,未匹配有输入值到也展示面板\n if (state.backupList?.length || inputValue) {\n showDropdown(state)\n } else {\n showDropdown(state, false)\n }\n return\n }\n\n // 无label,需要全局搜\n for (const item of recordItems) {\n const { options = [], groupKey = '0', ...rest } = item\n const itemLabel = rest.label\n if (patt.test(itemLabel)) {\n const match = getHighlightMatch(labelRegex, itemLabel)\n state.matchItems[groupKey].attr.push({ ...item, match, hightlighStr })\n }\n for (const option of options) {\n const optionLabel = state.propItem.label ? itemLabel : `${itemLabel}:${option.label}`\n if (patt.test(optionLabel)) {\n const match = getHighlightMatch(labelRegex, optionLabel)\n state.matchItems[groupKey].attrValue.push({\n ...option,\n ...rest,\n options,\n hightlighStr,\n value: option.label,\n match\n })\n }\n }\n }\n\n if (value && props.potentialOptions && props.potentialOptions.getMatchList) {\n getMatchList(value)\n } else {\n showDropdown(state)\n }\n }\n\n const handleInput = debounce(handleSearch, 500)\n\n // 保存取消函数,供外部调用\n const cancelHandleInput = () => {\n if (handleInput.cancel) {\n handleInput.cancel()\n }\n }\n\n const resetBackupList = () => {\n state.backupList?.forEach((item) => item.isFilter && delete item.isFilter)\n }\n\n const selectFirstMap = (item, isFirst) => {\n const { options } = item\n const { prevItem, propItem } = state\n if (options) {\n showDropdown(state, false)\n state.propItem = { ...state.propItem, value: `${item.label}=` }\n state.isShowTagKey = false\n state.inputValue = ''\n\n state.backupList = item.options || []\n resetBackupList()\n\n state.backupList?.forEach((subItem) => {\n const value = propItem.value + subItem.label\n subItem.isChecked = hasTagItem(state, value)\n })\n } else {\n if (item.isChecked) {\n return\n }\n\n showDropdown(state, false)\n state.isShowTagKey = true\n resetBackupList()\n const { field, type } = prevItem\n const value = propItem.value + item.label\n const id = getTagId(props, prevItem, item)\n const newTag = createNewTag({ type, field, label: propItem.label, value, ...id })\n const tagList = [newTag]\n emitChangeModelEvent({ emit, state, nextTick, tagList })\n }\n if (isFirst) {\n showDropdown(state)\n }\n }\n\n return {\n handleInput,\n selectFirstMap,\n cancelHandleInput\n }\n}\n","import { hasTagItem, createNewTag, getTagId, emitChangeModelEvent } from '../utils/tag.ts'\nimport { deepClone, omitObj } from '../utils/index.ts'\nimport { showDropdown } from '../utils/dropdown.ts'\n\nexport function useCheckbox({ props, state, emit, nextTick }) {\n const selectCheckbox = (confirm: boolean) => {\n showDropdown(state, false)\n const { checkboxGroup, prevItem, propItem } = state\n const rest = omitObj(prevItem)\n if (confirm) {\n const tagList = []\n const oldValue = deepClone(state.innerModelValue)\n const { mergeTag, operators, label: prevLabel } = prevItem\n if (mergeTag) {\n let value = ''\n const options = []\n const { indexMap } = state\n const hasTagIndex = indexMap.get(prevLabel)\n hasTagIndex !== undefined && state.innerModelValue.splice(hasTagIndex, 1)\n\n state.backupList?.forEach((item) => {\n const { label } = item\n const checkboxLabel = `${prevLabel}${label}`\n const hasItem = checkboxGroup.includes(checkboxLabel)\n if (hasItem) {\n delete item.isFilter\n const id = getTagId(props, prevItem, item)\n const newOptions = { label: item.label, ...id }\n value += !value ? label : ` | ${label}`\n options.push(newOptions)\n }\n })\n if (options.length > 0) {\n const newTag = { ...rest, value, options }\n tagList.push(newTag)\n }\n } else {\n const { valueMap } = state\n const indexList = []\n state.backupList?.forEach((item) => {\n const { label } = item\n const value = `${prevLabel}${label}`\n const hasItem = checkboxGroup.includes(value)\n if (hasItem && !hasTagItem(state, label)) {\n const id = getTagId(props, prevItem, item)\n const operator = state.operatorValue && operators ? { operator: state.operatorValue } : null\n const newTag = createNewTag({ ...rest, label: propItem.label, value: label, ...id, ...operator })\n tagList.push(newTag)\n item.isChecked = true\n } else if (!hasItem && hasTagItem(state, label)) {\n item.isChecked = false\n const index = valueMap.get(value)\n indexList.push(index)\n }\n })\n if (indexList.length) {\n const filtered = state.innerModelValue.filter((item, index) => item && !indexList.includes(index))\n // 直接通过 newValue 强制同步到 modelValue(Vue2 需要显式触发)\n emitChangeModelEvent({ emit, state, nextTick, newValue: filtered, oldValue })\n return\n }\n }\n emitChangeModelEvent({ emit, state, nextTick, tagList, oldValue })\n } else {\n state.propItem = { ...propItem, label: '' }\n state.inputValue = ''\n }\n }\n\n\n return {\n selectCheckbox,\n\n }\n}\n","import { showDropdown } from '../utils/dropdown.ts'\nimport { getVerifyDateTag } from '../utils/validate.ts'\nimport { emitChangeModelEvent } from '../utils/tag.ts'\n\nexport function useDatePicker({ props, state, emit, nextTick, vm }) {\n const instance = vm || state.instance\n const onConfirmDate = async (confirm: boolean, isDateTimeType = false) => {\n if (!confirm) {\n state.propItem = { label: '' } \n\n return\n }\n const newTag = await getVerifyDateTag(instance, state, props, isDateTimeType)\n if (newTag) {\n showDropdown(state, false)\n const newValue = props.modelValue.filter((prev) => prev.type !== newTag.type || prev.field !== newTag.field)\n newValue.push(newTag)\n emitChangeModelEvent({ emit, state, nextTick, newValue })\n } else {\n showDropdown(state)\n }\n }\n\n const handleDateShow = () => showDropdown(state)\n\n const pickerOptions = (startDate, endName = '') => ({\n disabledDate(time) {\n const { maxTimeLength = 0, min, max } = state.prevItem\n\n const endDate = state[endName]\n const curTime = time.getTime()\n // 有限制时间跨度timeLength时\n if (maxTimeLength > 0) {\n if (min || max) {\n if (endName && endDate) {\n const end = new Date(endDate).getTime()\n const start = !min && max ? end - maxTimeLength : Math.max(min.getTime(), end - maxTimeLength)\n return curTime < start || curTime > end\n } else if (!endName && startDate) {\n const start = new Date(startDate).getTime()\n const end = min && !max ? start + maxTimeLength : Math.min(max.getTime(), start + maxTimeLength)\n return curTime < start || curTime > end\n } else {\n return (min && curTime < min.getTime()) || (max && curTime > max.getTime())\n }\n } else {\n if (endName && endDate) {\n const end = new Date(endDate).getTime()\n const start = end - maxTimeLength\n return curTime < start || curTime > end\n } else if (!endName && startDate) {\n const start = new Date(startDate).getTime()\n const end = start + maxTimeLength\n return curTime < start || curTime > end\n } else {\n return false\n }\n }\n } else {\n if (min || max) {\n if (endName && endDate) {\n const end = new Date(endDate).getTime()\n return (min && curTime < min.getTime()) || curTime > end\n } else if (!endName && startDate) {\n const start = new Date(startDate).getTime()\n return curTime < start || (max && curTime > max.getTime())\n } else {\n return curTime < min || curTime > max\n }\n } else {\n if (endName && endDate) {\n const end = new Date(endDate).getTime()\n return curTime > end\n } else if (!endName && startDate) {\n const start = new Date(startDate).getTime()\n return curTime < start\n } else {\n return false\n }\n }\n }\n }\n })\n\n return {\n onConfirmDate,\n handleDateShow,\n pickerOptions\n }\n}\n","import { showDropdown } from '../utils/dropdown.ts'\nimport { getVerifyNumTag } from '../utils/validate.ts'\nimport { emitChangeModelEvent } from '../utils/tag.ts'\n\nexport function useNumRange({ props, state, t, emit, nextTick, vm }) {\n const instance = vm || state.instance\n const sizeChange = async (confirm: boolean) => {\n if (!confirm) {\n state.propItem = { ...state.propItem, label: '' }\n return\n }\n\n const newTag = await getVerifyNumTag(instance, state, props)\n if (newTag) {\n showDropdown(state, false)\n const newValue = props.modelValue.filter((prev) => prev.type !== newTag.type || prev.field !== newTag.field)\n newValue.push(newTag)\n emitChangeModelEvent({ emit, state, nextTick, newValue })\n } else {\n showDropdown(state)\n }\n }\n\n /**\n * 创建 type=dateRange 和 type = datetimeRange 的校验规则\n * @param startKey 校验的开始日期名\n * @param endKey 校验的结束日期名\n */\n const createDateRules = (item, startKey, endKey) => {\n const { maxTimeLength = 0 } = item\n return {\n [startKey]: {\n validator: (rule, value, cb) => {\n if (maxTimeLength > 0 && !value) {\n cb(new Error(t('tvp.tvpSearchbox.notBeNull')))\n } else if (!value && !state[endKey]) {\n cb(new Error(t('tvp.tvpSearchbox.rangeDateTitle')))\n } else {\n cb()\n }\n }\n },\n [endKey]: {\n validator: (rule, value, cb) => {\n if (maxTimeLength > 0 && !value) {\n cb(new Error(t('tvp.tvpSearchbox.notBeNull')))\n } else if (!value && !state[startKey]) {\n cb(new Error(t('tvp.tvpSearchbox.rangeDateTitle')))\n } else {\n cb()\n }\n }\n }\n }\n }\n\n const initFormRule = () => {\n let dateRules = {},\n datetimeRules = {}\n props.items.forEach((item) => {\n if (item.type === 'dateRange') {\n dateRules = createDateRules(item, 'startDate', 'endDate')\n }\n\n if (item.type === 'datetimeRange') {\n datetimeRules = createDateRules(item, 'startDateTime', 'endDateTime')\n }\n })\n state.formRules = {\n ...dateRules,\n ...datetimeRules\n }\n if (props.editable) {\n state.formRules.inputEditValue = {\n required: true,\n message: t('tvp.tvpSearchbox.notBeNull'),\n trigger: ['change', 'blur']\n }\n }\n }\n\n return {\n initFormRule,\n sizeChange\n }\n}\n","import { emitChangeModelEvent } from '../utils/tag.ts'\nimport { getVerifyNumTag, getVerifyDateTag, setStateNumRange, getVerifyTag } from '../utils/validate.ts'\nimport { showDropdown } from '../utils/dropdown.ts'\n\nexport function useEdit({ props, state, t, nextTick, format, emit, vm }) {\n const setDropdownProps = (curTag) => {\n const { operator, value, start, end } = curTag\n const { options, operators, type, mergeTag } = state.prevItem\n if (type === 'custom') {\n return\n } else if (type === 'numRange') {\n setStateNumRange(state, curTag, t)\n } else if (type === 'dateRange') {\n const { dateRangeFormat } = state\n state.startDate = format(start, dateRangeFormat)\n state.endDate = format(end, dateRangeFormat)\n } else if (type === 'datetimeRange') {\n const { datetimeRangeFormat } = state\n state.startDateTime = format(start, datetimeRangeFormat)\n state.endDateTime = format(end, datetimeRangeFormat)\n } else {\n if (mergeTag) {\n const labels = curTag.options?.flatMap((item) => item.label) || []\n // 多选编辑态,tiny-select multiple 需要数组\n state.inputEditValue = labels\n state.currentEditSelectTags = labels\n } else {\n // 其他场景使用字符串\n state.inputEditValue = Array.isArray(value) ? value.join(',') : (value || '')\n }\n state.currentEditValue = options\n }\n state.operatorValue = operator\n state.currentOperators = operators\n }\n\n // 检查表单校验状态\n const checkFormValidation = async () => {\n if (!state.instance?.$refs?.formRef) {\n return\n }\n\n const { prevItem } = state\n let verifyProps = []\n\n if (prevItem.type === 'numRange') {\n verifyProps = [state.curMinNumVar, state.curMaxNumVar]\n } else if (prevItem.type === 'dateRange') {\n verifyProps = ['startDate', 'endDate']\n } else if (prevItem.type === 'datetimeRange') {\n verifyProps = ['startDateTime', 'endDateTime']\n } else if (!['custom', 'map'].includes(prevItem.type)) {\n verifyProps = ['inputEditValue']\n }\n\n if (verifyProps?.length === 0) {\n state.hasFormError = false\n return\n }\n\n let hasError = false\n await state.instance.$refs.formRef.validateField(verifyProps, (errMsg) => {\n if (errMsg) {\n hasError = true\n }\n })\n\n state.hasFormError = hasError\n }\n\n const editTag = (tag, index, e) => {\n if (!props.editable || (tag.type && tag.type === 'map')) {\n return\n }\n\n showDropdown(state, false)\n state.popoverVisible = false\n const dom = e.target.classList.contains('tiny-tag') ? e.target : e.srcElement.parentElement\n\n nextTick(() => {\n const { popoverRef } = state.instance.$refs\n popoverRef.state.referenceElm = dom\n popoverRef.state.popperElm && (popoverRef.state.popperElm.style.display = 'none')\n popoverRef.doDestroy()\n state.popoverVisible = true\n // 打开编辑面板时检查校验状态\n checkFormValidation()\n })\n\n state.prevItem = state.recordItems.find((item) => item.field === tag.field)\n !state.prevItem && (state.prevItem = tag)\n state.selectValue = tag.label\n state.currentModelValueIndex = index\n\n emit('tagClick', tag)\n setDropdownProps(tag)\n }\n\n const selectPropChange = (item, disabled) => {\n if (disabled) return\n state.prevItem = item\n setDropdownProps(item)\n // 切换属性类型时检查校验状态\n nextTick(() => {\n checkFormValidation()\n })\n }\n\n const confirmEditTag = async (isConfirm) => {\n if (!isConfirm) {\n state.popoverVisible = false\n\n return\n }\n\n const { prevItem, currentModelValueIndex: index } = state\n\n let newTag = null\n if (prevItem.type === 'numRange') {\n newTag = await getVerifyNumTag(state.instance, state, props)\n } else if (prevItem.type === 'dateRange') {\n newTag = await getVerifyDateTag(state.instance, state, props, false)\n } else if (prevItem.type === 'datetimeRange') {\n newTag = await getVerifyDateTag(state.instance, state, props, true)\n } else {\n newTag = await getVerifyTag(state.instance, state, props)\n }\n\n if (newTag) {\n showDropdown(state, false)\n state.popoverVisible = false\n emitChangeModelEvent({ emit, state, nextTick, index, newTag, isEdit: true })\n } else {\n state.popoverVisible = true\n }\n\n state.currentEditValue = []\n }\n\n const selectItemIsDisable = (item) => {\n if (item.type && item.type === 'map') {\n return true\n }\n\n if (state.prevItem?.operators || item.operators) {\n return state.prevItem.operators?.length !== item.operators?.length\n }\n\n const typeArr = ['radio', 'checkbox']\n if (state.prevItem.type && typeArr.includes(state.prevItem.type)) {\n return !item.type ? false : !typeArr.includes(item.type)\n }\n\n return state.prevItem?.type !== item.type\n }\n\n return {\n editTag,\n confirmEditTag,\n selectPropChange,\n selectItemIsDisable,\n checkFormValidation\n }\n}\n","import { resetInput, emitChangeModelEvent, hasTagItem } from '../utils/tag.ts'\nimport { showDropdown, showPopover } from '../utils/dropdown.ts'\n\nexport function useCustom({ state, emit, nextTick }) {\n const updateCustomValue = (customTag) => {\n showDropdown(state, false)\n const { prevItem, indexMap } = state\n const { replace, label } = prevItem\n\n const tagList = []\n if (replace && indexMap.has(label)) {\n const index = indexMap.get(label)\n const newTag = { ...prevItem, ...customTag }\n emitChangeModelEvent({ emit, state, nextTick, newTag, index })\n\n return\n } else if (!replace && Array.isArray(customTag)) {\n customTag.forEach((tag) => {\n if (!hasTagItem(state, tag.value)) {\n tagList.push({ ...prevItem, ...tag })\n }\n })\n } else {\n if (!hasTagItem(state, customTag.value)) {\n tagList.push({ ...prevItem, ...customTag })\n }\n }\n emitChangeModelEvent({ emit, state, nextTick, tagList })\n }\n\n const handleConfirm = (customTag) => {\n if (!customTag) {\n resetInput(state)\n showDropdown(state, false)\n return\n }\n\n updateCustomValue(customTag)\n }\n\n const handleEditConfirm = (customTag) => {\n if (!customTag) {\n showPopover(state, false)\n return\n }\n\n updateCustomValue(customTag)\n }\n\n return {\n handleConfirm,\n handleEditConfirm\n }\n}\n","import { showDropdown, showPopover } from '../utils/dropdown.ts'\nimport { hasTagItem } from '../utils/tag.ts'\n\nexport function useInit({ props, state }) {\n const initItems = () => {\n state.groupItems = {}\n state.recordItems.forEach((item) => {\n const { groupKey = '0' } = item\n if (state.groupItems[groupKey]) {\n state.groupItems[groupKey].push({ ...item })\n } else {\n state.groupItems[groupKey] = [{ ...item }]\n state.matchItems[groupKey] = { attr: [], attrValue: [] }\n }\n if (state.prevItem && item.field === state.prevItem.field && item !== state.prevItem) {\n const { options, type } = item\n state.prevItem = item\n if (options?.length) {\n state.backupList = options\n }\n if (type === 'checkbox') {\n state.filterList = state.backupList\n state.checkboxGroup = []\n state.backupList?.forEach((subItem) => {\n const { label } = subItem\n if (hasTagItem(state, label)) {\n state.checkboxGroup.push(`${item.label}${label}`)\n }\n subItem.isFilter = false\n })\n }\n showDropdown(state, item.field === state.prevItem.field && item !== state.prevItem)\n }\n })\n }\n\n const handleClick = (e) => {\n const { backupPrevItem, prevItem } = state\n e.stopPropagation()\n if (props.editable) {\n state.popoverVisible = false\n state.currentEditValue = []\n if (state.propItem.label && backupPrevItem && backupPrevItem !== prevItem) {\n state.prevItem = backupPrevItem\n }\n }\n\n if (\n (state.hasBackupList && (state.backupList?.length === 0 || !state.backupList) && !state.inputValue) ||\n props.items.length === 0\n ) {\n showDropdown(state, false)\n } else {\n showDropdown(state)\n }\n }\n\n const watchOutsideClick = () => {\n if (props.editable) {\n showPopover(state, false)\n }\n\n state.isMouseDown = false\n showDropdown(state, false)\n }\n\n const watchMouseDown = () => {\n state.isMouseDown = true\n }\n\n const watchMouseMove = () => {\n if (state.isMouseDown) {\n state.isMouseDown = false\n }\n }\n\n return {\n initItems,\n watchOutsideClick,\n watchMouseDown,\n watchMouseMove,\n handleClick\n }\n}\n","export default {\n tvp: {\n tvpSearchbox: {\n defaultPlaceholder: '请选择属性筛选,或输入关键字',\n addPlaceholder: '添加筛选条件',\n tagPlaceholder: '请选择标签键/值搜索,或输入“键=值”搜索',\n dynamicPlaceholder: '请选择{newValue}搜索',\n attributeType: '属性类型',\n propertyValue: '{0}的值',\n matched: '潜在匹配项',\n allValues: '所有值',\n allProperty: '全部属性',\n operator: '运算符',\n clearAll: '清空',\n emptyValue: '空 值',\n help: '点击查看帮助',\n switchText: '切换到默认搜索项',\n tagKey: '键',\n tagValue: '值',\n minValueText: '最小值',\n maxValueText: '最大值',\n rangeMinErr: '输入值必须在{0}~{1}之间',\n rangeMaxErr: '最大值必须大于等于最小值,或者为空',\n rangeNumberTitle: '请至少输入一个值',\n rangeDateTitle: '请至少输入一个日期',\n timeLengthTitle: '可选时间跨度为{value}天内',\n rangeBeginLabel: '开始日期',\n rangeEndLabel: '结束日期',\n rulekeyword1: '关键字',\n notBeNull: '值不能为空',\n noData: '暂无匹配数据...',\n selectAll: '全选',\n confirm: '确定',\n cancel: '取消',\n equal: '等于',\n notEqual: '不等于',\n contain: '包含',\n notContain: '不包含',\n initUse: '搜索'\n }\n }\n}\n","export default {\n tvp: {\n tvpSearchbox: {\n defaultPlaceholder: 'Select attribute filtering or enter keywords',\n addPlaceholder: 'Add filtering criteria',\n tagPlaceholder: 'Please select tag key/value search, or enter \"key=value\" to search',\n dynamicPlaceholder: 'Please select {newValue} to search',\n attributeType: 'Attribute Type',\n propertyValue: 'The value of {0}',\n matched: 'Potential matching items',\n allValues: 'All values',\n allProperty: 'All Properties',\n operator: 'Operator',\n clearAll: 'Clear',\n emptyValue: 'Empty value',\n help: 'Click to view help',\n switchText: 'Switch to default search terms',\n tagKey: 'Key',\n tagValue: 'Value',\n minValueText: 'Minimum value',\n maxValueText: 'Maximum value',\n rangeMinErr: 'The input value must be between {0} and {1}',\n rangeMaxErr: 'The maximum value must be greater than or equal to the minimum value, or empty',\n rangeNumberTitle: 'Please enter at least one value',\n rangeDateTitle: 'Please enter at least one date',\n timeLengthTitle: 'The optional time span is within {value} days',\n rangeBeginLabel: 'Start date',\n rangeEndLabel: 'End date',\n rulekeyword1: 'Keywords',\n notBeNull: 'The value cannot be empty',\n noData: 'There is currently no matching data available ..',\n selectAll: 'Select All',\n confirm: 'Confirm',\n cancel: 'Cancel',\n equal: 'Equal',\n notEqual: 'Not equal',\n contain: 'Contain',\n notContain: 'Does not contain',\n initUse: 'Search'\n }\n }\n}\n","/**\n * 国际化工具函数\n * 如果使用组件库的项目有i18n则使用父级项目,如果没有则默认使用中文\n */\n\nimport zhCN from './zh_CN'\nimport enUS from './en_US'\n\n// 默认语言包\nconst defaultLocale = 'zh-CN'\nconst locales = {\n 'zh-CN': zhCN,\n 'en-US': enUS\n}\n\n// 全局应用实例\nlet globalApp: any = null\n// 可选的全局 t 覆盖函数(未被 readonly/Proxy 包装)\nlet globalT: any = null\n\n/**\n * 设置全局应用实例\n * @param {any} app - Vue应用实例\n */\nexport const setGlobalApp = (app: any) => {\n globalApp = app\n}\n\n/**\n * 设置全局可写的 t 函数(用于宿主传入未包装的 t,避免只读 Proxy 触发 set 错误)\n * @param {Function} tFn - 翻译函数\n */\nexport const setGlobalT = (tFn: any) => {\n globalT = tFn\n}\n\n/**\n * 获取当前语言\n * @returns {string} 当前语言代码\n */\nexport const getCurrentLocale = () => {\n // Vue3: 从 config.globalProperties 获取\n if (globalApp?.config?.globalProperties?.$i18n?.locale) {\n return globalApp.config.globalProperties.$i18n.locale\n }\n\n // Vue2: 从 $i18n 获取(当传入的是包含 $i18n 的对象时)\n if (globalApp?.$i18n?.locale) {\n return globalApp.$i18n.locale\n }\n\n // 尝试从浏览器语言获取\n if (typeof navigator !== 'undefined') {\n const browserLang = navigator.language || navigator.languages?.[0]\n if (browserLang) {\n return browserLang.startsWith('zh') ? 'zh-CN' : 'en-US'\n }\n }\n\n return defaultLocale\n}\n\n/**\n * 获取语言包\n * @param {string} locale - 语言代码\n * @returns {Object} 语言包对象\n */\nexport const getLocaleMessages = (locale) => {\n return locales[locale] || locales[defaultLocale]\n}\n\n/**\n * 翻译函数\n * @param {string} key - 翻译键,格式为 'namespace.key.subkey'\n * @param {Object} params - 参数对象\n * @returns {string} 翻译后的文本\n */\nexport const t = (key, params = {}) => {\n if (!key) return ''\n\n // 优先使用外部注入的全局 t\n if (typeof globalT === 'function') {\n try {\n const result = globalT(key, params)\n if (result && result !== key) {\n return result\n }\n } catch (error) {\n console.warn('[TinySearchBox] globalT translation failed:', error)\n }\n }\n\n // 尝试使用父级项目的i18n\n if (globalApp?.config?.globalProperties?.$t) {\n try {\n const result = globalApp.config.globalProperties.$t(key, params)\n if (result && result !== key) {\n return result\n }\n } catch (error) {\n console.warn('[TinySearchBox] i18n translation failed:', error)\n }\n }\n\n // 尝试使用Vue实例的$t方法\n if (globalApp?.$t) {\n try {\n const result = globalApp.$t(key, params)\n if (result && result !== key) {\n return result\n }\n } catch (error) {\n console.warn('[TinySearchBox] i18n translation failed:', error)\n }\n }\n\n // 使用默认语言包\n const locale = getCurrentLocale()\n const messages = getLocaleMessages(locale)\n\n // 解析key路径\n const keys = key.split('.')\n let result = messages\n\n for (const k of keys) {\n if (result && typeof result === 'object' && k in result) {\n result = result[k]\n } else {\n // 如果找不到,尝试使用默认语言\n if (locale !== defaultLocale) {\n const defaultMessages = getLocaleMessages(defaultLocale)\n result = defaultMessages\n for (const k2 of keys) {\n if (result && typeof result === 'object' && k2 in result) {\n result = result[k2]\n } else {\n result = key // 最终fallback\n break\n }\n }\n } else {\n result = key // fallback到key本身\n }\n break\n }\n }\n\n // 处理参数替换\n if (typeof result === 'string' && Object.keys(params).length > 0) {\n return result.replace(/\\{(\\w+)\\}/g, (match, paramKey) => {\n return params[paramKey] !== undefined ? params[paramKey] : match\n })\n }\n\n return typeof result === 'string' ? result : key\n}\n\n/**\n * 批量翻译函数\n * @param {Array} keys - 翻译键数组\n * @param {Object} params - 参数对象\n * @returns {Array} 翻译后的文本数组\n */\nexport const tArray = (keys, params = {}) => {\n return keys.map((key) => t(key, params))\n}\n\n/**\n * 检查是否支持某个语言\n * @param {string} locale - 语言代码\n * @returns {boolean} 是否支持\n */\nexport const isLocaleSupported = (locale) => {\n return locale in locales\n}\n\n/**\n * 获取支持的语言列表\n * @returns {Array} 支持的语言代码数组\n */\nexport const getSupportedLocales = () => {\n return Object.keys(locales)\n}\n\n/**\n * 添加自定义语言包\n * @param {string} locale - 语言代码\n * @param {Object} messages - 语言包对象\n */\nexport const addLocale = (locale, messages) => {\n locales[locale] = messages\n}\n\n/**\n * 移除语言包\n * @param {string} locale - 语言代码\n */\nexport const removeLocale = (locale) => {\n if (locale !== defaultLocale) {\n delete locales[locale]\n }\n}\n\n// 默认导出\nexport default {\n t,\n zhCN,\n enUS,\n tArray,\n setGlobalT,\n setGlobalApp,\n getCurrentLocale,\n getLocaleMessages,\n isLocaleSupported,\n getSupportedLocales,\n addLocale,\n removeLocale\n}\n","// 导入工具函数和类型\nimport { format } from './utils/date.ts'\nimport { useTag } from './composables/use-tag.ts'\nimport { useDropdown } from './composables/use-dropdown.ts'\nimport { useMatch } from './composables/use-match.ts'\nimport { useCheckbox } from './composables/use-checkbox.ts'\nimport { useDatePicker } from './composables/use-datepicker.ts'\nimport { useNumRange } from './composables/use-num-range.ts'\nimport { useEdit } from './composables/use-edit.ts'\nimport { useCustom } from './composables/use-custom.ts'\nimport { useInit } from './composables/use-init.ts'\n// 类型导入 - 兼容 Vue 2 和 Vue 3\nimport { showDropdown, showPopover } from './utils/dropdown.ts'\n\nimport { deepClone } from './utils/index.ts'\nimport { resetInput } from './utils/tag.ts'\nimport i18n, { t, getCurrentLocale } from './utils/i18n.ts'\nexport const api = [\n 't',\n 'state',\n 'isShowClose',\n 'showHelp',\n 'maxlength',\n 'panelMaxHeight',\n 'editable',\n 'emptyPlaceholder',\n 'deleteTag',\n 'editTag',\n 'backspaceDeleteTag',\n 'createTag',\n 'clearTag',\n 'helpClick',\n 'handleInput',\n 'handleClick',\n 'handleEvents',\n 'pickerOptions',\n 'resetInput',\n 'selectItemIsDisable',\n 'selectPropChange',\n 'confirmEditTag',\n 'handleConfirm',\n 'handleEditConfirm',\n 'showDropdown',\n 'showPopover'\n]\n\nconst resolveEmptyPlaceholder = (props, t) => props.emptyPlaceholder || t('tvp.tvpSearchbox.addPlaceholder')\n\nconst initState = ({ reactive, computed, api, i18n, watch, props, emit, vm }) => {\n const state = reactive({\n innerModelValue: [...props.modelValue],\n placeholder: props.modelValue.length > 0 ? t('tvp.tvpSearchbox.addPlaceholder') : resolveEmptyPlaceholder(props, t),\n emitter: emit,\n recordItems: [],\n groupItems: {},\n inputValue: '',\n matchItems: {},\n propItem: {},\n backupList: [],\n filterList: [],\n checkboxGroup: [],\n prevItem: {},\n backupPrevItem: '',\n formRules: null,\n validType: 'text',\n numberShowMessage: true,\n startDate: null,\n startDateTime: null,\n endDate: null,\n endDateTime: null,\n isShowTagKey: true,\n potentialOptions: null,\n dateRangeFormat: 'yyyy/MM/dd',\n datetimeRangeFormat: 'yyyy/MM/dd HH:mm:ss',\n indexMap: new Map(),\n valueMap: new Map(),\n popoverVisible: false,\n selectValue: '',\n allTypeAttri: { label: t('tvp.tvpSearchbox.rulekeyword1'), field: 'tvpKeyword', type: 'radio' },\n operatorValue: ':',\n inputEditValue: '',\n currentOperators: '',\n currentEditValue: '',\n currentModelValueIndex: -1,\n curMinNumVar: '',\n curMaxNumVar: '',\n instance: null,\n isMouseDown: false,\n currentEditSelectTags: [],\n visible: false,\n visibleTimer: null,\n hasFormError: false, // 表单校验错误状态\n hasBackupList: computed(() => state.propItem.label && [undefined, 'radio', 'checkbox', 'map'].includes(state.prevItem.type)),\n isIndeterminate: computed(() => state.checkboxGroup.length > 0 && state.checkboxGroup.length !== state.filterList.length),\n checkAll: computed({\n get: () => state.checkboxGroup.length && state.checkboxGroup.length === state.filterList.length,\n set: (val) => {\n if (val) {\n state.checkboxGroup = state.filterList.flatMap((item) => `${state.prevItem.label}${item.label}`)\n } else {\n state.checkboxGroup = []\n }\n }\n })\n })\n return state\n}\n\nexport const renderless = (\n props,\n { getCurrentInstance, onMounted, onBeforeUnmount, computed, reactive, watch },\n { emit: $emit, nextTick, refs, vm, slots }\n) => {\n const api = {} as any\n const emit = props.emitter ? props.emitter.emit : $emit\n const state = initState({ reactive, computed, api, i18n, watch, props, emit, vm })\n initAllApi({ api, state, t, props, emit, nextTick, vm, computed })\n initWatch({ watch, state, props, api, nextTick, vm })\n\n state.instance = vm\n // 在 Vue2 中,slots 可能通过 context 传递,需要设置到 instance 上\n if (vm && slots) {\n vm.slots = slots\n }\n\n // 生命周期\n onMounted(() => {\n if (typeof document !== 'undefined') {\n document.addEventListener('click', api.watchOutsideClick)\n document.addEventListener('mousedown', api.watchMouseDown)\n document.addEventListener('mousemove', api.watchMouseMove)\n }\n })\n\n onBeforeUnmount(() => {\n if (typeof document !== 'undefined') {\n document.removeEventListener('click', api.watchOutsideClick)\n document.removeEventListener('mousedown', api.watchMouseDown)\n document.removeEventListener('mousemove', api.watchMouseMove)\n // 清理语言检查定时器\n if (state.localeCheckInterval) {\n clearInterval(state.localeCheckInterval)\n state.localeCheckInterval = null\n }\n }\n })\n\n // 暴露给模板的方法\n return api\n}\n\n\nconst initAllApi = ({ api, state, t, props, emit, nextTick, vm, computed }) => {\n\n const { deleteTag, clearTag, backspaceDeleteTag } = useTag({ props, state, emit, nextTick })\n const { editTag, confirmEditTag, selectPropChange, selectItemIsDisable, checkFormValidation } = useEdit({ props, state, t, nextTick, format, emit, vm })\n const { handleInput, selectFirstMap, cancelHandleInput } = useMatch({ props, state, emit, nextTick })\n const { selectPropItem, selectRadioItem, selectInputValue, createTag, helpClick, setOperator } = useDropdown({ props, emit, state, t, format, nextTick, vm, cancelHandleInput })\n const { selectCheckbox } = useCheckbox({ props, state, emit, nextTick })\n const { onConfirmDate, handleDateShow, pickerOptions } = useDatePicker({ props, state, emit, nextTick, vm })\n const { sizeChange, initFormRule } = useNumRange({ props, state, t, emit, nextTick, vm })\n const { handleConfirm, handleEditConfirm } = useCustom({ state, emit, nextTick })\n const { initItems, watchOutsideClick, watchMouseDown, watchMouseMove, handleClick } = useInit({ props, state })\n\n const isShowClose = computed(() => props.modelValue.length || state.propItem.label || state.inputValue)\n\n const eventsMap = () => ({\n selectInputValue,\n selectPropItem,\n selectRadioItem,\n setOperator,\n selectCheckbox,\n sizeChange,\n onConfirmDate,\n selectFirstMap,\n handleDateShow\n })\n\n const setPlaceholder = (placeholderValue: string) => {\n state.placeholder = placeholderValue\n }\n\n const getEmptyPlaceholderValue = () => resolveEmptyPlaceholder(props, t)\n\n // 默认显示占位符,emptyPlaceholder 优先\n if (props.modelValue.length > 0) {\n setPlaceholder(t('tvp.tvpSearchbox.addPlaceholder'))\n } else {\n setPlaceholder(getEmptyPlaceholderValue())\n }\n\n\n const handleEvents = (eventName, p1, p2) => {\n const map = eventsMap()\n if (typeof map[eventName] === 'function') {\n map[eventName](p1, p2)\n } else {\n console.warn(`[TinySearchBox] Unknown event: ${eventName}`)\n }\n }\n\n // 解构所有事件方法\n\n Object.assign(api, {\n t,\n state,\n isShowClose,\n deleteTag,\n editTag,\n backspaceDeleteTag,\n createTag,\n clearTag,\n helpClick,\n handleInput,\n handleClick,\n handleEvents,\n pickerOptions,\n resetInput,\n selectItemIsDisable,\n selectPropChange,\n confirmEditTag,\n handleConfirm,\n handleEditConfirm,\n showDropdown,\n showPopover,\n checkFormValidation,\n setPlaceholder,\n initItems,\n initFormRule,\n watchOutsideClick,\n watchMouseDown,\n watchMouseMove,\n })\n}\n\nconst initWatch = ({ watch, state, props, api, nextTick, vm }) => {\n // 更新 placeholder 的函数\n const updatePlaceholder = () => {\n if (state.propItem.label) {\n const { placeholder, type } = state.prevItem\n if (placeholder) {\n api.setPlaceholder(placeholder)\n } else if (type === 'map') {\n api.setPlaceholder(t('tvp.tvpSearchbox.tagPlaceholder'))\n } else if (state.backupList?.length) {\n api.setPlaceholder(t('tvp.tvpSearchbox.dynamicPlaceholder', { newValue: state.propItem.label }))\n } else {\n api.setPlaceholder(t('tvp.tvpSearchbox.addPlaceholder'))\n }\n } else {\n // 默认显示 emptyPlaceholder(如果提供)或 addPlaceholder\n const defaultPlaceholder =\n props.modelValue.length > 0 ? t('tvp.tvpSearchbox.addPlaceholder') : resolveEmptyPlaceholder(props, t)\n api.setPlaceholder(defaultPlaceholder)\n }\n }\n\n // 获取当前语言(优先从组件实例获取)\n const getI18nLocale = () => {\n // Vue2: 从组件实例获取\n if (vm?.$i18n?.locale) {\n return vm.$i18n.locale\n }\n // Vue3: 从组件实例获取\n if (vm?.proxy?.$i18n?.locale) {\n return vm.proxy.$i18n.locale\n }\n // 回退到默认方法\n return getCurrentLocale()\n }\n\n // 监听语言变化,重新设置 placeholder\n let lastLocale = getI18nLocale()\n\n // Vue2 环境下,使用 vm.$watch 监听 i18n.locale\n if (vm?.$i18n) {\n try {\n vm.$watch(\n () => vm.$i18n.locale,\n (newLocale) => {\n if (newLocale !== lastLocale) {\n lastLocale = newLocale\n updatePlaceholder()\n }\n },\n { immediate: false }\n )\n } catch (e) {\n console.warn('[TinySearchBox] Unable to watch i18n.locale via vm.$watch:', e)\n }\n }\n\n // Vue3 环境下,使用 watch 监听\n if (vm?.proxy?.$i18n) {\n try {\n watch(\n () => vm.proxy.$i18n.locale,\n (newLocale) => {\n if (newLocale !== lastLocale) {\n lastLocale = newLocale\n updatePlaceholder()\n }\n },\n { immediate: false }\n )\n } catch (e) {\n console.warn('[TinySearchBox] Unable to watch i18n.locale via watch:', e)\n }\n }\n\n // 备用方案:通过轮询检查语言变化\n const checkLocaleChange = () => {\n const currentLocale = getI18nLocale()\n if (currentLocale !== lastLocale) {\n lastLocale = currentLocale\n updatePlaceholder()\n }\n }\n\n // 使用定时器定期检查语言变化,存储在 state 中以便清理(降低频率到 200ms)\n if (typeof window !== 'undefined') {\n state.localeCheckInterval = setInterval(checkLocaleChange, 200)\n }\n\n // 监听 props.modelValue 变化时也检查语言\n watch(\n () => props.modelValue,\n () => {\n checkLocaleChange()\n }\n )\n\n // 监听器\n watch(\n () => props.items,\n (newVal) => {\n const wasOpen = state.visible\n const currentField = state.prevItem && state.prevItem.field\n\n state.recordItems = deepClone(newVal)\n api.initItems()\n api.initFormRule()\n nextTick(() => {\n api.initItems()\n api.initFormRule()\n\n // 如果二级面板已打开,则保持不关闭并刷新当前字段的选项\n if (wasOpen && state.propItem.label) {\n const updated = state.recordItems.find((it) => it.field === currentField) || state.prevItem\n state.prevItem = updated || {}\n state.backupList = updated && updated.options ? [...updated.options] : []\n state.filterList = state.backupList ? [...state.backupList] : []\n showDropdown(state) // 保持展开\n }\n })\n },\n {\n deep: true,\n immediate: true\n }\n )\n\n watch(\n () => state.inputValue,\n (newVal) => {\n if (!newVal && !state.propItem.type) {\n state.visible = false\n }\n },\n {\n immediate: true\n }\n )\n\n watch(\n () => state.popoverVisible,\n (newVal) => {\n if (!newVal && !state.inputEditValue.length) {\n if (state.prevItem && state.prevItem.mergeTag) {\n state.inputEditValue = Array.isArray(state.currentEditSelectTags)\n ? state.currentEditSelectTags\n : []\n } else {\n state.inputEditValue = Array.isArray(state.currentEditSelectTags)\n ? state.currentEditSelectTags.join(',')\n : (state.currentEditSelectTags || '')\n }\n }\n // 关闭编辑面板时重置校验错误状态\n if (!newVal) {\n state.hasFormError = false\n }\n },\n {\n immediate: true\n }\n )\n\n // 监听编辑面板相关字段变化,检查校验状态\n watch(\n () => {\n // 获取需要监听的字段值\n const fields = {\n inputEditValue: state.inputEditValue,\n startDate: state.startDate,\n endDate: state.endDate,\n startDateTime: state.startDateTime,\n endDateTime: state.endDateTime\n }\n // 如果是 numRange 类型,添加动态字段\n if (state.curMinNumVar && state.curMaxNumVar) {\n fields[state.curMinNumVar] = state[state.curMinNumVar]\n fields[state.curMaxNumVar] = state[state.curMaxNumVar]\n }\n return fields\n },\n () => {\n if (state.popoverVisible) {\n nextTick(() => {\n api.checkFormValidation()\n })\n }\n },\n { deep: true }\n )\n\n watch(\n () => state.propItem.label,\n (newValue) => {\n // 使用统一的更新函数\n updatePlaceholder()\n }\n )\n\n watch(\n () => props.modelValue,\n (newVal) => {\n if (newVal) {\n state.indexMap.clear()\n state.valueMap.clear()\n newVal.forEach((item, index) => {\n const value = `${item.label}${item.value}`\n state.indexMap.set(item.label, index)\n state.valueMap.set(value, index)\n if (item.options?.length > 0) {\n item.options.forEach((option) => {\n const optionValue = `${item.label}${option.label}`\n state.valueMap.set(optionValue, index)\n })\n }\n })\n showPopover(state, false)\n if (newVal.length === 0) {\n api.setPlaceholder(resolveEmptyPlaceholder(props, t))\n }\n\n if (props.editable && !state.inputEditValue.length && newVal[0]) {\n const tag = newVal[0]\n const prev = state.recordItems.find((it) => it.field === tag.field) || tag\n if (prev.mergeTag && tag.options) {\n const labels = tag.options.flatMap((o) => o.label) || []\n state.inputEditValue = labels\n state.currentEditSelectTags = labels\n } else {\n const v = tag.value\n state.inputEditValue = Array.isArray(v) ? v.join(',') : (v || '')\n }\n }\n state.innerModelValue = [...newVal]\n }\n },\n {\n deep: true,\n immediate: true\n }\n )\n}","<template>\n <div tiny_mode=\"pc\">\n <tiny-dropdown-item\n v-show=\"state.inputValue.trim()\"\n class=\"tvp-search-box__filter-item tvp-search-box__dropdown-item tvp-search-box__dropdown-item-init\"\n :item-data=\"{ label: state.inputValue }\"\n @item-click=\"() => selectInputValue(state.inputValue)\"\n >\n <span> {{ t('tvp.tvpSearchbox.initUse') }}"{{ state.inputValue }}"</span>\n </tiny-dropdown-item>\n <div v-show=\"!state.propItem.label && state.inputValue?.trim()\">\n <div\n v-for=\"(value, key) in state.matchItems\"\n :key=\"key\"\n >\n <div v-if=\"value['attr'].length\">\n <span class=\"tvp-search-box__filter-type\">{{ key === '0' ? t('tvp.tvpSearchbox.attributeType') : key }}</span>\n <tiny-dropdown-item\n v-for=\"(item, index) in value['attr']\"\n :key=\"item.label + index\"\n class=\"tvp-search-box__filter-item tvp-search-box__dropdown-item\"\n :item-data=\"item\"\n @item-click=\"() => selectPropItem(item)\"\n >\n <span>\n <span\n v-for=\"text in item.match\"\n :key=\"text\"\n >\n <span\n v-if=\"text.toLowerCase() === item.hightlighStr\"\n class=\"tvp-search-box__text-highlight\"\n >{{ text }}</span\n >\n <span v-else>{{ text }}</span>\n </span>\n </span>\n </tiny-dropdown-item>\n </div>\n <template v-if=\"value['attrValue'].length\">\n <span class=\"tvp-search-box__filter-type\">{{\n t('tvp.tvpSearchbox.propertyValue', [key === '0' ? t('tvp.tvpSearchbox.attributeType') : key])\n }}</span>\n <tiny-dropdown-item\n v-for=\"(item, index) in value['attrValue']\"\n :key=\"item.label + index\"\n :disabled=\"item.isChecked\"\n class=\"tvp-search-box__filter-item tvp-search-box__dropdown-item\"\n :item-data=\"item\"\n @item-click=\"() => selectRadioItem(item, true)\"\n >\n <span>\n <span\n v-for=\"text in item.match\"\n :key=\"text\"\n >\n <span\n v-if=\"text.toLowerCase() === item.hightlighStr\"\n class=\"tvp-search-box__text-highlight\"\n >{{ text }}</span\n >\n <span v-else>{{ text }}</span>\n </span>\n </span>\n </tiny-dropdown-item>\n </template>\n </div>\n <div v-show=\"state.potentialOptions\">\n <span class=\"tvp-search-box__filter-type\">{{ t('tvp.tvpSearchbox.matched') }}</span>\n <div\n id=\"potential-loading\"\n class=\"tvp-search-box__potential-box\"\n >\n <div v-if=\"state.potentialOptions\">\n <tiny-dropdown-item\n v-for=\"(item, index) in state.potentialOptions\"\n :key=\"item.label + index\"\n class=\"tvp-search-box__filter-item tvp-search-box__dropdown-item\"\n :item-data=\"item\"\n @item-click=\"() => selectRadioItem(item, true)\"\n >\n {{ item.label }}:\n <span class=\"tvp-search-box__text-highlight\">{{ item.value }}</span>\n </tiny-dropdown-item>\n </div>\n </div>\n </div>\n </div>\n <div\n v-show=\"state.visible && !state.propItem.label && !state.inputValue?.trim()\"\n class=\"tvp-search-box__first-panel\"\n >\n <div\n v-for=\"(group, key) in state.groupItems\"\n :key=\"key\"\n >\n <span\n v-if=\"group.length\"\n class=\"tvp-search-box__filter-type\"\n >{{ key === '0' ? t('tvp.tvpSearchbox.attributeType') : key }}</span\n >\n <tiny-dropdown-item\n v-for=\"(item, index) in group\"\n :key=\"(item.field || item.label) + index\"\n class=\"tvp-search-box__dropdown-item\"\n :item-data=\"item\"\n @item-click=\"() => selectPropItem(item)\"\n >\n <span :title=\"item.label\">{{ item.label }}</span>\n </tiny-dropdown-item>\n </div>\n </div>\n </div>\n</template>\n\n<script>\n// Vue2 版本,使用 tiny-vue 的 renderless 架构\nimport { defineComponent, setup, $props, $prefix } from '@opentiny/vue-common'\nimport TinyDropdownItem from '@opentiny/vue-dropdown-item'\nimport { t } from '../utils/i18n.ts'\n\n// 简单的 renderless 函数\nconst renderless = (props, hooks, { emit }) => {\n // 优先使用传入的 events/handleEvents 函数,如果没有则使用 emit\n const handleEvents =\n props.handleEvents ||\n props.events ||\n ((eventName, p1, p2) => {\n emit('events', eventName, p1, p2)\n })\n\n const selectInputValue = (e) => {\n handleEvents('selectInputValue', e)\n }\n\n const selectPropItem = (e) => {\n handleEvents('selectPropItem', e)\n }\n\n const selectRadioItem = (e, v) => {\n handleEvents('selectRadioItem', e, v)\n }\n\n return {\n selectInputValue,\n selectPropItem,\n selectRadioItem,\n t\n }\n}\n\nconst api = ['selectInputValue', 'selectPropItem', 'selectRadioItem', 't']\n\nexport default defineComponent({\n name: $prefix + 'SearchBoxFirstLevelPanel',\n components: {\n TinyDropdownItem\n },\n props: {\n ...$props,\n state: {\n type: Object,\n default: () => ({})\n },\n potentialOptions: {\n type: Array,\n default: () => []\n },\n events: {\n type: Function,\n default: null\n },\n handleEvents: {\n type: Function,\n default: null\n }\n },\n emits: ['events'],\n setup(props, context) {\n return setup({ props, context, renderless, api })\n }\n})\n</script>\n","<template>\n <div tiny_mode=\"pc\">\n <div v-if=\"state.currentOperators?.length\">\n <span class=\"tvp-search-box__filter-type\">{{\n t(\"tvp.tvpSearchbox.operator\")\n }}</span>\n <tiny-dropdown-item\n v-for=\"(item, index) in state.currentOperators\"\n v-show=\"item.includes(state.inputValue)\"\n :key=\"item + index\"\n class=\"tvp-search-box__dropdown-item\"\n :item-data=\"{ label: item }\"\n @item-click=\"() => setOperator(item)\"\n >\n {{ item }}\n </tiny-dropdown-item>\n </div>\n <div\n v-else-if=\"!state.prevItem.type || state.prevItem.type === 'radio'\"\n v-loading=\"isLoading\"\n :class=\"['tvp-search-box__radio-wrap', isLoading && 'tvp-search-box__loading-box']\"\n >\n <tiny-dropdown-item\n v-for=\"(item, index) in state.backupList\"\n v-show=\"!item.isFilter || !state.inputValue\"\n :key=\"index + (item.field || item.label)\"\n :disabled=\"item.isChecked\"\n class=\"tvp-search-box__dropdown-item\"\n :item-data=\"item\"\n @item-click=\"() => selectRadioItem(item)\"\n >\n <span v-if=\"item.match\" :title=\"item.label\">\n <span v-for=\"text in item.match\" :key=\"text\">\n <span\n v-if=\"text.toLowerCase() === item.hightlighStr\"\n class=\"tvp-search-box__text-highlight\"\n >{{ text }}</span\n >\n <span v-else>{{ text }}</span>\n </span>\n </span>\n <span v-else :title=\"item.label\">{{ item.label }}</span>\n </tiny-dropdown-item>\n </div>\n <div\n v-else-if=\"state.prevItem.type === 'checkbox'\"\n v-loading=\"isLoading\"\n :class=\"isLoading && 'tvp-search-box__loading-box'\"\n >\n <div v-if=\"showCheckBoxList\">\n <div class=\"tvp-search-box__checkbox-wrap\">\n <tiny-checkbox-group v-model=\"state.checkAll\" class=\"tvp-search-box__checkbox\">\n <tiny-dropdown-item\n class=\"tvp-search-box__dropdown-item tvp-search-box__checkbox-item\"\n >\n <tiny-checkbox\n v-model=\"state.checkAll\"\n :indeterminate=\"state.isIndeterminate\"\n >\n {{ t(\"tvp.tvpSearchbox.selectAll\") }}\n </tiny-checkbox>\n </tiny-dropdown-item>\n </tiny-checkbox-group>\n <tiny-checkbox-group\n v-model=\"state.checkboxGroup\"\n class=\"tvp-search-box__checkbox\"\n >\n <tiny-dropdown-item\n v-for=\"(item, index) in state.backupList\"\n v-show=\"!item.isFilter\"\n :key=\"(item.field || item.label) + index\"\n class=\"tvp-search-box__dropdown-item tvp-search-box__checkbox-item\"\n >\n <tiny-checkbox\n :label=\"state.prevItem.label + item.label\"\n :title=\"item.label\"\n class=\"tvp-search-box__checkbox-item-label\"\n >\n {{ item.label }}\n </tiny-checkbox>\n </tiny-dropdown-item>\n </tiny-checkbox-group>\n </div>\n <div class=\"tvp-search-box__checkbox-btn\">\n <tiny-button size=\"mini\" @click=\"selectCheckbox(false)\">\n {{ t(\"tvp.tvpSearchbox.cancel\") }}\n </tiny-button>\n <tiny-button size=\"mini\" @click=\"selectCheckbox(true)\">\n {{ t(\"tvp.tvpSearchbox.confirm\") }}\n </tiny-button>\n </div>\n </div>\n </div>\n <div v-else-if=\"state.prevItem.type === 'numRange'\" class=\"tvp-search-box__panel-box\">\n <div class=\"tvp-search-box__number\">\n <div class=\"tvp-search-box__dropdown-title\">\n {{ t(\"tvp.tvpSearchbox.rangeNumberTitle\") }}\n </div>\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t(\"tvp.tvpSearchbox.minValueText\") }}({{ state.prevItem.unit }})\n </div>\n <tiny-form-item\n :prop=\"state.curMinNumVar\"\n class=\"tvp-search-box__number-item\"\n :show-message=\"state.numberShowMessage\"\n >\n <tiny-input\n v-model=\"state[state.curMinNumVar]\"\n type=\"number\"\n class=\"tvp-search-box__number-input\"\n ></tiny-input>\n </tiny-form-item>\n <div class=\"tvp-search-box__dropdown-end\">\n {{ t(\"tvp.tvpSearchbox.maxValueText\") }}({{ state.prevItem.unit }})\n </div>\n <tiny-form-item :prop=\"state.curMaxNumVar\" class=\"tvp-search-box__number-item\">\n <tiny-input\n v-model=\"state[state.curMaxNumVar]\"\n type=\"number\"\n class=\"tvp-search-box__number-input\"\n ></tiny-input>\n </tiny-form-item>\n </div>\n <div class=\"tvp-search-box__bottom-btn\">\n <tiny-button size=\"mini\" @click=\"sizeChange(false)\">{{\n t(\"tvp.tvpSearchbox.cancel\")\n }}</tiny-button>\n <tiny-button size=\"mini\" @click.stop=\"sizeChange(true)\">\n {{ t(\"tvp.tvpSearchbox.confirm\") }}\n </tiny-button>\n </div>\n </div>\n <div\n v-else-if=\"state.prevItem.type === 'dateRange'\"\n class=\"tvp-search-box__panel-box\"\n >\n <div class=\"tvp-search-box__date-wrap\">\n <div class=\"tvp-search-box__dropdown-title\">\n {{\n state.prevItem.maxTimeLength > 0\n ? t(\"tvp.tvpSearchbox.timeLengthTitle\", {\n value: (state.prevItem.maxTimeLength / 86400000).toFixed(1),\n })\n : t(\"tvp.tvpSearchbox.rangeDateTitle\")\n }}\n </div>\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t(\"tvp.tvpSearchbox.rangeBeginLabel\") }}\n </div>\n <tiny-form-item\n prop=\"startDate\"\n :show-message=\"Boolean(state.prevItem.maxTimeLength)\"\n class=\"tvp-search-box__date-item\"\n >\n <tiny-date-picker\n v-model=\"state.startDate\"\n :format=\"state.prevItem.format || state.dateRangeFormat\"\n :value-format=\"state.prevItem.format || state.dateRangeFormat\"\n :picker-options=\"pickerOptions(state.startDate, 'endDate')\"\n class=\"tvp-search-box__date-picker\"\n @visible-change=\"handleDateShow\"\n ></tiny-date-picker>\n </tiny-form-item>\n <div class=\"tvp-search-box__dropdown-end\">\n {{ t(\"tvp.tvpSearchbox.rangeEndLabel\") }}\n </div>\n <tiny-form-item prop=\"endDate\" class=\"tvp-search-box__date-item\">\n <tiny-date-picker\n v-model=\"state.endDate\"\n :format=\"state.prevItem.format || state.dateRangeFormat\"\n :value-format=\"state.prevItem.format || state.dateRangeFormat\"\n :picker-options=\"pickerOptions(state.startDate)\"\n class=\"tvp-search-box__date-picker\"\n @change=\"handleDateShow\"\n @blur=\"handleDateShow\"\n ></tiny-date-picker>\n </tiny-form-item>\n </div>\n <div class=\"tvp-search-box__bottom-btn\">\n <tiny-button size=\"mini\" @click=\"onConfirmDate(false)\">\n {{ t(\"tvp.tvpSearchbox.cancel\") }}\n </tiny-button>\n <tiny-button size=\"mini\" @click=\"onConfirmDate(true)\">\n {{ t(\"tvp.tvpSearchbox.confirm\") }}\n </tiny-button>\n </div>\n </div>\n\n <div\n v-else-if=\"state.prevItem.type === 'datetimeRange'\"\n class=\"tvp-search-box__panel-box\"\n >\n <div class=\"tvp-search-box__date-wrap\">\n <div class=\"tvp-search-box__dropdown-title\">\n {{\n state.prevItem.maxTimeLength > 0\n ? t(\"tvp.tvpSearchbox.timeLengthTitle\", {\n value: (state.prevItem.maxTimeLength / 86400000).toFixed(1),\n })\n : t(\"tvp.tvpSearchbox.rangeDateTitle\")\n }}\n </div>\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t(\"tvp.tvpSearchbox.rangeBeginLabel\") }}\n </div>\n <tiny-form-item\n prop=\"startDateTime\"\n :show-message=\"Boolean(state.prevItem.maxTimeLength)\"\n class=\"tvp-search-box__date-item\"\n >\n <tiny-date-picker\n v-model=\"state.startDateTime\"\n type=\"datetime\"\n :isutc8=\"true\"\n :format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :value-format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :picker-options=\"pickerOptions(state.startDateTime, 'endDateTime')\"\n class=\"tvp-search-box__date-picker\"\n @change=\"handleDateShow\"\n @blur=\"handleDateShow\"\n ></tiny-date-picker>\n </tiny-form-item>\n <div class=\"tvp-search-box__dropdown-end\">\n {{ t(\"tvp.tvpSearchbox.rangeEndLabel\") }}\n </div>\n <tiny-form-item prop=\"endDateTime\" class=\"tvp-search-box__date-item\">\n <tiny-date-picker\n v-model=\"state.endDateTime\"\n type=\"datetime\"\n :isutc8=\"true\"\n :format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :value-format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :picker-options=\"pickerOptions(state.startDateTime)\"\n class=\"tvp-search-box__date-picker\"\n @change=\"handleDateShow\"\n @blur=\"handleDateShow\"\n ></tiny-date-picker>\n </tiny-form-item>\n </div>\n <div class=\"tvp-search-box__bottom-btn\">\n <tiny-button size=\"mini\" @click=\"onConfirmDate(false, true)\">\n {{ t(\"tvp.tvpSearchbox.cancel\") }}\n </tiny-button>\n <tiny-button size=\"mini\" @click=\"onConfirmDate(true, true)\">\n {{ t(\"tvp.tvpSearchbox.confirm\") }}\n </tiny-button>\n </div>\n </div>\n\n <div v-else-if=\"state.prevItem.type === 'map'\" v-loading=\"isLoading\">\n <span v-if=\"state.isShowTagKey\" class=\"tvp-search-box__filter-type\">{{\n t(\"tvp.tvpSearchbox.tagKey\")\n }}</span>\n <span v-else class=\"tvp-search-box__filter-type\">{{\n t(\"tvp.tvpSearchbox.tagValue\")\n }}</span>\n <tiny-dropdown-item\n v-for=\"(item, index) in state.backupList\"\n v-show=\"!item.isFilter\"\n :key=\"item.label + item.value + index\"\n :disabled=\"item.isChecked\"\n class=\"tvp-search-box__dropdown-item\"\n :item-data=\"item\"\n @item-click=\"() => selectFirstMap(item, state.isShowTagKey)\"\n >\n <span :title=\"item.label\">{{ item.label }}</span>\n </tiny-dropdown-item>\n </div>\n </div>\n</template>\n\n<script>\n// Vue2 版本,使用 tiny-vue 的 renderless 架构\nimport { defineComponent, setup, $props, $prefix } from '@opentiny/vue-common'\nimport TinyFormItem from '@opentiny/vue-form-item'\nimport TinyDropdownItem from '@opentiny/vue-dropdown-item'\nimport TinyCheckbox from '@opentiny/vue-checkbox'\nimport TinyCheckboxGroup from '@opentiny/vue-checkbox-group'\nimport TinyDatePicker from '@opentiny/vue-date-picker'\nimport TinyInput from '@opentiny/vue-input'\nimport TinyButton from '@opentiny/vue-button'\nimport TinyLoading from '@opentiny/vue-loading'\nimport { t } from '../utils/i18n.ts'\n\n// 简单的 renderless 函数\nconst renderless = (props, hooks, { emit }) => {\n const { computed } = hooks\n\n // 优先使用传入的 events/handleEvents 函数,如果没有则使用 emit\n const handleEvents = props.handleEvents || props.events || ((eventName, p1, p2) => {\n emit('events', eventName, p1, p2)\n })\n\n const setOperator = (e) => {\n handleEvents('setOperator', e)\n }\n\n const selectRadioItem = (e) => {\n handleEvents('selectRadioItem', e)\n }\n\n const selectCheckbox = (e) => {\n handleEvents('selectCheckbox', e)\n }\n\n const sizeChange = (e) => {\n handleEvents('sizeChange', e)\n }\n\n const onConfirmDate = (e, b) => {\n handleEvents('onConfirmDate', e, b)\n }\n\n const selectFirstMap = (e, b) => {\n handleEvents('selectFirstMap', e, b)\n }\n\n const handleDateShow = (e) => {\n handleEvents('handleDateShow', e)\n }\n\n const isLoading = computed(() => {\n return props.state.hasBackupList && props.state.backupList?.length === 0\n })\n\n const showCheckBoxList = computed(() => {\n return props.state.backupList?.find((item) => !item.isFilter)\n })\n\n return {\n setOperator,\n selectRadioItem,\n selectCheckbox,\n sizeChange,\n onConfirmDate,\n selectFirstMap,\n handleDateShow,\n isLoading,\n showCheckBoxList,\n t\n }\n}\n\nconst api = [\n 'setOperator',\n 'selectRadioItem',\n 'selectCheckbox',\n 'sizeChange',\n 'onConfirmDate',\n 'selectFirstMap',\n 'handleDateShow',\n 'isLoading',\n 'showCheckBoxList',\n 't'\n]\n\nexport default defineComponent({\n name: $prefix + 'SearchBoxSecondLevelPanel',\n emits: ['events'],\n components: {\n TinyFormItem,\n TinyDropdownItem,\n TinyCheckbox,\n TinyCheckboxGroup,\n TinyDatePicker,\n TinyInput,\n TinyButton\n },\n directives: {\n loading: TinyLoading.directive\n },\n props: {\n ...$props,\n state: {\n type: Object,\n default: () => ({}),\n },\n pickerOptions: {\n type: Function,\n default: () => {\n // do nothing.\n }\n },\n events: {\n type: Function,\n default: null\n },\n handleEvents: {\n type: Function,\n default: null\n },\n },\n setup(props, context) {\n return setup({ props, context, renderless, api })\n }\n})\n</script>\n","<template>\n <div\n :class=\"[\n 'tvp-search-box',\n size === 'small' ? 'tvp-search-box--small' : '',\n showPrefixIcon ? '' : 'hide-prefix-icon'\n ]\"\n @click.stop=\"showPopover(state, false)\"\n >\n <tiny-icon-search\n v-if=\"showPrefixIcon\"\n class=\"tvp-search-box__prefix\"\n />\n <tiny-tag\n v-for=\"(tag, index) in modelValue\"\n :key=\"tag.field + index\"\n closable\n class=\"tvp-search-box__tag\"\n :class=\"editable && tag.type !== 'map' ? 'tvp-search-box__tag-editor' : ''\"\n :title=\"`${tag.label} ${tag.operator || ':'} ${tag.value}`\"\n @close=\"deleteTag(tag)\"\n @click.stop=\"editTag(tag, index, $event)\"\n >\n <span class=\"tvp-search-box__tag-value\">{{ tag.label }} {{ tag.operator || ':' }} {{ tag.value }} </span>\n </tiny-tag>\n <span\n v-if=\"modelValue.length\"\n class=\"tvp-search-box__placeholder\"\n ></span>\n <tiny-form\n ref=\"formRef\"\n :model=\"state\"\n :rules=\"state.formRules\"\n :validate-type=\"state.validType\"\n :size=\"size === 'small' ? 'small' : ''\"\n label-width=\"0px\"\n message-type=\"block\"\n class=\"tvp-search-box__form\"\n >\n <div class=\"tvp-search-box__input-wrapper\">\n <section class=\"tvp-search-box__prop\">\n <span v-show=\"state.propItem.label\"\n >{{ state.propItem.label }} {{ `${state.operatorValue ? state.operatorValue : ''} ` }}</span\n >\n <span v-show=\"state.propItem.value\">{{ state.propItem.value }}</span>\n </section>\n <tiny-popover\n ref=\"dropdownRef\"\n v-model=\"state.visible\"\n trigger=\"manual\"\n placement=\"bottom-start\"\n class=\"tvp-search-box__dropdown\"\n popper-class=\"tvp-search-box__dropdown-menu\"\n :visible-arrow=\"false\"\n :append-to-body=\"appendToBody\"\n >\n <template #reference>\n <tiny-input\n ref=\"inputRef\"\n v-model=\"state.inputValue\"\n class=\"tvp-search-box__input\"\n :placeholder=\"state.placeholder\"\n :maxlength=\"maxlength && maxlength + 1\"\n @keydown.delete.stop=\"backspaceDeleteTag\"\n @keydown.enter.stop=\"createTag\"\n @input=\"handleInput\"\n @click=\"handleClick\"\n >\n <template #suffix>\n <tiny-icon-close\n v-show=\"isShowClose\"\n class=\"tvp-search-box__input-close\"\n @click.stop=\"clearTag\"\n />\n <span\n v-show=\"isShowClose\"\n class=\"tvp-search-box__input-separator\"\n ></span>\n <tiny-tooltip\n v-if=\"showHelp\"\n effect=\"light\"\n :content=\"t('tvp.tvpSearchbox.help')\"\n placement=\"top\"\n >\n <tiny-icon-help-query\n class=\"tvp-search-box__input-help\"\n @click.stop=\"helpClick\"\n />\n </tiny-tooltip>\n <tiny-icon-search\n class=\"tvp-search-box__input-search\"\n @click.stop=\"createTag\"\n />\n </template>\n </tiny-input>\n </template>\n <div\n class=\"tvp-search-box__dropdown\"\n :style=\"{ 'max-height': panelMaxHeight }\"\n @mouseup.stop=\"() => {}\"\n >\n <div v-show=\"!state.propItem.label || state.inputValue?.trim()\">\n <slot\n v-if=\"state.instance?.slots['first-panel']\"\n name=\"first-panel\"\n v-bind=\"{\n state,\n handleEvents\n }\"\n @click.stop\n ></slot>\n <TinySearchBoxFirstLevelPanel\n v-else\n :state=\"state\"\n :handleEvents=\"handleEvents\"\n >\n </TinySearchBoxFirstLevelPanel>\n </div>\n <div v-show=\"state.propItem.label\">\n <slot\n v-if=\"state.instance?.slots['second-panel']\"\n name=\"second-panel\"\n v-bind=\"{\n state,\n pickerOptions,\n handleEvents,\n back: () => resetInput(state)\n }\"\n @click.stop\n ></slot>\n <TinySearchBoxSecondLevelPanel\n v-else-if=\"state.prevItem.type !== 'custom'\"\n :state=\"state\"\n :picker-options=\"pickerOptions\"\n @events=\"handleEvents\"\n ></TinySearchBoxSecondLevelPanel>\n <div\n v-else\n class=\"tvp-search-box__panel-box\"\n @click=\"showDropdown(state)\"\n >\n <slot\n :name=\"state.prevItem.slotName\"\n v-bind=\"{\n showDropdown: () => showDropdown(state),\n onConfirm: handleConfirm\n }\"\n @click.stop\n ></slot>\n </div>\n </div>\n </div>\n </tiny-popover>\n </div>\n\n <template v-if=\"editable\">\n <tiny-popover\n ref=\"popoverRef\"\n v-model=\"state.popoverVisible\"\n placement=\"bottom-start\"\n :visible-arrow=\"false\"\n trigger=\"manual\"\n popper-class=\"tvp-search-box__popover\"\n class=\"tvp-search-box__form-popover\"\n :append-to-body=\"appendToBody\"\n >\n <template v-if=\"state.prevItem.type !== 'custom'\">\n <div class=\"tvp-search-box__date-wrap\">\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t('tvp.tvpSearchbox.attributeType') }}\n </div>\n <tiny-form-item class=\"tvp-search-box__number-item\">\n <tiny-select\n v-model=\"state.selectValue\"\n searchable\n :disabled=\"state.prevItem.editAttrDisabled\"\n >\n <tiny-option\n :key=\"state.allTypeAttri.label\"\n :label=\"t('tvp.tvpSearchbox.allProperty')\"\n :value=\"state.allTypeAttri.label\"\n :disabled=\"selectItemIsDisable(state.allTypeAttri)\"\n @click=\"selectPropChange(state.allTypeAttri, selectItemIsDisable(state.allTypeAttri))\"\n >\n </tiny-option>\n <tiny-option\n v-for=\"item in state.recordItems\"\n :key=\"item.label\"\n :label=\"item.label\"\n :value=\"item.label\"\n :disabled=\"selectItemIsDisable(item)\"\n @click=\"selectPropChange(item, selectItemIsDisable(item))\"\n >\n </tiny-option>\n </tiny-select>\n </tiny-form-item>\n <div\n v-if=\"state.prevItem.operators\"\n class=\"tvp-search-box__dropdown-end\"\n >\n {{ t('tvp.tvpSearchbox.operator') }}\n </div>\n <tiny-form-item\n v-if=\"state.prevItem.operators\"\n class=\"tvp-search-box__number-item\"\n >\n <tiny-select v-model=\"state.operatorValue\">\n <tiny-option\n v-for=\"item in state.currentOperators\"\n :key=\"item\"\n :label=\"item\"\n :value=\"item\"\n >\n </tiny-option>\n </tiny-select>\n </tiny-form-item>\n <div\n v-if=\"state.prevItem.type !== 'numRange'\"\n class=\"tvp-search-box__dropdown-end\"\n >\n {{ t('tvp.tvpSearchbox.tagValue') }}\n </div>\n <tiny-form-item\n v-if=\"!['numRange', 'dateRange', 'datetimeRange', 'custom'].includes(state.prevItem.type)\"\n prop=\"inputEditValue\"\n class=\"tvp-search-box__number-item\"\n >\n <tiny-select\n v-if=\"state.currentEditValue?.length > 0\"\n v-model=\"state.inputEditValue\"\n class=\"tvp-search-box-select\"\n :multiple=\"Boolean(state.prevItem.mergeTag)\"\n :allow-create=\"state.prevItem?.allowCreate\"\n filterable\n default-first-option\n clearable\n >\n <tiny-option\n v-for=\"item in state.currentEditValue\"\n :key=\"item.label\"\n :label=\"item.label\"\n :value=\"item.label\"\n >\n </tiny-option>\n </tiny-select>\n <tiny-input\n v-else\n v-model=\"state.inputEditValue\"\n clearable\n ></tiny-input>\n </tiny-form-item>\n <div\n v-if=\"state.prevItem.type === 'numRange'\"\n class=\"tvp-search-box__number\"\n >\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t('tvp.tvpSearchbox.minValueText') }}({{ state.prevItem.unit }})\n </div>\n <tiny-form-item\n :prop=\"state.curMinNumVar\"\n class=\"tvp-search-box__number-item\"\n :show-message=\"state.numberShowMessage\"\n >\n <tiny-input\n v-model=\"state[state.curMinNumVar]\"\n type=\"number\"\n class=\"tvp-search-box__number-input\"\n ></tiny-input>\n </tiny-form-item>\n <div class=\"tvp-search-box__dropdown-end\">\n {{ t('tvp.tvpSearchbox.maxValueText') }}({{ state.prevItem.unit }})\n </div>\n <tiny-form-item\n :prop=\"state.curMaxNumVar\"\n class=\"tvp-search-box__number-item\"\n >\n <tiny-input\n v-model=\"state[state.curMaxNumVar]\"\n type=\"number\"\n class=\"tvp-search-box__number-input\"\n ></tiny-input>\n </tiny-form-item>\n </div>\n <div\n v-if=\"state.prevItem.type === 'dateRange'\"\n class=\"tvp-search-box__date-wrap\"\n >\n <div class=\"tvp-search-box__dropdown-title\">\n {{\n state.prevItem.maxTimeLength > 0\n ? t('tvp.tvpSearchbox.timeLengthTitle', {\n value: (state.prevItem.maxTimeLength / 86400000).toFixed(1)\n })\n : t('tvp.tvpSearchbox.rangeDateTitle')\n }}\n </div>\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t('tvp.tvpSearchbox.rangeBeginLabel') }}\n </div>\n <tiny-form-item\n prop=\"startDate\"\n :show-message=\"Boolean(state.prevItem.maxTimeLength)\"\n class=\"tvp-search-box__date-item\"\n >\n <tiny-date-picker\n v-model=\"state.startDate\"\n :format=\"state.prevItem.format || state.dateRangeFormat\"\n :value-format=\"state.prevItem.format || state.dateRangeFormat\"\n :picker-options=\"pickerOptions(state.startDate, 'endDate')\"\n class=\"tvp-search-box__date-picker\"\n ></tiny-date-picker>\n </tiny-form-item>\n <div class=\"tvp-search-box__dropdown-end\">\n {{ t('tvp.tvpSearchbox.rangeEndLabel') }}\n </div>\n <tiny-form-item\n prop=\"endDate\"\n class=\"tvp-search-box__date-item\"\n >\n <tiny-date-picker\n v-model=\"state.endDate\"\n :format=\"state.prevItem.format || state.dateRangeFormat\"\n :value-format=\"state.prevItem.format || state.dateRangeFormat\"\n :picker-options=\"pickerOptions(state.startDate)\"\n class=\"tvp-search-box__date-picker\"\n ></tiny-date-picker>\n </tiny-form-item>\n </div>\n <div\n v-if=\"state.prevItem.type === 'datetimeRange'\"\n class=\"tvp-search-box__date-wrap\"\n >\n <div class=\"tvp-search-box__dropdown-title\">\n {{\n state.prevItem.maxTimeLength > 0\n ? t('tvp.tvpSearchbox.timeLengthTitle', {\n value: (state.prevItem.maxTimeLength / 86400000).toFixed(1)\n })\n : t('tvp.tvpSearchbox.rangeDateTitle')\n }}\n </div>\n <div class=\"tvp-search-box__dropdown-start\">\n {{ t('tvp.tvpSearchbox.rangeBeginLabel') }}\n </div>\n <tiny-form-item\n prop=\"startDateTime\"\n :show-message=\"Boolean(state.prevItem.maxTimeLength)\"\n class=\"tvp-search-box__date-item\"\n >\n <tiny-date-picker\n v-model=\"state.startDateTime\"\n type=\"datetime\"\n :isutc8=\"true\"\n :format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :value-format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :picker-options=\"pickerOptions(state.startDateTime, 'endDateTime')\"\n class=\"tvp-search-box__date-picker\"\n ></tiny-date-picker>\n </tiny-form-item>\n <div class=\"tvp-search-box__dropdown-end\">\n {{ t('tvp.tvpSearchbox.rangeEndLabel') }}\n </div>\n <tiny-form-item\n prop=\"endDateTime\"\n class=\"tvp-search-box__date-item\"\n >\n <tiny-date-picker\n v-model=\"state.endDateTime\"\n type=\"datetime\"\n :isutc8=\"true\"\n :format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :value-format=\"state.prevItem.format || state.datetimeRangeFormat\"\n :picker-options=\"pickerOptions(state.startDateTime)\"\n class=\"tvp-search-box__date-picker\"\n ></tiny-date-picker>\n </tiny-form-item>\n </div>\n </div>\n <div class=\"tvp-search-box__bottom-btn\">\n <tiny-button\n size=\"mini\"\n @click=\"confirmEditTag(false)\"\n >\n {{ t('tvp.tvpSearchbox.cancel') }}\n </tiny-button>\n <tiny-button\n size=\"mini\"\n :disabled=\"state.hasFormError\"\n @click=\"confirmEditTag(true)\"\n >\n {{ t('tvp.tvpSearchbox.confirm') }}\n </tiny-button>\n </div>\n </template>\n <div\n v-else\n class=\"tvp-search-box__panel-box\"\n >\n <slot\n :name=\"`${state.prevItem.slotName}-edit`\"\n v-bind=\"{\n showDropdown: () => showPopover(state),\n onConfirm: handleEditConfirm\n }\"\n @click.stop\n ></slot>\n </div>\n </tiny-popover>\n </template>\n </tiny-form>\n </div>\n</template>\n\n<script lang=\"ts\">\n// Vue2 版本,使用 tiny-vue 的 renderless 架构\nimport { defineComponent, setup, $props, isVue2 } from '@opentiny/vue-common'\nimport { renderless, api } from './renderless'\n// 导入组件\nimport TinyTag from '@opentiny/vue-tag'\nimport TinyInput from '@opentiny/vue-input'\nimport TinyDropdown from '@opentiny/vue-dropdown'\nimport TinyDropdownMenu from '@opentiny/vue-dropdown-menu'\nimport TinyButton from '@opentiny/vue-button'\nimport TinyTooltip from '@opentiny/vue-tooltip'\nimport TinyDatePicker from '@opentiny/vue-date-picker'\nimport TinyForm from '@opentiny/vue-form'\nimport TinyFormItem from '@opentiny/vue-form-item'\nimport TinyPopover from '@opentiny/vue-popover'\nimport TinySelect from '@opentiny/vue-select'\nimport TinyOption from '@opentiny/vue-option'\n\nimport { iconSearch, iconClose, iconHelpQuery } from '@opentiny/vue-icon'\n\nimport TinySearchBoxFirstLevelPanel from './components/first-level-panel.vue'\nimport TinySearchBoxSecondLevelPanel from './components/second-level-panel.vue'\nimport '../../search-box/theme/index.less'\n\nexport default defineComponent({\n model: {\n prop: 'modelValue',\n event: 'update:modelValue'\n },\n props: {\n ...$props,\n tiny_mode: {\n type: String,\n default: 'pc'\n },\n modelValue: {\n type: Array,\n default: () => []\n },\n items: {\n type: Array,\n default: () => []\n },\n emptyPlaceholder: {\n type: String,\n default: ''\n },\n potentialOptions: {\n type: Object,\n default: () => null\n },\n showHelp: {\n type: Boolean,\n default: true\n },\n showPrefixIcon: {\n type: Boolean,\n default: true\n },\n idMapKey: {\n type: String,\n default: 'id'\n },\n defaultField: {\n type: String,\n default: ''\n },\n editable: {\n type: Boolean,\n default: false\n },\n maxlength: {\n type: Number,\n default: undefined\n },\n panelMaxHeight: {\n type: String,\n default: '999px'\n },\n splitInputValue: {\n type: String,\n default: ','\n },\n appendToBody: {\n type: Boolean,\n default: true\n },\n // 尺寸\n size: {\n type: String,\n default: ''\n }\n },\n emits: ['update:modelValue', 'change', 'search', 'exceed', 'first-level-select', 'second-level-enter', 'clear'],\n components: {\n TinyTag,\n TinyInput,\n TinyDropdown,\n TinyDropdownMenu,\n TinyButton,\n TinyTooltip,\n TinyDatePicker,\n TinyForm,\n TinyFormItem,\n TinyPopover,\n TinySelect,\n TinyOption,\n TinySearchBoxFirstLevelPanel,\n TinySearchBoxSecondLevelPanel,\n // 图标组件\n TinyIconSearch: iconSearch(),\n TinyIconClose: iconClose(),\n TinyIconHelpQuery: iconHelpQuery()\n },\n setup(props, context) {\n return setup({ props, context, renderless, api })\n }\n})\n</script>\n","/**\n * Copyright (c) 2022 - present TinyVue Authors.\n * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.\n *\n * Use of this source code is governed by an MIT-style license.\n *\n * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,\n * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR\n * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.\n *\n */\nimport { $props, $prefix, $setup, defineComponent, isVue2, isVue3 } from '@opentiny/vue-common'\nimport { type PropType } from '@opentiny/vue-common'\nimport template from './pc.vue'\n\nexport const searchBoxProps = {\n ...$props,\n tiny_mode: {\n type: String,\n default: 'pc'\n },\n /** 搜索框的值,支持v-model */\n modelValue: {\n type: Array,\n default: () => []\n },\n /** 搜索项配置数组 */\n items: {\n type: Array,\n default: () => []\n },\n /** 空状态时的占位符文本 */\n emptyPlaceholder: {\n type: String,\n default: ''\n },\n /** 潜在选项配置 */\n potentialOptions: {\n type: Object,\n default: () => null\n },\n /** 是否显示帮助按钮 */\n showHelp: {\n type: Boolean,\n default: true\n },\n /** 是否显示搜索框前面的搜索图标 */\n showPrefixIcon: {\n type: Boolean,\n default: true\n },\n /** ID映射键名 */\n idMapKey: {\n type: String,\n default: 'id'\n },\n /** 默认字段 */\n defaultField: {\n type: String,\n default: ''\n },\n /** 是否可编辑 */\n editable: {\n type: Boolean,\n default: false\n },\n /** 最大长度限制 */\n maxlength: {\n type: Number,\n default: undefined\n },\n /** 面板最大高度 */\n panelMaxHeight: {\n type: String,\n default: '999px'\n },\n /** 输入值分隔符 */\n splitInputValue: {\n type: String,\n default: ','\n },\n /** 自定义类名 */\n customClass: {\n type: String,\n default: ''\n },\n /** 自定义样式 */\n customStyle: {\n type: Object,\n default: () => ({})\n },\n /** 组件尺寸 */\n size: {\n type: String as PropType<'small' | ''>,\n default: ''\n },\n /** 将下拉面板/弹窗挂载到 body,解决父容器 overflow 场景遮挡问题 */\n appendToBody: {\n type: Boolean,\n default: false\n }\n}\n// 组件安装函数\nexport default defineComponent({\n name: $prefix + 'SearchBox',\n props: searchBoxProps,\n ...template\n})\n","/**\n * Copyright (c) 2022 - present TinyVue Authors.\n * Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.\n *\n * Use of this source code is governed by an MIT-style license.\n *\n * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,\n * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR\n * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.\n *\n */\n\nimport TinySearchBox from \"./src/index.ts\";\nimport { t, setGlobalApp } from './src/utils/i18n'\nimport zhCN from './src/utils/zh_CN'\nimport enUS from './src/utils/en_US'\nimport TinySearchBoxFirstLevelPanel from './src/components/first-level-panel.vue'\nimport TinySearchBoxSecondLevelPanel from './src/components/second-level-panel.vue'\nimport { version } from \"./package.json\";\n// model 配置已在组件内部定义,无需重复设置\n\n/* istanbul ignore next */\nTinySearchBox.install = function (Vue) {\n Vue.component(TinySearchBox.name, TinySearchBox);\n};\n\nTinySearchBox.version = version;\n\n/* istanbul ignore next */\nif (window && typeof window !== \"undefined\" && window.Vue) {\n TinySearchBox.install(window.Vue);\n}\n\n// 导出\nexport * from './src/index.type.ts'\nexport { zhCN, enUS, t, setGlobalApp, TinySearchBoxFirstLevelPanel, TinySearchBoxSecondLevelPanel }\n\nexport default TinySearchBox;\n"],"names":["fillChar","string","length","append","chr","isNumber","len","appendStr","s","toString","hasOwn","fnToString","class2type","isNull","x","typeOf","obj","value","isDate","daysInMonths","yyyymmddReg","mmddyyyyReg","iso8601Reg","dateFormatRegs","maxDateValues","timezone1","timezone2","timezone3","timezones","getTimezone","date","timezoneoffset","timezone","isLeapYear","year","getMilliseconds","milliseconds","getDateFromData","month","hours","minutes","seconds","daysInMonth","yyyymmddDateParser","m","mmddyyyyDateParser","iso8601DateParser","offset","timeZone","sign","offsetHours","offsetMinutes","actHours","actMinutes","dateParsers","parseDate","str","i","matchDateArray","arr","text","getDateArray","dateFormat","valuePos","textPos","charValue","notNum","end","invalideTime","time","min","max","invalideValue","innerParse","toDate","minDate","format","k","afterFormat","dateValue","showDropdown","state","isShow","showPopover","dropdownRef","debounce","func","delay","timer","debounced","args","deepClone","objClone","keys","key","omitObj","keysToOmit","result","hasTagItem","itemValue","itemLabel","valueMap","prevItem","resetInput","emitChangeModelEvent","emit","nextTick","tagList","index","newTag","newValue","oldValue","isEdit","oldVal","innerModelValue","createNewTag","getTagId","props","item","idKey","useTag","lastInputValue","changeIsChecked","tag","parent","child","lastIndex","_c","_b","_a","getVerifyTag","instance","inputEditValue","operators","rest","isPass","errMsg","id","operator","otherAttr","editValue","label","itemId","getVerifyNumTag","minNum","maxNum","start","verifyProps","field","prevLabel","unit","type","getVerifyDateTag","isDateTimeType","startDate","endDate","startDateTime","endDateTime","setStateNumRange","t","nextMinNum","nextMaxNum","curMinNumVar","curMaxNumVar","minIsNumber","maxIsNumber","rule","cb","valueIsNumber","MinValueIsNumber","curMin","curMinIsNumber","useDropdown","vm","cancelHandleInput","showValueItem","dateRangeFormat","newStart","newEnd","datetimeRangeFormat","subItem","option","selectPropItem","inputRef","setOperator","updateModelValue","replace","mergeTag","indexMap","options","newOptions","cloned","selectInputValue","val","selectRadioItem","createTag","isPotential","tagLabel","hasNotInputValueCreateTag","propItem","firstOption","newTagUpdateModelValue","hasInputValueCreateTag","inputValue","regexp","items","defaultField","currentItem","maxlength","escapeRegExp","getHighlightMatch","labelRegex","match","startIndex","endIndex","useMatch","getMatchList","keyword","handleInput","e","recordItems","raw","patt","hasItem","hightlighStr","_d","groupKey","optionLabel","resetBackupList","isFirst","useCheckbox","confirm","checkboxGroup","hasTagIndex","checkboxLabel","indexList","filtered","useDatePicker","prev","endName","maxTimeLength","curTime","useNumRange","sizeChange","createDateRules","startKey","endKey","dateRules","datetimeRules","useEdit","setDropdownProps","curTag","labels","checkFormValidation","hasError","dom","popoverRef","isConfirm","disabled","typeArr","useCustom","updateCustomValue","customTag","useInit","backupPrevItem","zhCN","enUS","defaultLocale","locales","globalApp","globalT","setGlobalApp","app","setGlobalT","tFn","getCurrentLocale","browserLang","_e","getLocaleMessages","locale","params","error","messages","k2","paramKey","tArray","isLocaleSupported","getSupportedLocales","addLocale","removeLocale","i18n","api","resolveEmptyPlaceholder","initState","reactive","computed","watch","renderless","getCurrentInstance","onMounted","onBeforeUnmount","$emit","refs","slots","initAllApi","initWatch","deleteTag","clearTag","backspaceDeleteTag","editTag","confirmEditTag","selectPropChange","selectItemIsDisable","selectFirstMap","helpClick","selectCheckbox","onConfirmDate","handleDateShow","pickerOptions","initFormRule","handleConfirm","handleEditConfirm","initItems","watchOutsideClick","watchMouseDown","watchMouseMove","handleClick","isShowClose","eventsMap","setPlaceholder","placeholderValue","getEmptyPlaceholderValue","eventName","p1","p2","map","updatePlaceholder","placeholder","defaultPlaceholder","getI18nLocale","lastLocale","newLocale","checkLocaleChange","currentLocale","newVal","wasOpen","currentField","updated","it","fields","optionValue","o","v","hooks","handleEvents","_sfc_main","defineComponent","$prefix","TinyDropdownItem","$props","context","setup","_hoisted_1","_hoisted_3","_hoisted_6","_hoisted_9","_hoisted_12","_hoisted_13","_hoisted_15","_openBlock","_createElementBlock","_createVNode","_component_tiny_dropdown_item","_ctx","_cache","_withCtx","_createElementVNode","_toDisplayString","_Fragment","_renderList","_hoisted_2","_createBlock","_hoisted_4","_hoisted_5","_createCommentVNode","_hoisted_7","_hoisted_8","_hoisted_10","_hoisted_11","_createTextVNode","_vShow","_withDirectives","group","_hoisted_14","b","isLoading","showCheckBoxList","TinyFormItem","TinyCheckbox","TinyCheckboxGroup","TinyDatePicker","TinyInput","TinyButton","TinyLoading","_hoisted_16","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_32","_normalizeClass","_component_tiny_checkbox_group","$event","_component_tiny_checkbox","_component_tiny_button","_component_tiny_form_item","_component_tiny_input","_withModifiers","_hoisted_17","_component_tiny_date_picker","_hoisted_23","_hoisted_29","_hoisted_30","_hoisted_31","TinyTag","TinyDropdown","TinyDropdownMenu","TinyTooltip","TinyForm","TinyPopover","TinySelect","TinyOption","TinySearchBoxFirstLevelPanel","TinySearchBoxSecondLevelPanel","iconSearch","iconClose","iconHelpQuery","_component_tiny_icon_search","_component_tiny_tag","_component_tiny_form","_component_tiny_popover","_withKeys","_component_tiny_icon_close","_component_tiny_tooltip","_component_tiny_icon_help_query","_normalizeStyle","_renderSlot","_mergeProps","_component_TinySearchBoxFirstLevelPanel","_component_TinySearchBoxSecondLevelPanel","_component_tiny_select","_component_tiny_option","searchBoxProps","TinySearchBox","template","Vue","version"],"mappings":"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"}
|