{"version":3,"file":"carNumber.mjs","names":["update:modelValue"],"sources":["../../../../src/components/carNumber/src/carNumber.tsx"],"sourcesContent":["import { Fragment, computed, defineComponent, inject, reactive, shallowRef, useModel } from \"vue\";\nimport { Back } from \"@element-plus/icons-vue\";\nimport { ElButton, ElInput, ElMessage, ElPopover, formContextKey, formItemContextKey, inputProps } from \"element-plus\";\nimport { RegExps } from \"../../../constants\";\nimport { definePropType, useProps, useRender } from \"../../../utils\";\nimport { CarNumberArea, CarNumberDigit, CarNumberLetter } from \"./common\";\nimport type { PopoverInstance } from \"element-plus\";\n\nexport default defineComponent({\n\tname: \"FaCarNumber\",\n\tprops: {\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated -- Element Plus 2.x 尚未提供可替代的公开运行时 props 定义。\n\t\t...inputProps,\n\t\t/** value conversion function */\n\t\tparser: {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated -- 保留 Element Plus 2.x parser 的运行时约束。\n\t\t\t...inputProps.parser,\n\t\t\ttype: definePropType<(value: string) => string>(Function),\n\t\t},\n\t\t/** v-model 绑定值 */\n\t\tmodelValue: {\n\t\t\ttype: definePropType<string | null>(String),\n\t\t\tdefault: undefined,\n\t\t},\n\t\t/** placeholder */\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: \"请选择\",\n\t\t},\n\t},\n\temits: {\n\t\t/** v-model 回调 */\n\t\t\"update:modelValue\": (value: string | null) => typeof value === \"string\" || value === null,\n\t\t/** 改变 */\n\t\tchange: (value: string | null) => typeof value === \"string\" || value === null,\n\t},\n\tsetup(props, { emit }) {\n\t\tconst modelValue = useModel(props, \"modelValue\");\n\n\t\tconst popoverRef = shallowRef<PopoverInstance | null>(null);\n\t\t// 获取 el-form 组件上下文\n\t\tconst formContext = inject(formContextKey, undefined);\n\t\t// 获取 el-form-item 组件上下文\n\t\tconst formItemContext = inject(formItemContextKey, undefined);\n\n\t\tconst state = reactive({\n\t\t\tswitchLetter: computed(() => {\n\t\t\t\tif ((modelValue.value?.length ?? 0) >= 1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}),\n\t\t\tdisabledButton: computed(() => {\n\t\t\t\tif ((modelValue.value?.length ?? 0) >= 8) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}),\n\t\t});\n\n\t\tconst handleInputFormatter = (value: string) => {\n\t\t\tif (value.length === 2) {\n\t\t\t\treturn `${value} ● `;\n\t\t\t} else if (value.length > 2) {\n\t\t\t\treturn `${value.slice(0, 2)} ● ${value.slice(2)}`;\n\t\t\t} else {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t};\n\n\t\tconst handleSelectCarNumber = (value: string) => {\n\t\t\tmodelValue.value ??= \"\";\n\t\t\tmodelValue.value += value;\n\t\t};\n\n\t\tconst handleBackClick = () => {\n\t\t\tconst value = modelValue.value ?? \"\";\n\t\t\tif (value.length === 0) return;\n\t\t\tmodelValue.value = value.substring(0, value.length - 1);\n\t\t};\n\n\t\tconst handleConfirmClick = () => {\n\t\t\tlet success = false;\n\t\t\tconst value = modelValue.value ?? \"\";\n\t\t\tif (value.length === 7) {\n\t\t\t\tsuccess = RegExps.CarNumber.test(value);\n\t\t\t} else if (value.length === 8) {\n\t\t\t\tsuccess = RegExps.NewEnergyCarNumber.test(value);\n\t\t\t}\n\t\t\tif (success) {\n\t\t\t\temit(\"change\", value);\n\t\t\t\t// 调用 el-form 内部的校验方法（可自动校验）\n\t\t\t\tif (formItemContext?.prop) formContext?.validateField([formItemContext.prop]);\n\t\t\t} else {\n\t\t\t\tif (formItemContext?.prop && formContext) {\n\t\t\t\t\temit(\"change\", value);\n\t\t\t\t\t// 调用 el-form 内部的校验方法（可自动校验）\n\t\t\t\t\tformContext.validateField([formItemContext.prop]);\n\t\t\t\t} else {\n\t\t\t\t\tElMessage.error(\"车牌号格式不正确\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tpopoverRef.value?.hide();\n\t\t};\n\n\t\tconst handleClearClick = () => {\n\t\t\tmodelValue.value = null;\n\t\t\temit(\"change\", null);\n\t\t\t// 调用 el-form 内部的校验方法（可自动校验）\n\t\t\tif (formItemContext?.prop) formContext?.validateField([formItemContext.prop]);\n\t\t};\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated -- 透传范围必须与继承的 Element Plus 2.x 运行时 props 保持一致。\n\t\tconst elInputProps = useProps(props, inputProps, [\"modelValue\", \"readonly\", \"formatter\"]);\n\n\t\tuseRender(() => (\n\t\t\t<ElPopover\n\t\t\t\tref={popoverRef}\n\t\t\t\twidth=\"auto\"\n\t\t\t\tpopperClass=\"fa-car-number__popover\"\n\t\t\t\ttrigger=\"click\"\n\t\t\t\tshowArrow={false}\n\t\t\t\tshowAfter={0}\n\t\t\t\thideAfter={0}\n\t\t\t>\n\t\t\t\t{{\n\t\t\t\t\treference: () => (\n\t\t\t\t\t\t<ElInput\n\t\t\t\t\t\t\t{...elInputProps.value}\n\t\t\t\t\t\t\tclass=\"fa-car-number__input\"\n\t\t\t\t\t\t\tvModel={modelValue.value}\n\t\t\t\t\t\t\treadonly\n\t\t\t\t\t\t\tformatter={handleInputFormatter}\n\t\t\t\t\t\t/>\n\t\t\t\t\t),\n\t\t\t\t\tdefault: () => (\n\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t<div class={[\"fa-car-number__popover__area\", state.switchLetter ? \"fa-car-number__popover__hide\" : \"\"]}>\n\t\t\t\t\t\t\t\t{CarNumberArea.map((area) => (\n\t\t\t\t\t\t\t\t\t<ElButton disabled={state.disabledButton} onClick={() => handleSelectCarNumber(area)}>\n\t\t\t\t\t\t\t\t\t\t{area}\n\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class={[\"fa-car-number__popover__digit-letter\", state.switchLetter ? \"\" : \"fa-car-number__popover__hide\"]}>\n\t\t\t\t\t\t\t\t{CarNumberDigit.map((digit) => (\n\t\t\t\t\t\t\t\t\t<ElButton disabled={state.disabledButton} onClick={() => handleSelectCarNumber(digit)}>\n\t\t\t\t\t\t\t\t\t\t{digit}\n\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t{CarNumberLetter.map((letter) => (\n\t\t\t\t\t\t\t\t\t<ElButton disabled={state.disabledButton} onClick={() => handleSelectCarNumber(letter)}>\n\t\t\t\t\t\t\t\t\t\t{letter}\n\t\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"fa-car-number__popover__btn\">\n\t\t\t\t\t\t\t\t<ElButton class=\"fa-car-number__popover__btn__clear\" disabled={!modelValue.value} onClick={handleClearClick}>\n\t\t\t\t\t\t\t\t\t清除\n\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t\t<ElButton\n\t\t\t\t\t\t\t\t\tclass=\"fa-car-number__popover__btn__back\"\n\t\t\t\t\t\t\t\t\ttype=\"danger\"\n\t\t\t\t\t\t\t\t\ticon={Back}\n\t\t\t\t\t\t\t\t\tdisabled={!modelValue.value}\n\t\t\t\t\t\t\t\t\tonClick={handleBackClick}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<ElButton\n\t\t\t\t\t\t\t\t\tclass=\"fa-car-number__popover__btn__confirm\"\n\t\t\t\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t\t\t\tdisabled={!modelValue.value || modelValue.value.length < 7}\n\t\t\t\t\t\t\t\t\tonClick={handleConfirmClick}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t确认\n\t\t\t\t\t\t\t\t</ElButton>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t),\n\t\t\t\t}}\n\t\t\t</ElPopover>\n\t\t));\n\t},\n});\n"],"mappings":"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"}