@opentiny/vue-search-box 2.27.0 → 2.27.1
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 +404 -0
- package/{es/index.es.js → index.js} +840 -808
- package/index.js.map +1 -0
- package/package.json +6 -4
- package/es/index.es.js.map +0 -1
- package/lib/index.cjs.js +0 -2
- package/lib/index.cjs.js.map +0 -1
package/es/index.es.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.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?vue&type=template&lang.js","../../../src/components/first-level-panel.vue","../../../src/components/second-level-panel.vue?vue&type=template&lang.js","../../../src/components/second-level-panel.vue","../../../src/pc.vue","../../../src/pc.vue?vue&type=template&lang.js","../../../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 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\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\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 }\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 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 } = 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 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 {\n immediate: true\n }\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}","\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 v-for=\"(value, key) in state.matchItems\" :key=\"key\">\n <div v-if=\"value['attr'].length\">\n <span class=\"tvp-search-box__filter-type\">{{\n key === \"0\" ? t(\"tvp.tvpSearchbox.attributeType\") : key\n }}</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 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 </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\", [\n key === \"0\" ? t(\"tvp.tvpSearchbox.attributeType\") : key,\n ])\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 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 </tiny-dropdown-item>\n </template>\n </div>\n <div v-show=\"state.potentialOptions\">\n <span class=\"tvp-search-box__filter-type\">{{\n t(\"tvp.tvpSearchbox.matched\")\n }}</span>\n <div id=\"potential-loading\" class=\"tvp-search-box__potential-box\">\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 v-for=\"(group, key) in state.groupItems\" :key=\"key\">\n <span v-if=\"group.length\" class=\"tvp-search-box__filter-type\">{{\n key === \"0\" ? t(\"tvp.tvpSearchbox.attributeType\") : key\n }}</span>\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 <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 v-for=\"(value, key) in state.matchItems\" :key=\"key\">\n <div v-if=\"value['attr'].length\">\n <span class=\"tvp-search-box__filter-type\">{{\n key === \"0\" ? t(\"tvp.tvpSearchbox.attributeType\") : key\n }}</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 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 </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\", [\n key === \"0\" ? t(\"tvp.tvpSearchbox.attributeType\") : key,\n ])\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 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 </tiny-dropdown-item>\n </template>\n </div>\n <div v-show=\"state.potentialOptions\">\n <span class=\"tvp-search-box__filter-type\">{{\n t(\"tvp.tvpSearchbox.matched\")\n }}</span>\n <div id=\"potential-loading\" class=\"tvp-search-box__potential-box\">\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 v-for=\"(group, key) in state.groupItems\" :key=\"key\">\n <span v-if=\"group.length\" class=\"tvp-search-box__filter-type\">{{\n key === \"0\" ? t(\"tvp.tvpSearchbox.attributeType\") : key\n }}</span>\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","\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 <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 v-if=\"modelValue.length\" class=\"tvp-search-box__placeholder\"></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 v-show=\"isShowClose\" class=\"tvp-search-box__input-separator\"></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 ></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 v-if=\"state.prevItem.operators\" class=\"tvp-search-box__dropdown-end\">\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=\"\n !['numRange', 'dateRange', 'datetimeRange', 'custom'].includes(\n state.prevItem.type\n )\n \"\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 v-else v-model=\"state.inputEditValue\" clearable></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 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 ></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 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 ></tiny-date-picker>\n </tiny-form-item>\n </div>\n </div>\n <div class=\"tvp-search-box__bottom-btn\">\n <tiny-button size=\"mini\" @click=\"confirmEditTag(false)\">\n {{ t(\"tvp.tvpSearchbox.cancel\") }}\n </tiny-button>\n <tiny-button size=\"mini\" @click=\"confirmEditTag(true)\">\n {{ t(\"tvp.tvpSearchbox.confirm\") }}\n </tiny-button>\n </div>\n </template>\n <div v-else class=\"tvp-search-box__panel-box\">\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: [\n 'update:modelValue',\n 'change',\n 'search',\n 'exceed',\n 'first-level-select',\n 'clear'\n ],\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<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 v-if=\"modelValue.length\" class=\"tvp-search-box__placeholder\"></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 v-show=\"isShowClose\" class=\"tvp-search-box__input-separator\"></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 ></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 v-if=\"state.prevItem.operators\" class=\"tvp-search-box__dropdown-end\">\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=\"\n !['numRange', 'dateRange', 'datetimeRange', 'custom'].includes(\n state.prevItem.type\n )\n \"\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 v-else v-model=\"state.inputEditValue\" clearable></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 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 ></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 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 ></tiny-date-picker>\n </tiny-form-item>\n </div>\n </div>\n <div class=\"tvp-search-box__bottom-btn\">\n <tiny-button size=\"mini\" @click=\"confirmEditTag(false)\">\n {{ t(\"tvp.tvpSearchbox.cancel\") }}\n </tiny-button>\n <tiny-button size=\"mini\" @click=\"confirmEditTag(true)\">\n {{ t(\"tvp.tvpSearchbox.confirm\") }}\n </tiny-button>\n </div>\n </template>\n <div v-else class=\"tvp-search-box__panel-box\">\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","\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","o","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","nextMinNum","nextMaxNum","curMinNumVar","curMaxNumVar","minIsNumber","maxIsNumber","rule","cb","valueIsNumber","MinValueIsNumber","curMin","curMinIsNumber","useDropdown","t","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","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","dom","popoverRef","isConfirm","disabled","typeArr","_d","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","t2","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","optionValue","v","render","_vm","_h","group","staticRenderFns","hooks","handleEvents","__vue2_script","defineComponent","$prefix","TinyDropdownItem","$props","context","setup","_vm$state$currentOper","$$v","$event","b","isLoading","showCheckBoxList","TinyFormItem","TinyCheckbox","TinyCheckboxGroup","TinyDatePicker","TinyInput","TinyButton","TinyLoading","TinyTag","TinyDropdown","TinyDropdownMenu","TinyTooltip","TinyForm","TinyPopover","TinySelect","TinyOption","TinySearchBoxFirstLevelPanel","TinySearchBoxSecondLevelPanel","iconSearch","iconClose","iconHelpQuery","_vm$state$currentEdit","_vm$state$prevItem","_vm$state$instance","_vm$state$instance2","searchBoxProps","TinySearchBox","template","Vue","version"],"mappings":"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"}
|