@yxhl/specter-pui-vtk 1.0.38 → 1.0.39
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/dist/specter-pui-vtk.css +1 -1
- package/dist/specter-pui.es.js +194 -194
- package/dist/specter-pui.es.js.map +1 -1
- package/dist/specter-pui.umd.js +1 -1
- package/dist/specter-pui.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/commons/request.js +2 -2
- package/src/components/assembly/VtkArea.vue +1 -1
- package/src/components/assembly/VtkAreaTabs.vue +1 -1
- package/src/components/assembly/VtkDept.vue +1 -1
- package/src/components/assembly/VtkImg.vue +4 -4
- package/src/components/assembly/VtkPdf.vue +2 -2
- package/src/components/assembly/VtkProj.vue +1 -1
- package/src/components/assembly/VtkSearch.vue +1 -1
- package/src/composables/usePage.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specter-pui.umd.js","sources":["../src/commons/storage.js","../src/stores/message.js","../src/components/message/index.js","../src/commons/request.js","../src/components/assembly/VtkArea.vue","../src/components/assembly/VtkAreaTabs.vue","../src/components/assembly/VtkBreadcrumb.vue","../src/components/assembly/VtkCheckbox.vue","../src/components/assembly/VtkCount.vue","../src/components/assembly/VtkDatePicker.vue","../src/components/assembly/VtkDept.vue","../src/components/assembly/VtkEmpty.vue","../src/components/assembly/VtkFab.vue","../src/components/assembly/VtkFormItem.vue","../src/components/assembly/VtkImg.vue","../src/components/assembly/VtkPage.vue","../src/components/assembly/VtkPdf.vue","../src/composables/usePage.js","../src/components/assembly/VtkProj.vue","../src/components/assembly/VtkRadio.vue","../src/components/assembly/VtkSearch.vue","../src/components/assembly/VtkSelect.vue","../src/components/assembly/VtkStepper.vue","../src/commons/filters/dictionary.js","../src/commons/filters/format.js","../src/commons/filters/mask.js","../node_modules/vuetify/lib/util/colors.js","../src/commons/themes.js","../src/commons/validation.js","../src/components/message/alert.vue","../src/components/message/confirm.vue","../src/components/message/loading.vue","../src/components/message/vtkMessage.vue","../src/components/message/prompt.vue","../src/components/message/toast.vue","../src/index.js"],"sourcesContent":["const Storage = {};\r\n/** 获取Storage对象 */\r\nconst storage = (type = 'local') => {\r\n return type == \"local\" ? window.localStorage : window.sessionStorage;\r\n}\r\n/**\r\n * 获取对应缓存值JSON对象\r\n * @param {string} key 键\r\n * @param {string} type 默认为localStorage, 'session'为sessionStorage\r\n * @return {object} 对应的值JSON对象\r\n */\r\nStorage.get = (key, type = 'local') => {\r\n var js = storage(type).getItem(key);\r\n return /^[\\\\{|\\\\[].+[\\\\}|\\\\]]$/.test(js) ? JSON.parse(js) : js;\r\n};\r\n/**\r\n * 设置存储缓存取对象JSON\r\n * @param {string} key 键\r\n * @param {string} value 值(JSON对象)\r\n * @param {string} type 默认为localStorage, 'session'为sessionStorage\r\n */\r\nStorage.set = (key, value, type = 'local') => {\r\n value = (value.constructor === Object) ? JSON.stringify(value) : value\r\n storage(type).setItem(key, value);\r\n};\r\n/**\r\n * 删除对应的缓存对象JSON\r\n * @param {string} key 键\r\n * @param {string} type 默认为localStorage, 'session'为sessionStorage\r\n */\r\nStorage.remove = (key, type = 'local') => {\r\n storage(type).removeItem(key);\r\n};\r\n/**\r\n * 清空所有的缓存对象JSON\r\n * @param {string} type 默认为localStorage, 'session'为sessionStorage\r\n */\r\nStorage.clear = (type = 'local') => {\r\n storage(type).clear();\r\n};\r\n\r\nexport default Storage;\r\n","// stores/message.js\r\nimport { defineStore } from 'pinia'\r\n\r\nexport const useMessageStore = defineStore('message', {\r\n state: () => ({\r\n alert: {\r\n isActive: false,\r\n options: {\r\n title: '',\r\n text: '',\r\n color: '',\r\n width: 500\r\n }\r\n },\r\n confirm: {\r\n isActive: false,\r\n options: {\r\n title: '',\r\n text: '',\r\n color: '',\r\n width: 400,\r\n cancelText: '取消',\r\n confirmText: '确定'\r\n }\r\n },\r\n loading: {\r\n isActive: false,\r\n options: {\r\n title: '',\r\n text: '',\r\n color: '',\r\n width: 300,\r\n indeterminate: true,\r\n value: 0,\r\n progressColor: 'primary',\r\n size: 64,\r\n circleWidth: 6\r\n }\r\n },\r\n prompt: {\r\n isActive: false,\r\n options: {\r\n title: '',\r\n text: '',\r\n color: '',\r\n width: 500,\r\n label: '',\r\n placeholder: '',\r\n inputType: 'text',\r\n cancelText: '取消',\r\n confirmText: '确定'\r\n }\r\n },\r\n toast: {\r\n isActive: false,\r\n options: {\r\n text: '',\r\n color: '',\r\n timeout: 3000,\r\n position: 'top'\r\n }\r\n }\r\n }),\r\n \r\n actions: {\r\n hide(type) {\r\n if (this[type]) {\r\n this[type].isActive = false\r\n }\r\n },\r\n \r\n show(type, options) {\r\n if (this[type]) {\r\n this[type] = {\r\n isActive: true,\r\n options: options\r\n }\r\n }\r\n }\r\n }\r\n})","// components/message/index.js\r\nimport { useMessageStore } from '../../stores/message.js'\r\n\r\nconst Message = {\r\n // 显示 alert\r\n alert(options) {\r\n const messageStore = useMessageStore()\r\n messageStore.show('alert', options)\r\n },\r\n \r\n // 显示 confirm\r\n confirm(options) {\r\n const messageStore = useMessageStore()\r\n messageStore.show('confirm', options)\r\n },\r\n \r\n // loading 对象,包含 show 和 hide 方法\r\n loading: {\r\n show(options = {}) {\r\n const messageStore = useMessageStore()\r\n const defaultOptions = {\r\n title: '',\r\n text: '',\r\n color: '',\r\n width: 120,\r\n indeterminate: true,\r\n progressColor: 'primary',\r\n size: 64,\r\n circleWidth: 6\r\n }\r\n messageStore.show('loading', { ...defaultOptions, ...options })\r\n },\r\n hide() {\r\n const messageStore = useMessageStore()\r\n messageStore.hide('loading')\r\n }\r\n },\r\n \r\n // 显示 prompt\r\n prompt(options) {\r\n const messageStore = useMessageStore()\r\n messageStore.show('prompt', options)\r\n },\r\n \r\n // 显示 toast\r\n toast(text, options = {}) {\r\n \r\n const messageStore = useMessageStore()\r\n // 确保传入的是字符串时正确处理\r\n const toastOptions = typeof text === 'string' \r\n ? { text, ...options }\r\n : text\r\n messageStore.show('toast', toastOptions)\r\n },\r\n \r\n // 隐藏指定类型的消息\r\n hide(type) {\r\n const messageStore = useMessageStore()\r\n messageStore.hide(type)\r\n }\r\n}\r\n\r\nexport default Message","import axios from \"axios\";\r\nimport Storage from \"./storage.js\";\r\nimport Message from \"../components/message/index.js\";\r\n\r\n// create an axios instance\r\nconst service = axios.create({\r\n baseURL: window.VITE_APP_API_URL || import.meta.env.VITE_APP_API_URL || \"\",\r\n headers: {\r\n \"X-Requested-With\": \"XMLHttpRequest\",\r\n },\r\n withCredentials: false,\r\n timeout: 30000,\r\n});\r\n\r\n// request interceptor\r\nservice.interceptors.request.use(\r\n (config) => {\r\n if (Storage.get(\"token\")) {\r\n config.headers[\"X-Token\"] = \"1b0679be72ad976ad5d491ad57a5eec0\";\r\n config.headers[\"Authorization\"] = \"Bearer \" + Storage.get(\"token\");\r\n }\r\n return config;\r\n },\r\n (error) => {\r\n Message.toast(error.message || \"请求错误\");\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// response interceptor\r\nservice.interceptors.response.use(\r\n (response) => {\r\n let res = response.data;\r\n let header = response.headers[\"content-disposition\"];\r\n\r\n if (header != undefined && header.split(\";\")[0] == \"attachment\") {\r\n res = response;\r\n }\r\n if (response.status !== 200) {\r\n Message.toast(res.message || \"请求失败\", { color: \"error\" });\r\n return Promise.reject(new Error(res.message || \"请求失败\"));\r\n } else {\r\n // 检查登录过期\r\n if (\r\n res.meta &&\r\n !res.meta.success &&\r\n res.meta.message === \"specter_authorize_exception\"\r\n ) {\r\n Storage.clear(); //清除所有缓存\r\n const handleRedirect = () => {\r\n const url = window.location.href;\r\n const index = url.indexOf(\"#\");\r\n let newUrl;\r\n\r\n if (index > -1) {\r\n newUrl = url.substring(0, index) + \"#/\";\r\n } else {\r\n newUrl = url + \"#/\";\r\n }\r\n\r\n window.location.href = newUrl;\r\n };\r\n\r\n Message.confirm({\r\n title: \"提示\",\r\n text: \"对不起,您的登录信息过期!\",\r\n onConfirm: handleRedirect,\r\n onCancel: handleRedirect,\r\n });\r\n }\r\n return Promise.resolve(res);\r\n }\r\n },\r\n (error) => {\r\n console.log(\"err\" + error);\r\n Message.toast(error.message || \"网络错误\", { color: \"error\" });\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nconst Request = {};\r\n\r\nRequest.http = (\r\n url,\r\n data = {},\r\n method = \"GET\",\r\n headers = { \"content-type\": \"application/x-www-form-urlencoded\" },\r\n responseType = null\r\n) => {\r\n if (headers[\"content-type\"] === \"application/x-www-form-urlencoded\") {\r\n return service({\r\n url: url,\r\n params: data,\r\n method: method,\r\n headers: headers,\r\n responseType: responseType,\r\n });\r\n } else {\r\n return service({\r\n url: url,\r\n data: data,\r\n method: method,\r\n headers: headers,\r\n responseType: responseType,\r\n });\r\n }\r\n};\r\n\r\nRequest.getForm = (url, data = {}) => {\r\n return Request.http(url, data);\r\n};\r\n\r\nRequest.postForm = (url, data = {}) => {\r\n return Request.http(url, data, \"POST\");\r\n};\r\n\r\nRequest.getJson = (url, data = {}) => {\r\n return Request.http(url, data, \"POST\", {\r\n \"content-type\": \"application/json\",\r\n });\r\n};\r\n\r\nRequest.postJson = (url, data = {}) => {\r\n return Request.http(url, data, \"POST\", {\r\n \"content-type\": \"application/json\",\r\n });\r\n};\r\n\r\nRequest.imp = (url, data = {}) => {\r\n return Request.http(url, data, \"POST\", {\r\n \"Content-Type\": \"multipart/form-data\",\r\n });\r\n};\r\n\r\nRequest.exp = (url, data = {}) => {\r\n return Request.http(\r\n url,\r\n data,\r\n \"POST\",\r\n { \"content-Type\": \"application/json\" },\r\n \"blob\"\r\n );\r\n};\r\n\r\nexport default Request;\r\n","<template>\n\t<div class=\"d-inline-block d-flex\">\n\t\t<VSelect\n\t\t\tv-model=\"entity.area2\"\n\t\t\t@update:model-value=\"nextArea(entity.area2, 1)\"\n\t\t\t@click:clear=\"clear(1)\"\n\t\t\t:placeholder=\"user.areacode?.length >= 2 ? entity.name2 : '---省级---'\"\n\t\t\t:items=\"areaData.area2\"\n\t\t\titem-title=\"areaName\"\n\t\t\titem-value=\"areaCode\"\n\t\t\tclass=\"d-inline-block sel_box mr-3\"\n\t\t\thide-details\n\t\t\tdensity=\"compact\"\n\t\t\tvariant=\"outlined\"\n\t\t\tclearable\n\t\t\t:disabled=\"user.areacode?.length >= 2\"\n\t\t\t:menu-props=\"{ offsetY: true }\"\n\t\t\t:style=\"areaStyle\"></VSelect>\n\t\t<VSelect\n\t\t\tv-if=\"maxArea >= 4\"\n\t\t\tv-model=\"entity.area4\"\n\t\t\t@update:model-value=\"nextArea(entity.area4, 2)\"\n\t\t\t@click:clear=\"clear(2)\"\n\t\t\t:placeholder=\"user.areacode?.length >= 4 ? entity.name4 : '---市级---'\"\n\t\t\t:items=\"areaData.area4\"\n\t\t\titem-title=\"areaName\"\n\t\t\titem-value=\"areaCode\"\n\t\t\tclass=\"d-inline-block sel_box\"\n\t\t\t:class=\"maxArea > 4 && 'mr-3'\"\n\t\t\thide-details\n\t\t\tdensity=\"compact\"\n\t\t\tvariant=\"outlined\"\n\t\t\tclearable\n\t\t\t:disabled=\"user.areacode?.length >= 4\"\n\t\t\t:menu-props=\"{ offsetY: true }\"\n\t\t\t:style=\"areaStyle\"></VSelect>\n\t\t<VSelect\n\t\t\tv-if=\"maxArea >= 6\"\n\t\t\tv-model=\"entity.area6\"\n\t\t\t@update:model-value=\"nextArea(entity.area6, 3)\"\n\t\t\t@click:clear=\"clear(3)\"\n\t\t\t:placeholder=\"user.areacode?.length >= 6 ? entity.name6 : '---区/县---'\"\n\t\t\t:items=\"areaData.area6\"\n\t\t\titem-title=\"areaName\"\n\t\t\titem-value=\"areaCode\"\n\t\t\tclass=\"d-inline-block sel_box\"\n\t\t\t:class=\"maxArea > 6 && 'mr-3'\"\n\t\t\thide-details\n\t\t\tdensity=\"compact\"\n\t\t\tvariant=\"outlined\"\n\t\t\tclearable\n\t\t\t:disabled=\"user.areacode?.length >= 6\"\n\t\t\t:menu-props=\"{ offsetY: true }\"\n\t\t\t:style=\"areaStyle\"></VSelect>\n\t\t<VSelect\n\t\t\tv-if=\"maxArea >= 9\"\n\t\t\tv-model=\"entity.area9\"\n\t\t\t@update:model-value=\"nextArea(entity.area9, 4)\"\n\t\t\t@click:clear=\"clear(4)\"\n\t\t\t:placeholder=\"user.areacode?.length >= 9 ? entity.name9 : '---街/镇---'\"\n\t\t\t:items=\"areaData.area9\"\n\t\t\titem-title=\"areaName\"\n\t\t\titem-value=\"areaCode\"\n\t\t\tclass=\"d-inline-block sel_box\"\n\t\t\t:class=\"maxArea > 9 && 'mr-3'\"\n\t\t\thide-details\n\t\t\tdensity=\"compact\"\n\t\t\tvariant=\"outlined\"\n\t\t\tclearable\n\t\t\t:disabled=\"user.areacode?.length >= 9\"\n\t\t\t:menu-props=\"{ offsetY: true }\"\n\t\t\t:style=\"areaStyle\"></VSelect>\n\t\t<VSelect\n\t\t\tv-if=\"maxArea >= 12\"\n\t\t\tv-model=\"entity.area12\"\n\t\t\t@update:model-value=\"nextArea(entity.area12, 5)\"\n\t\t\t@click:clear=\"clear(5)\"\n\t\t\t:placeholder=\"user.areacode?.length >= 12 ? entity.name12 : '---村/社---'\"\n\t\t\t:items=\"areaData.area12\"\n\t\t\titem-title=\"areaName\"\n\t\t\titem-value=\"areaCode\"\n\t\t\tclass=\"d-inline-block\"\n\t\t\tstyle=\"width: 188px\"\n\t\t\thide-details\n\t\t\tdensity=\"compact\"\n\t\t\tvariant=\"outlined\"\n\t\t\tclearable\n\t\t\t:disabled=\"user.areacode?.length >= 12\"\n\t\t\t:menu-props=\"{ offsetY: true }\"\n\t\t\t:style=\"areaStyle\"></VSelect>\n\t</div>\n</template>\n\n<script setup>\nimport { ref, reactive, onMounted, getCurrentInstance } from 'vue';\n\nimport Request from \"../../commons/request\"\n\nconst { proxy } = getCurrentInstance();\n\n// 定义组件名称和选项\ndefineOptions({\n\tname: \"VtkArea\",\n\tinheritAttrs: false,\n});\n\n// 定义props\nconst props = defineProps({\n\tmaxArea: {\n\t\ttype: Number,\n\t\tdefault: 12,\n\t},\n\tminArea: {\n\t\ttype: Number,\n\t\tdefault: null,\n\t},\n\tareaStyle: {\n\t\ttype: String,\n\t\tdefault: \"\",\n\t},\n});\n\n// 定义emits\nconst emit = defineEmits(['update:modelValue']);\n\n// 响应式数据\nconst entity = reactive({\n\tarea2: null,\n\tarea4: null,\n\tarea6: null,\n\tarea9: null,\n\tarea12: null,\n\tname2: '',\n\tname4: '',\n\tname6: '',\n\tname9: '',\n\tname12: ''\n});\n\nconst user = ref({ areacode: \"\" });\nconst areaData = reactive({\n\tarea2: [],\n\tarea4: [],\n\tarea6: [],\n\tarea9: [],\n\tarea12: []\n});\n\n// 安全获取 vtk 对象\nconst getVtk = () => {\n if (typeof window !== 'undefined' && window.$vtk) {\n return window.$vtk;\n }\n return null;\n};\n\n// 组件挂载时执行\nonMounted(() => {\n\tuser.value = typeof(proxy.$vtk.storage.get(\"user\")) != 'object' ? JSON.parse(proxy.$vtk.storage.get(\"user\")) : proxy.$vtk.storage.get(\"user\") || '';\n\tarea();\n});\n\n// 所属地区\nconst area = () => {\n try {\n proxy.$vtk.message.loading.show();\n Request.postForm(`/dict/area/show/${user.value.areacode}`).then((res) => {\n proxy.$vtk.message.loading.hide();\n if (res.meta.success) {\n entity[`area${res.data.areaLeve}`] = res.data.areaCode;\n entity.name2 = res.data.province;\n entity.name4 = res.data.city;\n entity.name6 = res.data.district;\n entity.name9 = res.data?.town;\n entity.name12 = res.data?.village;\n nextArea(user.value.areacode);\n } else {\n proxy.$vtk.message.toast(res.meta.message);\n }\n }).catch(error => {\n proxy.$vtk.message.loading.hide();\n proxy.$vtk.message.toast('加载区域数据失败');\n });\n } catch (error) {\n console.error('初始化区域数据失败:', error);\n if (proxy.$vtk.message?.loading?.hide) {\n proxy.$vtk.message.loading.hide();\n }\n }\n};\n\n// 下一级地区列表\nconst nextArea = (areaCode, index) => {\n\tinputFn(areaCode);\n \n\tif (areaCode?.length < 12) {\n\t\tRequest.postForm(`/dict/area/next/${areaCode}`).then((res) => {\n\t\t\tproxy.$vtk.message.loading.hide();\n\t\t\tif (res.meta.success) {\n\t\t\t\tif (index) {\n\t\t\t\t\tObject.keys(areaData)\n\t\t\t\t\t\t.slice(index, 5)\n\t\t\t\t\t\t.forEach((e) => {\n\t\t\t\t\t\t\tareaData[e] = [];\n\t\t\t\t\t\t\tentity[e] = null;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tareaData[`area${res.data[0].areaLeve}`] = res.data;\n\t\t\t} else {\n\t\t\t\tproxy.$vtk.message.toast(res.meta.message);\n\t\t\t}\n\t\t}).catch(error => {\n console.error('加载下级区域数据失败:', error);\n proxy.$vtk.message.toast('加载下级区域数据失败');\n });\n\t}\n};\n\n// 清除\nconst clear = (index) => {\n\tlet arr = Object.keys(areaData);\n\tinputFn(entity[arr[index - 2]]);\n\tarr.slice(index, 5).forEach((e) => {\n\t\tareaData[e] = [];\n\t\tentity[e] = null;\n\t});\n};\n\n// 输入事件\nconst inputFn = (e) => {\n\te && emit(\"update:modelValue\", e);\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.sel_box {\n\twidth: 164px;\n}\n</style>","<template>\r\n\t<v-menu v-model=\"menu\" :close-on-content-click=\"false\" max-width=\"520\" min-width=\"520\">\r\n\t\t<template v-slot:activator=\"{ props }\">\r\n\t\t\t<v-btn\r\n\t\t\t\tv-bind=\"props\"\r\n\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\tcolor=\"primary\"\r\n\t\t\t\tclass=\"area-select-btn\"\r\n\t\t\t\t:style=\"$attrs.styles\"\r\n\t\t\t>\r\n\t\t\t\t<span class=\"btn-text\">{{ itemText || '选择地区' }}</span>\r\n\t\t\t\t<v-icon v-if=\"itemText\" size=\"small\" @click.stop=\"textClear\" class=\"ml-2\">mdi-close-circle</v-icon>\r\n\t\t\t</v-btn>\r\n\t\t</template>\r\n\t\t<v-card elevation=\"0\" style=\"width: 350px;\">\r\n\t\t\t<p class=\"pt-3 px-3\">\r\n\t\t\t\t<v-icon color=\"primary\" class=\"mr-1\" size=\"20\">mdi-map-marker-radius</v-icon>\r\n\t\t\t\t<span v-for=\"link in entity\" :key=\"link.areaCode\" class=\"link text-body-2 text-primary\">{{ link.areaName }}</span>\r\n\t\t\t</p>\r\n\t\t\t<v-sheet class=\"rounded-lg mx-3 mt-2\" color=\"#b1b1b117\">\r\n\t\t\t\t<v-tabs v-model=\"tab\" @update:model-value=\"tabArea\" class=\"pt-2 px-1\">\r\n\t\t\t\t\t<v-tab\r\n\t\t\t\t\t\tv-for=\"(item, index) in tabItems\"\r\n\t\t\t\t\t\t:key=\"index\"\r\n\t\t\t\t\t\tclass=\"mx-1\"\r\n\t\t\t\t\t\t:style=\"tab == index && 'color:white;opacity:1'\"\r\n\t\t\t\t\t\t:disabled=\"areaStorage.length <= index + 1\"\r\n\t\t\t\t\t\tv-show=\"minArea ? minArea >= item.leve : true\"\r\n\t\t\t\t\t>{{ item.text }}</v-tab>\r\n\t\t\t\t</v-tabs>\r\n\t\t\t\t<v-sheet\r\n\t\t\t\t\tv-show=\"index == tab\"\r\n\t\t\t\t\tv-for=\"(item, index) in tabItems\"\r\n\t\t\t\t\t:key=\"index\"\r\n\t\t\t\t\tclass=\"px-3 py-1\"\r\n\t\t\t\t\tmin-height=\"100\"\r\n\t\t\t\t\tcolor=\"rgba(0,0,0,0)\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<v-chip-group v-model=\"current\" selected-class=\"chipActive\" column>\r\n\t\t\t\t\t\t<v-chip\r\n\t\t\t\t\t\t\tv-for=\"area in areaItems\"\r\n\t\t\t\t\t\t\t:key=\"area.id\"\r\n\t\t\t\t\t\t\t@click=\"areaChange(area, index)\"\r\n\t\t\t\t\t\t\tclass=\"rounded\"\r\n\t\t\t\t\t\t\t:class=\"area.areaCode == user.areacode && 'active'\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{{ area.areaName }}\r\n\t\t\t\t\t\t</v-chip>\r\n\t\t\t\t\t</v-chip-group>\r\n\t\t\t\t</v-sheet>\r\n\t\t\t</v-sheet>\r\n\r\n\t\t\t<v-card-actions class=\"pr-0 py-3\">\r\n\t\t\t\t<v-spacer />\r\n\t\t\t\t<v-btn @click=\"close\" elevation=\"0\" size=\"small\"><v-icon class=\"pt-1 pr-1\">mdi-progress-close</v-icon> 取消</v-btn>\r\n\t\t\t\t<v-btn @click=\"save\" class=\"text-white mr-3\" color=\"primary\" elevation=\"0\" size=\"small\"><v-icon class=\"pt-1 pr-1\">mdi-progress-check</v-icon> 确定</v-btn>\r\n\t\t\t</v-card-actions>\r\n\t\t</v-card>\r\n\t</v-menu>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, watch, onMounted, getCurrentInstance, nextTick } from 'vue';\r\n\r\nconst props = defineProps({\r\n\tmodelValue: {\r\n\t\ttype: String,\r\n\t\tdefault: null,\r\n\t},\r\n\tminArea: {\r\n\t\ttype: Number,\r\n\t\tdefault: null,\r\n\t},\r\n\tareaNode: {\r\n\t\ttype: Number,\r\n\t\tdefault: null,\r\n\t},\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue', 'change']);\r\n\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst menu = ref(false);\r\nconst user = ref({});\r\nconst tab = ref(0);\r\nconst tabItems = ref([]);\r\nconst areaStorage = ref([]); //存储个级别地区数据\r\nconst areaItems = ref([]); //当前选择地区的所有列\r\nconst entity = ref([]); //存储选中的数据\r\nconst current = ref(null); //回显值选中\r\nconst itemValue = ref(\"\"); //传值:最终选择值\r\nconst itemText = ref(\"\"); //最终选择值\r\n\r\n// 值回显\r\nconst view = (code) => {\r\n\tproxy.$vtk.request.getForm(`/dict/area/show/${code}`).then((res) => {\r\n\t\tlet province = res.data.province ? `${res.data.province}` : \"\";\r\n\t\tlet city = res.data.city ? `/${res.data.city}` : \"\";\r\n\t\tlet district = res.data.district ? `/${res.data.district}` : \"\";\r\n\t\tlet town = res.data.town ? `/${res.data.town}` : \"\";\r\n\t\tlet village = res.data.village ? `/${res.data.village}` : \"\";\r\n\t\titemText.value = `${province}${city}${district}${town}${village}`;\r\n\t\tif (props.areaNode && props.areaNode > 0) {\r\n\t\t\titemText.value = itemText.value.split(\"/\").slice(-props.areaNode).join(\"/\");\r\n\t\t}\r\n\t});\r\n};\r\n\r\n// 切换Tab地区级别\r\nconst tabArea = (index) => {\r\n\tareaItems.value = [...areaStorage.value[index]];\r\n\tif (index < entity.value.length) {\r\n\t\tcurrent.value = areaItems.value.findIndex((e) => e.areaCode == entity.value[index].areaCode);\r\n\t} else {\r\n\t\tcurrent.value = null;\r\n\t}\r\n};\r\n\r\n//选择地区\r\nconst areaChange = (item, index) => {\r\n\tentity.value = entity.value.slice(0, index);\r\n\tentity.value.push(item);\r\n\tareaStorage.value = areaStorage.value.slice(0, index + 1);\r\n\tif (tabItems.value.length > tab.value + 1 && (props.minArea ? props.minArea > item.areaCode.length : true)) {\r\n\t\tgetTree(item.areaCode);\r\n\t\ttab.value++;\r\n\t}\r\n};\r\n\r\n// 加载下级地区\r\nconst getTree = (code) => {\r\n\tproxy.$vtk.request.getForm(`/dict/area/next/${code}`).then((res) => {\r\n\t\tareaItems.value = res.data;\r\n\t\tareaStorage.value.push(res.data);\r\n\t\tcurrent.value = null;\r\n\t\tnextTick(); //Vue 3中替代$forceUpdate\r\n\t});\r\n};\r\n\r\n// 加载第一个地区,用户所在地区\r\nconst getAreaName = (code) => {\r\n\tentity.value = [];\r\n\ttabItems.value = [\r\n\t\t{ text: \"省级\", leve: \"2\" },\r\n\t\t{ text: \"市级\", leve: \"4\" },\r\n\t\t{ text: \"区县\", leve: \"6\" },\r\n\t\t{ text: \"街镇\", leve: \"9\" },\r\n\t\t{ text: \"村社\", leve: \"12\" },\r\n\t].filter((e) => e.leve >= user.value.areacode.length);\r\n\tareaStorage.value = [];\r\n\r\n\tproxy.$vtk.request.getForm(`/dict/area/show/${code}`).then((res) => {\r\n\t\tareaItems.value = [{ areaName: res.data.areaName, areaCode: res.data.areaCode }];\r\n\t\tareaStorage.value.push(areaItems.value);\r\n\t\tentity.value.push(areaItems.value[0]);\r\n\t});\r\n};\r\n\r\n//确认保存\r\nconst save = () => {\r\n\tlet text = [];\r\n\tlet val = [];\r\n\tentity.value.forEach((e) => {\r\n\t\ttext.push(e.areaName);\r\n\t\tval.push(e.areaCode);\r\n\t\titemValue.value = e.areaCode;\r\n\t});\r\n\tif (props.areaNode && props.areaNode > 0) {\r\n\t\ttext = text.slice(-props.areaNode);\r\n\t}\r\n\titemText.value = text.join().replace(/,/g, \"/\");\r\n\temit(\"update:modelValue\", itemValue.value);\r\n\temit(\"change\");\r\n\tclose();\r\n};\r\n\r\n// 清空\r\nconst textClear = () => {\r\n\ttab.value = 0;\r\n\tgetAreaName(user.value.areacode);\r\n\titemValue.value = user.value.areacode;\r\n\temit(\"update:modelValue\", itemValue.value);\r\n\temit(\"change\");\r\n};\r\n\r\n// 关闭弹窗\r\nconst close = () => {\r\n\tmenu.value = false;\r\n};\r\n\r\n// Watch modelValue\r\nwatch(() => props.modelValue, (newVal, oldVal) => {\r\n\tif (newVal && newVal != oldVal) {\r\n\t\tview(newVal);\r\n\t}\r\n});\r\n\r\n// 组件挂载时执行\r\nonMounted(() => {\r\n\tuser.value = proxy.$vtk.storage.get(\"user\") && JSON.parse(proxy.$vtk.storage.get(\"user\"));\r\n\tgetAreaName(user.value.areacode);\r\n\tif (props.modelValue) {\r\n\t\tview(props.modelValue);\r\n\t}\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n// 圆形按钮样式\r\n.area-select-btn {\r\n\tborder-radius: 20px !important;\r\n\tpadding: 6px 20px !important;\r\n\tmin-width: 120px;\r\n\theight: 36px !important;\r\n\ttext-transform: none;\r\n\tletter-spacing: normal;\r\n\r\n\t.btn-text {\r\n\t\tfont-size: 14px;\r\n\t\tcolor: inherit;\r\n\t}\r\n\r\n\t&:hover {\r\n\t\tbackground-color: rgba(var(--v-theme-primary), 0.08);\r\n\t}\r\n}\r\n:deep(.v-tab__slider) {\r\n\theight: 0px !important;\r\n}\r\n\r\n.link::after {\r\n\tcontent: \" / \";\r\n\tfont-size: 14px;\r\n\tcolor: #999;\r\n}\r\n.link:last-of-type::after {\r\n\tcontent: \"\";\r\n}\r\n:deep(.v-chip:not(.v-chip--selected)) {\r\n\tbackground: #e0e0e000;\r\n}\r\n// Vuetify 3 tabs container styling\r\n:deep(.v-tabs) {\r\n\theight: 40px;\r\n}\r\n// Tab button styling\r\n:deep(.v-tab) {\r\n\tmin-width: 90px;\r\n\theight: 32px !important;\r\n\tborder-radius: 6px !important;\r\n\tcolor: rgba(0, 0, 0, .6);\r\n\ttransition: all 0.3s ease;\r\n\tz-index: 1;\r\n}\r\n// Active/selected tab styling\r\n:deep(.v-tab--selected) {\r\n\tbackground-color: rgb(var(--v-theme-primary));\r\n\tcolor: white !important;\r\n\topacity: 1;\r\n}\r\n// Hover effect\r\n:deep(.v-tab:hover) {\r\n\tbackground-color: rgba(var(--v-theme-primary), 0.9);\r\n\tcolor: white;\r\n}\r\n.tabActive {\r\n\tcolor: #fff;\r\n}\r\n.chipActive {\r\n\tcolor: #0095ff !important;\r\n\tbackground-color: #008eff05 !important;\r\n}\r\n.active {\r\n\tcolor: #0095ff !important;\r\n\tbackground-color: #008eff20 !important;\r\n}\r\n:deep(.v-slide-group__next),\r\n:deep(.v-slide-group__prev) {\r\n\tdisplay: none;\r\n}\r\n</style>\r\n","<template>\n <div class=\"vtk-breadcrumb-wrapper d-flex align-center justify-space-between\">\n <!-- 左侧面包屑 -->\n <v-breadcrumbs :items=\"breadcrumbItems\" class=\"pa-0\">\n <template v-slot:divider>\n <v-icon>mdi-chevron-right</v-icon>\n </template>\n <template v-slot:item=\"{ item }\">\n <v-breadcrumbs-item\n :title=\"item.title\"\n :to=\"item.to\"\n :disabled=\"item.disabled\"\n :class=\"{ 'text-primary': !item.disabled }\"\n >\n {{ item.title }}\n </v-breadcrumbs-item>\n </template>\n </v-breadcrumbs>\n\n <!-- 右侧返回按钮 -->\n <v-btn\n v-if=\"showBack\"\n variant=\"text\"\n color=\"primary\"\n prepend-icon=\"mdi-arrow-left\"\n @click=\"handleBack\"\n style=\"height: 36px;\"\n >\n {{ backText }}\n </v-btn>\n </div>\n</template>\n\n<script setup>\nimport { computed, inject, getCurrentInstance } from 'vue'\n\nconst props = defineProps({\n // 面包屑项目数组\n items: {\n type: Array,\n default: () => []\n },\n // 是否显示返回按钮\n showBack: {\n type: Boolean,\n default: true\n },\n // 返回按钮文字\n backText: {\n type: String,\n default: '返回'\n },\n // 自定义返回路径,不传则返回上一级\n backTo: {\n type: [String, Object],\n default: null\n }\n})\n\nconst emit = defineEmits(['back'])\n\n// 使用inject安全地获取router和route\nconst router = inject('router', null)\nconst route = inject('route', null)\n\n// 处理面包屑数据\nconst breadcrumbItems = computed(() => {\n if (props.items && props.items.length > 0) {\n return props.items.map((item, index) => ({\n title: item.title || item.text || item.name,\n to: item.to || item.path || item.href,\n disabled: item.disabled !== undefined ? item.disabled : index === props.items.length - 1\n }))\n }\n\n // 如果route不可用,返回空数组\n if (!route) {\n return []\n }\n\n // 如果没有传入items,尝试从路由meta中获取\n const matched = route.matched?.filter(r => r.meta && r.meta.breadcrumb) || []\n if (matched.length > 0) {\n return matched.map((r, index) => ({\n title: r.meta.breadcrumb,\n to: r.path,\n disabled: index === matched.length - 1\n }))\n }\n\n // 默认返回当前路由路径生成的面包屑\n const pathArray = route.path?.split('/').filter(p => p) || []\n return pathArray.map((path, index) => {\n const routePath = '/' + pathArray.slice(0, index + 1).join('/')\n return {\n title: path.charAt(0).toUpperCase() + path.slice(1),\n to: routePath,\n disabled: index === pathArray.length - 1\n }\n })\n})\n\n// 处理返回按钮点击\nconst handleBack = () => {\n // 触发back事件\n emit('back')\n\n // 如果router不可用,仅触发事件\n if (!router) {\n return\n }\n\n // 如果传入了backTo参数,跳转到指定路径\n if (props.backTo) {\n if (typeof props.backTo === 'string') {\n router.push(props.backTo)\n } else {\n router.push(props.backTo)\n }\n } else {\n // 默认返回上一级\n router.back()\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.vtk-breadcrumb-wrapper {\n width: 100%;\n padding: 12px 0;\n\n :deep(.v-breadcrumbs) {\n flex-grow: 1;\n height: 36px;\n }\n\n :deep(.v-breadcrumbs-item) {\n font-size: 14px;\n }\n\n :deep(.v-breadcrumbs-divider) {\n padding: 0 8px;\n }\n\n :deep(.v-breadcrumbs-item--disabled) {\n opacity: 0.6;\n }\n}\n</style>\n","<template>\n <VInput \n v-bind=\"inputAttrs\" \n :model-value=\"inputValue\"\n >\n <div class=\"checkGroup\" :class=\"inline ? 'd-flex flex-wrap align-top' : 'd-inline-block'\">\n <VCheckbox\n v-for=\"item in items\"\n hide-details\n :key=\"item.id || item.code\"\n :label=\"item.codeValue\"\n :value=\"item.code\"\n v-model=\"localValue\"\n v-bind=\"checkboxAttrs\"\n :class=\"inline ? 'mr-4' : ''\"\n />\n </div>\n </VInput>\n</template>\n\n<script setup>\nimport { ref, onMounted, useAttrs, computed, watch } from 'vue';\nimport Request from '../../commons/request';\n\n// 定义组件名称\ndefineOptions({\n name: \"VtkCheckbox\",\n inheritAttrs: false,\n});\n\n// 定义 props\nconst props = defineProps({\n /**\n * 字典来源:\n * - 若为静态数据,格式如:\"0:否/1:是\"\n * - 若为字典键,格式如:\"DISABLE_TYPE\"\n */\n list: {\n type: String,\n required: true,\n },\n /**\n * 是否横向排列\n */\n inline: {\n type: Boolean,\n default: false,\n },\n /**\n * 绑定值\n */\n modelValue: {\n type: [Array, String],\n default: () => []\n }\n});\n\n// 定义 emits\nconst emit = defineEmits(['update:modelValue']);\n\n// 本地选中值\nconst localValue = ref([]);\n\n// 防止递归更新的标志位\nconst isUpdatingLocal = ref(false);\nconst isUpdatingModel = ref(false);\n\n// 同步外部 modelValue 到本地值\nwatch(() => props.modelValue, (newVal) => {\n if (isUpdatingModel.value) {\n isUpdatingModel.value = false;\n return;\n }\n \n isUpdatingLocal.value = true;\n if (Array.isArray(newVal)) {\n localValue.value = [...newVal];\n } else if (typeof newVal === 'string') {\n localValue.value = newVal ? [newVal] : [];\n } else {\n localValue.value = [];\n }\n}, { immediate: true });\n\n// 同步本地值到外部 modelValue\nwatch(localValue, (newVal) => {\n if (isUpdatingLocal.value) {\n isUpdatingLocal.value = false;\n return;\n }\n \n isUpdatingModel.value = true;\n emit('update:modelValue', newVal);\n}, { deep: true });\n\n// 获取透传属性\nconst attrs = useAttrs();\n\n// 分离传递给 input 和传递给 checkbox 的属性\nconst inputAttrs = computed(() => {\n const { list, inline, modelValue, ...rest } = attrs;\n return rest;\n});\n\nconst checkboxAttrs = computed(() => {\n // 移除表单验证相关属性,避免重复应用\n const { \n list, \n inline, \n modelValue,\n error, \n 'error-messages': errorMessages, \n rules, \n hint, \n 'persistent-hint': persistentHint,\n ...rest \n } = attrs;\n return rest;\n});\n\n// 为 v-input 提供一个值\nconst inputValue = computed(() => {\n return localValue.value && localValue.value.length > 0 ? localValue.value : null;\n});\n\n// 响应式数据\nconst items = ref([]);\n\n// 处理静态数据(如 \"0:否/1:是\")\nconst statc = () => {\n props.list.split('/').forEach(it => {\n const [code, codeValue] = it.split(':');\n items.value.push({ code, codeValue });\n });\n};\n\n// 请求远程字典数据\nconst miscs = async () => {\n try {\n const res = await Request.getForm(`dict/misc/list/${props.list}`);\n items.value = res.data || [];\n } catch (error) {\n console.error('[VtkCheckbox] Failed to load dictionary:', error);\n items.value = [];\n }\n};\n\n// 组件挂载时初始化数据\nonMounted(() => {\n if (props.list.includes(':')) {\n statc();\n } else {\n miscs();\n }\n});\n</script>\n\n<style scoped>\n:deep(.v-checkbox .v-selection-control) {\n margin: 0;\n padding: 0;\n min-height: 32px;\n}\n\n:deep(.v-input__details) {\n padding-inline: 16px;\n}\n</style>","<!-- \r\n\r\n// 基础用法\r\n <VtkCount :start=\"0\" :end=\"12345\" :duration=\"3000\" suffix=\"次\" />\r\n \r\n//带前缀和分隔符\r\n <VtkCount \r\n :start=\"0\" \r\n :end=\"999999\" \r\n :duration=\"2000\" \r\n prefix=\"¥\" \r\n suffix=\"元\" \r\n :separator=\"true\" \r\n />\r\n \r\n//手动控制\r\n <VtkCount \r\n ref=\"countRef\" \r\n :start=\"0\" \r\n :end=\"100\" \r\n :autoplay=\"false\" \r\n @complete=\"onComplete\"\r\n />\r\n <VBtn @click=\"startCount\">开始计数</VBtn>\r\n -->\r\n\r\n<template>\r\n <div class=\"vtk-count\" :class=\"containerClass\">\r\n <div class=\"count-display\" :style=\"{ color: color }\">\r\n <!-- 前缀 -->\r\n <span v-if=\"prefix\" class=\"prefix\">{{ prefix }}</span>\r\n \r\n <!-- 数字容器 -->\r\n <div class=\"digits-container\">\r\n <div \r\n v-for=\"(digitChar, index) in maxDigitString\" \r\n :key=\"`digit-${index}-${digitKey}`\"\r\n class=\"digit-wrapper\"\r\n :class=\"{ 'digit-separator': isNaN(digitChar) }\"\r\n >\r\n <div \r\n v-if=\"!isNaN(digitChar)\" \r\n class=\"digit-scroll\"\r\n >\r\n <div \r\n v-for=\"n in 10\" \r\n :key=\"n\" \r\n class=\"digit-item\"\r\n :style=\"getDigitStyle(getCurrentDigit(index), n-1)\"\r\n >\r\n {{ n-1 }}\r\n </div>\r\n </div>\r\n <div v-else class=\"separator\">{{ digitChar }}</div>\r\n </div>\r\n </div>\r\n \r\n <!-- 后缀 -->\r\n <span v-if=\"suffix\" class=\"suffix\">{{ suffix }}</span>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, computed, onMounted, watch, nextTick } from 'vue'\r\n\r\n// 定义组件名称\r\ndefineOptions({\r\n name: \"VtkCount\",\r\n inheritAttrs: false,\r\n});\r\n\r\n// 定义 props\r\nconst props = defineProps({\r\n // 初始值\r\n start: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 目标值\r\n end: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 动画持续时间(毫秒)\r\n duration: {\r\n type: Number,\r\n default: 2000\r\n },\r\n // 是否自动开始动画\r\n autoplay: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 数字前缀\r\n prefix: {\r\n type: String,\r\n default: ''\r\n },\r\n // 数字后缀\r\n suffix: {\r\n type: String,\r\n default: ''\r\n },\r\n // 容器自定义类名\r\n containerClass: {\r\n type: String,\r\n default: ''\r\n },\r\n // 是否使用分隔符(千分位)\r\n separator: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 小数位数\r\n decimals: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 文字颜色\r\n color: {\r\n type: String,\r\n default: '#1976d2'\r\n }\r\n})\r\n\r\n// 定义 emits\r\nconst emit = defineEmits(['complete'])\r\n\r\n// 当前显示的数值\r\nconst currentNumber = ref(props.start)\r\n\r\n// 当前每个位置的数字值\r\nconst currentDigits = ref([])\r\n\r\n// 用于强制重新渲染的key\r\nconst digitKey = ref(0)\r\n\r\n// 是否正在动画中\r\nconst isAnimating = ref(false)\r\n\r\n// 格式化数字(处理小数和分隔符)\r\nconst formatNumber = (num) => {\r\n let result = num.toFixed(props.decimals)\r\n if (props.separator && props.decimals === 0) {\r\n result = result.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\r\n }\r\n return result\r\n}\r\n\r\n// 获取目标数字字符串\r\nconst targetNumberString = computed(() => {\r\n return formatNumber(props.end)\r\n})\r\n\r\n// 获取起始数字字符串\r\nconst startNumberString = computed(() => {\r\n return formatNumber(props.start)\r\n})\r\n\r\n// 获取最大位数的字符串(用于保持DOM结构稳定)\r\nconst maxDigitString = computed(() => {\r\n const target = targetNumberString.value\r\n const start = startNumberString.value\r\n return target.length >= start.length ? target : start\r\n})\r\n\r\n// 获取当前指定位置的数字\r\nconst getCurrentDigit = (index) => {\r\n if (index < currentDigits.value.length) {\r\n return currentDigits.value[index]\r\n }\r\n return '0'\r\n}\r\n\r\n// 初始化数字数组\r\nconst initDigitsArray = () => {\r\n const targetStr = targetNumberString.value\r\n const startStr = startNumberString.value\r\n \r\n // 初始化currentDigits数组,确保长度与maxDigitString一致\r\n currentDigits.value = maxDigitString.value.split('').map((char, index) => {\r\n if (isNaN(char)) {\r\n return char // 分隔符保持原样\r\n }\r\n \r\n // 从起始字符串对应位置获取数字\r\n if (index < startStr.length) {\r\n const startChar = startStr[index]\r\n return isNaN(startChar) ? '0' : startChar\r\n }\r\n return '0'\r\n })\r\n}\r\n\r\n// 获取数字样式\r\nconst getDigitStyle = (currentValue, digitValue) => {\r\n // 如果是分隔符,直接返回\r\n if (isNaN(currentValue) || isNaN(digitValue)) {\r\n return {\r\n transform: 'translateY(0)'\r\n }\r\n }\r\n \r\n const current = parseInt(currentValue) || 0\r\n const target = digitValue\r\n const offset = target - current\r\n \r\n // 处理循环滚动(9->0 或 0->9)\r\n let translateY\r\n if (offset > 5) {\r\n // 向下滚动(如 9->0)\r\n translateY = -(10 - offset) * 100\r\n } else if (offset < -5) {\r\n // 向上滚动(如 0->9)\r\n translateY = (10 + offset) * 100\r\n } else {\r\n translateY = -offset * 100\r\n }\r\n \r\n return {\r\n transform: `translateY(${translateY}%)`,\r\n transition: isAnimating.value ? 'transform 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94)' : 'none',\r\n color: props.color\r\n }\r\n}\r\n\r\n// 开始数字动画\r\nconst startAnimation = () => {\r\n if (isAnimating.value) return\r\n \r\n isAnimating.value = true\r\n const startTime = performance.now()\r\n const startValue = props.start\r\n const endValue = props.end\r\n const diff = endValue - startValue\r\n \r\n // 初始化数字数组\r\n initDigitsArray()\r\n \r\n const animate = (currentTime) => {\r\n const elapsed = currentTime - startTime\r\n const progress = Math.min(elapsed / props.duration, 1)\r\n \r\n // 使用缓动函数使动画更自然\r\n const easeOutQuart = 1 - Math.pow(1 - progress, 4)\r\n currentNumber.value = startValue + diff * easeOutQuart\r\n \r\n // 更新每个数字位的当前值\r\n updateDigitArray(currentNumber.value)\r\n \r\n if (progress < 1) {\r\n requestAnimationFrame(animate)\r\n } else {\r\n currentNumber.value = endValue\r\n // 确保最终值准确\r\n updateDigitArray(endValue)\r\n isAnimating.value = false\r\n emit('complete')\r\n }\r\n }\r\n \r\n requestAnimationFrame(animate)\r\n}\r\n\r\n// 更新数字数组\r\nconst updateDigitArray = (value) => {\r\n const valueStr = formatNumber(value)\r\n const maxStr = maxDigitString.value\r\n \r\n // 保持数组长度不变,只更新值\r\n for (let i = 0; i < maxStr.length; i++) {\r\n if (i < valueStr.length) {\r\n currentDigits.value[i] = valueStr[i]\r\n } else {\r\n // 超出部分保持为'0'或分隔符\r\n currentDigits.value[i] = isNaN(maxStr[i]) ? maxStr[i] : '0'\r\n }\r\n }\r\n}\r\n\r\n// 监听 end 值变化,重新开始动画\r\nwatch(() => props.end, (newVal, oldVal) => {\r\n if (newVal !== oldVal) {\r\n // 当位数可能发生变化时,更新key强制重新渲染\r\n const newStr = formatNumber(newVal)\r\n const oldStr = formatNumber(oldVal)\r\n if (newStr.length !== oldStr.length) {\r\n digitKey.value += 1\r\n nextTick(() => {\r\n startAnimation()\r\n })\r\n } else {\r\n startAnimation()\r\n }\r\n }\r\n})\r\n\r\n// 组件挂载时开始动画\r\nonMounted(() => {\r\n if (props.autoplay) {\r\n // 检查初始值和目标值位数是否不同,如果不同则更新key\r\n const startStr = startNumberString.value\r\n const endStr = targetNumberString.value\r\n if (startStr.length !== endStr.length) {\r\n digitKey.value += 1\r\n }\r\n \r\n nextTick(() => {\r\n startAnimation()\r\n })\r\n }\r\n})\r\n\r\n// 提供外部调用方法\r\ndefineExpose({\r\n startAnimation\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.vtk-count {\r\n display: inline-block;\r\n}\r\n\r\n.count-display {\r\n display: flex;\r\n align-items: center;\r\n font-family: 'Roboto Mono', monospace;\r\n font-size: 24px;\r\n font-weight: bold;\r\n}\r\n\r\n.digits-container {\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n.digit-wrapper {\r\n position: relative;\r\n width: 1em;\r\n height: 1em;\r\n overflow: hidden;\r\n text-align: center;\r\n margin: 0 1px;\r\n}\r\n\r\n.digit-wrapper.digit-separator {\r\n width: auto;\r\n animation: none;\r\n}\r\n\r\n.digit-scroll {\r\n position: relative;\r\n height: 100%;\r\n}\r\n\r\n.digit-item {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.separator {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: 100%;\r\n font-weight: normal;\r\n}\r\n\r\n.prefix, .suffix {\r\n font-size: 0.8em;\r\n align-self: flex-end;\r\n margin-bottom: 0.1em;\r\n}\r\n\r\n.prefix {\r\n margin-right: 4px;\r\n}\r\n\r\n.suffix {\r\n margin-left: 4px;\r\n}\r\n\r\n/* 响应式设计 */\r\n@media (max-width: 768px) {\r\n .count-display {\r\n font-size: 20px;\r\n }\r\n}\r\n\r\n@media (max-width: 480px) {\r\n .count-display {\r\n font-size: 18px;\r\n }\r\n}\r\n</style>","<template>\r\n <div class=\"vtk-date-range-picker\">\r\n <VMenu\r\n v-model=\"menu\"\r\n :close-on-content-click=\"false\"\r\n transition=\"scale-transition\"\r\n offset-y\r\n min-width=\"auto\"\r\n eager\r\n >\r\n <template #activator=\"{ props: activatorProps }\">\r\n <VTextField\r\n v-bind=\"{ ...activatorProps, ...textFieldProps }\"\r\n v-model=\"displayValue\"\r\n :placeholder=\"placeholder\"\r\n :disabled=\"disabled\"\r\n readonly\r\n clearable\r\n density=\"compact\"\r\n variant=\"outlined\"\r\n @click:clear=\"clearValue\"\r\n >\r\n <template #prepend-inner>\r\n <VIcon size=\"small\">mdi-calendar</VIcon>\r\n </template>\r\n </VTextField>\r\n </template>\r\n \r\n <VCard style=\"width: 650px;\">\r\n <VCardText class=\"pa-0\">\r\n <div class=\"date-picker-container\">\r\n <VDatePicker\r\n v-model=\"startDateRange\"\r\n hide-header\r\n :min=\"minDate\"\r\n :max=\"maxDate\"\r\n :show-current=\"showCurrent\"\r\n @update:model-value=\"onStartDateChange\"\r\n class=\"date-picker-item\"\r\n />\r\n <VDatePicker\r\n v-model=\"endDateRange\"\r\n hide-header\r\n :min=\"minDate\"\r\n :max=\"maxDate\"\r\n :show-current=\"showCurrent\"\r\n @update:model-value=\"onEndDateChange\"\r\n class=\"date-picker-item\"\r\n />\r\n </div>\r\n </VCardText>\r\n \r\n <VDivider></VDivider>\r\n \r\n <VCardActions>\r\n <VSpacer></VSpacer>\r\n <VBtn text @click=\"cancel\">取消</VBtn>\r\n <VBtn color=\"primary\" variant=\"tonal\" @click=\"confirm\">确定</VBtn>\r\n </VCardActions>\r\n </VCard>\r\n </VMenu>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, computed, watch, useAttrs } from 'vue';\r\n\r\n// 定义组件名称\r\ndefineOptions({\r\n name: \"VtkDatePicker\",\r\n inheritAttrs: false,\r\n});\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n // v-model绑定值\r\n modelValue: {\r\n type: [Array, String],\r\n default: () => []\r\n },\r\n // 占位符\r\n placeholder: {\r\n type: String,\r\n default: '请选择日期范围'\r\n },\r\n // 禁用状态\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 最小日期\r\n min: {\r\n type: String,\r\n default: undefined\r\n },\r\n // 最大日期\r\n max: {\r\n type: String,\r\n default: undefined\r\n },\r\n // 是否显示当前日期\r\n showCurrent: {\r\n type: [Boolean, String],\r\n default: true\r\n },\r\n // 显示格式\r\n format: {\r\n type: String,\r\n default: 'YYYY-MM-DD'\r\n },\r\n // 分隔符\r\n separator: {\r\n type: String,\r\n default: ' 至 '\r\n }\r\n});\r\n\r\n// 定义emit事件\r\nconst emit = defineEmits(['update:modelValue', 'change']);\r\n\r\n// 获取透传属性\r\nconst attrs = useAttrs();\r\n\r\n// 菜单显示控制\r\nconst menu = ref(false);\r\n\r\n// 日期范围值\r\nconst dateRange = ref([]);\r\n\r\n// 为了横向排列,需要分别管理开始和结束日期选择器的值\r\nconst startDateRange = ref(null);\r\nconst endDateRange = ref(null);\r\n\r\n\r\n// 显示值\r\nconst displayValue = computed(() => {\r\n if (!dateRange.value || dateRange.value.length === 0) {\r\n return '';\r\n }\r\n \r\n if (dateRange.value.length === 1) {\r\n return formatDate(dateRange.value[0]);\r\n }\r\n \r\n return `${formatDate(dateRange.value[0])}${props.separator}${formatDate(dateRange.value[1])}`;\r\n});\r\n\r\n// 文本框属性\r\nconst textFieldProps = computed(() => {\r\n // 排除我们自己使用的属性\r\n const { \r\n modelValue, \r\n placeholder, \r\n disabled, \r\n min, \r\n max, \r\n showCurrent, \r\n format,\r\n separator,\r\n ...rest \r\n } = attrs;\r\n \r\n return rest;\r\n});\r\n\r\n// 格式化日期\r\nconst formatDate = (date) => {\r\n if (!date) return '';\r\n \r\n // 如果是字符串直接返回\r\n if (typeof date === 'string') {\r\n return date;\r\n }\r\n \r\n // 如果是 Date 对象\r\n if (date instanceof Date) {\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n return `${year}-${month}-${day}`;\r\n }\r\n \r\n return date;\r\n};\r\n\r\n// 最小日期\r\nconst minDate = computed(() => props.min);\r\n\r\n// 最大日期\r\nconst maxDate = computed(() => props.max);\r\n\r\n// 监听外部modelValue变化\r\nwatch(\r\n () => props.modelValue,\r\n (newValue) => {\r\n if (Array.isArray(newValue) && newValue.length > 0) {\r\n dateRange.value = [...newValue];\r\n // 同步到单独的日期选择器\r\n if (newValue[0]) startDateRange.value = newValue[0];\r\n if (newValue[1]) endDateRange.value = newValue[1];\r\n } else if (typeof newValue === 'string' && newValue) {\r\n // 处理字符串形式的日期范围,如 \"2023-01-01 至 2023-01-31\"\r\n const dates = newValue.split(props.separator);\r\n if (dates.length === 2) {\r\n dateRange.value = [dates[0].trim(), dates[1].trim()];\r\n startDateRange.value = dates[0].trim();\r\n endDateRange.value = dates[1].trim();\r\n } else {\r\n dateRange.value = [];\r\n startDateRange.value = null;\r\n endDateRange.value = null;\r\n }\r\n } else {\r\n dateRange.value = [];\r\n startDateRange.value = null;\r\n endDateRange.value = null;\r\n }\r\n },\r\n { immediate: true }\r\n);\r\n\r\n\r\n// 开始日期变化处理\r\nconst onStartDateChange = (value) => {\r\n // 更新日期范围的第一个值\r\n if (value) {\r\n dateRange.value = [value, dateRange.value[1] || null];\r\n } else {\r\n // 如果开始日期被清除,清除整个范围或只清除开始日期\r\n if (dateRange.value.length > 0) {\r\n dateRange.value = [null, dateRange.value[1] || null];\r\n }\r\n }\r\n};\r\n\r\n// 结束日期变化处理\r\nconst onEndDateChange = (value) => {\r\n // 更新日期范围的第二个值\r\n if (value) {\r\n dateRange.value = [dateRange.value[0] || null, value];\r\n } else {\r\n // 如果结束日期被清除,只清除结束日期\r\n if (dateRange.value.length > 1) {\r\n dateRange.value = [dateRange.value[0] || null, null];\r\n }\r\n }\r\n};\r\n\r\n// 清除值\r\nconst clearValue = () => {\r\n dateRange.value = [];\r\n startDateRange.value = null;\r\n endDateRange.value = null;\r\n emit('update:modelValue', []);\r\n emit('change', []);\r\n menu.value = false;\r\n};\r\n\r\n// 取消\r\nconst cancel = () => {\r\n // 恢复到原始值\r\n if (Array.isArray(props.modelValue)) {\r\n dateRange.value = [...props.modelValue];\r\n if (props.modelValue[0]) startDateRange.value = props.modelValue[0];\r\n if (props.modelValue[1]) endDateRange.value = props.modelValue[1];\r\n } else {\r\n dateRange.value = [];\r\n startDateRange.value = null;\r\n endDateRange.value = null;\r\n }\r\n menu.value = false;\r\n};\r\n\r\n// 确认\r\nconst confirm = () => {\r\n // 确保日期按顺序排列\r\n let sortedRange = [...dateRange.value].filter(date => date !== null);\r\n if (sortedRange.length === 2) {\r\n const date1 = new Date(sortedRange[0]);\r\n const date2 = new Date(sortedRange[1]);\r\n if (date1 > date2) {\r\n sortedRange = [sortedRange[1], sortedRange[0]];\r\n }\r\n } else if (sortedRange.length === 1) {\r\n // 如果只有一个日期,复制为范围\r\n sortedRange = [sortedRange[0], sortedRange[0]];\r\n }\r\n \r\n emit('update:modelValue', sortedRange);\r\n emit('change', sortedRange);\r\n menu.value = false;\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.vtk-date-range-picker {\r\n width: 100%;\r\n}\r\n\r\n.date-picker-container {\r\n display: flex;\r\n flex-direction: row;\r\n gap: 0;\r\n}\r\n\r\n.date-picker-item {\r\n flex: 1;\r\n max-width: 50%;\r\n}\r\n\r\n.date-picker-item:first-child {\r\n border-right: 1px solid rgba(0, 0, 0, 0.12);\r\n}\r\n\r\n:deep(.v-picker) {\r\n border-radius: 0;\r\n}\r\n\r\n:deep(.v-date-picker-month__day--adjacent) {\r\n opacity: 0.5;\r\n}\r\n\r\n:deep(.v-date-picker-title) {\r\n display: none;\r\n}\r\n</style>","<script setup>\r\nimport { ref, computed, reactive, onMounted, getCurrentInstance, watch, nextTick } from \"vue\";\r\nconst { proxy } = getCurrentInstance();\r\nconst user = JSON.parse(proxy.$vtk.storage.get(\"user\"));\r\nconst pause = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\n// 定义 props - 控制是否支持多选\r\nconst props = defineProps({\r\n multiple: {\r\n type: Boolean,\r\n default: false // 默认单选\r\n }\r\n});\r\n\r\n// 定义 emits\r\nconst emit = defineEmits(['selected']);\r\n\r\n// 定义响应式数据\r\nconst dialog = ref(false);\r\n\r\n\r\n// 地区列表\r\nconst areaData = ref([]);\r\nconst areaSelectedData = ref([]);\r\nconst areaActivatedData = ref([]);\r\n\r\nwatch(areaActivatedData, (newVal, oldVal) => {\r\n // 检查数组非空且有有效数据\r\n if (newVal && newVal.length > 0 && newVal[0]?.areaCode) {\r\n getDeptList(newVal);\r\n }\r\n}, { deep: true });\r\n\r\nwatch(areaSelectedData, (newVal, oldVal) => {\r\n // 检查数组非空且有有效数据\r\n if (newVal && newVal.length > 0 && newVal[0]?.areaCode) {\r\n getDeptList(newVal);\r\n }\r\n}, { deep: true });\r\n\r\n// 获取地区列表\r\nconst getAreaList = () => {\r\n if (user && user.areacode) {\r\n proxy.$vtk.request.getForm(`/dict/area/show/${user.areacode}`).then((res) => {\r\n if (res && res.data) {\r\n areaData.value = [{\r\n areaCode: res.data.areaCode,\r\n areaName: res.data.areaName,\r\n children: []\r\n }];\r\n }\r\n });\r\n }\r\n};\r\n\r\n// 获取下级地区列表\r\nconst getAreaNextList = async (item) => {\r\n await pause(300);\r\n const parentCode = item.areaCode;\r\n proxy.$vtk.request.getForm(`/dict/area/next/${parentCode}`).then((res) => {\r\n if (res && res.data) {\r\n res.data.forEach((it) => {\r\n it.areaLeve < 12 && (it.children = []);\r\n item.children.push(it);\r\n });\r\n }\r\n });\r\n};\r\n\r\n// 部门列表\r\nconst deptData = ref([]);\r\nconst deptSelectedData = ref([]);\r\nconst deptActivatedData = ref([]);\r\n\r\nwatch(deptSelectedData, (newVal, oldVal) => {\r\n // 检查数组非空且有有效数据\r\n if (newVal && newVal.length > 0 && newVal[0]?.id) {\r\n getPersonList(newVal);\r\n }\r\n}, { deep: true });\r\n\r\nwatch(deptActivatedData, (newVal, oldVal) => {\r\n // 检查数组非空且有有效数据\r\n if (newVal && newVal.length > 0 && newVal[0]?.id) {\r\n getPersonList(newVal);\r\n }\r\n}, { deep: true });\r\n\r\n// 点击叶子节点时调用的方法\r\nconst getDeptList = (node) => {\r\n const selectAreaCode = node[0].areaCode;\r\n const params = { codex: { area: selectAreaCode, type: \"0\" } };\r\n deptData.value = [];\r\n proxy.$vtk.request.postJson('/bizp/supported/dept/list', params).then((res) => {\r\n res.data.forEach((it) => {\r\n it.children = [];\r\n deptData.value.push(it);\r\n });\r\n });\r\n};\r\n\r\nconst getDepNextList = async (item) => {\r\n await pause(300);\r\n const selectAreaCode = item.areaCode;\r\n const selectPid = item.id;\r\n const params = { codex: { area: selectAreaCode, pid: selectPid } };\r\n proxy.$vtk.request.postJson('/bizp/supported/dept/list', params).then((res) => {\r\n if (res && res.data) {\r\n res.data.forEach((it) => {\r\n it.children = [];\r\n item.children.push(it);\r\n });\r\n }\r\n });\r\n};\r\n\r\n// 人员列表\r\nconst personData = ref([]);\r\nconst selectedPersonData = ref([]);\r\n// 全局已选人员列表(跨部门保存,用于去重和持久化选中状态)\r\nconst allSelectedPersons = ref([]);\r\n// 标记是否正在恢复选中状态(避免触发 watch 循环)\r\nconst isRestoringSelection = ref(false);\r\n\r\n// 已选中的人员列表(用于右侧显示)- 去重后的列表\r\nconst selectedPersonList = computed(() => {\r\n // 使用 Map 去重,key 为人员 id\r\n const uniqueMap = new Map();\r\n allSelectedPersons.value.forEach(person => {\r\n if (person && person.id) {\r\n uniqueMap.set(person.id, person);\r\n }\r\n });\r\n\r\n return Array.from(uniqueMap.values());\r\n});\r\n\r\n// 监听当前部门选中人员的变化\r\nwatch(selectedPersonData, (newVal, oldVal) => {\r\n // 如果正在恢复选中状态,不处理\r\n if (isRestoringSelection.value) {\r\n return;\r\n }\r\n\r\n // 单选模式:直接替换全局列表\r\n if (!props.multiple) {\r\n if (newVal && newVal.length > 0) {\r\n // 单选模式下只保留最新选中的一个\r\n allSelectedPersons.value = [newVal[0]];\r\n } else {\r\n // 取消选中时清空\r\n allSelectedPersons.value = [];\r\n }\r\n return;\r\n }\r\n\r\n // 多选模式:累加到全局列表\r\n // 处理新选中的人员\r\n if (newVal && newVal.length > 0) {\r\n newVal.forEach(person => {\r\n const exists = allSelectedPersons.value.some(p => p.id === person.id);\r\n if (!exists) {\r\n allSelectedPersons.value.push(person);\r\n }\r\n });\r\n }\r\n\r\n // 处理取消选中的人员\r\n if (oldVal && oldVal.length > 0) {\r\n oldVal.forEach(oldPerson => {\r\n const stillSelected = newVal?.some(p => p.id === oldPerson.id);\r\n if (!stillSelected) {\r\n // 从全局列表中移除\r\n const index = allSelectedPersons.value.findIndex(p => p.id === oldPerson.id);\r\n if (index > -1) {\r\n allSelectedPersons.value.splice(index, 1);\r\n }\r\n }\r\n });\r\n }\r\n}, { deep: true });\r\n\r\n// 监听部门切换,同步选中状态\r\nwatch(personData, async (newPersonData) => {\r\n if (!newPersonData || newPersonData.length === 0) {\r\n isRestoringSelection.value = true;\r\n selectedPersonData.value = [];\r\n await nextTick();\r\n isRestoringSelection.value = false;\r\n return;\r\n }\r\n\r\n // 等待 DOM 更新\r\n await nextTick();\r\n\r\n // 标记正在恢复选中状态\r\n isRestoringSelection.value = true;\r\n\r\n // 当人员列表更新时,恢复之前选中的状态\r\n const currentSelected = [];\r\n newPersonData.forEach(person => {\r\n const isSelected = allSelectedPersons.value.some(p => p.id === person.id);\r\n if (isSelected) {\r\n currentSelected.push(person);\r\n }\r\n });\r\n\r\n selectedPersonData.value = currentSelected;\r\n\r\n // 等待状态更新完成\r\n await nextTick();\r\n isRestoringSelection.value = false;\r\n}, { deep: true });\r\n\r\n// 移除已选中的人员\r\nconst removeSelectedPerson = (personId) => {\r\n // 从全局列表中移除\r\n const globalIndex = allSelectedPersons.value.findIndex(person => person.id === personId);\r\n if (globalIndex > -1) {\r\n allSelectedPersons.value.splice(globalIndex, 1);\r\n }\r\n\r\n // 从当前显示的选中列表中移除\r\n const currentIndex = selectedPersonData.value.findIndex(person => person.id === personId);\r\n if (currentIndex > -1) {\r\n selectedPersonData.value.splice(currentIndex, 1);\r\n }\r\n};\r\n\r\n\r\n// 点击叶子节点时调用的方法\r\n// \r\nconst getPersonList = (node) => {\r\n const selectAreaID = node[0].id;\r\n const params = { codex: { dept: selectAreaID } };\r\n\r\n proxy.$vtk.request.postJson('/bizp/supported/user/list', params).then((res) => {\r\n if (res && res.meta.success && res.data.length > 0) {\r\n personData.value = res.data\r\n } else {\r\n personData.value = null\r\n }\r\n });\r\n};\r\nconst add = () => {\r\n dialog.value = true;\r\n};\r\n\r\nconst close = () => {\r\n // 先设置标记,避免触发 watch\r\n isRestoringSelection.value = true;\r\n\r\n // 关闭对话框\r\n dialog.value = false;\r\n\r\n // 清空选中状态\r\n selectedPersonData.value = [];\r\n allSelectedPersons.value = [];\r\n areaSelectedData.value = [];\r\n areaActivatedData.value = [];\r\n deptSelectedData.value = [];\r\n deptActivatedData.value = [];\r\n personData.value = [];\r\n deptData.value = [];\r\n\r\n // 重置标记\r\n nextTick(() => {\r\n isRestoringSelection.value = false;\r\n });\r\n};\r\n\r\n// 确认选择\r\nconst confirm = () => {\r\n // 返回选中的人员列表给父组件\r\n const selectedPersons = selectedPersonList.value;\r\n // 通过 emit 将选中的人员传递给父组件\r\n emit('selected', selectedPersons);\r\n close();\r\n};\r\n\r\nonMounted(() => {\r\n // 获取地区列表\r\n getAreaList();\r\n});\r\n\r\n// 使组件方法可以被父组件调用\r\ndefineExpose({\r\n close,\r\n add,\r\n});\r\n</script>\r\n\r\n<template>\r\n <v-dialog v-model=\"dialog\" persistent width=\"1000\">\r\n <v-card>\r\n <v-card-title class=\"d-flex align-center\">\r\n <span class=\"text-h6\">人员选择</span>\r\n <v-spacer></v-spacer>\r\n <v-btn class=\"g-no-shadow\" icon @click=\"close\" size=\"small\">\r\n <v-icon>mdi-close</v-icon>\r\n </v-btn>\r\n </v-card-title>\r\n <v-divider />\r\n <v-card-text class=\"pb-0 mb-0 pl-0 pr-0\" style=\"height: 600px;\">\r\n <v-row style=\"margin-top:-16px; height: 100%;\">\r\n <v-col md=\"3\" class=\"pr-0 \" style=\"border-right: 1px #ccc solid;height: 600px;\">\r\n <v-card-title class=\"text-center py-0 text-body-1 font-weight-bold \">\r\n <span class=\"mx-auto\">地区</span>\r\n </v-card-title>\r\n <v-sheet height=\"500\" style=\"overflow: auto\" class=\"mt-2 pl-2\">\r\n <v-treeview item-value=\"id\" item-title=\"areaName\" return-object :items=\"areaData\" density=\"compact\"\r\n color=\"primary\" item-props activatable v-model:selected=\"areaSelectedData\"\r\n v-model:activated=\"areaActivatedData\" :load-children=\"getAreaNextList\">\r\n <template v-slot:title=\"{ item }\">\r\n <span :title=\"item.areaName\">{{ item.areaName }}</span>\r\n </template>\r\n </v-treeview>\r\n </v-sheet>\r\n </v-col>\r\n <v-col md=\"3\" class=\"pr-0 pl-0\" style=\"border-right: 1px #ccc solid;height: 600px;\">\r\n <v-card-title class=\"text-center py-0 text-body-1 font-weight-bold \">\r\n <span class=\"mx-auto\">部门</span>\r\n </v-card-title>\r\n <v-sheet height=\"500\" style=\"overflow: auto\" class=\"mt-2 pl-2\">\r\n <v-treeview v-if=\"deptData && deptData.length > 0\" item-value=\"id\" item-title=\"name\" return-object :items=\"deptData\" density=\"compact\"\r\n color=\"primary\" item-props activatable v-model:selected=\"deptSelectedData\"\r\n v-model:activated=\"deptActivatedData\" :load-children=\"getDepNextList\">\r\n <template v-slot:title=\"{ item }\">\r\n <span :title=\"item.name\">{{ item.name }}</span>\r\n </template>\r\n </v-treeview>\r\n <div v-else class=\"text-center pt-4 d-flex flex-column align-center justify-center\">\r\n <v-icon size=\"64\" color=\"grey-lighten-2\" class=\"mb-4\">\r\n mdi-office-building-outline\r\n </v-icon>\r\n <div class=\"text-grey\">暂无</div>\r\n </div>\r\n </v-sheet>\r\n </v-col>\r\n <v-col md=\"3\" class=\"pr-0 pl-0\" style=\"border-right: 1px #ccc solid;height: 600px;\">\r\n <v-card-title class=\"text-center py-0 text-body-1 font-weight-bold \">\r\n <span class=\"mx-auto\">人员</span>\r\n </v-card-title>\r\n <v-sheet height=\"550\" style=\"overflow: auto;\" class=\"mt-2\">\r\n <v-treeview v-if=\"personData && personData.length > 0\"\r\n item-value=\"id\"\r\n item-title=\"username\"\r\n return-object\r\n :items=\"personData\"\r\n density=\"compact\"\r\n color=\"primary\"\r\n item-props\r\n selectable\r\n :select-strategy=\"multiple ? 'leaf' : 'single-leaf'\"\r\n v-model:selected=\"selectedPersonData\">\r\n <template v-slot:title=\"{ item }\">\r\n <div class=\"d-flex align-center\" :title=\"item.username\">\r\n <v-avatar size=\"24\" class=\"mr-2\">\r\n <v-img v-if=\"item.avatar\" :src=\"item.avatar\"></v-img>\r\n <v-icon v-else size=\"20\">mdi-account-circle</v-icon>\r\n </v-avatar>\r\n <span>{{ item.username }}</span>\r\n </div>\r\n </template>\r\n </v-treeview>\r\n <div v-else class=\"text-center pt-4 d-flex flex-column align-center justify-center\">\r\n <v-icon size=\"64\" color=\"grey-lighten-2\" class=\"mb-4\">\r\n mdi-account-group\r\n </v-icon>\r\n <div class=\"text-grey\">暂无</div>\r\n </div>\r\n </v-sheet>\r\n </v-col>\r\n <v-col md=\"3\" class=\"pr-0 pl-0\" style=\"border-right: 1px #ccc solid;height: 600px;\">\r\n <v-card-title class=\"text-center py-0 text-body-1 font-weight-bold \">\r\n <span class=\"mx-auto\">已选中人员 ({{ selectedPersonList.length }})</span>\r\n </v-card-title>\r\n <v-sheet height=\"550\" style=\"overflow: auto\" class=\"mt-2 px-2\">\r\n <v-list v-if=\"selectedPersonList.length > 0\" density=\"compact\">\r\n <v-list-item\r\n v-for=\"person in selectedPersonList\"\r\n :key=\"person.id\"\r\n :title=\"person.username\"\r\n class=\"px-2 mb-1 mr-2\"\r\n rounded=\"lg\"\r\n color=\"primary\"\r\n variant=\"tonal\">\r\n <template v-slot:prepend>\r\n <v-avatar size=\"32\">\r\n <v-img v-if=\"person.avatar\" :src=\"person.avatar\"></v-img>\r\n <v-icon v-else>mdi-account-circle</v-icon>\r\n </v-avatar>\r\n </template>\r\n <template v-slot:append>\r\n <v-btn\r\n icon\r\n size=\"x-small\"\r\n variant=\"text\"\r\n @click=\"removeSelectedPerson(person.id)\">\r\n <v-icon size=\"16\">mdi-close</v-icon>\r\n </v-btn>\r\n </template>\r\n </v-list-item>\r\n </v-list>\r\n <div v-else class=\"text-center pt-4 d-flex flex-column align-center justify-center\">\r\n <v-icon size=\"64\" color=\"grey-lighten-2\" class=\"mb-4\">\r\n mdi-account\r\n </v-icon>\r\n <div class=\"text-grey\">暂无选中</div>\r\n </div>\r\n </v-sheet>\r\n </v-col>\r\n </v-row>\r\n </v-card-text>\r\n <v-divider />\r\n <v-card-actions>\r\n <v-spacer></v-spacer>\r\n <v-btn color=\"darken-1\" text @click=\"close\">取消</v-btn>\r\n <v-btn color=\"blue darken-1\" text @click=\"confirm\">确定</v-btn>\r\n </v-card-actions>\r\n </v-card>\r\n </v-dialog>\r\n</template>\r\n\r\n<style scoped>\r\n:deep() .v-sheet[style*=\"overflow: auto\"] {\r\n &::-webkit-scrollbar {\r\n width: 5px;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background: #ccc;\r\n border-radius: 4px;\r\n }\r\n}\r\n</style>","<!-- 空页面 -->\r\n<template>\r\n <v-empty-state\r\n :headline=\"headline\"\r\n :title=\"title\"\r\n :text=\"text\"\r\n :image=\"image\"\r\n :icon=\"icon\"\r\n :rounded=\"rounded\"\r\n :elevation=\"elevation\"\r\n >\r\n <!-- 图像插槽 -->\r\n <template v-if=\"$slots.media\" #media>\r\n <slot name=\"media\"></slot>\r\n </template>\r\n\r\n <!-- 标题插槽 -->\r\n <template v-if=\"$slots.title\" #title>\r\n <slot name=\"title\"></slot>\r\n </template>\r\n\r\n <!-- 文本插槽 -->\r\n <template v-if=\"$slots.text\" #text>\r\n <slot name=\"text\"></slot>\r\n </template>\r\n\r\n <!-- 操作按钮插槽 -->\r\n <template v-if=\"$slots.actions\" #actions>\r\n <slot name=\"actions\"></slot>\r\n </template>\r\n\r\n <!-- 底部插槽 -->\r\n <template v-if=\"$slots.bottom\" #bottom>\r\n <slot name=\"bottom\"></slot>\r\n </template>\r\n </v-empty-state>\r\n</template>\r\n\r\n<script setup>\r\n// 定义组件名称\r\ndefineOptions({\r\n name: \"VtkEmpty\",\r\n inheritAttrs: false,\r\n});\r\n\r\n// 定义 props\r\nconst props = defineProps({\r\n // 标题\r\n title: {\r\n type: String,\r\n default: ''\r\n },\r\n // 副标题/文本\r\n text: {\r\n type: String,\r\n default: ''\r\n },\r\n // 头部文本(更大字体)\r\n headline: {\r\n type: String,\r\n default: ''\r\n },\r\n // 图标\r\n icon: {\r\n type: String,\r\n default: ''\r\n },\r\n // 图像\r\n image: {\r\n type: String,\r\n default: ''\r\n },\r\n // 圆角\r\n rounded: {\r\n type: [Boolean, String, Number],\r\n default: 'circle'\r\n },\r\n // 阴影\r\n elevation: {\r\n type: [Number, String],\r\n default: 0\r\n }\r\n});\r\n</script>\r\n\r\n<style scoped>\r\n/* 可以添加自定义样式 */\r\n:deep(.v-empty-state) {\r\n padding: 24px;\r\n}\r\n\r\n:deep(.v-empty-state__media) {\r\n margin-bottom: 16px;\r\n}\r\n\r\n:deep(.v-empty-state__headline) {\r\n margin-bottom: 8px;\r\n}\r\n\r\n:deep(.v-empty-state__title) {\r\n margin-bottom: 8px;\r\n}\r\n\r\n:deep(.v-empty-state__actions) {\r\n margin-top: 16px;\r\n}\r\n</style>","<!-- 悬浮按钮 -->\r\n<template>\r\n <transition name=\"slide-up\">\r\n <v-fab\r\n v-if=\"showFab\"\r\n :class=\"fabClass\"\r\n color=\"primary\"\r\n icon=\"mdi-arrow-up\"\r\n @click=\"scrollToTop\"\r\n ></v-fab>\r\n </transition>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, onMounted, onBeforeUnmount } from 'vue'\r\n\r\n// 定义组件名称\r\ndefineOptions({\r\n name: \"VtkFab\",\r\n inheritAttrs: false,\r\n});\r\n\r\n// 控制悬浮按钮显示状态\r\nconst showFab = ref(false)\r\n// 自定义类名用于样式调整\r\nconst fabClass = ref('scroll-to-top-fab')\r\n\r\n// 监听滚动事件\r\nconst handleScroll = () => {\r\n showFab.value = window.scrollY > 100\r\n}\r\n\r\n// 滚动到顶部\r\nconst scrollToTop = () => {\r\n window.scrollTo({\r\n top: 0,\r\n behavior: 'smooth'\r\n })\r\n}\r\n\r\n// 组件挂载时添加滚动监听\r\nonMounted(() => {\r\n window.addEventListener('scroll', handleScroll)\r\n})\r\n\r\n// 组件卸载前移除监听\r\nonBeforeUnmount(() => {\r\n window.removeEventListener('scroll', handleScroll)\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.scroll-to-top-fab {\r\n position: fixed;\r\n bottom: 24px;\r\n right: 24px;\r\n z-index: 1004;\r\n}\r\n\r\n/* 滑动动画 */\r\n.slide-up-enter-active {\r\n transition: all 0.2s ease-out;\r\n}\r\n\r\n.slide-up-leave-active {\r\n transition: all 0.2s ease-in;\r\n}\r\n\r\n.slide-up-enter-from {\r\n opacity: 0;\r\n transform: translateY(30px);\r\n}\r\n\r\n.slide-up-leave-to {\r\n opacity: 0;\r\n transform: translateY(30px);\r\n}\r\n</style>","<template>\r\n <div\r\n class=\"box\"\r\n :class=\"{\r\n 'form-item--vertical': top,\r\n 'form-item--horizontal': !top\r\n }\"\r\n style=\"position: relative\"\r\n >\r\n <!-- label 在上方 (top模式) -->\r\n <div\r\n v-if=\"label && top\"\r\n class=\"pb-2 text-left\"\r\n >\r\n <span v-if=\"must\" class=\"text-red mr-1\">*</span>\r\n <span>{{ label }}</span>\r\n </div>\r\n\r\n <!-- label 在左侧 (默认模式) -->\r\n <div\r\n v-if=\"label && !top\"\r\n :class=\"left ? '' : 'vtk-width-2'\"\r\n class=\"d-inline-block text-right\"\r\n :style=\"Tstyle\"\r\n style=\"min-width: 120px !important;vertical-align: top;padding-top: 11px;\"\r\n >\r\n <span v-if=\"must\" class=\"text-red\">*</span>\r\n <span>{{ label }}</span>\r\n </div>\r\n\r\n <!-- 输入框容器 (top模式) -->\r\n <div\r\n v-if=\"top\"\r\n :style=\"contentStyles\"\r\n >\r\n <slot></slot>\r\n </div>\r\n\r\n <!-- 输入框容器 (默认模式) -->\r\n <div\r\n v-if=\"!top\"\r\n class=\"d-inline-block vtk-width-7 \"\r\n style=\"min-width: 350px;\"\r\n >\r\n <slot></slot>\r\n </div>\r\n\r\n <!-- help提示 (仅left模式) -->\r\n <div\r\n v-if=\"left && help && !top\"\r\n class=\"box_help tips py-3 px-4\"\r\n style=\"width: calc(30% - 160px)\"\r\n >\r\n <p class=\"mb-2 font-weight-bold text-body-1\">{{ label }}</p>\r\n <span v-html=\"help\"></span>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed } from 'vue'\r\n\r\n// 定义组件名称和选项\r\ndefineOptions({\r\n name: \"VtkFormItem\",\r\n inheritAttrs: false,\r\n});\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n label: {\r\n type: String,\r\n default: null\r\n },\r\n must: {\r\n type: Boolean,\r\n default: false\r\n },\r\n left: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 标签在上方的垂直布局\r\n top: {\r\n type: Boolean,\r\n default: false\r\n },\r\n Tstyle: {\r\n type: String,\r\n default: null\r\n },\r\n help: {\r\n type: String,\r\n default: null\r\n },\r\n // 控制top模式下内容的最大宽度\r\n maxWidth: {\r\n type: [String, Number],\r\n default: '100%'\r\n }\r\n});\r\n\r\n// 处理maxWidth属性\r\nconst processedMaxWidth = computed(() => {\r\n if (typeof props.maxWidth === 'number') {\r\n return props.maxWidth + 'px';\r\n }\r\n return props.maxWidth;\r\n});\r\n\r\n// 内容样式(仅在top模式下应用maxWidth)\r\nconst contentStyles = computed(() => {\r\n const styles = {};\r\n\r\n // 在top模式下应用maxWidth\r\n if (props.top && props.maxWidth) {\r\n styles.maxWidth = processedMaxWidth.value;\r\n }\r\n\r\n return styles;\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.box:hover > .box_help {\r\n display: inline-block !important;\r\n border-top-right-radius: 24px;\r\n border-bottom-left-radius: 24px;\r\n}\r\n\r\n.box_help {\r\n display: none;\r\n}\r\n\r\n.tips {\r\n position: absolute;\r\n right: 8px;\r\n top: 0;\r\n border: 1px rgba(175, 175, 175, 0.341) solid;\r\n}\r\n\r\n.form-item--vertical {\r\n display: block;\r\n margin-bottom: 1rem;\r\n}\r\n\r\n.form-item--horizontal {\r\n display: block;\r\n margin-bottom: 0.5rem;\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"vtk-img-container\">\r\n <VCard \r\n :class=\"['vtk-img-card', { 'vtk-img-card--preview': preview }]\"\r\n @click=\"openPreview\"\r\n >\r\n <v-img \r\n v-bind=\"$attrs\" \r\n :src=\"srcWithToken\"\r\n class=\"vtk-img\"\r\n :aspect-ratio=\"aspectRatio\"\r\n cover\r\n >\r\n <template v-slot:placeholder>\r\n <div class=\"d-flex align-center justify-center fill-height\">\r\n <v-progress-circular indeterminate color=\"grey-lighten-1\"></v-progress-circular>\r\n </div>\r\n </template>\r\n </v-img>\r\n \r\n <!-- 图片标题和描述 -->\r\n <div class=\"vtk-img-info\" v-if=\"showTitle || showDescription\">\r\n <VCardTitle v-if=\"showTitle\" class=\"vtk-img-title text-subtitle-2 pa-2\">\r\n {{ title }}\r\n </VCardTitle>\r\n <v-card-subtitle v-if=\"showDescription\" class=\"vtk-img-description text-caption pa-2\">\r\n {{ description }}\r\n </v-card-subtitle>\r\n </div>\r\n </VCard>\r\n \r\n <!-- 使用 v-dialog 的图片预览 -->\r\n <VDialog \r\n v-model=\"showPreview\" \r\n max-width=\"90%\" \r\n fullscreen\r\n @click:outside=\"closePreview\"\r\n >\r\n <VCard class=\"image-viewer-card\">\r\n <v-toolbar dark color=\"primary\">\r\n <VBtn icon dark @click=\"closePreview\">\r\n <VIcon>mdi-close</VIcon>\r\n </VBtn>\r\n <v-toolbar-title>{{ currentImageTitle }}</v-toolbar-title>\r\n <VSpacer></VSpacer>\r\n <v-toolbar-items>\r\n <VBtn icon dark @click=\"rotateImage(-90)\">\r\n <VIcon>mdi-rotate-left</VIcon>\r\n </VBtn>\r\n <VBtn icon dark @click=\"rotateImage(90)\">\r\n <VIcon>mdi-rotate-right</VIcon>\r\n </VBtn>\r\n </v-toolbar-items>\r\n </v-toolbar>\r\n \r\n <div class=\"image-viewer-content\">\r\n <VBtn \r\n v-if=\"hasPrev\" \r\n icon \r\n class=\"nav-button prev-button\" \r\n @click=\"prevImage\"\r\n >\r\n <VIcon>mdi-chevron-left</VIcon>\r\n </VBtn>\r\n \r\n <div class=\"image-container\">\r\n <v-img\r\n :src=\"currentImageUrl\"\r\n class=\"viewer-image\"\r\n :style=\"{ transform: `rotate(${imageRotation}deg)` }\"\r\n />\r\n </div>\r\n \r\n <VBtn \r\n v-if=\"hasNext\" \r\n icon \r\n class=\"nav-button next-button\" \r\n @click=\"nextImage\"\r\n >\r\n <VIcon>mdi-chevron-right</VIcon>\r\n </VBtn>\r\n </div>\r\n \r\n <div class=\"image-info\">\r\n <p class=\"text-center\">{{ currentImageDescription }}</p>\r\n <p class=\"text-center text--secondary\">{{ currentIndex + 1 }} / {{ imageList.length }}</p>\r\n </div>\r\n </VCard>\r\n </VDialog>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, computed, watch } from 'vue';\r\n\r\ndefineOptions({\r\n name: 'VtkImg',\r\n inheritAttrs: true\r\n});\r\n\r\nconst props = defineProps({\r\n src: {\r\n type: String,\r\n default: null,\r\n },\r\n error: {\r\n type: String,\r\n default: new URL('../../assets/img/wxsq.png', import.meta.url).href,\r\n },\r\n preview: {\r\n type: Boolean,\r\n default: true\r\n },\r\n title: {\r\n type: String,\r\n default: ''\r\n },\r\n description: {\r\n type: String,\r\n default: ''\r\n },\r\n // 图片列表,用于导航功能\r\n imageList: {\r\n type: Array,\r\n default: () => []\r\n },\r\n // 当前图片索引\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 是否显示标题\r\n showTitle: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 是否显示描述\r\n showDescription: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 图片宽高比\r\n aspectRatio: {\r\n type: [String, Number],\r\n default: 16/9\r\n }\r\n});\r\n\r\n// 预览状态\r\nconst showPreview = ref(false);\r\n// 图片旋转角度\r\nconst imageRotation = ref(0);\r\n// 当前图片索引(预览模式下使用)\r\nconst currentIndex = ref(0);\r\n\r\n// 使用计算属性处理带token的URL\r\nconst srcWithToken = computed(() => {\r\n if (!props.src) return props.src;\r\n \r\n try {\r\n // 首先尝试使用 $vtk.storage\r\n if (window.$vtk && typeof window.$vtk.storage?.get === 'function') {\r\n const token = window.$vtk.storage.get('token');\r\n return token ? `${props.src}?stoken=${token}` : props.src;\r\n }\r\n // 如果 $vtk 不存在,尝试从 localStorage 获取 token\r\n else {\r\n const token = localStorage.getItem('token');\r\n return token ? `${props.src}?stoken=${token}` : props.src;\r\n }\r\n } catch (error) {\r\n // 发生错误时返回原始src\r\n console.warn('VtkImg: Failed to get token, using src without token', error);\r\n return props.src;\r\n }\r\n});\r\n\r\n// 当前预览图片的URL\r\nconst currentImageUrl = computed(() => {\r\n if (props.imageList.length > 0 && currentIndex.value < props.imageList.length) {\r\n const currentImage = props.imageList[currentIndex.value];\r\n if (currentImage && currentImage.url) {\r\n try {\r\n // 为图片列表中的图片也添加token\r\n if (window.$vtk && typeof window.$vtk.storage?.get === 'function') {\r\n const token = window.$vtk.storage.get('token');\r\n return token ? `${currentImage.url}?stoken=${token}` : currentImage.url;\r\n } else {\r\n const token = localStorage.getItem('token');\r\n return token ? `${currentImage.url}?stoken=${token}` : currentImage.url;\r\n }\r\n } catch (error) {\r\n return currentImage.url;\r\n }\r\n }\r\n }\r\n return srcWithToken.value;\r\n});\r\n\r\n// 当前图片标题\r\nconst currentImageTitle = computed(() => {\r\n if (props.imageList.length > 0 && currentIndex.value < props.imageList.length) {\r\n const currentImage = props.imageList[currentIndex.value];\r\n return currentImage?.title || '';\r\n }\r\n return props.title;\r\n});\r\n\r\n// 当前图片描述\r\nconst currentImageDescription = computed(() => {\r\n if (props.imageList.length > 0 && currentIndex.value < props.imageList.length) {\r\n const currentImage = props.imageList[currentIndex.value];\r\n return currentImage?.description || '';\r\n }\r\n return props.description;\r\n});\r\n\r\n// 是否有上一张图片\r\nconst hasPrev = computed(() => {\r\n return props.imageList.length > 1 && currentIndex.value > 0;\r\n});\r\n\r\n// 是否有下一张图片\r\nconst hasNext = computed(() => {\r\n return props.imageList.length > 1 && currentIndex.value < props.imageList.length - 1;\r\n});\r\n\r\n// 监听预览状态变化\r\nwatch(showPreview, (newVal) => {\r\n if (newVal) {\r\n // 打开预览时重置旋转角度和当前索引\r\n imageRotation.value = 0;\r\n currentIndex.value = props.index;\r\n }\r\n});\r\n\r\n// 打开预览\r\nconst openPreview = () => {\r\n if (props.preview) {\r\n showPreview.value = true;\r\n }\r\n};\r\n\r\n// 关闭预览\r\nconst closePreview = () => {\r\n showPreview.value = false;\r\n};\r\n\r\n// 上一张图片\r\nconst prevImage = () => {\r\n if (hasPrev.value) {\r\n currentIndex.value--;\r\n imageRotation.value = 0; // 切换图片时重置旋转\r\n }\r\n};\r\n\r\n// 下一张图片\r\nconst nextImage = () => {\r\n if (hasNext.value) {\r\n currentIndex.value++;\r\n imageRotation.value = 0; // 切换图片时重置旋转\r\n }\r\n};\r\n\r\n// 旋转图片\r\nconst rotateImage = (degrees) => {\r\n imageRotation.value += degrees;\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.vtk-img-container {\r\n position: relative;\r\n display: inline-block;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.vtk-img-card {\r\n height: 100%;\r\n}\r\n\r\n.vtk-img-card--preview {\r\n cursor: pointer;\r\n transition: transform 0.2s ease-in-out;\r\n}\r\n\r\n.vtk-img-card--preview:hover {\r\n transform: translateY(-5px);\r\n}\r\n\r\n.vtk-img {\r\n width: 100%;\r\n}\r\n\r\n.vtk-img-info {\r\n padding: 0;\r\n}\r\n\r\n.vtk-img-title {\r\n word-break: break-word;\r\n}\r\n\r\n.vtk-img-description {\r\n word-break: break-word;\r\n}\r\n\r\n/* 图片查看器样式 */\r\n.image-viewer-card {\r\n background-color: rgba(0, 0, 0, 0.9);\r\n color: white;\r\n}\r\n\r\n.image-viewer-content {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: calc(100vh - 150px);\r\n position: relative;\r\n}\r\n\r\n.image-container {\r\n flex: 1;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n overflow: hidden;\r\n}\r\n\r\n.viewer-image {\r\n max-width: 90%;\r\n max-height: 80vh;\r\n transition: transform 0.3s ease;\r\n}\r\n\r\n.nav-button {\r\n position: absolute;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n z-index: 10;\r\n background-color: rgba(0, 0, 0, 0.5);\r\n color: white;\r\n width: 50px;\r\n height: 50px;\r\n}\r\n\r\n.prev-button {\r\n left: 20px;\r\n}\r\n\r\n.next-button {\r\n right: 20px;\r\n}\r\n\r\n.image-info {\r\n padding: 20px;\r\n background-color: rgba(0, 0, 0, 0.7);\r\n}\r\n\r\n.image-info p {\r\n margin: 5px 0;\r\n}\r\n\r\n:deep(.v-img__img) {\r\n background: v-bind('props.error') no-repeat center;\r\n background-size: cover;\r\n}\r\n\r\n:deep(.v-img__placeholder) {\r\n filter: blur(0px);\r\n}\r\n</style>","<template>\r\n <div class=\"m_pagination\">\r\n <VRow v-if=\"pageDatas.rowCount > 0\" class=\"pagination box\" align=\"center\">\r\n <span class=\"page-total d-none d-md-flex align-center\">共{{ pageDatas.rowCount }}条</span>\r\n <VSelect\r\n v-model=\"pagination.limit\"\r\n :items=\"pageSizeObjs\"\r\n variant=\"solo\"\r\n density=\"compact\"\r\n :menu-props=\"{ offsetY: true }\"\r\n hide-details\r\n class=\"page-select ml-2 d-none d-md-flex\"\r\n @update:model-value=\"pageSizeChange()\"\r\n />\r\n <span class=\"my-2\">\r\n <v-pagination\r\n v-model=\"pageDatas.pageno\"\r\n :total-visible=\"5\"\r\n :length=\"pageDatas.pageCount\"\r\n size=\"small\"\r\n @update:model-value=\"pageChange()\"\r\n />\r\n </span>\r\n <span class=\"page-total ml-3 d-none d-md-flex align-center\">到</span>\r\n <VTextField\r\n v-model=\"pagination.pageno\"\r\n variant=\"solo\"\r\n density=\"compact\"\r\n hide-details\r\n class=\"page-go ml-2 d-none d-md-flex\"\r\n @keyup.enter=\"toPage()\"\r\n />\r\n <span class=\"page-total ml-2 d-none d-md-flex align-center\">页</span>\r\n </VRow>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, reactive, computed, watch, onMounted } from 'vue';\r\n\r\nconst props = defineProps({\r\n pageData: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n pageSizes: {\r\n type: Array,\r\n default: () => [10, 20, 30]\r\n }\r\n});\r\n\r\nconst emit = defineEmits(['pageChange']);\r\n\r\nconst pagination = reactive({\r\n pageno: 1,\r\n limit: 10\r\n});\r\n\r\nconst pageSizeObjs = ref([]);\r\nconst pageDatas = ref({ ...props.pageData });\r\n\r\nconst paginationChange = computed(() => pageDatas.value.pageno);\r\n\r\nwatch(paginationChange, () => {\r\n pagination.pageno = pageDatas.value.pageno;\r\n});\r\n\r\nwatch(() => props.pageData, (newVal) => {\r\n pageDatas.value = { ...newVal };\r\n if (newVal.rowCount < 1 && newVal.rows > 0) {\r\n pageDatas.value.pageno = newVal.pageno - 1;\r\n pageChange();\r\n }\r\n}, { deep: true });\r\n\r\nonMounted(() => {\r\n pageSizeFormat();\r\n});\r\n\r\nconst toPage = () => {\r\n const re = /^[0-9]+$/;\r\n if (re.test(pagination.pageno) && pagination.pageno <= pageDatas.value.pageCount) {\r\n pageDatas.value.pageno = parseInt(pagination.pageno);\r\n pageChange();\r\n } else {\r\n pagination.pageno = pageDatas.value.pageno;\r\n }\r\n};\r\n\r\nconst pageSizeChange = () => {\r\n pageDatas.value.pageCount = 1;\r\n pageChange();\r\n};\r\n\r\nconst pageSizeFormat = () => {\r\n const temp = props.pageSizes;\r\n temp.forEach((value) => {\r\n const obj = {\r\n title: value + \"条/页\",\r\n value: value\r\n };\r\n pageSizeObjs.value.push(obj);\r\n });\r\n pagination.limit = temp[0];\r\n};\r\n\r\nconst pageChange = () => {\r\n const page = {\r\n pageno: pageDatas.value.pageno,\r\n limit: pagination.limit\r\n };\r\n emit('pageChange', page);\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.mt-1 {\r\n margin-top: 11px !important;\r\n}\r\n.my-5 {\r\n margin-top: 20px !important;\r\n margin-bottom: 20px !important;\r\n}\r\n.m_pagination {\r\n width: 100%;\r\n min-height: 52px;\r\n display: flex;\r\n align-items: center;\r\n .box {\r\n position: absolute;\r\n right: 32px;\r\n }\r\n}\r\n.page-total {\r\n display: flex;\r\n align-items: center;\r\n height: 36px;\r\n font-size: 13px;\r\n padding-top: 4px;\r\n}\r\n.page-select {\r\n padding-top: 4px;\r\n max-width: 115px;\r\n :deep(.v-input__control) {\r\n min-height: 36px !important;\r\n height: 36px !important;\r\n }\r\n :deep(.v-field) {\r\n height: 36px !important;\r\n font-size: 13px !important;\r\n }\r\n :deep(.v-field__input) {\r\n padding-top: 6px !important;\r\n padding-bottom: 6px !important;\r\n min-height: 36px !important;\r\n }\r\n}\r\n.page-go {\r\n max-width: 75px;\r\n :deep(.v-input__control) {\r\n min-height: 36px !important;\r\n height: 36px !important;\r\n }\r\n :deep(.v-field) {\r\n height: 36px !important;\r\n font-size: 13px !important;\r\n }\r\n :deep(.v-field__input) {\r\n padding-top: 6px !important;\r\n padding-bottom: 6px !important;\r\n min-height: 36px !important;\r\n }\r\n}\r\n\r\n// 分页按钮缩小\r\n.my-2 {\r\n :deep(.v-pagination__item),\r\n :deep(.v-pagination__prev),\r\n :deep(.v-pagination__next) {\r\n min-width: 32px !important;\r\n height: 36px !important;\r\n font-size: 13px !important;\r\n }\r\n}\r\n</style>","<template>\r\n <div class=\"vtk-pdf-container\">\r\n <VCard \r\n :class=\"['vtk-pdf-card', { 'vtk-pdf-card--preview': preview }]\"\r\n @click=\"openPreview\"\r\n >\r\n <!-- PDF封面或默认图标 -->\r\n <div class=\"vtk-pdf-cover\" :style=\"{ aspectRatio: aspectRatio }\">\r\n <VIcon size=\"48\" color=\"red\">mdi-file-pdf-box</VIcon>\r\n <div class=\"vtk-pdf-label\">PDF</div>\r\n </div>\r\n \r\n <!-- PDF标题和描述 -->\r\n <div class=\"vtk-pdf-info\" v-if=\"showTitle || showDescription\">\r\n <VCardTitle v-if=\"showTitle\" class=\"vtk-pdf-title text-subtitle-2 pa-2\">\r\n {{ title }}\r\n </VCardTitle>\r\n <v-card-subtitle v-if=\"showDescription\" class=\"vtk-pdf-description text-caption pa-2\">\r\n {{ description }}\r\n </v-card-subtitle>\r\n </div>\r\n </VCard>\r\n \r\n <!-- 使用 v-dialog 的PDF预览 -->\r\n <VDialog \r\n v-model=\"showPreview\" \r\n max-width=\"90%\" \r\n fullscreen\r\n @click:outside=\"closePreview\"\r\n >\r\n <VCard class=\"pdf-viewer-card\">\r\n <v-toolbar dark color=\"red darken-1\">\r\n <VBtn icon dark @click=\"closePreview\">\r\n <VIcon>mdi-close</VIcon>\r\n </VBtn>\r\n <v-toolbar-title>{{ title }}</v-toolbar-title>\r\n <VSpacer></VSpacer>\r\n <v-toolbar-items>\r\n <VBtn icon dark @click=\"downloadPdf\">\r\n <VIcon>mdi-download</VIcon>\r\n </VBtn>\r\n </v-toolbar-items>\r\n </v-toolbar>\r\n \r\n <div class=\"pdf-viewer-content\">\r\n <div class=\"pdf-container\" ref=\"pdfContainer\">\r\n <!-- PDF内容将通过PDF.js渲染 -->\r\n <div id=\"pdf-viewer\"></div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"pdf-viewer-footer\" v-if=\"pdfLoaded\">\r\n <VRow align=\"center\" justify=\"center\">\r\n <VCol cols=\"12\" sm=\"6\" class=\"d-flex justify-center\">\r\n <VBtn icon @click=\"prevPage\" :disabled=\"currentPage <= 1\">\r\n <VIcon>mdi-chevron-left</VIcon>\r\n </VBtn>\r\n <div class=\"mx-4\">\r\n <span>第 {{ currentPage }} 页 / 共 {{ pageCount }} 页</span>\r\n </div>\r\n <VBtn icon @click=\"nextPage\" :disabled=\"currentPage >= pageCount\">\r\n <VIcon>mdi-chevron-right</VIcon>\r\n </VBtn>\r\n </VCol>\r\n <VCol cols=\"12\" sm=\"6\" class=\"d-flex justify-center\">\r\n <VSlider\r\n v-model=\"currentPage\"\r\n :min=\"1\"\r\n :max=\"pageCount\"\r\n hide-details\r\n class=\"mx-4\"\r\n ></VSlider>\r\n </VCol>\r\n </VRow>\r\n </div>\r\n \r\n <div class=\"pdf-loading\" v-if=\"loading\">\r\n <v-progress-circular indeterminate color=\"red\"></v-progress-circular>\r\n <p class=\"mt-2\">正在加载PDF...</p>\r\n </div>\r\n </VCard>\r\n </VDialog>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue';\r\n// import * as pdfjsLib from 'pdfjs-dist';\r\n// 注意:在实际项目中,您需要安装 pdfjs-dist 库\r\n// npm install pdfjs-dist\r\n// import * as pdfjsLib from 'pdfjs-dist';\r\n\r\ndefineOptions({\r\n name: 'VtkPdf',\r\n inheritAttrs: true\r\n});\r\n\r\nconst props = defineProps({\r\n src: {\r\n type: String,\r\n default: null,\r\n },\r\n preview: {\r\n type: Boolean,\r\n default: true\r\n },\r\n title: {\r\n type: String,\r\n default: ''\r\n },\r\n description: {\r\n type: String,\r\n default: ''\r\n },\r\n // 是否显示标题\r\n showTitle: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 是否显示描述\r\n showDescription: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 封面宽高比\r\n aspectRatio: {\r\n type: [String, Number],\r\n default: 16/9\r\n }\r\n});\r\n\r\n// 预览状态\r\nconst showPreview = ref(false);\r\n// PDF相关状态\r\nconst loading = ref(false);\r\nconst pdfLoaded = ref(false);\r\nconst currentPage = ref(1);\r\nconst pageCount = ref(0);\r\nconst pdfContainer = ref(null);\r\n\r\n// PDF对象(实际使用时需要引入pdfjsLib)\r\nlet pdfDoc = null;\r\n\r\n// 使用计算属性处理带token的URL\r\nconst srcWithToken = computed(() => {\r\n if (!props.src) return props.src;\r\n \r\n try {\r\n // 首先尝试使用 $vtk.storage\r\n if (window.$vtk && typeof window.$vtk.storage?.get === 'function') {\r\n const token = window.$vtk.storage.get('token');\r\n return token ? `${props.src}?stoken=${token}` : props.src;\r\n }\r\n // 如果 $vtk 不存在,尝试从 localStorage 获取 token\r\n else {\r\n const token = localStorage.getItem('token');\r\n return token ? `${props.src}?stoken=${token}` : props.src;\r\n }\r\n } catch (error) {\r\n // 发生错误时返回原始src\r\n console.warn('VtkPdf: Failed to get token, using src without token', error);\r\n return props.src;\r\n }\r\n});\r\n\r\n// 打开预览\r\nconst openPreview = () => {\r\n if (props.preview) {\r\n showPreview.value = true;\r\n // 延迟加载PDF以确保DOM已准备好\r\n setTimeout(() => {\r\n loadPdf();\r\n }, 300);\r\n }\r\n};\r\n\r\n// 关闭预览\r\nconst closePreview = () => {\r\n showPreview.value = false;\r\n // 清理PDF对象\r\n pdfDoc = null;\r\n pdfLoaded.value = false;\r\n currentPage.value = 1;\r\n pageCount.value = 0;\r\n};\r\n\r\n// 加载PDF(示例实现,实际使用需要PDF.js库)\r\nconst loadPdf = async () => {\r\n if (!srcWithToken.value) return;\r\n \r\n loading.value = true;\r\n \r\n try {\r\n // 模拟PDF加载(实际实现需要使用PDF.js)\r\n /*\r\n // 实际使用时的代码示例:\r\n pdfjsLib.GlobalWorkerOptions.workerSrc = '//cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.worker.min.js';\r\n \r\n const loadingTask = pdfjsLib.getDocument(srcWithToken.value);\r\n pdfDoc = await loadingTask.promise;\r\n pageCount.value = pdfDoc.numPages;\r\n pdfLoaded.value = true;\r\n \r\n // 渲染第一页\r\n renderPage(currentPage.value);\r\n */\r\n \r\n // 模拟加载过程\r\n await new Promise(resolve => setTimeout(resolve, 1000));\r\n pageCount.value = 10; // 模拟10页PDF\r\n pdfLoaded.value = true;\r\n } catch (error) {\r\n console.error('加载PDF失败:', error);\r\n } finally {\r\n loading.value = false;\r\n }\r\n};\r\n\r\n// 渲染PDF页面(示例实现)\r\nconst renderPage = async (pageNum) => {\r\n if (!pdfDoc || !pdfContainer.value) return;\r\n \r\n try {\r\n /*\r\n // 实际使用时的代码示例:\r\n const page = await pdfDoc.getPage(pageNum);\r\n const viewport = page.getViewport({ scale: 1.5 });\r\n \r\n // 准备canvas\r\n const canvas = document.createElement('canvas');\r\n const context = canvas.getContext('2d');\r\n canvas.height = viewport.height;\r\n canvas.width = viewport.width;\r\n \r\n // 清空容器\r\n pdfContainer.value.innerHTML = '';\r\n pdfContainer.value.appendChild(canvas);\r\n \r\n // 渲染页面\r\n const renderContext = {\r\n canvasContext: context,\r\n viewport: viewport\r\n };\r\n await page.render(renderContext).promise;\r\n */\r\n } catch (error) {\r\n console.error('渲染PDF页面失败:', error);\r\n }\r\n};\r\n\r\n// 上一页\r\nconst prevPage = () => {\r\n if (currentPage.value > 1) {\r\n currentPage.value--;\r\n renderPage(currentPage.value);\r\n }\r\n};\r\n\r\n// 下一页\r\nconst nextPage = () => {\r\n if (currentPage.value < pageCount.value) {\r\n currentPage.value++;\r\n renderPage(currentPage.value);\r\n }\r\n};\r\n\r\n// 下载PDF\r\nconst downloadPdf = async () => {\r\n if (!srcWithToken.value) return;\r\n \r\n try {\r\n // 获取PDF文件的二进制数据\r\n const response = await fetch(srcWithToken.value);\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n \r\n const blob = await response.blob();\r\n const fileName = props.title && props.title.trim() !== '' \r\n ? `${props.title}.pdf` \r\n : 'document.pdf';\r\n \r\n // 创建下载链接\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = fileName;\r\n document.body.appendChild(link);\r\n link.click();\r\n \r\n // 清理\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(url);\r\n } catch (error) {\r\n console.error('下载PDF失败:', error);\r\n // 备用方案:在新窗口打开\r\n window.open(srcWithToken.value, '_blank');\r\n }\r\n};\r\n\r\n// 监听页码变化\r\nconst handlePageChange = (newPage) => {\r\n if (newPage >= 1 && newPage <= pageCount.value) {\r\n renderPage(newPage);\r\n }\r\n};\r\n\r\n// 监听 currentPage 变化\r\n// 在实际实现中,您需要使用 watch 监听 currentPage 变化\r\n// watch(currentPage, handlePageChange);\r\n\r\n// 组件销毁前清理\r\nonBeforeUnmount(() => {\r\n pdfDoc = null;\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.vtk-pdf-container {\r\n position: relative;\r\n display: inline-block;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.vtk-pdf-card {\r\n height: 100%;\r\n}\r\n\r\n.vtk-pdf-card--preview {\r\n cursor: pointer;\r\n transition: transform 0.2s ease-in-out;\r\n}\r\n\r\n.vtk-pdf-card--preview:hover {\r\n transform: translateY(-5px);\r\n}\r\n\r\n.vtk-pdf-cover {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: #f5f5f5;\r\n border: 1px solid #ddd;\r\n width: 100%;\r\n}\r\n\r\n.vtk-pdf-label {\r\n margin-top: 8px;\r\n font-weight: 500;\r\n color: #666;\r\n}\r\n\r\n.vtk-pdf-info {\r\n padding: 0;\r\n}\r\n\r\n.vtk-pdf-title {\r\n word-break: break-word;\r\n}\r\n\r\n.vtk-pdf-description {\r\n word-break: break-word;\r\n}\r\n\r\n/* PDF查看器样式 */\r\n.pdf-viewer-card {\r\n background-color: #e0e0e0;\r\n color: #333;\r\n}\r\n\r\n.pdf-viewer-content {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: calc(100vh - 150px);\r\n position: relative;\r\n background-color: #555;\r\n overflow: auto;\r\n}\r\n\r\n.pdf-container {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n#pdf-viewer {\r\n max-width: 100%;\r\n max-height: 100%;\r\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\r\n background-color: white;\r\n /* 实际PDF内容将在此处渲染 */\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: 500px;\r\n min-width: 400px;\r\n}\r\n\r\n.pdf-viewer-footer {\r\n padding: 16px;\r\n background-color: #f5f5f5;\r\n border-top: 1px solid #ddd;\r\n}\r\n\r\n.pdf-loading {\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: rgba(255, 255, 255, 0.9);\r\n padding: 20px;\r\n border-radius: 8px;\r\n z-index: 100;\r\n}\r\n</style>","// composables/useMixins.js\r\nimport { ref, reactive } from 'vue'\r\nimport Request from '../commons/request.js'\r\nimport Message from '../components/message/index.js'\r\nimport storage from '../commons/storage.js'\r\n\r\n/**\r\n * 通用 mixins composable\r\n * @param {Object} urlConfig - URL 配置对象\r\n * @returns {Object} 包含所有状态和方法的对象\r\n */\r\nexport function useMixins(urlConfig = {}) {\r\n // 响应式数据\r\n const queryParam = reactive({})\r\n const desserts = ref([])\r\n const loading = ref(false)\r\n const superQueryParams = ref('')\r\n const page = reactive({\r\n pageno: 1,\r\n limit: 10\r\n })\r\n const pageData = ref({})\r\n const sumup = ref({})\r\n const pageDataCopy = ref([])\r\n const overlay = ref(false)\r\n const user = ref({})\r\n\r\n // URL 配置\r\n const url = reactive(urlConfig)\r\n\r\n /**\r\n * 获取查询参数\r\n * @returns {Object} 查询参数对象\r\n */\r\n const getQueryParams = () => {\r\n user.value = storage.get('user')\r\n if (!queryParam.areaCode) {\r\n queryParam.areaCode = user.value?.areacode\r\n }\r\n const codex = Object.assign({}, queryParam)\r\n const params = {\r\n pageno: page.pageno,\r\n limit: page.limit,\r\n codex: codex\r\n }\r\n return params\r\n }\r\n\r\n /**\r\n * 加载页面数据\r\n */\r\n const loadPage = () => {\r\n if (!url.list) {\r\n Message.toast('请先设置url.list属性', { color: 'warning' })\r\n return\r\n }\r\n const params = getQueryParams()\r\n loading.value = true\r\n\r\n // 兼容处理 vtk 对象\r\n if (window.$vtk?.message?.loading) {\r\n window.$vtk.message.loading.show()\r\n }\r\n\r\n Request.postJson(url.list, params)\r\n .then((res) => {\r\n if (window.$vtk?.message?.loading) {\r\n window.$vtk.message.loading.hide()\r\n }\r\n\r\n if (res.meta.success || res.data) {\r\n desserts.value = res.data?.rows || []\r\n pageData.value = res.data\r\n sumup.value = res.data.sumup ? res.data.sumup : {}\r\n pageDataCopy.value = res.data\r\n }\r\n loading.value = false\r\n })\r\n .catch((error) => {\r\n console.error('加载页面数据失败:', error)\r\n loading.value = false\r\n if (window.$vtk?.message?.loading) {\r\n window.$vtk.message.loading.hide()\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * 搜索查询\r\n */\r\n const searchQuery = () => {\r\n page.pageno = 1\r\n page.limit ??= 10\r\n loadPage()\r\n }\r\n\r\n /**\r\n * 分页变化处理\r\n * @param {Object} pageInfo - 分页信息\r\n */\r\n const getListPage = (pageInfo) => {\r\n page.pageno = pageInfo.pageno\r\n page.limit = pageInfo.limit\r\n loadPage()\r\n }\r\n\r\n /**\r\n * 删除项\r\n * @param {string|number} id - 要删除的项ID\r\n * @param {string} text - 确认提示文本\r\n */\r\n const deleteItem = (id, text) => {\r\n if (!url.delete) {\r\n Message.toast('请设置url.delete属性!', { color: 'warning' })\r\n return\r\n }\r\n\r\n Message.confirm(\r\n { title: '确认删除', text: text ? text : '是否删除?' },\r\n (result) => {\r\n if (result) {\r\n Request.getForm(url.delete, { id: id })\r\n .then((res) => {\r\n if (res.meta.success) {\r\n Message.toast('删除成功', { color: 'success' })\r\n loadPage()\r\n } else {\r\n Message.toast('删除失败', { color: 'warning' })\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('删除失败:', error)\r\n Message.toast('删除失败', { color: 'warning' })\r\n })\r\n }\r\n }\r\n )\r\n }\r\n\r\n /**\r\n * 复制项\r\n * @param {string|number} id - 要复制的项ID\r\n * @param {string} text - 确认提示文本\r\n */\r\n const copyItem = (id, text) => {\r\n if (!url.copy) {\r\n Message.toast('请设置url.copy!', { color: 'warning' })\r\n return\r\n }\r\n\r\n Message.confirm(\r\n { title: '拷贝', text: text ? text : '是否确认拷贝当前数据?' },\r\n (result) => {\r\n if (result) {\r\n Request.getForm(url.copy, { id: id })\r\n .then((res) => {\r\n if (res.meta.success) {\r\n Message.toast('拷贝成功', { color: 'success' })\r\n loadPage()\r\n } else {\r\n Message.toast('拷贝失败', { color: 'warning' })\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('拷贝失败:', error)\r\n Message.toast('拷贝失败', { color: 'warning' })\r\n })\r\n }\r\n }\r\n )\r\n }\r\n\r\n /**\r\n * 编辑项\r\n * @param {Object} record - 要编辑的记录\r\n * @param {Object} modalFormRef - 模态框引用\r\n */\r\n const edit = (record, modalFormRef) => {\r\n if (modalFormRef?.value) {\r\n modalFormRef.value.edit(record)\r\n }\r\n }\r\n\r\n /**\r\n * 添加新项\r\n * @param {Object} modalFormRef - 模态框引用\r\n */\r\n const add = (modalFormRef) => {\r\n if (modalFormRef?.value) {\r\n modalFormRef.value.add()\r\n }\r\n }\r\n\r\n /**\r\n * 模态框确认回调\r\n */\r\n const modalFormOk = () => {\r\n loadPage()\r\n }\r\n\r\n /**\r\n * 导出数据\r\n */\r\n const expData = () => {\r\n overlay.value = true\r\n\r\n if (window.$vtk?.message?.loading) {\r\n window.$vtk.message.loading.show()\r\n }\r\n\r\n const params = getQueryParams()\r\n Request.exp(url.exp, params)\r\n .then((res) => {\r\n if (window.$vtk?.message?.loading) {\r\n window.$vtk.message.loading.hide()\r\n }\r\n\r\n if (res) {\r\n const disposition = res.headers['content-disposition']\r\n const filename = decodeURI(\r\n disposition.substring(\r\n disposition.indexOf('filename=') + 9,\r\n disposition.length\r\n )\r\n )\r\n const blob = new Blob([res.data], {\r\n type: 'application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\r\n })\r\n\r\n if (window.navigator.msSaveOrOpenBlob) {\r\n navigator.msSaveBlob(blob)\r\n } else {\r\n const link = document.createElement('a')\r\n link.style.display = 'none'\r\n link.href = URL.createObjectURL(blob)\r\n link.download = filename\r\n document.body.appendChild(link)\r\n link.click()\r\n document.body.removeChild(link)\r\n }\r\n }\r\n overlay.value = false\r\n })\r\n .catch((error) => {\r\n console.error('导出数据失败:', error)\r\n overlay.value = false\r\n if (window.$vtk?.message?.loading) {\r\n window.$vtk.message.loading.hide()\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * 重置查询参数\r\n */\r\n const resetQueryParams = () => {\r\n Object.keys(queryParam).forEach(key => {\r\n delete queryParam[key]\r\n })\r\n }\r\n\r\n /**\r\n * 重置分页\r\n */\r\n const resetPage = () => {\r\n page.pageno = 1\r\n page.limit = 10\r\n }\r\n\r\n /**\r\n * 更新 URL 配置\r\n * @param {Object} newUrlConfig - 新的 URL 配置\r\n */\r\n const updateUrlConfig = (newUrlConfig) => {\r\n Object.assign(url, newUrlConfig)\r\n }\r\n\r\n // 返回所有状态和方法\r\n return {\r\n // 响应式数据\r\n queryParam,\r\n desserts,\r\n loading,\r\n superQueryParams,\r\n page,\r\n pageData,\r\n sumup,\r\n pageDataCopy,\r\n overlay,\r\n user,\r\n url,\r\n\r\n // 方法\r\n getQueryParams,\r\n loadPage,\r\n searchQuery,\r\n getListPage,\r\n deleteItem,\r\n copyItem,\r\n edit,\r\n add,\r\n modalFormOk,\r\n expData,\r\n resetQueryParams,\r\n resetPage,\r\n updateUrlConfig\r\n }\r\n}\r\n\r\n// 默认导出保持向后兼容\r\nexport default useMixins","<template>\n\t<VContainer fluid class=\"vtk-height pa-0\">\n\t\t<VTabs v-model=\"examType\" bg-color=\"transparent\" height=\"38\" style=\"width: 100%\">\n\t\t\t<VTab @click=\"examAll()\">\n\t\t\t\t<span><VIcon size=\"16\" class=\"mr-1\">mdi-clipboard-arrow-up</VIcon>全部</span>\n\t\t\t</VTab>\n\t\t\t<VTab @click=\"list\">\n\t\t\t\t<span><VIcon size=\"16\" class=\"mr-1\">mdi-star-circle</VIcon>审核</span>\n\t\t\t</VTab>\n\t\t\t<VTab @click=\"tip\">\n\t\t\t\t<span><VIcon size=\"16\" class=\"mr-1\">mdi-hand-heart</VIcon>实施</span>\n\t\t\t</VTab>\n\t\t\t<VTab @click=\"tip\">\n\t\t\t\t<span><VIcon size=\"16\" class=\"mr-1\">mdi-comment-minus</VIcon>评价</span>\n\t\t\t</VTab>\n\t\t\t<VTab @click=\"tip\">\n\t\t\t\t<span><VIcon size=\"16\" class=\"mr-1\">mdi-credit-card-check</VIcon>支付</span>\n\t\t\t</VTab>\n\t\t\t<VSpacer />\n\t\t</VTabs>\n\t\t<VCard elevation=\"0\" style=\"min-height: calc(100% - 38px)\">\n\t\t\t<VCardTitle style=\"height: 88px\">\n\t\t\t\t<VMenu v-if=\"examType == '0' && (expShow || user.grole >= 2)\" offset-y :close-on-content-click=\"false\" location=\"bottom\">\n\t\t\t\t\t<template v-slot:activator=\"{ props }\">\n\t\t\t\t\t\t<VBtn @click=\"exv\" v-bind=\"props\" class=\"bg-orange text-white mr-3\" elevation=\"0\">\n\t\t\t\t\t\t\t<VIcon>mdi-export-variant</VIcon> 导出\n\t\t\t\t\t\t</VBtn>\n\t\t\t\t\t</template>\n\t\t\t\t\t<VCard class=\"pa-3\" width=\"300\">\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<p class=\"mb-2 font-weight-bold\">公共字段</p>\n\t\t\t\t\t\t\t<p class=\"text-caption\">\n\t\t\t\t\t\t\t\t服务事项\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t所属区县\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t所属镇街\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t所属社区\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t申请人证件号\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t申请人姓名\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t残疾人证号\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t性别\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t申请人手机号\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t补助金额\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t开户银行\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t银行卡号\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t收款人姓名\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t收款人证件号\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t状态\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<VDivider />\n\t\t\t\t\t\t\t<div v-if=\"queryParam.servState == '1' && projName\">\n\t\t\t\t\t\t\t\t<VCardTitle class=\"pa-0 text-body-1 mb-2 pt-3\">\n\t\t\t\t\t\t\t\t\t<VCheckbox @update:model-value=\"chkAll\" v-model=\"select\" class=\"mt-n1\" hide-details>\n\t\t\t\t\t\t\t\t\t\t<template v-slot:append>\n\t\t\t\t\t\t\t\t\t\t\t<VIcon class=\"active\" style=\"display: none\" size=\"18\">mdi-check-circle</VIcon>\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t</VCheckbox>\n\t\t\t\t\t\t\t\t\t<span class=\"font-weight-bold ml-n2\">拓展字段</span>\n\t\t\t\t\t\t\t\t\t<VSpacer />\n\t\t\t\t\t\t\t\t</VCardTitle>\n\t\t\t\t\t\t\t\t<p v-if=\"formArr?.length > 0\" class=\"mb-0 expBox\">\n\t\t\t\t\t\t\t\t\t<VCheckbox\n\t\t\t\t\t\t\t\t\t\tv-for=\"(item, index) in formArr\"\n\t\t\t\t\t\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t\t\t\t\t\tv-model=\"expArr\"\n\t\t\t\t\t\t\t\t\t\t:label=\"item.label\"\n\t\t\t\t\t\t\t\t\t\t:value=\"{ name: item.name, valu: `${item.label}${item.valu && item.valu.includes('/') && item.valu.includes(':') ? `(${item.valu})` : ''}` }\"\n\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\"\n\t\t\t\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\t\t\t\thide-details>\n\t\t\t\t\t\t\t\t\t\t<template v-slot:append>\n\t\t\t\t\t\t\t\t\t\t\t<VIcon class=\"active\" style=\"display: none\" size=\"18\">mdi-check-circle</VIcon>\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t</VCheckbox>\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<p v-else class=\"text-red text-body-2 mb-2\">{{ projTip }}</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div v-else>\n\t\t\t\t\t\t\t\t<p class=\"mb-3 pt-3 font-weight-bold\">导出提示</p>\n\t\t\t\t\t\t\t\t<p :class=\"queryParam.servState == '1' ? 'text-green' : 'text-red'\" class=\"mb-3 text-body-2\">\n\t\t\t\t\t\t\t\t\t<VIcon size=\"20\" :color=\"queryParam.servState == '1' ? 'green' : 'red'\">{{ queryParam.servState == \"1\" ? \"mdi-progress-check\" : \"mdi-progress-close\" }}</VIcon>\n\t\t\t\t\t\t\t\t\t导出数据仅限已服务信息\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<p class=\"mb-2 text-body-2\" :class=\"projName ? 'text-green' : 'text-red'\">\n\t\t\t\t\t\t\t\t\t<VIcon size=\"20\" :color=\"projName ? 'green' : 'red'\">{{ projName ? \"mdi-progress-check\" : \"mdi-progress-close\" }}</VIcon>\n\t\t\t\t\t\t\t\t\t至少选择一个服务事项导出\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<VBtn @click=\"exp\" :disabled=\"!(projName && queryParam.servState == '1')\" elevation=\"0\" color=\"primary\" class=\"vtk-width mt-3\" size=\"small\">确认导出</VBtn>\n\t\t\t\t\t</VCard>\n\t\t\t\t</VMenu>\n\t\t\t\t<VSpacer />\n\t\t\t\t<vtk-search v-model=\"queryParam\" @search=\"searchQuery\" placeholder=\"输入姓名/身份证查询\" :styles=\"'width:320px'\">\n\t\t\t\t\t<VTextField @click=\"searchProj\" v-model=\"projName\" :title=\"projName\" clearable readonly variant=\"outlined\" placeholder=\"服务事项\" density=\"compact\" hide-details class=\"my-3\"></VTextField>\n\t\t\t\t\t<vtk-area-tabs v-model=\"queryParam.areaCode\" :styles=\"'width:100%'\" />\n\t\t\t\t\t<div v-if=\"examType == 0\" style=\"width: 400px\">\n\t\t\t\t\t\t<vtk-select v-model=\"queryParam.servState\" @change=\"searchQuery\" placeholder=\"服务状态\" list=\"0:服务中/1:已服务\" class=\"mt-3 d-inline-block mr-3 mb-3\" style=\"width: calc(50% - 6px)\" hide-details density=\"compact\" variant=\"outlined\" clearable></vtk-select>\n\t\t\t\t\t\t<vtk-select v-model=\"queryParam.rateState\" @change=\"searchQuery\" placeholder=\"是否评价\" list=\"0:未评价/1:已评价\" class=\"mt-3 d-inline-block\" style=\"width: calc(50% - 6px)\" hide-details density=\"compact\" variant=\"outlined\" clearable></vtk-select>\n\t\t\t\t\t\t<VMenu v-model=\"menu\" :close-on-content-click=\"false\" transition=\"scale-transition\" location=\"bottom\" max-width=\"290px\" min-width=\"auto\">\n\t\t\t\t\t\t\t<template v-slot:activator=\"{ props }\">\n\t\t\t\t\t\t\t\t<VTextField v-model=\"queryParam.servFtime0\" placeholder=\"开始时间\" persistent-hint append-icon=\"mdi-calendar\" class=\"d-inline-block\" style=\"width: calc(50% - 16px)\" hide-details variant=\"outlined\" density=\"compact\" v-bind=\"props\"></VTextField>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<VDatePicker v-model=\"queryParam.servFtime0\" title=\"\" @update:model-value=\"menu = false\" view-mode=\"month\" :max=\"queryParam.servFtime1\"></VDatePicker>\n\t\t\t\t\t\t</VMenu>\n\t\t\t\t\t\t<span class=\"mx-2\">至</span>\n\t\t\t\t\t\t<VMenu v-model=\"menu1\" :close-on-content-click=\"false\" transition=\"scale-transition\" location=\"bottom\" max-width=\"290px\" min-width=\"auto\">\n\t\t\t\t\t\t\t<template v-slot:activator=\"{ props }\">\n\t\t\t\t\t\t\t\t<VTextField v-model=\"queryParam.servFtime1\" placeholder=\"结束时间\" persistent-hint append-icon=\"mdi-calendar\" class=\"d-inline-block\" style=\"width: calc(50% - 15px)\" hide-details variant=\"outlined\" density=\"compact\" v-bind=\"props\"></VTextField>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<VDatePicker v-model=\"queryParam.servFtime1\" title=\"\" @update:model-value=\"menu1 = false\" view-mode=\"month\" :min=\"queryParam.servFtime0\"></VDatePicker>\n\t\t\t\t\t\t</VMenu>\n\t\t\t\t\t\t<vtk-select v-if=\"queryParam.servState == '1'\" @change=\"searchQuery\" v-model=\"queryParam.state\" class=\"mt-3\" placeholder=\"状态\" list=\"1:已通过/0:未通过\" hide-details density=\"compact\" variant=\"outlined\" clearable></vtk-select>\n\t\t\t\t\t</div>\n\t\t\t\t</vtk-search>\n\t\t\t</VCardTitle>\n\t\t\t<VCardText>\n\t\t\t\t<VDataTable :headers=\"headers\" :items=\"desserts\" :loading=\"loading\" disable-pagination loading-text=\"数据加载中...\" class=\"elevation-0\" hide-default-footer>\n\t\t\t\t\t<template v-slot:[`item.objsName`]=\"{ item }\">\n\t\t\t\t\t\t<div class=\"py-3\" @click=\"toView(item)\">\n\t\t\t\t\t\t\t<p class=\"vtk-cursor-pointer text-body-1 font-weight-bold mb-2\">\n\t\t\t\t\t\t\t\t{{ item.objsName }}<span class=\"ml-3 text-grey\">{{ formatIdCard(item.objsCode) }} </span>\n\t\t\t\t\t\t\t\t<VChip class=\"ml-2\" :class=\"getServStateClass(item.servState)\" size=\"small\" label>{{ getServStateText(item.servState) }} </VChip>\n\t\t\t\t\t\t\t\t<VChip class=\"ml-2\" :class=\"getRateStateClass(item.rateState)\" size=\"small\" label>{{ getRateStateText(item.rateState) }} </VChip>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t<VChip class=\"bg-orange-lighten-5 text-orange\" size=\"small\" label> 事项编码:{{ item.projCode }} </VChip>\n\t\t\t\t\t\t\t\t<VChip class=\"text-primary ml-2\" size=\"small\" label> 办件编号:{{ item.inst }} </VChip>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<div class=\"mb-0 mt-2 text-grey\">\n\t\t\t\t\t\t\t\t<div class=\"d-inline-block\" style=\"min-width: 320px\">\n\t\t\t\t\t\t\t\t\t服务名称:<span class=\"text-blue\">{{ item.projName }}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<span>补助金额:{{ item.servAmts }}元</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<VRow class=\"py-2\" style=\"color: #979797c2\">\n\t\t\t\t\t\t\t\t<VCol style=\"max-width: 320px\">\n\t\t\t\t\t\t\t\t\t<span :title=\"item.name\" class=\"d-block\" style=\"color: #979797c2\">申请途径:{{ getServFromText(item.servFrom) }}</span>\n\t\t\t\t\t\t\t\t</VCol>\n\t\t\t\t\t\t\t\t<VCol>\n\t\t\t\t\t\t\t\t\t<span :title=\"item.name\" class=\"d-block\" style=\"color: #979797c2\">申请时间:{{ formatDate(item.servCtime) }}</span>\n\t\t\t\t\t\t\t\t</VCol>\n\t\t\t\t\t\t\t</VRow>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-slot:[`item.actions`]=\"{ item }\">\n\t\t\t\t\t\t<a v-if=\"item.state != 0 && user.areacode?.length == 6 && item.servState == '1'\" @click=\"del(item)\" class=\"text-error\" text>作废</a>\n\t\t\t\t\t\t<div v-if=\"item.state == 0\" class=\"state_btg text-right\"></div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-slot:no-data>\n\t\t\t\t\t\t<vtk-empty />\n\t\t\t\t\t</template>\n\t\t\t\t</VDataTable>\n\t\t\t\t<vtk-page :page-sizes=\"[10, 20]\" :page-data=\"pageData\" @pageChange=\"getListPage\" />\n\t\t\t</VCardText>\n\t\t</VCard>\n\t\t<!-- 服务事项 -->\n\t\t<vtk-proj ref=\"MprojRef\" @toPage=\"toPage\" />\n\t\t<!-- 删除服务 -->\n\t\t<VDialog v-model=\"dialog\" persistent max-width=\"500\">\n\t\t\t<VCard>\n\t\t\t\t<VCardTitle>作废</VCardTitle>\n\t\t\t\t<VCardText class=\"pb-0\">\n\t\t\t\t\t服务作废后将无法恢复,请谨慎操作!!!\n\t\t\t\t\t<VTextarea v-model=\"delNote\" variant=\"outlined\" label=\"请填写作废原因\" class=\"mt-3\" hide-details density=\"compact\"></VTextarea>\n\t\t\t\t</VCardText>\n\t\t\t\t<VCardActions>\n\t\t\t\t\t<VSpacer />\n\t\t\t\t\t<VBtn @click=\"dialog = false\" variant=\"text\">取消</VBtn>\n\t\t\t\t\t<VBtn @click=\"delSave(true)\" variant=\"text\">确定</VBtn>\n\t\t\t\t</VCardActions>\n\t\t\t</VCard>\n\t\t</VDialog>\n\t</VContainer>\n</template>\n\n<script setup>\nimport { ref, watch, onActivated } from 'vue';\nimport { useMixins } from '../../composables/useMixins'\nimport Request from '../../commons/request';\n\n// 定义组件选项\ndefineOptions({\n\tname: 'VtkProj',\n\tinheritAttrs: false,\n});\n\n// 表单列表 URL 配置\nconst urlConfig = {\n\tlist: '/kudas/xfwez/page',\n\texp: '/kudas/xfwez/exp',\n\tdelete: '/kudas/xfwez/delete'\n};\n\n// 使用 mixins composable\nconst {\n\tpageData,\n\tgetListPage,\n\tloadPage,\n\texpData,\n\tdesserts,\n\tloading,\n\tqueryParam: mixinQueryParam,\n\turl\n} = useMixins(urlConfig);\n\n// 合并 queryParam\nObject.assign(mixinQueryParam, {});\nconst queryParam = mixinQueryParam;\n\n// 响应式数据\nconst user = ref({});\nconst examType = ref(1);\n\nconst headers = ref([\n\t{ title: '事项', key: 'objsName', sortable: false },\n\t{ title: '状态', key: 'actions', sortable: false, align: 'end' },\n]);\n\n// 主题筛选\nconst permits = ref([]);\nconst projName = ref('');\nconst projTip = ref('');\nconst bizType = ref('');\nconst expShow = ref(false);\nconst menu = ref(false);\nconst menu1 = ref(false);\n\n// 导出\nconst expArr = ref([]);\nconst formArr = ref([]);\nconst select = ref(false);\nconst selectAll = ref([]);\n\n// 删除\nconst dialog = ref(false);\nconst delItem = ref({});\nconst delNote = ref('');\n\n// ref\nconst MprojRef = ref(null);\n\n// 监听器\nwatch(expArr, (newVal) => {\n\tif (newVal.length < selectAll.value.length) {\n\t\tselect.value = false;\n\t}\n}, { deep: true });\n\n// 生命周期\nonActivated(() => {\n\talert('onActivated');\n\tlist();\n\t// 监听接收消息,刷新页面\n\twindow.addEventListener('storage', (event) => {\n\t\tif (JSON.parse(event?.newValue)?.fwez) {\n\t\t\texamType.value == '0' ? examAll() : loadPage();\n\t\t}\n\t});\n});\n\n// 方法\n// 全选\nconst chkAll = (e) => {\n\texpArr.value = e ? selectAll.value : [];\n};\n\nconst list = () => {\n\tbizType.value = '';\n\texpShow.value = false;\n\tuser.value = getUserInfo();\n\tpermits.value = [];\n\tuser.value.permits?.forEach((e) => {\n\t\tif (e.permNkey.includes('biz_type')) {\n\t\t\tpermits.value.push(e);\n\t\t\tbizType.value = bizType.value + e.permNkey.slice(9) + ',';\n\t\t} else if (e.permNkey == 'btn_expo') {\n\t\t\texpShow.value = true;\n\t\t}\n\t});\n\tqueryParam.bizType = bizType.value;\n\texamWait();\n};\n\n// 获取用户信息\nconst getUserInfo = () => {\n\ttry {\n\t\t// 实际项目中从存储或状态管理获取\n\t\treturn window.$vtk?.storage?.get('user') || {};\n\t} catch (error) {\n\t\tconsole.warn('获取用户信息失败:', error);\n\t\treturn {};\n\t}\n};\n\n// 待审\nconst examWait = () => {\n\texamType.value = 1;\n\tqueryParam.operateLeve = user.value.areacode?.length;\n\tqueryParam.servState = '0';\n\tloadPage();\n};\n\n// 全部审核\nconst examAll = () => {\n\texamType.value = 0;\n\tdelete queryParam.operateLeve;\n\tdelete queryParam.servState;\n\tloadPage();\n};\n\n// 审核\nconst toView = (item) => {\n\tconst url = item.servState == 1\n\t\t? `#/mino/suse/view/${item.inst}?ddtab=true`\n\t\t: `#/mino/suse/exam/${item.inst}?ddtab=true`;\n\twindow.open(url);\n};\n\n// 服务事项查询/筛选\nconst searchProj = () => {\n\tMprojRef.value?.add(queryParam.projCode);\n};\n\nconst toPage = (param) => {\n\tprojName.value = param.projName;\n\tqueryParam.projCode = param.projCode;\n\tdelete queryParam.bizType;\n\tsearchQuery();\n};\n\nconst searchQuery = () => {\n\t// 搜索查询逻辑\n\tloadPage();\n};\n\n// 导出相关\nconst exv = () => {\n\tif (projName.value && queryParam.servState == '1') {\n\t\texpArr.value = [];\n\t\tformArr.value = [];\n\t\t// 显示加载状态\n\t\tRequest.postJson('/kudas/xfwez/exv', { codex: queryParam }).then((res) => {\n\t\t\tif (res.meta.success) {\n\t\t\t\tJSON.parse(res.data.formJson).forEach((item) => {\n\t\t\t\t\tif (['text', 'radio', 'number', 'time', 'checkbox', 'textarea', 'select'].includes(item.type)) {\n\t\t\t\t\t\titem.value = {\n\t\t\t\t\t\t\tname: item.name,\n\t\t\t\t\t\t\tvalu: `${item.label}${item.valu && item.valu.includes('/') && item.valu.includes(':') ? `(${item.valu})` : ''}`\n\t\t\t\t\t\t};\n\t\t\t\t\t\tformArr.value.push(item);\n\t\t\t\t\t\tselectAll.value.push(item.value);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tprojTip.value = res.meta.message;\n\t\t\t}\n\t\t});\n\t}\n};\n\nconst exp = () => {\n\tqueryParam.fields = expArr.value;\n\texpData();\n};\n\n// 服务作废\nconst del = (item) => {\n\tdialog.value = true;\n\tdelItem.value = item;\n\tdelNote.value = '';\n};\n\nconst delSave = () => {\n\tif (delNote.value) {\n\t\tRequest.postForm(url.delete, { id: delItem.value.id, note: delNote.value }).then((res) => {\n\t\t\tif (res.meta.success) {\n\t\t\t\t// 显示成功消息\n\t\t\t\tdialog.value = false;\n\t\t\t\tloadPage();\n\t\t\t} else {\n\t\t\t\t// 显示失败消息\n\t\t\t}\n\t\t});\n\t} else {\n\t\t// 显示错误消息\n\t}\n};\n\n// 提示\nconst tip = () => {\n\t// 显示应用开发中的消息\n};\n\n// 工具函数\nconst formatIdCard = (idcard) => {\n\tif (!idcard) return '';\n\treturn idcard.replace(/^(.{6})(?:\\d+)(.{4})$/, '$1********$2');\n};\n\nconst formatDate = (dateStr) => {\n\tif (!dateStr) return '';\n\tconst date = new Date(dateStr);\n\treturn `${date.getFullYear()}年${String(date.getMonth() + 1).padStart(2, '0')}月${String(date.getDate()).padStart(2, '0')}日 ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;\n};\n\nconst getServStateClass = (state) => {\n\treturn state == '0' ? 'bg-blue-lighten-5 text-blue' : 'bg-green-lighten-5 text-green';\n};\n\nconst getServStateText = (state) => {\n\treturn state == '0' ? '服务中' : '已服务';\n};\n\nconst getRateStateClass = (state) => {\n\treturn state == '0' ? 'bg-orange-lighten-5 text-orange' : 'bg-blue-lighten-5 text-blue';\n};\n\nconst getRateStateText = (state) => {\n\treturn state == '0' ? '未评价' : '已评价';\n};\n\nconst getServFromText = (from) => {\n\tconst fromMap = {\n\t\t'100': '特殊渠道',\n\t\t'101': '移动端代办',\n\t\t'102': '窗口端通办',\n\t\t'200': '特殊渠道',\n\t\t'210': '浙里办App',\n\t\t'211': '浙里办微信小程序',\n\t\t'212': '浙里办支付宝小程序',\n\t\t'230': '微信小程序',\n\t\t'240': '支付宝小程序',\n\t\t'250': '自助机',\n\t\t'300': '特殊渠道',\n\t\t'310': '服务外包代办'\n\t};\n\treturn fromMap[from] || from;\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.state_btg {\n\tpadding-right: 0;\n\theight: 100%;\n\tbackground: url(../../assets/img/objs_btg.png) no-repeat;\n\tbackground-size: 80px;\n\tbackground-position: 100% 100%;\n}\n\n:deep(.v-tab) {\n\tbackground: url(../../assets/img/tab-2.png) no-repeat;\n\tbackground-size: 100% 100%;\n\twidth: 150px;\n\tmargin-left: -11px;\n\tborder-top-left-radius: 20px;\n\tborder-top-right-radius: 20px;\n\tspan {\n\t\tz-index: 99;\n\t}\n}\n\n/* Dark theme */\n.v-theme--dark {\n\t:deep(.v-tab) {\n\t\tbackground: url(../../assets/img/tab-4.png) no-repeat;\n\t\tbackground-size: 100% 100%;\n\t}\n\n\t:deep(.v-tabs__slider) {\n\t\tbackground: url(../../assets/img/tab-3.png) no-repeat !important;\n\t\tbackground-size: 100% 100% !important;\n\t}\n}\n\n:deep(.v-tab::before),\n:deep(.v-tab:focus::before),\n:deep(.v-tab:hover::before) {\n\tbackground-color: transparent !important;\n\topacity: 0 !important;\n}\n\n:deep(.v-tabs__slider) {\n\theight: 38px !important;\n\tbackground: url(../../assets/img/tab-1.png) no-repeat;\n\tbackground-size: 100% 100%;\n}\n\n.expBox {\n\t:deep(td) {\n\t\tborder-bottom: thin solid rgba(123, 123, 123, 0.22);\n\t}\n\n\t:deep(.v-data-table__empty-wrapper td) {\n\t\tborder: none;\n\t}\n\n\t:deep(.v-checkbox.v-selection-control--dirty) {\n\t\tbackground-color: rgba(33, 149, 243, 0.06) !important;\n\n\t\t.v-label {\n\t\t\tcolor: rgb(33, 150, 243) !important;\n\t\t}\n\n\t\t.active {\n\t\t\tcolor: rgb(33, 150, 243);\n\t\t\tdisplay: inline-block !important;\n\t\t}\n\t}\n\n\t:deep(.v-selection-control__input) {\n\t\tdisplay: none;\n\t}\n\n\t:deep(.v-checkbox) {\n\t\tpadding: 4px 8px 4px 10px;\n\t\tborder-radius: 6px;\n\t\tbackground-color: rgba(117, 117, 117, 0.06);\n\n\t\t.v-label {\n\t\t\tmargin-top: 3px;\n\t\t\tfont-size: 12px;\n\t\t}\n\t}\n}\n</style>\n","<template>\n <VRadioGroup v-bind=\"attrs\" :modelValue=\"modelValue\" @update:modelValue=\"onUpdate\">\n <VRadio\n v-for=\"item in items\"\n :key=\"item.id || item.code\"\n :label=\"item.codeValue\"\n :value=\"item.code\"\n />\n </VRadioGroup>\n</template>\n\n<script setup>\nimport { ref, onMounted, useAttrs } from 'vue';\nimport Request from '../../commons/request';\n\n// 定义组件名称\ndefineOptions({\n name: \"VtkRadio\",\n inheritAttrs: false,\n});\n// 定义 props\nconst props = defineProps({\n /**\n * 字典来源:\n * - 静态数据,如:\"0:否/1:是\"\n * - 字典键名,如:\"DISABLE_TYPE\"\n */\n list: {\n type: String,\n required: true,\n },\n modelValue: {\n type: [String, Number],\n default: null,\n },\n});\n\n// 定义 emit 事件\nconst emit = defineEmits(['update:modelValue']);\n\n// 获取透传属性(替代 $attrs)\nconst attrs = useAttrs();\n\n// 响应式数据\nconst items = ref([]);\n\n// 处理静态数据\nconst statc = () => {\n props.list.split('/').forEach(it => {\n const [code, codeValue] = it.split(':');\n items.value.push({ code, codeValue });\n });\n};\n\n// 请求远程字典\nconst miscs = async () => {\n try {\n const res = await Request.getForm(`dict/misc/list/${props.list}`);\n items.value = res.data || [];\n } catch (error) {\n console.error('[VtkRadio] Failed to load dictionary:', error);\n items.value = [];\n }\n};\n\n// 更新 v-model 值\nconst onUpdate = (val) => {\n emit('update:modelValue', val);\n};\n\n// 初始化数据\nonMounted(() => {\n if (props.list.includes(':')) {\n statc();\n } else {\n miscs();\n }\n});\n</script>\n\n<style scoped>\n</style>","<template>\r\n <div class=\"search\">\r\n <VMenu \r\n v-model=\"menu\" \r\n @update:model-value=\"obtain\" \r\n location=\"bottom\" \r\n offset=\"12\" \r\n :close-on-content-click=\"false\"\r\n >\r\n <template v-slot:activator=\"{ props }\">\r\n <VTextField \r\n v-model=\"queryParam.condition\" \r\n :placeholder=\"$attrs.placeholder || '请输入查询内容'\"\r\n :style=\"$attrs.styles\" \r\n class=\"box\" \r\n density=\"compact\" \r\n variant=\"outlined\" \r\n hide-details\r\n @click:append=\"search\" \r\n @keyup.enter=\"search\" \r\n @click:clear=\"(queryParam.condition = ''), search()\"\r\n clearable\r\n >\r\n <template v-slot:append-inner>\r\n <VBadge \r\n dot \r\n :content=\"initialIndex\" \r\n :model-value=\"initialIndex > 0\" \r\n color=\"error\"\r\n class=\"advanced-badge\"\r\n >\r\n <span \r\n v-bind=\"props\"\r\n class=\"text-blue vtk-cursor-pointer d-inline-flex align-center text-body-2\"\r\n >\r\n 高级\r\n </span>\r\n </VBadge>\r\n </template>\r\n </VTextField>\r\n </template>\r\n \r\n <VCard style=\"width: 380px;margin-right: -16px;\">\r\n <VCardTitle class=\"pr-3 d-flex justify-space-between align-center pb-5\">\r\n <span>高级搜索</span>\r\n <VBtn class=\"mx-0\" variant=\"text\" icon @click=\"close\" size=\"small\">\r\n <VIcon>mdi-close</VIcon>\r\n </VBtn>\r\n </VCardTitle>\r\n \r\n <VCardText>\r\n <slot></slot>\r\n </VCardText>\r\n \r\n <VCardActions class=\"pt-0 px-4 pb-3\">\r\n <slot name=\"actions\"></slot>\r\n <VSpacer />\r\n <VBtn @click=\"search\" variant=\"flat\" color=\"primary\">\r\n <VIcon class=\"mr-1\">mdi-magnify</VIcon>搜索\r\n </VBtn>\r\n <VBtn @click=\"reset\" variant=\"flat\" color=\"error\">\r\n <VIcon class=\"mr-1\">mdi-sync</VIcon>重置\r\n </VBtn>\r\n </VCardActions>\r\n </VCard>\r\n </VMenu>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, onMounted, watch } from 'vue';\r\n\r\ndefineOptions({\r\n name: \"VtkSearch\"\r\n});\r\n\r\nconst props = defineProps({\r\n value: {\r\n type: Object,\r\n default: () => ({})\r\n }\r\n});\r\n\r\nconst emit = defineEmits(['update:value', 'search']);\r\n\r\n// 响应式数据\r\nconst user = ref({});\r\nconst menu = ref(false);\r\nconst queryParam = ref({ ...props.value });\r\nconst initialIndex = ref(0);\r\n\r\n// 监听 props.value 的变化\r\nwatch(\r\n () => props.value,\r\n (newVal) => {\r\n queryParam.value = { ...newVal };\r\n },\r\n { deep: true }\r\n);\r\n\r\nonMounted(() => {\r\n user.value = JSON.parse(localStorage.getItem(\"user\") || \"{}\");\r\n initialIndex.value = 0;\r\n});\r\n\r\n// 方法\r\nconst obtain = () => {\r\n if (!menu.value) {\r\n initialIndex.value = 0;\r\n }\r\n};\r\n\r\nconst close = () => {\r\n menu.value = false;\r\n obtain();\r\n};\r\n\r\nconst search = () => {\r\n close();\r\n emit('update:value', queryParam.value);\r\n emit(\"search\");\r\n};\r\n\r\n// 重置\r\nconst reset = () => {\r\n // 简化版重置逻辑\r\n Object.keys(queryParam.value).forEach(key => {\r\n if (key !== 'condition') {\r\n delete queryParam.value[key];\r\n }\r\n });\r\n\r\n delete queryParam.value.condition;\r\n initialIndex.value = 0;\r\n emit('update:value', queryParam.value);\r\n emit(\"search\");\r\n menu.value = false;\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.search {\r\n position: relative;\r\n min-width: 380px;\r\n min-height: 40px;\r\n}\r\n\r\n.box {\r\n min-width: 380px;\r\n min-height: 40px;\r\n}\r\n\r\n:deep(.box .v-field__append-inner) {\r\n cursor: pointer;\r\n padding-left: 16px !important;\r\n padding-right: 4px !important;\r\n border-left: 1px #cccccc88 solid;\r\n min-width: 50px;\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n</style>","<template>\n <VSelect \n v-bind=\"filteredAttrs\" \n :items=\"items\" \n item-title=\"codeValue\" \n item-value=\"code\" \n :multiple=\"multi\"\n :menu-props=\"{ offsetY: true }\" \n @update:model-value=\"$emit('update:modelValue', $event)\"\n />\n</template>\n\n<script setup>\nimport { ref, onMounted, useAttrs, computed } from 'vue'\nimport Request from \"../../commons/request\";\n\n// 定义组件名称和选项\ndefineOptions({\n name: \"VtkSelect\",\n inheritAttrs: false\n});\n\n// 定义 props\nconst props = defineProps({\n // 数据库字段名字(DISABLE_TYPE) 或 静态的字段(0:否/1:是)\n list: {\n type: String,\n default: null,\n },\n multi: {\n type: Boolean,\n default: false,\n },\n});\n\n// 定义 emits\nconst emit = defineEmits(['update:modelValue']);\n\n// 获取所有传递的属性\nconst attrs = useAttrs();\n\n// 过滤属性,排除组件内部使用的属性\nconst filteredAttrs = computed(() => {\n const { list, multi, ...rest } = attrs;\n return rest;\n});\n\n// 响应式数据\nconst items = ref([]);\n\n// 方法定义\nconst miscs = () => {\n Request.getForm(`dict/misc/list/${props.list}`).then((res) => {\n items.value = res.data;\n });\n};\n\nconst statc = () => {\n if (!props.list) return;\n \n props.list.split(\"/\").forEach((it) => {\n const its = it.split(\":\");\n items.value.push({ code: its[0], codeValue: its[1] });\n });\n};\n\n// 生命周期钩子\nonMounted(() => {\n if (props.list) {\n if (props.list.includes(\":\")) {\n statc();\n } else {\n miscs();\n }\n }\n});\n\n// 使用方式\n// <vtk-select\n// v-model=\"value\"\n// list=\"YOUR_LIST\"\n// variant=\"outlined\" <!-- 样式变体 -->\n// density=\"compact\" <!-- 密度 'default' | 'comfortable' | 'compact' -->\n// clearable <!-- 可清除 -->\n// placeholder=\"请选择\" <!-- 占位符 -->\n// :rules=\"rules\" <!-- 验证规则 -->\n// disabled <!-- 禁用状态 -->\n// readonly <!-- 只读状态 -->\n// hide-details <!-- 隐藏详情信息 -->\n// />\n\n</script>\n\n<style scoped>\n::-webkit-scrollbar {\n width: 6px;\n}\n\n::-webkit-scrollbar-thumb {\n border-radius: 3px;\n height: 100px;\n background-color: #007acc;\n}\n</style>","<template>\r\n\t<VStepper class=\"elevation-0\" v-model=\"stepIndex\">\r\n\t\t<VStepperHeader class=\"elevation-0\" style=\"overflow: hidden;\">\r\n\t\t\t<VRow class=\"stepList\">\r\n\t\t\t\t<VCol class=\"pl-0 colItem\" v-for=\"(item, index) in step\" :key=\"index\" style=\"\">\r\n\t\t\t\t\t<div class=\"first-box1 last-box pl-10 py-5 stepItem\" :class=\"stepIndex > index? 'selected' : ''\"\r\n\t\t\t\t\t\t:complete=\"stepIndex > index\" :step=\"index + 1\">\r\n\t\t\t\t\t\t{{ item }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</VCol>\r\n\t\t\t</VRow>\r\n\t\t</VStepperHeader>\r\n\r\n\t\t<VStepperWindow>\r\n\t\t\t<VStepperWindowItem v-for=\"(item, index) in list\" :key=\"index\" :value=\"index + 1\">\r\n\t\t\t\t<slot :name=\"index + 1\"></slot>\r\n\t\t\t</VStepperWindowItem>\r\n\t\t\t<slot></slot>\r\n\t\t</VStepperWindow>\r\n\t</VStepper>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, watch, onMounted } from 'vue';\r\n\r\n// 定义组件名称\r\ndefineOptions({\r\n\tname: \"VtkStepper\",\r\n\tinheritAttrs: false,\r\n});\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n\tlist: {\r\n\t\ttype: String,\r\n\t\tdefault: null,\r\n\t},\r\n\tel: {\r\n\t\ttype: Number,\r\n\t\tdefault: 1,\r\n\t},\r\n});\r\n\r\n// 响应式数据\r\nconst stepIndex = ref(props.el);\r\nconst step = ref([]);\r\n\r\n// 监听el属性变化\r\nwatch(() => props.el, (val) => {\r\n\tstepIndex.value = val;\r\n});\r\n\r\n// 处理内容\r\nconst content = () => {\r\n\tif (props.list) {\r\n\t\tstep.value = props.list.split(\",\");\r\n\t}\r\n};\r\n\r\n// 组件挂载时执行\r\nonMounted(() => {\r\n\tcontent();\r\n});\r\n\r\n// 监听list变化\r\nwatch(() => props.list, () => {\r\n\tcontent();\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n// 颜色变量定义\r\n$color-background: #c7ccd538;\r\n$color-selected: #165dff;\r\n$color-white: #fff;\r\n$color-light-bg: #f2f3f5;\r\n$color-dark-bg: #1e1e1e;\r\n\r\n.v-stepper__step {\r\n\tbackground: $color-background;\r\n\tposition: relative;\r\n}\r\n\r\n// 隐藏步骤数字\r\n:deep(.v-stepper__step__step) {\r\n\tdisplay: none !important;\r\n}\r\n\r\n.stepItem {\r\n\talign-items: center;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tpadding: 24px;\r\n\tposition: relative;\r\n\tbackground: $color-background;\r\n\r\n\t// 暗色主题样式\r\n\t.v-theme--dark & {\r\n\t\tcolor: rgba(255, 255, 255, 0.5);\r\n\t}\r\n\r\n\t// 选中状态\r\n\t&.selected {\r\n\t\tbackground: $color-selected;\r\n\t\tcolor: $color-white !important;\r\n\r\n\t\t&.last-box::after {\r\n\t\t\tborder-color: transparent transparent transparent $color-selected;\r\n\t\t}\r\n\r\n\t\t:deep(.v-stepper__label) {\r\n\t\t\tcolor: $color-white !important;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n.colItem {\r\n\t&:first-child .first-box1::before {\r\n\t\tborder-color: transparent !important;\r\n\t}\r\n\r\n\t&:last-child .last-box::after {\r\n\t\tborder-color: transparent !important;\r\n\t}\r\n}\r\n\r\n.first-box1::before {\r\n\tposition: absolute;\r\n\tleft: 0;\r\n\tcontent: \"\";\r\n\twidth: 0;\r\n\theight: 0;\r\n\tz-index: 0;\r\n\tborder: 30px solid;\r\n\tborder-color: transparent transparent transparent $color-white;\r\n\r\n\t.v-theme--dark & {\r\n\t\tborder-color: transparent transparent transparent $color-dark-bg;\r\n\t}\r\n}\r\n\r\n.last-box::after {\r\n\tposition: absolute;\r\n\tright: -70px;\r\n\tcontent: \"\";\r\n\tz-index: 1;\r\n\twidth: 0;\r\n\theight: 0;\r\n\tborder: 35px solid;\r\n\tborder-color: transparent transparent transparent $color-light-bg;\r\n\r\n\t.v-theme--dark & {\r\n\t\tborder-color: transparent transparent transparent $color-background;\r\n\t}\r\n}\r\n\r\n.theme--dark.v-stepper {\r\n\tbackground: transparent;\r\n}\r\n</style>","/**\r\n * 将数值转换成中文 '0:未启/1:已启'\r\n * \r\n * @param {*} val 数值\r\n * @param {*} map 值对\r\n * @return {string} 中文值\r\n */\r\nexport function dict(val, map) {\r\n let value = \"\";\r\n if (val && val.includes(\",\")) {\r\n value = val.split(\",\").map(item => pre(item, map)).join();\r\n } else {\r\n value = pre(val, map)\r\n }\r\n return value;\r\n}\r\n\r\nfunction pre(value, map) {\r\n if (value) {\r\n var val = Array.isArray(value) ? value : value.split(\",\");\r\n var maps = map?.split(\"/\");\r\n var results = []; // 创建一个空数组,用于存储匹配到的值\r\n // 遍历 val 数组\r\n for (var j = 0; j < val?.length; j++) {\r\n var currentVal = val[j]; // 获取当前要查找的键\r\n for (var i in maps) {\r\n var kv = maps[i].split(\":\");\r\n if (kv[0] == currentVal) {\r\n results.push(kv[1]); // 将匹配到的值添加到结果数组中\r\n break; // 找到匹配项后,跳出内层循环\r\n }\r\n }\r\n }\r\n return results.length > 0 ? results.join() : \"其他\";\r\n }\r\n\r\n}\r\n\r\n\r\n/**\r\n * 1,2字符残疾类别转换\r\n * \r\n * @param {*} val 数值\r\n * @return {string} 中文值\r\n */\r\nexport function analyType(val) {\r\n if (!val) {\r\n return ''\r\n }\r\n let newVal = ''\r\n let arr = ['视力', '听力', '言语', '肢体', '智力', '精神', '多重']\r\n for (let i = 1; i < 8; i++) {\r\n if (i === 1) {\r\n newVal = val.replace(i.toString(), arr[i - 1])\r\n } else {\r\n newVal = newVal.replace(i.toString(), arr[i - 1])\r\n }\r\n }\r\n return newVal;\r\n}\r\nexport function analyLevel(val) {\r\n if (!val) {\r\n return ''\r\n }\r\n let newVal = ''\r\n let arr = ['一级', '二级', '三级', '四级', '不限等级']\r\n for (let i = 1; i < 7; i++) {\r\n if (i === 1) {\r\n newVal = val.replace(i.toString(), arr[i - 1])\r\n } else {\r\n newVal = newVal.replace(i.toString(), arr[i - 1])\r\n }\r\n }\r\n return newVal;\r\n}","/**\r\n * \r\n * @param {*} value 需格式化的时间\r\n * @param {*} fmt 格式\r\n */\r\nexport function date(value, fmt) {\r\n if (!value || value == '无' || value == null) {\r\n fmt = '无';\r\n return fmt;\r\n }\r\n let getDate = new Date(value)\r\n let o = {\r\n 'M+': getDate.getMonth() + 1,\r\n 'd+': getDate.getDate(),\r\n 'h+': getDate.getHours(),\r\n 'm+': getDate.getMinutes(),\r\n 's+': getDate.getSeconds(),\r\n 'q+': Math.floor((getDate.getMonth() + 3) / 3),\r\n 'S': getDate.getMilliseconds()\r\n }\r\n if (/(y+)/.test(fmt)) {\r\n fmt = fmt.replace(RegExp.$1, (getDate.getFullYear() + '').substr(4 - RegExp.$1.length))\r\n }\r\n for (let k in o) {\r\n if (new RegExp('(' + k + ')').test(fmt)) {\r\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))\r\n }\r\n }\r\n return fmt\r\n\r\n}\r\n\r\n\r\n/**\r\n * 数字格式化 '0,000.00'\r\n * @param {*} val 数值\r\n * @param {*} fmt 格式\r\n * @return {string} 数字字符串\r\n */\r\nexport function num(val, fmt) {\r\n if (isNaN(val) || val === '' || val === null) {\r\n return val;\r\n }\r\n\r\n // 移除了对Strings和Datetime的依赖,这些在当前上下文中未定义\r\n var numValue = parseFloat(val);\r\n var neg = numValue < 0 ? \"-\" : \"\"; // 正负数\r\n var absValue = Math.abs(numValue);\r\n\r\n // 解析格式字符串,确定小数位数\r\n var fix = 0;\r\n if (fmt && fmt.includes('.')) {\r\n fix = fmt.length - fmt.lastIndexOf('.') - 1;\r\n }\r\n\r\n // 是否需要千分位分隔符\r\n var needSep = fmt && fmt.includes(',');\r\n\r\n // 处理小数部分\r\n var xs = fix > 0 ? absValue.toFixed(fix) : Math.round(absValue);\r\n var decimalPart = fix > 0 ? '.' + xs.toString().split('.')[1] : '';\r\n\r\n // 处理整数部分\r\n var integerPart = fix > 0 ? Math.floor(absValue).toString() : xs.toString();\r\n\r\n // 添加千分位分隔符\r\n if (needSep && integerPart.length > 3) {\r\n integerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n }\r\n\r\n return neg + integerPart + decimalPart;\r\n}\r\n\r\n\r\n/**\r\n * 年龄\r\n * @param {*} val 时间 yyyy-MM-dd\r\n * @return {string} 年龄\r\n */\r\nexport function age(val) {\r\n let birthdays = new Date(val.slice(0, 10).replace(/-/g, \"/\"));\r\n let d = new Date();\r\n let age = d.getFullYear() - birthdays.getFullYear() - ((d.getMonth() < birthdays.getMonth() || (d.getMonth() === birthdays.getMonth() && d.getDate() < birthdays.getDate())) ? 1 : 0);\r\n return age;\r\n}\r\n\r\n/**\r\n * 指定中文大于len,用...省略号表示,达到美观效果\r\n * @param {*} val 需格式的中文\r\n * @param {*} len 需格式的长度\r\n */\r\nexport function txt(val, len) {\r\n if (val?.length > len) {\r\n return val.slice(0, len) + \"...\";\r\n } else {\r\n return val;\r\n }\r\n\r\n}\r\n\r\n/**\r\n * 取数据绝对值\r\n * @param {*} val 手机号\r\n */\r\nexport function abs(val) {\r\n return isNaN(val) ? 0 : Math.abs(val)\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","/**\r\n * 脱敏手机号码\r\n * @param {*} val 手机号\r\n * @return {string} 手机号码\r\n */\r\nexport function mobile(val) {\r\n return val.replace(/(\\d{3})\\d{4}(\\d{4})/, \"$1****$2\");\r\n}\r\n\r\n\r\n/**\r\n * 脱敏身份证号\r\n * @param {*} val 身份证号\r\n * @return {string} 身份证号\r\n */\r\nexport function idcard(val) {\r\n if (val) {\r\n return val.replace(/^(.{4})(?:\\d+)(.{4})$/, \"$1** **** ****$2\");\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","export const red = {\n base: '#f44336',\n lighten5: '#ffebee',\n lighten4: '#ffcdd2',\n lighten3: '#ef9a9a',\n lighten2: '#e57373',\n lighten1: '#ef5350',\n darken1: '#e53935',\n darken2: '#d32f2f',\n darken3: '#c62828',\n darken4: '#b71c1c',\n accent1: '#ff8a80',\n accent2: '#ff5252',\n accent3: '#ff1744',\n accent4: '#d50000'\n};\nexport const pink = {\n base: '#e91e63',\n lighten5: '#fce4ec',\n lighten4: '#f8bbd0',\n lighten3: '#f48fb1',\n lighten2: '#f06292',\n lighten1: '#ec407a',\n darken1: '#d81b60',\n darken2: '#c2185b',\n darken3: '#ad1457',\n darken4: '#880e4f',\n accent1: '#ff80ab',\n accent2: '#ff4081',\n accent3: '#f50057',\n accent4: '#c51162'\n};\nexport const purple = {\n base: '#9c27b0',\n lighten5: '#f3e5f5',\n lighten4: '#e1bee7',\n lighten3: '#ce93d8',\n lighten2: '#ba68c8',\n lighten1: '#ab47bc',\n darken1: '#8e24aa',\n darken2: '#7b1fa2',\n darken3: '#6a1b9a',\n darken4: '#4a148c',\n accent1: '#ea80fc',\n accent2: '#e040fb',\n accent3: '#d500f9',\n accent4: '#aa00ff'\n};\nexport const deepPurple = {\n base: '#673ab7',\n lighten5: '#ede7f6',\n lighten4: '#d1c4e9',\n lighten3: '#b39ddb',\n lighten2: '#9575cd',\n lighten1: '#7e57c2',\n darken1: '#5e35b1',\n darken2: '#512da8',\n darken3: '#4527a0',\n darken4: '#311b92',\n accent1: '#b388ff',\n accent2: '#7c4dff',\n accent3: '#651fff',\n accent4: '#6200ea'\n};\nexport const indigo = {\n base: '#3f51b5',\n lighten5: '#e8eaf6',\n lighten4: '#c5cae9',\n lighten3: '#9fa8da',\n lighten2: '#7986cb',\n lighten1: '#5c6bc0',\n darken1: '#3949ab',\n darken2: '#303f9f',\n darken3: '#283593',\n darken4: '#1a237e',\n accent1: '#8c9eff',\n accent2: '#536dfe',\n accent3: '#3d5afe',\n accent4: '#304ffe'\n};\nexport const blue = {\n base: '#2196f3',\n lighten5: '#e3f2fd',\n lighten4: '#bbdefb',\n lighten3: '#90caf9',\n lighten2: '#64b5f6',\n lighten1: '#42a5f5',\n darken1: '#1e88e5',\n darken2: '#1976d2',\n darken3: '#1565c0',\n darken4: '#0d47a1',\n accent1: '#82b1ff',\n accent2: '#448aff',\n accent3: '#2979ff',\n accent4: '#2962ff'\n};\nexport const lightBlue = {\n base: '#03a9f4',\n lighten5: '#e1f5fe',\n lighten4: '#b3e5fc',\n lighten3: '#81d4fa',\n lighten2: '#4fc3f7',\n lighten1: '#29b6f6',\n darken1: '#039be5',\n darken2: '#0288d1',\n darken3: '#0277bd',\n darken4: '#01579b',\n accent1: '#80d8ff',\n accent2: '#40c4ff',\n accent3: '#00b0ff',\n accent4: '#0091ea'\n};\nexport const cyan = {\n base: '#00bcd4',\n lighten5: '#e0f7fa',\n lighten4: '#b2ebf2',\n lighten3: '#80deea',\n lighten2: '#4dd0e1',\n lighten1: '#26c6da',\n darken1: '#00acc1',\n darken2: '#0097a7',\n darken3: '#00838f',\n darken4: '#006064',\n accent1: '#84ffff',\n accent2: '#18ffff',\n accent3: '#00e5ff',\n accent4: '#00b8d4'\n};\nexport const teal = {\n base: '#009688',\n lighten5: '#e0f2f1',\n lighten4: '#b2dfdb',\n lighten3: '#80cbc4',\n lighten2: '#4db6ac',\n lighten1: '#26a69a',\n darken1: '#00897b',\n darken2: '#00796b',\n darken3: '#00695c',\n darken4: '#004d40',\n accent1: '#a7ffeb',\n accent2: '#64ffda',\n accent3: '#1de9b6',\n accent4: '#00bfa5'\n};\nexport const green = {\n base: '#4caf50',\n lighten5: '#e8f5e9',\n lighten4: '#c8e6c9',\n lighten3: '#a5d6a7',\n lighten2: '#81c784',\n lighten1: '#66bb6a',\n darken1: '#43a047',\n darken2: '#388e3c',\n darken3: '#2e7d32',\n darken4: '#1b5e20',\n accent1: '#b9f6ca',\n accent2: '#69f0ae',\n accent3: '#00e676',\n accent4: '#00c853'\n};\nexport const lightGreen = {\n base: '#8bc34a',\n lighten5: '#f1f8e9',\n lighten4: '#dcedc8',\n lighten3: '#c5e1a5',\n lighten2: '#aed581',\n lighten1: '#9ccc65',\n darken1: '#7cb342',\n darken2: '#689f38',\n darken3: '#558b2f',\n darken4: '#33691e',\n accent1: '#ccff90',\n accent2: '#b2ff59',\n accent3: '#76ff03',\n accent4: '#64dd17'\n};\nexport const lime = {\n base: '#cddc39',\n lighten5: '#f9fbe7',\n lighten4: '#f0f4c3',\n lighten3: '#e6ee9c',\n lighten2: '#dce775',\n lighten1: '#d4e157',\n darken1: '#c0ca33',\n darken2: '#afb42b',\n darken3: '#9e9d24',\n darken4: '#827717',\n accent1: '#f4ff81',\n accent2: '#eeff41',\n accent3: '#c6ff00',\n accent4: '#aeea00'\n};\nexport const yellow = {\n base: '#ffeb3b',\n lighten5: '#fffde7',\n lighten4: '#fff9c4',\n lighten3: '#fff59d',\n lighten2: '#fff176',\n lighten1: '#ffee58',\n darken1: '#fdd835',\n darken2: '#fbc02d',\n darken3: '#f9a825',\n darken4: '#f57f17',\n accent1: '#ffff8d',\n accent2: '#ffff00',\n accent3: '#ffea00',\n accent4: '#ffd600'\n};\nexport const amber = {\n base: '#ffc107',\n lighten5: '#fff8e1',\n lighten4: '#ffecb3',\n lighten3: '#ffe082',\n lighten2: '#ffd54f',\n lighten1: '#ffca28',\n darken1: '#ffb300',\n darken2: '#ffa000',\n darken3: '#ff8f00',\n darken4: '#ff6f00',\n accent1: '#ffe57f',\n accent2: '#ffd740',\n accent3: '#ffc400',\n accent4: '#ffab00'\n};\nexport const orange = {\n base: '#ff9800',\n lighten5: '#fff3e0',\n lighten4: '#ffe0b2',\n lighten3: '#ffcc80',\n lighten2: '#ffb74d',\n lighten1: '#ffa726',\n darken1: '#fb8c00',\n darken2: '#f57c00',\n darken3: '#ef6c00',\n darken4: '#e65100',\n accent1: '#ffd180',\n accent2: '#ffab40',\n accent3: '#ff9100',\n accent4: '#ff6d00'\n};\nexport const deepOrange = {\n base: '#ff5722',\n lighten5: '#fbe9e7',\n lighten4: '#ffccbc',\n lighten3: '#ffab91',\n lighten2: '#ff8a65',\n lighten1: '#ff7043',\n darken1: '#f4511e',\n darken2: '#e64a19',\n darken3: '#d84315',\n darken4: '#bf360c',\n accent1: '#ff9e80',\n accent2: '#ff6e40',\n accent3: '#ff3d00',\n accent4: '#dd2c00'\n};\nexport const brown = {\n base: '#795548',\n lighten5: '#efebe9',\n lighten4: '#d7ccc8',\n lighten3: '#bcaaa4',\n lighten2: '#a1887f',\n lighten1: '#8d6e63',\n darken1: '#6d4c41',\n darken2: '#5d4037',\n darken3: '#4e342e',\n darken4: '#3e2723'\n};\nexport const blueGrey = {\n base: '#607d8b',\n lighten5: '#eceff1',\n lighten4: '#cfd8dc',\n lighten3: '#b0bec5',\n lighten2: '#90a4ae',\n lighten1: '#78909c',\n darken1: '#546e7a',\n darken2: '#455a64',\n darken3: '#37474f',\n darken4: '#263238'\n};\nexport const grey = {\n base: '#9e9e9e',\n lighten5: '#fafafa',\n lighten4: '#f5f5f5',\n lighten3: '#eeeeee',\n lighten2: '#e0e0e0',\n lighten1: '#bdbdbd',\n darken1: '#757575',\n darken2: '#616161',\n darken3: '#424242',\n darken4: '#212121'\n};\nexport const shades = {\n black: '#000000',\n white: '#ffffff',\n transparent: '#ffffff00'\n};\nexport default {\n red,\n pink,\n purple,\n deepPurple,\n indigo,\n blue,\n lightBlue,\n cyan,\n teal,\n green,\n lightGreen,\n lime,\n yellow,\n amber,\n orange,\n deepOrange,\n brown,\n blueGrey,\n grey,\n shades\n};\n//# sourceMappingURL=colors.js.map","import colors from 'vuetify/lib/util/colors';\r\n\r\nconst theme_colors = [\r\n {\r\n name: 'Blue-light',\r\n scheme: 'md-blue-500-scheme',\r\n dark: true,\r\n primary: colors.blue.base,\r\n secondary: colors.blue.lighten4, // #FFCDD2\r\n accent: colors.blue.accent2, // #3F51B5\r\n },\r\n {\r\n name: 'Yellow-light',\r\n scheme: 'md-amber-a700-scheme',\r\n dark: true,\r\n primary: colors.amber.darken1,\r\n secondary: colors.amber.lighten4, // #FFCDD2\r\n accent: colors.amber.accent2, // #3F51B5\r\n },\r\n {\r\n name: 'Red-light',\r\n scheme: 'md-red-a400-scheme',\r\n dark: true,\r\n primary: colors.red.accent3,\r\n secondary: colors.red.lighten4, // #FFCDD2\r\n accent: colors.red.accent2, // #3F51B5\r\n },\r\n {\r\n name: 'Pink-light',\r\n dark: false,\r\n scheme: 'md-pink-a100-scheme',\r\n primary: colors.pink.accent1,\r\n secondary: colors.pink.lighten4, // #FFCDD2\r\n accent: colors.pink.accent2, // #3F51B5\r\n },\r\n {\r\n name: 'Purple-light',\r\n dark: false,\r\n scheme: 'md-purple-a700-scheme',\r\n primary: colors.purple.accent4,\r\n secondary: colors.purple.lighten4, // #FFCDD2\r\n accent: colors.purple.accent2, // #3F51B5\r\n },\r\n {\r\n name: 'DeepPurple-light',\r\n dark: false,\r\n scheme: 'md-deep-purple-a700-scheme',\r\n primary: colors.deepPurple.base,\r\n secondary: colors.deepPurple.lighten4, // #FFCDD2\r\n accent: colors.deepPurple.accent2, // #3F51B5\r\n }\r\n];\r\n\r\nconst navi_colors = [\r\n {\r\n name: 'black',\r\n class: 'black'\r\n },\r\n {\r\n name: 'red-pink',\r\n class: 'gradient-red-pink'\r\n },\r\n {\r\n name: 'blue-grey-blue',\r\n class: 'gradient-blue-grey-blue'\r\n },\r\n {\r\n name: 'green-teal',\r\n class: 'gradient-green-teal'\r\n },\r\n {\r\n name: 'purple-deep-purple',\r\n class: 'gradient-purple-deep-purple'\r\n },\r\n {\r\n name: 'purple-amber',\r\n class: 'gradient-purple-amber'\r\n },\r\n {\r\n name: 'indigo-purple',\r\n class: 'gradient-indigo-purple'\r\n },\r\n {\r\n name: 'deep-purple-blue',\r\n class: 'gradient-deep-purple-blue'\r\n },\r\n {\r\n name: 'deep-orange-orange',\r\n class: 'gradient-deep-orange-orange'\r\n },\r\n {\r\n name: 'light-blue-cyan',\r\n class: 'gradient-light-blue-cyan'\r\n },\r\n {\r\n name: 'timber',\r\n class: 'gradient-timber'\r\n },\r\n {\r\n name: 'strawberry',\r\n class: 'gradient-strawberry'\r\n },\r\n {\r\n name: 'orange',\r\n class: 'gradient-orange'\r\n },\r\n {\r\n name: 'pomegranate',\r\n class: 'gradient-pomegranate'\r\n },\r\n {\r\n name: 'green-tea',\r\n class: 'gradient-green-tea'\r\n },\r\n {\r\n name: 'blackberry',\r\n class: 'gradient-blackberry'\r\n },\r\n {\r\n name: 'plum',\r\n class: 'gradient-plum'\r\n },\r\n {\r\n name: 'passion-fruit',\r\n class: 'gradient-passion-fruit'\r\n },\r\n {\r\n name: 'sublime-vivid',\r\n class: 'gradient-sublime-vivid'\r\n },\r\n {\r\n name: 'summer',\r\n class: 'gradient-summer'\r\n },\r\n {\r\n name: 'crystal-clear',\r\n class: 'gradient-crystal-clear'\r\n },\r\n {\r\n name: 'dawn',\r\n class: 'gradient-dawn'\r\n },\r\n {\r\n name: 'grapefruit-sunset',\r\n class: 'gradient-grapefruit-sunset'\r\n },\r\n {\r\n name: 'man-of-steel',\r\n class: 'gradient-man-of-steel'\r\n }\r\n]\r\n\r\nexport default { theme_colors, navi_colors }\r\n","/** https://github.com/shadowOfCode/bee.js */\r\nconst Validation = {\r\n //手机号码\r\n isMobile: function (input) {\r\n return /^(?:\\+86)?(?:13\\d|14[57]|15[0-35-9]|17[35-8]|18\\d)\\d{8}$|^(?:\\+86)?170[057-9]\\d{7}$/.test(input);\r\n },\r\n //手机号码简单校验,只校验长度\r\n isMobileSize: function (input) {\r\n return /^(?:\\+86)?1\\d{10}$/.test(input);\r\n },\r\n isPhone: function (input) {\r\n return /^(?:\\(\\d{3,4}\\)|\\d{3,4}-)?\\d{7,8}(?:-\\d{1,4})?$/.test(input);\r\n },\r\n isCall: (input) => {\r\n return this.isPhone(input) || this.isMobile(input);\r\n },\r\n //邮箱格式校验\r\n isEmail: function (input) {\r\n return /^[-\\w+]+(?:\\.[-\\w]+)*@[-a-z0-9]+(?:\\.[a-z0-9]+)*(?:\\.[a-z]{2,})$/i.test(input);\r\n },\r\n //18位身份证简单校验\r\n isIdCardSimple: function (idCard) {\r\n return /^(?:1[1-5]|2[1-3]|3[1-7]|4[1-6]|5[0-4]|6[1-5])\\d{4}(?:1[89]|20)\\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\\d|3[01])\\d{3}(?:\\d|[xX])$/.test(idCard);\r\n },\r\n // 真实姓名校验\r\n isName: function (input) {\r\n return /^([\\u4e00-\\u9fa5]{1,20}|[a-zA-Z.\\s]{1,20})$/.test(input);\r\n },\r\n //\r\n //18位身份证严格校验\r\n isIdCard: function (idCard) {\r\n let checkCode = (input) => {\r\n var multiplier = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\r\n var ids = input.split(\"\");\r\n var len = 17, sum = 0;\r\n for (var i = 0; i < len; i++) {\r\n sum += ids[i] * multiplier[i];\r\n }\r\n var remainder = sum % 11;\r\n var checkCodeArr = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\r\n var result = checkCodeArr[remainder];\r\n return result === input[17];\r\n }\r\n //先校验格式\r\n if (this.isIdCardSimple(idCard)) {\r\n //校验日期时间是否合法\r\n var dateStr = idCard.substr(6, 8);\r\n var dateStrNew = dateStr.replace(/(\\d{4})(\\d{2})(\\d{2})/, \"$1/$2/$3\");\r\n var dateObj = new Date(dateStrNew);\r\n var month = dateObj.getMonth() + 1;\r\n if (parseInt(dateStr.substr(4, 2)) === month) {\r\n return checkCode(idCard);\r\n }\r\n }\r\n return false;\r\n },\r\n getFromIdCard: (idCard) => {\r\n var area = idCard.substr(0, 6);\r\n var birth = idCard.substr(6, 8).replace(/(\\d{4})(\\d{2})(\\d{2})/, '$1年$2月$3日');\r\n var age = new Date().getFullYear() - idCard.substr(6, 4) + 1;\r\n var sex = (idCard.substr(16, 1) % 2 === 0) ? '女' : '男';\r\n\r\n return {\r\n 'area': area,\r\n 'birth': birth,\r\n 'age': age,\r\n 'sex': sex\r\n };\r\n }\r\n};\r\n\r\nexport default Validation;","<template>\n <VDialog v-model=\"isActive\" persistent :width=\"options.width\">\n <VCard :color=\"options.color\">\n <VCardTitle>{{ options.title }}</VCardTitle>\n <VCardText v-if=\"options.text\">\n {{ options.text }}\n </VCardText>\n <VCardActions>\n <VSpacer />\n <VBtn text @click=\"close_modal\">确定</VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n\n<script setup>\nimport { computed } from 'vue'\nimport { useMessageStore } from '../../stores/message.js' // 根据实际路径调整\n\nconst messageStore = useMessageStore()\n\n\n// 使用 computed 获取响应式数据\nconst isActive = computed(() => messageStore.alert?.isActive || false)\nconst options = computed(() => messageStore.alert?.options || {})\n\n// 关闭模态框方法\nconst close_modal = () => {\n messageStore.hide('alert')\n}\n</script>","<template>\n <VDialog v-model=\"isActive\" persistent :max-width=\"options.width || 400\">\n <VCard :color=\"options.color\">\n <VCardTitle>{{ options.title }}</VCardTitle>\n <VCardText v-if=\"options.text\">\n {{ options.text }}\n </VCardText>\n <VCardActions>\n <VSpacer />\n <VBtn text @click=\"cancel\">{{ options.cancelText || '取消' }}</VBtn>\n <VBtn text @click=\"confirm\">{{ options.confirmText || '确定' }}</VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n\n<script setup>\nimport { computed } from 'vue'\nimport { useMessageStore } from '../../stores/message.js'\n\nconst messageStore = useMessageStore()\n\n// 使用 computed 获取响应式数据\nconst isActive = computed(() => messageStore.confirm?.isActive || false)\nconst options = computed(() => messageStore.confirm?.options || {})\n\n// 确认操作\nconst confirm = () => {\n // 如果 options.onConfirm 存在则执行回调\n if (typeof options.value.onConfirm === 'function') {\n options.value.onConfirm()\n }\n messageStore.hide('confirm')\n}\n\n// 取消操作\nconst cancel = () => {\n // 如果 options.onCancel 存在则执行回调\n if (typeof options.value.onCancel === 'function') {\n options.value.onCancel()\n }\n messageStore.hide('confirm')\n}\n</script>","<template>\r\n <v-overlay v-model=\"isActive\" persistent class=\"align-center justify-center\" :style=\"{ zIndex: 9999 }\">\r\n <v-progress-circular indeterminate size=\"64\" width=\"6\" color=\"primary\"></v-progress-circular>\r\n </v-overlay>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed } from 'vue'\r\nimport { useMessageStore } from '../../stores/message.js'\r\n\r\nconst messageStore = useMessageStore()\r\n\r\nconst isActive = computed(() => messageStore.loading?.isActive || false)\r\n</script>\r\n","<template>\r\n <div class=\"text-center\">\r\n <vtk-alert />\r\n <vtk-confirm />\r\n <vtk-loading />\r\n <vtk-prompt />\r\n <vtk-toast />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport vtkAlert from \"./alert.vue\";\r\nimport vtkConfirm from \"./confirm.vue\";\r\nimport vtkLoading from \"./loading.vue\";\r\nimport vtkPrompt from \"./prompt.vue\";\r\nimport vtkToast from \"./toast.vue\";\r\nexport default {\r\n name: \"vtkMessage\",\r\n components: {\r\n vtkAlert,\r\n vtkConfirm,\r\n vtkLoading,\r\n vtkPrompt,\r\n vtkToast,\r\n },\r\n};\r\n</script>","<template>\n <VDialog v-model=\"isActive\" persistent :width=\"options.width\">\n <VCard :color=\"options.color\">\n <VCardTitle>{{ options.title }}</VCardTitle>\n <VCardText>\n <VTextField\n v-model=\"inputValue\"\n :label=\"options.label\"\n :placeholder=\"options.placeholder\"\n :type=\"options.inputType || 'text'\"\n outlined\n dense\n />\n <div v-if=\"options.text\" class=\"mt-2\">\n {{ options.text }}\n </div>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <VBtn text @click=\"cancel\">{{ options.cancelText || '取消' }}</VBtn>\n <VBtn text @click=\"confirm\">{{ options.confirmText || '确定' }}</VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n\n<script setup>\nimport { ref, computed } from 'vue'\nimport { useMessageStore } from '../../stores/message.js'\n\nconst messageStore = useMessageStore()\nconst inputValue = ref('')\n\n// 使用 computed 获取响应式数据\nconst isActive = computed(() => messageStore.prompt?.isActive || false)\nconst options = computed(() => messageStore.prompt?.options || {})\n\n// 确认操作\nconst confirm = () => {\n // 如果 options.onConfirm 存在则执行回调\n if (typeof options.value.onConfirm === 'function') {\n options.value.onConfirm(inputValue.value)\n }\n messageStore.hide('prompt')\n inputValue.value = '' // 清空输入值\n}\n\n// 取消操作\nconst cancel = () => {\n // 如果 options.onCancel 存在则执行回调\n if (typeof options.value.onCancel === 'function') {\n options.value.onCancel()\n }\n messageStore.hide('prompt')\n inputValue.value = '' // 清空输入值\n}\n</script>","<template>\n\t<VSnackbar v-model=\"isActive\" :timeout=\"options.timeout > 0 ? options.timeout : 3000\" :color=\"options.color\" centered @update:modelValue=\"onModelUpdate\">\n\t\t{{ options.text }}\n\t\t<template v-slot:actions>\n\t\t\t<VBtn text icon @click=\"close_modal()\">\n\t\t\t\t<VIcon>mdi-close</VIcon>\n\t\t\t</VBtn>\n\t\t</template>\n\t</VSnackbar>\n</template>\n\n<script setup>\nimport { computed } from \"vue\";\nimport { useMessageStore } from \"../../stores/message.js\";\n\nconst messageStore = useMessageStore();\n\nconst isActive = computed({\n\tget: () => messageStore.toast?.isActive || false,\n\tset: (value) => {\n\t\tif (messageStore.toast) {\n\t\t\tmessageStore.toast.isActive = value;\n\t\t}\n\t},\n});\n\nconst options = computed(() => messageStore.toast?.options || {});\n\nconst close_modal = () => {\n\tmessageStore.hide(\"toast\");\n};\n\n// 监听模型值更新\nconst onModelUpdate = (value) => {\n\tif (!value) {\n\t\t// Snackbar 关闭时确保 store 状态同步\n\t\tmessageStore.hide(\"toast\");\n\t}\n};\n</script>\n<style lang=\"scss\" scoped>\n::v-deep .v-snackbar__wrapper {\n\ttop: 24px;\n}\n</style>\n","/**\r\n * Specter PUI - Vue 3 组件库\r\n * 基于 Vuetify 3 的智能组件库\r\n */\r\n\r\n// 组件导出\r\nexport { default as VtkArea } from './components/assembly/VtkArea.vue'\r\nexport { default as VtkAreaTabs } from './components/assembly/VtkAreaTabs.vue'\r\nexport { default as VtkBreadcrumb } from './components/assembly/VtkBreadcrumb.vue'\r\nexport { default as VtkCheckbox } from './components/assembly/VtkCheckbox.vue'\r\nexport { default as VtkCount } from './components/assembly/VtkCount.vue'\r\nexport { default as VtkDatePicker } from './components/assembly/VtkDatePicker.vue'\r\nexport { default as VtkDept } from './components/assembly/VtkDept.vue'\r\nexport { default as VtkEmpty } from './components/assembly/VtkEmpty.vue'\r\nexport { default as VtkFab } from './components/assembly/VtkFab.vue'\r\nexport { default as VtkFormItem } from './components/assembly/VtkFormItem.vue'\r\nexport { default as VtkImg } from './components/assembly/VtkImg.vue'\r\nexport { default as VtkPage } from './components/assembly/VtkPage.vue'\r\nexport { default as VtkPdf } from './components/assembly/VtkPdf.vue'\r\nexport { default as VtkProj } from './components/assembly/VtkProj.vue'\r\nexport { default as VtkRadio } from './components/assembly/VtkRadio.vue'\r\nexport { default as VtkSearch } from './components/assembly/VtkSearch.vue'\r\nexport { default as VtkSelect } from './components/assembly/VtkSelect.vue'\r\nexport { default as VtkStepper } from './components/assembly/VtkStepper.vue'\r\n\r\n// 工具函数导出\r\nexport * from './commons/filters/dictionary.js'\r\nexport * from './commons/filters/format.js'\r\nexport * from './commons/filters/mask.js'\r\nexport { default as request } from './commons/request.js'\r\nexport { default as storage } from './commons/storage.js'\r\nexport { default as themes } from './commons/themes.js'\r\nexport * from './commons/validation.js'\r\n\r\n// Composables 导出\r\nexport { useMixins } from './composables/usePage.js'\r\n\r\n// 消息组件导出\r\nexport { default as vtkMessage } from './components/message/index.js'\r\n\r\n// 插件安装函数\r\nimport vtkMessage from './components/message/index.js'\r\nimport storage from './commons/storage.js'\r\nimport themes from './commons/themes.js'\r\nimport request from './commons/request.js'\r\nimport Validation from './commons/validation.js'\r\nimport * as dictionary from './commons/filters/dictionary.js'\r\nimport * as mask from './commons/filters/mask.js'\r\nimport * as format from './commons/filters/format.js'\r\n\r\n// 导入所有组件\r\nimport VtkArea from './components/assembly/VtkArea.vue'\r\nimport VtkAreaTabs from './components/assembly/VtkAreaTabs.vue'\r\nimport VtkBreadcrumb from './components/assembly/VtkBreadcrumb.vue'\r\nimport VtkCheckbox from './components/assembly/VtkCheckbox.vue'\r\nimport VtkCount from './components/assembly/VtkCount.vue'\r\nimport VtkDatePicker from './components/assembly/VtkDatePicker.vue'\r\nimport VtkDept from './components/assembly/VtkDept.vue'\r\nimport VtkEmpty from './components/assembly/VtkEmpty.vue'\r\nimport VtkFab from './components/assembly/VtkFab.vue'\r\nimport VtkFormItem from './components/assembly/VtkFormItem.vue'\r\nimport VtkImg from './components/assembly/VtkImg.vue'\r\nimport VtkPage from './components/assembly/VtkPage.vue'\r\nimport VtkPdf from './components/assembly/VtkPdf.vue'\r\nimport VtkProj from './components/assembly/VtkProj.vue'\r\nimport VtkRadio from './components/assembly/VtkRadio.vue'\r\nimport VtkSearch from './components/assembly/VtkSearch.vue'\r\nimport VtkSelect from './components/assembly/VtkSelect.vue'\r\nimport VtkStepper from './components/assembly/VtkStepper.vue'\r\nimport VtkMessageComponent from './components/message/vtkMessage.vue'\r\n\r\n// 插件安装函数\r\nfunction install(app, options = {}) {\r\n // 注册全局组件\r\n const components = {\r\n VtkArea,\r\n VtkAreaTabs,\r\n VtkBreadcrumb,\r\n VtkCheckbox,\r\n VtkCount,\r\n VtkDatePicker,\r\n VtkDept,\r\n VtkEmpty,\r\n VtkFab,\r\n VtkFormItem,\r\n VtkImg,\r\n VtkPage,\r\n VtkPdf,\r\n VtkProj,\r\n VtkRadio,\r\n VtkSearch,\r\n VtkSelect,\r\n VtkStepper,\r\n VtkMessage: VtkMessageComponent\r\n }\r\n\r\n // 注册组件\r\n Object.keys(components).forEach(name => {\r\n app.component(name, components[name])\r\n })\r\n\r\n // 挂载全局对象\r\n app.config.globalProperties.$vtk = {\r\n message: vtkMessage,\r\n request,\r\n storage,\r\n themes,\r\n Validation,\r\n filters: {\r\n ...dictionary, // 字典过滤方法: dict, analyType, analyLevel\r\n ...mask, // 脱敏方法: mobile, idcard\r\n ...format // 格式化方法: date, num, age, txt, abs\r\n },\r\n ...options\r\n }\r\n\r\n return app\r\n}\r\n\r\n// 默认导出(包含 install 和所有命名导出)\r\nexport default {\r\n install,\r\n // 重新导出所有组件\r\n VtkArea,\r\n VtkAreaTabs,\r\n VtkBreadcrumb,\r\n VtkCheckbox,\r\n VtkCount,\r\n VtkDatePicker,\r\n VtkDept,\r\n VtkEmpty,\r\n VtkFab,\r\n VtkFormItem,\r\n VtkImg,\r\n VtkPage,\r\n VtkPdf,\r\n VtkProj,\r\n VtkRadio,\r\n VtkSearch,\r\n VtkSelect,\r\n VtkStepper,\r\n // 工具函数\r\n request,\r\n storage,\r\n themes,\r\n vtkMessage,\r\n}\r\n"],"names":["Storage","storage","type","key","js","value","useMessageStore","defineStore","options","Message","messageStore","defaultOptions","text","toastOptions","service","axios","config","error","response","res","header","handleRedirect","url","index","newUrl","Request","data","method","headers","responseType","proxy","getCurrentInstance","emit","__emit","entity","reactive","user","ref","areaData","onMounted","area","_a","_b","nextArea","areaCode","inputFn","e","clear","arr","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_component_VSelect","_cache","$event","__props","_createBlock","_c","_normalizeClass","_d","_e","_f","_g","_h","_i","_normalizeStyle","_j","props","menu","tab","tabItems","areaStorage","areaItems","current","itemValue","itemText","view","code","province","city","district","town","village","tabArea","areaChange","item","getTree","nextTick","getAreaName","save","val","close","textClear","watch","newVal","oldVal","_component_v_menu","_withCtx","_component_v_btn","_mergeProps","$attrs","_createElementVNode","_toDisplayString","_component_v_icon","_component_v_card","_hoisted_2","_Fragment","_renderList","link","_component_v_sheet","_component_v_tabs","_component_v_tab","_createTextVNode","_vShow","_component_v_chip_group","_component_v_chip","_component_v_card_actions","_component_v_spacer","router","inject","route","breadcrumbItems","computed","matched","r","pathArray","p","path","routePath","handleBack","_component_v_breadcrumbs","_component_v_breadcrumbs_item","localValue","isUpdatingLocal","isUpdatingModel","attrs","useAttrs","inputAttrs","list","inline","modelValue","rest","checkboxAttrs","errorMessages","rules","hint","persistentHint","inputValue","items","statc","it","codeValue","miscs","_component_VInput","_component_VCheckbox","currentNumber","currentDigits","digitKey","isAnimating","formatNumber","num","result","targetNumberString","startNumberString","maxDigitString","target","start","getCurrentDigit","initDigitsArray","startStr","char","startChar","getDigitStyle","currentValue","digitValue","offset","translateY","startAnimation","startTime","startValue","endValue","diff","animate","currentTime","elapsed","progress","easeOutQuart","updateDigitArray","valueStr","maxStr","i","newStr","oldStr","endStr","__expose","digitChar","_hoisted_4","_hoisted_3","n","_hoisted_5","dateRange","startDateRange","endDateRange","displayValue","formatDate","textFieldProps","placeholder","disabled","min","max","showCurrent","format","separator","date","year","month","day","minDate","maxDate","newValue","dates","onStartDateChange","onEndDateChange","clearValue","cancel","confirm","sortedRange","date1","date2","_component_VMenu","activatorProps","_component_VTextField","_component_VIcon","_component_VCard","_component_VCardText","_component_VDatePicker","_component_VDivider","_component_VCardActions","_component_VSpacer","_component_VBtn","pause","ms","resolve","dialog","areaSelectedData","areaActivatedData","getDeptList","getAreaList","getAreaNextList","parentCode","deptData","deptSelectedData","deptActivatedData","getPersonList","node","params","getDepNextList","selectAreaCode","selectPid","personData","selectedPersonData","allSelectedPersons","isRestoringSelection","selectedPersonList","uniqueMap","person","oldPerson","newPersonData","currentSelected","removeSelectedPerson","personId","globalIndex","currentIndex","add","selectedPersons","_component_v_dialog","_component_v_card_title","_component_v_divider","_component_v_card_text","_component_v_row","_component_v_col","_component_v_treeview","_component_v_avatar","_component_v_img","_hoisted_6","_component_v_list","_component_v_list_item","_hoisted_7","_component_v_empty_state","$slots","_renderSlot","_ctx","showFab","fabClass","handleScroll","scrollToTop","onBeforeUnmount","_Transition","_component_v_fab","processedMaxWidth","contentStyles","styles","showPreview","imageRotation","srcWithToken","token","currentImageUrl","currentImage","currentImageTitle","currentImageDescription","hasPrev","hasNext","openPreview","closePreview","prevImage","nextImage","rotateImage","degrees","_component_v_progress_circular","_component_VCardTitle","_component_v_card_subtitle","_component_VDialog","_component_v_toolbar","_component_v_toolbar_title","_component_v_toolbar_items","_hoisted_8","pagination","pageSizeObjs","pageDatas","paginationChange","pageChange","pageSizeFormat","toPage","pageSizeChange","temp","obj","page","_component_VRow","_component_v_pagination","loading","pdfLoaded","currentPage","pageCount","pdfContainer","pdfDoc","loadPdf","renderPage","pageNum","prevPage","nextPage","downloadPdf","blob","fileName","_component_VCol","_component_VSlider","useMixins","urlConfig","queryParam","desserts","superQueryParams","pageData","sumup","pageDataCopy","overlay","getQueryParams","codex","loadPage","pageInfo","id","record","modalFormRef","disposition","filename","newUrlConfig","getListPage","expData","mixinQueryParam","examType","permits","projName","projTip","bizType","expShow","menu1","expArr","formArr","select","selectAll","delItem","delNote","MprojRef","onActivated","event","examAll","chkAll","getUserInfo","examWait","toView","searchProj","param","searchQuery","exv","exp","del","delSave","tip","formatIdCard","idcard","dateStr","getServStateClass","state","getServStateText","getRateStateClass","getRateStateText","getServFromText","from","_component_VContainer","_component_VTabs","_component_VTab","_unref","_component_vtk_search","_component_vtk_area_tabs","_component_vtk_select","_component_VDataTable","_component_VChip","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_component_vtk_empty","_component_vtk_page","_component_vtk_proj","_component_VTextarea","onUpdate","_component_VRadioGroup","_component_VRadio","initialIndex","obtain","search","reset","_component_VBadge","filteredAttrs","multi","its","$emit","stepIndex","step","content","_component_VStepper","_component_VStepperHeader","_component_VStepperWindow","_component_VStepperWindowItem","dict","map","pre","maps","results","j","currentVal","kv","analyType","analyLevel","fmt","getDate","o","k","numValue","neg","absValue","fix","needSep","xs","decimalPart","integerPart","age","birthdays","d","txt","len","abs","mobile","colors","themes","Validation","input","this","idCard","checkCode","multiplier","ids","sum","remainder","checkCodeArr","dateStrNew","dateObj","birth","sex","isActive","close_modal","_component_v_overlay","_sfc_main","vtkAlert","vtkConfirm","vtkLoading","onModelUpdate","_component_VSnackbar","_component_vtk_alert","_component_vtk_confirm","_component_vtk_loading","_component_vtk_prompt","_component_vtk_toast","install","app","components","VtkArea","VtkAreaTabs","VtkBreadcrumb","VtkCheckbox","VtkCount","VtkDatePicker","VtkDept","VtkEmpty","VtkFab","VtkFormItem","VtkImg","VtkPage","VtkPdf","VtkProj","VtkRadio","VtkSearch","VtkSelect","VtkStepper","VtkMessageComponent","name","vtkMessage","request","dictionary","mask"],"mappings":"kYAAK,MAACA,EAAU,CAAA,EAEVC,GAAU,CAACC,EAAO,UACfA,GAAQ,QAAU,OAAO,aAAe,OAAO,eAQxDF,EAAQ,IAAM,CAACG,EAAKD,EAAO,UAAY,CACrC,IAAIE,EAAKH,GAAQC,CAAI,EAAE,QAAQC,CAAG,EAClC,MAAO,yBAAyB,KAAKC,CAAE,EAAI,KAAK,MAAMA,CAAE,EAAIA,CAC9D,EAOAJ,EAAQ,IAAM,CAACG,EAAKE,EAAOH,EAAO,UAAY,CAC5CG,EAASA,EAAM,cAAgB,OAAU,KAAK,UAAUA,CAAK,EAAIA,EACjEJ,GAAQC,CAAI,EAAE,QAAQC,EAAKE,CAAK,CAClC,EAMAL,EAAQ,OAAS,CAACG,EAAKD,EAAO,UAAY,CACxCD,GAAQC,CAAI,EAAE,WAAWC,CAAG,CAC9B,EAKAH,EAAQ,MAAQ,CAACE,EAAO,UAAY,CAClCD,GAAQC,CAAI,EAAE,OAChB,ECpCO,MAAMI,EAAkBC,GAAAA,YAAY,UAAW,CACpD,MAAO,KAAO,CACZ,MAAO,CACL,SAAU,GACV,QAAS,CACP,MAAO,GACP,KAAM,GACN,MAAO,GACP,MAAO,GACf,CACA,EACI,QAAS,CACP,SAAU,GACV,QAAS,CACP,MAAO,GACP,KAAM,GACN,MAAO,GACP,MAAO,IACP,WAAY,KACZ,YAAa,IACrB,CACA,EACI,QAAS,CACP,SAAU,GACV,QAAS,CACP,MAAO,GACP,KAAM,GACN,MAAO,GACP,MAAO,IACP,cAAe,GACf,MAAO,EACP,cAAe,UACf,KAAM,GACN,YAAa,CACrB,CACA,EACI,OAAQ,CACN,SAAU,GACV,QAAS,CACP,MAAO,GACP,KAAM,GACN,MAAO,GACP,MAAO,IACP,MAAO,GACP,YAAa,GACb,UAAW,OACX,WAAY,KACZ,YAAa,IACrB,CACA,EACI,MAAO,CACL,SAAU,GACV,QAAS,CACP,KAAM,GACN,MAAO,GACP,QAAS,IACT,SAAU,KAClB,CACA,CACA,GAEE,QAAS,CACP,KAAKL,EAAM,CACL,KAAKA,CAAI,IACX,KAAKA,CAAI,EAAE,SAAW,GAE1B,EAEA,KAAKA,EAAMM,EAAS,CACd,KAAKN,CAAI,IACX,KAAKA,CAAI,EAAI,CACX,SAAU,GACV,QAASM,CACnB,EAEI,CACJ,CACA,CAAC,EC7EKC,EAAU,CAEd,MAAMD,EAAS,CACQF,EAAe,EACvB,KAAK,QAASE,CAAO,CACpC,EAGA,QAAQA,EAAS,CACMF,EAAe,EACvB,KAAK,UAAWE,CAAO,CACtC,EAGA,QAAS,CACP,KAAKA,EAAU,GAAI,CACjB,MAAME,EAAeJ,EAAe,EAC9BK,EAAiB,CACrB,MAAO,GACP,KAAM,GACN,MAAO,GACP,MAAO,IACP,cAAe,GACf,cAAe,UACf,KAAM,GACN,YAAa,CACrB,EACMD,EAAa,KAAK,UAAW,CAAE,GAAGC,EAAgB,GAAGH,EAAS,CAChE,EACA,MAAO,CACgBF,EAAe,EACvB,KAAK,SAAS,CAC7B,CACJ,EAGE,OAAOE,EAAS,CACOF,EAAe,EACvB,KAAK,SAAUE,CAAO,CACrC,EAGA,MAAMI,EAAMJ,EAAU,GAAI,CAExB,MAAME,EAAeJ,EAAe,EAE9BO,EAAe,OAAOD,GAAS,SACjC,CAAE,KAAAA,EAAM,GAAGJ,CAAO,EAClBI,EACJF,EAAa,KAAK,QAASG,CAAY,CACzC,EAGA,KAAKX,EAAM,CACYI,EAAe,EACvB,KAAKJ,CAAI,CACxB,CACF,ECvDMY,GAAUC,GAAM,OAAO,CAC3B,QAAS,OAAO,kBAAoB,QAAoC,GACxE,QAAS,CACP,mBAAoB,gBAAA,EAEtB,gBAAiB,GACjB,QAAS,GACX,CAAC,EAGDD,GAAQ,aAAa,QAAQ,IAC1BE,IACKhB,EAAQ,IAAI,OAAO,IACrBgB,EAAO,QAAQ,SAAS,EAAI,mCAC5BA,EAAO,QAAQ,cAAmB,UAAYhB,EAAQ,IAAI,OAAO,GAE5DgB,GAERC,IACCR,EAAQ,MAAMQ,EAAM,SAAW,MAAM,EAC9B,QAAQ,OAAOA,CAAK,EAE/B,EAGAH,GAAQ,aAAa,SAAS,IAC3BI,GAAa,CACZ,IAAIC,EAAMD,EAAS,KACfE,EAASF,EAAS,QAAQ,qBAAqB,EAKnD,GAHIE,GAAU,MAAaA,EAAO,MAAM,GAAG,EAAE,CAAC,GAAK,eACjDD,EAAMD,GAEJA,EAAS,SAAW,IACtB,OAAAT,EAAQ,MAAMU,EAAI,SAAW,OAAQ,CAAE,MAAO,QAAS,EAChD,QAAQ,OAAO,IAAI,MAAMA,EAAI,SAAW,MAAM,CAAC,EAGtD,GACEA,EAAI,MACJ,CAACA,EAAI,KAAK,SACVA,EAAI,KAAK,UAAY,8BACrB,CACAnB,EAAQ,MAAA,EACR,MAAMqB,EAAiB,IAAM,CAC3B,MAAMC,EAAM,OAAO,SAAS,KACtBC,EAAQD,EAAI,QAAQ,GAAG,EAC7B,IAAIE,EAEAD,EAAQ,GACVC,EAASF,EAAI,UAAU,EAAGC,CAAK,EAAI,KAEnCC,EAASF,EAAM,KAGjB,OAAO,SAAS,KAAOE,CACzB,EAEAf,EAAQ,QAAQ,CACd,MAAO,KACP,KAAM,gBACN,UAAWY,EACX,SAAUA,CAAA,CACX,CACH,CACA,OAAO,QAAQ,QAAQF,CAAG,CAE9B,EACCF,IACC,QAAQ,IAAI,MAAQA,CAAK,EACzBR,EAAQ,MAAMQ,EAAM,SAAW,OAAQ,CAAE,MAAO,QAAS,EAClD,QAAQ,OAAOA,CAAK,EAE/B,EAEA,MAAMQ,EAAU,CAAA,EAEhBA,EAAQ,KAAO,CACbH,EACAI,EAAO,CAAA,EACPC,EAAS,MACTC,EAAU,CAAE,eAAgB,mCAAA,EAC5BC,EAAe,OAEXD,EAAQ,cAAc,IAAM,oCACvBd,GAAQ,CACb,IAAAQ,EACA,OAAQI,EACR,OAAAC,EACA,QAAAC,EACA,aAAAC,CAAA,CACD,EAEMf,GAAQ,CACb,IAAAQ,EACA,KAAAI,EACA,OAAAC,EACA,QAAAC,EACA,aAAAC,CAAA,CACD,EAILJ,EAAQ,QAAU,CAACH,EAAKI,EAAO,CAAA,IACtBD,EAAQ,KAAKH,EAAKI,CAAI,EAG/BD,EAAQ,SAAW,CAACH,EAAKI,EAAO,CAAA,IACvBD,EAAQ,KAAKH,EAAKI,EAAM,MAAM,EAGvCD,EAAQ,QAAU,CAACH,EAAKI,EAAO,CAAA,IACtBD,EAAQ,KAAKH,EAAKI,EAAM,OAAQ,CACrC,eAAgB,kBAAA,CACjB,EAGHD,EAAQ,SAAW,CAACH,EAAKI,EAAO,CAAA,IACvBD,EAAQ,KAAKH,EAAKI,EAAM,OAAQ,CACrC,eAAgB,kBAAA,CACjB,EAGHD,EAAQ,IAAM,CAACH,EAAKI,EAAO,CAAA,IAClBD,EAAQ,KAAKH,EAAKI,EAAM,OAAQ,CACrC,eAAgB,qBAAA,CACjB,EAGHD,EAAQ,IAAM,CAACH,EAAKI,EAAO,CAAA,IAClBD,EAAQ,KACbH,EACAI,EACA,OACA,CAAE,eAAgB,kBAAA,EAClB,MAAA,mVC1CJ,KAAM,CAAE,MAAAI,CAAK,EAAKC,qBAAkB,EAyB9BC,EAAOC,EAGPC,EAASC,EAAAA,SAAS,CACvB,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,OAAQ,KACR,MAAO,GACP,MAAO,GACP,MAAO,GACP,MAAO,GACP,OAAQ,EACT,CAAC,EAEKC,EAAOC,EAAAA,IAAI,CAAE,SAAU,EAAE,CAAE,EAC3BC,EAAWH,EAAAA,SAAS,CACzB,MAAO,CAAA,EACP,MAAO,CAAA,EACP,MAAO,CAAA,EACP,MAAO,CAAA,EACP,OAAQ,CAAA,CACT,CAAC,EAWDI,EAAAA,UAAU,IAAM,CACfH,EAAK,MAAQ,OAAON,EAAM,KAAK,QAAQ,IAAI,MAAM,GAAM,SAAW,KAAK,MAAMA,EAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAIA,EAAM,KAAK,QAAQ,IAAI,MAAM,GAAK,GACjJU,EAAI,CACL,CAAC,EAGD,MAAMA,EAAO,IAAM,SACjB,GAAI,CACFV,EAAM,KAAK,QAAQ,QAAQ,KAAI,EAC/BL,EAAQ,SAAS,mBAAmBW,EAAK,MAAM,QAAQ,EAAE,EAAE,KAAMjB,GAAQ,SACvEW,EAAM,KAAK,QAAQ,QAAQ,KAAI,EAC3BX,EAAI,KAAK,SACXe,EAAO,OAAOf,EAAI,KAAK,QAAQ,EAAE,EAAIA,EAAI,KAAK,SAC9Ce,EAAO,MAAQf,EAAI,KAAK,SACxBe,EAAO,MAAQf,EAAI,KAAK,KACxBe,EAAO,MAAQf,EAAI,KAAK,SACxBe,EAAO,OAAQO,EAAAtB,EAAI,OAAJ,YAAAsB,EAAU,KACzBP,EAAO,QAASQ,EAAAvB,EAAI,OAAJ,YAAAuB,EAAU,QAC1BC,EAASP,EAAK,MAAM,QAAQ,GAE5BN,EAAM,KAAK,QAAQ,MAAMX,EAAI,KAAK,OAAO,CAE7C,CAAC,EAAE,MAAMF,GAAS,CAChBa,EAAM,KAAK,QAAQ,QAAQ,KAAI,EAC/BA,EAAM,KAAK,QAAQ,MAAM,UAAU,CACrC,CAAC,CACH,OAASb,EAAO,CACd,QAAQ,MAAM,aAAcA,CAAK,GAC7ByB,GAAAD,EAAAX,EAAM,KAAK,UAAX,YAAAW,EAAoB,UAApB,MAAAC,EAA6B,MAC/BZ,EAAM,KAAK,QAAQ,QAAQ,KAAI,CAEnC,CACF,EAGMa,EAAW,CAACC,EAAUrB,IAAU,CACrCsB,EAAQD,CAAQ,GAEZA,GAAA,YAAAA,EAAU,QAAS,IACtBnB,EAAQ,SAAS,mBAAmBmB,CAAQ,EAAE,EAAE,KAAMzB,GAAQ,CAC7DW,EAAM,KAAK,QAAQ,QAAQ,KAAI,EAC3BX,EAAI,KAAK,SACRI,GACH,OAAO,KAAKe,CAAQ,EAClB,MAAMf,EAAO,CAAC,EACd,QAASuB,GAAM,CACfR,EAASQ,CAAC,EAAI,CAAA,EACdZ,EAAOY,CAAC,EAAI,IACb,CAAC,EAEHR,EAAS,OAAOnB,EAAI,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAIA,EAAI,MAE9CW,EAAM,KAAK,QAAQ,MAAMX,EAAI,KAAK,OAAO,CAE3C,CAAC,EAAE,MAAMF,GAAS,CACd,QAAQ,MAAM,cAAeA,CAAK,EAClCa,EAAM,KAAK,QAAQ,MAAM,YAAY,CACvC,CAAC,CAEL,EAGMiB,EAASxB,GAAU,CACxB,IAAIyB,EAAM,OAAO,KAAKV,CAAQ,EAC9BO,EAAQX,EAAOc,EAAIzB,EAAQ,CAAC,CAAC,CAAC,EAC9ByB,EAAI,MAAMzB,EAAO,CAAC,EAAE,QAASuB,GAAM,CAClCR,EAASQ,CAAC,EAAI,CAAA,EACdZ,EAAOY,CAAC,EAAI,IACb,CAAC,CACF,EAGMD,EAAWC,GAAM,CACtBA,GAAKd,EAAK,oBAAqBc,CAAC,CACjC,8EAtOC,OAAAG,YAAA,EAAAC,qBAyFM,MAzFNC,GAyFM,CAxFLC,EAAAA,YAe8BC,EAAA,CAdpB,WAAAnB,EAAO,6BAAPoB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAArB,EAAO,MAAKqB,kBACAZ,EAAST,EAAO,MAAK,CAAA,IACzC,+BAAaa,EAAK,CAAA,GAClB,cAAaN,EAAAL,QAAK,WAAL,YAAAK,EAAe,SAAM,EAAQP,EAAO,MAAK,WACtD,MAAOI,EAAS,MACjB,aAAW,WACX,aAAW,WACX,MAAM,8BACN,eAAA,GACA,QAAQ,UACR,QAAQ,WACR,UAAA,GACC,WAAUI,EAAAN,EAAA,MAAK,WAAL,YAAAM,EAAe,SAAM,EAC/B,aAAY,CAAA,QAAA,EAAA,EACZ,uBAAOc,EAAA,SAAS,mEAEXA,EAAA,SAAO,iBADdC,EAAAA,YAiB8BJ,EAAA,OAfpB,WAAAnB,EAAO,6BAAPoB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAArB,EAAO,MAAKqB,kBACAZ,EAAST,EAAO,MAAK,CAAA,IACzC,+BAAaa,EAAK,CAAA,GAClB,cAAaW,EAAAtB,QAAK,WAAL,YAAAsB,EAAe,SAAM,EAAQxB,EAAO,MAAK,WACtD,MAAOI,EAAS,MACjB,aAAW,WACX,aAAW,WACX,MAAKqB,EAAAA,eAAA,CAAC,yBACEH,EAAA,QAAO,GAAA,MAAA,CAAA,EACf,eAAA,GACA,QAAQ,UACR,QAAQ,WACR,UAAA,GACC,WAAUI,EAAAxB,EAAA,MAAK,WAAL,YAAAwB,EAAe,SAAM,EAC/B,aAAY,CAAA,QAAA,EAAA,EACZ,uBAAOJ,EAAA,SAAS,wGAEXA,EAAA,SAAO,iBADdC,EAAAA,YAiB8BJ,EAAA,OAfpB,WAAAnB,EAAO,6BAAPoB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAArB,EAAO,MAAKqB,kBACAZ,EAAST,EAAO,MAAK,CAAA,IACzC,+BAAaa,EAAK,CAAA,GAClB,cAAac,EAAAzB,QAAK,WAAL,YAAAyB,EAAe,SAAM,EAAQ3B,EAAO,MAAK,YACtD,MAAOI,EAAS,MACjB,aAAW,WACX,aAAW,WACX,MAAKqB,EAAAA,eAAA,CAAC,yBACEH,EAAA,QAAO,GAAA,MAAA,CAAA,EACf,eAAA,GACA,QAAQ,UACR,QAAQ,WACR,UAAA,GACC,WAAUM,EAAA1B,EAAA,MAAK,WAAL,YAAA0B,EAAe,SAAM,EAC/B,aAAY,CAAA,QAAA,EAAA,EACZ,uBAAON,EAAA,SAAS,wGAEXA,EAAA,SAAO,iBADdC,EAAAA,YAiB8BJ,EAAA,OAfpB,WAAAnB,EAAO,6BAAPoB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAArB,EAAO,MAAKqB,oBACAZ,EAAST,EAAO,MAAK,CAAA,IACzC,iCAAaa,EAAK,CAAA,GAClB,cAAagB,EAAA3B,QAAK,WAAL,YAAA2B,EAAe,SAAM,EAAQ7B,EAAO,MAAK,YACtD,MAAOI,EAAS,MACjB,aAAW,WACX,aAAW,WACX,MAAKqB,EAAAA,eAAA,CAAC,yBACEH,EAAA,QAAO,GAAA,MAAA,CAAA,EACf,eAAA,GACA,QAAQ,UACR,QAAQ,WACR,UAAA,GACC,WAAUQ,EAAA5B,EAAA,MAAK,WAAL,YAAA4B,EAAe,SAAM,EAC/B,aAAY,CAAA,QAAA,EAAA,EACZ,uBAAOR,EAAA,SAAS,wGAEXA,EAAA,SAAO,kBADdC,EAAAA,YAiB8BJ,EAAA,OAfpB,WAAAnB,EAAO,8BAAPoB,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAArB,EAAO,OAAMqB,oBACDZ,EAAST,EAAO,OAAM,CAAA,IAC1C,iCAAaa,EAAK,CAAA,GAClB,cAAakB,EAAA7B,QAAK,WAAL,YAAA6B,EAAe,SAAM,GAAS/B,EAAO,OAAM,YACxD,MAAOI,EAAS,OACjB,aAAW,WACX,aAAW,WACX,MAAM,iBACN,MAAoB4B,EAAAA,eAAA,CAApB,CAAA,MAAA,OAAA,EAOQV,EAAA,SAAS,CAAA,EANjB,eAAA,GACA,QAAQ,UACR,QAAQ,WACR,UAAA,GACC,WAAUW,EAAA/B,EAAA,MAAK,WAAL,YAAA+B,EAAe,SAAM,GAC/B,aAAY,CAAA,QAAA,EAAA,6XCxBhB,MAAMC,EAAQZ,EAeRxB,EAAOC,EAEP,CAAE,MAAAH,CAAK,EAAKC,EAAAA,qBAEZsC,EAAOhC,EAAAA,IAAI,EAAK,EAChBD,EAAOC,EAAAA,IAAI,CAAA,CAAE,EACbiC,EAAMjC,EAAAA,IAAI,CAAC,EACXkC,EAAWlC,EAAAA,IAAI,CAAA,CAAE,EACjBmC,EAAcnC,EAAAA,IAAI,CAAA,CAAE,EACpBoC,EAAYpC,EAAAA,IAAI,CAAA,CAAE,EAClBH,EAASG,EAAAA,IAAI,CAAA,CAAE,EACfqC,EAAUrC,EAAAA,IAAI,IAAI,EAClBsC,EAAYtC,EAAAA,IAAI,EAAE,EAClBuC,EAAWvC,EAAAA,IAAI,EAAE,EAGjBwC,EAAQC,GAAS,CACtBhD,EAAM,KAAK,QAAQ,QAAQ,mBAAmBgD,CAAI,EAAE,EAAE,KAAM3D,GAAQ,CACnE,IAAI4D,EAAW5D,EAAI,KAAK,SAAW,GAAGA,EAAI,KAAK,QAAQ,GAAK,GACxD6D,EAAO7D,EAAI,KAAK,KAAO,IAAIA,EAAI,KAAK,IAAI,GAAK,GAC7C8D,EAAW9D,EAAI,KAAK,SAAW,IAAIA,EAAI,KAAK,QAAQ,GAAK,GACzD+D,EAAO/D,EAAI,KAAK,KAAO,IAAIA,EAAI,KAAK,IAAI,GAAK,GAC7CgE,EAAUhE,EAAI,KAAK,QAAU,IAAIA,EAAI,KAAK,OAAO,GAAK,GAC1DyD,EAAS,MAAQ,GAAGG,CAAQ,GAAGC,CAAI,GAAGC,CAAQ,GAAGC,CAAI,GAAGC,CAAO,GAC3Df,EAAM,UAAYA,EAAM,SAAW,IACtCQ,EAAS,MAAQA,EAAS,MAAM,MAAM,GAAG,EAAE,MAAM,CAACR,EAAM,QAAQ,EAAE,KAAK,GAAG,EAE5E,CAAC,CACF,EAGMgB,EAAW7D,GAAU,CAC1BkD,EAAU,MAAQ,CAAC,GAAGD,EAAY,MAAMjD,CAAK,CAAC,EAC1CA,EAAQW,EAAO,MAAM,OACxBwC,EAAQ,MAAQD,EAAU,MAAM,UAAW3B,GAAMA,EAAE,UAAYZ,EAAO,MAAMX,CAAK,EAAE,QAAQ,EAE3FmD,EAAQ,MAAQ,IAElB,EAGMW,EAAa,CAACC,EAAM/D,IAAU,CACnCW,EAAO,MAAQA,EAAO,MAAM,MAAM,EAAGX,CAAK,EAC1CW,EAAO,MAAM,KAAKoD,CAAI,EACtBd,EAAY,MAAQA,EAAY,MAAM,MAAM,EAAGjD,EAAQ,CAAC,EACpDgD,EAAS,MAAM,OAASD,EAAI,MAAQ,IAAM,CAAAF,EAAM,SAAUA,EAAM,QAAUkB,EAAK,SAAS,UAC3FC,EAAQD,EAAK,QAAQ,EACrBhB,EAAI,QAEN,EAGMiB,EAAWT,GAAS,CACzBhD,EAAM,KAAK,QAAQ,QAAQ,mBAAmBgD,CAAI,EAAE,EAAE,KAAM3D,GAAQ,CACnEsD,EAAU,MAAQtD,EAAI,KACtBqD,EAAY,MAAM,KAAKrD,EAAI,IAAI,EAC/BuD,EAAQ,MAAQ,KAChBc,EAAAA,UACD,CAAC,CACF,EAGMC,EAAeX,GAAS,CAC7B5C,EAAO,MAAQ,GACfqC,EAAS,MAAQ,CAChB,CAAE,KAAM,KAAM,KAAM,GAAG,EACvB,CAAE,KAAM,KAAM,KAAM,GAAG,EACvB,CAAE,KAAM,KAAM,KAAM,GAAG,EACvB,CAAE,KAAM,KAAM,KAAM,GAAG,EACvB,CAAE,KAAM,KAAM,KAAM,IAAI,CAC1B,EAAG,OAAQzB,GAAMA,EAAE,MAAQV,EAAK,MAAM,SAAS,MAAM,EACpDoC,EAAY,MAAQ,GAEpB1C,EAAM,KAAK,QAAQ,QAAQ,mBAAmBgD,CAAI,EAAE,EAAE,KAAM3D,GAAQ,CACnEsD,EAAU,MAAQ,CAAC,CAAE,SAAUtD,EAAI,KAAK,SAAU,SAAUA,EAAI,KAAK,QAAQ,CAAE,EAC/EqD,EAAY,MAAM,KAAKC,EAAU,KAAK,EACtCvC,EAAO,MAAM,KAAKuC,EAAU,MAAM,CAAC,CAAC,CACrC,CAAC,CACF,EAGMiB,EAAO,IAAM,CAClB,IAAI9E,EAAO,CAAA,EACP+E,EAAM,CAAA,EACVzD,EAAO,MAAM,QAASY,GAAM,CAC3BlC,EAAK,KAAKkC,EAAE,QAAQ,EACpB6C,EAAI,KAAK7C,EAAE,QAAQ,EACnB6B,EAAU,MAAQ7B,EAAE,QACrB,CAAC,EACGsB,EAAM,UAAYA,EAAM,SAAW,IACtCxD,EAAOA,EAAK,MAAM,CAACwD,EAAM,QAAQ,GAElCQ,EAAS,MAAQhE,EAAK,KAAI,EAAG,QAAQ,KAAM,GAAG,EAC9CoB,EAAK,oBAAqB2C,EAAU,KAAK,EACzC3C,EAAK,QAAQ,EACb4D,GACD,EAGMC,EAAY,IAAM,CACvBvB,EAAI,MAAQ,EACZmB,EAAYrD,EAAK,MAAM,QAAQ,EAC/BuC,EAAU,MAAQvC,EAAK,MAAM,SAC7BJ,EAAK,oBAAqB2C,EAAU,KAAK,EACzC3C,EAAK,QAAQ,CACd,EAGM4D,EAAQ,IAAM,CACnBvB,EAAK,MAAQ,EACd,EAGAyB,OAAAA,EAAAA,MAAM,IAAM1B,EAAM,WAAY,CAAC2B,EAAQC,IAAW,CAC7CD,GAAUA,GAAUC,GACvBnB,EAAKkB,CAAM,CAEb,CAAC,EAGDxD,EAAAA,UAAU,IAAM,CACfH,EAAK,MAAQN,EAAM,KAAK,QAAQ,IAAI,MAAM,GAAK,KAAK,MAAMA,EAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,EACxF2D,EAAYrD,EAAK,MAAM,QAAQ,EAC3BgC,EAAM,YACTS,EAAKT,EAAM,UAAU,CAEvB,CAAC,yYA5MAX,EAAAA,YAyDSwC,EAAA,YAzDQ5B,EAAA,2CAAAA,EAAI,MAAAd,GAAG,yBAAwB,GAAO,YAAU,MAAM,YAAU,QAC/D,UAAS2C,EAAAA,QACzB,CASQ,CAVqB,MAAA9B,KAAK,CAClChB,cASQ+C,EATRC,EAAAA,WASQhC,EARM,CACb,QAAQ,WACR,MAAM,UACN,MAAM,kBACL,MAAOiC,EAAAA,OAAO,4BAEf,IAAsD,CAAtDC,qBAAsD,OAAtDnD,GAAsDoD,EAAAA,gBAA5B3B,EAAA,OAAQ,MAAA,EAAA,CAAA,EACpBA,EAAA,qBAAdnB,EAAAA,YAAmG+C,EAAA,OAA3E,KAAK,QAAS,wBAAYX,EAAS,CAAA,MAAA,CAAA,EAAE,MAAM,2BAAO,IAAgB,CAAA,GAAAvC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAhB,mBAAgB,EAAA,kFAG5F,IA2CS,CA3CTF,EAAAA,YA2CSqD,EAAA,CA3CD,UAAU,IAAI,MAAA,CAAA,MAAA,OAAA,sBACrB,IAGI,CAHJH,EAAAA,mBAGI,IAHJI,GAGI,CAFHtD,EAAAA,YAA6EoD,EAAA,CAArE,MAAM,UAAU,MAAM,OAAO,KAAK,yBAAK,IAAqB,CAAA,GAAAlD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAArB,wBAAqB,EAAA,6BACpEJ,EAAAA,mBAAkHyD,EAAAA,SAAA,KAAAC,EAAAA,WAA7F1E,EAAA,MAAR2E,kBAAb3D,EAAAA,mBAAkH,OAAA,CAApF,IAAK2D,EAAK,SAAU,MAAM,+BAAmC,EAAAN,kBAAAM,EAAK,QAAQ,EAAA,CAAA,YAEzGzD,EAAAA,YA+BU0D,EAAA,CA/BD,MAAM,uBAAuB,MAAM,gCAC3C,IASS,CATT1D,EAAAA,YASS2D,EAAA,YATQzC,EAAA,4CAAAA,EAAG,MAAAf,GAAuB6B,GAAS,MAAM,gCAExD,IAAiC,EADlCnC,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAOwByD,WAAA,KAAAC,EAAAA,WANCrC,EAAA,MAAQ,CAAxBe,EAAM/D,oCADfkC,EAAAA,YAOwBuD,EAAA,CALtB,IAAKzF,EACN,MAAM,OACL,MAAK2C,EAAAA,eAAEI,EAAA,OAAO/C,GAAK,uBAAA,EACnB,SAAUiD,EAAA,MAAY,QAAUjD,EAAK,sBAEtC,IAAe,CAAZ0F,EAAAA,gBAAAV,EAAAA,gBAAAjB,EAAK,IAAI,EAAA,CAAA,sCADJ,CAAA4B,EAAAA,MAAA1D,EAAA,QAAUA,EAAA,SAAW8B,EAAK,KAAI,EAAA,qCAGxCrC,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAmBUyD,WAAA,KAAAC,EAAAA,WAjBerC,EAAA,MAAQ,CAAxBe,EAAM/D,oCAFfkC,EAAAA,YAmBUqD,EAAA,CAhBR,IAAKvF,EACN,MAAM,YACN,aAAW,MACX,MAAM,oCAEN,IAUe,CAVf6B,EAAAA,YAUe+D,EAAA,YAVQzC,EAAA,2CAAAA,EAAO,MAAAnB,GAAE,iBAAe,aAAa,OAAA,uBAE1D,IAAyB,kBAD1BL,EAAAA,mBAQSyD,EAAAA,SAAA,KAAAC,EAAAA,WAPOnC,EAAA,MAARjC,kBADRiB,EAAAA,YAQS2D,EAAA,CANP,IAAK5E,EAAK,GACV,QAAKe,GAAE8B,EAAW7C,EAAMjB,CAAK,EAC9B,MAAKoC,EAAAA,eAAA,CAAC,UACEnB,EAAK,UAAYJ,EAAA,MAAK,UAAQ,QAAA,CAAA,sBAEtC,IAAmB,CAAhB6E,EAAAA,gBAAAV,EAAAA,gBAAA/D,EAAK,QAAQ,EAAA,CAAA,sFAfV,CAAA0E,EAAAA,MAAA3F,GAAS+C,EAAA,KAAG,mBAqBtBlB,EAAAA,YAIiBiE,EAAA,CAJD,MAAM,WAAW,EAAA,mBAChC,IAAY,CAAZjE,EAAAA,YAAYkE,CAAA,EACZlE,EAAAA,YAAiH+C,EAAA,CAAzG,QAAOP,EAAO,UAAU,IAAI,KAAK,4BAAQ,IAAqD,CAArDxC,EAAAA,YAAqDoD,EAAA,CAA7C,MAAM,WAAW,EAAA,mBAAC,IAAkB,CAAA,GAAAlD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAlB,qBAAkB,EAAA,0CAAS,MAAG,EAAA,WACzGF,EAAAA,YAAwJ+C,EAAA,CAAhJ,QAAOT,EAAM,MAAM,kBAAkB,MAAM,UAAU,UAAU,IAAI,KAAK,4BAAQ,IAAqD,CAArDtC,EAAAA,YAAqDoD,EAAA,CAA7C,MAAM,WAAW,EAAA,mBAAC,IAAkB,CAAA,GAAAlD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAlB,qBAAkB,EAAA,0CAAS,MAAG,EAAA,kYCnBpJ,MAAMc,EAAQZ,EAuBRxB,EAAOC,EAGPsF,EAASC,EAAAA,OAAO,SAAU,IAAI,EAC9BC,EAAQD,EAAAA,OAAO,QAAS,IAAI,EAG5BE,EAAkBC,EAAAA,SAAS,IAAM,SACrC,GAAIvD,EAAM,OAASA,EAAM,MAAM,OAAS,EACtC,OAAOA,EAAM,MAAM,IAAI,CAACkB,EAAM/D,KAAW,CACvC,MAAO+D,EAAK,OAASA,EAAK,MAAQA,EAAK,KACvC,GAAIA,EAAK,IAAMA,EAAK,MAAQA,EAAK,KACjC,SAAUA,EAAK,WAAa,OAAYA,EAAK,SAAW/D,IAAU6C,EAAM,MAAM,OAAS,CAC7F,EAAM,EAIJ,GAAI,CAACqD,EACH,MAAO,CAAA,EAIT,MAAMG,IAAUnF,EAAAgF,EAAM,UAAN,YAAAhF,EAAe,OAAOoF,GAAKA,EAAE,MAAQA,EAAE,KAAK,cAAe,CAAA,EAC3E,GAAID,EAAQ,OAAS,EACnB,OAAOA,EAAQ,IAAI,CAACC,EAAGtG,KAAW,CAChC,MAAOsG,EAAE,KAAK,WACd,GAAIA,EAAE,KACN,SAAUtG,IAAUqG,EAAQ,OAAS,CAC3C,EAAM,EAIJ,MAAME,IAAYpF,EAAA+E,EAAM,OAAN,YAAA/E,EAAY,MAAM,KAAK,OAAOqF,GAAKA,KAAM,CAAA,EAC3D,OAAOD,EAAU,IAAI,CAACE,EAAMzG,IAAU,CACpC,MAAM0G,EAAY,IAAMH,EAAU,MAAM,EAAGvG,EAAQ,CAAC,EAAE,KAAK,GAAG,EAC9D,MAAO,CACL,MAAOyG,EAAK,OAAO,CAAC,EAAE,cAAgBA,EAAK,MAAM,CAAC,EAClD,GAAIC,EACJ,SAAU1G,IAAUuG,EAAU,OAAS,CAC7C,CACE,CAAC,CACH,CAAC,EAGKI,EAAa,IAAM,CAEvBlG,EAAK,MAAM,EAGNuF,IAKDnD,EAAM,QACGA,EAAM,OACfmD,EAAO,KAAKnD,EAAM,MAAM,GAM1BmD,EAAO,KAAI,EAEf,oKA1HE,OAAAtE,YAAA,EAAAC,qBA6BM,MA7BNC,GA6BM,CA3BJC,EAAAA,YAcgB+E,EAAA,CAdA,MAAOT,EAAA,MAAiB,MAAM,SAC3B,kBACf,IAAkC,CAAlCtE,EAAAA,YAAkCoD,EAAA,KAAA,mBAA1B,IAAiB,CAAA,GAAAlD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAjB,oBAAiB,EAAA,cAEV,KAAI4C,EAAAA,QACnB,CAOqB,CARE,KAAAZ,KAAI,CAC3BlC,EAAAA,YAOqBgF,EAAA,CANlB,MAAO9C,EAAK,MACZ,GAAIA,EAAK,GACT,SAAUA,EAAK,SACf,MAAK3B,EAAAA,eAAA,CAAA,eAAA,CAAqB2B,EAAK,QAAQ,CAAA,sBAExC,IAAgB,CAAb2B,EAAAA,gBAAAV,EAAAA,gBAAAjB,EAAK,KAAK,EAAA,CAAA,qEAOX9B,EAAA,wBADRC,EAAAA,YASQ0C,EAAA,OAPN,QAAQ,OACR,MAAM,UACN,eAAa,iBACZ,QAAO+B,EACR,MAAA,CAAA,OAAA,MAAA,sBAEA,IAAc,qCAAX1E,EAAA,QAAQ,EAAA,CAAA,mUCGjB,MAAMY,EAAQZ,EA2BRxB,EAAOC,EAGPoG,EAAahG,EAAAA,IAAI,EAAE,EAGnBiG,EAAkBjG,EAAAA,IAAI,EAAK,EAC3BkG,EAAkBlG,EAAAA,IAAI,EAAK,EAGjCyD,EAAAA,MAAM,IAAM1B,EAAM,WAAa2B,GAAW,CACxC,GAAIwC,EAAgB,MAAO,CACzBA,EAAgB,MAAQ,GACxB,MACF,CAEAD,EAAgB,MAAQ,GACpB,MAAM,QAAQvC,CAAM,EACtBsC,EAAW,MAAQ,CAAC,GAAGtC,CAAM,EACpB,OAAOA,GAAW,SAC3BsC,EAAW,MAAQtC,EAAS,CAACA,CAAM,EAAI,CAAA,EAEvCsC,EAAW,MAAQ,CAAA,CAEvB,EAAG,CAAE,UAAW,GAAM,EAGtBvC,EAAAA,MAAMuC,EAAatC,GAAW,CAC5B,GAAIuC,EAAgB,MAAO,CACzBA,EAAgB,MAAQ,GACxB,MACF,CAEAC,EAAgB,MAAQ,GACxBvG,EAAK,oBAAqB+D,CAAM,CAClC,EAAG,CAAE,KAAM,GAAM,EAGjB,MAAMyC,EAAQC,EAAAA,SAAQ,EAGhBC,EAAaf,EAAAA,SAAS,IAAM,CAChC,KAAM,CAAE,KAAAgB,EAAM,OAAAC,EAAQ,WAAAC,EAAY,GAAGC,CAAI,EAAKN,EAC9C,OAAOM,CACT,CAAC,EAEKC,EAAgBpB,EAAAA,SAAS,IAAM,CAEnC,KAAM,CACJ,KAAAgB,EACA,OAAAC,EACA,WAAAC,EACA,MAAA5H,EACA,iBAAkB+H,EAClB,MAAAC,EACA,KAAAC,EACA,kBAAmBC,EACnB,GAAGL,CACP,EAAMN,EACJ,OAAOM,CACT,CAAC,EAGKM,EAAazB,EAAAA,SAAS,IACnBU,EAAW,OAASA,EAAW,MAAM,OAAS,EAAIA,EAAW,MAAQ,IAC7E,EAGKgB,EAAQhH,EAAAA,IAAI,EAAE,EAGdiH,EAAQ,IAAM,CAClBlF,EAAM,KAAK,MAAM,GAAG,EAAE,QAAQmF,GAAM,CAClC,KAAM,CAACzE,EAAM0E,CAAS,EAAID,EAAG,MAAM,GAAG,EACtCF,EAAM,MAAM,KAAK,CAAE,KAAAvE,EAAM,UAAA0E,CAAS,CAAE,CACtC,CAAC,CACH,EAGMC,EAAQ,SAAY,CACxB,GAAI,CACF,MAAMtI,EAAM,MAAMM,EAAQ,QAAQ,kBAAkB2C,EAAM,IAAI,EAAE,EAChEiF,EAAM,MAAQlI,EAAI,MAAQ,CAAA,CAC5B,OAASF,EAAO,CACd,QAAQ,MAAM,2CAA4CA,CAAK,EAC/DoI,EAAM,MAAQ,CAAA,CAChB,CACF,EAGA9G,OAAAA,EAAAA,UAAU,IAAM,CACV6B,EAAM,KAAK,SAAS,GAAG,EACzBkF,EAAK,EAELG,EAAK,CAET,CAAC,iFAzJC,OAAAxG,YAAA,EAAAQ,cAgBSiG,EAhBTtD,EAAAA,WAgBSsC,QAfW,CACjB,cAAaU,EAAA,KAAU,CAAA,EAAA,mBAExB,IAWM,CAXN9C,EAAAA,mBAWM,MAAA,CAXD,MAAK3C,EAAAA,eAAA,CAAC,aAAqBH,EAAA,OAAM,6BAAA,gBAAA,CAAA,qBACpCN,EAAAA,mBASEyD,EAAAA,SAAA,KAAAC,EAAAA,WAReyC,EAAA,MAAR/D,IADTrC,YAAA,EAAAQ,cASEkG,EATFvD,EAAAA,WASE,CAPA,eAAA,GACC,IAAKd,EAAK,IAAMA,EAAK,KACrB,MAAOA,EAAK,UACZ,MAAOA,EAAK,gBACJ+C,EAAA,2CAAAA,EAAU,MAAA9E,iBACXwF,EAAA,MAAa,CACpB,MAAOvF,EAAA,OAAM,OAAA,muBC2DtB,MAAMY,EAAQZ,EAsDRxB,EAAOC,EAGP2H,EAAgBvH,EAAAA,IAAI+B,EAAM,KAAK,EAG/ByF,EAAgBxH,EAAAA,IAAI,EAAE,EAGtByH,EAAWzH,EAAAA,IAAI,CAAC,EAGhB0H,EAAc1H,EAAAA,IAAI,EAAK,EAGvB2H,EAAgBC,GAAQ,CAC5B,IAAIC,EAASD,EAAI,QAAQ7F,EAAM,QAAQ,EACvC,OAAIA,EAAM,WAAaA,EAAM,WAAa,IACxC8F,EAASA,EAAO,QAAQ,wBAAyB,GAAG,GAE/CA,CACT,EAGMC,EAAqBxC,EAAAA,SAAS,IAC3BqC,EAAa5F,EAAM,GAAG,CAC9B,EAGKgG,EAAoBzC,EAAAA,SAAS,IAC1BqC,EAAa5F,EAAM,KAAK,CAChC,EAGKiG,EAAiB1C,EAAAA,SAAS,IAAM,CACpC,MAAM2C,EAASH,EAAmB,MAC5BI,EAAQH,EAAkB,MAChC,OAAOE,EAAO,QAAUC,EAAM,OAASD,EAASC,CAClD,CAAC,EAGKC,EAAmBjJ,GACnBA,EAAQsI,EAAc,MAAM,OACvBA,EAAc,MAAMtI,CAAK,EAE3B,IAIHkJ,EAAkB,IAAM,CACVN,EAAmB,MACrC,MAAMO,EAAWN,EAAkB,MAGnCP,EAAc,MAAQQ,EAAe,MAAM,MAAM,EAAE,EAAE,IAAI,CAACM,EAAMpJ,IAAU,CACxE,GAAI,MAAMoJ,CAAI,EACZ,OAAOA,EAIT,GAAIpJ,EAAQmJ,EAAS,OAAQ,CAC3B,MAAME,EAAYF,EAASnJ,CAAK,EAChC,OAAO,MAAMqJ,CAAS,EAAI,IAAMA,CAClC,CACA,MAAO,GACT,CAAC,CACH,EAGMC,EAAgB,CAACC,EAAcC,IAAe,CAElD,GAAI,MAAMD,CAAY,GAAK,MAAMC,CAAU,EACzC,MAAO,CACL,UAAW,eACjB,EAGE,MAAMrG,EAAU,SAASoG,CAAY,GAAK,EAEpCE,EADSD,EACSrG,EAGxB,IAAIuG,EACJ,OAAID,EAAS,EAEXC,EAAa,EAAE,GAAKD,GAAU,IACrBA,EAAS,GAElBC,GAAc,GAAKD,GAAU,IAE7BC,EAAa,CAACD,EAAS,IAGlB,CACL,UAAW,cAAcC,CAAU,KACnC,WAAYlB,EAAY,MAAQ,sDAAwD,OACxF,MAAO3F,EAAM,KACjB,CACA,EAGM8G,EAAiB,IAAM,CAC3B,GAAInB,EAAY,MAAO,OAEvBA,EAAY,MAAQ,GACpB,MAAMoB,EAAY,YAAY,IAAG,EAC3BC,EAAahH,EAAM,MACnBiH,EAAWjH,EAAM,IACjBkH,EAAOD,EAAWD,EAGxBX,EAAe,EAEf,MAAMc,EAAWC,GAAgB,CAC/B,MAAMC,EAAUD,EAAcL,EACxBO,EAAW,KAAK,IAAID,EAAUrH,EAAM,SAAU,CAAC,EAG/CuH,EAAe,EAAI,KAAK,IAAI,EAAID,EAAU,CAAC,EACjD9B,EAAc,MAAQwB,EAAaE,EAAOK,EAG1CC,EAAiBhC,EAAc,KAAK,EAEhC8B,EAAW,EACb,sBAAsBH,CAAO,GAE7B3B,EAAc,MAAQyB,EAEtBO,EAAiBP,CAAQ,EACzBtB,EAAY,MAAQ,GACpB/H,EAAK,UAAU,EAEnB,EAEA,sBAAsBuJ,CAAO,CAC/B,EAGMK,EAAoBvL,GAAU,CAClC,MAAMwL,EAAW7B,EAAa3J,CAAK,EAC7ByL,EAASzB,EAAe,MAG9B,QAAS0B,EAAI,EAAGA,EAAID,EAAO,OAAQC,IAC7BA,EAAIF,EAAS,OACfhC,EAAc,MAAMkC,CAAC,EAAIF,EAASE,CAAC,EAGnClC,EAAc,MAAMkC,CAAC,EAAI,MAAMD,EAAOC,CAAC,CAAC,EAAID,EAAOC,CAAC,EAAI,GAG9D,EAGAjG,OAAAA,EAAAA,MAAM,IAAM1B,EAAM,IAAK,CAAC2B,EAAQC,IAAW,CACzC,GAAID,IAAWC,EAAQ,CAErB,MAAMgG,EAAShC,EAAajE,CAAM,EAC5BkG,EAASjC,EAAahE,CAAM,EAC9BgG,EAAO,SAAWC,EAAO,QAC3BnC,EAAS,OAAS,EAClBtE,EAAAA,SAAS,IAAM,CACb0F,EAAc,CAChB,CAAC,GAEDA,EAAc,CAElB,CACF,CAAC,EAGD3I,EAAAA,UAAU,IAAM,CACd,GAAI6B,EAAM,SAAU,CAElB,MAAMsG,EAAWN,EAAkB,MAC7B8B,EAAS/B,EAAmB,MAC9BO,EAAS,SAAWwB,EAAO,SAC7BpC,EAAS,OAAS,GAGpBtE,EAAAA,SAAS,IAAM,CACb0F,EAAc,CAChB,CAAC,CACH,CACF,CAAC,EAGDiB,EAAa,CACX,eAAAjB,CACF,CAAC,wBAlSChI,EAAAA,mBAiCM,MAAA,CAjCD,MAAKS,EAAAA,eAAA,CAAC,YAAoBH,EAAA,cAAc,CAAA,IAC3C8C,EAAAA,mBA+BM,MAAA,CA/BD,MAAM,gBAAiB,8BAAgB9C,EAAA,KAAK,CAAA,IAEnCA,EAAA,sBAAZN,EAAAA,mBAAsD,OAAtDC,GAAsDoD,EAAAA,gBAAhB/C,EAAA,MAAM,EAAA,CAAA,+BAG5C8C,EAAAA,mBAsBM,MAtBNI,GAsBM,EArBJzD,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAoBMyD,WAAA,KAAAC,EAAAA,WAnByByD,EAAA,MAAc,CAAnC+B,EAAW7K,mBADrB2B,EAAAA,mBAoBM,MAAA,CAlBH,IAAG,SAAW3B,CAAK,IAAIuI,EAAA,KAAQ,GAChC,MAAKnG,EAAAA,eAAA,CAAC,gBAAe,CAAA,kBACQ,MAAMyI,CAAS,EAAA,CAAA,IAGnC,MAAMA,CAAS,iBAYxBlJ,EAAAA,mBAAmD,MAAnDmJ,GAAmD9F,kBAAlB6F,CAAS,EAAA,CAAA,IAb1CnJ,EAAAA,YAAAC,EAAAA,mBAYM,MAZNoJ,GAYM,gBARJpJ,EAAAA,mBAOMyD,EAAAA,SAAA,KAAAC,aANQ,GAAL2F,GADTjG,EAAAA,mBAOM,MAAA,CALH,IAAKiG,EACN,MAAM,aACL,uBAAO1B,EAAcL,EAAgBjJ,CAAK,EAAGgL,EAAC,CAAA,CAAA,qBAE5CA,EAAC,CAAA,EAAA,CAAA,yBAQA/I,EAAA,sBAAZN,EAAAA,mBAAsD,OAAtDsJ,GAAsDjG,EAAAA,gBAAhB/C,EAAA,MAAM,EAAA,CAAA,qmBCgBlD,MAAMY,EAAQZ,EA4CRxB,EAAOC,EAGPuG,EAAQC,EAAAA,SAAQ,EAGhBpE,EAAOhC,EAAAA,IAAI,EAAK,EAGhBoK,EAAYpK,EAAAA,IAAI,CAAA,CAAE,EAGlBqK,EAAiBrK,EAAAA,IAAI,IAAI,EACzBsK,EAAetK,EAAAA,IAAI,IAAI,EAIvBuK,EAAejF,EAAAA,SAAS,IACxB,CAAC8E,EAAU,OAASA,EAAU,MAAM,SAAW,EAC1C,GAGLA,EAAU,MAAM,SAAW,EACtBI,EAAWJ,EAAU,MAAM,CAAC,CAAC,EAG/B,GAAGI,EAAWJ,EAAU,MAAM,CAAC,CAAC,CAAC,GAAGrI,EAAM,SAAS,GAAGyI,EAAWJ,EAAU,MAAM,CAAC,CAAC,CAAC,EAC5F,EAGKK,EAAiBnF,EAAAA,SAAS,IAAM,CAEpC,KAAM,CACJ,WAAAkB,EACA,YAAAkE,EACA,SAAAC,EACA,IAAAC,EACA,IAAAC,EACA,YAAAC,EACA,OAAAC,EACA,UAAAC,EACA,GAAGvE,CACP,EAAMN,EAEJ,OAAOM,CACT,CAAC,EAGK+D,EAAcS,GAAS,CAC3B,GAAI,CAACA,EAAM,MAAO,GAGlB,GAAI,OAAOA,GAAS,SAClB,OAAOA,EAIT,GAAIA,aAAgB,KAAM,CACxB,MAAMC,EAAOD,EAAK,cACZE,EAAQ,OAAOF,EAAK,SAAQ,EAAK,CAAC,EAAE,SAAS,EAAG,GAAG,EACnDG,EAAM,OAAOH,EAAK,QAAO,CAAE,EAAE,SAAS,EAAG,GAAG,EAClD,MAAO,GAAGC,CAAI,IAAIC,CAAK,IAAIC,CAAG,EAChC,CAEA,OAAOH,CACT,EAGMI,EAAU/F,EAAAA,SAAS,IAAMvD,EAAM,GAAG,EAGlCuJ,EAAUhG,EAAAA,SAAS,IAAMvD,EAAM,GAAG,EAGxC0B,EAAAA,MACE,IAAM1B,EAAM,WACXwJ,GAAa,CACZ,GAAI,MAAM,QAAQA,CAAQ,GAAKA,EAAS,OAAS,EAC/CnB,EAAU,MAAQ,CAAC,GAAGmB,CAAQ,EAE1BA,EAAS,CAAC,IAAGlB,EAAe,MAAQkB,EAAS,CAAC,GAC9CA,EAAS,CAAC,IAAGjB,EAAa,MAAQiB,EAAS,CAAC,WACvC,OAAOA,GAAa,UAAYA,EAAU,CAEnD,MAAMC,EAAQD,EAAS,MAAMxJ,EAAM,SAAS,EACxCyJ,EAAM,SAAW,GACnBpB,EAAU,MAAQ,CAACoB,EAAM,CAAC,EAAE,KAAI,EAAIA,EAAM,CAAC,EAAE,KAAI,CAAE,EACnDnB,EAAe,MAAQmB,EAAM,CAAC,EAAE,KAAI,EACpClB,EAAa,MAAQkB,EAAM,CAAC,EAAE,KAAI,IAElCpB,EAAU,MAAQ,GAClBC,EAAe,MAAQ,KACvBC,EAAa,MAAQ,KAEzB,MACEF,EAAU,MAAQ,GAClBC,EAAe,MAAQ,KACvBC,EAAa,MAAQ,IAEzB,EACA,CAAE,UAAW,EAAI,CACnB,EAIA,MAAMmB,EAAqBzN,GAAU,CAE/BA,EACFoM,EAAU,MAAQ,CAACpM,EAAOoM,EAAU,MAAM,CAAC,GAAK,IAAI,EAGhDA,EAAU,MAAM,OAAS,IAC3BA,EAAU,MAAQ,CAAC,KAAMA,EAAU,MAAM,CAAC,GAAK,IAAI,EAGzD,EAGMsB,EAAmB1N,GAAU,CAE7BA,EACFoM,EAAU,MAAQ,CAACA,EAAU,MAAM,CAAC,GAAK,KAAMpM,CAAK,EAGhDoM,EAAU,MAAM,OAAS,IAC3BA,EAAU,MAAQ,CAACA,EAAU,MAAM,CAAC,GAAK,KAAM,IAAI,EAGzD,EAGMuB,EAAa,IAAM,CACvBvB,EAAU,MAAQ,GAClBC,EAAe,MAAQ,KACvBC,EAAa,MAAQ,KACrB3K,EAAK,oBAAqB,CAAA,CAAE,EAC5BA,EAAK,SAAU,CAAA,CAAE,EACjBqC,EAAK,MAAQ,EACf,EAGM4J,EAAS,IAAM,CAEf,MAAM,QAAQ7J,EAAM,UAAU,GAChCqI,EAAU,MAAQ,CAAC,GAAGrI,EAAM,UAAU,EAClCA,EAAM,WAAW,CAAC,IAAGsI,EAAe,MAAQtI,EAAM,WAAW,CAAC,GAC9DA,EAAM,WAAW,CAAC,IAAGuI,EAAa,MAAQvI,EAAM,WAAW,CAAC,KAEhEqI,EAAU,MAAQ,GAClBC,EAAe,MAAQ,KACvBC,EAAa,MAAQ,MAEvBtI,EAAK,MAAQ,EACf,EAGM6J,EAAU,IAAM,CAEpB,IAAIC,EAAc,CAAC,GAAG1B,EAAU,KAAK,EAAE,OAAOa,GAAQA,IAAS,IAAI,EACnE,GAAIa,EAAY,SAAW,EAAG,CAC5B,MAAMC,EAAQ,IAAI,KAAKD,EAAY,CAAC,CAAC,EAC/BE,EAAQ,IAAI,KAAKF,EAAY,CAAC,CAAC,EACjCC,EAAQC,IACVF,EAAc,CAACA,EAAY,CAAC,EAAGA,EAAY,CAAC,CAAC,EAEjD,MAAWA,EAAY,SAAW,IAEhCA,EAAc,CAACA,EAAY,CAAC,EAAGA,EAAY,CAAC,CAAC,GAG/CnM,EAAK,oBAAqBmM,CAAW,EACrCnM,EAAK,SAAUmM,CAAW,EAC1B9J,EAAK,MAAQ,EACf,4VAlSE,OAAApB,YAAA,EAAAC,qBA4DM,MA5DNC,GA4DM,CA3DJC,EAAAA,YA0DQkL,EAAA,YAzDGjK,EAAA,2CAAAA,EAAI,MAAAd,GACZ,yBAAwB,GACzB,WAAW,mBACX,WAAA,GACA,YAAU,OACV,MAAA,KAEW,UAAS2C,EAAAA,QAClB,CAca,CAAA,MAfgBqI,CAAc,IAAA,CAC3CnL,EAAAA,YAcaoL,EAdbpI,aAca,CAAA,GAbEmI,KAAmBzB,EAAA,OAAc,YACrCF,EAAA,2CAAAA,EAAY,MAAArJ,GACpB,YAAaC,EAAA,YACb,SAAUA,EAAA,SACX,SAAA,GACA,UAAA,GACA,QAAQ,UACR,QAAQ,WACP,gBAAawK,KAEH,0BACT,IAAwC,CAAxC5K,EAAAA,YAAwCqL,EAAA,CAAjC,KAAK,OAAO,EAAA,mBAAC,IAAY,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAZ,eAAY,EAAA,mFAKtC,IA+BQ,CA/BRF,EAAAA,YA+BQsL,EAAA,CA/BD,MAAA,CAAA,MAAA,OAAA,GAAqB,mBAC1B,IAqBY,CArBZtL,EAAAA,YAqBYuL,EAAA,CArBD,MAAM,MAAM,EAAA,mBACrB,IAmBM,CAnBNrI,EAAAA,mBAmBM,MAnBNI,GAmBM,CAlBJtD,EAAAA,YAQEwL,EAAA,YAPSlC,EAAA,4CAAAA,EAAc,MAAAnJ,GAKFuK,GAJrB,cAAA,GACC,IAAKJ,EAAA,MACL,IAAKC,EAAA,MACL,eAAcnK,EAAA,YAEf,MAAM,sEAERJ,EAAAA,YAQEwL,EAAA,YAPSjC,EAAA,4CAAAA,EAAY,MAAApJ,GAKAwK,GAJrB,cAAA,GACC,IAAKL,EAAA,MACL,IAAKC,EAAA,MACL,eAAcnK,EAAA,YAEf,MAAM,gFAKZJ,EAAAA,YAAqByL,CAAA,EAErBzL,EAAAA,YAIe0L,EAAA,KAAA,mBAHb,IAAmB,CAAnB1L,EAAAA,YAAmB2L,CAAA,EACnB3L,EAAAA,YAAoC4L,EAAA,CAA9B,KAAA,GAAM,QAAOf,sBAAQ,IAAE,CAAA,GAAA3K,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAF,KAAE,EAAA,YAC7BF,EAAAA,YAAgE4L,EAAA,CAA1D,MAAM,UAAU,QAAQ,QAAS,QAAOd,sBAAS,IAAE,CAAA,GAAA5K,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAF,KAAE,EAAA,mgBCvDnE,KAAM,CAAE,MAAAxB,CAAK,EAAKC,EAAAA,qBACZK,EAAO,KAAK,MAAMN,EAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,EAChDmN,EAASC,GAAO,IAAI,QAASC,GAAY,WAAWA,EAASD,CAAE,CAAC,EAGhE9K,EAAQZ,EAQRxB,EAAOC,EAGPmN,EAAS/M,EAAAA,IAAI,EAAK,EAIlBC,EAAWD,EAAAA,IAAI,CAAA,CAAE,EACjBgN,EAAmBhN,EAAAA,IAAI,CAAA,CAAE,EACzBiN,EAAoBjN,EAAAA,IAAI,CAAA,CAAE,EAEhCyD,EAAAA,MAAMwJ,EAAmB,CAACvJ,EAAQC,IAAW,OAEvCD,GAAUA,EAAO,OAAS,KAAKtD,EAAAsD,EAAO,CAAC,IAAR,MAAAtD,EAAW,WAC5C8M,EAAYxJ,CAAM,CAEtB,EAAG,CAAE,KAAM,EAAI,CAAE,EAEjBD,EAAAA,MAAMuJ,EAAkB,CAACtJ,EAAQC,IAAW,OAEtCD,GAAUA,EAAO,OAAS,KAAKtD,EAAAsD,EAAO,CAAC,IAAR,MAAAtD,EAAW,WAC5C8M,EAAYxJ,CAAM,CAEtB,EAAG,CAAE,KAAM,EAAI,CAAE,EAGjB,MAAMyJ,EAAc,IAAM,CACpBpN,GAAQA,EAAK,UACfN,EAAM,KAAK,QAAQ,QAAQ,mBAAmBM,EAAK,QAAQ,EAAE,EAAE,KAAMjB,GAAQ,CACvEA,GAAOA,EAAI,OACbmB,EAAS,MAAQ,CAAC,CAChB,SAAUnB,EAAI,KAAK,SACnB,SAAUA,EAAI,KAAK,SACnB,SAAU,CAAA,CACpB,CAAS,EAEL,CAAC,CAEL,EAGMsO,EAAkB,MAAOnK,GAAS,CACtC,MAAM2J,EAAM,GAAG,EACf,MAAMS,EAAapK,EAAK,SACxBxD,EAAM,KAAK,QAAQ,QAAQ,mBAAmB4N,CAAU,EAAE,EAAE,KAAMvO,GAAQ,CACpEA,GAAOA,EAAI,MACbA,EAAI,KAAK,QAASoI,GAAO,CACvBA,EAAG,SAAW,KAAOA,EAAG,SAAW,CAAA,GACnCjE,EAAK,SAAS,KAAKiE,CAAE,CACvB,CAAC,CAEL,CAAC,CACH,EAGMoG,EAAWtN,EAAAA,IAAI,CAAA,CAAE,EACjBuN,EAAmBvN,EAAAA,IAAI,CAAA,CAAE,EACzBwN,EAAoBxN,EAAAA,IAAI,CAAA,CAAE,EAEhCyD,EAAAA,MAAM8J,EAAkB,CAAC7J,EAAQC,IAAW,OAEtCD,GAAUA,EAAO,OAAS,KAAKtD,EAAAsD,EAAO,CAAC,IAAR,MAAAtD,EAAW,KAC5CqN,EAAc/J,CAAM,CAExB,EAAG,CAAE,KAAM,EAAI,CAAE,EAEjBD,EAAAA,MAAM+J,EAAmB,CAAC9J,EAAQC,IAAW,OAEvCD,GAAUA,EAAO,OAAS,KAAKtD,EAAAsD,EAAO,CAAC,IAAR,MAAAtD,EAAW,KAC5CqN,EAAc/J,CAAM,CAExB,EAAG,CAAE,KAAM,EAAI,CAAE,EAGjB,MAAMwJ,EAAeQ,GAAS,CAE5B,MAAMC,EAAS,CAAE,MAAO,CAAE,KADHD,EAAK,CAAC,EAAE,SACiB,KAAM,GAAG,GACzDJ,EAAS,MAAQ,GACjB7N,EAAM,KAAK,QAAQ,SAAS,4BAA6BkO,CAAM,EAAE,KAAM7O,GAAQ,CAC7EA,EAAI,KAAK,QAASoI,GAAO,CACvBA,EAAG,SAAW,GACdoG,EAAS,MAAM,KAAKpG,CAAE,CACxB,CAAC,CACH,CAAC,CACH,EAEM0G,EAAiB,MAAO3K,GAAS,CACrC,MAAM2J,EAAM,GAAG,EACf,MAAMiB,EAAiB5K,EAAK,SACtB6K,EAAY7K,EAAK,GACjB0K,EAAS,CAAE,MAAO,CAAE,KAAME,EAAgB,IAAKC,CAAS,GAC9DrO,EAAM,KAAK,QAAQ,SAAS,4BAA6BkO,CAAM,EAAE,KAAM7O,GAAQ,CACzEA,GAAOA,EAAI,MACbA,EAAI,KAAK,QAASoI,GAAO,CACvBA,EAAG,SAAW,GACdjE,EAAK,SAAS,KAAKiE,CAAE,CACvB,CAAC,CAEL,CAAC,CACH,EAGM6G,EAAa/N,EAAAA,IAAI,CAAA,CAAE,EACnBgO,EAAqBhO,EAAAA,IAAI,CAAA,CAAE,EAE3BiO,EAAqBjO,EAAAA,IAAI,CAAA,CAAE,EAE3BkO,EAAuBlO,EAAAA,IAAI,EAAK,EAGhCmO,EAAqB7I,EAAAA,SAAS,IAAM,CAExC,MAAM8I,EAAY,IAAI,IACtB,OAAAH,EAAmB,MAAM,QAAQI,GAAU,CACrCA,GAAUA,EAAO,IACnBD,EAAU,IAAIC,EAAO,GAAIA,CAAM,CAEnC,CAAC,EAEM,MAAM,KAAKD,EAAU,OAAM,CAAE,CACtC,CAAC,EAGD3K,EAAAA,MAAMuK,EAAoB,CAACtK,EAAQC,IAAW,CAE5C,GAAI,CAAAuK,EAAqB,MAKzB,IAAI,CAACnM,EAAM,SAAU,CACf2B,GAAUA,EAAO,OAAS,EAE5BuK,EAAmB,MAAQ,CAACvK,EAAO,CAAC,CAAC,EAGrCuK,EAAmB,MAAQ,GAE7B,MACF,CAIIvK,GAAUA,EAAO,OAAS,GAC5BA,EAAO,QAAQ2K,GAAU,CACRJ,EAAmB,MAAM,KAAKvI,GAAKA,EAAE,KAAO2I,EAAO,EAAE,GAElEJ,EAAmB,MAAM,KAAKI,CAAM,CAExC,CAAC,EAIC1K,GAAUA,EAAO,OAAS,GAC5BA,EAAO,QAAQ2K,GAAa,CAE1B,GAAI,EADkB5K,GAAA,YAAAA,EAAQ,KAAKgC,GAAKA,EAAE,KAAO4I,EAAU,KACvC,CAElB,MAAMpP,EAAQ+O,EAAmB,MAAM,UAAUvI,GAAKA,EAAE,KAAO4I,EAAU,EAAE,EACvEpP,EAAQ,IACV+O,EAAmB,MAAM,OAAO/O,EAAO,CAAC,CAE5C,CACF,CAAC,EAEL,EAAG,CAAE,KAAM,EAAI,CAAE,EAGjBuE,EAAAA,MAAMsK,EAAY,MAAOQ,GAAkB,CACzC,GAAI,CAACA,GAAiBA,EAAc,SAAW,EAAG,CAChDL,EAAqB,MAAQ,GAC7BF,EAAmB,MAAQ,GAC3B,MAAM7K,EAAAA,SAAQ,EACd+K,EAAqB,MAAQ,GAC7B,MACF,CAGA,MAAM/K,EAAAA,SAAQ,EAGd+K,EAAqB,MAAQ,GAG7B,MAAMM,EAAkB,CAAA,EACxBD,EAAc,QAAQF,GAAU,CACXJ,EAAmB,MAAM,KAAKvI,GAAKA,EAAE,KAAO2I,EAAO,EAAE,GAEtEG,EAAgB,KAAKH,CAAM,CAE/B,CAAC,EAEDL,EAAmB,MAAQQ,EAG3B,MAAMrL,EAAAA,SAAQ,EACd+K,EAAqB,MAAQ,EAC/B,EAAG,CAAE,KAAM,EAAI,CAAE,EAGjB,MAAMO,EAAwBC,GAAa,CAEzC,MAAMC,EAAcV,EAAmB,MAAM,UAAUI,GAAUA,EAAO,KAAOK,CAAQ,EACnFC,EAAc,IAChBV,EAAmB,MAAM,OAAOU,EAAa,CAAC,EAIhD,MAAMC,EAAeZ,EAAmB,MAAM,UAAUK,GAAUA,EAAO,KAAOK,CAAQ,EACpFE,EAAe,IACjBZ,EAAmB,MAAM,OAAOY,EAAc,CAAC,CAEnD,EAKMnB,EAAiBC,GAAS,CAE9B,MAAMC,EAAS,CAAE,MAAO,CAAE,KADLD,EAAK,CAAC,EAAE,EACe,CAAE,EAE9CjO,EAAM,KAAK,QAAQ,SAAS,4BAA6BkO,CAAM,EAAE,KAAM7O,GAAQ,CACzEA,GAAOA,EAAI,KAAK,SAAWA,EAAI,KAAK,OAAS,EAC/CiP,EAAW,MAAQjP,EAAI,KAEvBiP,EAAW,MAAQ,IAEvB,CAAC,CACH,EACMc,EAAM,IAAM,CAChB9B,EAAO,MAAQ,EACjB,EAEMxJ,EAAQ,IAAM,CAElB2K,EAAqB,MAAQ,GAG7BnB,EAAO,MAAQ,GAGfiB,EAAmB,MAAQ,GAC3BC,EAAmB,MAAQ,GAC3BjB,EAAiB,MAAQ,GACzBC,EAAkB,MAAQ,GAC1BM,EAAiB,MAAQ,GACzBC,EAAkB,MAAQ,GAC1BO,EAAW,MAAQ,GACnBT,EAAS,MAAQ,GAGjBnK,EAAAA,SAAS,IAAM,CACb+K,EAAqB,MAAQ,EAC/B,CAAC,CACH,EAGMrC,EAAU,IAAM,CAEpB,MAAMiD,EAAkBX,EAAmB,MAE3CxO,EAAK,WAAYmP,CAAe,EAChCvL,GACF,EAEArD,OAAAA,EAAAA,UAAU,IAAM,CAEdiN,GACF,CAAC,EAGDrD,EAAa,CACX,MAAAvG,EACA,IAAAsL,CACF,CAAC,8lBAICzN,EAAAA,YAgIW2N,GAAA,YAhIQhC,EAAA,2CAAAA,EAAM,MAAA7L,GAAE,WAAA,GAAW,MAAM,2BAC1C,IA8HS,CA9HTH,EAAAA,YA8HSqD,GAAA,KAAA,mBA7HP,IAMe,CANfrD,EAAAA,YAMeiO,EAAA,CAND,MAAM,qBAAqB,EAAA,mBACvC,IAAiC,CAAjC/N,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAgD,EAAAA,mBAAiC,OAAA,CAA3B,MAAM,SAAS,EAAC,OAAI,EAAA,GAC1BlD,EAAAA,YAAqBkE,CAAA,EACrBlE,EAAAA,YAEQ+C,EAAA,CAFD,MAAM,cAAc,KAAA,GAAM,QAAOP,EAAO,KAAK,4BAClD,IAA0B,CAA1BxC,EAAAA,YAA0BoD,EAAA,KAAA,mBAAlB,IAAS,CAAA,GAAAlD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAT,YAAS,EAAA,4BAGrBF,EAAAA,YAAakO,CAAA,EACblO,EAAAA,YA8GcmO,GAAA,CA9GD,MAAM,sBAAsB,MAAA,CAAA,OAAA,OAAA,sBACvC,IA4GQ,CA5GRnO,cA4GQoO,GAAA,CA5GD,MAAA,CAAA,aAAA,QAAA,OAAA,MAAA,GAAuC,mBAC5C,IAaQ,CAbRpO,EAAAA,YAaQqO,EAAA,CAbD,GAAG,IAAI,MAAM,OAAQ,MAAA,CAAA,eAAA,iBAAA,OAAA,OAAA,sBAC1B,IAEe,CAFfrO,EAAAA,YAEeiO,EAAA,CAFD,MAAM,+CAAgD,EAAA,mBAClE,IAA+B,CAAA,GAAA/N,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,CAA/BgD,EAAAA,mBAA+B,OAAA,CAAzB,MAAM,SAAS,EAAC,KAAE,EAAA,YAE1BlD,EAAAA,YAQU0D,EAAA,CARD,OAAO,MAAM,MAAA,CAAA,SAAA,MAAA,EAAuB,MAAM,gCACjD,IAMa,CANb1D,EAAAA,YAMasO,EAAA,CAND,aAAW,KAAK,aAAW,WAAW,gBAAA,GAAe,MAAOpP,EAAA,MAAU,QAAQ,UACxF,MAAM,UAAU,aAAA,GAAW,YAAA,GAAoB,SAAU+M,EAAA,yCAAAA,EAAgB,MAAA9L,GACjE,UAAW+L,EAAA,0CAAAA,EAAiB,MAAA/L,GAAG,gBAAekM,IACrC,MAAKvJ,EAAAA,QACpB,CAAuD,CAD/B,KAAAZ,KAAI,CAC5BgB,EAAAA,mBAAuD,OAAA,CAAhD,MAAOhB,EAAK,QAAa,EAAAiB,EAAAA,gBAAAjB,EAAK,QAAQ,EAAA,EAAAnC,EAAA,6DAKrDC,EAAAA,YAmBQqO,EAAA,CAnBD,GAAG,IAAI,MAAM,YAAY,MAAA,CAAA,eAAA,iBAAA,OAAA,OAAA,sBAC9B,IAEe,CAFfrO,EAAAA,YAEeiO,EAAA,CAFD,MAAM,+CAAgD,EAAA,mBAClE,IAA+B,CAAA,GAAA/N,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,CAA/BgD,EAAAA,mBAA+B,OAAA,CAAzB,MAAM,SAAS,EAAC,KAAE,EAAA,YAE1BlD,EAAAA,YAcU0D,EAAA,CAdD,OAAO,MAAM,MAAA,CAAA,SAAA,MAAA,EAAuB,MAAM,gCACjD,IAMa,CANK6I,EAAA,OAAYA,EAAA,MAAS,OAAM,iBAA7ClM,EAAAA,YAMaiO,EAAA,OANsC,aAAW,KAAK,aAAW,OAAO,gBAAA,GAAe,MAAO/B,EAAA,MAAU,QAAQ,UAC3H,MAAM,UAAU,aAAA,GAAW,YAAA,GAAoB,SAAUC,EAAA,yCAAAA,EAAgB,MAAArM,GACjE,UAAWsM,EAAA,0CAAAA,EAAiB,MAAAtM,GAAG,gBAAe0M,IACrC,MAAK/J,EAAAA,QACpB,CAA+C,CADvB,KAAAZ,KAAI,CAC5BgB,EAAAA,mBAA+C,OAAA,CAAxC,MAAOhB,EAAK,IAAS,EAAAiB,EAAAA,gBAAAjB,EAAK,IAAI,EAAA,EAAAoB,EAAA,+CAGzCzD,EAAAA,YAAAC,EAAAA,mBAKM,MALNoJ,GAKM,CAJJlJ,EAAAA,YAESoD,EAAA,CAFD,KAAK,KAAK,MAAM,iBAAiB,MAAM,2BAAO,IAEtD,CAAA,GAAAlD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAFsD,gCAEtD,EAAA,YACAA,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAgD,EAAAA,mBAA+B,MAAA,CAA1B,MAAM,aAAY,KAAE,EAAA,sBAI/BlD,EAAAA,YAiCQqO,EAAA,CAjCD,GAAG,IAAI,MAAM,YAAa,MAAA,CAAA,eAAA,iBAAA,OAAA,OAAA,sBAC/B,IAEe,CAFfrO,EAAAA,YAEeiO,EAAA,CAFD,MAAM,+CAAgD,EAAA,mBAClE,IAA+B,CAAA,GAAA/N,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,CAA/BgD,EAAAA,mBAA+B,OAAA,CAAzB,MAAM,SAAS,EAAC,KAAE,EAAA,YAE1BlD,EAAAA,YA4BU0D,EAAA,CA5BD,OAAO,MAAM,MAAA,CAAA,SAAA,MAAA,EAAwB,MAAM,2BAClD,IAoBa,CApBKsJ,EAAA,OAAcA,EAAA,MAAW,OAAM,iBAAjD3M,EAAAA,YAoBaiO,EAAA,OAnBX,aAAW,KACX,aAAW,WACX,gBAAA,GACC,MAAOtB,EAAA,MACR,QAAQ,UACR,MAAM,UACN,aAAA,GACA,WAAA,GACC,kBAAiB5M,EAAA,SAAQ,OAAA,cAClB,SAAU6M,EAAA,yCAAAA,EAAkB,MAAA9M,KACnB,MAAK2C,EAAAA,QACpB,CAMM,CAPkB,KAAAZ,KAAI,CAC5BgB,EAAAA,mBAMM,MAAA,CAND,MAAM,sBAAuB,MAAOhB,EAAK,WAC5ClC,EAAAA,YAGWuO,GAAA,CAHD,KAAK,KAAK,MAAM,2BACxB,IAAqD,CAAxCrM,EAAK,sBAAlB7B,EAAAA,YAAqDmO,EAAA,OAA1B,IAAKtM,EAAK,wCACrC7B,EAAAA,YAAoD+C,EAAA,OAArC,KAAK,yBAAK,IAAkB,CAAA,GAAAlD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAlB,qBAAkB,EAAA,0BAE7CgD,EAAAA,mBAAgC,OAAA,KAAAC,EAAAA,gBAAvBjB,EAAK,QAAQ,EAAA,CAAA,4DAI5BrC,EAAAA,YAAAC,EAAAA,mBAKM,MALNsJ,GAKM,CAJJpJ,EAAAA,YAESoD,EAAA,CAFD,KAAK,KAAK,MAAM,iBAAiB,MAAM,2BAAO,IAEtD,CAAA,GAAAlD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAFsD,sBAEtD,EAAA,YACAA,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAgD,EAAAA,mBAA+B,MAAA,CAA1B,MAAM,aAAY,KAAE,EAAA,sBAI/BlD,EAAAA,YAsCQqO,EAAA,CAtCD,GAAG,IAAI,MAAM,YAAY,MAAA,CAAA,eAAA,iBAAA,OAAA,OAAA,sBAC9B,IAEe,CAFfrO,EAAAA,YAEeiO,EAAA,CAFD,MAAM,+CAAgD,EAAA,mBAClE,IAAoE,CAApE/K,qBAAoE,OAApEuL,GAAsB,4BAAUrB,EAAA,MAAmB,MAAM,EAAG,IAAC,CAAA,UAE/DpN,EAAAA,YAiCU0D,EAAA,CAjCD,OAAO,MAAM,MAAA,CAAA,SAAA,MAAA,EAAuB,MAAM,gCACjD,IAyBS,CAzBK0J,EAAA,MAAmB,OAAM,iBAAvC/M,EAAAA,YAyBSqO,GAAA,OAzBoC,QAAQ,8BAEjD,IAAoC,kBADtC5O,EAAAA,mBAuBcyD,EAAAA,SAAA,KAAAC,EAAAA,WAtBK4J,EAAA,MAAVE,kBADTjN,EAAAA,YAuBcsO,GAAA,CArBX,IAAKrB,EAAO,GACZ,MAAOA,EAAO,SACf,MAAM,iBACN,QAAQ,KACR,MAAM,UACN,QAAQ,UACS,kBACf,IAGW,CAHXtN,EAAAA,YAGWuO,GAAA,CAHD,KAAK,IAAI,EAAA,mBACjB,IAAyD,CAA5CjB,EAAO,sBAApBjN,EAAAA,YAAyDmO,EAAA,OAA5B,IAAKlB,EAAO,wCACzCjN,EAAAA,YAA0C+C,EAAA,CAAA,IAAA,CAAA,EAAA,mBAA3B,IAAkB,CAAA,GAAAlD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAlB,qBAAkB,EAAA,4BAGpB,iBACf,IAMQ,CANRF,EAAAA,YAMQ+C,EAAA,CALN,KAAA,GACA,KAAK,UACL,QAAQ,OACP,QAAK5C,IAAEuN,EAAqBJ,EAAO,EAAE,sBACtC,IAAoC,CAApCtN,EAAAA,YAAoCoD,EAAA,CAA5B,KAAK,IAAI,EAAA,mBAAC,IAAS,CAAA,GAAAlD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAT,YAAS,EAAA,2EAKnCL,EAAAA,YAAAC,EAAAA,mBAKM,MALN8O,GAKM,CAJJ5O,EAAAA,YAESoD,EAAA,CAFD,KAAK,KAAK,MAAM,iBAAiB,MAAM,2BAAO,IAEtD,CAAA,GAAAlD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAFsD,gBAEtD,EAAA,YACAA,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAgD,EAAAA,mBAAiC,MAAA,CAA5B,MAAM,aAAY,OAAI,EAAA,sCAMrClD,EAAAA,YAAakO,CAAA,EACblO,EAAAA,YAIiBiE,GAAA,KAAA,mBAHf,IAAqB,CAArBjE,EAAAA,YAAqBkE,CAAA,EACrBlE,EAAAA,YAAsD+C,EAAA,CAA/C,MAAM,WAAW,KAAA,GAAM,QAAOP,sBAAO,IAAE,CAAA,GAAAtC,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAF,KAAE,EAAA,YAC9CF,EAAAA,YAA6D+C,EAAA,CAAtD,MAAM,gBAAgB,KAAA,GAAM,QAAO+H,sBAAS,IAAE,CAAA,GAAA5K,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAF,KAAE,EAAA,kgBCha3DG,EAAAA,YAiCgBwO,EAAA,CAhCb,SAAUzO,EAAA,SACV,MAAOA,EAAA,MACP,KAAMA,EAAA,KACN,MAAOA,EAAA,MACP,KAAMA,EAAA,KACN,QAASA,EAAA,QACT,UAAWA,EAAA,gCAGI0O,EAAAA,OAAO,YAAQ,qBAC7B,IAA0B,CAA1BC,EAAAA,WAA0BC,EAAA,OAAA,QAAA,CAAA,EAAA,OAAA,EAAA,oBAIZF,EAAAA,OAAO,YAAQ,qBAC7B,IAA0B,CAA1BC,EAAAA,WAA0BC,EAAA,OAAA,QAAA,CAAA,EAAA,OAAA,EAAA,oBAIZF,EAAAA,OAAO,WAAO,oBAC5B,IAAyB,CAAzBC,EAAAA,WAAyBC,EAAA,OAAA,OAAA,CAAA,EAAA,OAAA,EAAA,oBAIXF,EAAAA,OAAO,cAAU,uBAC/B,IAA4B,CAA5BC,EAAAA,WAA4BC,EAAA,OAAA,UAAA,CAAA,EAAA,OAAA,EAAA,oBAIdF,EAAAA,OAAO,aAAS,sBAC9B,IAA2B,CAA3BC,EAAAA,WAA2BC,EAAA,OAAA,SAAA,CAAA,EAAA,OAAA,EAAA,iNCVjC,MAAMC,EAAUhQ,EAAAA,IAAI,EAAK,EAEnBiQ,EAAWjQ,EAAAA,IAAI,mBAAmB,EAGlCkQ,EAAe,IAAM,CACzBF,EAAQ,MAAQ,OAAO,QAAU,GACnC,EAGMG,EAAc,IAAM,CACxB,OAAO,SAAS,CACd,IAAK,EACL,SAAU,QACd,CAAG,CACH,EAGAjQ,OAAAA,EAAAA,UAAU,IAAM,CACd,OAAO,iBAAiB,SAAUgQ,CAAY,CAChD,CAAC,EAGDE,EAAAA,gBAAgB,IAAM,CACpB,OAAO,oBAAoB,SAAUF,CAAY,CACnD,CAAC,mEA9CC9O,EAAAA,YAQaiP,EAAAA,WAAA,CARD,KAAK,YAAU,mBACzB,IAMS,CALDL,EAAA,qBADR5O,EAAAA,YAMSkP,EAAA,OAJN,uBAAOL,EAAA,KAAQ,EAChB,MAAM,UACN,KAAK,eACJ,QAAOE,ouBC6Dd,MAAMpO,EAAQZ,EAkCRoP,EAAoBjL,EAAAA,SAAS,IAC7B,OAAOvD,EAAM,UAAa,SACrBA,EAAM,SAAW,KAEnBA,EAAM,QACd,EAGKyO,EAAgBlL,EAAAA,SAAS,IAAM,CACnC,MAAMmL,EAAS,CAAA,EAGf,OAAI1O,EAAM,KAAOA,EAAM,WACrB0O,EAAO,SAAWF,EAAkB,OAG/BE,CACT,CAAC,8BAvHC5P,EAAAA,mBAuDM,MAAA,CAtDJ,wBAAM,MAAK,uBAC6BM,EAAA,6BAAsCA,EAAA,OAI9E,MAAA,CAAA,SAAA,UAAA,IAIQA,EAAA,OAASA,EAAA,KADjBP,EAAAA,YAAAC,EAAAA,mBAMM,MANNC,GAMM,CAFQK,EAAA,oBAAZN,EAAAA,mBAAgD,OAAhDwD,GAAwC,GAAC,+BACzCJ,EAAAA,mBAAwB,8BAAf9C,EAAA,KAAK,EAAA,CAAA,iCAKRA,EAAA,QAAUA,EAAA,mBADlBN,EAAAA,mBASM,MAAA,OAPH,MAAKS,EAAAA,eAAA,CAAEH,EAAA,KAAI,GAAA,cACN,2BAA2B,CAAA,EAChC,MAAKU,EAAAA,eAAA,CAAEV,EAAA,OACR,CAAA,YAAA,mBAAA,iBAAA,MAAA,cAAA,MAAA,CAA0E,CAAA,IAE9DA,EAAA,oBAAZN,EAAAA,mBAA2C,OAA3CoJ,GAAmC,GAAC,+BACpChG,EAAAA,mBAAwB,8BAAf9C,EAAA,KAAK,EAAA,CAAA,mCAKRA,EAAA,mBADRN,EAAAA,mBAKM,MAAA,OAHH,uBAAO2P,EAAA,KAAa,IAErBV,EAAAA,WAAaC,EAAA,OAAA,UAAA,CAAA,EAAA,OAAA,EAAA,mCAKN5O,EAAA,iCADTP,EAAAA,YAAAC,EAAAA,mBAMM,MANNmJ,GAMM,CADJ8F,EAAAA,WAAaC,EAAA,OAAA,UAAA,CAAA,EAAA,OAAA,EAAA,KAKP5O,EAAA,MAAQA,EAAA,MAAI,CAAKA,EAAA,KADzBP,EAAAA,YAAAC,EAAAA,mBAOM,MAPNsJ,GAOM,CAFJlG,EAAAA,mBAA4D,IAA5DuL,GAA4DtL,EAAAA,gBAAZ/C,EAAA,KAAK,EAAA,CAAA,EACrD8C,qBAA2B,OAAA,CAArB,UAAQ9C,EAAA,MAAI,KAAA,EAAAwO,EAAA,qkCC8CxB,MAAM5N,EAAQZ,EAiDRuP,EAAc1Q,EAAAA,IAAI,EAAK,EAEvB2Q,EAAgB3Q,EAAAA,IAAI,CAAC,EAErB4O,EAAe5O,EAAAA,IAAI,CAAC,EAGpB4Q,EAAetL,EAAAA,SAAS,IAAM,OAClC,GAAI,CAACvD,EAAM,IAAK,OAAOA,EAAM,IAE7B,GAAI,CAEF,GAAI,OAAO,MAAQ,QAAO3B,EAAA,OAAO,KAAK,UAAZ,YAAAA,EAAqB,MAAQ,WAAY,CACjE,MAAMyQ,EAAQ,OAAO,KAAK,QAAQ,IAAI,OAAO,EAC7C,OAAOA,EAAQ,GAAG9O,EAAM,GAAG,WAAW8O,CAAK,GAAK9O,EAAM,GACxD,KAEK,CACH,MAAM8O,EAAQ,aAAa,QAAQ,OAAO,EAC1C,OAAOA,EAAQ,GAAG9O,EAAM,GAAG,WAAW8O,CAAK,GAAK9O,EAAM,GACxD,CACF,OAASnD,EAAO,CAEd,eAAQ,KAAK,uDAAwDA,CAAK,EACnEmD,EAAM,GACf,CACF,CAAC,EAGK+O,EAAkBxL,EAAAA,SAAS,IAAM,OACrC,GAAIvD,EAAM,UAAU,OAAS,GAAK6M,EAAa,MAAQ7M,EAAM,UAAU,OAAQ,CAC7E,MAAMgP,EAAehP,EAAM,UAAU6M,EAAa,KAAK,EACvD,GAAImC,GAAgBA,EAAa,IAC/B,GAAI,CAEF,GAAI,OAAO,MAAQ,QAAO3Q,EAAA,OAAO,KAAK,UAAZ,YAAAA,EAAqB,MAAQ,WAAY,CACjE,MAAMyQ,EAAQ,OAAO,KAAK,QAAQ,IAAI,OAAO,EAC7C,OAAOA,EAAQ,GAAGE,EAAa,GAAG,WAAWF,CAAK,GAAKE,EAAa,GACtE,KAAO,CACL,MAAMF,EAAQ,aAAa,QAAQ,OAAO,EAC1C,OAAOA,EAAQ,GAAGE,EAAa,GAAG,WAAWF,CAAK,GAAKE,EAAa,GACtE,CACF,MAAgB,CACd,OAAOA,EAAa,GACtB,CAEJ,CACA,OAAOH,EAAa,KACtB,CAAC,EAGKI,EAAoB1L,EAAAA,SAAS,IAAM,CACvC,GAAIvD,EAAM,UAAU,OAAS,GAAK6M,EAAa,MAAQ7M,EAAM,UAAU,OAAQ,CAC7E,MAAMgP,EAAehP,EAAM,UAAU6M,EAAa,KAAK,EACvD,OAAOmC,GAAA,YAAAA,EAAc,QAAS,EAChC,CACA,OAAOhP,EAAM,KACf,CAAC,EAGKkP,EAA0B3L,EAAAA,SAAS,IAAM,CAC7C,GAAIvD,EAAM,UAAU,OAAS,GAAK6M,EAAa,MAAQ7M,EAAM,UAAU,OAAQ,CAC7E,MAAMgP,EAAehP,EAAM,UAAU6M,EAAa,KAAK,EACvD,OAAOmC,GAAA,YAAAA,EAAc,cAAe,EACtC,CACA,OAAOhP,EAAM,WACf,CAAC,EAGKmP,EAAU5L,EAAAA,SAAS,IAChBvD,EAAM,UAAU,OAAS,GAAK6M,EAAa,MAAQ,CAC3D,EAGKuC,EAAU7L,EAAAA,SAAS,IAChBvD,EAAM,UAAU,OAAS,GAAK6M,EAAa,MAAQ7M,EAAM,UAAU,OAAS,CACpF,EAGD0B,EAAAA,MAAMiN,EAAchN,GAAW,CACzBA,IAEFiN,EAAc,MAAQ,EACtB/B,EAAa,MAAQ7M,EAAM,MAE/B,CAAC,EAGD,MAAMqP,EAAc,IAAM,CACpBrP,EAAM,UACR2O,EAAY,MAAQ,GAExB,EAGMW,EAAe,IAAM,CACzBX,EAAY,MAAQ,EACtB,EAGMY,EAAY,IAAM,CAClBJ,EAAQ,QACVtC,EAAa,QACb+B,EAAc,MAAQ,EAE1B,EAGMY,EAAY,IAAM,CAClBJ,EAAQ,QACVvC,EAAa,QACb+B,EAAc,MAAQ,EAE1B,EAGMa,EAAeC,GAAY,CAC/Bd,EAAc,OAASc,CACzB,sbA1QE,OAAA7Q,YAAA,EAAAC,qBAwFM,MAxFNC,GAwFM,CAvFJC,EAAAA,YA2BQsL,EAAA,CA1BL,gEAAmDlL,EAAA,OAAO,CAAA,CAAA,EAC1D,QAAOiQ,sBAER,IAYQ,CAZRrQ,EAAAA,YAYQwO,EAZRxL,aAYQgM,EAAA,OAXQ,CACb,IAAKa,EAAA,MACN,MAAM,UACL,eAAczP,EAAA,YACf,MAAA,MAEiB,sBACf,IAEM,CAFN8C,EAAAA,mBAEM,MAFNI,GAEM,CADJtD,EAAAA,YAAgF2Q,EAAA,CAA3D,cAAA,GAAc,MAAM,uDAMfvQ,EAAA,WAAaA,EAAA,iBAA7CP,EAAAA,YAAAC,EAAAA,mBAOM,MAPNoJ,GAOM,CANc9I,EAAA,yBAAlBC,EAAAA,YAEauQ,EAAA,OAFgB,MAAM,yDACjC,IAAW,qCAARxQ,EAAA,KAAK,EAAA,CAAA,uCAEaA,EAAA,+BAAvBC,EAAAA,YAEkBwQ,EAAA,OAFsB,MAAM,4DAC5C,IAAiB,qCAAdzQ,EAAA,WAAW,EAAA,CAAA,0FAMpBJ,EAAAA,YAwDU8Q,EAAA,YAvDCnB,EAAA,2CAAAA,EAAW,MAAAxP,GACpB,YAAU,MACV,WAAA,GACC,kBAAemQ,sBAEhB,IAiDQ,CAjDRtQ,EAAAA,YAiDQsL,EAAA,CAjDD,MAAM,mBAAmB,EAAA,mBAC9B,IAcY,CAdZtL,EAAAA,YAcY+Q,EAAA,CAdD,KAAA,GAAK,MAAM,8BACpB,IAEO,CAFP/Q,EAAAA,YAEO4L,EAAA,CAFD,KAAA,GAAK,KAAA,GAAM,QAAO0E,sBACtB,IAAwB,CAAxBtQ,EAAAA,YAAwBqL,EAAA,KAAA,mBAAjB,IAAS,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAT,YAAS,EAAA,oBAElBF,EAAAA,YAA0DgR,EAAA,KAAA,mBAAzC,IAAuB,qCAApBf,EAAA,KAAiB,EAAA,CAAA,UACrCjQ,EAAAA,YAAmB2L,CAAA,EACnB3L,EAAAA,YAOkBiR,EAAA,KAAA,mBANhB,IAEO,CAFPjR,EAAAA,YAEO4L,EAAA,CAFD,KAAA,GAAK,KAAA,GAAM,uBAAO6E,EAAW,GAAA,uBACjC,IAA8B,CAA9BzQ,EAAAA,YAA8BqL,EAAA,KAAA,mBAAvB,IAAe,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAf,kBAAe,EAAA,oBAExBF,EAAAA,YAEO4L,EAAA,CAFD,KAAA,GAAK,KAAA,GAAM,uBAAO6E,EAAW,EAAA,uBACjC,IAA+B,CAA/BzQ,EAAAA,YAA+BqL,EAAA,KAAA,mBAAxB,IAAgB,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAhB,mBAAgB,EAAA,oCAK7BgD,EAAAA,mBA0BM,MA1BN+F,GA0BM,CAxBIkH,EAAA,qBADR9P,EAAAA,YAOOuL,EAAA,OALL,KAAA,GACA,MAAM,yBACL,QAAO2E,sBAER,IAA+B,CAA/BvQ,EAAAA,YAA+BqL,EAAA,KAAA,mBAAxB,IAAgB,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAhB,mBAAgB,EAAA,iDAGzBgD,EAAAA,mBAMM,MANNkG,GAMM,CALJpJ,EAAAA,YAIEwO,EAAA,CAHC,IAAKuB,EAAA,MACN,MAAM,eACL,4CAA8BH,EAAA,KAAa,MAAA,CAAA,6BAKxCQ,EAAA,qBADR/P,EAAAA,YAOOuL,EAAA,OALL,KAAA,GACA,MAAM,yBACL,QAAO4E,sBAER,IAAgC,CAAhCxQ,EAAAA,YAAgCqL,EAAA,KAAA,mBAAzB,IAAiB,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAjB,oBAAiB,EAAA,mDAI5BgD,EAAAA,mBAGM,MAHNuL,GAGM,CAFJvL,EAAAA,mBAAwD,IAAxD0L,GAAwDzL,EAAAA,gBAA9B+M,EAAA,KAAuB,EAAA,CAAA,EACjDhN,EAAAA,mBAA0F,IAA1FgO,GAA0F/N,EAAAA,gBAAhD0K,EAAA,SAAmB,MAAG1K,EAAAA,gBAAG/C,EAAA,UAAU,MAAM,EAAA,CAAA,oVC7C7F,MAAMY,EAAQZ,EAWRxB,EAAOC,EAEPsS,EAAapS,EAAAA,SAAS,CAC1B,OAAQ,EACR,MAAO,EACT,CAAC,EAEKqS,EAAenS,EAAAA,IAAI,CAAA,CAAE,EACrBoS,EAAYpS,EAAAA,IAAI,CAAE,GAAG+B,EAAM,QAAQ,CAAE,EAErCsQ,EAAmB/M,EAAAA,SAAS,IAAM8M,EAAU,MAAM,MAAM,EAE9D3O,EAAAA,MAAM4O,EAAkB,IAAM,CAC5BH,EAAW,OAASE,EAAU,MAAM,MACtC,CAAC,EAED3O,EAAAA,MAAM,IAAM1B,EAAM,SAAW2B,GAAW,CACtC0O,EAAU,MAAQ,CAAE,GAAG1O,GACnBA,EAAO,SAAW,GAAKA,EAAO,KAAO,IACvC0O,EAAU,MAAM,OAAS1O,EAAO,OAAS,EACzC4O,IAEJ,EAAG,CAAE,KAAM,EAAI,CAAE,EAEjBpS,EAAAA,UAAU,IAAM,CACdqS,GACF,CAAC,EAED,MAAMC,EAAS,IAAM,CACR,WACJ,KAAKN,EAAW,MAAM,GAAKA,EAAW,QAAUE,EAAU,MAAM,WACrEA,EAAU,MAAM,OAAS,SAASF,EAAW,MAAM,EACnDI,KAEAJ,EAAW,OAASE,EAAU,MAAM,MAExC,EAEMK,EAAiB,IAAM,CAC3BL,EAAU,MAAM,UAAY,EAC5BE,GACF,EAEMC,EAAiB,IAAM,CAC3B,MAAMG,EAAO3Q,EAAM,UACnB2Q,EAAK,QAAS1U,GAAU,CACtB,MAAM2U,EAAM,CACV,MAAO3U,EAAQ,MACf,MAAOA,CACb,EACImU,EAAa,MAAM,KAAKQ,CAAG,CAC7B,CAAC,EACDT,EAAW,MAAQQ,EAAK,CAAC,CAC3B,EAEMJ,EAAa,IAAM,CACvB,MAAMM,EAAO,CACX,OAAQR,EAAU,MAAM,OACxB,MAAOF,EAAW,KACtB,EACEvS,EAAK,aAAciT,CAAI,CACzB,2JA/GE,OAAAhS,YAAA,EAAAC,qBAiCM,MAjCNC,GAiCM,CAhCQsR,EAAA,MAAU,SAAQ,iBAA9BhR,EAAAA,YA+BOyR,EAAA,OA/B6B,MAAM,iBAAiB,MAAM,6BAC/D,IAAwF,CAAxF5O,EAAAA,mBAAwF,OAAxFI,GAAuD,sBAAI+N,EAAA,MAAU,QAAQ,EAAG,IAAC,CAAA,EACjFrR,EAAAA,YASEC,EAAA,CARS,WAAAkR,EAAW,6BAAXjR,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAAgR,EAAW,MAAKhR,kBAOJuR,MANpB,MAAON,EAAA,MACR,QAAQ,OACR,QAAQ,UACP,aAAY,CAAA,QAAA,EAAA,EACb,eAAA,GACA,MAAM,oEAGRlO,EAAAA,mBAQO,OARPgG,GAQO,CAPLlJ,EAAAA,YAME+R,EAAA,CALS,WAAAV,EAAA,MAAU,8BAAVnR,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAAkR,EAAA,MAAU,OAAMlR,kBAIJoR,MAHpB,gBAAe,EACf,OAAQF,EAAA,MAAU,UACnB,KAAK,2CAITnR,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAgD,EAAAA,mBAAoE,OAAA,CAA9D,MAAM,+CAA+C,EAAC,IAAC,EAAA,GAC7DlD,EAAAA,YAOEoL,EAAA,CANS,WAAA+F,EAAW,OAAX,sBAAAjR,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAAgR,EAAW,OAAMhR,GAC1B,QAAQ,OACR,QAAQ,UACR,eAAA,GACA,MAAM,gCACL,kCAAasR,EAAM,EAAA,CAAA,OAAA,CAAA,2BAEtBvR,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAgD,EAAAA,mBAAoE,OAAA,CAA9D,MAAM,iDAAgD,IAAC,EAAA,2lBCiEnE,MAAMlC,EAAQZ,EAmCRuP,EAAc1Q,EAAAA,IAAI,EAAK,EAEvB+S,EAAU/S,EAAAA,IAAI,EAAK,EACnBgT,EAAYhT,EAAAA,IAAI,EAAK,EACrBiT,EAAcjT,EAAAA,IAAI,CAAC,EACnBkT,EAAYlT,EAAAA,IAAI,CAAC,EACjBmT,EAAenT,EAAAA,IAAI,IAAI,EAG7B,IAAIoT,EAAS,KAGb,MAAMxC,EAAetL,EAAAA,SAAS,IAAM,OAClC,GAAI,CAACvD,EAAM,IAAK,OAAOA,EAAM,IAE7B,GAAI,CAEF,GAAI,OAAO,MAAQ,QAAO3B,EAAA,OAAO,KAAK,UAAZ,YAAAA,EAAqB,MAAQ,WAAY,CACjE,MAAMyQ,EAAQ,OAAO,KAAK,QAAQ,IAAI,OAAO,EAC7C,OAAOA,EAAQ,GAAG9O,EAAM,GAAG,WAAW8O,CAAK,GAAK9O,EAAM,GACxD,KAEK,CACH,MAAM8O,EAAQ,aAAa,QAAQ,OAAO,EAC1C,OAAOA,EAAQ,GAAG9O,EAAM,GAAG,WAAW8O,CAAK,GAAK9O,EAAM,GACxD,CACF,OAASnD,EAAO,CAEd,eAAQ,KAAK,uDAAwDA,CAAK,EACnEmD,EAAM,GACf,CACF,CAAC,EAGKqP,EAAc,IAAM,CACpBrP,EAAM,UACR2O,EAAY,MAAQ,GAEpB,WAAW,IAAM,CACf2C,GACF,EAAG,GAAG,EAEV,EAGMhC,EAAe,IAAM,CACzBX,EAAY,MAAQ,GAEpB0C,EAAS,KACTJ,EAAU,MAAQ,GAClBC,EAAY,MAAQ,EACpBC,EAAU,MAAQ,CACpB,EAGMG,EAAU,SAAY,CAC1B,GAAKzC,EAAa,MAElB,CAAAmC,EAAQ,MAAQ,GAEhB,GAAI,CAgBF,MAAM,IAAI,QAAQjG,GAAW,WAAWA,EAAS,GAAI,CAAC,EACtDoG,EAAU,MAAQ,GAClBF,EAAU,MAAQ,EACpB,OAASpU,EAAO,CACd,QAAQ,MAAM,WAAYA,CAAK,CACjC,QAAC,CACCmU,EAAQ,MAAQ,EAClB,EACF,EAGMO,EAAa,MAAOC,GAAY,CAChC,CAACH,GAAWD,EAAa,KA4B/B,EAGMK,EAAW,IAAM,CACjBP,EAAY,MAAQ,IACtBA,EAAY,QACZK,EAAWL,EAAY,KAAK,EAEhC,EAGMQ,EAAW,IAAM,CACjBR,EAAY,MAAQC,EAAU,QAChCD,EAAY,QACZK,EAAWL,EAAY,KAAK,EAEhC,EAGMS,EAAc,SAAY,CAC9B,GAAK9C,EAAa,MAElB,GAAI,CAEF,MAAM/R,EAAW,MAAM,MAAM+R,EAAa,KAAK,EAC/C,GAAI,CAAC/R,EAAS,GACZ,MAAM,IAAI,MAAM,uBAAuBA,EAAS,MAAM,EAAE,EAG1D,MAAM8U,EAAO,MAAM9U,EAAS,OACtB+U,EAAW7R,EAAM,OAASA,EAAM,MAAM,KAAI,IAAO,GACnD,GAAGA,EAAM,KAAK,OACd,eAGE9C,EAAM,OAAO,IAAI,gBAAgB0U,CAAI,EACrCnP,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,KAAOvF,EACZuF,EAAK,SAAWoP,EAChB,SAAS,KAAK,YAAYpP,CAAI,EAC9BA,EAAK,MAAK,EAGV,SAAS,KAAK,YAAYA,CAAI,EAC9B,OAAO,IAAI,gBAAgBvF,CAAG,CAChC,OAASL,EAAO,CACd,QAAQ,MAAM,WAAYA,CAAK,EAE/B,OAAO,KAAKgS,EAAa,MAAO,QAAQ,CAC1C,CACF,EAcAR,OAAAA,EAAAA,gBAAgB,IAAM,CACpBgD,EAAS,IACX,CAAC,4eAzTC,OAAAxS,YAAA,EAAAC,qBAiFM,MAjFNC,GAiFM,CAhFJC,EAAAA,YAmBQsL,EAAA,CAlBL,gEAAmDlL,EAAA,OAAO,CAAA,CAAA,EAC1D,QAAOiQ,sBAGR,IAGM,CAHNnN,EAAAA,mBAGM,MAAA,CAHD,MAAM,gBAAiB,oCAAsB9C,EAAA,WAAW,CAAA,IAC3DJ,EAAAA,YAAqDqL,EAAA,CAA9C,KAAK,KAAK,MAAM,0BAAM,IAAgB,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAhB,mBAAgB,EAAA,YAC7CA,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAgD,EAAAA,mBAAoC,MAAA,CAA/B,MAAM,iBAAgB,MAAG,EAAA,OAIA9C,EAAA,WAAaA,EAAA,iBAA7CP,EAAAA,YAAAC,EAAAA,mBAOM,MAPNwD,GAOM,CANclD,EAAA,yBAAlBC,EAAAA,YAEauQ,EAAA,OAFgB,MAAM,yDACjC,IAAW,qCAARxQ,EAAA,KAAK,EAAA,CAAA,uCAEaA,EAAA,+BAAvBC,EAAAA,YAEkBwQ,EAAA,OAFsB,MAAM,4DAC5C,IAAiB,qCAAdzQ,EAAA,WAAW,EAAA,CAAA,0FAMpBJ,EAAAA,YAyDU8Q,EAAA,YAxDCnB,EAAA,2CAAAA,EAAW,MAAAxP,GACpB,YAAU,MACV,WAAA,GACC,kBAAemQ,sBAEhB,IAkDQ,CAlDRtQ,EAAAA,YAkDQsL,EAAA,CAlDD,MAAM,iBAAiB,EAAA,mBAC5B,IAWY,CAXZtL,EAAAA,YAWY+Q,EAAA,CAXD,KAAA,GAAK,MAAM,mCACpB,IAEO,CAFP/Q,EAAAA,YAEO4L,EAAA,CAFD,KAAA,GAAK,KAAA,GAAM,QAAO0E,sBACtB,IAAwB,CAAxBtQ,EAAAA,YAAwBqL,EAAA,KAAA,mBAAjB,IAAS,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAT,YAAS,EAAA,oBAElBF,EAAAA,YAA8CgR,EAAA,KAAA,mBAA7B,IAAW,qCAAR5Q,EAAA,KAAK,EAAA,CAAA,UACzBJ,EAAAA,YAAmB2L,CAAA,EACnB3L,EAAAA,YAIkBiR,EAAA,KAAA,mBAHhB,IAEO,CAFPjR,EAAAA,YAEO4L,EAAA,CAFD,KAAA,GAAK,KAAA,GAAM,QAAO+G,sBACtB,IAA2B,CAA3B3S,EAAAA,YAA2BqL,EAAA,KAAA,mBAApB,IAAY,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAZ,eAAY,EAAA,oCAKzBgD,EAAAA,mBAKM,MALNgG,GAKM,CAJJhG,EAAAA,mBAGM,MAAA,CAHD,MAAM,wBAAoB,eAAJ,IAAIkP,oBAE7BlP,EAAAA,mBAA2B,MAAA,CAAtB,GAAG,YAAY,EAAA,KAAA,EAAA,YAIa+O,EAAA,OAArCpS,EAAAA,YAAAC,EAAAA,mBAuBM,MAvBNmJ,GAuBM,CAtBJjJ,EAAAA,YAqBO8R,EAAA,CArBD,MAAM,SAAS,QAAQ,6BAC3B,IAUO,CAVP9R,EAAAA,YAUO8S,EAAA,CAVD,KAAK,KAAK,GAAG,IAAI,MAAM,4CAC3B,IAEO,CAFP9S,EAAAA,YAEO4L,EAAA,CAFD,KAAA,GAAM,QAAO6G,EAAW,SAAUP,EAAA,OAAW,sBACjD,IAA+B,CAA/BlS,EAAAA,YAA+BqL,EAAA,KAAA,mBAAxB,IAAgB,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAhB,mBAAgB,EAAA,mCAEzBgD,EAAAA,mBAEM,MAFNkG,GAEM,CADJlG,EAAAA,mBAAwD,OAAA,KAAlD,KAAEC,EAAAA,gBAAG+O,EAAA,KAAW,EAAG,UAAO/O,EAAAA,gBAAGgP,EAAA,KAAS,EAAG,KAAE,CAAA,IAEnDnS,EAAAA,YAEO4L,EAAA,CAFD,KAAA,GAAM,QAAO8G,EAAW,SAAUR,EAAA,OAAeC,EAAA,0BACrD,IAAgC,CAAhCnS,EAAAA,YAAgCqL,EAAA,KAAA,mBAAzB,IAAiB,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAjB,oBAAiB,EAAA,2CAG5BF,EAAAA,YAQO8S,EAAA,CARD,KAAK,KAAK,GAAG,IAAI,MAAM,4CAC3B,IAMW,CANX9S,EAAAA,YAMW+S,EAAA,YALAb,EAAA,2CAAAA,EAAW,MAAA/R,GACnB,IAAK,EACL,IAAKgS,EAAA,MACN,eAAA,GACA,MAAM,oFAMiBH,EAAA,OAA/BnS,EAAAA,YAAAC,EAAAA,mBAGM,MAHN2O,GAGM,CAFJzO,EAAAA,YAAqE2Q,EAAA,CAAhD,cAAA,GAAc,MAAM,QACzCzQ,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAgD,EAAAA,mBAA8B,IAAA,CAA3B,MAAM,QAAO,aAAU,EAAA,oHCnE7B,SAAS8P,GAAUC,EAAY,GAAI,CAExC,MAAMC,EAAanU,EAAAA,SAAS,EAAE,EACxBoU,EAAWlU,EAAAA,IAAI,EAAE,EACjB+S,EAAU/S,EAAAA,IAAI,EAAK,EACnBmU,EAAmBnU,EAAAA,IAAI,EAAE,EACzB4S,EAAO9S,EAAAA,SAAS,CACpB,OAAQ,EACR,MAAO,EACX,CAAG,EACKsU,EAAWpU,EAAAA,IAAI,EAAE,EACjBqU,EAAQrU,EAAAA,IAAI,EAAE,EACdsU,EAAetU,EAAAA,IAAI,EAAE,EACrBuU,EAAUvU,EAAAA,IAAI,EAAK,EACnBD,EAAOC,EAAAA,IAAI,EAAE,EAGbf,EAAMa,EAAAA,SAASkU,CAAS,EAMxBQ,EAAiB,IAAM,OAC3BzU,EAAK,MAAQnC,EAAQ,IAAI,MAAM,EAC1BqW,EAAW,WACdA,EAAW,UAAW7T,EAAAL,EAAK,QAAL,YAAAK,EAAY,UAEpC,MAAMqU,EAAQ,OAAO,OAAO,CAAA,EAAIR,CAAU,EAM1C,MALe,CACb,OAAQrB,EAAK,OACb,MAAOA,EAAK,MACZ,MAAO6B,CACb,CAEE,EAKMC,EAAW,IAAM,SACrB,GAAI,CAACzV,EAAI,KAAM,CACbb,EAAQ,MAAM,iBAAkB,CAAE,MAAO,SAAS,CAAE,EACpD,MACF,CACA,MAAMuP,EAAS6G,EAAc,EAC7BzB,EAAQ,MAAQ,IAGZ1S,GAAAD,EAAA,OAAO,OAAP,YAAAA,EAAa,UAAb,MAAAC,EAAsB,SACxB,OAAO,KAAK,QAAQ,QAAQ,KAAI,EAGlCjB,EAAQ,SAASH,EAAI,KAAM0O,CAAM,EAC9B,KAAM7O,GAAQ,YACTuB,GAAAD,EAAA,OAAO,OAAP,YAAAA,EAAa,UAAb,MAAAC,EAAsB,SACxB,OAAO,KAAK,QAAQ,QAAQ,KAAI,GAG9BvB,EAAI,KAAK,SAAWA,EAAI,QAC1BoV,EAAS,QAAQ7S,EAAAvC,EAAI,OAAJ,YAAAuC,EAAU,OAAQ,CAAA,EACnC+S,EAAS,MAAQtV,EAAI,KACrBuV,EAAM,MAAQvV,EAAI,KAAK,MAAQA,EAAI,KAAK,MAAQ,CAAA,EAChDwV,EAAa,MAAQxV,EAAI,MAE3BiU,EAAQ,MAAQ,EAClB,CAAC,EACA,MAAOnU,GAAU,SAChB,QAAQ,MAAM,YAAaA,CAAK,EAChCmU,EAAQ,MAAQ,IACZ1S,GAAAD,EAAA,OAAO,OAAP,YAAAA,EAAa,UAAb,MAAAC,EAAsB,SACxB,OAAO,KAAK,QAAQ,QAAQ,KAAI,CAEpC,CAAC,CACL,EAiMA,MAAO,CAEL,WAAA4T,EACA,SAAAC,EACA,QAAAnB,EACA,iBAAAoB,EACA,KAAAvB,EACA,SAAAwB,EACA,MAAAC,EACA,aAAAC,EACA,QAAAC,EACA,KAAAxU,EACA,IAAAd,EAGA,eAAAuV,EACA,SAAAE,EACA,YA7MkB,IAAM,CACxB9B,EAAK,OAAS,EACdA,EAAK,QAALA,EAAK,MAAU,IACf8B,EAAQ,CACV,EA0ME,YApMmBC,GAAa,CAChC/B,EAAK,OAAS+B,EAAS,OACvB/B,EAAK,MAAQ+B,EAAS,MACtBD,EAAQ,CACV,EAiME,WA1LiB,CAACE,EAAIrW,IAAS,CAC/B,GAAI,CAACU,EAAI,OAAQ,CACfb,EAAQ,MAAM,mBAAoB,CAAE,MAAO,SAAS,CAAE,EACtD,MACF,CAEAA,EAAQ,QACN,CAAE,MAAO,OAAQ,KAAMG,GAAc,OAAO,EAC3CsJ,GAAW,CACNA,GACFzI,EAAQ,QAAQH,EAAI,OAAQ,CAAE,GAAI2V,EAAI,EACnC,KAAM9V,GAAQ,CACTA,EAAI,KAAK,SACXV,EAAQ,MAAM,OAAQ,CAAE,MAAO,SAAS,CAAE,EAC1CsW,EAAQ,GAERtW,EAAQ,MAAM,OAAQ,CAAE,MAAO,SAAS,CAAE,CAE9C,CAAC,EACA,MAAOQ,GAAU,CAChB,QAAQ,MAAM,QAASA,CAAK,EAC5BR,EAAQ,MAAM,OAAQ,CAAE,MAAO,SAAS,CAAE,CAC5C,CAAC,CAEP,CACN,CACE,EAiKE,SA1Je,CAACwW,EAAIrW,IAAS,CAC7B,GAAI,CAACU,EAAI,KAAM,CACbb,EAAQ,MAAM,eAAgB,CAAE,MAAO,SAAS,CAAE,EAClD,MACF,CAEAA,EAAQ,QACN,CAAE,MAAO,KAAM,KAAMG,GAAc,aAAa,EAC/CsJ,GAAW,CACNA,GACFzI,EAAQ,QAAQH,EAAI,KAAM,CAAE,GAAI2V,EAAI,EACjC,KAAM9V,GAAQ,CACTA,EAAI,KAAK,SACXV,EAAQ,MAAM,OAAQ,CAAE,MAAO,SAAS,CAAE,EAC1CsW,EAAQ,GAERtW,EAAQ,MAAM,OAAQ,CAAE,MAAO,SAAS,CAAE,CAE9C,CAAC,EACA,MAAOQ,GAAU,CAChB,QAAQ,MAAM,QAASA,CAAK,EAC5BR,EAAQ,MAAM,OAAQ,CAAE,MAAO,SAAS,CAAE,CAC5C,CAAC,CAEP,CACN,CACE,EAiIE,KA1HW,CAACyW,EAAQC,IAAiB,CACjCA,GAAA,MAAAA,EAAc,OAChBA,EAAa,MAAM,KAAKD,CAAM,CAElC,EAuHE,IAjHWC,GAAiB,CACxBA,GAAA,MAAAA,EAAc,OAChBA,EAAa,MAAM,IAAG,CAE1B,EA8GE,YAzGkB,IAAM,CACxBJ,EAAQ,CACV,EAwGE,QAnGc,IAAM,SACpBH,EAAQ,MAAQ,IAEZlU,GAAAD,EAAA,OAAO,OAAP,YAAAA,EAAa,UAAb,MAAAC,EAAsB,SACxB,OAAO,KAAK,QAAQ,QAAQ,KAAI,EAGlC,MAAMsN,EAAS6G,EAAc,EAC7BpV,EAAQ,IAAIH,EAAI,IAAK0O,CAAM,EACxB,KAAM7O,GAAQ,SAKb,IAJIuB,GAAAD,EAAA,OAAO,OAAP,YAAAA,EAAa,UAAb,MAAAC,EAAsB,SACxB,OAAO,KAAK,QAAQ,QAAQ,KAAI,EAG9BvB,EAAK,CACP,MAAMiW,EAAcjW,EAAI,QAAQ,qBAAqB,EAC/CkW,EAAW,UACfD,EAAY,UACVA,EAAY,QAAQ,WAAW,EAAI,EACnCA,EAAY,MAC1B,CACA,EACgBpB,EAAO,IAAI,KAAK,CAAC7U,EAAI,IAAI,EAAG,CAChC,KAAM,4FAClB,CAAW,EAED,GAAI,OAAO,UAAU,iBACnB,UAAU,WAAW6U,CAAI,MACpB,CACL,MAAMnP,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,MAAM,QAAU,OACrBA,EAAK,KAAO,IAAI,gBAAgBmP,CAAI,EACpCnP,EAAK,SAAWwQ,EAChB,SAAS,KAAK,YAAYxQ,CAAI,EAC9BA,EAAK,MAAK,EACV,SAAS,KAAK,YAAYA,CAAI,CAChC,CACF,CACA+P,EAAQ,MAAQ,EAClB,CAAC,EACA,MAAO3V,GAAU,SAChB,QAAQ,MAAM,UAAWA,CAAK,EAC9B2V,EAAQ,MAAQ,IACZlU,GAAAD,EAAA,OAAO,OAAP,YAAAA,EAAa,UAAb,MAAAC,EAAsB,SACxB,OAAO,KAAK,QAAQ,QAAQ,KAAI,CAEpC,CAAC,CACL,EAqDE,iBAhDuB,IAAM,CAC7B,OAAO,KAAK4T,CAAU,EAAE,QAAQnW,GAAO,CACrC,OAAOmW,EAAWnW,CAAG,CACvB,CAAC,CACH,EA6CE,UAxCgB,IAAM,CACtB8U,EAAK,OAAS,EACdA,EAAK,MAAQ,EACf,EAsCE,gBAhCuBqC,GAAiB,CACxC,OAAO,OAAOhW,EAAKgW,CAAY,CACjC,CA+BF,CACA,ugBC1GA,MAAMjB,EAAY,CACjB,KAAM,oBACN,IAAK,mBACL,OAAQ,qBACT,EAGM,CACL,SAAAI,EACA,YAAAc,EACA,SAAAR,EACA,QAAAS,EACA,SAAAjB,EACA,QAAAnB,EACA,WAAYqC,EACZ,IAAAnW,CACD,EAAI8U,GAAUC,CAAS,EAGvB,OAAO,OAAOoB,EAAiB,EAAE,EACjC,MAAMnB,EAAamB,EAGbrV,EAAOC,EAAAA,IAAI,EAAE,EACbqV,EAAWrV,EAAAA,IAAI,CAAC,EAEhBT,EAAUS,EAAAA,IAAI,CACnB,CAAE,MAAO,KAAM,IAAK,WAAY,SAAU,EAAK,EAC/C,CAAE,MAAO,KAAM,IAAK,UAAW,SAAU,GAAO,MAAO,KAAK,CAC7D,CAAC,EAGKsV,EAAUtV,EAAAA,IAAI,EAAE,EAChBuV,EAAWvV,EAAAA,IAAI,EAAE,EACjBwV,EAAUxV,EAAAA,IAAI,EAAE,EAChByV,EAAUzV,EAAAA,IAAI,EAAE,EAChB0V,EAAU1V,EAAAA,IAAI,EAAK,EACnBgC,EAAOhC,EAAAA,IAAI,EAAK,EAChB2V,EAAQ3V,EAAAA,IAAI,EAAK,EAGjB4V,EAAS5V,EAAAA,IAAI,EAAE,EACf6V,EAAU7V,EAAAA,IAAI,EAAE,EAChB8V,EAAS9V,EAAAA,IAAI,EAAK,EAClB+V,EAAY/V,EAAAA,IAAI,EAAE,EAGlB+M,EAAS/M,EAAAA,IAAI,EAAK,EAClBgW,EAAUhW,EAAAA,IAAI,EAAE,EAChBiW,EAAUjW,EAAAA,IAAI,EAAE,EAGhBkW,EAAWlW,EAAAA,IAAI,IAAI,EAGzByD,EAAAA,MAAMmS,EAASlS,GAAW,CACrBA,EAAO,OAASqS,EAAU,MAAM,SACnCD,EAAO,MAAQ,GAEjB,EAAG,CAAE,KAAM,GAAM,EAGjBK,EAAAA,YAAY,IAAM,CACjB,MAAM,aAAa,EACnB7P,EAAI,EAEJ,OAAO,iBAAiB,UAAY8P,GAAU,QACzChW,EAAA,KAAK,MAAMgW,GAAA,YAAAA,EAAO,QAAQ,IAA1B,MAAAhW,EAA6B,OAChCiV,EAAS,OAAS,IAAMgB,EAAO,EAAK3B,EAAQ,EAE9C,CAAC,CACF,CAAC,EAID,MAAM4B,EAAU7V,GAAM,CACrBmV,EAAO,MAAQnV,EAAIsV,EAAU,MAAQ,CAAA,CACtC,EAEMzP,EAAO,IAAM,OAClBmP,EAAQ,MAAQ,GAChBC,EAAQ,MAAQ,GAChB3V,EAAK,MAAQwW,EAAW,EACxBjB,EAAQ,MAAQ,CAAA,GAChBlV,EAAAL,EAAK,MAAM,UAAX,MAAAK,EAAoB,QAASK,GAAM,CAC9BA,EAAE,SAAS,SAAS,UAAU,GACjC6U,EAAQ,MAAM,KAAK7U,CAAC,EACpBgV,EAAQ,MAAQA,EAAQ,MAAQhV,EAAE,SAAS,MAAM,CAAC,EAAI,KAC5CA,EAAE,UAAY,aACxBiV,EAAQ,MAAQ,GAElB,GACAzB,EAAW,QAAUwB,EAAQ,MAC7Be,EAAQ,CACT,EAGMD,EAAc,IAAM,SACzB,GAAI,CAEH,QAAOlW,GAAAD,EAAA,OAAO,OAAP,YAAAA,EAAa,UAAb,YAAAC,EAAsB,IAAI,UAAW,CAAA,CAC7C,OAASzB,EAAO,CACf,eAAQ,KAAK,YAAaA,CAAK,EACxB,CAAA,CACR,CACD,EAGM4X,EAAW,IAAM,OACtBnB,EAAS,MAAQ,EACjBpB,EAAW,aAAc7T,EAAAL,EAAK,MAAM,WAAX,YAAAK,EAAqB,OAC9C6T,EAAW,UAAY,IACvBS,EAAQ,CACT,EAGM2B,EAAU,IAAM,CACrBhB,EAAS,MAAQ,EACjB,OAAOpB,EAAW,YAClB,OAAOA,EAAW,UAClBS,EAAQ,CACT,EAGM+B,EAAUxT,GAAS,CACxB,MAAMhE,EAAMgE,EAAK,WAAa,EAC3B,oBAAoBA,EAAK,IAAI,cAC7B,oBAAoBA,EAAK,IAAI,cAChC,OAAO,KAAKhE,CAAG,CAChB,EAGMyX,EAAa,IAAM,QACxBtW,EAAA8V,EAAS,QAAT,MAAA9V,EAAgB,IAAI6T,EAAW,SAChC,EAEMzB,EAAUmE,GAAU,CACzBpB,EAAS,MAAQoB,EAAM,SACvB1C,EAAW,SAAW0C,EAAM,SAC5B,OAAO1C,EAAW,QAClB2C,EAAW,CACZ,EAEMA,EAAc,IAAM,CAEzBlC,EAAQ,CACT,EAGMmC,EAAM,IAAM,CACbtB,EAAS,OAAStB,EAAW,WAAa,MAC7C2B,EAAO,MAAQ,CAAA,EACfC,EAAQ,MAAQ,CAAA,EAEhBzW,EAAQ,SAAS,mBAAoB,CAAE,MAAO6U,EAAY,EAAE,KAAMnV,GAAQ,CACrEA,EAAI,KAAK,QACZ,KAAK,MAAMA,EAAI,KAAK,QAAQ,EAAE,QAASmE,GAAS,CAC3C,CAAC,OAAQ,QAAS,SAAU,OAAQ,WAAY,WAAY,QAAQ,EAAE,SAASA,EAAK,IAAI,IAC3FA,EAAK,MAAQ,CACZ,KAAMA,EAAK,KACX,KAAM,GAAGA,EAAK,KAAK,GAAGA,EAAK,MAAQA,EAAK,KAAK,SAAS,GAAG,GAAKA,EAAK,KAAK,SAAS,GAAG,EAAI,IAAIA,EAAK,IAAI,IAAM,EAAE,EACpH,EACM4S,EAAQ,MAAM,KAAK5S,CAAI,EACvB8S,EAAU,MAAM,KAAK9S,EAAK,KAAK,EAEjC,CAAC,EAEDuS,EAAQ,MAAQ1W,EAAI,KAAK,OAE3B,CAAC,EAEH,EAEMgY,EAAM,IAAM,CACjB7C,EAAW,OAAS2B,EAAO,MAC3BT,EAAO,CACR,EAGM4B,GAAO9T,GAAS,CACrB8J,EAAO,MAAQ,GACfiJ,EAAQ,MAAQ/S,EAChBgT,EAAQ,MAAQ,EACjB,EAEMe,GAAU,IAAM,CACjBf,EAAQ,OACX7W,EAAQ,SAASH,EAAI,OAAQ,CAAE,GAAI+W,EAAQ,MAAM,GAAI,KAAMC,EAAQ,KAAK,CAAE,EAAE,KAAMnX,GAAQ,CACrFA,EAAI,KAAK,UAEZiO,EAAO,MAAQ,GACf2H,EAAQ,EAIV,CAAC,CAIH,EAGMuC,GAAM,IAAM,CAElB,EAGMC,GAAgBC,GAChBA,EACEA,EAAO,QAAQ,wBAAyB,cAAc,EADzC,GAIf3M,GAAc4M,GAAY,CAC/B,GAAI,CAACA,EAAS,MAAO,GACrB,MAAMnM,EAAO,IAAI,KAAKmM,CAAO,EAC7B,MAAO,GAAGnM,EAAK,YAAW,CAAE,IAAI,OAAOA,EAAK,SAAQ,EAAK,CAAC,EAAE,SAAS,EAAG,GAAG,CAAC,IAAI,OAAOA,EAAK,SAAS,EAAE,SAAS,EAAG,GAAG,CAAC,KAAK,OAAOA,EAAK,SAAQ,CAAE,EAAE,SAAS,EAAG,GAAG,CAAC,IAAI,OAAOA,EAAK,WAAU,CAAE,EAAE,SAAS,EAAG,GAAG,CAAC,IAAI,OAAOA,EAAK,WAAU,CAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EACjQ,EAEMoM,GAAqBC,GACnBA,GAAS,IAAM,8BAAgC,gCAGjDC,GAAoBD,GAClBA,GAAS,IAAM,MAAQ,MAGzBE,GAAqBF,GACnBA,GAAS,IAAM,kCAAoC,8BAGrDG,EAAoBH,GAClBA,GAAS,IAAM,MAAQ,MAGzBI,GAAmBC,IACR,CACf,IAAO,OACP,IAAO,QACP,IAAO,QACP,IAAO,OACP,IAAO,SACP,IAAO,WACP,IAAO,YACP,IAAO,QACP,IAAO,SACP,IAAO,MACP,IAAO,OACP,IAAO,QACT,GACgBA,CAAI,GAAKA,87BAjcxBvW,EAAAA,YAyLawW,GAAA,CAzLD,MAAA,GAAM,MAAM,sCACvB,IAiBQ,CAjBR7W,EAAAA,YAiBQ8W,GAAA,YAjBQxC,EAAA,2CAAAA,EAAQ,MAAAnU,GAAE,WAAS,cAAc,OAAO,KAAK,MAAA,CAAA,MAAA,MAAA,sBAC5D,IAEO,CAFPH,EAAAA,YAEO+W,GAAA,CAFA,uBAAOzB,yBACb,IAA2E,CAA3EpS,EAAAA,mBAA2E,OAAA,KAAA,CAArElD,EAAAA,YAA4DqL,EAAA,CAArD,KAAK,KAAK,MAAM,2BAAO,IAAsB,CAAA,GAAAnL,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAtB,yBAAsB,EAAA,4CAAQ,KAAE,EAAA,aAErEF,EAAAA,YAEO+W,GAAA,CAFA,QAAOxR,CAAI,EAAA,mBACjB,IAAoE,CAApErC,EAAAA,mBAAoE,OAAA,KAAA,CAA9DlD,EAAAA,YAAqDqL,EAAA,CAA9C,KAAK,KAAK,MAAM,2BAAO,IAAe,CAAA,GAAAnL,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAf,kBAAe,EAAA,4CAAQ,KAAE,EAAA,aAE9DF,EAAAA,YAEO+W,GAAA,CAFA,QAAOb,EAAG,EAAA,mBAChB,IAAmE,CAAnEhT,EAAAA,mBAAmE,OAAA,KAAA,CAA7DlD,EAAAA,YAAoDqL,EAAA,CAA7C,KAAK,KAAK,MAAM,2BAAO,IAAc,CAAA,GAAAnL,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAd,iBAAc,EAAA,4CAAQ,KAAE,EAAA,aAE7DF,EAAAA,YAEO+W,GAAA,CAFA,QAAOb,EAAG,EAAA,mBAChB,IAAsE,CAAtEhT,EAAAA,mBAAsE,OAAA,KAAA,CAAhElD,EAAAA,YAAuDqL,EAAA,CAAhD,KAAK,KAAK,MAAM,2BAAO,IAAiB,CAAA,GAAAnL,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAjB,oBAAiB,EAAA,4CAAQ,KAAE,EAAA,aAEhEF,EAAAA,YAEO+W,GAAA,CAFA,QAAOb,EAAG,EAAA,mBAChB,IAA0E,CAA1EhT,EAAAA,mBAA0E,OAAA,KAAA,CAApElD,EAAAA,YAA2DqL,EAAA,CAApD,KAAK,KAAK,MAAM,2BAAO,IAAqB,CAAA,GAAAnL,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAArB,wBAAqB,EAAA,4CAAQ,KAAE,EAAA,aAEpEF,EAAAA,YAAW2L,EAAA,2BAEZ3L,EAAAA,YAoJQsL,GAAA,CApJD,UAAU,IAAI,MAAA,CAAA,aAAA,mBAAA,sBACpB,IA2Ga,CA3GbtL,EAAAA,YA2Ga4Q,GAAA,CA3GD,MAAA,CAAA,OAAA,MAAA,GAAoB,mBAC/B,IAkFQ,CAlFK0D,EAAA,OAAQ,MAAYK,EAAA,OAAW3V,EAAA,MAAK,OAAK,kBAAtDqB,EAAAA,YAkFQ6K,GAAA,OAlFsD,WAAA,GAAU,yBAAwB,GAAO,SAAS,WAC9F,UAASpI,EAAAA,QACzB,CAEO,CAHsB,MAAA9B,KAAK,CAClChB,EAAAA,YAEO4L,GAFP5I,EAAAA,WAEO,CAFA,QAAO8S,CAAG,EAAU9U,EAAK,CAAE,MAAM,4BAA4B,UAAU,yBAC7E,IAAiC,CAAjChB,EAAAA,YAAiCqL,EAAA,KAAA,mBAA1B,IAAkB,CAAA,GAAAnL,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAlB,qBAAkB,EAAA,4CAAQ,OAClC,EAAA,kCAED,IA2EQ,CA3ERF,EAAAA,YA2EQsL,GAAA,CA3ED,MAAM,OAAO,MAAM,0BACzB,IAAA,OAwEM,OAxENpI,EAAAA,mBAwEM,MAAA,KAAA,CAvELhD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAgD,EAAAA,mBAAyC,IAAA,CAAtC,MAAM,uBAAuB,EAAC,OAAI,EAAA,iBACrCA,EAAAA,mBA8BI,IAAA,CA9BD,MAAM,gBAAc,mBAAC,QAEvB,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,QAErC,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,QAErC,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,QAErC,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,UAErC,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,SAErC,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,SAErC,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,MAErC,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,UAErC,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,QAErC,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,QAErC,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,QAErC,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,SAErC,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,UAErC,EAAAA,EAAAA,mBAAqC,OAAA,CAA/B,MAAM,gBAAgB,EAAC,GAAC,oBAAO,MAEtC,QACAlD,EAAAA,YAAYyL,EAAA,EACDuL,EAAAA,MAAA9D,CAAA,EAAW,WAAS,KAAWsB,EAAA,qBAA1C1U,EAAAA,mBA0BM,MAAAC,GAAA,CAzBLC,EAAAA,YAQa4Q,GAAA,CARD,MAAM,4BAA4B,EAAA,mBAC7C,IAIY,CAJZ5Q,EAAAA,YAIYuG,GAAA,CAJA,sBAAkB,CAAEgP,iBAAiBR,EAAM,MAAA5U,eAAN4U,EAAA,MAAQ,MAAM,QAAQ,eAAA,KACrD,iBAChB,IAA8E,CAA9E/U,EAAAA,YAA8EqL,EAAA,CAAvE,MAAM,SAAS,MAAA,CAAA,QAAA,MAAA,EAAsB,KAAK,yBAAK,IAAgB,CAAA,GAAAnL,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAhB,mBAAgB,EAAA,qCAGxEA,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAgD,EAAAA,mBAAgD,OAAA,CAA1C,MAAM,wBAAwB,EAAC,OAAI,EAAA,GACzClD,EAAAA,YAAW2L,EAAA,YAEHtM,EAAAyV,EAAA,QAAA,YAAAzV,EAAS,QAAM,GAAxBQ,EAAAA,YAAAC,EAAAA,mBAcI,IAdJwD,GAcI,EAbHzD,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAYYyD,WAAA,KAAAC,EAAAA,WAXasR,EAAA,MAAO,CAAvB5S,EAAM/D,oBADfkC,EAAAA,YAYYkG,GAAA,CAVV,IAAKpI,cACG0W,EAAA,4CAAAA,EAAM,MAAA1U,IACd,MAAO+B,EAAK,MACZ,MAAK,CAAA,KAAUA,EAAK,KAAI,KAAA,GAAWA,EAAK,KAAK,GAAGA,EAAK,MAAQA,EAAK,KAAK,SAAQ,GAAA,GAASA,EAAK,KAAK,SAAQ,GAAA,EAAA,IAAYA,EAAK,IAAI,IAAA,EAAA,EAAA,EAChI,MAAM,OACN,SAAA,GACA,eAAA,KACiB,iBAChB,IAA8E,CAA9ElC,EAAAA,YAA8EqL,EAAA,CAAvE,MAAM,SAAS,MAAA,CAAA,QAAA,MAAA,EAAsB,KAAK,yBAAK,IAAgB,CAAA,GAAAnL,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAhB,mBAAgB,EAAA,+EAIzEJ,EAAAA,mBAA6D,IAA7DoJ,GAA6D/F,EAAAA,gBAAdsR,EAAA,KAAO,EAAA,CAAA,qBAEvD3U,EAAAA,mBAUM,MAAAmJ,GAAA,CATL/I,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAgD,EAAAA,mBAA8C,IAAA,CAA3C,MAAM,4BAA4B,EAAC,OAAI,EAAA,GAC1CA,EAAAA,mBAGI,IAAA,CAHA,MAAK3C,EAAAA,eAAA,CAAEyW,EAAAA,MAAA9D,CAAA,EAAW,uCAAoD,kBAAkB,CAAA,IAC3FlT,EAAAA,YAA+JqL,EAAA,CAAxJ,KAAK,KAAM,MAAO2L,EAAAA,MAAA9D,CAAA,EAAW,WAAS,IAAA,QAAA,0BAA2B,IAA+E,CAA5ErP,kBAAAV,EAAAA,gBAAA6T,EAAAA,MAAA9D,CAAA,EAAW,WAAS,IAAA,qBAAA,oBAAA,EAAA,CAAA,sDAAgE,gBAEhK,EAAA,OACAhQ,EAAAA,mBAGI,IAAA,CAHD,MAAK3C,EAAAA,eAAA,CAAC,mBAA2BiU,EAAA,MAAQ,aAAA,UAAA,CAAA,IAC3CxU,EAAAA,YAAyHqL,EAAA,CAAlH,KAAK,KAAM,MAAOmJ,EAAA,MAAQ,QAAA,0BAAoB,IAA4D,qCAAzDA,EAAA,MAAQ,qBAAA,oBAAA,EAAA,CAAA,sDAAyD,iBAE1H,EAAA,YAGFxU,EAAAA,YAAuJ4L,GAAA,CAAhJ,QAAOmK,EAAM,SAAQ,EAAIvB,EAAA,OAAYwC,EAAAA,MAAA9D,CAAA,EAAW,WAAS,KAAU,UAAU,IAAI,MAAM,UAAU,MAAM,iBAAiB,KAAK,4BAAQ,IAAI,CAAA,GAAAhT,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAJ,OAAI,EAAA,yEAGlJF,EAAAA,YAAW2L,EAAA,EACX3L,EAAAA,YAqBaiX,GAAA,YArBQD,EAAAA,MAAA9D,CAAA,oDAAAA,EAAU,MAAA/S,EAAA,MAAG,SAAQ0V,EAAa,YAAY,aAAc,OAAQ,kCACxF,IAAuL,CAAvL7V,EAAAA,YAAuLoL,GAAA,CAA1K,QAAOuK,aAAqBnB,EAAA,2CAAAA,EAAQ,MAAArU,GAAG,MAAOqU,EAAA,MAAU,UAAA,GAAU,SAAA,GAAS,QAAQ,WAAW,YAAY,OAAO,QAAQ,UAAU,eAAA,GAAa,MAAM,uCACnKxU,EAAAA,YAAsEkX,GAAA,CAA9C,WAAAF,EAAAA,MAAA9D,CAAA,EAAW,SAAX,sBAAAhT,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAA6W,EAAAA,MAAA9D,CAAA,EAAW,SAAQ/S,GAAG,OAAQ,qCAC3CmU,EAAA,OAAQ,GAAnBzU,EAAAA,YAAAC,EAAAA,mBAiBM,MAjBNsJ,GAiBM,CAhBLpJ,EAAAA,YAAqPmX,GAAA,CAAhO,WAAAH,EAAAA,MAAA9D,CAAA,EAAW,UAAX,sBAAAhT,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAA6W,EAAAA,MAAA9D,CAAA,EAAW,UAAS/S,GAAG,SAAQ0V,EAAa,YAAY,OAAO,KAAK,cAAc,MAAM,gCAAgC,MAAA,CAAA,MAAA,iBAAA,EAA+B,eAAA,GAAa,QAAQ,UAAU,QAAQ,WAAW,UAAA,2BAC9N7V,EAAAA,YAA2OmX,GAAA,CAAtN,WAAAH,EAAAA,MAAA9D,CAAA,EAAW,UAAX,sBAAAhT,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAA6W,EAAAA,MAAA9D,CAAA,EAAW,UAAS/S,GAAG,SAAQ0V,EAAa,YAAY,OAAO,KAAK,cAAc,MAAM,sBAAsB,MAAA,CAAA,MAAA,iBAAA,EAA+B,eAAA,GAAa,QAAQ,UAAU,QAAQ,WAAW,UAAA,2BACpN7V,EAAAA,YAKQkL,GAAA,YALQjK,EAAA,6CAAAA,EAAI,MAAAd,GAAG,yBAAwB,GAAO,WAAW,mBAAmB,SAAS,SAAS,YAAU,QAAQ,YAAU,SAChH,UAAS2C,EAAAA,QACzB,CAA+O,CADlN,MAAA9B,KAAK,CAClChB,EAAAA,YAA+OoL,GAA/OpI,aAA+O,CAA1N,WAAAgU,EAAAA,MAAA9D,CAAA,EAAW,WAAX,sBAAAhT,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAA6W,EAAAA,MAAA9D,CAAA,EAAW,WAAU/S,GAAE,YAAY,OAAO,kBAAA,GAAgB,cAAY,eAAe,MAAM,iBAAiB,MAAA,CAAA,MAAA,kBAAA,EAAgC,eAAA,GAAa,QAAQ,WAAW,QAAQ,WAAkBa,CAAK,EAAA,KAAA,GAAA,CAAA,YAAA,CAAA,sBAEjO,IAAsJ,CAAtJhB,EAAAA,YAAsJwL,GAAA,CAAhI,WAAAwL,EAAAA,MAAA9D,CAAA,EAAW,kCAAXhT,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAA6W,EAAAA,MAAA9D,CAAA,EAAW,WAAU/S,oBAAgCc,EAAA,MAAI,KAAlC,MAAM,GAAsC,YAAU,QAAS,IAAK+V,EAAAA,MAAA9D,CAAA,EAAW,kEAE7HhT,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAgD,EAAAA,mBAA2B,OAAA,CAArB,MAAM,MAAM,EAAC,IAAC,EAAA,GACpBlD,EAAAA,YAKQkL,GAAA,YALQ0J,EAAA,6CAAAA,EAAK,MAAAzU,GAAG,yBAAwB,GAAO,WAAW,mBAAmB,SAAS,SAAS,YAAU,QAAQ,YAAU,SACjH,UAAS2C,EAAAA,QACzB,CAA+O,CADlN,MAAA9B,KAAK,CAClChB,EAAAA,YAA+OoL,GAA/OpI,aAA+O,CAA1N,WAAAgU,EAAAA,MAAA9D,CAAA,EAAW,WAAX,sBAAAhT,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAA6W,EAAAA,MAAA9D,CAAA,EAAW,WAAU/S,GAAE,YAAY,OAAO,kBAAA,GAAgB,cAAY,eAAe,MAAM,iBAAiB,MAAA,CAAA,MAAA,kBAAA,EAAgC,eAAA,GAAa,QAAQ,WAAW,QAAQ,WAAkBa,CAAK,EAAA,KAAA,GAAA,CAAA,YAAA,CAAA,sBAEjO,IAAuJ,CAAvJhB,EAAAA,YAAuJwL,GAAA,CAAjI,WAAAwL,EAAAA,MAAA9D,CAAA,EAAW,kCAAXhT,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAA6W,EAAAA,MAAA9D,CAAA,EAAW,WAAU/S,oBAAgCyU,EAAA,MAAK,KAAnC,MAAM,GAAuC,YAAU,QAAS,IAAKoC,EAAAA,MAAA9D,CAAA,EAAW,kEAE5G8D,QAAA9D,CAAA,EAAW,WAAS,mBAAtC7S,EAAAA,YAA0N8W,GAAA,OAA1K,SAAQtB,EAAsB,WAAAmB,EAAAA,MAAA9D,CAAA,EAAW,MAAX,sBAAAhT,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,GAAA6W,EAAAA,MAAA9D,CAAA,EAAW,MAAK/S,GAAE,MAAM,OAAO,YAAY,KAAK,KAAK,cAAc,eAAA,GAAa,QAAQ,UAAU,QAAQ,WAAW,UAAA,wHAItMH,EAAAA,YAsCYuL,GAAA,KAAA,mBArCX,IAmCa,CAnCbvL,EAAAA,YAmCaoX,GAAA,CAnCA,QAAS5Y,EAAA,MAAU,MAAOwY,EAAAA,MAAA7D,CAAA,EAAW,QAAS6D,EAAAA,MAAAhF,CAAA,EAAS,qBAAA,GAAmB,eAAa,WAAW,MAAM,cAAc,sBAAA,KACjH,gBAAiBlP,EAAAA,QACjC,CAwBM,CAzB+B,KAAAZ,CAAI,IAAA,CACzCgB,EAAAA,mBAwBM,MAAA,CAxBD,MAAM,OAAQ,QAAK/C,GAAEuV,EAAOxT,CAAI,IACpCgB,EAAAA,mBAII,IAJJ0L,GAII,CAHA/K,EAAAA,gBAAAV,EAAAA,gBAAAjB,EAAK,QAAQ,EAAA,CAAA,EAAGgB,qBAAsE,OAAtEgO,GAAsE/N,EAAAA,gBAAtCgT,GAAajU,EAAK,QAAQ,CAAA,EAAA,CAAA,EAC7ElC,EAAAA,YAAiIqX,GAAA,CAA1H,wBAAM,OAAef,GAAkBpU,EAAK,SAAS,CAAA,CAAA,EAAG,KAAK,QAAQ,MAAA,uBAAM,IAAsC,qCAAnCsU,GAAiBtU,EAAK,SAAS,CAAA,EAAA,CAAA,yBACpHlC,EAAAA,YAAiIqX,GAAA,CAA1H,wBAAM,OAAeZ,GAAkBvU,EAAK,SAAS,CAAA,CAAA,EAAG,KAAK,QAAQ,MAAA,uBAAM,IAAsC,qCAAnCwU,EAAiBxU,EAAK,SAAS,CAAA,EAAA,CAAA,2BAErHgB,EAAAA,mBAGO,OAAA,KAAA,CAFNlD,EAAAA,YAAoGqX,GAAA,CAA7F,MAAM,kCAAkC,KAAK,QAAQ,MAAA,uBAAM,IAAM,mBAAN,SAAMlU,EAAAA,gBAAGjB,EAAK,QAAQ,EAAA,CAAA,eACxFlC,EAAAA,YAAkFqX,GAAA,CAA3E,MAAM,oBAAoB,KAAK,QAAQ,MAAA,uBAAM,IAAM,mBAAN,SAAMlU,EAAAA,gBAAGjB,EAAK,IAAI,EAAA,CAAA,iBAEvEgB,EAAAA,mBAKM,MALNoU,GAKM,CAJLpU,EAAAA,mBAEM,MAFNqU,GAEM,iCAF+C,SAC/C,EAAA,GAAArU,EAAAA,mBAAkD,OAAlDsU,GAAkDrU,EAAAA,gBAAvBjB,EAAK,QAAQ,EAAA,CAAA,IAE9CgB,qBAAsC,YAAhC,QAAKC,EAAAA,gBAAGjB,EAAK,QAAQ,EAAG,IAAC,CAAA,IAEhClC,EAAAA,YAOO8R,GAAA,CAPD,MAAM,OAAO,MAAA,CAAA,MAAA,WAAA,sBAClB,IAEO,CAFP9R,EAAAA,YAEO8S,GAAA,CAFD,MAAA,CAAA,YAAA,OAAA,GAAwB,mBAC7B,IAAkH,CAAlH5P,EAAAA,mBAAkH,OAAA,CAA3G,MAAOhB,EAAK,KAAM,MAAM,UAAU,MAAA,CAAA,MAAA,WAAA,CAAyB,EAAA,QAAKiB,EAAAA,gBAAGwT,GAAgBzU,EAAK,QAAQ,CAAA,EAAA,EAAAuV,EAAA,eAExGzX,EAAAA,YAEO8S,GAAA,KAAA,mBADN,IAA8G,CAA9G5P,EAAAA,mBAA8G,OAAA,CAAvG,MAAOhB,EAAK,KAAM,MAAM,UAAU,MAAA,CAAA,MAAA,WAAA,CAAyB,EAAA,QAAKiB,EAAAA,gBAAGsG,GAAWvH,EAAK,SAAS,CAAA,EAAA,EAAAwV,EAAA,qCAKtF,eAAgB5U,EAAAA,QAChC,CAAkI,CAD9F,KAAAZ,CAAI,IAAA,OAAA,OAC/BA,EAAK,OAAK,KAAS7C,EAAAL,EAAA,MAAK,WAAL,YAAAK,EAAe,SAAM,GAAS6C,EAAK,WAAS,mBAAxEpC,EAAAA,mBAAkI,IAAA,OAAhD,QAAKK,IAAE6V,GAAI9T,CAAI,EAAG,MAAM,aAAa,KAAA,IAAK,KAAE,EAAAyV,EAAA,+BACnHzV,EAAK,OAAK,GAArBrC,EAAAA,YAAAC,EAAAA,mBAA+D,MAA/D8X,EAA+D,kCAE/C,oBAChB,IAAa,CAAb5X,EAAAA,YAAa6X,EAAA,6CAGf7X,EAAAA,YAAmF8X,GAAA,CAAxE,aAAY,CAAA,GAAA,EAAA,EAAW,YAAWd,EAAAA,MAAA3D,CAAA,EAAW,aAAY2D,EAAAA,MAAA7C,CAAA,wDAItEnU,EAAAA,YAA4C+X,GAAA,SAA9B,WAAJ,IAAI5C,EAAY,SAAQ1D,aAElCzR,EAAAA,YAaU8Q,GAAA,YAbQ9E,EAAA,6CAAAA,EAAM,MAAA7L,GAAE,WAAA,GAAW,YAAU,0BAC9C,IAWQ,CAXRH,EAAAA,YAWQsL,GAAA,KAAA,mBAVP,IAA2B,CAA3BtL,EAAAA,YAA2B4Q,GAAA,KAAA,mBAAf,IAAE,CAAA,GAAA1Q,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAF,KAAE,EAAA,YACdF,EAAAA,YAGYuL,GAAA,CAHD,MAAM,MAAM,EAAA,mBAAC,IAEvB,iCAFuB,wBAEvB,EAAA,GAAAvL,EAAAA,YAAwHgY,GAAA,YAApG9C,EAAA,6CAAAA,EAAO,MAAA/U,GAAE,QAAQ,WAAW,MAAM,UAAU,MAAM,OAAO,eAAA,GAAa,QAAQ,0CAEnGH,EAAAA,YAIe0L,GAAA,KAAA,mBAHd,IAAW,CAAX1L,EAAAA,YAAW2L,EAAA,EACX3L,EAAAA,YAAsD4L,GAAA,CAA/C,yBAAOI,EAAA,MAAM,IAAU,QAAQ,2BAAO,IAAE,CAAA,GAAA9L,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAF,KAAE,EAAA,YAC/CF,EAAAA,YAAqD4L,GAAA,CAA9C,yBAAOqK,GAAO,GAAQ,QAAQ,2BAAO,IAAE,CAAA,GAAA/V,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAF,KAAE,EAAA,8SCjKnD,MAAMc,EAAQZ,EAiBRxB,EAAOC,EAGPuG,EAAQC,EAAAA,SAAQ,EAGhBY,EAAQhH,EAAAA,IAAI,EAAE,EAGdiH,EAAQ,IAAM,CAClBlF,EAAM,KAAK,MAAM,GAAG,EAAE,QAAQmF,GAAM,CAClC,KAAM,CAACzE,EAAM0E,CAAS,EAAID,EAAG,MAAM,GAAG,EACtCF,EAAM,MAAM,KAAK,CAAE,KAAAvE,EAAM,UAAA0E,CAAS,CAAE,CACtC,CAAC,CACH,EAGMC,EAAQ,SAAY,CACxB,GAAI,CACF,MAAMtI,EAAM,MAAMM,EAAQ,QAAQ,kBAAkB2C,EAAM,IAAI,EAAE,EAChEiF,EAAM,MAAQlI,EAAI,MAAQ,CAAA,CAC5B,OAASF,EAAO,CACd,QAAQ,MAAM,wCAAyCA,CAAK,EAC5DoI,EAAM,MAAQ,CAAA,CAChB,CACF,EAGMgS,EAAY1V,GAAQ,CACxB3D,EAAK,oBAAqB2D,CAAG,CAC/B,EAGApD,OAAAA,EAAAA,UAAU,IAAM,CACV6B,EAAM,KAAK,SAAS,GAAG,EACzBkF,EAAK,EAELG,EAAK,CAET,CAAC,wGA5EChG,cAOc6X,EAPdlV,EAAAA,WAOcgU,EAAAA,MAAA5R,CAAA,EAPY,CAAG,WAAYhF,EAAA,WAAa,sBAAmB6X,uBAErE,IAAqB,kBADvBnY,EAAAA,mBAKEyD,EAAAA,SAAA,KAAAC,EAAAA,WAJeyC,EAAA,MAAR/D,kBADT7B,EAAAA,YAKE8X,EAAA,CAHC,IAAKjW,EAAK,IAAMA,EAAK,KACrB,MAAOA,EAAK,UACZ,MAAOA,EAAK,mPCsEnB,MAAMlB,EAAQZ,EAORxB,EAAOC,EAGPG,EAAOC,EAAAA,IAAI,CAAA,CAAE,EACbgC,EAAOhC,EAAAA,IAAI,EAAK,EAChBiU,EAAajU,EAAAA,IAAI,CAAE,GAAG+B,EAAM,KAAK,CAAE,EACnCoX,EAAenZ,EAAAA,IAAI,CAAC,EAG1ByD,EAAAA,MACE,IAAM1B,EAAM,MACX2B,GAAW,CACVuQ,EAAW,MAAQ,CAAE,GAAGvQ,EAC1B,EACA,CAAE,KAAM,EAAI,CACd,EAEAxD,EAAAA,UAAU,IAAM,CACdH,EAAK,MAAQ,KAAK,MAAM,aAAa,QAAQ,MAAM,GAAK,IAAI,EAC5DoZ,EAAa,MAAQ,CACvB,CAAC,EAGD,MAAMC,EAAS,IAAM,CACdpX,EAAK,QACRmX,EAAa,MAAQ,EAEzB,EAEM5V,EAAQ,IAAM,CAClBvB,EAAK,MAAQ,GACboX,GACF,EAEMC,EAAS,IAAM,CACnB9V,IACA5D,EAAK,eAAgBsU,EAAW,KAAK,EACrCtU,EAAK,QAAQ,CACf,EAGM2Z,EAAQ,IAAM,CAElB,OAAO,KAAKrF,EAAW,KAAK,EAAE,QAAQnW,GAAO,CACvCA,IAAQ,aACV,OAAOmW,EAAW,MAAMnW,CAAG,CAE/B,CAAC,EAED,OAAOmW,EAAW,MAAM,UACxBkF,EAAa,MAAQ,EACrBxZ,EAAK,eAAgBsU,EAAW,KAAK,EACrCtU,EAAK,QAAQ,EACbqC,EAAK,MAAQ,EACf,yVAxIE,OAAApB,YAAA,EAAAC,qBAiEM,MAjENC,GAiEM,CAhEJC,EAAAA,YA+DQkL,EAAA,YA9DGjK,EAAA,4CAAAA,EAAI,MAAAd,GACQkY,GACrB,SAAS,SACT,OAAO,KACN,yBAAwB,KAER,UAASvV,EAAAA,QACxB,CA6Ba,CA9Be,MAAA9B,KAAK,CACjChB,EAAAA,YA6BaoL,EAAA,CA5BF,WAAA8H,EAAA,MAAW,UAAX,sBAAAhT,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAA+S,EAAA,MAAW,UAAS/S,GAC5B,YAAa8C,EAAAA,OAAO,aAAW,UAC/B,MAAKnC,EAAAA,eAAEmC,EAAAA,OAAO,MAAM,EACrB,MAAM,MACN,QAAQ,UACR,QAAQ,WACR,eAAA,GACC,iBAAcqV,EACd,mBAAaA,EAAM,CAAA,OAAA,CAAA,EACnB,gBAAWpY,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,IAAG+S,EAAA,MAAW,aAAiBoF,EAAM,IACjD,UAAA,KAEiB,yBACf,IAaS,CAbTtY,EAAAA,YAaSwY,EAAA,CAZP,IAAA,GACC,QAASJ,EAAA,MACT,cAAaA,EAAA,MAAY,EAC1B,MAAM,QACN,MAAM,qCAEN,IAKO,CALPlV,qBAKO,OALPF,EAAAA,WACUhC,GACR,MAAM,qEAAqE,CAAA,EAC5E,OAED,EAAA,+GAMR,IAsBQ,CAtBRhB,cAsBQsL,EAAA,CAtBD,MAAA,CAAA,MAAA,QAAA,eAAA,OAAA,GAAyC,mBAC9C,IAKa,CALbtL,EAAAA,YAKa4Q,EAAA,CALD,MAAM,qDAAqD,EAAA,mBACrE,IAAiB,CAAjB1Q,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAgD,qBAAiB,YAAX,OAAI,EAAA,GACVlD,EAAAA,YAEO4L,EAAA,CAFD,MAAM,OAAO,QAAQ,OAAO,KAAA,GAAM,QAAOpJ,EAAO,KAAK,4BACzD,IAAwB,CAAxBxC,EAAAA,YAAwBqL,EAAA,KAAA,mBAAjB,IAAS,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAT,YAAS,EAAA,4BAIpBF,EAAAA,YAEYuL,EAAA,KAAA,mBADV,IAAa,CAAbwD,EAAAA,WAAaC,EAAA,OAAA,UAAA,CAAA,EAAA,OAAA,EAAA,UAGfhP,EAAAA,YASe0L,EAAA,CATD,MAAM,gBAAgB,EAAA,mBAClC,IAA4B,CAA5BqD,EAAAA,WAA4BC,EAAA,OAAA,UAAA,CAAA,EAAA,OAAA,EAAA,EAC5BhP,EAAAA,YAAW2L,CAAA,EACX3L,EAAAA,YAEO4L,EAAA,CAFA,QAAO0M,EAAQ,QAAQ,OAAO,MAAM,8BACzC,IAAuC,CAAvCtY,EAAAA,YAAuCqL,EAAA,CAAhC,MAAM,MAAM,EAAA,mBAAC,IAAW,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAX,cAAW,EAAA,0CAAQ,MACzC,EAAA,WACAF,EAAAA,YAEO4L,EAAA,CAFA,QAAO2M,EAAO,QAAQ,OAAO,MAAM,4BACxC,IAAoC,CAApCvY,EAAAA,YAAoCqL,EAAA,CAA7B,MAAM,MAAM,EAAA,mBAAC,IAAQ,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAR,WAAQ,EAAA,0CAAQ,MACtC,EAAA,6RCvCV,MAAMc,EAAQZ,EAgBRgF,EAAQC,EAAAA,SAAQ,EAGhBoT,EAAgBlU,EAAAA,SAAS,IAAM,CACnC,KAAM,CAAE,KAAAgB,EAAM,MAAAmT,EAAO,GAAGhT,CAAI,EAAKN,EACjC,OAAOM,CACT,CAAC,EAGKO,EAAQhH,EAAAA,IAAI,EAAE,EAGdoH,EAAQ,IAAM,CAClBhI,EAAQ,QAAQ,kBAAkB2C,EAAM,IAAI,EAAE,EAAE,KAAMjD,GAAQ,CAC5DkI,EAAM,MAAQlI,EAAI,IACpB,CAAC,CACH,EAEMmI,EAAQ,IAAM,CACblF,EAAM,MAEXA,EAAM,KAAK,MAAM,GAAG,EAAE,QAASmF,GAAO,CACpC,MAAMwS,EAAMxS,EAAG,MAAM,GAAG,EACxBF,EAAM,MAAM,KAAK,CAAE,KAAM0S,EAAI,CAAC,EAAG,UAAWA,EAAI,CAAC,CAAC,CAAE,CACtD,CAAC,CACH,EAGAxZ,OAAAA,EAAAA,UAAU,IAAM,CACV6B,EAAM,OACJA,EAAM,KAAK,SAAS,GAAG,EACzBkF,EAAK,EAELG,EAAK,EAGX,CAAC,qEA1EChG,EAAAA,YAQEJ,EARF+C,EAAAA,WAQEyV,EAAA,MAPqB,CACpB,MAAOxS,EAAA,MACR,aAAW,YACX,aAAW,OACV,SAAU7F,EAAA,MACV,aAAY,CAAA,QAAA,EAAA,EACZ,sBAAkBF,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEyY,EAAAA,MAAK,oBAAsBzY,CAAM,yPCwB1D,MAAMa,EAAQZ,EAYRyY,EAAY5Z,EAAAA,IAAI+B,EAAM,EAAE,EACxB8X,EAAO7Z,EAAAA,IAAI,CAAA,CAAE,EAGnByD,EAAAA,MAAM,IAAM1B,EAAM,GAAKuB,GAAQ,CAC9BsW,EAAU,MAAQtW,CACnB,CAAC,EAGD,MAAMwW,EAAU,IAAM,CACjB/X,EAAM,OACT8X,EAAK,MAAQ9X,EAAM,KAAK,MAAM,GAAG,EAEnC,EAGA7B,OAAAA,EAAAA,UAAU,IAAM,CACf4Z,GACD,CAAC,EAGDrW,EAAAA,MAAM,IAAM1B,EAAM,KAAM,IAAM,CAC7B+X,GACD,CAAC,yPAlEA1Y,EAAAA,YAkBW2Y,EAAA,CAlBD,MAAM,yBAAuBH,EAAA,2CAAAA,EAAS,MAAA1Y,uBAC/C,IASiB,CATjBH,EAAAA,YASiBiZ,EAAA,CATD,MAAM,cAAc,MAAA,CAAA,SAAA,QAAA,sBACnC,IAOO,CAPPjZ,EAAAA,YAOO8R,EAAA,CAPD,MAAM,UAAU,EAAA,mBACM,IAA6B,EAAxDjS,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAKOyD,WAAA,KAAAC,EAAAA,WAL4CsV,EAAA,MAAI,CAApB5W,EAAM/D,mBAAzCkC,EAAAA,YAKOyS,EAAA,CALD,MAAM,eAA8C,IAAK3U,EAAO,MAAA,CAAA,sBACrE,IAGM,CAHN+E,EAAAA,mBAGM,MAAA,CAHD,MAAK3C,EAAAA,eAAA,CAAC,0CAAkDsY,EAAA,MAAY1a,EAAK,WAAA,EAAA,CAAA,EAC5E,SAAU0a,EAAA,MAAY1a,EAAQ,KAAMA,EAAK,qBACvC+D,CAAI,EAAA,GAAAnC,EAAA,uCAMXC,EAAAA,YAKiBkZ,EAAA,KAAA,mBAJI,IAA6B,EAAjDrZ,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAEqByD,WAAA,KAAAC,EAAAA,WAFuBpD,EAAA,KAAI,CAApB8B,EAAM/D,mBAAlCkC,EAAAA,YAEqB8Y,EAAA,CAF8B,IAAKhb,EAAQ,MAAOA,EAAK,sBAC3E,IAA+B,CAA/B4Q,EAAAA,WAA+BC,SAAlB7Q,EAAK,EAAA,CAAA,EAAA,OAAA,EAAA,iCAEnB4Q,EAAAA,WAAaC,EAAA,OAAA,UAAA,CAAA,EAAA,OAAA,EAAA,0ECVT,SAASoK,GAAK7W,EAAK8W,EAAK,CAC3B,IAAIpc,EAAQ,GACZ,OAAIsF,GAAOA,EAAI,SAAS,GAAG,EACvBtF,EAAQsF,EAAI,MAAM,GAAG,EAAE,IAAIL,GAAQoX,GAAIpX,EAAMmX,CAAG,CAAC,EAAE,KAAI,EAEvDpc,EAAQqc,GAAI/W,EAAK8W,CAAG,EAEjBpc,CACX,CAEA,SAASqc,GAAIrc,EAAOoc,EAAK,CACrB,GAAIpc,EAAO,CAKP,QAJIsF,EAAM,MAAM,QAAQtF,CAAK,EAAIA,EAAQA,EAAM,MAAM,GAAG,EACpDsc,EAAOF,GAAA,YAAAA,EAAK,MAAM,KAClBG,EAAU,CAAA,EAELC,EAAI,EAAGA,GAAIlX,GAAA,YAAAA,EAAK,QAAQkX,IAAK,CAClC,IAAIC,EAAanX,EAAIkX,CAAC,EACtB,QAAS9Q,KAAK4Q,EAAM,CAChB,IAAII,EAAKJ,EAAK5Q,CAAC,EAAE,MAAM,GAAG,EAC1B,GAAIgR,EAAG,CAAC,GAAKD,EAAY,CACrBF,EAAQ,KAAKG,EAAG,CAAC,CAAC,EAClB,KACJ,CACJ,CACJ,CACA,OAAOH,EAAQ,OAAS,EAAIA,EAAQ,KAAI,EAAK,IACjD,CAEJ,CASO,SAASI,GAAUrX,EAAK,CAC3B,GAAI,CAACA,EACD,MAAO,GAEX,IAAII,EAAS,GACT/C,EAAM,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EACnD,QAAS+I,EAAI,EAAGA,EAAI,EAAGA,IACfA,IAAM,EACNhG,EAASJ,EAAI,QAAQoG,EAAE,SAAQ,EAAI/I,EAAI+I,EAAI,CAAC,CAAC,EAE7ChG,EAASA,EAAO,QAAQgG,EAAE,SAAQ,EAAI/I,EAAI+I,EAAI,CAAC,CAAC,EAGxD,OAAOhG,CACX,CACO,SAASkX,GAAWtX,EAAK,CAC5B,GAAI,CAACA,EACD,MAAO,GAEX,IAAII,EAAS,GACT/C,EAAM,CAAC,KAAM,KAAM,KAAM,KAAM,MAAM,EACzC,QAAS+I,EAAI,EAAGA,EAAI,EAAGA,IACfA,IAAM,EACNhG,EAASJ,EAAI,QAAQoG,EAAE,SAAQ,EAAI/I,EAAI+I,EAAI,CAAC,CAAC,EAE7ChG,EAASA,EAAO,QAAQgG,EAAE,SAAQ,EAAI/I,EAAI+I,EAAI,CAAC,CAAC,EAGxD,OAAOhG,CACX,wICrEO,SAASuH,GAAKjN,EAAO6c,EAAK,CAC7B,GAAI,CAAC7c,GAASA,GAAS,KAAOA,GAAS,KACnC,OAAA6c,EAAM,IACCA,EAEX,IAAIC,EAAU,IAAI,KAAK9c,CAAK,EACxB+c,EAAI,CACJ,KAAMD,EAAQ,SAAQ,EAAK,EAC3B,KAAMA,EAAQ,QAAO,EACrB,KAAMA,EAAQ,SAAQ,EACtB,KAAMA,EAAQ,WAAU,EACxB,KAAMA,EAAQ,WAAU,EACxB,KAAM,KAAK,OAAOA,EAAQ,SAAQ,EAAK,GAAK,CAAC,EAC7C,EAAKA,EAAQ,gBAAe,CACpC,EACQ,OAAO,KAAKD,CAAG,IACfA,EAAMA,EAAI,QAAQ,OAAO,IAAKC,EAAQ,YAAW,EAAK,IAAI,OAAO,EAAI,OAAO,GAAG,MAAM,CAAC,GAE1F,QAASE,KAAKD,EACN,IAAI,OAAO,IAAMC,EAAI,GAAG,EAAE,KAAKH,CAAG,IAClCA,EAAMA,EAAI,QAAQ,OAAO,GAAK,OAAO,GAAG,SAAW,EAAME,EAAEC,CAAC,GAAO,KAAOD,EAAEC,CAAC,GAAG,QAAQ,GAAKD,EAAEC,CAAC,GAAG,MAAM,CAAE,GAGnH,OAAOH,CAEX,CASO,SAASjT,GAAItE,EAAKuX,EAAK,CAC1B,GAAI,MAAMvX,CAAG,GAAKA,IAAQ,IAAMA,IAAQ,KACpC,OAAOA,EAIX,IAAI2X,EAAW,WAAW3X,CAAG,EACzB4X,EAAMD,EAAW,EAAI,IAAM,GAC3BE,EAAW,KAAK,IAAIF,CAAQ,EAG5BG,EAAM,EACNP,GAAOA,EAAI,SAAS,GAAG,IACvBO,EAAMP,EAAI,OAASA,EAAI,YAAY,GAAG,EAAI,GAI9C,IAAIQ,EAAUR,GAAOA,EAAI,SAAS,GAAG,EAGjCS,EAAKF,EAAM,EAAID,EAAS,QAAQC,CAAG,EAAI,KAAK,MAAMD,CAAQ,EAC1DI,EAAcH,EAAM,EAAI,IAAME,EAAG,SAAQ,EAAG,MAAM,GAAG,EAAE,CAAC,EAAI,GAG5DE,EAAcJ,EAAM,EAAI,KAAK,MAAMD,CAAQ,EAAE,SAAQ,EAAKG,EAAG,SAAQ,EAGzE,OAAID,GAAWG,EAAY,OAAS,IAChCA,EAAcA,EAAY,QAAQ,wBAAyB,GAAG,GAG3DN,EAAMM,EAAcD,CAC/B,CAQO,SAASE,GAAInY,EAAK,CACrB,IAAIoY,EAAY,IAAI,KAAKpY,EAAI,MAAM,EAAG,EAAE,EAAE,QAAQ,KAAM,GAAG,CAAC,EACxDqY,EAAI,IAAI,KAEZ,OADUA,EAAE,YAAW,EAAKD,EAAU,eAAkBC,EAAE,WAAaD,EAAU,SAAQ,GAAOC,EAAE,aAAeD,EAAU,SAAQ,GAAMC,EAAE,UAAYD,EAAU,QAAO,EAAO,EAAI,EAEvL,CAOO,SAASE,GAAItY,EAAKuY,EAAK,CAC1B,OAAIvY,GAAA,YAAAA,EAAK,QAASuY,EACPvY,EAAI,MAAM,EAAGuY,CAAG,EAAI,MAEpBvY,CAGf,CAMO,SAASwY,GAAIxY,EAAK,CACrB,OAAO,MAAMA,CAAG,EAAI,EAAI,KAAK,IAAIA,CAAG,CACxC,yICrGO,SAASyY,GAAOzY,EAAK,CACxB,OAAOA,EAAI,QAAQ,sBAAuB,UAAU,CACxD,CAQO,SAAS6T,GAAO7T,EAAK,CACxB,GAAIA,EACA,OAAOA,EAAI,QAAQ,wBAAyB,kBAAkB,CAEtE,yHCsRA0Y,EAAe,CACb,IA1SiB,CAGjB,SAAU,UASV,QAAS,UACT,QAAS,SAEX,EA4RE,KA3RkB,CAGlB,SAAU,UAQV,QAAS,UACT,QAAS,SAGX,EA6QE,OA5QoB,CAGpB,SAAU,UASV,QAAS,UAET,QAAS,SACX,EA8PE,WA7PwB,CACxB,KAAM,UAEN,SAAU,UASV,QAAS,SAGX,EAgPE,KA/NkB,CAClB,KAAM,UAEN,SAAU,UASV,QAAS,SAGX,EAwNE,MAvGmB,CAGnB,SAAU,UAIV,QAAS,UAKT,QAAS,SAGX,CA+FA,ECtKAC,GAAe,CAAE,aAtJI,CACnB,CACE,KAAM,aACN,OAAQ,qBACR,KAAM,GACN,QAASD,EAAO,KAAK,KACrB,UAAWA,EAAO,KAAK,SACvB,OAAQA,EAAO,KAAK,OACxB,EACE,CACE,KAAM,eACN,OAAQ,uBACR,KAAM,GACN,QAASA,EAAO,MAAM,QACtB,UAAWA,EAAO,MAAM,SACxB,OAAQA,EAAO,MAAM,OACzB,EACE,CACE,KAAM,YACN,OAAQ,qBACR,KAAM,GACN,QAASA,EAAO,IAAI,QACpB,UAAWA,EAAO,IAAI,SACtB,OAAQA,EAAO,IAAI,OACvB,EACE,CACE,KAAM,aACN,KAAM,GACN,OAAQ,sBACR,QAASA,EAAO,KAAK,QACrB,UAAWA,EAAO,KAAK,SACvB,OAAQA,EAAO,KAAK,OACxB,EACE,CACE,KAAM,eACN,KAAM,GACN,OAAQ,wBACR,QAASA,EAAO,OAAO,QACvB,UAAWA,EAAO,OAAO,SACzB,OAAQA,EAAO,OAAO,OAC1B,EACE,CACE,KAAM,mBACN,KAAM,GACN,OAAQ,6BACR,QAASA,EAAO,WAAW,KAC3B,UAAWA,EAAO,WAAW,SAC7B,OAAQA,EAAO,WAAW,OAC9B,CACA,EAqG+B,YAnGX,CAClB,CACE,KAAM,QACN,MAAO,OACX,EACE,CACE,KAAM,WACN,MAAO,mBACX,EACE,CACE,KAAM,iBACN,MAAO,yBACX,EACE,CACE,KAAM,aACN,MAAO,qBACX,EACE,CACE,KAAM,qBACN,MAAO,6BACX,EACE,CACE,KAAM,eACN,MAAO,uBACX,EACE,CACE,KAAM,gBACN,MAAO,wBACX,EACE,CACE,KAAM,mBACN,MAAO,2BACX,EACE,CACE,KAAM,qBACN,MAAO,6BACX,EACE,CACE,KAAM,kBACN,MAAO,0BACX,EACE,CACE,KAAM,SACN,MAAO,iBACX,EACE,CACE,KAAM,aACN,MAAO,qBACX,EACE,CACE,KAAM,SACN,MAAO,iBACX,EACE,CACE,KAAM,cACN,MAAO,sBACX,EACE,CACE,KAAM,YACN,MAAO,oBACX,EACE,CACE,KAAM,aACN,MAAO,qBACX,EACE,CACE,KAAM,OACN,MAAO,eACX,EACE,CACE,KAAM,gBACN,MAAO,wBACX,EACE,CACE,KAAM,gBACN,MAAO,wBACX,EACE,CACE,KAAM,SACN,MAAO,iBACX,EACE,CACE,KAAM,gBACN,MAAO,wBACX,EACE,CACE,KAAM,OACN,MAAO,eACX,EACE,CACE,KAAM,oBACN,MAAO,4BACX,EACE,CACE,KAAM,eACN,MAAO,uBACX,CACA,CAE0C,ECvJpCE,GAAa,CAEf,SAAU,SAAUC,EAAO,CACvB,MAAO,sFAAsF,KAAKA,CAAK,CAC3G,EAEA,aAAc,SAAUA,EAAO,CAC3B,MAAO,qBAAqB,KAAKA,CAAK,CAC1C,EACA,QAAS,SAAUA,EAAO,CACtB,MAAO,kDAAkD,KAAKA,CAAK,CACvE,EACA,OAASA,GACEC,SAAK,QAAQD,CAAK,GAAKC,SAAK,SAASD,CAAK,EAGrD,QAAS,SAAUA,EAAO,CACtB,MAAO,oEAAoE,KAAKA,CAAK,CACzF,EAEA,eAAgB,SAAUE,EAAQ,CAC9B,MAAO,gIAAgI,KAAKA,CAAM,CACtJ,EAEA,OAAQ,SAAUF,EAAO,CACrB,MAAO,8CAA8C,KAAKA,CAAK,CACnE,EAGA,SAAU,SAAUE,EAAQ,CACxB,IAAIC,EAAaH,GAAU,CAIvB,QAHII,EAAa,CAAC,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,CAAC,EACjEC,EAAML,EAAM,MAAM,EAAE,EACpBN,EAAM,GAAIY,EAAM,EACX/S,EAAI,EAAGA,EAAImS,EAAKnS,IACrB+S,GAAOD,EAAI9S,CAAC,EAAI6S,EAAW7S,CAAC,EAEhC,IAAIgT,EAAYD,EAAM,GAClBE,EAAe,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EACrE9U,EAAS8U,EAAaD,CAAS,EACnC,OAAO7U,IAAWsU,EAAM,EAAE,CAC9B,EAEA,GAAI,KAAK,eAAeE,CAAM,EAAG,CAE7B,IAAIjF,EAAUiF,EAAO,OAAO,EAAG,CAAC,EAC5BO,EAAaxF,EAAQ,QAAQ,wBAAyB,UAAU,EAChEyF,EAAU,IAAI,KAAKD,CAAU,EAC7BzR,EAAQ0R,EAAQ,SAAQ,EAAK,EACjC,GAAI,SAASzF,EAAQ,OAAO,EAAG,CAAC,CAAC,IAAMjM,EACnC,OAAOmR,EAAUD,CAAM,CAE/B,CACA,MAAO,EACX,EACA,cAAgBA,GAAW,CACvB,IAAIlc,EAAOkc,EAAO,OAAO,EAAG,CAAC,EACzBS,EAAQT,EAAO,OAAO,EAAG,CAAC,EAAE,QAAQ,wBAAyB,WAAW,EACxEZ,EAAM,IAAI,KAAI,EAAG,YAAW,EAAKY,EAAO,OAAO,EAAG,CAAC,EAAI,EACvDU,EAAOV,EAAO,OAAO,GAAI,CAAC,EAAI,IAAM,EAAK,IAAM,IAEnD,MAAO,CACH,KAAQlc,EACR,MAAS2c,EACT,IAAOrB,EACP,IAAOsB,CACnB,CACI,CACJ,8BClDA,MAAM1e,EAAeJ,EAAe,EAI9B+e,EAAW1X,EAAAA,SAAS,IAAA,OAAM,QAAAlF,EAAA/B,EAAa,QAAb,YAAA+B,EAAoB,WAAY,GAAK,EAC/DjC,EAAUmH,EAAAA,SAAS,IAAA,OAAM,QAAAlF,EAAA/B,EAAa,QAAb,YAAA+B,EAAoB,UAAW,CAAA,EAAE,EAG1D6c,EAAc,IAAM,CACxB5e,EAAa,KAAK,OAAO,CAC3B,gRA5BE+C,EAAAA,YAWUyQ,EAAA,YAXQmL,EAAA,2CAAAA,EAAQ,MAAA9b,GAAE,WAAA,GAAY,MAAO/C,EAAA,MAAQ,0BACrD,IASQ,CATR4C,EAAAA,YASQsL,EAAA,CATA,MAAOlO,EAAA,MAAQ,0BACrB,IAA4C,CAA5C4C,EAAAA,YAA4C4Q,EAAA,KAAA,mBAAhC,IAAmB,CAAhB/M,EAAAA,gBAAAV,EAAAA,gBAAA/F,EAAA,MAAQ,KAAK,EAAA,CAAA,UACXA,EAAA,MAAQ,oBAAzBiD,EAAAA,YAEYkL,EAAA,CAAA,IAAA,CAAA,EAAA,mBADV,IAAkB,CAAf1H,EAAAA,gBAAAV,EAAAA,gBAAA/F,EAAA,MAAQ,IAAI,EAAA,CAAA,uCAEjB4C,EAAAA,YAGe0L,EAAA,KAAA,mBAFb,IAAW,CAAX1L,EAAAA,YAAW2L,CAAA,EACX3L,EAAAA,YAAyC4L,EAAA,CAAnC,KAAA,GAAM,QAAOsQ,sBAAa,IAAE,CAAA,GAAAhc,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAF,KAAE,EAAA,0GCW1C,MAAM5C,EAAeJ,EAAe,EAG9B+e,EAAW1X,EAAAA,SAAS,IAAA,OAAM,QAAAlF,EAAA/B,EAAa,UAAb,YAAA+B,EAAsB,WAAY,GAAK,EACjEjC,EAAUmH,EAAAA,SAAS,IAAA,OAAM,QAAAlF,EAAA/B,EAAa,UAAb,YAAA+B,EAAsB,UAAW,CAAA,EAAE,EAG5DyL,EAAU,IAAM,CAEhB,OAAO1N,EAAQ,MAAM,WAAc,YACrCA,EAAQ,MAAM,UAAS,EAEzBE,EAAa,KAAK,SAAS,CAC7B,EAGMuN,EAAS,IAAM,CAEf,OAAOzN,EAAQ,MAAM,UAAa,YACpCA,EAAQ,MAAM,SAAQ,EAExBE,EAAa,KAAK,SAAS,CAC7B,gRAzCE+C,EAAAA,YAYUyQ,EAAA,YAZQmL,EAAA,2CAAAA,EAAQ,MAAA9b,GAAE,WAAA,GAAY,YAAW/C,EAAA,MAAQ,OAAK,wBAC9D,IAUQ,CAVR4C,EAAAA,YAUQsL,EAAA,CAVA,MAAOlO,EAAA,MAAQ,0BACrB,IAA4C,CAA5C4C,EAAAA,YAA4C4Q,EAAA,KAAA,mBAAhC,IAAmB,CAAhB/M,EAAAA,gBAAAV,EAAAA,gBAAA/F,EAAA,MAAQ,KAAK,EAAA,CAAA,UACXA,EAAA,MAAQ,oBAAzBiD,EAAAA,YAEYkL,EAAA,CAAA,IAAA,CAAA,EAAA,mBADV,IAAkB,CAAf1H,EAAAA,gBAAAV,EAAAA,gBAAA/F,EAAA,MAAQ,IAAI,EAAA,CAAA,uCAEjB4C,EAAAA,YAIe0L,EAAA,KAAA,mBAHb,IAAW,CAAX1L,EAAAA,YAAW2L,CAAA,EACX3L,EAAAA,YAAkE4L,EAAA,CAA5D,KAAA,GAAM,QAAOf,sBAAQ,IAAgC,CAA7BhH,EAAAA,gBAAAV,EAAAA,gBAAA/F,EAAA,MAAQ,YAAU,IAAA,EAAA,CAAA,UAChD4C,EAAAA,YAAoE4L,EAAA,CAA9D,KAAA,GAAM,QAAOd,sBAAS,IAAiC,CAA9BjH,EAAAA,gBAAAV,EAAAA,gBAAA/F,EAAA,MAAQ,aAAW,IAAA,EAAA,CAAA,4GCA1D,MAAME,EAAeJ,EAAe,EAE9B+e,EAAW1X,EAAAA,SAAS,IAAA,OAAM,QAAAlF,EAAA/B,EAAa,UAAb,YAAA+B,EAAsB,WAAY,GAAK,yHAXrEgB,EAAAA,YAEY8b,EAAA,YAFQF,EAAA,2CAAAA,EAAQ,MAAA9b,GAAE,WAAA,GAAW,MAAM,8BAA+B,MAAO,CAAA,OAAA,IAAA,sBACnF,IAA6F,CAA7FH,EAAAA,YAA6F2Q,EAAA,CAAxE,cAAA,GAAc,KAAK,KAAK,MAAM,IAAI,MAAM,gECc5DyL,GAAU,CACb,KAAM,aACN,WAAY,CACV,SAAAC,cACAC,cACAC,GACA,oCCQJ,MAAMjf,EAAeJ,EAAe,EAC9B8I,EAAa/G,EAAAA,IAAI,EAAE,EAGnBgd,EAAW1X,EAAAA,SAAS,IAAA,OAAM,QAAAlF,EAAA/B,EAAa,SAAb,YAAA+B,EAAqB,WAAY,GAAK,EAChEjC,EAAUmH,EAAAA,SAAS,IAAA,OAAM,QAAAlF,EAAA/B,EAAa,SAAb,YAAA+B,EAAqB,UAAW,CAAA,EAAE,EAG3DyL,EAAU,IAAM,CAEhB,OAAO1N,EAAQ,MAAM,WAAc,YACrCA,EAAQ,MAAM,UAAU4I,EAAW,KAAK,EAE1C1I,EAAa,KAAK,QAAQ,EAC1B0I,EAAW,MAAQ,EACrB,EAGM6E,EAAS,IAAM,CAEf,OAAOzN,EAAQ,MAAM,UAAa,YACpCA,EAAQ,MAAM,SAAQ,EAExBE,EAAa,KAAK,QAAQ,EAC1B0I,EAAW,MAAQ,EACrB,mTAtDE3F,EAAAA,YAsBUyQ,EAAA,YAtBQmL,EAAA,2CAAAA,EAAQ,MAAA9b,GAAE,WAAA,GAAY,MAAO/C,EAAA,MAAQ,0BACrD,IAoBQ,CApBR4C,EAAAA,YAoBQsL,EAAA,CApBA,MAAOlO,EAAA,MAAQ,0BACrB,IAA4C,CAA5C4C,EAAAA,YAA4C4Q,EAAA,KAAA,mBAAhC,IAAmB,CAAhB/M,EAAAA,gBAAAV,EAAAA,gBAAA/F,EAAA,MAAQ,KAAK,EAAA,CAAA,UAC5B4C,EAAAA,YAYYuL,EAAA,KAAA,mBAXV,IAOE,CAPFvL,EAAAA,YAOEoL,EAAA,YANSpF,EAAA,2CAAAA,EAAU,MAAA7F,GAClB,MAAO/C,EAAA,MAAQ,MACf,YAAaA,EAAA,MAAQ,YACrB,KAAMA,EAAA,MAAQ,WAAS,OACxB,SAAA,GACA,MAAA,wDAESA,EAAA,MAAQ,MAAnByC,YAAA,EAAAC,qBAEM,MAFNC,GAEMoD,kBADD/F,EAAA,MAAQ,IAAI,EAAA,CAAA,uCAGnB4C,EAAAA,YAIe0L,EAAA,KAAA,mBAHb,IAAW,CAAX1L,EAAAA,YAAW2L,CAAA,EACX3L,EAAAA,YAAkE4L,EAAA,CAA5D,KAAA,GAAM,QAAOf,sBAAQ,IAAgC,CAA7BhH,EAAAA,gBAAAV,EAAAA,gBAAA/F,EAAA,MAAQ,YAAU,IAAA,EAAA,CAAA,UAChD4C,EAAAA,YAAoE4L,EAAA,CAA9D,KAAA,GAAM,QAAOd,sBAAS,IAAiC,CAA9BjH,EAAAA,gBAAAV,EAAAA,gBAAA/F,EAAA,MAAQ,aAAW,IAAA,EAAA,CAAA,0EDGtD,oCERJ,MAAME,EAAeJ,EAAe,EAE9B+e,EAAW1X,EAAAA,SAAS,CACzB,IAAK,IAAA,OAAM,QAAAlF,EAAA/B,EAAa,QAAb,YAAA+B,EAAoB,WAAY,IAC3C,IAAMpC,GAAU,CACXK,EAAa,QAChBA,EAAa,MAAM,SAAWL,EAEhC,CACD,CAAC,EAEKG,EAAUmH,EAAAA,SAAS,IAAA,OAAM,QAAAlF,EAAA/B,EAAa,QAAb,YAAA+B,EAAoB,UAAW,CAAA,EAAE,EAE1D6c,EAAc,IAAM,CACzB5e,EAAa,KAAK,OAAO,CAC1B,EAGMkf,EAAiBvf,GAAU,CAC3BA,GAEJK,EAAa,KAAK,OAAO,CAE3B,wIArCC+C,EAAAA,YAOYoc,EAAA,YAPQR,EAAA,4CAAAA,EAAQ,MAAA9b,GAA8Gqc,GAA3G,QAASpf,EAAA,MAAQ,QAAO,EAAOA,EAAA,MAAQ,QAAO,IAAU,MAAOA,EAAA,MAAQ,MAAO,SAAA,KAE3F,kBAChB,IAEO,CAFP4C,EAAAA,YAEO4L,EAAA,CAFD,KAAA,GAAK,KAAA,GAAM,uBAAOsQ,yBACvB,IAAwB,CAAxBlc,EAAAA,YAAwBqL,EAAA,KAAA,mBAAjB,IAAS,CAAA,GAAAnL,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAAT,YAAS,EAAA,wCAHlB,IAAkB,qCAAf9C,EAAA,MAAQ,IAAI,EAAG,IAClB,CAAA,mFFsBF,EAxBO2C,GAAA,CAAA,MAAM,aAAa,gNAAxB,OAAAF,YAAA,EAAAC,qBAMM,MANNC,GAMM,CALJC,EAAAA,YAAa0c,CAAA,EACb1c,EAAAA,YAAe2c,CAAA,EACf3c,EAAAA,YAAe4c,CAAA,EACf5c,EAAAA,YAAc6c,CAAA,EACd7c,EAAAA,YAAa8c,CAAA,mCGkEjB,SAASC,GAAQC,EAAK5f,EAAU,GAAI,CAElC,MAAM6f,EAAa,CACjB,QAAAC,GACA,YAAAC,GACA,cAAAC,GACA,YAAAC,GACA,SAAAC,GACA,cAAAC,GACA,QAAAC,GACA,SAAAC,GACA,OAAAC,GACA,YAAAC,GACA,OAAAC,GACA,QAAAC,GACA,OAAAC,GACA,QAAAC,GACJ,SAAIC,GACA,UAAAC,GACA,UAAAC,GACA,WAAAC,GACA,WAAYC,EAChB,EAGE,cAAO,KAAKnB,CAAU,EAAE,QAAQoB,GAAQ,CACtCrB,EAAI,UAAUqB,EAAMpB,EAAWoB,CAAI,CAAC,CACtC,CAAC,EAGDrB,EAAI,OAAO,iBAAiB,KAAO,CACjC,QAASsB,EACb,QAAIC,EACJ,QAAI1hB,EACA,OAAAqe,GACA,WAAAC,GACA,QAAS,CACP,GAAGqD,GACH,GAAGC,GACH,GAAGzU,EACT,EACI,GAAG5M,CACP,EAES4f,CACT,CAGA,MAAA7e,GAAe,CACb,QAAA4e,GAEA,QAAAG,GACA,YAAAC,GACA,cAAAC,GACA,YAAAC,GACA,SAAAC,GACA,cAAAC,GACA,QAAAC,GACA,SAAAC,GACA,OAAAC,GACA,YAAAC,GACA,OAAAC,GACA,QAAAC,GACA,OAAAC,GACA,QAAAC,GACF,SAAEC,GACA,UAAAC,GACA,UAAAC,GACA,WAAAC,GAEF,QAAEI,EACF,QAAE1hB,EACA,OAAAqe,GACF,WAAEoD,CACF","x_google_ignoreList":[26]}
|
|
1
|
+
{"version":3,"file":"specter-pui.umd.js","sources":["../src/commons/storage.js","../src/stores/message.js","../src/components/message/index.js","../src/commons/request.js","../src/components/assembly/VtkArea.vue","../src/components/assembly/VtkAreaTabs.vue","../src/components/assembly/VtkBreadcrumb.vue","../src/components/assembly/VtkCheckbox.vue","../src/components/assembly/VtkCount.vue","../src/components/assembly/VtkDatePicker.vue","../src/components/assembly/VtkDept.vue","../src/components/assembly/VtkEmpty.vue","../src/components/assembly/VtkFab.vue","../src/components/assembly/VtkFormItem.vue","../src/components/assembly/VtkImg.vue","../src/components/assembly/VtkPage.vue","../src/components/assembly/VtkPdf.vue","../src/composables/usePage.js","../src/components/assembly/VtkProj.vue","../src/components/assembly/VtkRadio.vue","../src/components/assembly/VtkSearch.vue","../src/components/assembly/VtkSelect.vue","../src/components/assembly/VtkStepper.vue","../src/commons/filters/dictionary.js","../src/commons/filters/format.js","../src/commons/filters/mask.js","../node_modules/vuetify/lib/util/colors.js","../src/commons/themes.js","../src/commons/validation.js","../src/components/message/alert.vue","../src/components/message/confirm.vue","../src/components/message/loading.vue","../src/components/message/vtkMessage.vue","../src/components/message/prompt.vue","../src/components/message/toast.vue","../src/index.js"],"sourcesContent":["const Storage = {};\r\n/** 获取Storage对象 */\r\nconst storage = (type = 'local') => {\r\n return type == \"local\" ? window.localStorage : window.sessionStorage;\r\n}\r\n/**\r\n * 获取对应缓存值JSON对象\r\n * @param {string} key 键\r\n * @param {string} type 默认为localStorage, 'session'为sessionStorage\r\n * @return {object} 对应的值JSON对象\r\n */\r\nStorage.get = (key, type = 'local') => {\r\n var js = storage(type).getItem(key);\r\n return /^[\\\\{|\\\\[].+[\\\\}|\\\\]]$/.test(js) ? JSON.parse(js) : js;\r\n};\r\n/**\r\n * 设置存储缓存取对象JSON\r\n * @param {string} key 键\r\n * @param {string} value 值(JSON对象)\r\n * @param {string} type 默认为localStorage, 'session'为sessionStorage\r\n */\r\nStorage.set = (key, value, type = 'local') => {\r\n value = (value.constructor === Object) ? JSON.stringify(value) : value\r\n storage(type).setItem(key, value);\r\n};\r\n/**\r\n * 删除对应的缓存对象JSON\r\n * @param {string} key 键\r\n * @param {string} type 默认为localStorage, 'session'为sessionStorage\r\n */\r\nStorage.remove = (key, type = 'local') => {\r\n storage(type).removeItem(key);\r\n};\r\n/**\r\n * 清空所有的缓存对象JSON\r\n * @param {string} type 默认为localStorage, 'session'为sessionStorage\r\n */\r\nStorage.clear = (type = 'local') => {\r\n storage(type).clear();\r\n};\r\n\r\nexport default Storage;\r\n","// stores/message.js\r\nimport { defineStore } from 'pinia'\r\n\r\nexport const useMessageStore = defineStore('message', {\r\n state: () => ({\r\n alert: {\r\n isActive: false,\r\n options: {\r\n title: '',\r\n text: '',\r\n color: '',\r\n width: 500\r\n }\r\n },\r\n confirm: {\r\n isActive: false,\r\n options: {\r\n title: '',\r\n text: '',\r\n color: '',\r\n width: 400,\r\n cancelText: '取消',\r\n confirmText: '确定'\r\n }\r\n },\r\n loading: {\r\n isActive: false,\r\n options: {\r\n title: '',\r\n text: '',\r\n color: '',\r\n width: 300,\r\n indeterminate: true,\r\n value: 0,\r\n progressColor: 'primary',\r\n size: 64,\r\n circleWidth: 6\r\n }\r\n },\r\n prompt: {\r\n isActive: false,\r\n options: {\r\n title: '',\r\n text: '',\r\n color: '',\r\n width: 500,\r\n label: '',\r\n placeholder: '',\r\n inputType: 'text',\r\n cancelText: '取消',\r\n confirmText: '确定'\r\n }\r\n },\r\n toast: {\r\n isActive: false,\r\n options: {\r\n text: '',\r\n color: '',\r\n timeout: 3000,\r\n position: 'top'\r\n }\r\n }\r\n }),\r\n \r\n actions: {\r\n hide(type) {\r\n if (this[type]) {\r\n this[type].isActive = false\r\n }\r\n },\r\n \r\n show(type, options) {\r\n if (this[type]) {\r\n this[type] = {\r\n isActive: true,\r\n options: options\r\n }\r\n }\r\n }\r\n }\r\n})","// components/message/index.js\r\nimport { useMessageStore } from '../../stores/message.js'\r\n\r\nconst Message = {\r\n // 显示 alert\r\n alert(options) {\r\n const messageStore = useMessageStore()\r\n messageStore.show('alert', options)\r\n },\r\n \r\n // 显示 confirm\r\n confirm(options) {\r\n const messageStore = useMessageStore()\r\n messageStore.show('confirm', options)\r\n },\r\n \r\n // loading 对象,包含 show 和 hide 方法\r\n loading: {\r\n show(options = {}) {\r\n const messageStore = useMessageStore()\r\n const defaultOptions = {\r\n title: '',\r\n text: '',\r\n color: '',\r\n width: 120,\r\n indeterminate: true,\r\n progressColor: 'primary',\r\n size: 64,\r\n circleWidth: 6\r\n }\r\n messageStore.show('loading', { ...defaultOptions, ...options })\r\n },\r\n hide() {\r\n const messageStore = useMessageStore()\r\n messageStore.hide('loading')\r\n }\r\n },\r\n \r\n // 显示 prompt\r\n prompt(options) {\r\n const messageStore = useMessageStore()\r\n messageStore.show('prompt', options)\r\n },\r\n \r\n // 显示 toast\r\n toast(text, options = {}) {\r\n \r\n const messageStore = useMessageStore()\r\n // 确保传入的是字符串时正确处理\r\n const toastOptions = typeof text === 'string' \r\n ? { text, ...options }\r\n : text\r\n messageStore.show('toast', toastOptions)\r\n },\r\n \r\n // 隐藏指定类型的消息\r\n hide(type) {\r\n const messageStore = useMessageStore()\r\n messageStore.hide(type)\r\n }\r\n}\r\n\r\nexport default Message","import axios from \"axios\";\r\nimport Storage from \"./storage.js\";\r\nimport Message from \"../components/message/index.js\";\r\n\r\n// create an axios instance\r\nconst service = axios.create({\r\n baseURL: window.VITE_APP_API_URL || import.meta.env.VITE_APP_API_URL || \"\",\r\n headers: {\r\n \"X-Requested-With\": \"XMLHttpRequest\",\r\n },\r\n withCredentials: false,\r\n timeout: 30000,\r\n});\r\n\r\n// request interceptor\r\nservice.interceptors.request.use(\r\n (config) => {\r\n if (Storage.get(\"_mis_acis_token\")) {\r\n config.headers[\"X-Token\"] = \"1b0679be72ad976ad5d491ad57a5eec0\";\r\n config.headers[\"Authorization\"] = \"Bearer \" + Storage.get(\"_mis_acis_token\");\r\n }\r\n return config;\r\n },\r\n (error) => {\r\n Message.toast(error.message || \"请求错误\");\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// response interceptor\r\nservice.interceptors.response.use(\r\n (response) => {\r\n let res = response.data;\r\n let header = response.headers[\"content-disposition\"];\r\n\r\n if (header != undefined && header.split(\";\")[0] == \"attachment\") {\r\n res = response;\r\n }\r\n if (response.status !== 200) {\r\n Message.toast(res.message || \"请求失败\", { color: \"error\" });\r\n return Promise.reject(new Error(res.message || \"请求失败\"));\r\n } else {\r\n // 检查登录过期\r\n if (\r\n res.meta &&\r\n !res.meta.success &&\r\n res.meta.message === \"specter_authorize_exception\"\r\n ) {\r\n Storage.clear(); //清除所有缓存\r\n const handleRedirect = () => {\r\n const url = window.location.href;\r\n const index = url.indexOf(\"#\");\r\n let newUrl;\r\n\r\n if (index > -1) {\r\n newUrl = url.substring(0, index) + \"#/\";\r\n } else {\r\n newUrl = url + \"#/\";\r\n }\r\n\r\n window.location.href = newUrl;\r\n };\r\n\r\n Message.confirm({\r\n title: \"提示\",\r\n text: \"对不起,您的登录信息过期!\",\r\n onConfirm: handleRedirect,\r\n onCancel: handleRedirect,\r\n });\r\n }\r\n return Promise.resolve(res);\r\n }\r\n },\r\n (error) => {\r\n console.log(\"err\" + error);\r\n Message.toast(error.message || \"网络错误\", { color: \"error\" });\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nconst Request = {};\r\n\r\nRequest.http = (\r\n url,\r\n data = {},\r\n method = \"GET\",\r\n headers = { \"content-type\": \"application/x-www-form-urlencoded\" },\r\n responseType = null\r\n) => {\r\n if (headers[\"content-type\"] === \"application/x-www-form-urlencoded\") {\r\n return service({\r\n url: url,\r\n params: data,\r\n method: method,\r\n headers: headers,\r\n responseType: responseType,\r\n });\r\n } else {\r\n return service({\r\n url: url,\r\n data: data,\r\n method: method,\r\n headers: headers,\r\n responseType: responseType,\r\n });\r\n }\r\n};\r\n\r\nRequest.getForm = (url, data = {}) => {\r\n return Request.http(url, data);\r\n};\r\n\r\nRequest.postForm = (url, data = {}) => {\r\n return Request.http(url, data, \"POST\");\r\n};\r\n\r\nRequest.getJson = (url, data = {}) => {\r\n return Request.http(url, data, \"POST\", {\r\n \"content-type\": \"application/json\",\r\n });\r\n};\r\n\r\nRequest.postJson = (url, data = {}) => {\r\n return Request.http(url, data, \"POST\", {\r\n \"content-type\": \"application/json\",\r\n });\r\n};\r\n\r\nRequest.imp = (url, data = {}) => {\r\n return Request.http(url, data, \"POST\", {\r\n \"Content-Type\": \"multipart/form-data\",\r\n });\r\n};\r\n\r\nRequest.exp = (url, data = {}) => {\r\n return Request.http(\r\n url,\r\n data,\r\n \"POST\",\r\n { \"content-Type\": \"application/json\" },\r\n \"blob\"\r\n );\r\n};\r\n\r\nexport default Request;\r\n","<template>\n\t<div class=\"d-inline-block d-flex\">\n\t\t<VSelect\n\t\t\tv-model=\"entity.area2\"\n\t\t\t@update:model-value=\"nextArea(entity.area2, 1)\"\n\t\t\t@click:clear=\"clear(1)\"\n\t\t\t:placeholder=\"user.areacode?.length >= 2 ? entity.name2 : '---省级---'\"\n\t\t\t:items=\"areaData.area2\"\n\t\t\titem-title=\"areaName\"\n\t\t\titem-value=\"areaCode\"\n\t\t\tclass=\"d-inline-block sel_box mr-3\"\n\t\t\thide-details\n\t\t\tdensity=\"compact\"\n\t\t\tvariant=\"outlined\"\n\t\t\tclearable\n\t\t\t:disabled=\"user.areacode?.length >= 2\"\n\t\t\t:menu-props=\"{ offsetY: true }\"\n\t\t\t:style=\"areaStyle\"></VSelect>\n\t\t<VSelect\n\t\t\tv-if=\"maxArea >= 4\"\n\t\t\tv-model=\"entity.area4\"\n\t\t\t@update:model-value=\"nextArea(entity.area4, 2)\"\n\t\t\t@click:clear=\"clear(2)\"\n\t\t\t:placeholder=\"user.areacode?.length >= 4 ? entity.name4 : '---市级---'\"\n\t\t\t:items=\"areaData.area4\"\n\t\t\titem-title=\"areaName\"\n\t\t\titem-value=\"areaCode\"\n\t\t\tclass=\"d-inline-block sel_box\"\n\t\t\t:class=\"maxArea > 4 && 'mr-3'\"\n\t\t\thide-details\n\t\t\tdensity=\"compact\"\n\t\t\tvariant=\"outlined\"\n\t\t\tclearable\n\t\t\t:disabled=\"user.areacode?.length >= 4\"\n\t\t\t:menu-props=\"{ offsetY: true }\"\n\t\t\t:style=\"areaStyle\"></VSelect>\n\t\t<VSelect\n\t\t\tv-if=\"maxArea >= 6\"\n\t\t\tv-model=\"entity.area6\"\n\t\t\t@update:model-value=\"nextArea(entity.area6, 3)\"\n\t\t\t@click:clear=\"clear(3)\"\n\t\t\t:placeholder=\"user.areacode?.length >= 6 ? entity.name6 : '---区/县---'\"\n\t\t\t:items=\"areaData.area6\"\n\t\t\titem-title=\"areaName\"\n\t\t\titem-value=\"areaCode\"\n\t\t\tclass=\"d-inline-block sel_box\"\n\t\t\t:class=\"maxArea > 6 && 'mr-3'\"\n\t\t\thide-details\n\t\t\tdensity=\"compact\"\n\t\t\tvariant=\"outlined\"\n\t\t\tclearable\n\t\t\t:disabled=\"user.areacode?.length >= 6\"\n\t\t\t:menu-props=\"{ offsetY: true }\"\n\t\t\t:style=\"areaStyle\"></VSelect>\n\t\t<VSelect\n\t\t\tv-if=\"maxArea >= 9\"\n\t\t\tv-model=\"entity.area9\"\n\t\t\t@update:model-value=\"nextArea(entity.area9, 4)\"\n\t\t\t@click:clear=\"clear(4)\"\n\t\t\t:placeholder=\"user.areacode?.length >= 9 ? entity.name9 : '---街/镇---'\"\n\t\t\t:items=\"areaData.area9\"\n\t\t\titem-title=\"areaName\"\n\t\t\titem-value=\"areaCode\"\n\t\t\tclass=\"d-inline-block sel_box\"\n\t\t\t:class=\"maxArea > 9 && 'mr-3'\"\n\t\t\thide-details\n\t\t\tdensity=\"compact\"\n\t\t\tvariant=\"outlined\"\n\t\t\tclearable\n\t\t\t:disabled=\"user.areacode?.length >= 9\"\n\t\t\t:menu-props=\"{ offsetY: true }\"\n\t\t\t:style=\"areaStyle\"></VSelect>\n\t\t<VSelect\n\t\t\tv-if=\"maxArea >= 12\"\n\t\t\tv-model=\"entity.area12\"\n\t\t\t@update:model-value=\"nextArea(entity.area12, 5)\"\n\t\t\t@click:clear=\"clear(5)\"\n\t\t\t:placeholder=\"user.areacode?.length >= 12 ? entity.name12 : '---村/社---'\"\n\t\t\t:items=\"areaData.area12\"\n\t\t\titem-title=\"areaName\"\n\t\t\titem-value=\"areaCode\"\n\t\t\tclass=\"d-inline-block\"\n\t\t\tstyle=\"width: 188px\"\n\t\t\thide-details\n\t\t\tdensity=\"compact\"\n\t\t\tvariant=\"outlined\"\n\t\t\tclearable\n\t\t\t:disabled=\"user.areacode?.length >= 12\"\n\t\t\t:menu-props=\"{ offsetY: true }\"\n\t\t\t:style=\"areaStyle\"></VSelect>\n\t</div>\n</template>\n\n<script setup>\nimport { ref, reactive, onMounted, getCurrentInstance } from 'vue';\n\nimport Request from \"../../commons/request\"\n\nconst { proxy } = getCurrentInstance();\n\n// 定义组件名称和选项\ndefineOptions({\n\tname: \"VtkArea\",\n\tinheritAttrs: false,\n});\n\n// 定义props\nconst props = defineProps({\n\tmaxArea: {\n\t\ttype: Number,\n\t\tdefault: 12,\n\t},\n\tminArea: {\n\t\ttype: Number,\n\t\tdefault: null,\n\t},\n\tareaStyle: {\n\t\ttype: String,\n\t\tdefault: \"\",\n\t},\n});\n\n// 定义emits\nconst emit = defineEmits(['update:modelValue']);\n\n// 响应式数据\nconst entity = reactive({\n\tarea2: null,\n\tarea4: null,\n\tarea6: null,\n\tarea9: null,\n\tarea12: null,\n\tname2: '',\n\tname4: '',\n\tname6: '',\n\tname9: '',\n\tname12: ''\n});\n\nconst user = ref({ areacode: \"\" });\nconst areaData = reactive({\n\tarea2: [],\n\tarea4: [],\n\tarea6: [],\n\tarea9: [],\n\tarea12: []\n});\n\n// 安全获取 vtk 对象\nconst getVtk = () => {\n if (typeof window !== 'undefined' && window.$vtk) {\n return window.$vtk;\n }\n return null;\n};\n\n// 组件挂载时执行\nonMounted(() => {\n\tuser.value = typeof(proxy.$vtk.storage.get(\"_mis_acis_users\")) != 'object' ? JSON.parse(proxy.$vtk.storage.get(\"_mis_acis_users\")) : proxy.$vtk.storage.get(\"_mis_acis_users\") || '';\n\tarea();\n});\n\n// 所属地区\nconst area = () => {\n try {\n proxy.$vtk.message.loading.show();\n Request.postForm(`/dict/area/show/${user.value.areacode}`).then((res) => {\n proxy.$vtk.message.loading.hide();\n if (res.meta.success) {\n entity[`area${res.data.areaLeve}`] = res.data.areaCode;\n entity.name2 = res.data.province;\n entity.name4 = res.data.city;\n entity.name6 = res.data.district;\n entity.name9 = res.data?.town;\n entity.name12 = res.data?.village;\n nextArea(user.value.areacode);\n } else {\n proxy.$vtk.message.toast(res.meta.message);\n }\n }).catch(error => {\n proxy.$vtk.message.loading.hide();\n proxy.$vtk.message.toast('加载区域数据失败');\n });\n } catch (error) {\n console.error('初始化区域数据失败:', error);\n if (proxy.$vtk.message?.loading?.hide) {\n proxy.$vtk.message.loading.hide();\n }\n }\n};\n\n// 下一级地区列表\nconst nextArea = (areaCode, index) => {\n\tinputFn(areaCode);\n \n\tif (areaCode?.length < 12) {\n\t\tRequest.postForm(`/dict/area/next/${areaCode}`).then((res) => {\n\t\t\tproxy.$vtk.message.loading.hide();\n\t\t\tif (res.meta.success) {\n\t\t\t\tif (index) {\n\t\t\t\t\tObject.keys(areaData)\n\t\t\t\t\t\t.slice(index, 5)\n\t\t\t\t\t\t.forEach((e) => {\n\t\t\t\t\t\t\tareaData[e] = [];\n\t\t\t\t\t\t\tentity[e] = null;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tareaData[`area${res.data[0].areaLeve}`] = res.data;\n\t\t\t} else {\n\t\t\t\tproxy.$vtk.message.toast(res.meta.message);\n\t\t\t}\n\t\t}).catch(error => {\n console.error('加载下级区域数据失败:', error);\n proxy.$vtk.message.toast('加载下级区域数据失败');\n });\n\t}\n};\n\n// 清除\nconst clear = (index) => {\n\tlet arr = Object.keys(areaData);\n\tinputFn(entity[arr[index - 2]]);\n\tarr.slice(index, 5).forEach((e) => {\n\t\tareaData[e] = [];\n\t\tentity[e] = null;\n\t});\n};\n\n// 输入事件\nconst inputFn = (e) => {\n\te && emit(\"update:modelValue\", e);\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.sel_box {\n\twidth: 164px;\n}\n</style>","<template>\r\n\t<v-menu v-model=\"menu\" :close-on-content-click=\"false\" max-width=\"520\" min-width=\"520\">\r\n\t\t<template v-slot:activator=\"{ props }\">\r\n\t\t\t<v-btn\r\n\t\t\t\tv-bind=\"props\"\r\n\t\t\t\tvariant=\"outlined\"\r\n\t\t\t\tcolor=\"primary\"\r\n\t\t\t\tclass=\"area-select-btn\"\r\n\t\t\t\t:style=\"$attrs.styles\"\r\n\t\t\t>\r\n\t\t\t\t<span class=\"btn-text\">{{ itemText || '选择地区' }}</span>\r\n\t\t\t\t<v-icon v-if=\"itemText\" size=\"small\" @click.stop=\"textClear\" class=\"ml-2\">mdi-close-circle</v-icon>\r\n\t\t\t</v-btn>\r\n\t\t</template>\r\n\t\t<v-card elevation=\"0\" style=\"width: 350px;\">\r\n\t\t\t<p class=\"pt-3 px-3\">\r\n\t\t\t\t<v-icon color=\"primary\" class=\"mr-1\" size=\"20\">mdi-map-marker-radius</v-icon>\r\n\t\t\t\t<span v-for=\"link in entity\" :key=\"link.areaCode\" class=\"link text-body-2 text-primary\">{{ link.areaName }}</span>\r\n\t\t\t</p>\r\n\t\t\t<v-sheet class=\"rounded-lg mx-3 mt-2\" color=\"#b1b1b117\">\r\n\t\t\t\t<v-tabs v-model=\"tab\" @update:model-value=\"tabArea\" class=\"pt-2 px-1\">\r\n\t\t\t\t\t<v-tab\r\n\t\t\t\t\t\tv-for=\"(item, index) in tabItems\"\r\n\t\t\t\t\t\t:key=\"index\"\r\n\t\t\t\t\t\tclass=\"mx-1\"\r\n\t\t\t\t\t\t:style=\"tab == index && 'color:white;opacity:1'\"\r\n\t\t\t\t\t\t:disabled=\"areaStorage.length <= index + 1\"\r\n\t\t\t\t\t\tv-show=\"minArea ? minArea >= item.leve : true\"\r\n\t\t\t\t\t>{{ item.text }}</v-tab>\r\n\t\t\t\t</v-tabs>\r\n\t\t\t\t<v-sheet\r\n\t\t\t\t\tv-show=\"index == tab\"\r\n\t\t\t\t\tv-for=\"(item, index) in tabItems\"\r\n\t\t\t\t\t:key=\"index\"\r\n\t\t\t\t\tclass=\"px-3 py-1\"\r\n\t\t\t\t\tmin-height=\"100\"\r\n\t\t\t\t\tcolor=\"rgba(0,0,0,0)\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<v-chip-group v-model=\"current\" selected-class=\"chipActive\" column>\r\n\t\t\t\t\t\t<v-chip\r\n\t\t\t\t\t\t\tv-for=\"area in areaItems\"\r\n\t\t\t\t\t\t\t:key=\"area.id\"\r\n\t\t\t\t\t\t\t@click=\"areaChange(area, index)\"\r\n\t\t\t\t\t\t\tclass=\"rounded\"\r\n\t\t\t\t\t\t\t:class=\"area.areaCode == user.areacode && 'active'\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{{ area.areaName }}\r\n\t\t\t\t\t\t</v-chip>\r\n\t\t\t\t\t</v-chip-group>\r\n\t\t\t\t</v-sheet>\r\n\t\t\t</v-sheet>\r\n\r\n\t\t\t<v-card-actions class=\"pr-0 py-3\">\r\n\t\t\t\t<v-spacer />\r\n\t\t\t\t<v-btn @click=\"close\" elevation=\"0\" size=\"small\"><v-icon class=\"pt-1 pr-1\">mdi-progress-close</v-icon> 取消</v-btn>\r\n\t\t\t\t<v-btn @click=\"save\" class=\"text-white mr-3\" color=\"primary\" elevation=\"0\" size=\"small\"><v-icon class=\"pt-1 pr-1\">mdi-progress-check</v-icon> 确定</v-btn>\r\n\t\t\t</v-card-actions>\r\n\t\t</v-card>\r\n\t</v-menu>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, watch, onMounted, getCurrentInstance, nextTick } from 'vue';\r\n\r\nconst props = defineProps({\r\n\tmodelValue: {\r\n\t\ttype: String,\r\n\t\tdefault: null,\r\n\t},\r\n\tminArea: {\r\n\t\ttype: Number,\r\n\t\tdefault: null,\r\n\t},\r\n\tareaNode: {\r\n\t\ttype: Number,\r\n\t\tdefault: null,\r\n\t},\r\n});\r\n\r\nconst emit = defineEmits(['update:modelValue', 'change']);\r\n\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst menu = ref(false);\r\nconst user = ref({});\r\nconst tab = ref(0);\r\nconst tabItems = ref([]);\r\nconst areaStorage = ref([]); //存储个级别地区数据\r\nconst areaItems = ref([]); //当前选择地区的所有列\r\nconst entity = ref([]); //存储选中的数据\r\nconst current = ref(null); //回显值选中\r\nconst itemValue = ref(\"\"); //传值:最终选择值\r\nconst itemText = ref(\"\"); //最终选择值\r\n\r\n// 值回显\r\nconst view = (code) => {\r\n\tproxy.$vtk.request.getForm(`/dict/area/show/${code}`).then((res) => {\r\n\t\tlet province = res.data.province ? `${res.data.province}` : \"\";\r\n\t\tlet city = res.data.city ? `/${res.data.city}` : \"\";\r\n\t\tlet district = res.data.district ? `/${res.data.district}` : \"\";\r\n\t\tlet town = res.data.town ? `/${res.data.town}` : \"\";\r\n\t\tlet village = res.data.village ? `/${res.data.village}` : \"\";\r\n\t\titemText.value = `${province}${city}${district}${town}${village}`;\r\n\t\tif (props.areaNode && props.areaNode > 0) {\r\n\t\t\titemText.value = itemText.value.split(\"/\").slice(-props.areaNode).join(\"/\");\r\n\t\t}\r\n\t});\r\n};\r\n\r\n// 切换Tab地区级别\r\nconst tabArea = (index) => {\r\n\tareaItems.value = [...areaStorage.value[index]];\r\n\tif (index < entity.value.length) {\r\n\t\tcurrent.value = areaItems.value.findIndex((e) => e.areaCode == entity.value[index].areaCode);\r\n\t} else {\r\n\t\tcurrent.value = null;\r\n\t}\r\n};\r\n\r\n//选择地区\r\nconst areaChange = (item, index) => {\r\n\tentity.value = entity.value.slice(0, index);\r\n\tentity.value.push(item);\r\n\tareaStorage.value = areaStorage.value.slice(0, index + 1);\r\n\tif (tabItems.value.length > tab.value + 1 && (props.minArea ? props.minArea > item.areaCode.length : true)) {\r\n\t\tgetTree(item.areaCode);\r\n\t\ttab.value++;\r\n\t}\r\n};\r\n\r\n// 加载下级地区\r\nconst getTree = (code) => {\r\n\tproxy.$vtk.request.getForm(`/dict/area/next/${code}`).then((res) => {\r\n\t\tareaItems.value = res.data;\r\n\t\tareaStorage.value.push(res.data);\r\n\t\tcurrent.value = null;\r\n\t\tnextTick(); //Vue 3中替代$forceUpdate\r\n\t});\r\n};\r\n\r\n// 加载第一个地区,用户所在地区\r\nconst getAreaName = (code) => {\r\n\tentity.value = [];\r\n\ttabItems.value = [\r\n\t\t{ text: \"省级\", leve: \"2\" },\r\n\t\t{ text: \"市级\", leve: \"4\" },\r\n\t\t{ text: \"区县\", leve: \"6\" },\r\n\t\t{ text: \"街镇\", leve: \"9\" },\r\n\t\t{ text: \"村社\", leve: \"12\" },\r\n\t].filter((e) => e.leve >= user.value.areacode.length);\r\n\tareaStorage.value = [];\r\n\r\n\tproxy.$vtk.request.getForm(`/dict/area/show/${code}`).then((res) => {\r\n\t\tareaItems.value = [{ areaName: res.data.areaName, areaCode: res.data.areaCode }];\r\n\t\tareaStorage.value.push(areaItems.value);\r\n\t\tentity.value.push(areaItems.value[0]);\r\n\t});\r\n};\r\n\r\n//确认保存\r\nconst save = () => {\r\n\tlet text = [];\r\n\tlet val = [];\r\n\tentity.value.forEach((e) => {\r\n\t\ttext.push(e.areaName);\r\n\t\tval.push(e.areaCode);\r\n\t\titemValue.value = e.areaCode;\r\n\t});\r\n\tif (props.areaNode && props.areaNode > 0) {\r\n\t\ttext = text.slice(-props.areaNode);\r\n\t}\r\n\titemText.value = text.join().replace(/,/g, \"/\");\r\n\temit(\"update:modelValue\", itemValue.value);\r\n\temit(\"change\");\r\n\tclose();\r\n};\r\n\r\n// 清空\r\nconst textClear = () => {\r\n\ttab.value = 0;\r\n\tgetAreaName(user.value.areacode);\r\n\titemValue.value = user.value.areacode;\r\n\temit(\"update:modelValue\", itemValue.value);\r\n\temit(\"change\");\r\n};\r\n\r\n// 关闭弹窗\r\nconst close = () => {\r\n\tmenu.value = false;\r\n};\r\n\r\n// Watch modelValue\r\nwatch(() => props.modelValue, (newVal, oldVal) => {\r\n\tif (newVal && newVal != oldVal) {\r\n\t\tview(newVal);\r\n\t}\r\n});\r\n\r\n// 组件挂载时执行\r\nonMounted(() => {\r\n\tuser.value = proxy.$vtk.storage.get(\"_mis_acis_users\") && JSON.parse(proxy.$vtk.storage.get(\"_mis_acis_users\"));\r\n\tgetAreaName(user.value.areacode);\r\n\tif (props.modelValue) {\r\n\t\tview(props.modelValue);\r\n\t}\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n// 圆形按钮样式\r\n.area-select-btn {\r\n\tborder-radius: 20px !important;\r\n\tpadding: 6px 20px !important;\r\n\tmin-width: 120px;\r\n\theight: 36px !important;\r\n\ttext-transform: none;\r\n\tletter-spacing: normal;\r\n\r\n\t.btn-text {\r\n\t\tfont-size: 14px;\r\n\t\tcolor: inherit;\r\n\t}\r\n\r\n\t&:hover {\r\n\t\tbackground-color: rgba(var(--v-theme-primary), 0.08);\r\n\t}\r\n}\r\n:deep(.v-tab__slider) {\r\n\theight: 0px !important;\r\n}\r\n\r\n.link::after {\r\n\tcontent: \" / \";\r\n\tfont-size: 14px;\r\n\tcolor: #999;\r\n}\r\n.link:last-of-type::after {\r\n\tcontent: \"\";\r\n}\r\n:deep(.v-chip:not(.v-chip--selected)) {\r\n\tbackground: #e0e0e000;\r\n}\r\n// Vuetify 3 tabs container styling\r\n:deep(.v-tabs) {\r\n\theight: 40px;\r\n}\r\n// Tab button styling\r\n:deep(.v-tab) {\r\n\tmin-width: 90px;\r\n\theight: 32px !important;\r\n\tborder-radius: 6px !important;\r\n\tcolor: rgba(0, 0, 0, .6);\r\n\ttransition: all 0.3s ease;\r\n\tz-index: 1;\r\n}\r\n// Active/selected tab styling\r\n:deep(.v-tab--selected) {\r\n\tbackground-color: rgb(var(--v-theme-primary));\r\n\tcolor: white !important;\r\n\topacity: 1;\r\n}\r\n// Hover effect\r\n:deep(.v-tab:hover) {\r\n\tbackground-color: rgba(var(--v-theme-primary), 0.9);\r\n\tcolor: white;\r\n}\r\n.tabActive {\r\n\tcolor: #fff;\r\n}\r\n.chipActive {\r\n\tcolor: #0095ff !important;\r\n\tbackground-color: #008eff05 !important;\r\n}\r\n.active {\r\n\tcolor: #0095ff !important;\r\n\tbackground-color: #008eff20 !important;\r\n}\r\n:deep(.v-slide-group__next),\r\n:deep(.v-slide-group__prev) {\r\n\tdisplay: none;\r\n}\r\n</style>\r\n","<template>\n <div class=\"vtk-breadcrumb-wrapper d-flex align-center justify-space-between\">\n <!-- 左侧面包屑 -->\n <v-breadcrumbs :items=\"breadcrumbItems\" class=\"pa-0\">\n <template v-slot:divider>\n <v-icon>mdi-chevron-right</v-icon>\n </template>\n <template v-slot:item=\"{ item }\">\n <v-breadcrumbs-item\n :title=\"item.title\"\n :to=\"item.to\"\n :disabled=\"item.disabled\"\n :class=\"{ 'text-primary': !item.disabled }\"\n >\n {{ item.title }}\n </v-breadcrumbs-item>\n </template>\n </v-breadcrumbs>\n\n <!-- 右侧返回按钮 -->\n <v-btn\n v-if=\"showBack\"\n variant=\"text\"\n color=\"primary\"\n prepend-icon=\"mdi-arrow-left\"\n @click=\"handleBack\"\n style=\"height: 36px;\"\n >\n {{ backText }}\n </v-btn>\n </div>\n</template>\n\n<script setup>\nimport { computed, inject, getCurrentInstance } from 'vue'\n\nconst props = defineProps({\n // 面包屑项目数组\n items: {\n type: Array,\n default: () => []\n },\n // 是否显示返回按钮\n showBack: {\n type: Boolean,\n default: true\n },\n // 返回按钮文字\n backText: {\n type: String,\n default: '返回'\n },\n // 自定义返回路径,不传则返回上一级\n backTo: {\n type: [String, Object],\n default: null\n }\n})\n\nconst emit = defineEmits(['back'])\n\n// 使用inject安全地获取router和route\nconst router = inject('router', null)\nconst route = inject('route', null)\n\n// 处理面包屑数据\nconst breadcrumbItems = computed(() => {\n if (props.items && props.items.length > 0) {\n return props.items.map((item, index) => ({\n title: item.title || item.text || item.name,\n to: item.to || item.path || item.href,\n disabled: item.disabled !== undefined ? item.disabled : index === props.items.length - 1\n }))\n }\n\n // 如果route不可用,返回空数组\n if (!route) {\n return []\n }\n\n // 如果没有传入items,尝试从路由meta中获取\n const matched = route.matched?.filter(r => r.meta && r.meta.breadcrumb) || []\n if (matched.length > 0) {\n return matched.map((r, index) => ({\n title: r.meta.breadcrumb,\n to: r.path,\n disabled: index === matched.length - 1\n }))\n }\n\n // 默认返回当前路由路径生成的面包屑\n const pathArray = route.path?.split('/').filter(p => p) || []\n return pathArray.map((path, index) => {\n const routePath = '/' + pathArray.slice(0, index + 1).join('/')\n return {\n title: path.charAt(0).toUpperCase() + path.slice(1),\n to: routePath,\n disabled: index === pathArray.length - 1\n }\n })\n})\n\n// 处理返回按钮点击\nconst handleBack = () => {\n // 触发back事件\n emit('back')\n\n // 如果router不可用,仅触发事件\n if (!router) {\n return\n }\n\n // 如果传入了backTo参数,跳转到指定路径\n if (props.backTo) {\n if (typeof props.backTo === 'string') {\n router.push(props.backTo)\n } else {\n router.push(props.backTo)\n }\n } else {\n // 默认返回上一级\n router.back()\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.vtk-breadcrumb-wrapper {\n width: 100%;\n padding: 12px 0;\n\n :deep(.v-breadcrumbs) {\n flex-grow: 1;\n height: 36px;\n }\n\n :deep(.v-breadcrumbs-item) {\n font-size: 14px;\n }\n\n :deep(.v-breadcrumbs-divider) {\n padding: 0 8px;\n }\n\n :deep(.v-breadcrumbs-item--disabled) {\n opacity: 0.6;\n }\n}\n</style>\n","<template>\n <VInput \n v-bind=\"inputAttrs\" \n :model-value=\"inputValue\"\n >\n <div class=\"checkGroup\" :class=\"inline ? 'd-flex flex-wrap align-top' : 'd-inline-block'\">\n <VCheckbox\n v-for=\"item in items\"\n hide-details\n :key=\"item.id || item.code\"\n :label=\"item.codeValue\"\n :value=\"item.code\"\n v-model=\"localValue\"\n v-bind=\"checkboxAttrs\"\n :class=\"inline ? 'mr-4' : ''\"\n />\n </div>\n </VInput>\n</template>\n\n<script setup>\nimport { ref, onMounted, useAttrs, computed, watch } from 'vue';\nimport Request from '../../commons/request';\n\n// 定义组件名称\ndefineOptions({\n name: \"VtkCheckbox\",\n inheritAttrs: false,\n});\n\n// 定义 props\nconst props = defineProps({\n /**\n * 字典来源:\n * - 若为静态数据,格式如:\"0:否/1:是\"\n * - 若为字典键,格式如:\"DISABLE_TYPE\"\n */\n list: {\n type: String,\n required: true,\n },\n /**\n * 是否横向排列\n */\n inline: {\n type: Boolean,\n default: false,\n },\n /**\n * 绑定值\n */\n modelValue: {\n type: [Array, String],\n default: () => []\n }\n});\n\n// 定义 emits\nconst emit = defineEmits(['update:modelValue']);\n\n// 本地选中值\nconst localValue = ref([]);\n\n// 防止递归更新的标志位\nconst isUpdatingLocal = ref(false);\nconst isUpdatingModel = ref(false);\n\n// 同步外部 modelValue 到本地值\nwatch(() => props.modelValue, (newVal) => {\n if (isUpdatingModel.value) {\n isUpdatingModel.value = false;\n return;\n }\n \n isUpdatingLocal.value = true;\n if (Array.isArray(newVal)) {\n localValue.value = [...newVal];\n } else if (typeof newVal === 'string') {\n localValue.value = newVal ? [newVal] : [];\n } else {\n localValue.value = [];\n }\n}, { immediate: true });\n\n// 同步本地值到外部 modelValue\nwatch(localValue, (newVal) => {\n if (isUpdatingLocal.value) {\n isUpdatingLocal.value = false;\n return;\n }\n \n isUpdatingModel.value = true;\n emit('update:modelValue', newVal);\n}, { deep: true });\n\n// 获取透传属性\nconst attrs = useAttrs();\n\n// 分离传递给 input 和传递给 checkbox 的属性\nconst inputAttrs = computed(() => {\n const { list, inline, modelValue, ...rest } = attrs;\n return rest;\n});\n\nconst checkboxAttrs = computed(() => {\n // 移除表单验证相关属性,避免重复应用\n const { \n list, \n inline, \n modelValue,\n error, \n 'error-messages': errorMessages, \n rules, \n hint, \n 'persistent-hint': persistentHint,\n ...rest \n } = attrs;\n return rest;\n});\n\n// 为 v-input 提供一个值\nconst inputValue = computed(() => {\n return localValue.value && localValue.value.length > 0 ? localValue.value : null;\n});\n\n// 响应式数据\nconst items = ref([]);\n\n// 处理静态数据(如 \"0:否/1:是\")\nconst statc = () => {\n props.list.split('/').forEach(it => {\n const [code, codeValue] = it.split(':');\n items.value.push({ code, codeValue });\n });\n};\n\n// 请求远程字典数据\nconst miscs = async () => {\n try {\n const res = await Request.getForm(`dict/misc/list/${props.list}`);\n items.value = res.data || [];\n } catch (error) {\n console.error('[VtkCheckbox] Failed to load dictionary:', error);\n items.value = [];\n }\n};\n\n// 组件挂载时初始化数据\nonMounted(() => {\n if (props.list.includes(':')) {\n statc();\n } else {\n miscs();\n }\n});\n</script>\n\n<style scoped>\n:deep(.v-checkbox .v-selection-control) {\n margin: 0;\n padding: 0;\n min-height: 32px;\n}\n\n:deep(.v-input__details) {\n padding-inline: 16px;\n}\n</style>","<!-- \r\n\r\n// 基础用法\r\n <VtkCount :start=\"0\" :end=\"12345\" :duration=\"3000\" suffix=\"次\" />\r\n \r\n//带前缀和分隔符\r\n <VtkCount \r\n :start=\"0\" \r\n :end=\"999999\" \r\n :duration=\"2000\" \r\n prefix=\"¥\" \r\n suffix=\"元\" \r\n :separator=\"true\" \r\n />\r\n \r\n//手动控制\r\n <VtkCount \r\n ref=\"countRef\" \r\n :start=\"0\" \r\n :end=\"100\" \r\n :autoplay=\"false\" \r\n @complete=\"onComplete\"\r\n />\r\n <VBtn @click=\"startCount\">开始计数</VBtn>\r\n -->\r\n\r\n<template>\r\n <div class=\"vtk-count\" :class=\"containerClass\">\r\n <div class=\"count-display\" :style=\"{ color: color }\">\r\n <!-- 前缀 -->\r\n <span v-if=\"prefix\" class=\"prefix\">{{ prefix }}</span>\r\n \r\n <!-- 数字容器 -->\r\n <div class=\"digits-container\">\r\n <div \r\n v-for=\"(digitChar, index) in maxDigitString\" \r\n :key=\"`digit-${index}-${digitKey}`\"\r\n class=\"digit-wrapper\"\r\n :class=\"{ 'digit-separator': isNaN(digitChar) }\"\r\n >\r\n <div \r\n v-if=\"!isNaN(digitChar)\" \r\n class=\"digit-scroll\"\r\n >\r\n <div \r\n v-for=\"n in 10\" \r\n :key=\"n\" \r\n class=\"digit-item\"\r\n :style=\"getDigitStyle(getCurrentDigit(index), n-1)\"\r\n >\r\n {{ n-1 }}\r\n </div>\r\n </div>\r\n <div v-else class=\"separator\">{{ digitChar }}</div>\r\n </div>\r\n </div>\r\n \r\n <!-- 后缀 -->\r\n <span v-if=\"suffix\" class=\"suffix\">{{ suffix }}</span>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, computed, onMounted, watch, nextTick } from 'vue'\r\n\r\n// 定义组件名称\r\ndefineOptions({\r\n name: \"VtkCount\",\r\n inheritAttrs: false,\r\n});\r\n\r\n// 定义 props\r\nconst props = defineProps({\r\n // 初始值\r\n start: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 目标值\r\n end: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 动画持续时间(毫秒)\r\n duration: {\r\n type: Number,\r\n default: 2000\r\n },\r\n // 是否自动开始动画\r\n autoplay: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 数字前缀\r\n prefix: {\r\n type: String,\r\n default: ''\r\n },\r\n // 数字后缀\r\n suffix: {\r\n type: String,\r\n default: ''\r\n },\r\n // 容器自定义类名\r\n containerClass: {\r\n type: String,\r\n default: ''\r\n },\r\n // 是否使用分隔符(千分位)\r\n separator: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 小数位数\r\n decimals: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 文字颜色\r\n color: {\r\n type: String,\r\n default: '#1976d2'\r\n }\r\n})\r\n\r\n// 定义 emits\r\nconst emit = defineEmits(['complete'])\r\n\r\n// 当前显示的数值\r\nconst currentNumber = ref(props.start)\r\n\r\n// 当前每个位置的数字值\r\nconst currentDigits = ref([])\r\n\r\n// 用于强制重新渲染的key\r\nconst digitKey = ref(0)\r\n\r\n// 是否正在动画中\r\nconst isAnimating = ref(false)\r\n\r\n// 格式化数字(处理小数和分隔符)\r\nconst formatNumber = (num) => {\r\n let result = num.toFixed(props.decimals)\r\n if (props.separator && props.decimals === 0) {\r\n result = result.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\r\n }\r\n return result\r\n}\r\n\r\n// 获取目标数字字符串\r\nconst targetNumberString = computed(() => {\r\n return formatNumber(props.end)\r\n})\r\n\r\n// 获取起始数字字符串\r\nconst startNumberString = computed(() => {\r\n return formatNumber(props.start)\r\n})\r\n\r\n// 获取最大位数的字符串(用于保持DOM结构稳定)\r\nconst maxDigitString = computed(() => {\r\n const target = targetNumberString.value\r\n const start = startNumberString.value\r\n return target.length >= start.length ? target : start\r\n})\r\n\r\n// 获取当前指定位置的数字\r\nconst getCurrentDigit = (index) => {\r\n if (index < currentDigits.value.length) {\r\n return currentDigits.value[index]\r\n }\r\n return '0'\r\n}\r\n\r\n// 初始化数字数组\r\nconst initDigitsArray = () => {\r\n const targetStr = targetNumberString.value\r\n const startStr = startNumberString.value\r\n \r\n // 初始化currentDigits数组,确保长度与maxDigitString一致\r\n currentDigits.value = maxDigitString.value.split('').map((char, index) => {\r\n if (isNaN(char)) {\r\n return char // 分隔符保持原样\r\n }\r\n \r\n // 从起始字符串对应位置获取数字\r\n if (index < startStr.length) {\r\n const startChar = startStr[index]\r\n return isNaN(startChar) ? '0' : startChar\r\n }\r\n return '0'\r\n })\r\n}\r\n\r\n// 获取数字样式\r\nconst getDigitStyle = (currentValue, digitValue) => {\r\n // 如果是分隔符,直接返回\r\n if (isNaN(currentValue) || isNaN(digitValue)) {\r\n return {\r\n transform: 'translateY(0)'\r\n }\r\n }\r\n \r\n const current = parseInt(currentValue) || 0\r\n const target = digitValue\r\n const offset = target - current\r\n \r\n // 处理循环滚动(9->0 或 0->9)\r\n let translateY\r\n if (offset > 5) {\r\n // 向下滚动(如 9->0)\r\n translateY = -(10 - offset) * 100\r\n } else if (offset < -5) {\r\n // 向上滚动(如 0->9)\r\n translateY = (10 + offset) * 100\r\n } else {\r\n translateY = -offset * 100\r\n }\r\n \r\n return {\r\n transform: `translateY(${translateY}%)`,\r\n transition: isAnimating.value ? 'transform 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94)' : 'none',\r\n color: props.color\r\n }\r\n}\r\n\r\n// 开始数字动画\r\nconst startAnimation = () => {\r\n if (isAnimating.value) return\r\n \r\n isAnimating.value = true\r\n const startTime = performance.now()\r\n const startValue = props.start\r\n const endValue = props.end\r\n const diff = endValue - startValue\r\n \r\n // 初始化数字数组\r\n initDigitsArray()\r\n \r\n const animate = (currentTime) => {\r\n const elapsed = currentTime - startTime\r\n const progress = Math.min(elapsed / props.duration, 1)\r\n \r\n // 使用缓动函数使动画更自然\r\n const easeOutQuart = 1 - Math.pow(1 - progress, 4)\r\n currentNumber.value = startValue + diff * easeOutQuart\r\n \r\n // 更新每个数字位的当前值\r\n updateDigitArray(currentNumber.value)\r\n \r\n if (progress < 1) {\r\n requestAnimationFrame(animate)\r\n } else {\r\n currentNumber.value = endValue\r\n // 确保最终值准确\r\n updateDigitArray(endValue)\r\n isAnimating.value = false\r\n emit('complete')\r\n }\r\n }\r\n \r\n requestAnimationFrame(animate)\r\n}\r\n\r\n// 更新数字数组\r\nconst updateDigitArray = (value) => {\r\n const valueStr = formatNumber(value)\r\n const maxStr = maxDigitString.value\r\n \r\n // 保持数组长度不变,只更新值\r\n for (let i = 0; i < maxStr.length; i++) {\r\n if (i < valueStr.length) {\r\n currentDigits.value[i] = valueStr[i]\r\n } else {\r\n // 超出部分保持为'0'或分隔符\r\n currentDigits.value[i] = isNaN(maxStr[i]) ? maxStr[i] : '0'\r\n }\r\n }\r\n}\r\n\r\n// 监听 end 值变化,重新开始动画\r\nwatch(() => props.end, (newVal, oldVal) => {\r\n if (newVal !== oldVal) {\r\n // 当位数可能发生变化时,更新key强制重新渲染\r\n const newStr = formatNumber(newVal)\r\n const oldStr = formatNumber(oldVal)\r\n if (newStr.length !== oldStr.length) {\r\n digitKey.value += 1\r\n nextTick(() => {\r\n startAnimation()\r\n })\r\n } else {\r\n startAnimation()\r\n }\r\n }\r\n})\r\n\r\n// 组件挂载时开始动画\r\nonMounted(() => {\r\n if (props.autoplay) {\r\n // 检查初始值和目标值位数是否不同,如果不同则更新key\r\n const startStr = startNumberString.value\r\n const endStr = targetNumberString.value\r\n if (startStr.length !== endStr.length) {\r\n digitKey.value += 1\r\n }\r\n \r\n nextTick(() => {\r\n startAnimation()\r\n })\r\n }\r\n})\r\n\r\n// 提供外部调用方法\r\ndefineExpose({\r\n startAnimation\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.vtk-count {\r\n display: inline-block;\r\n}\r\n\r\n.count-display {\r\n display: flex;\r\n align-items: center;\r\n font-family: 'Roboto Mono', monospace;\r\n font-size: 24px;\r\n font-weight: bold;\r\n}\r\n\r\n.digits-container {\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n.digit-wrapper {\r\n position: relative;\r\n width: 1em;\r\n height: 1em;\r\n overflow: hidden;\r\n text-align: center;\r\n margin: 0 1px;\r\n}\r\n\r\n.digit-wrapper.digit-separator {\r\n width: auto;\r\n animation: none;\r\n}\r\n\r\n.digit-scroll {\r\n position: relative;\r\n height: 100%;\r\n}\r\n\r\n.digit-item {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n\r\n.separator {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: 100%;\r\n font-weight: normal;\r\n}\r\n\r\n.prefix, .suffix {\r\n font-size: 0.8em;\r\n align-self: flex-end;\r\n margin-bottom: 0.1em;\r\n}\r\n\r\n.prefix {\r\n margin-right: 4px;\r\n}\r\n\r\n.suffix {\r\n margin-left: 4px;\r\n}\r\n\r\n/* 响应式设计 */\r\n@media (max-width: 768px) {\r\n .count-display {\r\n font-size: 20px;\r\n }\r\n}\r\n\r\n@media (max-width: 480px) {\r\n .count-display {\r\n font-size: 18px;\r\n }\r\n}\r\n</style>","<template>\r\n <div class=\"vtk-date-range-picker\">\r\n <VMenu\r\n v-model=\"menu\"\r\n :close-on-content-click=\"false\"\r\n transition=\"scale-transition\"\r\n offset-y\r\n min-width=\"auto\"\r\n eager\r\n >\r\n <template #activator=\"{ props: activatorProps }\">\r\n <VTextField\r\n v-bind=\"{ ...activatorProps, ...textFieldProps }\"\r\n v-model=\"displayValue\"\r\n :placeholder=\"placeholder\"\r\n :disabled=\"disabled\"\r\n readonly\r\n clearable\r\n density=\"compact\"\r\n variant=\"outlined\"\r\n @click:clear=\"clearValue\"\r\n >\r\n <template #prepend-inner>\r\n <VIcon size=\"small\">mdi-calendar</VIcon>\r\n </template>\r\n </VTextField>\r\n </template>\r\n \r\n <VCard style=\"width: 650px;\">\r\n <VCardText class=\"pa-0\">\r\n <div class=\"date-picker-container\">\r\n <VDatePicker\r\n v-model=\"startDateRange\"\r\n hide-header\r\n :min=\"minDate\"\r\n :max=\"maxDate\"\r\n :show-current=\"showCurrent\"\r\n @update:model-value=\"onStartDateChange\"\r\n class=\"date-picker-item\"\r\n />\r\n <VDatePicker\r\n v-model=\"endDateRange\"\r\n hide-header\r\n :min=\"minDate\"\r\n :max=\"maxDate\"\r\n :show-current=\"showCurrent\"\r\n @update:model-value=\"onEndDateChange\"\r\n class=\"date-picker-item\"\r\n />\r\n </div>\r\n </VCardText>\r\n \r\n <VDivider></VDivider>\r\n \r\n <VCardActions>\r\n <VSpacer></VSpacer>\r\n <VBtn text @click=\"cancel\">取消</VBtn>\r\n <VBtn color=\"primary\" variant=\"tonal\" @click=\"confirm\">确定</VBtn>\r\n </VCardActions>\r\n </VCard>\r\n </VMenu>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, computed, watch, useAttrs } from 'vue';\r\n\r\n// 定义组件名称\r\ndefineOptions({\r\n name: \"VtkDatePicker\",\r\n inheritAttrs: false,\r\n});\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n // v-model绑定值\r\n modelValue: {\r\n type: [Array, String],\r\n default: () => []\r\n },\r\n // 占位符\r\n placeholder: {\r\n type: String,\r\n default: '请选择日期范围'\r\n },\r\n // 禁用状态\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 最小日期\r\n min: {\r\n type: String,\r\n default: undefined\r\n },\r\n // 最大日期\r\n max: {\r\n type: String,\r\n default: undefined\r\n },\r\n // 是否显示当前日期\r\n showCurrent: {\r\n type: [Boolean, String],\r\n default: true\r\n },\r\n // 显示格式\r\n format: {\r\n type: String,\r\n default: 'YYYY-MM-DD'\r\n },\r\n // 分隔符\r\n separator: {\r\n type: String,\r\n default: ' 至 '\r\n }\r\n});\r\n\r\n// 定义emit事件\r\nconst emit = defineEmits(['update:modelValue', 'change']);\r\n\r\n// 获取透传属性\r\nconst attrs = useAttrs();\r\n\r\n// 菜单显示控制\r\nconst menu = ref(false);\r\n\r\n// 日期范围值\r\nconst dateRange = ref([]);\r\n\r\n// 为了横向排列,需要分别管理开始和结束日期选择器的值\r\nconst startDateRange = ref(null);\r\nconst endDateRange = ref(null);\r\n\r\n\r\n// 显示值\r\nconst displayValue = computed(() => {\r\n if (!dateRange.value || dateRange.value.length === 0) {\r\n return '';\r\n }\r\n \r\n if (dateRange.value.length === 1) {\r\n return formatDate(dateRange.value[0]);\r\n }\r\n \r\n return `${formatDate(dateRange.value[0])}${props.separator}${formatDate(dateRange.value[1])}`;\r\n});\r\n\r\n// 文本框属性\r\nconst textFieldProps = computed(() => {\r\n // 排除我们自己使用的属性\r\n const { \r\n modelValue, \r\n placeholder, \r\n disabled, \r\n min, \r\n max, \r\n showCurrent, \r\n format,\r\n separator,\r\n ...rest \r\n } = attrs;\r\n \r\n return rest;\r\n});\r\n\r\n// 格式化日期\r\nconst formatDate = (date) => {\r\n if (!date) return '';\r\n \r\n // 如果是字符串直接返回\r\n if (typeof date === 'string') {\r\n return date;\r\n }\r\n \r\n // 如果是 Date 对象\r\n if (date instanceof Date) {\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n return `${year}-${month}-${day}`;\r\n }\r\n \r\n return date;\r\n};\r\n\r\n// 最小日期\r\nconst minDate = computed(() => props.min);\r\n\r\n// 最大日期\r\nconst maxDate = computed(() => props.max);\r\n\r\n// 监听外部modelValue变化\r\nwatch(\r\n () => props.modelValue,\r\n (newValue) => {\r\n if (Array.isArray(newValue) && newValue.length > 0) {\r\n dateRange.value = [...newValue];\r\n // 同步到单独的日期选择器\r\n if (newValue[0]) startDateRange.value = newValue[0];\r\n if (newValue[1]) endDateRange.value = newValue[1];\r\n } else if (typeof newValue === 'string' && newValue) {\r\n // 处理字符串形式的日期范围,如 \"2023-01-01 至 2023-01-31\"\r\n const dates = newValue.split(props.separator);\r\n if (dates.length === 2) {\r\n dateRange.value = [dates[0].trim(), dates[1].trim()];\r\n startDateRange.value = dates[0].trim();\r\n endDateRange.value = dates[1].trim();\r\n } else {\r\n dateRange.value = [];\r\n startDateRange.value = null;\r\n endDateRange.value = null;\r\n }\r\n } else {\r\n dateRange.value = [];\r\n startDateRange.value = null;\r\n endDateRange.value = null;\r\n }\r\n },\r\n { immediate: true }\r\n);\r\n\r\n\r\n// 开始日期变化处理\r\nconst onStartDateChange = (value) => {\r\n // 更新日期范围的第一个值\r\n if (value) {\r\n dateRange.value = [value, dateRange.value[1] || null];\r\n } else {\r\n // 如果开始日期被清除,清除整个范围或只清除开始日期\r\n if (dateRange.value.length > 0) {\r\n dateRange.value = [null, dateRange.value[1] || null];\r\n }\r\n }\r\n};\r\n\r\n// 结束日期变化处理\r\nconst onEndDateChange = (value) => {\r\n // 更新日期范围的第二个值\r\n if (value) {\r\n dateRange.value = [dateRange.value[0] || null, value];\r\n } else {\r\n // 如果结束日期被清除,只清除结束日期\r\n if (dateRange.value.length > 1) {\r\n dateRange.value = [dateRange.value[0] || null, null];\r\n }\r\n }\r\n};\r\n\r\n// 清除值\r\nconst clearValue = () => {\r\n dateRange.value = [];\r\n startDateRange.value = null;\r\n endDateRange.value = null;\r\n emit('update:modelValue', []);\r\n emit('change', []);\r\n menu.value = false;\r\n};\r\n\r\n// 取消\r\nconst cancel = () => {\r\n // 恢复到原始值\r\n if (Array.isArray(props.modelValue)) {\r\n dateRange.value = [...props.modelValue];\r\n if (props.modelValue[0]) startDateRange.value = props.modelValue[0];\r\n if (props.modelValue[1]) endDateRange.value = props.modelValue[1];\r\n } else {\r\n dateRange.value = [];\r\n startDateRange.value = null;\r\n endDateRange.value = null;\r\n }\r\n menu.value = false;\r\n};\r\n\r\n// 确认\r\nconst confirm = () => {\r\n // 确保日期按顺序排列\r\n let sortedRange = [...dateRange.value].filter(date => date !== null);\r\n if (sortedRange.length === 2) {\r\n const date1 = new Date(sortedRange[0]);\r\n const date2 = new Date(sortedRange[1]);\r\n if (date1 > date2) {\r\n sortedRange = [sortedRange[1], sortedRange[0]];\r\n }\r\n } else if (sortedRange.length === 1) {\r\n // 如果只有一个日期,复制为范围\r\n sortedRange = [sortedRange[0], sortedRange[0]];\r\n }\r\n \r\n emit('update:modelValue', sortedRange);\r\n emit('change', sortedRange);\r\n menu.value = false;\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.vtk-date-range-picker {\r\n width: 100%;\r\n}\r\n\r\n.date-picker-container {\r\n display: flex;\r\n flex-direction: row;\r\n gap: 0;\r\n}\r\n\r\n.date-picker-item {\r\n flex: 1;\r\n max-width: 50%;\r\n}\r\n\r\n.date-picker-item:first-child {\r\n border-right: 1px solid rgba(0, 0, 0, 0.12);\r\n}\r\n\r\n:deep(.v-picker) {\r\n border-radius: 0;\r\n}\r\n\r\n:deep(.v-date-picker-month__day--adjacent) {\r\n opacity: 0.5;\r\n}\r\n\r\n:deep(.v-date-picker-title) {\r\n display: none;\r\n}\r\n</style>","<script setup>\r\nimport { ref, computed, reactive, onMounted, getCurrentInstance, watch, nextTick } from \"vue\";\r\nconst { proxy } = getCurrentInstance();\r\nconst user = JSON.parse(proxy.$vtk.storage.get(\"_mis_acis_users\"));\r\nconst pause = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\n// 定义 props - 控制是否支持多选\r\nconst props = defineProps({\r\n multiple: {\r\n type: Boolean,\r\n default: false // 默认单选\r\n }\r\n});\r\n\r\n// 定义 emits\r\nconst emit = defineEmits(['selected']);\r\n\r\n// 定义响应式数据\r\nconst dialog = ref(false);\r\n\r\n\r\n// 地区列表\r\nconst areaData = ref([]);\r\nconst areaSelectedData = ref([]);\r\nconst areaActivatedData = ref([]);\r\n\r\nwatch(areaActivatedData, (newVal, oldVal) => {\r\n // 检查数组非空且有有效数据\r\n if (newVal && newVal.length > 0 && newVal[0]?.areaCode) {\r\n getDeptList(newVal);\r\n }\r\n}, { deep: true });\r\n\r\nwatch(areaSelectedData, (newVal, oldVal) => {\r\n // 检查数组非空且有有效数据\r\n if (newVal && newVal.length > 0 && newVal[0]?.areaCode) {\r\n getDeptList(newVal);\r\n }\r\n}, { deep: true });\r\n\r\n// 获取地区列表\r\nconst getAreaList = () => {\r\n if (user && user.areacode) {\r\n proxy.$vtk.request.getForm(`/dict/area/show/${user.areacode}`).then((res) => {\r\n if (res && res.data) {\r\n areaData.value = [{\r\n areaCode: res.data.areaCode,\r\n areaName: res.data.areaName,\r\n children: []\r\n }];\r\n }\r\n });\r\n }\r\n};\r\n\r\n// 获取下级地区列表\r\nconst getAreaNextList = async (item) => {\r\n await pause(300);\r\n const parentCode = item.areaCode;\r\n proxy.$vtk.request.getForm(`/dict/area/next/${parentCode}`).then((res) => {\r\n if (res && res.data) {\r\n res.data.forEach((it) => {\r\n it.areaLeve < 12 && (it.children = []);\r\n item.children.push(it);\r\n });\r\n }\r\n });\r\n};\r\n\r\n// 部门列表\r\nconst deptData = ref([]);\r\nconst deptSelectedData = ref([]);\r\nconst deptActivatedData = ref([]);\r\n\r\nwatch(deptSelectedData, (newVal, oldVal) => {\r\n // 检查数组非空且有有效数据\r\n if (newVal && newVal.length > 0 && newVal[0]?.id) {\r\n getPersonList(newVal);\r\n }\r\n}, { deep: true });\r\n\r\nwatch(deptActivatedData, (newVal, oldVal) => {\r\n // 检查数组非空且有有效数据\r\n if (newVal && newVal.length > 0 && newVal[0]?.id) {\r\n getPersonList(newVal);\r\n }\r\n}, { deep: true });\r\n\r\n// 点击叶子节点时调用的方法\r\nconst getDeptList = (node) => {\r\n const selectAreaCode = node[0].areaCode;\r\n const params = { codex: { area: selectAreaCode, type: \"0\" } };\r\n deptData.value = [];\r\n proxy.$vtk.request.postJson('/bizp/supported/dept/list', params).then((res) => {\r\n res.data.forEach((it) => {\r\n it.children = [];\r\n deptData.value.push(it);\r\n });\r\n });\r\n};\r\n\r\nconst getDepNextList = async (item) => {\r\n await pause(300);\r\n const selectAreaCode = item.areaCode;\r\n const selectPid = item.id;\r\n const params = { codex: { area: selectAreaCode, pid: selectPid } };\r\n proxy.$vtk.request.postJson('/bizp/supported/dept/list', params).then((res) => {\r\n if (res && res.data) {\r\n res.data.forEach((it) => {\r\n it.children = [];\r\n item.children.push(it);\r\n });\r\n }\r\n });\r\n};\r\n\r\n// 人员列表\r\nconst personData = ref([]);\r\nconst selectedPersonData = ref([]);\r\n// 全局已选人员列表(跨部门保存,用于去重和持久化选中状态)\r\nconst allSelectedPersons = ref([]);\r\n// 标记是否正在恢复选中状态(避免触发 watch 循环)\r\nconst isRestoringSelection = ref(false);\r\n\r\n// 已选中的人员列表(用于右侧显示)- 去重后的列表\r\nconst selectedPersonList = computed(() => {\r\n // 使用 Map 去重,key 为人员 id\r\n const uniqueMap = new Map();\r\n allSelectedPersons.value.forEach(person => {\r\n if (person && person.id) {\r\n uniqueMap.set(person.id, person);\r\n }\r\n });\r\n\r\n return Array.from(uniqueMap.values());\r\n});\r\n\r\n// 监听当前部门选中人员的变化\r\nwatch(selectedPersonData, (newVal, oldVal) => {\r\n // 如果正在恢复选中状态,不处理\r\n if (isRestoringSelection.value) {\r\n return;\r\n }\r\n\r\n // 单选模式:直接替换全局列表\r\n if (!props.multiple) {\r\n if (newVal && newVal.length > 0) {\r\n // 单选模式下只保留最新选中的一个\r\n allSelectedPersons.value = [newVal[0]];\r\n } else {\r\n // 取消选中时清空\r\n allSelectedPersons.value = [];\r\n }\r\n return;\r\n }\r\n\r\n // 多选模式:累加到全局列表\r\n // 处理新选中的人员\r\n if (newVal && newVal.length > 0) {\r\n newVal.forEach(person => {\r\n const exists = allSelectedPersons.value.some(p => p.id === person.id);\r\n if (!exists) {\r\n allSelectedPersons.value.push(person);\r\n }\r\n });\r\n }\r\n\r\n // 处理取消选中的人员\r\n if (oldVal && oldVal.length > 0) {\r\n oldVal.forEach(oldPerson => {\r\n const stillSelected = newVal?.some(p => p.id === oldPerson.id);\r\n if (!stillSelected) {\r\n // 从全局列表中移除\r\n const index = allSelectedPersons.value.findIndex(p => p.id === oldPerson.id);\r\n if (index > -1) {\r\n allSelectedPersons.value.splice(index, 1);\r\n }\r\n }\r\n });\r\n }\r\n}, { deep: true });\r\n\r\n// 监听部门切换,同步选中状态\r\nwatch(personData, async (newPersonData) => {\r\n if (!newPersonData || newPersonData.length === 0) {\r\n isRestoringSelection.value = true;\r\n selectedPersonData.value = [];\r\n await nextTick();\r\n isRestoringSelection.value = false;\r\n return;\r\n }\r\n\r\n // 等待 DOM 更新\r\n await nextTick();\r\n\r\n // 标记正在恢复选中状态\r\n isRestoringSelection.value = true;\r\n\r\n // 当人员列表更新时,恢复之前选中的状态\r\n const currentSelected = [];\r\n newPersonData.forEach(person => {\r\n const isSelected = allSelectedPersons.value.some(p => p.id === person.id);\r\n if (isSelected) {\r\n currentSelected.push(person);\r\n }\r\n });\r\n\r\n selectedPersonData.value = currentSelected;\r\n\r\n // 等待状态更新完成\r\n await nextTick();\r\n isRestoringSelection.value = false;\r\n}, { deep: true });\r\n\r\n// 移除已选中的人员\r\nconst removeSelectedPerson = (personId) => {\r\n // 从全局列表中移除\r\n const globalIndex = allSelectedPersons.value.findIndex(person => person.id === personId);\r\n if (globalIndex > -1) {\r\n allSelectedPersons.value.splice(globalIndex, 1);\r\n }\r\n\r\n // 从当前显示的选中列表中移除\r\n const currentIndex = selectedPersonData.value.findIndex(person => person.id === personId);\r\n if (currentIndex > -1) {\r\n selectedPersonData.value.splice(currentIndex, 1);\r\n }\r\n};\r\n\r\n\r\n// 点击叶子节点时调用的方法\r\n// \r\nconst getPersonList = (node) => {\r\n const selectAreaID = node[0].id;\r\n const params = { codex: { dept: selectAreaID } };\r\n\r\n proxy.$vtk.request.postJson('/bizp/supported/user/list', params).then((res) => {\r\n if (res && res.meta.success && res.data.length > 0) {\r\n personData.value = res.data\r\n } else {\r\n personData.value = null\r\n }\r\n });\r\n};\r\nconst add = () => {\r\n dialog.value = true;\r\n};\r\n\r\nconst close = () => {\r\n // 先设置标记,避免触发 watch\r\n isRestoringSelection.value = true;\r\n\r\n // 关闭对话框\r\n dialog.value = false;\r\n\r\n // 清空选中状态\r\n selectedPersonData.value = [];\r\n allSelectedPersons.value = [];\r\n areaSelectedData.value = [];\r\n areaActivatedData.value = [];\r\n deptSelectedData.value = [];\r\n deptActivatedData.value = [];\r\n personData.value = [];\r\n deptData.value = [];\r\n\r\n // 重置标记\r\n nextTick(() => {\r\n isRestoringSelection.value = false;\r\n });\r\n};\r\n\r\n// 确认选择\r\nconst confirm = () => {\r\n // 返回选中的人员列表给父组件\r\n const selectedPersons = selectedPersonList.value;\r\n // 通过 emit 将选中的人员传递给父组件\r\n emit('selected', selectedPersons);\r\n close();\r\n};\r\n\r\nonMounted(() => {\r\n // 获取地区列表\r\n getAreaList();\r\n});\r\n\r\n// 使组件方法可以被父组件调用\r\ndefineExpose({\r\n close,\r\n add,\r\n});\r\n</script>\r\n\r\n<template>\r\n <v-dialog v-model=\"dialog\" persistent width=\"1000\">\r\n <v-card>\r\n <v-card-title class=\"d-flex align-center\">\r\n <span class=\"text-h6\">人员选择</span>\r\n <v-spacer></v-spacer>\r\n <v-btn class=\"g-no-shadow\" icon @click=\"close\" size=\"small\">\r\n <v-icon>mdi-close</v-icon>\r\n </v-btn>\r\n </v-card-title>\r\n <v-divider />\r\n <v-card-text class=\"pb-0 mb-0 pl-0 pr-0\" style=\"height: 600px;\">\r\n <v-row style=\"margin-top:-16px; height: 100%;\">\r\n <v-col md=\"3\" class=\"pr-0 \" style=\"border-right: 1px #ccc solid;height: 600px;\">\r\n <v-card-title class=\"text-center py-0 text-body-1 font-weight-bold \">\r\n <span class=\"mx-auto\">地区</span>\r\n </v-card-title>\r\n <v-sheet height=\"500\" style=\"overflow: auto\" class=\"mt-2 pl-2\">\r\n <v-treeview item-value=\"id\" item-title=\"areaName\" return-object :items=\"areaData\" density=\"compact\"\r\n color=\"primary\" item-props activatable v-model:selected=\"areaSelectedData\"\r\n v-model:activated=\"areaActivatedData\" :load-children=\"getAreaNextList\">\r\n <template v-slot:title=\"{ item }\">\r\n <span :title=\"item.areaName\">{{ item.areaName }}</span>\r\n </template>\r\n </v-treeview>\r\n </v-sheet>\r\n </v-col>\r\n <v-col md=\"3\" class=\"pr-0 pl-0\" style=\"border-right: 1px #ccc solid;height: 600px;\">\r\n <v-card-title class=\"text-center py-0 text-body-1 font-weight-bold \">\r\n <span class=\"mx-auto\">部门</span>\r\n </v-card-title>\r\n <v-sheet height=\"500\" style=\"overflow: auto\" class=\"mt-2 pl-2\">\r\n <v-treeview v-if=\"deptData && deptData.length > 0\" item-value=\"id\" item-title=\"name\" return-object :items=\"deptData\" density=\"compact\"\r\n color=\"primary\" item-props activatable v-model:selected=\"deptSelectedData\"\r\n v-model:activated=\"deptActivatedData\" :load-children=\"getDepNextList\">\r\n <template v-slot:title=\"{ item }\">\r\n <span :title=\"item.name\">{{ item.name }}</span>\r\n </template>\r\n </v-treeview>\r\n <div v-else class=\"text-center pt-4 d-flex flex-column align-center justify-center\">\r\n <v-icon size=\"64\" color=\"grey-lighten-2\" class=\"mb-4\">\r\n mdi-office-building-outline\r\n </v-icon>\r\n <div class=\"text-grey\">暂无</div>\r\n </div>\r\n </v-sheet>\r\n </v-col>\r\n <v-col md=\"3\" class=\"pr-0 pl-0\" style=\"border-right: 1px #ccc solid;height: 600px;\">\r\n <v-card-title class=\"text-center py-0 text-body-1 font-weight-bold \">\r\n <span class=\"mx-auto\">人员</span>\r\n </v-card-title>\r\n <v-sheet height=\"550\" style=\"overflow: auto;\" class=\"mt-2\">\r\n <v-treeview v-if=\"personData && personData.length > 0\"\r\n item-value=\"id\"\r\n item-title=\"username\"\r\n return-object\r\n :items=\"personData\"\r\n density=\"compact\"\r\n color=\"primary\"\r\n item-props\r\n selectable\r\n :select-strategy=\"multiple ? 'leaf' : 'single-leaf'\"\r\n v-model:selected=\"selectedPersonData\">\r\n <template v-slot:title=\"{ item }\">\r\n <div class=\"d-flex align-center\" :title=\"item.username\">\r\n <v-avatar size=\"24\" class=\"mr-2\">\r\n <v-img v-if=\"item.avatar\" :src=\"item.avatar\"></v-img>\r\n <v-icon v-else size=\"20\">mdi-account-circle</v-icon>\r\n </v-avatar>\r\n <span>{{ item.username }}</span>\r\n </div>\r\n </template>\r\n </v-treeview>\r\n <div v-else class=\"text-center pt-4 d-flex flex-column align-center justify-center\">\r\n <v-icon size=\"64\" color=\"grey-lighten-2\" class=\"mb-4\">\r\n mdi-account-group\r\n </v-icon>\r\n <div class=\"text-grey\">暂无</div>\r\n </div>\r\n </v-sheet>\r\n </v-col>\r\n <v-col md=\"3\" class=\"pr-0 pl-0\" style=\"border-right: 1px #ccc solid;height: 600px;\">\r\n <v-card-title class=\"text-center py-0 text-body-1 font-weight-bold \">\r\n <span class=\"mx-auto\">已选中人员 ({{ selectedPersonList.length }})</span>\r\n </v-card-title>\r\n <v-sheet height=\"550\" style=\"overflow: auto\" class=\"mt-2 px-2\">\r\n <v-list v-if=\"selectedPersonList.length > 0\" density=\"compact\">\r\n <v-list-item\r\n v-for=\"person in selectedPersonList\"\r\n :key=\"person.id\"\r\n :title=\"person.username\"\r\n class=\"px-2 mb-1 mr-2\"\r\n rounded=\"lg\"\r\n color=\"primary\"\r\n variant=\"tonal\">\r\n <template v-slot:prepend>\r\n <v-avatar size=\"32\">\r\n <v-img v-if=\"person.avatar\" :src=\"person.avatar\"></v-img>\r\n <v-icon v-else>mdi-account-circle</v-icon>\r\n </v-avatar>\r\n </template>\r\n <template v-slot:append>\r\n <v-btn\r\n icon\r\n size=\"x-small\"\r\n variant=\"text\"\r\n @click=\"removeSelectedPerson(person.id)\">\r\n <v-icon size=\"16\">mdi-close</v-icon>\r\n </v-btn>\r\n </template>\r\n </v-list-item>\r\n </v-list>\r\n <div v-else class=\"text-center pt-4 d-flex flex-column align-center justify-center\">\r\n <v-icon size=\"64\" color=\"grey-lighten-2\" class=\"mb-4\">\r\n mdi-account\r\n </v-icon>\r\n <div class=\"text-grey\">暂无选中</div>\r\n </div>\r\n </v-sheet>\r\n </v-col>\r\n </v-row>\r\n </v-card-text>\r\n <v-divider />\r\n <v-card-actions>\r\n <v-spacer></v-spacer>\r\n <v-btn color=\"darken-1\" text @click=\"close\">取消</v-btn>\r\n <v-btn color=\"blue darken-1\" text @click=\"confirm\">确定</v-btn>\r\n </v-card-actions>\r\n </v-card>\r\n </v-dialog>\r\n</template>\r\n\r\n<style scoped>\r\n:deep() .v-sheet[style*=\"overflow: auto\"] {\r\n &::-webkit-scrollbar {\r\n width: 5px;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background: #ccc;\r\n border-radius: 4px;\r\n }\r\n}\r\n</style>","<!-- 空页面 -->\r\n<template>\r\n <v-empty-state\r\n :headline=\"headline\"\r\n :title=\"title\"\r\n :text=\"text\"\r\n :image=\"image\"\r\n :icon=\"icon\"\r\n :rounded=\"rounded\"\r\n :elevation=\"elevation\"\r\n >\r\n <!-- 图像插槽 -->\r\n <template v-if=\"$slots.media\" #media>\r\n <slot name=\"media\"></slot>\r\n </template>\r\n\r\n <!-- 标题插槽 -->\r\n <template v-if=\"$slots.title\" #title>\r\n <slot name=\"title\"></slot>\r\n </template>\r\n\r\n <!-- 文本插槽 -->\r\n <template v-if=\"$slots.text\" #text>\r\n <slot name=\"text\"></slot>\r\n </template>\r\n\r\n <!-- 操作按钮插槽 -->\r\n <template v-if=\"$slots.actions\" #actions>\r\n <slot name=\"actions\"></slot>\r\n </template>\r\n\r\n <!-- 底部插槽 -->\r\n <template v-if=\"$slots.bottom\" #bottom>\r\n <slot name=\"bottom\"></slot>\r\n </template>\r\n </v-empty-state>\r\n</template>\r\n\r\n<script setup>\r\n// 定义组件名称\r\ndefineOptions({\r\n name: \"VtkEmpty\",\r\n inheritAttrs: false,\r\n});\r\n\r\n// 定义 props\r\nconst props = defineProps({\r\n // 标题\r\n title: {\r\n type: String,\r\n default: ''\r\n },\r\n // 副标题/文本\r\n text: {\r\n type: String,\r\n default: ''\r\n },\r\n // 头部文本(更大字体)\r\n headline: {\r\n type: String,\r\n default: ''\r\n },\r\n // 图标\r\n icon: {\r\n type: String,\r\n default: ''\r\n },\r\n // 图像\r\n image: {\r\n type: String,\r\n default: ''\r\n },\r\n // 圆角\r\n rounded: {\r\n type: [Boolean, String, Number],\r\n default: 'circle'\r\n },\r\n // 阴影\r\n elevation: {\r\n type: [Number, String],\r\n default: 0\r\n }\r\n});\r\n</script>\r\n\r\n<style scoped>\r\n/* 可以添加自定义样式 */\r\n:deep(.v-empty-state) {\r\n padding: 24px;\r\n}\r\n\r\n:deep(.v-empty-state__media) {\r\n margin-bottom: 16px;\r\n}\r\n\r\n:deep(.v-empty-state__headline) {\r\n margin-bottom: 8px;\r\n}\r\n\r\n:deep(.v-empty-state__title) {\r\n margin-bottom: 8px;\r\n}\r\n\r\n:deep(.v-empty-state__actions) {\r\n margin-top: 16px;\r\n}\r\n</style>","<!-- 悬浮按钮 -->\r\n<template>\r\n <transition name=\"slide-up\">\r\n <v-fab\r\n v-if=\"showFab\"\r\n :class=\"fabClass\"\r\n color=\"primary\"\r\n icon=\"mdi-arrow-up\"\r\n @click=\"scrollToTop\"\r\n ></v-fab>\r\n </transition>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, onMounted, onBeforeUnmount } from 'vue'\r\n\r\n// 定义组件名称\r\ndefineOptions({\r\n name: \"VtkFab\",\r\n inheritAttrs: false,\r\n});\r\n\r\n// 控制悬浮按钮显示状态\r\nconst showFab = ref(false)\r\n// 自定义类名用于样式调整\r\nconst fabClass = ref('scroll-to-top-fab')\r\n\r\n// 监听滚动事件\r\nconst handleScroll = () => {\r\n showFab.value = window.scrollY > 100\r\n}\r\n\r\n// 滚动到顶部\r\nconst scrollToTop = () => {\r\n window.scrollTo({\r\n top: 0,\r\n behavior: 'smooth'\r\n })\r\n}\r\n\r\n// 组件挂载时添加滚动监听\r\nonMounted(() => {\r\n window.addEventListener('scroll', handleScroll)\r\n})\r\n\r\n// 组件卸载前移除监听\r\nonBeforeUnmount(() => {\r\n window.removeEventListener('scroll', handleScroll)\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.scroll-to-top-fab {\r\n position: fixed;\r\n bottom: 24px;\r\n right: 24px;\r\n z-index: 1004;\r\n}\r\n\r\n/* 滑动动画 */\r\n.slide-up-enter-active {\r\n transition: all 0.2s ease-out;\r\n}\r\n\r\n.slide-up-leave-active {\r\n transition: all 0.2s ease-in;\r\n}\r\n\r\n.slide-up-enter-from {\r\n opacity: 0;\r\n transform: translateY(30px);\r\n}\r\n\r\n.slide-up-leave-to {\r\n opacity: 0;\r\n transform: translateY(30px);\r\n}\r\n</style>","<template>\r\n <div\r\n class=\"box\"\r\n :class=\"{\r\n 'form-item--vertical': top,\r\n 'form-item--horizontal': !top\r\n }\"\r\n style=\"position: relative\"\r\n >\r\n <!-- label 在上方 (top模式) -->\r\n <div\r\n v-if=\"label && top\"\r\n class=\"pb-2 text-left\"\r\n >\r\n <span v-if=\"must\" class=\"text-red mr-1\">*</span>\r\n <span>{{ label }}</span>\r\n </div>\r\n\r\n <!-- label 在左侧 (默认模式) -->\r\n <div\r\n v-if=\"label && !top\"\r\n :class=\"left ? '' : 'vtk-width-2'\"\r\n class=\"d-inline-block text-right\"\r\n :style=\"Tstyle\"\r\n style=\"min-width: 120px !important;vertical-align: top;padding-top: 11px;\"\r\n >\r\n <span v-if=\"must\" class=\"text-red\">*</span>\r\n <span>{{ label }}</span>\r\n </div>\r\n\r\n <!-- 输入框容器 (top模式) -->\r\n <div\r\n v-if=\"top\"\r\n :style=\"contentStyles\"\r\n >\r\n <slot></slot>\r\n </div>\r\n\r\n <!-- 输入框容器 (默认模式) -->\r\n <div\r\n v-if=\"!top\"\r\n class=\"d-inline-block vtk-width-7 \"\r\n style=\"min-width: 350px;\"\r\n >\r\n <slot></slot>\r\n </div>\r\n\r\n <!-- help提示 (仅left模式) -->\r\n <div\r\n v-if=\"left && help && !top\"\r\n class=\"box_help tips py-3 px-4\"\r\n style=\"width: calc(30% - 160px)\"\r\n >\r\n <p class=\"mb-2 font-weight-bold text-body-1\">{{ label }}</p>\r\n <span v-html=\"help\"></span>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed } from 'vue'\r\n\r\n// 定义组件名称和选项\r\ndefineOptions({\r\n name: \"VtkFormItem\",\r\n inheritAttrs: false,\r\n});\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n label: {\r\n type: String,\r\n default: null\r\n },\r\n must: {\r\n type: Boolean,\r\n default: false\r\n },\r\n left: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 标签在上方的垂直布局\r\n top: {\r\n type: Boolean,\r\n default: false\r\n },\r\n Tstyle: {\r\n type: String,\r\n default: null\r\n },\r\n help: {\r\n type: String,\r\n default: null\r\n },\r\n // 控制top模式下内容的最大宽度\r\n maxWidth: {\r\n type: [String, Number],\r\n default: '100%'\r\n }\r\n});\r\n\r\n// 处理maxWidth属性\r\nconst processedMaxWidth = computed(() => {\r\n if (typeof props.maxWidth === 'number') {\r\n return props.maxWidth + 'px';\r\n }\r\n return props.maxWidth;\r\n});\r\n\r\n// 内容样式(仅在top模式下应用maxWidth)\r\nconst contentStyles = computed(() => {\r\n const styles = {};\r\n\r\n // 在top模式下应用maxWidth\r\n if (props.top && props.maxWidth) {\r\n styles.maxWidth = processedMaxWidth.value;\r\n }\r\n\r\n return styles;\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.box:hover > .box_help {\r\n display: inline-block !important;\r\n border-top-right-radius: 24px;\r\n border-bottom-left-radius: 24px;\r\n}\r\n\r\n.box_help {\r\n display: none;\r\n}\r\n\r\n.tips {\r\n position: absolute;\r\n right: 8px;\r\n top: 0;\r\n border: 1px rgba(175, 175, 175, 0.341) solid;\r\n}\r\n\r\n.form-item--vertical {\r\n display: block;\r\n margin-bottom: 1rem;\r\n}\r\n\r\n.form-item--horizontal {\r\n display: block;\r\n margin-bottom: 0.5rem;\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"vtk-img-container\">\r\n <VCard \r\n :class=\"['vtk-img-card', { 'vtk-img-card--preview': preview }]\"\r\n @click=\"openPreview\"\r\n >\r\n <v-img \r\n v-bind=\"$attrs\" \r\n :src=\"srcWithToken\"\r\n class=\"vtk-img\"\r\n :aspect-ratio=\"aspectRatio\"\r\n cover\r\n >\r\n <template v-slot:placeholder>\r\n <div class=\"d-flex align-center justify-center fill-height\">\r\n <v-progress-circular indeterminate color=\"grey-lighten-1\"></v-progress-circular>\r\n </div>\r\n </template>\r\n </v-img>\r\n \r\n <!-- 图片标题和描述 -->\r\n <div class=\"vtk-img-info\" v-if=\"showTitle || showDescription\">\r\n <VCardTitle v-if=\"showTitle\" class=\"vtk-img-title text-subtitle-2 pa-2\">\r\n {{ title }}\r\n </VCardTitle>\r\n <v-card-subtitle v-if=\"showDescription\" class=\"vtk-img-description text-caption pa-2\">\r\n {{ description }}\r\n </v-card-subtitle>\r\n </div>\r\n </VCard>\r\n \r\n <!-- 使用 v-dialog 的图片预览 -->\r\n <VDialog \r\n v-model=\"showPreview\" \r\n max-width=\"90%\" \r\n fullscreen\r\n @click:outside=\"closePreview\"\r\n >\r\n <VCard class=\"image-viewer-card\">\r\n <v-toolbar dark color=\"primary\">\r\n <VBtn icon dark @click=\"closePreview\">\r\n <VIcon>mdi-close</VIcon>\r\n </VBtn>\r\n <v-toolbar-title>{{ currentImageTitle }}</v-toolbar-title>\r\n <VSpacer></VSpacer>\r\n <v-toolbar-items>\r\n <VBtn icon dark @click=\"rotateImage(-90)\">\r\n <VIcon>mdi-rotate-left</VIcon>\r\n </VBtn>\r\n <VBtn icon dark @click=\"rotateImage(90)\">\r\n <VIcon>mdi-rotate-right</VIcon>\r\n </VBtn>\r\n </v-toolbar-items>\r\n </v-toolbar>\r\n \r\n <div class=\"image-viewer-content\">\r\n <VBtn \r\n v-if=\"hasPrev\" \r\n icon \r\n class=\"nav-button prev-button\" \r\n @click=\"prevImage\"\r\n >\r\n <VIcon>mdi-chevron-left</VIcon>\r\n </VBtn>\r\n \r\n <div class=\"image-container\">\r\n <v-img\r\n :src=\"currentImageUrl\"\r\n class=\"viewer-image\"\r\n :style=\"{ transform: `rotate(${imageRotation}deg)` }\"\r\n />\r\n </div>\r\n \r\n <VBtn \r\n v-if=\"hasNext\" \r\n icon \r\n class=\"nav-button next-button\" \r\n @click=\"nextImage\"\r\n >\r\n <VIcon>mdi-chevron-right</VIcon>\r\n </VBtn>\r\n </div>\r\n \r\n <div class=\"image-info\">\r\n <p class=\"text-center\">{{ currentImageDescription }}</p>\r\n <p class=\"text-center text--secondary\">{{ currentIndex + 1 }} / {{ imageList.length }}</p>\r\n </div>\r\n </VCard>\r\n </VDialog>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, computed, watch } from 'vue';\r\n\r\ndefineOptions({\r\n name: 'VtkImg',\r\n inheritAttrs: true\r\n});\r\n\r\nconst props = defineProps({\r\n src: {\r\n type: String,\r\n default: null,\r\n },\r\n error: {\r\n type: String,\r\n default: new URL('../../assets/img/wxsq.png', import.meta.url).href,\r\n },\r\n preview: {\r\n type: Boolean,\r\n default: true\r\n },\r\n title: {\r\n type: String,\r\n default: ''\r\n },\r\n description: {\r\n type: String,\r\n default: ''\r\n },\r\n // 图片列表,用于导航功能\r\n imageList: {\r\n type: Array,\r\n default: () => []\r\n },\r\n // 当前图片索引\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n // 是否显示标题\r\n showTitle: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 是否显示描述\r\n showDescription: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 图片宽高比\r\n aspectRatio: {\r\n type: [String, Number],\r\n default: 16/9\r\n }\r\n});\r\n\r\n// 预览状态\r\nconst showPreview = ref(false);\r\n// 图片旋转角度\r\nconst imageRotation = ref(0);\r\n// 当前图片索引(预览模式下使用)\r\nconst currentIndex = ref(0);\r\n\r\n// 使用计算属性处理带token的URL\r\nconst srcWithToken = computed(() => {\r\n if (!props.src) return props.src;\r\n \r\n try {\r\n // 首先尝试使用 $vtk.storage\r\n if (window.$vtk && typeof window.$vtk.storage?.get === 'function') {\r\n const token = window.$vtk.storage.get('_mis_acis_token');\r\n return token ? `${props.src}?stoken=${token}` : props.src;\r\n }\r\n // 如果 $vtk 不存在,尝试从 localStorage 获取 token\r\n else {\r\n const token = localStorage.getItem('_mis_acis_token');\r\n return token ? `${props.src}?stoken=${token}` : props.src;\r\n }\r\n } catch (error) {\r\n // 发生错误时返回原始src\r\n console.warn('VtkImg: Failed to get token, using src without token', error);\r\n return props.src;\r\n }\r\n});\r\n\r\n// 当前预览图片的URL\r\nconst currentImageUrl = computed(() => {\r\n if (props.imageList.length > 0 && currentIndex.value < props.imageList.length) {\r\n const currentImage = props.imageList[currentIndex.value];\r\n if (currentImage && currentImage.url) {\r\n try {\r\n // 为图片列表中的图片也添加token\r\n if (window.$vtk && typeof window.$vtk.storage?.get === 'function') {\r\n const token = window.$vtk.storage.get('_mis_acis_token');\r\n return token ? `${currentImage.url}?stoken=${token}` : currentImage.url;\r\n } else {\r\n const token = localStorage.getItem('_mis_acis_token');\r\n return token ? `${currentImage.url}?stoken=${token}` : currentImage.url;\r\n }\r\n } catch (error) {\r\n return currentImage.url;\r\n }\r\n }\r\n }\r\n return srcWithToken.value;\r\n});\r\n\r\n// 当前图片标题\r\nconst currentImageTitle = computed(() => {\r\n if (props.imageList.length > 0 && currentIndex.value < props.imageList.length) {\r\n const currentImage = props.imageList[currentIndex.value];\r\n return currentImage?.title || '';\r\n }\r\n return props.title;\r\n});\r\n\r\n// 当前图片描述\r\nconst currentImageDescription = computed(() => {\r\n if (props.imageList.length > 0 && currentIndex.value < props.imageList.length) {\r\n const currentImage = props.imageList[currentIndex.value];\r\n return currentImage?.description || '';\r\n }\r\n return props.description;\r\n});\r\n\r\n// 是否有上一张图片\r\nconst hasPrev = computed(() => {\r\n return props.imageList.length > 1 && currentIndex.value > 0;\r\n});\r\n\r\n// 是否有下一张图片\r\nconst hasNext = computed(() => {\r\n return props.imageList.length > 1 && currentIndex.value < props.imageList.length - 1;\r\n});\r\n\r\n// 监听预览状态变化\r\nwatch(showPreview, (newVal) => {\r\n if (newVal) {\r\n // 打开预览时重置旋转角度和当前索引\r\n imageRotation.value = 0;\r\n currentIndex.value = props.index;\r\n }\r\n});\r\n\r\n// 打开预览\r\nconst openPreview = () => {\r\n if (props.preview) {\r\n showPreview.value = true;\r\n }\r\n};\r\n\r\n// 关闭预览\r\nconst closePreview = () => {\r\n showPreview.value = false;\r\n};\r\n\r\n// 上一张图片\r\nconst prevImage = () => {\r\n if (hasPrev.value) {\r\n currentIndex.value--;\r\n imageRotation.value = 0; // 切换图片时重置旋转\r\n }\r\n};\r\n\r\n// 下一张图片\r\nconst nextImage = () => {\r\n if (hasNext.value) {\r\n currentIndex.value++;\r\n imageRotation.value = 0; // 切换图片时重置旋转\r\n }\r\n};\r\n\r\n// 旋转图片\r\nconst rotateImage = (degrees) => {\r\n imageRotation.value += degrees;\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.vtk-img-container {\r\n position: relative;\r\n display: inline-block;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.vtk-img-card {\r\n height: 100%;\r\n}\r\n\r\n.vtk-img-card--preview {\r\n cursor: pointer;\r\n transition: transform 0.2s ease-in-out;\r\n}\r\n\r\n.vtk-img-card--preview:hover {\r\n transform: translateY(-5px);\r\n}\r\n\r\n.vtk-img {\r\n width: 100%;\r\n}\r\n\r\n.vtk-img-info {\r\n padding: 0;\r\n}\r\n\r\n.vtk-img-title {\r\n word-break: break-word;\r\n}\r\n\r\n.vtk-img-description {\r\n word-break: break-word;\r\n}\r\n\r\n/* 图片查看器样式 */\r\n.image-viewer-card {\r\n background-color: rgba(0, 0, 0, 0.9);\r\n color: white;\r\n}\r\n\r\n.image-viewer-content {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: calc(100vh - 150px);\r\n position: relative;\r\n}\r\n\r\n.image-container {\r\n flex: 1;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n overflow: hidden;\r\n}\r\n\r\n.viewer-image {\r\n max-width: 90%;\r\n max-height: 80vh;\r\n transition: transform 0.3s ease;\r\n}\r\n\r\n.nav-button {\r\n position: absolute;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n z-index: 10;\r\n background-color: rgba(0, 0, 0, 0.5);\r\n color: white;\r\n width: 50px;\r\n height: 50px;\r\n}\r\n\r\n.prev-button {\r\n left: 20px;\r\n}\r\n\r\n.next-button {\r\n right: 20px;\r\n}\r\n\r\n.image-info {\r\n padding: 20px;\r\n background-color: rgba(0, 0, 0, 0.7);\r\n}\r\n\r\n.image-info p {\r\n margin: 5px 0;\r\n}\r\n\r\n:deep(.v-img__img) {\r\n background: v-bind('props.error') no-repeat center;\r\n background-size: cover;\r\n}\r\n\r\n:deep(.v-img__placeholder) {\r\n filter: blur(0px);\r\n}\r\n</style>","<template>\r\n <div class=\"m_pagination\">\r\n <VRow v-if=\"pageDatas.rowCount > 0\" class=\"pagination box\" align=\"center\">\r\n <span class=\"page-total d-none d-md-flex align-center\">共{{ pageDatas.rowCount }}条</span>\r\n <VSelect\r\n v-model=\"pagination.limit\"\r\n :items=\"pageSizeObjs\"\r\n variant=\"solo\"\r\n density=\"compact\"\r\n :menu-props=\"{ offsetY: true }\"\r\n hide-details\r\n class=\"page-select ml-2 d-none d-md-flex\"\r\n @update:model-value=\"pageSizeChange()\"\r\n />\r\n <span class=\"my-2\">\r\n <v-pagination\r\n v-model=\"pageDatas.pageno\"\r\n :total-visible=\"5\"\r\n :length=\"pageDatas.pageCount\"\r\n size=\"small\"\r\n @update:model-value=\"pageChange()\"\r\n />\r\n </span>\r\n <span class=\"page-total ml-3 d-none d-md-flex align-center\">到</span>\r\n <VTextField\r\n v-model=\"pagination.pageno\"\r\n variant=\"solo\"\r\n density=\"compact\"\r\n hide-details\r\n class=\"page-go ml-2 d-none d-md-flex\"\r\n @keyup.enter=\"toPage()\"\r\n />\r\n <span class=\"page-total ml-2 d-none d-md-flex align-center\">页</span>\r\n </VRow>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, reactive, computed, watch, onMounted } from 'vue';\r\n\r\nconst props = defineProps({\r\n pageData: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n pageSizes: {\r\n type: Array,\r\n default: () => [10, 20, 30]\r\n }\r\n});\r\n\r\nconst emit = defineEmits(['pageChange']);\r\n\r\nconst pagination = reactive({\r\n pageno: 1,\r\n limit: 10\r\n});\r\n\r\nconst pageSizeObjs = ref([]);\r\nconst pageDatas = ref({ ...props.pageData });\r\n\r\nconst paginationChange = computed(() => pageDatas.value.pageno);\r\n\r\nwatch(paginationChange, () => {\r\n pagination.pageno = pageDatas.value.pageno;\r\n});\r\n\r\nwatch(() => props.pageData, (newVal) => {\r\n pageDatas.value = { ...newVal };\r\n if (newVal.rowCount < 1 && newVal.rows > 0) {\r\n pageDatas.value.pageno = newVal.pageno - 1;\r\n pageChange();\r\n }\r\n}, { deep: true });\r\n\r\nonMounted(() => {\r\n pageSizeFormat();\r\n});\r\n\r\nconst toPage = () => {\r\n const re = /^[0-9]+$/;\r\n if (re.test(pagination.pageno) && pagination.pageno <= pageDatas.value.pageCount) {\r\n pageDatas.value.pageno = parseInt(pagination.pageno);\r\n pageChange();\r\n } else {\r\n pagination.pageno = pageDatas.value.pageno;\r\n }\r\n};\r\n\r\nconst pageSizeChange = () => {\r\n pageDatas.value.pageCount = 1;\r\n pageChange();\r\n};\r\n\r\nconst pageSizeFormat = () => {\r\n const temp = props.pageSizes;\r\n temp.forEach((value) => {\r\n const obj = {\r\n title: value + \"条/页\",\r\n value: value\r\n };\r\n pageSizeObjs.value.push(obj);\r\n });\r\n pagination.limit = temp[0];\r\n};\r\n\r\nconst pageChange = () => {\r\n const page = {\r\n pageno: pageDatas.value.pageno,\r\n limit: pagination.limit\r\n };\r\n emit('pageChange', page);\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.mt-1 {\r\n margin-top: 11px !important;\r\n}\r\n.my-5 {\r\n margin-top: 20px !important;\r\n margin-bottom: 20px !important;\r\n}\r\n.m_pagination {\r\n width: 100%;\r\n min-height: 52px;\r\n display: flex;\r\n align-items: center;\r\n .box {\r\n position: absolute;\r\n right: 32px;\r\n }\r\n}\r\n.page-total {\r\n display: flex;\r\n align-items: center;\r\n height: 36px;\r\n font-size: 13px;\r\n padding-top: 4px;\r\n}\r\n.page-select {\r\n padding-top: 4px;\r\n max-width: 115px;\r\n :deep(.v-input__control) {\r\n min-height: 36px !important;\r\n height: 36px !important;\r\n }\r\n :deep(.v-field) {\r\n height: 36px !important;\r\n font-size: 13px !important;\r\n }\r\n :deep(.v-field__input) {\r\n padding-top: 6px !important;\r\n padding-bottom: 6px !important;\r\n min-height: 36px !important;\r\n }\r\n}\r\n.page-go {\r\n max-width: 75px;\r\n :deep(.v-input__control) {\r\n min-height: 36px !important;\r\n height: 36px !important;\r\n }\r\n :deep(.v-field) {\r\n height: 36px !important;\r\n font-size: 13px !important;\r\n }\r\n :deep(.v-field__input) {\r\n padding-top: 6px !important;\r\n padding-bottom: 6px !important;\r\n min-height: 36px !important;\r\n }\r\n}\r\n\r\n// 分页按钮缩小\r\n.my-2 {\r\n :deep(.v-pagination__item),\r\n :deep(.v-pagination__prev),\r\n :deep(.v-pagination__next) {\r\n min-width: 32px !important;\r\n height: 36px !important;\r\n font-size: 13px !important;\r\n }\r\n}\r\n</style>","<template>\r\n <div class=\"vtk-pdf-container\">\r\n <VCard \r\n :class=\"['vtk-pdf-card', { 'vtk-pdf-card--preview': preview }]\"\r\n @click=\"openPreview\"\r\n >\r\n <!-- PDF封面或默认图标 -->\r\n <div class=\"vtk-pdf-cover\" :style=\"{ aspectRatio: aspectRatio }\">\r\n <VIcon size=\"48\" color=\"red\">mdi-file-pdf-box</VIcon>\r\n <div class=\"vtk-pdf-label\">PDF</div>\r\n </div>\r\n \r\n <!-- PDF标题和描述 -->\r\n <div class=\"vtk-pdf-info\" v-if=\"showTitle || showDescription\">\r\n <VCardTitle v-if=\"showTitle\" class=\"vtk-pdf-title text-subtitle-2 pa-2\">\r\n {{ title }}\r\n </VCardTitle>\r\n <v-card-subtitle v-if=\"showDescription\" class=\"vtk-pdf-description text-caption pa-2\">\r\n {{ description }}\r\n </v-card-subtitle>\r\n </div>\r\n </VCard>\r\n \r\n <!-- 使用 v-dialog 的PDF预览 -->\r\n <VDialog \r\n v-model=\"showPreview\" \r\n max-width=\"90%\" \r\n fullscreen\r\n @click:outside=\"closePreview\"\r\n >\r\n <VCard class=\"pdf-viewer-card\">\r\n <v-toolbar dark color=\"red darken-1\">\r\n <VBtn icon dark @click=\"closePreview\">\r\n <VIcon>mdi-close</VIcon>\r\n </VBtn>\r\n <v-toolbar-title>{{ title }}</v-toolbar-title>\r\n <VSpacer></VSpacer>\r\n <v-toolbar-items>\r\n <VBtn icon dark @click=\"downloadPdf\">\r\n <VIcon>mdi-download</VIcon>\r\n </VBtn>\r\n </v-toolbar-items>\r\n </v-toolbar>\r\n \r\n <div class=\"pdf-viewer-content\">\r\n <div class=\"pdf-container\" ref=\"pdfContainer\">\r\n <!-- PDF内容将通过PDF.js渲染 -->\r\n <div id=\"pdf-viewer\"></div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"pdf-viewer-footer\" v-if=\"pdfLoaded\">\r\n <VRow align=\"center\" justify=\"center\">\r\n <VCol cols=\"12\" sm=\"6\" class=\"d-flex justify-center\">\r\n <VBtn icon @click=\"prevPage\" :disabled=\"currentPage <= 1\">\r\n <VIcon>mdi-chevron-left</VIcon>\r\n </VBtn>\r\n <div class=\"mx-4\">\r\n <span>第 {{ currentPage }} 页 / 共 {{ pageCount }} 页</span>\r\n </div>\r\n <VBtn icon @click=\"nextPage\" :disabled=\"currentPage >= pageCount\">\r\n <VIcon>mdi-chevron-right</VIcon>\r\n </VBtn>\r\n </VCol>\r\n <VCol cols=\"12\" sm=\"6\" class=\"d-flex justify-center\">\r\n <VSlider\r\n v-model=\"currentPage\"\r\n :min=\"1\"\r\n :max=\"pageCount\"\r\n hide-details\r\n class=\"mx-4\"\r\n ></VSlider>\r\n </VCol>\r\n </VRow>\r\n </div>\r\n \r\n <div class=\"pdf-loading\" v-if=\"loading\">\r\n <v-progress-circular indeterminate color=\"red\"></v-progress-circular>\r\n <p class=\"mt-2\">正在加载PDF...</p>\r\n </div>\r\n </VCard>\r\n </VDialog>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue';\r\n// import * as pdfjsLib from 'pdfjs-dist';\r\n// 注意:在实际项目中,您需要安装 pdfjs-dist 库\r\n// npm install pdfjs-dist\r\n// import * as pdfjsLib from 'pdfjs-dist';\r\n\r\ndefineOptions({\r\n name: 'VtkPdf',\r\n inheritAttrs: true\r\n});\r\n\r\nconst props = defineProps({\r\n src: {\r\n type: String,\r\n default: null,\r\n },\r\n preview: {\r\n type: Boolean,\r\n default: true\r\n },\r\n title: {\r\n type: String,\r\n default: ''\r\n },\r\n description: {\r\n type: String,\r\n default: ''\r\n },\r\n // 是否显示标题\r\n showTitle: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 是否显示描述\r\n showDescription: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 封面宽高比\r\n aspectRatio: {\r\n type: [String, Number],\r\n default: 16/9\r\n }\r\n});\r\n\r\n// 预览状态\r\nconst showPreview = ref(false);\r\n// PDF相关状态\r\nconst loading = ref(false);\r\nconst pdfLoaded = ref(false);\r\nconst currentPage = ref(1);\r\nconst pageCount = ref(0);\r\nconst pdfContainer = ref(null);\r\n\r\n// PDF对象(实际使用时需要引入pdfjsLib)\r\nlet pdfDoc = null;\r\n\r\n// 使用计算属性处理带token的URL\r\nconst srcWithToken = computed(() => {\r\n if (!props.src) return props.src;\r\n \r\n try {\r\n // 首先尝试使用 $vtk.storage\r\n if (window.$vtk && typeof window.$vtk.storage?.get === 'function') {\r\n const token = window.$vtk.storage.get('_mis_acis_token');\r\n return token ? `${props.src}?stoken=${token}` : props.src;\r\n }\r\n // 如果 $vtk 不存在,尝试从 localStorage 获取 token\r\n else {\r\n const token = localStorage.getItem('_mis_acis_token');\r\n return token ? `${props.src}?stoken=${token}` : props.src;\r\n }\r\n } catch (error) {\r\n // 发生错误时返回原始src\r\n console.warn('VtkPdf: Failed to get token, using src without token', error);\r\n return props.src;\r\n }\r\n});\r\n\r\n// 打开预览\r\nconst openPreview = () => {\r\n if (props.preview) {\r\n showPreview.value = true;\r\n // 延迟加载PDF以确保DOM已准备好\r\n setTimeout(() => {\r\n loadPdf();\r\n }, 300);\r\n }\r\n};\r\n\r\n// 关闭预览\r\nconst closePreview = () => {\r\n showPreview.value = false;\r\n // 清理PDF对象\r\n pdfDoc = null;\r\n pdfLoaded.value = false;\r\n currentPage.value = 1;\r\n pageCount.value = 0;\r\n};\r\n\r\n// 加载PDF(示例实现,实际使用需要PDF.js库)\r\nconst loadPdf = async () => {\r\n if (!srcWithToken.value) return;\r\n \r\n loading.value = true;\r\n \r\n try {\r\n // 模拟PDF加载(实际实现需要使用PDF.js)\r\n /*\r\n // 实际使用时的代码示例:\r\n pdfjsLib.GlobalWorkerOptions.workerSrc = '//cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.worker.min.js';\r\n \r\n const loadingTask = pdfjsLib.getDocument(srcWithToken.value);\r\n pdfDoc = await loadingTask.promise;\r\n pageCount.value = pdfDoc.numPages;\r\n pdfLoaded.value = true;\r\n \r\n // 渲染第一页\r\n renderPage(currentPage.value);\r\n */\r\n \r\n // 模拟加载过程\r\n await new Promise(resolve => setTimeout(resolve, 1000));\r\n pageCount.value = 10; // 模拟10页PDF\r\n pdfLoaded.value = true;\r\n } catch (error) {\r\n console.error('加载PDF失败:', error);\r\n } finally {\r\n loading.value = false;\r\n }\r\n};\r\n\r\n// 渲染PDF页面(示例实现)\r\nconst renderPage = async (pageNum) => {\r\n if (!pdfDoc || !pdfContainer.value) return;\r\n \r\n try {\r\n /*\r\n // 实际使用时的代码示例:\r\n const page = await pdfDoc.getPage(pageNum);\r\n const viewport = page.getViewport({ scale: 1.5 });\r\n \r\n // 准备canvas\r\n const canvas = document.createElement('canvas');\r\n const context = canvas.getContext('2d');\r\n canvas.height = viewport.height;\r\n canvas.width = viewport.width;\r\n \r\n // 清空容器\r\n pdfContainer.value.innerHTML = '';\r\n pdfContainer.value.appendChild(canvas);\r\n \r\n // 渲染页面\r\n const renderContext = {\r\n canvasContext: context,\r\n viewport: viewport\r\n };\r\n await page.render(renderContext).promise;\r\n */\r\n } catch (error) {\r\n console.error('渲染PDF页面失败:', error);\r\n }\r\n};\r\n\r\n// 上一页\r\nconst prevPage = () => {\r\n if (currentPage.value > 1) {\r\n currentPage.value--;\r\n renderPage(currentPage.value);\r\n }\r\n};\r\n\r\n// 下一页\r\nconst nextPage = () => {\r\n if (currentPage.value < pageCount.value) {\r\n currentPage.value++;\r\n renderPage(currentPage.value);\r\n }\r\n};\r\n\r\n// 下载PDF\r\nconst downloadPdf = async () => {\r\n if (!srcWithToken.value) return;\r\n \r\n try {\r\n // 获取PDF文件的二进制数据\r\n const response = await fetch(srcWithToken.value);\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n \r\n const blob = await response.blob();\r\n const fileName = props.title && props.title.trim() !== '' \r\n ? `${props.title}.pdf` \r\n : 'document.pdf';\r\n \r\n // 创建下载链接\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = fileName;\r\n document.body.appendChild(link);\r\n link.click();\r\n \r\n // 清理\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(url);\r\n } catch (error) {\r\n console.error('下载PDF失败:', error);\r\n // 备用方案:在新窗口打开\r\n window.open(srcWithToken.value, '_blank');\r\n }\r\n};\r\n\r\n// 监听页码变化\r\nconst handlePageChange = (newPage) => {\r\n if (newPage >= 1 && newPage <= pageCount.value) {\r\n renderPage(newPage);\r\n }\r\n};\r\n\r\n// 监听 currentPage 变化\r\n// 在实际实现中,您需要使用 watch 监听 currentPage 变化\r\n// watch(currentPage, handlePageChange);\r\n\r\n// 组件销毁前清理\r\nonBeforeUnmount(() => {\r\n pdfDoc = null;\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.vtk-pdf-container {\r\n position: relative;\r\n display: inline-block;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.vtk-pdf-card {\r\n height: 100%;\r\n}\r\n\r\n.vtk-pdf-card--preview {\r\n cursor: pointer;\r\n transition: transform 0.2s ease-in-out;\r\n}\r\n\r\n.vtk-pdf-card--preview:hover {\r\n transform: translateY(-5px);\r\n}\r\n\r\n.vtk-pdf-cover {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: #f5f5f5;\r\n border: 1px solid #ddd;\r\n width: 100%;\r\n}\r\n\r\n.vtk-pdf-label {\r\n margin-top: 8px;\r\n font-weight: 500;\r\n color: #666;\r\n}\r\n\r\n.vtk-pdf-info {\r\n padding: 0;\r\n}\r\n\r\n.vtk-pdf-title {\r\n word-break: break-word;\r\n}\r\n\r\n.vtk-pdf-description {\r\n word-break: break-word;\r\n}\r\n\r\n/* PDF查看器样式 */\r\n.pdf-viewer-card {\r\n background-color: #e0e0e0;\r\n color: #333;\r\n}\r\n\r\n.pdf-viewer-content {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: calc(100vh - 150px);\r\n position: relative;\r\n background-color: #555;\r\n overflow: auto;\r\n}\r\n\r\n.pdf-container {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n#pdf-viewer {\r\n max-width: 100%;\r\n max-height: 100%;\r\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\r\n background-color: white;\r\n /* 实际PDF内容将在此处渲染 */\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: 500px;\r\n min-width: 400px;\r\n}\r\n\r\n.pdf-viewer-footer {\r\n padding: 16px;\r\n background-color: #f5f5f5;\r\n border-top: 1px solid #ddd;\r\n}\r\n\r\n.pdf-loading {\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: rgba(255, 255, 255, 0.9);\r\n padding: 20px;\r\n border-radius: 8px;\r\n z-index: 100;\r\n}\r\n</style>","// composables/useMixins.js\r\nimport { ref, reactive } from 'vue'\r\nimport Request from '../commons/request.js'\r\nimport Message from '../components/message/index.js'\r\nimport storage from '../commons/storage.js'\r\n\r\n/**\r\n * 通用 mixins composable\r\n * @param {Object} urlConfig - URL 配置对象\r\n * @returns {Object} 包含所有状态和方法的对象\r\n */\r\nexport function useMixins(urlConfig = {}) {\r\n // 响应式数据\r\n const queryParam = reactive({})\r\n const desserts = ref([])\r\n const loading = ref(false)\r\n const superQueryParams = ref('')\r\n const page = reactive({\r\n pageno: 1,\r\n limit: 10\r\n })\r\n const pageData = ref({})\r\n const sumup = ref({})\r\n const pageDataCopy = ref([])\r\n const overlay = ref(false)\r\n const user = ref({})\r\n\r\n // URL 配置\r\n const url = reactive(urlConfig)\r\n\r\n /**\r\n * 获取查询参数\r\n * @returns {Object} 查询参数对象\r\n */\r\n const getQueryParams = () => {\r\n user.value = storage.get('_mis_acis_users')\r\n if (!queryParam.areaCode) {\r\n queryParam.areaCode = user.value?.areacode\r\n }\r\n const codex = Object.assign({}, queryParam)\r\n const params = {\r\n pageno: page.pageno,\r\n limit: page.limit,\r\n codex: codex\r\n }\r\n return params\r\n }\r\n\r\n /**\r\n * 加载页面数据\r\n */\r\n const loadPage = () => {\r\n if (!url.list) {\r\n Message.toast('请先设置url.list属性', { color: 'warning' })\r\n return\r\n }\r\n const params = getQueryParams()\r\n loading.value = true\r\n\r\n // 兼容处理 vtk 对象\r\n if (window.$vtk?.message?.loading) {\r\n window.$vtk.message.loading.show()\r\n }\r\n\r\n Request.postJson(url.list, params)\r\n .then((res) => {\r\n if (window.$vtk?.message?.loading) {\r\n window.$vtk.message.loading.hide()\r\n }\r\n\r\n if (res.meta.success || res.data) {\r\n desserts.value = res.data?.rows || []\r\n pageData.value = res.data\r\n sumup.value = res.data.sumup ? res.data.sumup : {}\r\n pageDataCopy.value = res.data\r\n }\r\n loading.value = false\r\n })\r\n .catch((error) => {\r\n console.error('加载页面数据失败:', error)\r\n loading.value = false\r\n if (window.$vtk?.message?.loading) {\r\n window.$vtk.message.loading.hide()\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * 搜索查询\r\n */\r\n const searchQuery = () => {\r\n page.pageno = 1\r\n page.limit ??= 10\r\n loadPage()\r\n }\r\n\r\n /**\r\n * 分页变化处理\r\n * @param {Object} pageInfo - 分页信息\r\n */\r\n const getListPage = (pageInfo) => {\r\n page.pageno = pageInfo.pageno\r\n page.limit = pageInfo.limit\r\n loadPage()\r\n }\r\n\r\n /**\r\n * 删除项\r\n * @param {string|number} id - 要删除的项ID\r\n * @param {string} text - 确认提示文本\r\n */\r\n const deleteItem = (id, text) => {\r\n if (!url.delete) {\r\n Message.toast('请设置url.delete属性!', { color: 'warning' })\r\n return\r\n }\r\n\r\n Message.confirm(\r\n { title: '确认删除', text: text ? text : '是否删除?' },\r\n (result) => {\r\n if (result) {\r\n Request.getForm(url.delete, { id: id })\r\n .then((res) => {\r\n if (res.meta.success) {\r\n Message.toast('删除成功', { color: 'success' })\r\n loadPage()\r\n } else {\r\n Message.toast('删除失败', { color: 'warning' })\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('删除失败:', error)\r\n Message.toast('删除失败', { color: 'warning' })\r\n })\r\n }\r\n }\r\n )\r\n }\r\n\r\n /**\r\n * 复制项\r\n * @param {string|number} id - 要复制的项ID\r\n * @param {string} text - 确认提示文本\r\n */\r\n const copyItem = (id, text) => {\r\n if (!url.copy) {\r\n Message.toast('请设置url.copy!', { color: 'warning' })\r\n return\r\n }\r\n\r\n Message.confirm(\r\n { title: '拷贝', text: text ? text : '是否确认拷贝当前数据?' },\r\n (result) => {\r\n if (result) {\r\n Request.getForm(url.copy, { id: id })\r\n .then((res) => {\r\n if (res.meta.success) {\r\n Message.toast('拷贝成功', { color: 'success' })\r\n loadPage()\r\n } else {\r\n Message.toast('拷贝失败', { color: 'warning' })\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('拷贝失败:', error)\r\n Message.toast('拷贝失败', { color: 'warning' })\r\n })\r\n }\r\n }\r\n )\r\n }\r\n\r\n /**\r\n * 编辑项\r\n * @param {Object} record - 要编辑的记录\r\n * @param {Object} modalFormRef - 模态框引用\r\n */\r\n const edit = (record, modalFormRef) => {\r\n if (modalFormRef?.value) {\r\n modalFormRef.value.edit(record)\r\n }\r\n }\r\n\r\n /**\r\n * 添加新项\r\n * @param {Object} modalFormRef - 模态框引用\r\n */\r\n const add = (modalFormRef) => {\r\n if (modalFormRef?.value) {\r\n modalFormRef.value.add()\r\n }\r\n }\r\n\r\n /**\r\n * 模态框确认回调\r\n */\r\n const modalFormOk = () => {\r\n loadPage()\r\n }\r\n\r\n /**\r\n * 导出数据\r\n */\r\n const expData = () => {\r\n overlay.value = true\r\n\r\n if (window.$vtk?.message?.loading) {\r\n window.$vtk.message.loading.show()\r\n }\r\n\r\n const params = getQueryParams()\r\n Request.exp(url.exp, params)\r\n .then((res) => {\r\n if (window.$vtk?.message?.loading) {\r\n window.$vtk.message.loading.hide()\r\n }\r\n\r\n if (res) {\r\n const disposition = res.headers['content-disposition']\r\n const filename = decodeURI(\r\n disposition.substring(\r\n disposition.indexOf('filename=') + 9,\r\n disposition.length\r\n )\r\n )\r\n const blob = new Blob([res.data], {\r\n type: 'application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\r\n })\r\n\r\n if (window.navigator.msSaveOrOpenBlob) {\r\n navigator.msSaveBlob(blob)\r\n } else {\r\n const link = document.createElement('a')\r\n link.style.display = 'none'\r\n link.href = URL.createObjectURL(blob)\r\n link.download = filename\r\n document.body.appendChild(link)\r\n link.click()\r\n document.body.removeChild(link)\r\n }\r\n }\r\n overlay.value = false\r\n })\r\n .catch((error) => {\r\n console.error('导出数据失败:', error)\r\n overlay.value = false\r\n if (window.$vtk?.message?.loading) {\r\n window.$vtk.message.loading.hide()\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * 重置查询参数\r\n */\r\n const resetQueryParams = () => {\r\n Object.keys(queryParam).forEach(key => {\r\n delete queryParam[key]\r\n })\r\n }\r\n\r\n /**\r\n * 重置分页\r\n */\r\n const resetPage = () => {\r\n page.pageno = 1\r\n page.limit = 10\r\n }\r\n\r\n /**\r\n * 更新 URL 配置\r\n * @param {Object} newUrlConfig - 新的 URL 配置\r\n */\r\n const updateUrlConfig = (newUrlConfig) => {\r\n Object.assign(url, newUrlConfig)\r\n }\r\n\r\n // 返回所有状态和方法\r\n return {\r\n // 响应式数据\r\n queryParam,\r\n desserts,\r\n loading,\r\n superQueryParams,\r\n page,\r\n pageData,\r\n sumup,\r\n pageDataCopy,\r\n overlay,\r\n user,\r\n url,\r\n\r\n // 方法\r\n getQueryParams,\r\n loadPage,\r\n searchQuery,\r\n getListPage,\r\n deleteItem,\r\n copyItem,\r\n edit,\r\n add,\r\n modalFormOk,\r\n expData,\r\n resetQueryParams,\r\n resetPage,\r\n updateUrlConfig\r\n }\r\n}\r\n\r\n// 默认导出保持向后兼容\r\nexport default useMixins","<template>\n\t<VContainer fluid class=\"vtk-height pa-0\">\n\t\t<VTabs v-model=\"examType\" bg-color=\"transparent\" height=\"38\" style=\"width: 100%\">\n\t\t\t<VTab @click=\"examAll()\">\n\t\t\t\t<span><VIcon size=\"16\" class=\"mr-1\">mdi-clipboard-arrow-up</VIcon>全部</span>\n\t\t\t</VTab>\n\t\t\t<VTab @click=\"list\">\n\t\t\t\t<span><VIcon size=\"16\" class=\"mr-1\">mdi-star-circle</VIcon>审核</span>\n\t\t\t</VTab>\n\t\t\t<VTab @click=\"tip\">\n\t\t\t\t<span><VIcon size=\"16\" class=\"mr-1\">mdi-hand-heart</VIcon>实施</span>\n\t\t\t</VTab>\n\t\t\t<VTab @click=\"tip\">\n\t\t\t\t<span><VIcon size=\"16\" class=\"mr-1\">mdi-comment-minus</VIcon>评价</span>\n\t\t\t</VTab>\n\t\t\t<VTab @click=\"tip\">\n\t\t\t\t<span><VIcon size=\"16\" class=\"mr-1\">mdi-credit-card-check</VIcon>支付</span>\n\t\t\t</VTab>\n\t\t\t<VSpacer />\n\t\t</VTabs>\n\t\t<VCard elevation=\"0\" style=\"min-height: calc(100% - 38px)\">\n\t\t\t<VCardTitle style=\"height: 88px\">\n\t\t\t\t<VMenu v-if=\"examType == '0' && (expShow || user.grole >= 2)\" offset-y :close-on-content-click=\"false\" location=\"bottom\">\n\t\t\t\t\t<template v-slot:activator=\"{ props }\">\n\t\t\t\t\t\t<VBtn @click=\"exv\" v-bind=\"props\" class=\"bg-orange text-white mr-3\" elevation=\"0\">\n\t\t\t\t\t\t\t<VIcon>mdi-export-variant</VIcon> 导出\n\t\t\t\t\t\t</VBtn>\n\t\t\t\t\t</template>\n\t\t\t\t\t<VCard class=\"pa-3\" width=\"300\">\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<p class=\"mb-2 font-weight-bold\">公共字段</p>\n\t\t\t\t\t\t\t<p class=\"text-caption\">\n\t\t\t\t\t\t\t\t服务事项\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t所属区县\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t所属镇街\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t所属社区\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t申请人证件号\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t申请人姓名\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t残疾人证号\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t性别\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t申请人手机号\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t补助金额\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t开户银行\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t银行卡号\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t收款人姓名\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t收款人证件号\n\t\t\t\t\t\t\t\t<span class=\"text-grey mx-1\">|</span>\n\t\t\t\t\t\t\t\t状态\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<VDivider />\n\t\t\t\t\t\t\t<div v-if=\"queryParam.servState == '1' && projName\">\n\t\t\t\t\t\t\t\t<VCardTitle class=\"pa-0 text-body-1 mb-2 pt-3\">\n\t\t\t\t\t\t\t\t\t<VCheckbox @update:model-value=\"chkAll\" v-model=\"select\" class=\"mt-n1\" hide-details>\n\t\t\t\t\t\t\t\t\t\t<template v-slot:append>\n\t\t\t\t\t\t\t\t\t\t\t<VIcon class=\"active\" style=\"display: none\" size=\"18\">mdi-check-circle</VIcon>\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t</VCheckbox>\n\t\t\t\t\t\t\t\t\t<span class=\"font-weight-bold ml-n2\">拓展字段</span>\n\t\t\t\t\t\t\t\t\t<VSpacer />\n\t\t\t\t\t\t\t\t</VCardTitle>\n\t\t\t\t\t\t\t\t<p v-if=\"formArr?.length > 0\" class=\"mb-0 expBox\">\n\t\t\t\t\t\t\t\t\t<VCheckbox\n\t\t\t\t\t\t\t\t\t\tv-for=\"(item, index) in formArr\"\n\t\t\t\t\t\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t\t\t\t\t\tv-model=\"expArr\"\n\t\t\t\t\t\t\t\t\t\t:label=\"item.label\"\n\t\t\t\t\t\t\t\t\t\t:value=\"{ name: item.name, valu: `${item.label}${item.valu && item.valu.includes('/') && item.valu.includes(':') ? `(${item.valu})` : ''}` }\"\n\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\"\n\t\t\t\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\t\t\t\thide-details>\n\t\t\t\t\t\t\t\t\t\t<template v-slot:append>\n\t\t\t\t\t\t\t\t\t\t\t<VIcon class=\"active\" style=\"display: none\" size=\"18\">mdi-check-circle</VIcon>\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t</VCheckbox>\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<p v-else class=\"text-red text-body-2 mb-2\">{{ projTip }}</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div v-else>\n\t\t\t\t\t\t\t\t<p class=\"mb-3 pt-3 font-weight-bold\">导出提示</p>\n\t\t\t\t\t\t\t\t<p :class=\"queryParam.servState == '1' ? 'text-green' : 'text-red'\" class=\"mb-3 text-body-2\">\n\t\t\t\t\t\t\t\t\t<VIcon size=\"20\" :color=\"queryParam.servState == '1' ? 'green' : 'red'\">{{ queryParam.servState == \"1\" ? \"mdi-progress-check\" : \"mdi-progress-close\" }}</VIcon>\n\t\t\t\t\t\t\t\t\t导出数据仅限已服务信息\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<p class=\"mb-2 text-body-2\" :class=\"projName ? 'text-green' : 'text-red'\">\n\t\t\t\t\t\t\t\t\t<VIcon size=\"20\" :color=\"projName ? 'green' : 'red'\">{{ projName ? \"mdi-progress-check\" : \"mdi-progress-close\" }}</VIcon>\n\t\t\t\t\t\t\t\t\t至少选择一个服务事项导出\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<VBtn @click=\"exp\" :disabled=\"!(projName && queryParam.servState == '1')\" elevation=\"0\" color=\"primary\" class=\"vtk-width mt-3\" size=\"small\">确认导出</VBtn>\n\t\t\t\t\t</VCard>\n\t\t\t\t</VMenu>\n\t\t\t\t<VSpacer />\n\t\t\t\t<vtk-search v-model=\"queryParam\" @search=\"searchQuery\" placeholder=\"输入姓名/身份证查询\" :styles=\"'width:320px'\">\n\t\t\t\t\t<VTextField @click=\"searchProj\" v-model=\"projName\" :title=\"projName\" clearable readonly variant=\"outlined\" placeholder=\"服务事项\" density=\"compact\" hide-details class=\"my-3\"></VTextField>\n\t\t\t\t\t<vtk-area-tabs v-model=\"queryParam.areaCode\" :styles=\"'width:100%'\" />\n\t\t\t\t\t<div v-if=\"examType == 0\" style=\"width: 400px\">\n\t\t\t\t\t\t<vtk-select v-model=\"queryParam.servState\" @change=\"searchQuery\" placeholder=\"服务状态\" list=\"0:服务中/1:已服务\" class=\"mt-3 d-inline-block mr-3 mb-3\" style=\"width: calc(50% - 6px)\" hide-details density=\"compact\" variant=\"outlined\" clearable></vtk-select>\n\t\t\t\t\t\t<vtk-select v-model=\"queryParam.rateState\" @change=\"searchQuery\" placeholder=\"是否评价\" list=\"0:未评价/1:已评价\" class=\"mt-3 d-inline-block\" style=\"width: calc(50% - 6px)\" hide-details density=\"compact\" variant=\"outlined\" clearable></vtk-select>\n\t\t\t\t\t\t<VMenu v-model=\"menu\" :close-on-content-click=\"false\" transition=\"scale-transition\" location=\"bottom\" max-width=\"290px\" min-width=\"auto\">\n\t\t\t\t\t\t\t<template v-slot:activator=\"{ props }\">\n\t\t\t\t\t\t\t\t<VTextField v-model=\"queryParam.servFtime0\" placeholder=\"开始时间\" persistent-hint append-icon=\"mdi-calendar\" class=\"d-inline-block\" style=\"width: calc(50% - 16px)\" hide-details variant=\"outlined\" density=\"compact\" v-bind=\"props\"></VTextField>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<VDatePicker v-model=\"queryParam.servFtime0\" title=\"\" @update:model-value=\"menu = false\" view-mode=\"month\" :max=\"queryParam.servFtime1\"></VDatePicker>\n\t\t\t\t\t\t</VMenu>\n\t\t\t\t\t\t<span class=\"mx-2\">至</span>\n\t\t\t\t\t\t<VMenu v-model=\"menu1\" :close-on-content-click=\"false\" transition=\"scale-transition\" location=\"bottom\" max-width=\"290px\" min-width=\"auto\">\n\t\t\t\t\t\t\t<template v-slot:activator=\"{ props }\">\n\t\t\t\t\t\t\t\t<VTextField v-model=\"queryParam.servFtime1\" placeholder=\"结束时间\" persistent-hint append-icon=\"mdi-calendar\" class=\"d-inline-block\" style=\"width: calc(50% - 15px)\" hide-details variant=\"outlined\" density=\"compact\" v-bind=\"props\"></VTextField>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<VDatePicker v-model=\"queryParam.servFtime1\" title=\"\" @update:model-value=\"menu1 = false\" view-mode=\"month\" :min=\"queryParam.servFtime0\"></VDatePicker>\n\t\t\t\t\t\t</VMenu>\n\t\t\t\t\t\t<vtk-select v-if=\"queryParam.servState == '1'\" @change=\"searchQuery\" v-model=\"queryParam.state\" class=\"mt-3\" placeholder=\"状态\" list=\"1:已通过/0:未通过\" hide-details density=\"compact\" variant=\"outlined\" clearable></vtk-select>\n\t\t\t\t\t</div>\n\t\t\t\t</vtk-search>\n\t\t\t</VCardTitle>\n\t\t\t<VCardText>\n\t\t\t\t<VDataTable :headers=\"headers\" :items=\"desserts\" :loading=\"loading\" disable-pagination loading-text=\"数据加载中...\" class=\"elevation-0\" hide-default-footer>\n\t\t\t\t\t<template v-slot:[`item.objsName`]=\"{ item }\">\n\t\t\t\t\t\t<div class=\"py-3\" @click=\"toView(item)\">\n\t\t\t\t\t\t\t<p class=\"vtk-cursor-pointer text-body-1 font-weight-bold mb-2\">\n\t\t\t\t\t\t\t\t{{ item.objsName }}<span class=\"ml-3 text-grey\">{{ formatIdCard(item.objsCode) }} </span>\n\t\t\t\t\t\t\t\t<VChip class=\"ml-2\" :class=\"getServStateClass(item.servState)\" size=\"small\" label>{{ getServStateText(item.servState) }} </VChip>\n\t\t\t\t\t\t\t\t<VChip class=\"ml-2\" :class=\"getRateStateClass(item.rateState)\" size=\"small\" label>{{ getRateStateText(item.rateState) }} </VChip>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t<VChip class=\"bg-orange-lighten-5 text-orange\" size=\"small\" label> 事项编码:{{ item.projCode }} </VChip>\n\t\t\t\t\t\t\t\t<VChip class=\"text-primary ml-2\" size=\"small\" label> 办件编号:{{ item.inst }} </VChip>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<div class=\"mb-0 mt-2 text-grey\">\n\t\t\t\t\t\t\t\t<div class=\"d-inline-block\" style=\"min-width: 320px\">\n\t\t\t\t\t\t\t\t\t服务名称:<span class=\"text-blue\">{{ item.projName }}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<span>补助金额:{{ item.servAmts }}元</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<VRow class=\"py-2\" style=\"color: #979797c2\">\n\t\t\t\t\t\t\t\t<VCol style=\"max-width: 320px\">\n\t\t\t\t\t\t\t\t\t<span :title=\"item.name\" class=\"d-block\" style=\"color: #979797c2\">申请途径:{{ getServFromText(item.servFrom) }}</span>\n\t\t\t\t\t\t\t\t</VCol>\n\t\t\t\t\t\t\t\t<VCol>\n\t\t\t\t\t\t\t\t\t<span :title=\"item.name\" class=\"d-block\" style=\"color: #979797c2\">申请时间:{{ formatDate(item.servCtime) }}</span>\n\t\t\t\t\t\t\t\t</VCol>\n\t\t\t\t\t\t\t</VRow>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-slot:[`item.actions`]=\"{ item }\">\n\t\t\t\t\t\t<a v-if=\"item.state != 0 && user.areacode?.length == 6 && item.servState == '1'\" @click=\"del(item)\" class=\"text-error\" text>作废</a>\n\t\t\t\t\t\t<div v-if=\"item.state == 0\" class=\"state_btg text-right\"></div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-slot:no-data>\n\t\t\t\t\t\t<vtk-empty />\n\t\t\t\t\t</template>\n\t\t\t\t</VDataTable>\n\t\t\t\t<vtk-page :page-sizes=\"[10, 20]\" :page-data=\"pageData\" @pageChange=\"getListPage\" />\n\t\t\t</VCardText>\n\t\t</VCard>\n\t\t<!-- 服务事项 -->\n\t\t<vtk-proj ref=\"MprojRef\" @toPage=\"toPage\" />\n\t\t<!-- 删除服务 -->\n\t\t<VDialog v-model=\"dialog\" persistent max-width=\"500\">\n\t\t\t<VCard>\n\t\t\t\t<VCardTitle>作废</VCardTitle>\n\t\t\t\t<VCardText class=\"pb-0\">\n\t\t\t\t\t服务作废后将无法恢复,请谨慎操作!!!\n\t\t\t\t\t<VTextarea v-model=\"delNote\" variant=\"outlined\" label=\"请填写作废原因\" class=\"mt-3\" hide-details density=\"compact\"></VTextarea>\n\t\t\t\t</VCardText>\n\t\t\t\t<VCardActions>\n\t\t\t\t\t<VSpacer />\n\t\t\t\t\t<VBtn @click=\"dialog = false\" variant=\"text\">取消</VBtn>\n\t\t\t\t\t<VBtn @click=\"delSave(true)\" variant=\"text\">确定</VBtn>\n\t\t\t\t</VCardActions>\n\t\t\t</VCard>\n\t\t</VDialog>\n\t</VContainer>\n</template>\n\n<script setup>\nimport { ref, watch, onActivated } from 'vue';\nimport { useMixins } from '../../composables/useMixins'\nimport Request from '../../commons/request';\n\n// 定义组件选项\ndefineOptions({\n\tname: 'VtkProj',\n\tinheritAttrs: false,\n});\n\n// 表单列表 URL 配置\nconst urlConfig = {\n\tlist: '/kudas/xfwez/page',\n\texp: '/kudas/xfwez/exp',\n\tdelete: '/kudas/xfwez/delete'\n};\n\n// 使用 mixins composable\nconst {\n\tpageData,\n\tgetListPage,\n\tloadPage,\n\texpData,\n\tdesserts,\n\tloading,\n\tqueryParam: mixinQueryParam,\n\turl\n} = useMixins(urlConfig);\n\n// 合并 queryParam\nObject.assign(mixinQueryParam, {});\nconst queryParam = mixinQueryParam;\n\n// 响应式数据\nconst user = ref({});\nconst examType = ref(1);\n\nconst headers = ref([\n\t{ title: '事项', key: 'objsName', sortable: false },\n\t{ title: '状态', key: 'actions', sortable: false, align: 'end' },\n]);\n\n// 主题筛选\nconst permits = ref([]);\nconst projName = ref('');\nconst projTip = ref('');\nconst bizType = ref('');\nconst expShow = ref(false);\nconst menu = ref(false);\nconst menu1 = ref(false);\n\n// 导出\nconst expArr = ref([]);\nconst formArr = ref([]);\nconst select = ref(false);\nconst selectAll = ref([]);\n\n// 删除\nconst dialog = ref(false);\nconst delItem = ref({});\nconst delNote = ref('');\n\n// ref\nconst MprojRef = ref(null);\n\n// 监听器\nwatch(expArr, (newVal) => {\n\tif (newVal.length < selectAll.value.length) {\n\t\tselect.value = false;\n\t}\n}, { deep: true });\n\n// 生命周期\nonActivated(() => {\n\talert('onActivated');\n\tlist();\n\t// 监听接收消息,刷新页面\n\twindow.addEventListener('storage', (event) => {\n\t\tif (JSON.parse(event?.newValue)?.fwez) {\n\t\t\texamType.value == '0' ? examAll() : loadPage();\n\t\t}\n\t});\n});\n\n// 方法\n// 全选\nconst chkAll = (e) => {\n\texpArr.value = e ? selectAll.value : [];\n};\n\nconst list = () => {\n\tbizType.value = '';\n\texpShow.value = false;\n\tuser.value = getUserInfo();\n\tpermits.value = [];\n\tuser.value.permits?.forEach((e) => {\n\t\tif (e.permNkey.includes('biz_type')) {\n\t\t\tpermits.value.push(e);\n\t\t\tbizType.value = bizType.value + e.permNkey.slice(9) + ',';\n\t\t} else if (e.permNkey == 'btn_expo') {\n\t\t\texpShow.value = true;\n\t\t}\n\t});\n\tqueryParam.bizType = bizType.value;\n\texamWait();\n};\n\n// 获取用户信息\nconst getUserInfo = () => {\n\ttry {\n\t\t// 实际项目中从存储或状态管理获取\n\t\treturn window.$vtk?.storage?.get('_mis_acis_users') || {};\n\t} catch (error) {\n\t\tconsole.warn('获取用户信息失败:', error);\n\t\treturn {};\n\t}\n};\n\n// 待审\nconst examWait = () => {\n\texamType.value = 1;\n\tqueryParam.operateLeve = user.value.areacode?.length;\n\tqueryParam.servState = '0';\n\tloadPage();\n};\n\n// 全部审核\nconst examAll = () => {\n\texamType.value = 0;\n\tdelete queryParam.operateLeve;\n\tdelete queryParam.servState;\n\tloadPage();\n};\n\n// 审核\nconst toView = (item) => {\n\tconst url = item.servState == 1\n\t\t? `#/mino/suse/view/${item.inst}?ddtab=true`\n\t\t: `#/mino/suse/exam/${item.inst}?ddtab=true`;\n\twindow.open(url);\n};\n\n// 服务事项查询/筛选\nconst searchProj = () => {\n\tMprojRef.value?.add(queryParam.projCode);\n};\n\nconst toPage = (param) => {\n\tprojName.value = param.projName;\n\tqueryParam.projCode = param.projCode;\n\tdelete queryParam.bizType;\n\tsearchQuery();\n};\n\nconst searchQuery = () => {\n\t// 搜索查询逻辑\n\tloadPage();\n};\n\n// 导出相关\nconst exv = () => {\n\tif (projName.value && queryParam.servState == '1') {\n\t\texpArr.value = [];\n\t\tformArr.value = [];\n\t\t// 显示加载状态\n\t\tRequest.postJson('/kudas/xfwez/exv', { codex: queryParam }).then((res) => {\n\t\t\tif (res.meta.success) {\n\t\t\t\tJSON.parse(res.data.formJson).forEach((item) => {\n\t\t\t\t\tif (['text', 'radio', 'number', 'time', 'checkbox', 'textarea', 'select'].includes(item.type)) {\n\t\t\t\t\t\titem.value = {\n\t\t\t\t\t\t\tname: item.name,\n\t\t\t\t\t\t\tvalu: `${item.label}${item.valu && item.valu.includes('/') && item.valu.includes(':') ? `(${item.valu})` : ''}`\n\t\t\t\t\t\t};\n\t\t\t\t\t\tformArr.value.push(item);\n\t\t\t\t\t\tselectAll.value.push(item.value);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tprojTip.value = res.meta.message;\n\t\t\t}\n\t\t});\n\t}\n};\n\nconst exp = () => {\n\tqueryParam.fields = expArr.value;\n\texpData();\n};\n\n// 服务作废\nconst del = (item) => {\n\tdialog.value = true;\n\tdelItem.value = item;\n\tdelNote.value = '';\n};\n\nconst delSave = () => {\n\tif (delNote.value) {\n\t\tRequest.postForm(url.delete, { id: delItem.value.id, note: delNote.value }).then((res) => {\n\t\t\tif (res.meta.success) {\n\t\t\t\t// 显示成功消息\n\t\t\t\tdialog.value = false;\n\t\t\t\tloadPage();\n\t\t\t} else {\n\t\t\t\t// 显示失败消息\n\t\t\t}\n\t\t});\n\t} else {\n\t\t// 显示错误消息\n\t}\n};\n\n// 提示\nconst tip = () => {\n\t// 显示应用开发中的消息\n};\n\n// 工具函数\nconst formatIdCard = (idcard) => {\n\tif (!idcard) return '';\n\treturn idcard.replace(/^(.{6})(?:\\d+)(.{4})$/, '$1********$2');\n};\n\nconst formatDate = (dateStr) => {\n\tif (!dateStr) return '';\n\tconst date = new Date(dateStr);\n\treturn `${date.getFullYear()}年${String(date.getMonth() + 1).padStart(2, '0')}月${String(date.getDate()).padStart(2, '0')}日 ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;\n};\n\nconst getServStateClass = (state) => {\n\treturn state == '0' ? 'bg-blue-lighten-5 text-blue' : 'bg-green-lighten-5 text-green';\n};\n\nconst getServStateText = (state) => {\n\treturn state == '0' ? '服务中' : '已服务';\n};\n\nconst getRateStateClass = (state) => {\n\treturn state == '0' ? 'bg-orange-lighten-5 text-orange' : 'bg-blue-lighten-5 text-blue';\n};\n\nconst getRateStateText = (state) => {\n\treturn state == '0' ? '未评价' : '已评价';\n};\n\nconst getServFromText = (from) => {\n\tconst fromMap = {\n\t\t'100': '特殊渠道',\n\t\t'101': '移动端代办',\n\t\t'102': '窗口端通办',\n\t\t'200': '特殊渠道',\n\t\t'210': '浙里办App',\n\t\t'211': '浙里办微信小程序',\n\t\t'212': '浙里办支付宝小程序',\n\t\t'230': '微信小程序',\n\t\t'240': '支付宝小程序',\n\t\t'250': '自助机',\n\t\t'300': '特殊渠道',\n\t\t'310': '服务外包代办'\n\t};\n\treturn fromMap[from] || from;\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.state_btg {\n\tpadding-right: 0;\n\theight: 100%;\n\tbackground: url(../../assets/img/objs_btg.png) no-repeat;\n\tbackground-size: 80px;\n\tbackground-position: 100% 100%;\n}\n\n:deep(.v-tab) {\n\tbackground: url(../../assets/img/tab-2.png) no-repeat;\n\tbackground-size: 100% 100%;\n\twidth: 150px;\n\tmargin-left: -11px;\n\tborder-top-left-radius: 20px;\n\tborder-top-right-radius: 20px;\n\tspan {\n\t\tz-index: 99;\n\t}\n}\n\n/* Dark theme */\n.v-theme--dark {\n\t:deep(.v-tab) {\n\t\tbackground: url(../../assets/img/tab-4.png) no-repeat;\n\t\tbackground-size: 100% 100%;\n\t}\n\n\t:deep(.v-tabs__slider) {\n\t\tbackground: url(../../assets/img/tab-3.png) no-repeat !important;\n\t\tbackground-size: 100% 100% !important;\n\t}\n}\n\n:deep(.v-tab::before),\n:deep(.v-tab:focus::before),\n:deep(.v-tab:hover::before) {\n\tbackground-color: transparent !important;\n\topacity: 0 !important;\n}\n\n:deep(.v-tabs__slider) {\n\theight: 38px !important;\n\tbackground: url(../../assets/img/tab-1.png) no-repeat;\n\tbackground-size: 100% 100%;\n}\n\n.expBox {\n\t:deep(td) {\n\t\tborder-bottom: thin solid rgba(123, 123, 123, 0.22);\n\t}\n\n\t:deep(.v-data-table__empty-wrapper td) {\n\t\tborder: none;\n\t}\n\n\t:deep(.v-checkbox.v-selection-control--dirty) {\n\t\tbackground-color: rgba(33, 149, 243, 0.06) !important;\n\n\t\t.v-label {\n\t\t\tcolor: rgb(33, 150, 243) !important;\n\t\t}\n\n\t\t.active {\n\t\t\tcolor: rgb(33, 150, 243);\n\t\t\tdisplay: inline-block !important;\n\t\t}\n\t}\n\n\t:deep(.v-selection-control__input) {\n\t\tdisplay: none;\n\t}\n\n\t:deep(.v-checkbox) {\n\t\tpadding: 4px 8px 4px 10px;\n\t\tborder-radius: 6px;\n\t\tbackground-color: rgba(117, 117, 117, 0.06);\n\n\t\t.v-label {\n\t\t\tmargin-top: 3px;\n\t\t\tfont-size: 12px;\n\t\t}\n\t}\n}\n</style>\n","<template>\n <VRadioGroup v-bind=\"attrs\" :modelValue=\"modelValue\" @update:modelValue=\"onUpdate\">\n <VRadio\n v-for=\"item in items\"\n :key=\"item.id || item.code\"\n :label=\"item.codeValue\"\n :value=\"item.code\"\n />\n </VRadioGroup>\n</template>\n\n<script setup>\nimport { ref, onMounted, useAttrs } from 'vue';\nimport Request from '../../commons/request';\n\n// 定义组件名称\ndefineOptions({\n name: \"VtkRadio\",\n inheritAttrs: false,\n});\n// 定义 props\nconst props = defineProps({\n /**\n * 字典来源:\n * - 静态数据,如:\"0:否/1:是\"\n * - 字典键名,如:\"DISABLE_TYPE\"\n */\n list: {\n type: String,\n required: true,\n },\n modelValue: {\n type: [String, Number],\n default: null,\n },\n});\n\n// 定义 emit 事件\nconst emit = defineEmits(['update:modelValue']);\n\n// 获取透传属性(替代 $attrs)\nconst attrs = useAttrs();\n\n// 响应式数据\nconst items = ref([]);\n\n// 处理静态数据\nconst statc = () => {\n props.list.split('/').forEach(it => {\n const [code, codeValue] = it.split(':');\n items.value.push({ code, codeValue });\n });\n};\n\n// 请求远程字典\nconst miscs = async () => {\n try {\n const res = await Request.getForm(`dict/misc/list/${props.list}`);\n items.value = res.data || [];\n } catch (error) {\n console.error('[VtkRadio] Failed to load dictionary:', error);\n items.value = [];\n }\n};\n\n// 更新 v-model 值\nconst onUpdate = (val) => {\n emit('update:modelValue', val);\n};\n\n// 初始化数据\nonMounted(() => {\n if (props.list.includes(':')) {\n statc();\n } else {\n miscs();\n }\n});\n</script>\n\n<style scoped>\n</style>","<template>\r\n <div class=\"search\">\r\n <VMenu \r\n v-model=\"menu\" \r\n @update:model-value=\"obtain\" \r\n location=\"bottom\" \r\n offset=\"12\" \r\n :close-on-content-click=\"false\"\r\n >\r\n <template v-slot:activator=\"{ props }\">\r\n <VTextField \r\n v-model=\"queryParam.condition\" \r\n :placeholder=\"$attrs.placeholder || '请输入查询内容'\"\r\n :style=\"$attrs.styles\" \r\n class=\"box\" \r\n density=\"compact\" \r\n variant=\"outlined\" \r\n hide-details\r\n @click:append=\"search\" \r\n @keyup.enter=\"search\" \r\n @click:clear=\"(queryParam.condition = ''), search()\"\r\n clearable\r\n >\r\n <template v-slot:append-inner>\r\n <VBadge \r\n dot \r\n :content=\"initialIndex\" \r\n :model-value=\"initialIndex > 0\" \r\n color=\"error\"\r\n class=\"advanced-badge\"\r\n >\r\n <span \r\n v-bind=\"props\"\r\n class=\"text-blue vtk-cursor-pointer d-inline-flex align-center text-body-2\"\r\n >\r\n 高级\r\n </span>\r\n </VBadge>\r\n </template>\r\n </VTextField>\r\n </template>\r\n \r\n <VCard style=\"width: 380px;margin-right: -16px;\">\r\n <VCardTitle class=\"pr-3 d-flex justify-space-between align-center pb-5\">\r\n <span>高级搜索</span>\r\n <VBtn class=\"mx-0\" variant=\"text\" icon @click=\"close\" size=\"small\">\r\n <VIcon>mdi-close</VIcon>\r\n </VBtn>\r\n </VCardTitle>\r\n \r\n <VCardText>\r\n <slot></slot>\r\n </VCardText>\r\n \r\n <VCardActions class=\"pt-0 px-4 pb-3\">\r\n <slot name=\"actions\"></slot>\r\n <VSpacer />\r\n <VBtn @click=\"search\" variant=\"flat\" color=\"primary\">\r\n <VIcon class=\"mr-1\">mdi-magnify</VIcon>搜索\r\n </VBtn>\r\n <VBtn @click=\"reset\" variant=\"flat\" color=\"error\">\r\n <VIcon class=\"mr-1\">mdi-sync</VIcon>重置\r\n </VBtn>\r\n </VCardActions>\r\n </VCard>\r\n </VMenu>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, onMounted, watch } from 'vue';\r\n\r\ndefineOptions({\r\n name: \"VtkSearch\"\r\n});\r\n\r\nconst props = defineProps({\r\n value: {\r\n type: Object,\r\n default: () => ({})\r\n }\r\n});\r\n\r\nconst emit = defineEmits(['update:value', 'search']);\r\n\r\n// 响应式数据\r\nconst user = ref({});\r\nconst menu = ref(false);\r\nconst queryParam = ref({ ...props.value });\r\nconst initialIndex = ref(0);\r\n\r\n// 监听 props.value 的变化\r\nwatch(\r\n () => props.value,\r\n (newVal) => {\r\n queryParam.value = { ...newVal };\r\n },\r\n { deep: true }\r\n);\r\n\r\nonMounted(() => {\r\n user.value = JSON.parse(localStorage.getItem(\"_mis_acis_users\") || \"{}\");\r\n initialIndex.value = 0;\r\n});\r\n\r\n// 方法\r\nconst obtain = () => {\r\n if (!menu.value) {\r\n initialIndex.value = 0;\r\n }\r\n};\r\n\r\nconst close = () => {\r\n menu.value = false;\r\n obtain();\r\n};\r\n\r\nconst search = () => {\r\n close();\r\n emit('update:value', queryParam.value);\r\n emit(\"search\");\r\n};\r\n\r\n// 重置\r\nconst reset = () => {\r\n // 简化版重置逻辑\r\n Object.keys(queryParam.value).forEach(key => {\r\n if (key !== 'condition') {\r\n delete queryParam.value[key];\r\n }\r\n });\r\n\r\n delete queryParam.value.condition;\r\n initialIndex.value = 0;\r\n emit('update:value', queryParam.value);\r\n emit(\"search\");\r\n menu.value = false;\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.search {\r\n position: relative;\r\n min-width: 380px;\r\n min-height: 40px;\r\n}\r\n\r\n.box {\r\n min-width: 380px;\r\n min-height: 40px;\r\n}\r\n\r\n:deep(.box .v-field__append-inner) {\r\n cursor: pointer;\r\n padding-left: 16px !important;\r\n padding-right: 4px !important;\r\n border-left: 1px #cccccc88 solid;\r\n min-width: 50px;\r\n display: flex;\r\n align-items: center;\r\n}\r\n\r\n</style>","<template>\n <VSelect \n v-bind=\"filteredAttrs\" \n :items=\"items\" \n item-title=\"codeValue\" \n item-value=\"code\" \n :multiple=\"multi\"\n :menu-props=\"{ offsetY: true }\" \n @update:model-value=\"$emit('update:modelValue', $event)\"\n />\n</template>\n\n<script setup>\nimport { ref, onMounted, useAttrs, computed } from 'vue'\nimport Request from \"../../commons/request\";\n\n// 定义组件名称和选项\ndefineOptions({\n name: \"VtkSelect\",\n inheritAttrs: false\n});\n\n// 定义 props\nconst props = defineProps({\n // 数据库字段名字(DISABLE_TYPE) 或 静态的字段(0:否/1:是)\n list: {\n type: String,\n default: null,\n },\n multi: {\n type: Boolean,\n default: false,\n },\n});\n\n// 定义 emits\nconst emit = defineEmits(['update:modelValue']);\n\n// 获取所有传递的属性\nconst attrs = useAttrs();\n\n// 过滤属性,排除组件内部使用的属性\nconst filteredAttrs = computed(() => {\n const { list, multi, ...rest } = attrs;\n return rest;\n});\n\n// 响应式数据\nconst items = ref([]);\n\n// 方法定义\nconst miscs = () => {\n Request.getForm(`dict/misc/list/${props.list}`).then((res) => {\n items.value = res.data;\n });\n};\n\nconst statc = () => {\n if (!props.list) return;\n \n props.list.split(\"/\").forEach((it) => {\n const its = it.split(\":\");\n items.value.push({ code: its[0], codeValue: its[1] });\n });\n};\n\n// 生命周期钩子\nonMounted(() => {\n if (props.list) {\n if (props.list.includes(\":\")) {\n statc();\n } else {\n miscs();\n }\n }\n});\n\n// 使用方式\n// <vtk-select\n// v-model=\"value\"\n// list=\"YOUR_LIST\"\n// variant=\"outlined\" <!-- 样式变体 -->\n// density=\"compact\" <!-- 密度 'default' | 'comfortable' | 'compact' -->\n// clearable <!-- 可清除 -->\n// placeholder=\"请选择\" <!-- 占位符 -->\n// :rules=\"rules\" <!-- 验证规则 -->\n// disabled <!-- 禁用状态 -->\n// readonly <!-- 只读状态 -->\n// hide-details <!-- 隐藏详情信息 -->\n// />\n\n</script>\n\n<style scoped>\n::-webkit-scrollbar {\n width: 6px;\n}\n\n::-webkit-scrollbar-thumb {\n border-radius: 3px;\n height: 100px;\n background-color: #007acc;\n}\n</style>","<template>\r\n\t<VStepper class=\"elevation-0\" v-model=\"stepIndex\">\r\n\t\t<VStepperHeader class=\"elevation-0\" style=\"overflow: hidden;\">\r\n\t\t\t<VRow class=\"stepList\">\r\n\t\t\t\t<VCol class=\"pl-0 colItem\" v-for=\"(item, index) in step\" :key=\"index\" style=\"\">\r\n\t\t\t\t\t<div class=\"first-box1 last-box pl-10 py-5 stepItem\" :class=\"stepIndex > index? 'selected' : ''\"\r\n\t\t\t\t\t\t:complete=\"stepIndex > index\" :step=\"index + 1\">\r\n\t\t\t\t\t\t{{ item }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</VCol>\r\n\t\t\t</VRow>\r\n\t\t</VStepperHeader>\r\n\r\n\t\t<VStepperWindow>\r\n\t\t\t<VStepperWindowItem v-for=\"(item, index) in list\" :key=\"index\" :value=\"index + 1\">\r\n\t\t\t\t<slot :name=\"index + 1\"></slot>\r\n\t\t\t</VStepperWindowItem>\r\n\t\t\t<slot></slot>\r\n\t\t</VStepperWindow>\r\n\t</VStepper>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, watch, onMounted } from 'vue';\r\n\r\n// 定义组件名称\r\ndefineOptions({\r\n\tname: \"VtkStepper\",\r\n\tinheritAttrs: false,\r\n});\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n\tlist: {\r\n\t\ttype: String,\r\n\t\tdefault: null,\r\n\t},\r\n\tel: {\r\n\t\ttype: Number,\r\n\t\tdefault: 1,\r\n\t},\r\n});\r\n\r\n// 响应式数据\r\nconst stepIndex = ref(props.el);\r\nconst step = ref([]);\r\n\r\n// 监听el属性变化\r\nwatch(() => props.el, (val) => {\r\n\tstepIndex.value = val;\r\n});\r\n\r\n// 处理内容\r\nconst content = () => {\r\n\tif (props.list) {\r\n\t\tstep.value = props.list.split(\",\");\r\n\t}\r\n};\r\n\r\n// 组件挂载时执行\r\nonMounted(() => {\r\n\tcontent();\r\n});\r\n\r\n// 监听list变化\r\nwatch(() => props.list, () => {\r\n\tcontent();\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n// 颜色变量定义\r\n$color-background: #c7ccd538;\r\n$color-selected: #165dff;\r\n$color-white: #fff;\r\n$color-light-bg: #f2f3f5;\r\n$color-dark-bg: #1e1e1e;\r\n\r\n.v-stepper__step {\r\n\tbackground: $color-background;\r\n\tposition: relative;\r\n}\r\n\r\n// 隐藏步骤数字\r\n:deep(.v-stepper__step__step) {\r\n\tdisplay: none !important;\r\n}\r\n\r\n.stepItem {\r\n\talign-items: center;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tpadding: 24px;\r\n\tposition: relative;\r\n\tbackground: $color-background;\r\n\r\n\t// 暗色主题样式\r\n\t.v-theme--dark & {\r\n\t\tcolor: rgba(255, 255, 255, 0.5);\r\n\t}\r\n\r\n\t// 选中状态\r\n\t&.selected {\r\n\t\tbackground: $color-selected;\r\n\t\tcolor: $color-white !important;\r\n\r\n\t\t&.last-box::after {\r\n\t\t\tborder-color: transparent transparent transparent $color-selected;\r\n\t\t}\r\n\r\n\t\t:deep(.v-stepper__label) {\r\n\t\t\tcolor: $color-white !important;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n.colItem {\r\n\t&:first-child .first-box1::before {\r\n\t\tborder-color: transparent !important;\r\n\t}\r\n\r\n\t&:last-child .last-box::after {\r\n\t\tborder-color: transparent !important;\r\n\t}\r\n}\r\n\r\n.first-box1::before {\r\n\tposition: absolute;\r\n\tleft: 0;\r\n\tcontent: \"\";\r\n\twidth: 0;\r\n\theight: 0;\r\n\tz-index: 0;\r\n\tborder: 30px solid;\r\n\tborder-color: transparent transparent transparent $color-white;\r\n\r\n\t.v-theme--dark & {\r\n\t\tborder-color: transparent transparent transparent $color-dark-bg;\r\n\t}\r\n}\r\n\r\n.last-box::after {\r\n\tposition: absolute;\r\n\tright: -70px;\r\n\tcontent: \"\";\r\n\tz-index: 1;\r\n\twidth: 0;\r\n\theight: 0;\r\n\tborder: 35px solid;\r\n\tborder-color: transparent transparent transparent $color-light-bg;\r\n\r\n\t.v-theme--dark & {\r\n\t\tborder-color: transparent transparent transparent $color-background;\r\n\t}\r\n}\r\n\r\n.theme--dark.v-stepper {\r\n\tbackground: transparent;\r\n}\r\n</style>","/**\r\n * 将数值转换成中文 '0:未启/1:已启'\r\n * \r\n * @param {*} val 数值\r\n * @param {*} map 值对\r\n * @return {string} 中文值\r\n */\r\nexport function dict(val, map) {\r\n let value = \"\";\r\n if (val && val.includes(\",\")) {\r\n value = val.split(\",\").map(item => pre(item, map)).join();\r\n } else {\r\n value = pre(val, map)\r\n }\r\n return value;\r\n}\r\n\r\nfunction pre(value, map) {\r\n if (value) {\r\n var val = Array.isArray(value) ? value : value.split(\",\");\r\n var maps = map?.split(\"/\");\r\n var results = []; // 创建一个空数组,用于存储匹配到的值\r\n // 遍历 val 数组\r\n for (var j = 0; j < val?.length; j++) {\r\n var currentVal = val[j]; // 获取当前要查找的键\r\n for (var i in maps) {\r\n var kv = maps[i].split(\":\");\r\n if (kv[0] == currentVal) {\r\n results.push(kv[1]); // 将匹配到的值添加到结果数组中\r\n break; // 找到匹配项后,跳出内层循环\r\n }\r\n }\r\n }\r\n return results.length > 0 ? results.join() : \"其他\";\r\n }\r\n\r\n}\r\n\r\n\r\n/**\r\n * 1,2字符残疾类别转换\r\n * \r\n * @param {*} val 数值\r\n * @return {string} 中文值\r\n */\r\nexport function analyType(val) {\r\n if (!val) {\r\n return ''\r\n }\r\n let newVal = ''\r\n let arr = ['视力', '听力', '言语', '肢体', '智力', '精神', '多重']\r\n for (let i = 1; i < 8; i++) {\r\n if (i === 1) {\r\n newVal = val.replace(i.toString(), arr[i - 1])\r\n } else {\r\n newVal = newVal.replace(i.toString(), arr[i - 1])\r\n }\r\n }\r\n return newVal;\r\n}\r\nexport function analyLevel(val) {\r\n if (!val) {\r\n return ''\r\n }\r\n let newVal = ''\r\n let arr = ['一级', '二级', '三级', '四级', '不限等级']\r\n for (let i = 1; i < 7; i++) {\r\n if (i === 1) {\r\n newVal = val.replace(i.toString(), arr[i - 1])\r\n } else {\r\n newVal = newVal.replace(i.toString(), arr[i - 1])\r\n }\r\n }\r\n return newVal;\r\n}","/**\r\n * \r\n * @param {*} value 需格式化的时间\r\n * @param {*} fmt 格式\r\n */\r\nexport function date(value, fmt) {\r\n if (!value || value == '无' || value == null) {\r\n fmt = '无';\r\n return fmt;\r\n }\r\n let getDate = new Date(value)\r\n let o = {\r\n 'M+': getDate.getMonth() + 1,\r\n 'd+': getDate.getDate(),\r\n 'h+': getDate.getHours(),\r\n 'm+': getDate.getMinutes(),\r\n 's+': getDate.getSeconds(),\r\n 'q+': Math.floor((getDate.getMonth() + 3) / 3),\r\n 'S': getDate.getMilliseconds()\r\n }\r\n if (/(y+)/.test(fmt)) {\r\n fmt = fmt.replace(RegExp.$1, (getDate.getFullYear() + '').substr(4 - RegExp.$1.length))\r\n }\r\n for (let k in o) {\r\n if (new RegExp('(' + k + ')').test(fmt)) {\r\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))\r\n }\r\n }\r\n return fmt\r\n\r\n}\r\n\r\n\r\n/**\r\n * 数字格式化 '0,000.00'\r\n * @param {*} val 数值\r\n * @param {*} fmt 格式\r\n * @return {string} 数字字符串\r\n */\r\nexport function num(val, fmt) {\r\n if (isNaN(val) || val === '' || val === null) {\r\n return val;\r\n }\r\n\r\n // 移除了对Strings和Datetime的依赖,这些在当前上下文中未定义\r\n var numValue = parseFloat(val);\r\n var neg = numValue < 0 ? \"-\" : \"\"; // 正负数\r\n var absValue = Math.abs(numValue);\r\n\r\n // 解析格式字符串,确定小数位数\r\n var fix = 0;\r\n if (fmt && fmt.includes('.')) {\r\n fix = fmt.length - fmt.lastIndexOf('.') - 1;\r\n }\r\n\r\n // 是否需要千分位分隔符\r\n var needSep = fmt && fmt.includes(',');\r\n\r\n // 处理小数部分\r\n var xs = fix > 0 ? absValue.toFixed(fix) : Math.round(absValue);\r\n var decimalPart = fix > 0 ? '.' + xs.toString().split('.')[1] : '';\r\n\r\n // 处理整数部分\r\n var integerPart = fix > 0 ? Math.floor(absValue).toString() : xs.toString();\r\n\r\n // 添加千分位分隔符\r\n if (needSep && integerPart.length > 3) {\r\n integerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n }\r\n\r\n return neg + integerPart + decimalPart;\r\n}\r\n\r\n\r\n/**\r\n * 年龄\r\n * @param {*} val 时间 yyyy-MM-dd\r\n * @return {string} 年龄\r\n */\r\nexport function age(val) {\r\n let birthdays = new Date(val.slice(0, 10).replace(/-/g, \"/\"));\r\n let d = new Date();\r\n let age = d.getFullYear() - birthdays.getFullYear() - ((d.getMonth() < birthdays.getMonth() || (d.getMonth() === birthdays.getMonth() && d.getDate() < birthdays.getDate())) ? 1 : 0);\r\n return age;\r\n}\r\n\r\n/**\r\n * 指定中文大于len,用...省略号表示,达到美观效果\r\n * @param {*} val 需格式的中文\r\n * @param {*} len 需格式的长度\r\n */\r\nexport function txt(val, len) {\r\n if (val?.length > len) {\r\n return val.slice(0, len) + \"...\";\r\n } else {\r\n return val;\r\n }\r\n\r\n}\r\n\r\n/**\r\n * 取数据绝对值\r\n * @param {*} val 手机号\r\n */\r\nexport function abs(val) {\r\n return isNaN(val) ? 0 : Math.abs(val)\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","/**\r\n * 脱敏手机号码\r\n * @param {*} val 手机号\r\n * @return {string} 手机号码\r\n */\r\nexport function mobile(val) {\r\n return val.replace(/(\\d{3})\\d{4}(\\d{4})/, \"$1****$2\");\r\n}\r\n\r\n\r\n/**\r\n * 脱敏身份证号\r\n * @param {*} val 身份证号\r\n * @return {string} 身份证号\r\n */\r\nexport function idcard(val) {\r\n if (val) {\r\n return val.replace(/^(.{4})(?:\\d+)(.{4})$/, \"$1** **** ****$2\");\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","export const red = {\n base: '#f44336',\n lighten5: '#ffebee',\n lighten4: '#ffcdd2',\n lighten3: '#ef9a9a',\n lighten2: '#e57373',\n lighten1: '#ef5350',\n darken1: '#e53935',\n darken2: '#d32f2f',\n darken3: '#c62828',\n darken4: '#b71c1c',\n accent1: '#ff8a80',\n accent2: '#ff5252',\n accent3: '#ff1744',\n accent4: '#d50000'\n};\nexport const pink = {\n base: '#e91e63',\n lighten5: '#fce4ec',\n lighten4: '#f8bbd0',\n lighten3: '#f48fb1',\n lighten2: '#f06292',\n lighten1: '#ec407a',\n darken1: '#d81b60',\n darken2: '#c2185b',\n darken3: '#ad1457',\n darken4: '#880e4f',\n accent1: '#ff80ab',\n accent2: '#ff4081',\n accent3: '#f50057',\n accent4: '#c51162'\n};\nexport const purple = {\n base: '#9c27b0',\n lighten5: '#f3e5f5',\n lighten4: '#e1bee7',\n lighten3: '#ce93d8',\n lighten2: '#ba68c8',\n lighten1: '#ab47bc',\n darken1: '#8e24aa',\n darken2: '#7b1fa2',\n darken3: '#6a1b9a',\n darken4: '#4a148c',\n accent1: '#ea80fc',\n accent2: '#e040fb',\n accent3: '#d500f9',\n accent4: '#aa00ff'\n};\nexport const deepPurple = {\n base: '#673ab7',\n lighten5: '#ede7f6',\n lighten4: '#d1c4e9',\n lighten3: '#b39ddb',\n lighten2: '#9575cd',\n lighten1: '#7e57c2',\n darken1: '#5e35b1',\n darken2: '#512da8',\n darken3: '#4527a0',\n darken4: '#311b92',\n accent1: '#b388ff',\n accent2: '#7c4dff',\n accent3: '#651fff',\n accent4: '#6200ea'\n};\nexport const indigo = {\n base: '#3f51b5',\n lighten5: '#e8eaf6',\n lighten4: '#c5cae9',\n lighten3: '#9fa8da',\n lighten2: '#7986cb',\n lighten1: '#5c6bc0',\n darken1: '#3949ab',\n darken2: '#303f9f',\n darken3: '#283593',\n darken4: '#1a237e',\n accent1: '#8c9eff',\n accent2: '#536dfe',\n accent3: '#3d5afe',\n accent4: '#304ffe'\n};\nexport const blue = {\n base: '#2196f3',\n lighten5: '#e3f2fd',\n lighten4: '#bbdefb',\n lighten3: '#90caf9',\n lighten2: '#64b5f6',\n lighten1: '#42a5f5',\n darken1: '#1e88e5',\n darken2: '#1976d2',\n darken3: '#1565c0',\n darken4: '#0d47a1',\n accent1: '#82b1ff',\n accent2: '#448aff',\n accent3: '#2979ff',\n accent4: '#2962ff'\n};\nexport const lightBlue = {\n base: '#03a9f4',\n lighten5: '#e1f5fe',\n lighten4: '#b3e5fc',\n lighten3: '#81d4fa',\n lighten2: '#4fc3f7',\n lighten1: '#29b6f6',\n darken1: '#039be5',\n darken2: '#0288d1',\n darken3: '#0277bd',\n darken4: '#01579b',\n accent1: '#80d8ff',\n accent2: '#40c4ff',\n accent3: '#00b0ff',\n accent4: '#0091ea'\n};\nexport const cyan = {\n base: '#00bcd4',\n lighten5: '#e0f7fa',\n lighten4: '#b2ebf2',\n lighten3: '#80deea',\n lighten2: '#4dd0e1',\n lighten1: '#26c6da',\n darken1: '#00acc1',\n darken2: '#0097a7',\n darken3: '#00838f',\n darken4: '#006064',\n accent1: '#84ffff',\n accent2: '#18ffff',\n accent3: '#00e5ff',\n accent4: '#00b8d4'\n};\nexport const teal = {\n base: '#009688',\n lighten5: '#e0f2f1',\n lighten4: '#b2dfdb',\n lighten3: '#80cbc4',\n lighten2: '#4db6ac',\n lighten1: '#26a69a',\n darken1: '#00897b',\n darken2: '#00796b',\n darken3: '#00695c',\n darken4: '#004d40',\n accent1: '#a7ffeb',\n accent2: '#64ffda',\n accent3: '#1de9b6',\n accent4: '#00bfa5'\n};\nexport const green = {\n base: '#4caf50',\n lighten5: '#e8f5e9',\n lighten4: '#c8e6c9',\n lighten3: '#a5d6a7',\n lighten2: '#81c784',\n lighten1: '#66bb6a',\n darken1: '#43a047',\n darken2: '#388e3c',\n darken3: '#2e7d32',\n darken4: '#1b5e20',\n accent1: '#b9f6ca',\n accent2: '#69f0ae',\n accent3: '#00e676',\n accent4: '#00c853'\n};\nexport const lightGreen = {\n base: '#8bc34a',\n lighten5: '#f1f8e9',\n lighten4: '#dcedc8',\n lighten3: '#c5e1a5',\n lighten2: '#aed581',\n lighten1: '#9ccc65',\n darken1: '#7cb342',\n darken2: '#689f38',\n darken3: '#558b2f',\n darken4: '#33691e',\n accent1: '#ccff90',\n accent2: '#b2ff59',\n accent3: '#76ff03',\n accent4: '#64dd17'\n};\nexport const lime = {\n base: '#cddc39',\n lighten5: '#f9fbe7',\n lighten4: '#f0f4c3',\n lighten3: '#e6ee9c',\n lighten2: '#dce775',\n lighten1: '#d4e157',\n darken1: '#c0ca33',\n darken2: '#afb42b',\n darken3: '#9e9d24',\n darken4: '#827717',\n accent1: '#f4ff81',\n accent2: '#eeff41',\n accent3: '#c6ff00',\n accent4: '#aeea00'\n};\nexport const yellow = {\n base: '#ffeb3b',\n lighten5: '#fffde7',\n lighten4: '#fff9c4',\n lighten3: '#fff59d',\n lighten2: '#fff176',\n lighten1: '#ffee58',\n darken1: '#fdd835',\n darken2: '#fbc02d',\n darken3: '#f9a825',\n darken4: '#f57f17',\n accent1: '#ffff8d',\n accent2: '#ffff00',\n accent3: '#ffea00',\n accent4: '#ffd600'\n};\nexport const amber = {\n base: '#ffc107',\n lighten5: '#fff8e1',\n lighten4: '#ffecb3',\n lighten3: '#ffe082',\n lighten2: '#ffd54f',\n lighten1: '#ffca28',\n darken1: '#ffb300',\n darken2: '#ffa000',\n darken3: '#ff8f00',\n darken4: '#ff6f00',\n accent1: '#ffe57f',\n accent2: '#ffd740',\n accent3: '#ffc400',\n accent4: '#ffab00'\n};\nexport const orange = {\n base: '#ff9800',\n lighten5: '#fff3e0',\n lighten4: '#ffe0b2',\n lighten3: '#ffcc80',\n lighten2: '#ffb74d',\n lighten1: '#ffa726',\n darken1: '#fb8c00',\n darken2: '#f57c00',\n darken3: '#ef6c00',\n darken4: '#e65100',\n accent1: '#ffd180',\n accent2: '#ffab40',\n accent3: '#ff9100',\n accent4: '#ff6d00'\n};\nexport const deepOrange = {\n base: '#ff5722',\n lighten5: '#fbe9e7',\n lighten4: '#ffccbc',\n lighten3: '#ffab91',\n lighten2: '#ff8a65',\n lighten1: '#ff7043',\n darken1: '#f4511e',\n darken2: '#e64a19',\n darken3: '#d84315',\n darken4: '#bf360c',\n accent1: '#ff9e80',\n accent2: '#ff6e40',\n accent3: '#ff3d00',\n accent4: '#dd2c00'\n};\nexport const brown = {\n base: '#795548',\n lighten5: '#efebe9',\n lighten4: '#d7ccc8',\n lighten3: '#bcaaa4',\n lighten2: '#a1887f',\n lighten1: '#8d6e63',\n darken1: '#6d4c41',\n darken2: '#5d4037',\n darken3: '#4e342e',\n darken4: '#3e2723'\n};\nexport const blueGrey = {\n base: '#607d8b',\n lighten5: '#eceff1',\n lighten4: '#cfd8dc',\n lighten3: '#b0bec5',\n lighten2: '#90a4ae',\n lighten1: '#78909c',\n darken1: '#546e7a',\n darken2: '#455a64',\n darken3: '#37474f',\n darken4: '#263238'\n};\nexport const grey = {\n base: '#9e9e9e',\n lighten5: '#fafafa',\n lighten4: '#f5f5f5',\n lighten3: '#eeeeee',\n lighten2: '#e0e0e0',\n lighten1: '#bdbdbd',\n darken1: '#757575',\n darken2: '#616161',\n darken3: '#424242',\n darken4: '#212121'\n};\nexport const shades = {\n black: '#000000',\n white: '#ffffff',\n transparent: '#ffffff00'\n};\nexport default {\n red,\n pink,\n purple,\n deepPurple,\n indigo,\n blue,\n lightBlue,\n cyan,\n teal,\n green,\n lightGreen,\n lime,\n yellow,\n amber,\n orange,\n deepOrange,\n brown,\n blueGrey,\n grey,\n shades\n};\n//# sourceMappingURL=colors.js.map","import colors from 'vuetify/lib/util/colors';\r\n\r\nconst theme_colors = [\r\n {\r\n name: 'Blue-light',\r\n scheme: 'md-blue-500-scheme',\r\n dark: true,\r\n primary: colors.blue.base,\r\n secondary: colors.blue.lighten4, // #FFCDD2\r\n accent: colors.blue.accent2, // #3F51B5\r\n },\r\n {\r\n name: 'Yellow-light',\r\n scheme: 'md-amber-a700-scheme',\r\n dark: true,\r\n primary: colors.amber.darken1,\r\n secondary: colors.amber.lighten4, // #FFCDD2\r\n accent: colors.amber.accent2, // #3F51B5\r\n },\r\n {\r\n name: 'Red-light',\r\n scheme: 'md-red-a400-scheme',\r\n dark: true,\r\n primary: colors.red.accent3,\r\n secondary: colors.red.lighten4, // #FFCDD2\r\n accent: colors.red.accent2, // #3F51B5\r\n },\r\n {\r\n name: 'Pink-light',\r\n dark: false,\r\n scheme: 'md-pink-a100-scheme',\r\n primary: colors.pink.accent1,\r\n secondary: colors.pink.lighten4, // #FFCDD2\r\n accent: colors.pink.accent2, // #3F51B5\r\n },\r\n {\r\n name: 'Purple-light',\r\n dark: false,\r\n scheme: 'md-purple-a700-scheme',\r\n primary: colors.purple.accent4,\r\n secondary: colors.purple.lighten4, // #FFCDD2\r\n accent: colors.purple.accent2, // #3F51B5\r\n },\r\n {\r\n name: 'DeepPurple-light',\r\n dark: false,\r\n scheme: 'md-deep-purple-a700-scheme',\r\n primary: colors.deepPurple.base,\r\n secondary: colors.deepPurple.lighten4, // #FFCDD2\r\n accent: colors.deepPurple.accent2, // #3F51B5\r\n }\r\n];\r\n\r\nconst navi_colors = [\r\n {\r\n name: 'black',\r\n class: 'black'\r\n },\r\n {\r\n name: 'red-pink',\r\n class: 'gradient-red-pink'\r\n },\r\n {\r\n name: 'blue-grey-blue',\r\n class: 'gradient-blue-grey-blue'\r\n },\r\n {\r\n name: 'green-teal',\r\n class: 'gradient-green-teal'\r\n },\r\n {\r\n name: 'purple-deep-purple',\r\n class: 'gradient-purple-deep-purple'\r\n },\r\n {\r\n name: 'purple-amber',\r\n class: 'gradient-purple-amber'\r\n },\r\n {\r\n name: 'indigo-purple',\r\n class: 'gradient-indigo-purple'\r\n },\r\n {\r\n name: 'deep-purple-blue',\r\n class: 'gradient-deep-purple-blue'\r\n },\r\n {\r\n name: 'deep-orange-orange',\r\n class: 'gradient-deep-orange-orange'\r\n },\r\n {\r\n name: 'light-blue-cyan',\r\n class: 'gradient-light-blue-cyan'\r\n },\r\n {\r\n name: 'timber',\r\n class: 'gradient-timber'\r\n },\r\n {\r\n name: 'strawberry',\r\n class: 'gradient-strawberry'\r\n },\r\n {\r\n name: 'orange',\r\n class: 'gradient-orange'\r\n },\r\n {\r\n name: 'pomegranate',\r\n class: 'gradient-pomegranate'\r\n },\r\n {\r\n name: 'green-tea',\r\n class: 'gradient-green-tea'\r\n },\r\n {\r\n name: 'blackberry',\r\n class: 'gradient-blackberry'\r\n },\r\n {\r\n name: 'plum',\r\n class: 'gradient-plum'\r\n },\r\n {\r\n name: 'passion-fruit',\r\n class: 'gradient-passion-fruit'\r\n },\r\n {\r\n name: 'sublime-vivid',\r\n class: 'gradient-sublime-vivid'\r\n },\r\n {\r\n name: 'summer',\r\n class: 'gradient-summer'\r\n },\r\n {\r\n name: 'crystal-clear',\r\n class: 'gradient-crystal-clear'\r\n },\r\n {\r\n name: 'dawn',\r\n class: 'gradient-dawn'\r\n },\r\n {\r\n name: 'grapefruit-sunset',\r\n class: 'gradient-grapefruit-sunset'\r\n },\r\n {\r\n name: 'man-of-steel',\r\n class: 'gradient-man-of-steel'\r\n }\r\n]\r\n\r\nexport default { theme_colors, navi_colors }\r\n","/** https://github.com/shadowOfCode/bee.js */\r\nconst Validation = {\r\n //手机号码\r\n isMobile: function (input) {\r\n return /^(?:\\+86)?(?:13\\d|14[57]|15[0-35-9]|17[35-8]|18\\d)\\d{8}$|^(?:\\+86)?170[057-9]\\d{7}$/.test(input);\r\n },\r\n //手机号码简单校验,只校验长度\r\n isMobileSize: function (input) {\r\n return /^(?:\\+86)?1\\d{10}$/.test(input);\r\n },\r\n isPhone: function (input) {\r\n return /^(?:\\(\\d{3,4}\\)|\\d{3,4}-)?\\d{7,8}(?:-\\d{1,4})?$/.test(input);\r\n },\r\n isCall: (input) => {\r\n return this.isPhone(input) || this.isMobile(input);\r\n },\r\n //邮箱格式校验\r\n isEmail: function (input) {\r\n return /^[-\\w+]+(?:\\.[-\\w]+)*@[-a-z0-9]+(?:\\.[a-z0-9]+)*(?:\\.[a-z]{2,})$/i.test(input);\r\n },\r\n //18位身份证简单校验\r\n isIdCardSimple: function (idCard) {\r\n return /^(?:1[1-5]|2[1-3]|3[1-7]|4[1-6]|5[0-4]|6[1-5])\\d{4}(?:1[89]|20)\\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\\d|3[01])\\d{3}(?:\\d|[xX])$/.test(idCard);\r\n },\r\n // 真实姓名校验\r\n isName: function (input) {\r\n return /^([\\u4e00-\\u9fa5]{1,20}|[a-zA-Z.\\s]{1,20})$/.test(input);\r\n },\r\n //\r\n //18位身份证严格校验\r\n isIdCard: function (idCard) {\r\n let checkCode = (input) => {\r\n var multiplier = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\r\n var ids = input.split(\"\");\r\n var len = 17, sum = 0;\r\n for (var i = 0; i < len; i++) {\r\n sum += ids[i] * multiplier[i];\r\n }\r\n var remainder = sum % 11;\r\n var checkCodeArr = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\r\n var result = checkCodeArr[remainder];\r\n return result === input[17];\r\n }\r\n //先校验格式\r\n if (this.isIdCardSimple(idCard)) {\r\n //校验日期时间是否合法\r\n var dateStr = idCard.substr(6, 8);\r\n var dateStrNew = dateStr.replace(/(\\d{4})(\\d{2})(\\d{2})/, \"$1/$2/$3\");\r\n var dateObj = new Date(dateStrNew);\r\n var month = dateObj.getMonth() + 1;\r\n if (parseInt(dateStr.substr(4, 2)) === month) {\r\n return checkCode(idCard);\r\n }\r\n }\r\n return false;\r\n },\r\n getFromIdCard: (idCard) => {\r\n var area = idCard.substr(0, 6);\r\n var birth = idCard.substr(6, 8).replace(/(\\d{4})(\\d{2})(\\d{2})/, '$1年$2月$3日');\r\n var age = new Date().getFullYear() - idCard.substr(6, 4) + 1;\r\n var sex = (idCard.substr(16, 1) % 2 === 0) ? '女' : '男';\r\n\r\n return {\r\n 'area': area,\r\n 'birth': birth,\r\n 'age': age,\r\n 'sex': sex\r\n };\r\n }\r\n};\r\n\r\nexport default Validation;","<template>\n <VDialog v-model=\"isActive\" persistent :width=\"options.width\">\n <VCard :color=\"options.color\">\n <VCardTitle>{{ options.title }}</VCardTitle>\n <VCardText v-if=\"options.text\">\n {{ options.text }}\n </VCardText>\n <VCardActions>\n <VSpacer />\n <VBtn text @click=\"close_modal\">确定</VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n\n<script setup>\nimport { computed } from 'vue'\nimport { useMessageStore } from '../../stores/message.js' // 根据实际路径调整\n\nconst messageStore = useMessageStore()\n\n\n// 使用 computed 获取响应式数据\nconst isActive = computed(() => messageStore.alert?.isActive || false)\nconst options = computed(() => messageStore.alert?.options || {})\n\n// 关闭模态框方法\nconst close_modal = () => {\n messageStore.hide('alert')\n}\n</script>","<template>\n <VDialog v-model=\"isActive\" persistent :max-width=\"options.width || 400\">\n <VCard :color=\"options.color\">\n <VCardTitle>{{ options.title }}</VCardTitle>\n <VCardText v-if=\"options.text\">\n {{ options.text }}\n </VCardText>\n <VCardActions>\n <VSpacer />\n <VBtn text @click=\"cancel\">{{ options.cancelText || '取消' }}</VBtn>\n <VBtn text @click=\"confirm\">{{ options.confirmText || '确定' }}</VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n\n<script setup>\nimport { computed } from 'vue'\nimport { useMessageStore } from '../../stores/message.js'\n\nconst messageStore = useMessageStore()\n\n// 使用 computed 获取响应式数据\nconst isActive = computed(() => messageStore.confirm?.isActive || false)\nconst options = computed(() => messageStore.confirm?.options || {})\n\n// 确认操作\nconst confirm = () => {\n // 如果 options.onConfirm 存在则执行回调\n if (typeof options.value.onConfirm === 'function') {\n options.value.onConfirm()\n }\n messageStore.hide('confirm')\n}\n\n// 取消操作\nconst cancel = () => {\n // 如果 options.onCancel 存在则执行回调\n if (typeof options.value.onCancel === 'function') {\n options.value.onCancel()\n }\n messageStore.hide('confirm')\n}\n</script>","<template>\r\n <v-overlay v-model=\"isActive\" persistent class=\"align-center justify-center\" :style=\"{ zIndex: 9999 }\">\r\n <v-progress-circular indeterminate size=\"64\" width=\"6\" color=\"primary\"></v-progress-circular>\r\n </v-overlay>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed } from 'vue'\r\nimport { useMessageStore } from '../../stores/message.js'\r\n\r\nconst messageStore = useMessageStore()\r\n\r\nconst isActive = computed(() => messageStore.loading?.isActive || false)\r\n</script>\r\n","<template>\r\n <div class=\"text-center\">\r\n <vtk-alert />\r\n <vtk-confirm />\r\n <vtk-loading />\r\n <vtk-prompt />\r\n <vtk-toast />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport vtkAlert from \"./alert.vue\";\r\nimport vtkConfirm from \"./confirm.vue\";\r\nimport vtkLoading from \"./loading.vue\";\r\nimport vtkPrompt from \"./prompt.vue\";\r\nimport vtkToast from \"./toast.vue\";\r\nexport default {\r\n name: \"vtkMessage\",\r\n components: {\r\n vtkAlert,\r\n vtkConfirm,\r\n vtkLoading,\r\n vtkPrompt,\r\n vtkToast,\r\n },\r\n};\r\n</script>","<template>\n <VDialog v-model=\"isActive\" persistent :width=\"options.width\">\n <VCard :color=\"options.color\">\n <VCardTitle>{{ options.title }}</VCardTitle>\n <VCardText>\n <VTextField\n v-model=\"inputValue\"\n :label=\"options.label\"\n :placeholder=\"options.placeholder\"\n :type=\"options.inputType || 'text'\"\n outlined\n dense\n />\n <div v-if=\"options.text\" class=\"mt-2\">\n {{ options.text }}\n </div>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <VBtn text @click=\"cancel\">{{ options.cancelText || '取消' }}</VBtn>\n <VBtn text @click=\"confirm\">{{ options.confirmText || '确定' }}</VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n\n<script setup>\nimport { ref, computed } from 'vue'\nimport { useMessageStore } from '../../stores/message.js'\n\nconst messageStore = useMessageStore()\nconst inputValue = ref('')\n\n// 使用 computed 获取响应式数据\nconst isActive = computed(() => messageStore.prompt?.isActive || false)\nconst options = computed(() => messageStore.prompt?.options || {})\n\n// 确认操作\nconst confirm = () => {\n // 如果 options.onConfirm 存在则执行回调\n if (typeof options.value.onConfirm === 'function') {\n options.value.onConfirm(inputValue.value)\n }\n messageStore.hide('prompt')\n inputValue.value = '' // 清空输入值\n}\n\n// 取消操作\nconst cancel = () => {\n // 如果 options.onCancel 存在则执行回调\n if (typeof options.value.onCancel === 'function') {\n options.value.onCancel()\n }\n messageStore.hide('prompt')\n inputValue.value = '' // 清空输入值\n}\n</script>","<template>\n\t<VSnackbar v-model=\"isActive\" :timeout=\"options.timeout > 0 ? options.timeout : 3000\" :color=\"options.color\" centered @update:modelValue=\"onModelUpdate\">\n\t\t{{ options.text }}\n\t\t<template v-slot:actions>\n\t\t\t<VBtn text icon @click=\"close_modal()\">\n\t\t\t\t<VIcon>mdi-close</VIcon>\n\t\t\t</VBtn>\n\t\t</template>\n\t</VSnackbar>\n</template>\n\n<script setup>\nimport { computed } from \"vue\";\nimport { useMessageStore } from \"../../stores/message.js\";\n\nconst messageStore = useMessageStore();\n\nconst isActive = computed({\n\tget: () => messageStore.toast?.isActive || false,\n\tset: (value) => {\n\t\tif (messageStore.toast) {\n\t\t\tmessageStore.toast.isActive = value;\n\t\t}\n\t},\n});\n\nconst options = computed(() => messageStore.toast?.options || {});\n\nconst close_modal = () => {\n\tmessageStore.hide(\"toast\");\n};\n\n// 监听模型值更新\nconst onModelUpdate = (value) => {\n\tif (!value) {\n\t\t// Snackbar 关闭时确保 store 状态同步\n\t\tmessageStore.hide(\"toast\");\n\t}\n};\n</script>\n<style lang=\"scss\" scoped>\n::v-deep .v-snackbar__wrapper {\n\ttop: 24px;\n}\n</style>\n","/**\r\n * Specter PUI - Vue 3 组件库\r\n * 基于 Vuetify 3 的智能组件库\r\n */\r\n\r\n// 组件导出\r\nexport { default as VtkArea } from './components/assembly/VtkArea.vue'\r\nexport { default as VtkAreaTabs } from './components/assembly/VtkAreaTabs.vue'\r\nexport { default as VtkBreadcrumb } from './components/assembly/VtkBreadcrumb.vue'\r\nexport { default as VtkCheckbox } from './components/assembly/VtkCheckbox.vue'\r\nexport { default as VtkCount } from './components/assembly/VtkCount.vue'\r\nexport { default as VtkDatePicker } from './components/assembly/VtkDatePicker.vue'\r\nexport { default as VtkDept } from './components/assembly/VtkDept.vue'\r\nexport { default as VtkEmpty } from './components/assembly/VtkEmpty.vue'\r\nexport { default as VtkFab } from './components/assembly/VtkFab.vue'\r\nexport { default as VtkFormItem } from './components/assembly/VtkFormItem.vue'\r\nexport { default as VtkImg } from './components/assembly/VtkImg.vue'\r\nexport { default as VtkPage } from './components/assembly/VtkPage.vue'\r\nexport { default as VtkPdf } from './components/assembly/VtkPdf.vue'\r\nexport { default as VtkProj } from './components/assembly/VtkProj.vue'\r\nexport { default as VtkRadio } from './components/assembly/VtkRadio.vue'\r\nexport { default as VtkSearch } from './components/assembly/VtkSearch.vue'\r\nexport { default as VtkSelect } from './components/assembly/VtkSelect.vue'\r\nexport { default as VtkStepper } from './components/assembly/VtkStepper.vue'\r\n\r\n// 工具函数导出\r\nexport * from './commons/filters/dictionary.js'\r\nexport * from './commons/filters/format.js'\r\nexport * from './commons/filters/mask.js'\r\nexport { default as request } from './commons/request.js'\r\nexport { default as storage } from './commons/storage.js'\r\nexport { default as themes } from './commons/themes.js'\r\nexport * from './commons/validation.js'\r\n\r\n// Composables 导出\r\nexport { useMixins } from './composables/usePage.js'\r\n\r\n// 消息组件导出\r\nexport { default as vtkMessage } from './components/message/index.js'\r\n\r\n// 插件安装函数\r\nimport vtkMessage from './components/message/index.js'\r\nimport storage from './commons/storage.js'\r\nimport themes from './commons/themes.js'\r\nimport request from './commons/request.js'\r\nimport Validation from './commons/validation.js'\r\nimport * as dictionary from './commons/filters/dictionary.js'\r\nimport * as mask from './commons/filters/mask.js'\r\nimport * as format from './commons/filters/format.js'\r\n\r\n// 导入所有组件\r\nimport VtkArea from './components/assembly/VtkArea.vue'\r\nimport VtkAreaTabs from './components/assembly/VtkAreaTabs.vue'\r\nimport VtkBreadcrumb from './components/assembly/VtkBreadcrumb.vue'\r\nimport VtkCheckbox from './components/assembly/VtkCheckbox.vue'\r\nimport VtkCount from './components/assembly/VtkCount.vue'\r\nimport VtkDatePicker from './components/assembly/VtkDatePicker.vue'\r\nimport VtkDept from './components/assembly/VtkDept.vue'\r\nimport VtkEmpty from './components/assembly/VtkEmpty.vue'\r\nimport VtkFab from './components/assembly/VtkFab.vue'\r\nimport VtkFormItem from './components/assembly/VtkFormItem.vue'\r\nimport VtkImg from './components/assembly/VtkImg.vue'\r\nimport VtkPage from './components/assembly/VtkPage.vue'\r\nimport VtkPdf from './components/assembly/VtkPdf.vue'\r\nimport VtkProj from './components/assembly/VtkProj.vue'\r\nimport VtkRadio from './components/assembly/VtkRadio.vue'\r\nimport VtkSearch from './components/assembly/VtkSearch.vue'\r\nimport VtkSelect from './components/assembly/VtkSelect.vue'\r\nimport VtkStepper from './components/assembly/VtkStepper.vue'\r\nimport VtkMessageComponent from './components/message/vtkMessage.vue'\r\n\r\n// 插件安装函数\r\nfunction install(app, options = {}) {\r\n // 注册全局组件\r\n const components = {\r\n VtkArea,\r\n VtkAreaTabs,\r\n VtkBreadcrumb,\r\n VtkCheckbox,\r\n VtkCount,\r\n VtkDatePicker,\r\n VtkDept,\r\n VtkEmpty,\r\n VtkFab,\r\n VtkFormItem,\r\n VtkImg,\r\n VtkPage,\r\n VtkPdf,\r\n VtkProj,\r\n VtkRadio,\r\n VtkSearch,\r\n VtkSelect,\r\n VtkStepper,\r\n VtkMessage: VtkMessageComponent\r\n }\r\n\r\n // 注册组件\r\n Object.keys(components).forEach(name => {\r\n app.component(name, components[name])\r\n })\r\n\r\n // 挂载全局对象\r\n app.config.globalProperties.$vtk = {\r\n message: vtkMessage,\r\n request,\r\n storage,\r\n themes,\r\n Validation,\r\n filters: {\r\n ...dictionary, // 字典过滤方法: dict, analyType, analyLevel\r\n ...mask, // 脱敏方法: mobile, idcard\r\n ...format // 格式化方法: date, num, age, txt, abs\r\n },\r\n ...options\r\n }\r\n\r\n return app\r\n}\r\n\r\n// 默认导出(包含 install 和所有命名导出)\r\nexport default {\r\n install,\r\n // 重新导出所有组件\r\n VtkArea,\r\n VtkAreaTabs,\r\n VtkBreadcrumb,\r\n VtkCheckbox,\r\n VtkCount,\r\n VtkDatePicker,\r\n VtkDept,\r\n VtkEmpty,\r\n VtkFab,\r\n VtkFormItem,\r\n VtkImg,\r\n VtkPage,\r\n VtkPdf,\r\n VtkProj,\r\n VtkRadio,\r\n VtkSearch,\r\n VtkSelect,\r\n VtkStepper,\r\n // 工具函数\r\n request,\r\n storage,\r\n themes,\r\n vtkMessage,\r\n}\r\n"],"names":["Storage","storage","type","key","js","value","useMessageStore","defineStore","options","Message","messageStore","defaultOptions","text","toastOptions","service","axios","config","error","response","res","header","handleRedirect","url","index","newUrl","Request","data","method","headers","responseType","proxy","getCurrentInstance","emit","__emit","entity","reactive","user","ref","areaData","onMounted","area","_a","_b","nextArea","areaCode","inputFn","e","clear","arr","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_component_VSelect","_cache","$event","__props","_createBlock","_c","_normalizeClass","_d","_e","_f","_g","_h","_i","_normalizeStyle","_j","props","menu","tab","tabItems","areaStorage","areaItems","current","itemValue","itemText","view","code","province","city","district","town","village","tabArea","areaChange","item","getTree","nextTick","getAreaName","save","val","close","textClear","watch","newVal","oldVal","_component_v_menu","_withCtx","_component_v_btn","_mergeProps","$attrs","_createElementVNode","_toDisplayString","_component_v_icon","_component_v_card","_hoisted_2","_Fragment","_renderList","link","_component_v_sheet","_component_v_tabs","_component_v_tab","_createTextVNode","_vShow","_component_v_chip_group","_component_v_chip","_component_v_card_actions","_component_v_spacer","router","inject","route","breadcrumbItems","computed","matched","r","pathArray","p","path","routePath","handleBack","_component_v_breadcrumbs","_component_v_breadcrumbs_item","localValue","isUpdatingLocal","isUpdatingModel","attrs","useAttrs","inputAttrs","list","inline","modelValue","rest","checkboxAttrs","errorMessages","rules","hint","persistentHint","inputValue","items","statc","it","codeValue","miscs","_component_VInput","_component_VCheckbox","currentNumber","currentDigits","digitKey","isAnimating","formatNumber","num","result","targetNumberString","startNumberString","maxDigitString","target","start","getCurrentDigit","initDigitsArray","startStr","char","startChar","getDigitStyle","currentValue","digitValue","offset","translateY","startAnimation","startTime","startValue","endValue","diff","animate","currentTime","elapsed","progress","easeOutQuart","updateDigitArray","valueStr","maxStr","i","newStr","oldStr","endStr","__expose","digitChar","_hoisted_4","_hoisted_3","n","_hoisted_5","dateRange","startDateRange","endDateRange","displayValue","formatDate","textFieldProps","placeholder","disabled","min","max","showCurrent","format","separator","date","year","month","day","minDate","maxDate","newValue","dates","onStartDateChange","onEndDateChange","clearValue","cancel","confirm","sortedRange","date1","date2","_component_VMenu","activatorProps","_component_VTextField","_component_VIcon","_component_VCard","_component_VCardText","_component_VDatePicker","_component_VDivider","_component_VCardActions","_component_VSpacer","_component_VBtn","pause","ms","resolve","dialog","areaSelectedData","areaActivatedData","getDeptList","getAreaList","getAreaNextList","parentCode","deptData","deptSelectedData","deptActivatedData","getPersonList","node","params","getDepNextList","selectAreaCode","selectPid","personData","selectedPersonData","allSelectedPersons","isRestoringSelection","selectedPersonList","uniqueMap","person","oldPerson","newPersonData","currentSelected","removeSelectedPerson","personId","globalIndex","currentIndex","add","selectedPersons","_component_v_dialog","_component_v_card_title","_component_v_divider","_component_v_card_text","_component_v_row","_component_v_col","_component_v_treeview","_component_v_avatar","_component_v_img","_hoisted_6","_component_v_list","_component_v_list_item","_hoisted_7","_component_v_empty_state","$slots","_renderSlot","_ctx","showFab","fabClass","handleScroll","scrollToTop","onBeforeUnmount","_Transition","_component_v_fab","processedMaxWidth","contentStyles","styles","showPreview","imageRotation","srcWithToken","token","currentImageUrl","currentImage","currentImageTitle","currentImageDescription","hasPrev","hasNext","openPreview","closePreview","prevImage","nextImage","rotateImage","degrees","_component_v_progress_circular","_component_VCardTitle","_component_v_card_subtitle","_component_VDialog","_component_v_toolbar","_component_v_toolbar_title","_component_v_toolbar_items","_hoisted_8","pagination","pageSizeObjs","pageDatas","paginationChange","pageChange","pageSizeFormat","toPage","pageSizeChange","temp","obj","page","_component_VRow","_component_v_pagination","loading","pdfLoaded","currentPage","pageCount","pdfContainer","pdfDoc","loadPdf","renderPage","pageNum","prevPage","nextPage","downloadPdf","blob","fileName","_component_VCol","_component_VSlider","useMixins","urlConfig","queryParam","desserts","superQueryParams","pageData","sumup","pageDataCopy","overlay","getQueryParams","codex","loadPage","pageInfo","id","record","modalFormRef","disposition","filename","newUrlConfig","getListPage","expData","mixinQueryParam","examType","permits","projName","projTip","bizType","expShow","menu1","expArr","formArr","select","selectAll","delItem","delNote","MprojRef","onActivated","event","examAll","chkAll","getUserInfo","examWait","toView","searchProj","param","searchQuery","exv","exp","del","delSave","tip","formatIdCard","idcard","dateStr","getServStateClass","state","getServStateText","getRateStateClass","getRateStateText","getServFromText","from","_component_VContainer","_component_VTabs","_component_VTab","_unref","_component_vtk_search","_component_vtk_area_tabs","_component_vtk_select","_component_VDataTable","_component_VChip","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_component_vtk_empty","_component_vtk_page","_component_vtk_proj","_component_VTextarea","onUpdate","_component_VRadioGroup","_component_VRadio","initialIndex","obtain","search","reset","_component_VBadge","filteredAttrs","multi","its","$emit","stepIndex","step","content","_component_VStepper","_component_VStepperHeader","_component_VStepperWindow","_component_VStepperWindowItem","dict","map","pre","maps","results","j","currentVal","kv","analyType","analyLevel","fmt","getDate","o","k","numValue","neg","absValue","fix","needSep","xs","decimalPart","integerPart","age","birthdays","d","txt","len","abs","mobile","colors","themes","Validation","input","this","idCard","checkCode","multiplier","ids","sum","remainder","checkCodeArr","dateStrNew","dateObj","birth","sex","isActive","close_modal","_component_v_overlay","_sfc_main","vtkAlert","vtkConfirm","vtkLoading","onModelUpdate","_component_VSnackbar","_component_vtk_alert","_component_vtk_confirm","_component_vtk_loading","_component_vtk_prompt","_component_vtk_toast","install","app","components","VtkArea","VtkAreaTabs","VtkBreadcrumb","VtkCheckbox","VtkCount","VtkDatePicker","VtkDept","VtkEmpty","VtkFab","VtkFormItem","VtkImg","VtkPage","VtkPdf","VtkProj","VtkRadio","VtkSearch","VtkSelect","VtkStepper","VtkMessageComponent","name","vtkMessage","request","dictionary","mask"],"mappings":"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","x_google_ignoreList":[26]}
|