@yxhl/specter-pui-vtk 1.0.12 → 1.0.13

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.
@@ -1 +1 @@
1
- {"version":3,"file":"specter-pui.es.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/VtkBreadcrumb.vue","../src/components/assembly/VtkCheckbox.vue","../src/components/assembly/VtkCount.vue","../src/components/assembly/VtkDatePicker.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/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 storage(type).setItem(key, JSON.stringify(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: 500,\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 }\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\nimport { useMessageStore } from '../../stores/message.js'\n\nconst Message = {\n // 显示 alert\n alert(options) {\n const messageStore = useMessageStore()\n messageStore.show('alert', options)\n },\n \n // 显示 confirm\n confirm(options) {\n const messageStore = useMessageStore()\n messageStore.show('confirm', options)\n },\n \n // 显示 loading\n loading(options) {\n const messageStore = useMessageStore()\n const defaultOptions = {\n title: '加载中...',\n text: '',\n color: '',\n width: 300,\n indeterminate: true,\n progressColor: 'primary'\n }\n messageStore.show('loading', { ...defaultOptions, ...options })\n },\n \n // 显示 prompt\n prompt(options) {\n const messageStore = useMessageStore()\n messageStore.show('prompt', options)\n },\n \n // 显示 toast\n toast(text, options = {}) {\n \n const messageStore = useMessageStore()\n // 确保传入的是字符串时正确处理\n const toastOptions = typeof text === 'string' \n ? { text, ...options }\n : text\n messageStore.show('toast', toastOptions)\n },\n \n // 隐藏指定类型的消息\n hide(type) {\n const messageStore = useMessageStore()\n messageStore.hide(type)\n }\n}\n\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: import.meta.env.VUE_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 \r\n if (response.status !== 200) {\r\n Message.toast(res.message || '请求失败')\r\n return Promise.reject(new Error(res.message || '请求失败'))\r\n } else {\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 || '网络错误')\r\n return Promise.reject(error)\r\n }\r\n)\r\n\r\nconst Request = {}\r\n\r\nRequest.http = (url, data = {}, method = 'GET', headers = { 'content-type': 'application/x-www-form-urlencoded' }, responseType = null) => {\r\n if (headers['content-type'] === 'application/x-www-form-urlencoded') {\r\n return service({ url: url, params: data, method: method, headers: headers, responseType: responseType })\r\n } else {\r\n return service({ url: url, data: data, method: method, headers: headers, responseType: responseType })\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', { 'content-type': 'application/json' })\r\n}\r\n\r\nRequest.postJson = (url, data = {}) => {\r\n console.log('POST request to:', url) // 简单的日志输出\r\n return Request.http(url, data, 'POST', { 'content-type': 'application/json' })\r\n}\r\n\r\nRequest.imp = (url, data = {}) => {\r\n return Request.http(url, data, 'POST', { 'Content-Type': 'multipart/form-data' })\r\n}\r\n\r\nRequest.exp = (url, data = {}) => {\r\n return Request.http(url, data, 'POST', { 'content-Type': 'application/json' }, 'blob')\r\n}\r\n\r\nexport default Request","<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 } from 'vue';\nimport Request from \"../../commons/request\"\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// 安全获取用户信息\nconst getUserInfo = () => {\n try {\n // const vtk = getVtk();\n // if (vtk && typeof vtk.storage?.get === 'function') {\n // return vtk.storage.get(\"user\") || { areacode: \"\" };\n // }\n return { areacode: \"\" };\n } catch (error) {\n console.warn('获取用户信息失败:', error);\n return { areacode: \"\" };\n }\n};\n\n// 组件挂载时执行\nonMounted(() => {\n\tuser.value = getUserInfo();\n\tarea();\n});\n\n// 所属地区\nconst area = () => {\n// const vtk = getVtk();\n// if (!vtk) {\n// console.warn('Vtk 对象未初始化');\n// return;\n// }\n \n try {\n // vtk.message.loading.show();\n Request.postForm(`/dict/area/show/${user.value.areacode}`).then((res) => {\n // 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 // vtk.message.toast(res.meta.message);\n }\n }).catch(error => {\n // vtk.message.loading.hide();\n console.error('加载区域数据失败:', error);\n // vtk.message.toast('加载区域数据失败');\n });\n } catch (error) {\n console.error('初始化区域数据失败:', error);\n // if (vtk.message?.loading?.hide) {\n // vtk.message.loading.hide();\n // }\n }\n};\n\n// 下一级地区列表\nconst nextArea = (areaCode, index) => {\n\tinputFn(areaCode);\n// const vtk = getVtk();\n// if (!vtk || !areaCode) return;\n \n\tif (areaCode?.length < 12) {\n\t\tRequest.postForm(`/dict/area/next/${areaCode}`).then((res) => {\n\t\t\tvtk.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\tvtk.message.toast(res.meta.message);\n\t\t\t}\n\t\t}).catch(error => {\n console.error('加载下级区域数据失败:', error);\n // 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>\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 >\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 }\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>","<!-- 空页面 -->\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\" style=\"font-size: 12px\">\r\n <v-pagination\r\n v-model=\"pageDatas.pageno\"\r\n :total-visible=\"6\"\r\n :length=\"pageDatas.pageCount\"\r\n @update:model-value=\"pageChange()\"\r\n />\r\n </span>\r\n <span class=\"page-total ml-4 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: 60px;\r\n .box {\r\n position: absolute;\r\n right: 40px;\r\n padding-top: 12px;\r\n }\r\n}\r\n.page-total {\r\n display: flex;\r\n align-items: center;\r\n height: 40px; // 与 v-select 高度保持一致\r\n}\r\n.page-select {\r\n max-width: 120px;\r\n :deep(.v-input__control) {\r\n min-height: 40px !important;\r\n height: 40px !important;\r\n }\r\n :deep(.v-field) {\r\n height: 40px !important;\r\n }\r\n}\r\n.page-go {\r\n max-width: 80px;\r\n :deep(.v-input__control) {\r\n min-height: 40px !important;\r\n height: 40px !important;\r\n }\r\n :deep(.v-field) {\r\n height: 40px !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\t<div class=\"search\">\r\n\t\t<VMenu v-model=\"menu\" @update:model-value=\"obtain\" location=\"bottom start\" :close-on-content-click=\"false\">\r\n\t\t\t<template v-slot:activator=\"{ props }\">\r\n\t\t\t\t<VTextField v-model=\"queryParam.condition\" :placeholder=\"$attrs.placeholder || '请输入查询内容'\"\r\n\t\t\t\t\t:style=\"$attrs.styles\" class=\"box\" density=\"compact\" variant=\"outlined\" hide-details\r\n\t\t\t\t\t@click:append=\"search\" @keyup.enter=\"search\" @click:clear=\"(queryParam.condition = ''), search()\"\r\n\t\t\t\t\tclearable>\r\n\t\t\t\t\t<template v-slot:append-inner>\r\n\t\t\t\t\t\t<VBadge dot :content=\"initialIndex\" :model-value=\"initialIndex > 0\" color=\"error\"\r\n\t\t\t\t\t\t\tclass=\"advanced-badge\">\r\n\t\t\t\t\t\t\t<span v-bind=\"props\"\r\n\t\t\t\t\t\t\t\tclass=\"text-blue vtk-cursor-pointer d-inline-flex align-center text-body-2\">\r\n\t\t\t\t\t\t\t\t高级\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</VBadge>\r\n\t\t\t\t\t</template>\r\n\t\t\t\t</VTextField>\r\n\t\t\t</template>\r\n\t\t\t<VCard style=\"width: 380px;margin-top: 25px;\">\r\n\t\t\t\t<VCardTitle class=\"pr-3 d-flex justify-space-between align-center pb-5\">\r\n\t\t\t\t\t高级搜索\r\n\t\t\t\t\t<VBtn class=\"mx-0\" variant=\"text\" icon @click=\"close\" small>\r\n\t\t\t\t\t\t<VIcon>mdi-close</VIcon>\r\n\t\t\t\t\t</VBtn>\r\n\t\t\t\t</VCardTitle>\r\n\t\t\t\t<VCardText>\r\n\t\t\t\t\t<slot></slot>\r\n\t\t\t\t</VCardText>\r\n\t\t\t\t<VCardActions class=\"pt-0 px-4 pb-3\">\r\n\t\t\t\t\t<slot name=\"actions\"></slot>\r\n\t\t\t\t\t<VSpacer />\r\n\t\t\t\t\t<VBtn @click=\"search\" variant=\"flat\" color=\"primary\">\r\n\t\t\t\t\t\t<VIcon class=\"mr-1\">mdi-magnify</VIcon>搜索\r\n\t\t\t\t\t</VBtn>\r\n\t\t\t\t\t<VBtn @click=\"reset\" variant=\"flat\" color=\"error\">\r\n\t\t\t\t\t\t<VIcon class=\"mr-1\">mdi-sync</VIcon>重置\r\n\t\t\t\t\t</VBtn>\r\n\t\t\t\t</VCardActions>\r\n\t\t\t</VCard>\r\n\t\t</VMenu>\r\n\t</div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, onMounted, watch } from 'vue';\r\n\r\ndefineOptions({\r\n\tname: \"VtkSearch\"\r\n});\r\n\r\nconst props = defineProps({\r\n\tvalue: {\r\n\t\ttype: Object,\r\n\t\tdefault: () => ({})\r\n\t}\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\t() => props.value,\r\n\t(newVal) => {\r\n\t\tqueryParam.value = { ...newVal };\r\n\t},\r\n\t{ deep: true }\r\n);\r\n\r\nonMounted(() => {\r\n\tuser.value = JSON.parse(localStorage.getItem(\"user\") || \"{}\");\r\n\tinitialIndex.value = 0;\r\n});\r\n\r\n// 方法\r\nconst obtain = () => {\r\n\tif (!menu.value) {\r\n\t\tinitialIndex.value = 0;\r\n\t}\r\n};\r\n\r\nconst close = () => {\r\n\tmenu.value = false;\r\n\tobtain();\r\n};\r\n\r\nconst search = () => {\r\n\tclose();\r\n\temit('update:value', queryParam.value);\r\n\temit(\"search\");\r\n};\r\n\r\n// 重置\r\nconst reset = () => {\r\n\t// 简化版重置逻辑\r\n\tObject.keys(queryParam.value).forEach(key => {\r\n\t\tif (key !== 'condition') {\r\n\t\t\tdelete queryParam.value[key];\r\n\t\t}\r\n\t});\r\n\r\n\tdelete queryParam.value.condition;\r\n\tinitialIndex.value = 0;\r\n\temit('update:value', queryParam.value);\r\n\temit(\"search\");\r\n\tmenu.value = false;\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.search {\r\n\tposition: relative;\r\n\tmin-width: 380px;\r\n\tmin-height: 40px;\r\n}\r\n\r\n.box {\r\n\tmin-width: 380px;\r\n\tmin-height: 40px;\r\n}\r\n\r\n\r\n:deep(.box .v-field__append-inner) {\r\n\tcursor: pointer;\r\n\tpadding-left: 16px !important;\r\n\tpadding-right: 4px !important;\r\n\tborder-left: 1px #cccccc88 solid;\r\n\tmin-width: 50px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n}\r\n\r\n:deep(.v-overlay__content) {\r\n\ttop: 285px !important;\r\n\tleft: unset !important;\r\n\tright: 60px !important;\r\n\tmin-width: 380px;\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>\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;","/**\n * Specter PUI - Vue 3 组件库\n * 基于 Vuetify 3 的智能组件库\n */\n\n// 组件导出\nexport { default as VtkArea } from './components/assembly/VtkArea.vue'\nexport { default as VtkBreadcrumb } from './components/assembly/VtkBreadcrumb.vue'\nexport { default as VtkCheckbox } from './components/assembly/VtkCheckbox.vue'\nexport { default as VtkCount } from './components/assembly/VtkCount.vue'\nexport { default as VtkDatePicker } from './components/assembly/VtkDatePicker.vue'\nexport { default as VtkEmpty } from './components/assembly/VtkEmpty.vue'\nexport { default as VtkFab } from './components/assembly/VtkFab.vue'\nexport { default as VtkFormItem } from './components/assembly/VtkFormItem.vue'\nexport { default as VtkImg } from './components/assembly/VtkImg.vue'\nexport { default as VtkPage } from './components/assembly/VtkPage.vue'\nexport { default as VtkPdf } from './components/assembly/VtkPdf.vue'\nexport { default as VtkProj } from './components/assembly/VtkProj.vue'\nexport { default as VtkRadio } from './components/assembly/VtkRadio.vue'\nexport { default as VtkSearch } from './components/assembly/VtkSearch.vue'\nexport { default as VtkSelect } from './components/assembly/VtkSelect.vue'\nexport { default as VtkStepper } from './components/assembly/VtkStepper.vue'\n\n// 工具函数导出\nexport * from './commons/filters/dictionary.js'\nexport * from './commons/filters/format.js'\nexport * from './commons/filters/mask.js'\nexport { default as request } from './commons/request.js'\nexport { default as storage } from './commons/storage.js'\nexport { default as themes } from './commons/themes.js'\nexport * from './commons/validation.js'\n\n// Composables 导出\nexport { useMixins } from './composables/usePage.js'\n\n// 消息组件导出\nexport { default as vtkMessage } from './components/message/index.js'\n\n// 插件安装函数\nimport vtkMessage from './components/message/index.js'\nimport storage from './commons/storage.js'\nimport themes from './commons/themes.js'\nimport request from './commons/request.js'\nimport Validation from './commons/validation.js'\nimport * as dictionary from './commons/filters/dictionary.js'\nimport * as mask from './commons/filters/mask.js'\nimport * as format from './commons/filters/format.js'\n\n// 导入所有组件\nimport VtkArea from './components/assembly/VtkArea.vue'\nimport VtkBreadcrumb from './components/assembly/VtkBreadcrumb.vue'\nimport VtkCheckbox from './components/assembly/VtkCheckbox.vue'\nimport VtkCount from './components/assembly/VtkCount.vue'\nimport VtkDatePicker from './components/assembly/VtkDatePicker.vue'\nimport VtkEmpty from './components/assembly/VtkEmpty.vue'\nimport VtkFab from './components/assembly/VtkFab.vue'\nimport VtkFormItem from './components/assembly/VtkFormItem.vue'\nimport VtkImg from './components/assembly/VtkImg.vue'\nimport VtkPage from './components/assembly/VtkPage.vue'\nimport VtkPdf from './components/assembly/VtkPdf.vue'\nimport VtkProj from './components/assembly/VtkProj.vue'\nimport VtkRadio from './components/assembly/VtkRadio.vue'\nimport VtkSearch from './components/assembly/VtkSearch.vue'\nimport VtkSelect from './components/assembly/VtkSelect.vue'\nimport VtkStepper from './components/assembly/VtkStepper.vue'\n\n// 插件安装函数\nfunction install(app, options = {}) {\n // 注册全局组件\n const components = {\n VtkArea,\n VtkBreadcrumb,\n VtkCheckbox,\n VtkCount,\n VtkDatePicker,\n VtkEmpty,\n VtkFab,\n VtkFormItem,\n VtkImg,\n VtkPage,\n VtkPdf,\n VtkProj,\n VtkRadio,\n VtkSearch,\n VtkSelect,\n VtkStepper\n }\n\n // 注册组件\n Object.keys(components).forEach(name => {\n app.component(name, components[name])\n })\n\n // 挂载全局对象\n app.config.globalProperties.$vtk = {\n message: vtkMessage,\n request,\n storage,\n themes,\n Validation,\n filters: {\n ...dictionary, // 字典过滤方法: dict, analyType, analyLevel\n ...mask, // 脱敏方法: mobile, idcard\n ...format // 格式化方法: date, num, age, txt, abs\n },\n ...options\n }\n\n return app\n}\n\n// 默认导出(包含 install 和所有命名导出)\nexport default {\n install,\n // 重新导出所有组件\n VtkArea,\n VtkBreadcrumb,\n VtkCheckbox,\n VtkCount,\n VtkDatePicker,\n VtkEmpty,\n VtkFab,\n VtkFormItem,\n VtkImg,\n VtkPage,\n VtkPdf,\n VtkProj,\n VtkRadio,\n VtkSearch,\n VtkSelect,\n VtkStepper,\n // 工具函数\n request,\n storage,\n themes,\n vtkMessage,\n}\n"],"names":["Storage","storage","type","key","js","value","useMessageStore","defineStore","options","Message","messageStore","defaultOptions","text","toastOptions","service","axios","config","error","response","res","header","Request","url","data","method","headers","responseType","emit","__emit","entity","reactive","user","ref","areaData","getUserInfo","onMounted","area","_a","_b","nextArea","areaCode","index","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","router","inject","route","breadcrumbItems","computed","item","matched","pathArray","p","path","routePath","handleBack","_component_v_breadcrumbs","_component_v_icon","_withCtx","_component_v_breadcrumbs_item","_createTextVNode","_toDisplayString","_component_v_btn","localValue","isUpdatingLocal","isUpdatingModel","watch","newVal","attrs","useAttrs","inputAttrs","list","inline","modelValue","rest","checkboxAttrs","errorMessages","rules","hint","persistentHint","inputValue","items","statc","it","code","codeValue","miscs","_component_VInput","_mergeProps","_createElementVNode","_Fragment","_renderList","_component_VCheckbox","currentNumber","currentDigits","digitKey","isAnimating","formatNumber","num","result","targetNumberString","startNumberString","maxDigitString","target","start","getCurrentDigit","initDigitsArray","startStr","char","startChar","getDigitStyle","currentValue","digitValue","current","offset","translateY","startAnimation","startTime","startValue","endValue","diff","animate","currentTime","elapsed","progress","easeOutQuart","updateDigitArray","valueStr","maxStr","i","oldVal","newStr","oldStr","nextTick","endStr","__expose","_hoisted_2","digitChar","_hoisted_4","_hoisted_3","n","_hoisted_5","menu","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","_component_v_empty_state","$slots","_renderSlot","_ctx","showFab","fabClass","handleScroll","scrollToTop","onBeforeUnmount","_Transition","_component_v_fab","processedMaxWidth","contentStyles","styles","_hoisted_6","_hoisted_7","showPreview","imageRotation","currentIndex","srcWithToken","token","currentImageUrl","currentImage","currentImageTitle","currentImageDescription","hasPrev","hasNext","openPreview","closePreview","prevImage","nextImage","rotateImage","degrees","_component_v_img","_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","resolve","renderPage","pageNum","prevPage","nextPage","downloadPdf","blob","fileName","link","_component_VCol","_component_VSlider","useMixins","urlConfig","queryParam","desserts","superQueryParams","pageData","sumup","pageDataCopy","overlay","getQueryParams","codex","loadPage","params","pageInfo","id","record","modalFormRef","disposition","filename","newUrlConfig","getListPage","expData","mixinQueryParam","examType","permits","projName","projTip","bizType","expShow","menu1","expArr","formArr","select","selectAll","dialog","delItem","delNote","MprojRef","onActivated","event","examAll","chkAll","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","val","_component_VRadioGroup","_component_VRadio","initialIndex","obtain","close","search","reset","$attrs","_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","red","pink","purple","deepPurple","blue","amber","colors","theme_colors","navi_colors","themes","Validation","input","this","idCard","checkCode","multiplier","ids","sum","remainder","checkCodeArr","dateStrNew","dateObj","birth","sex","install","app","components","VtkArea","VtkBreadcrumb","VtkCheckbox","VtkCount","VtkDatePicker","VtkEmpty","VtkFab","VtkFormItem","VtkImg","VtkPage","VtkPdf","VtkProj","VtkRadio","VtkSearch","VtkSelect","VtkStepper","name","vtkMessage","request","dictionary","mask"],"mappings":"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","x_google_ignoreList":[24]}
1
+ {"version":3,"file":"specter-pui.es.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/VtkBreadcrumb.vue","../src/components/assembly/VtkCheckbox.vue","../src/components/assembly/VtkCount.vue","../src/components/assembly/VtkDatePicker.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/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 storage(type).setItem(key, JSON.stringify(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: 500,\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 }\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\nimport { useMessageStore } from '../../stores/message.js'\n\nconst Message = {\n // 显示 alert\n alert(options) {\n const messageStore = useMessageStore()\n messageStore.show('alert', options)\n },\n \n // 显示 confirm\n confirm(options) {\n const messageStore = useMessageStore()\n messageStore.show('confirm', options)\n },\n \n // 显示 loading\n loading(options) {\n const messageStore = useMessageStore()\n const defaultOptions = {\n title: '加载中...',\n text: '',\n color: '',\n width: 300,\n indeterminate: true,\n progressColor: 'primary'\n }\n messageStore.show('loading', { ...defaultOptions, ...options })\n },\n \n // 显示 prompt\n prompt(options) {\n const messageStore = useMessageStore()\n messageStore.show('prompt', options)\n },\n \n // 显示 toast\n toast(text, options = {}) {\n \n const messageStore = useMessageStore()\n // 确保传入的是字符串时正确处理\n const toastOptions = typeof text === 'string' \n ? { text, ...options }\n : text\n messageStore.show('toast', toastOptions)\n },\n \n // 隐藏指定类型的消息\n hide(type) {\n const messageStore = useMessageStore()\n messageStore.hide(type)\n }\n}\n\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: 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 \r\n if (response.status !== 200) {\r\n Message.toast(res.message || '请求失败')\r\n return Promise.reject(new Error(res.message || '请求失败'))\r\n } else {\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 || '网络错误')\r\n return Promise.reject(error)\r\n }\r\n)\r\n\r\nconst Request = {}\r\n\r\nRequest.http = (url, data = {}, method = 'GET', headers = { 'content-type': 'application/x-www-form-urlencoded' }, responseType = null) => {\r\n if (headers['content-type'] === 'application/x-www-form-urlencoded') {\r\n return service({ url: url, params: data, method: method, headers: headers, responseType: responseType })\r\n } else {\r\n return service({ url: url, data: data, method: method, headers: headers, responseType: responseType })\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', { 'content-type': 'application/json' })\r\n}\r\n\r\nRequest.postJson = (url, data = {}) => {\r\n console.log('POST request to:', url) // 简单的日志输出\r\n return Request.http(url, data, 'POST', { 'content-type': 'application/json' })\r\n}\r\n\r\nRequest.imp = (url, data = {}) => {\r\n return Request.http(url, data, 'POST', { 'Content-Type': 'multipart/form-data' })\r\n}\r\n\r\nRequest.exp = (url, data = {}) => {\r\n return Request.http(url, data, 'POST', { 'content-Type': 'application/json' }, 'blob')\r\n}\r\n\r\nexport default Request","<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 } from 'vue';\nimport Request from \"../../commons/request\"\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// 安全获取用户信息\nconst getUserInfo = () => {\n try {\n // const vtk = getVtk();\n // if (vtk && typeof vtk.storage?.get === 'function') {\n // return vtk.storage.get(\"user\") || { areacode: \"\" };\n // }\n return { areacode: \"\" };\n } catch (error) {\n console.warn('获取用户信息失败:', error);\n return { areacode: \"\" };\n }\n};\n\n// 组件挂载时执行\nonMounted(() => {\n\tuser.value = getUserInfo();\n\tarea();\n});\n\n// 所属地区\nconst area = () => {\n// const vtk = getVtk();\n// if (!vtk) {\n// console.warn('Vtk 对象未初始化');\n// return;\n// }\n \n try {\n // vtk.message.loading.show();\n Request.postForm(`/dict/area/show/${user.value.areacode}`).then((res) => {\n // 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 // vtk.message.toast(res.meta.message);\n }\n }).catch(error => {\n // vtk.message.loading.hide();\n console.error('加载区域数据失败:', error);\n // vtk.message.toast('加载区域数据失败');\n });\n } catch (error) {\n console.error('初始化区域数据失败:', error);\n // if (vtk.message?.loading?.hide) {\n // vtk.message.loading.hide();\n // }\n }\n};\n\n// 下一级地区列表\nconst nextArea = (areaCode, index) => {\n\tinputFn(areaCode);\n// const vtk = getVtk();\n// if (!vtk || !areaCode) return;\n \n\tif (areaCode?.length < 12) {\n\t\tRequest.postForm(`/dict/area/next/${areaCode}`).then((res) => {\n\t\t\tvtk.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\tvtk.message.toast(res.meta.message);\n\t\t\t}\n\t\t}).catch(error => {\n console.error('加载下级区域数据失败:', error);\n // 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>\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 >\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 }\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>","<!-- 空页面 -->\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\" style=\"font-size: 12px\">\r\n <v-pagination\r\n v-model=\"pageDatas.pageno\"\r\n :total-visible=\"6\"\r\n :length=\"pageDatas.pageCount\"\r\n @update:model-value=\"pageChange()\"\r\n />\r\n </span>\r\n <span class=\"page-total ml-4 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: 60px;\r\n .box {\r\n position: absolute;\r\n right: 40px;\r\n padding-top: 12px;\r\n }\r\n}\r\n.page-total {\r\n display: flex;\r\n align-items: center;\r\n height: 40px; // 与 v-select 高度保持一致\r\n}\r\n.page-select {\r\n max-width: 120px;\r\n :deep(.v-input__control) {\r\n min-height: 40px !important;\r\n height: 40px !important;\r\n }\r\n :deep(.v-field) {\r\n height: 40px !important;\r\n }\r\n}\r\n.page-go {\r\n max-width: 80px;\r\n :deep(.v-input__control) {\r\n min-height: 40px !important;\r\n height: 40px !important;\r\n }\r\n :deep(.v-field) {\r\n height: 40px !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\t<div class=\"search\">\r\n\t\t<VMenu v-model=\"menu\" @update:model-value=\"obtain\" location=\"bottom start\" :close-on-content-click=\"false\">\r\n\t\t\t<template v-slot:activator=\"{ props }\">\r\n\t\t\t\t<VTextField v-model=\"queryParam.condition\" :placeholder=\"$attrs.placeholder || '请输入查询内容'\"\r\n\t\t\t\t\t:style=\"$attrs.styles\" class=\"box\" density=\"compact\" variant=\"outlined\" hide-details\r\n\t\t\t\t\t@click:append=\"search\" @keyup.enter=\"search\" @click:clear=\"(queryParam.condition = ''), search()\"\r\n\t\t\t\t\tclearable>\r\n\t\t\t\t\t<template v-slot:append-inner>\r\n\t\t\t\t\t\t<VBadge dot :content=\"initialIndex\" :model-value=\"initialIndex > 0\" color=\"error\"\r\n\t\t\t\t\t\t\tclass=\"advanced-badge\">\r\n\t\t\t\t\t\t\t<span v-bind=\"props\"\r\n\t\t\t\t\t\t\t\tclass=\"text-blue vtk-cursor-pointer d-inline-flex align-center text-body-2\">\r\n\t\t\t\t\t\t\t\t高级\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</VBadge>\r\n\t\t\t\t\t</template>\r\n\t\t\t\t</VTextField>\r\n\t\t\t</template>\r\n\t\t\t<VCard style=\"width: 380px;margin-top: 25px;\">\r\n\t\t\t\t<VCardTitle class=\"pr-3 d-flex justify-space-between align-center pb-5\">\r\n\t\t\t\t\t高级搜索\r\n\t\t\t\t\t<VBtn class=\"mx-0\" variant=\"text\" icon @click=\"close\" small>\r\n\t\t\t\t\t\t<VIcon>mdi-close</VIcon>\r\n\t\t\t\t\t</VBtn>\r\n\t\t\t\t</VCardTitle>\r\n\t\t\t\t<VCardText>\r\n\t\t\t\t\t<slot></slot>\r\n\t\t\t\t</VCardText>\r\n\t\t\t\t<VCardActions class=\"pt-0 px-4 pb-3\">\r\n\t\t\t\t\t<slot name=\"actions\"></slot>\r\n\t\t\t\t\t<VSpacer />\r\n\t\t\t\t\t<VBtn @click=\"search\" variant=\"flat\" color=\"primary\">\r\n\t\t\t\t\t\t<VIcon class=\"mr-1\">mdi-magnify</VIcon>搜索\r\n\t\t\t\t\t</VBtn>\r\n\t\t\t\t\t<VBtn @click=\"reset\" variant=\"flat\" color=\"error\">\r\n\t\t\t\t\t\t<VIcon class=\"mr-1\">mdi-sync</VIcon>重置\r\n\t\t\t\t\t</VBtn>\r\n\t\t\t\t</VCardActions>\r\n\t\t\t</VCard>\r\n\t\t</VMenu>\r\n\t</div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, onMounted, watch } from 'vue';\r\n\r\ndefineOptions({\r\n\tname: \"VtkSearch\"\r\n});\r\n\r\nconst props = defineProps({\r\n\tvalue: {\r\n\t\ttype: Object,\r\n\t\tdefault: () => ({})\r\n\t}\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\t() => props.value,\r\n\t(newVal) => {\r\n\t\tqueryParam.value = { ...newVal };\r\n\t},\r\n\t{ deep: true }\r\n);\r\n\r\nonMounted(() => {\r\n\tuser.value = JSON.parse(localStorage.getItem(\"user\") || \"{}\");\r\n\tinitialIndex.value = 0;\r\n});\r\n\r\n// 方法\r\nconst obtain = () => {\r\n\tif (!menu.value) {\r\n\t\tinitialIndex.value = 0;\r\n\t}\r\n};\r\n\r\nconst close = () => {\r\n\tmenu.value = false;\r\n\tobtain();\r\n};\r\n\r\nconst search = () => {\r\n\tclose();\r\n\temit('update:value', queryParam.value);\r\n\temit(\"search\");\r\n};\r\n\r\n// 重置\r\nconst reset = () => {\r\n\t// 简化版重置逻辑\r\n\tObject.keys(queryParam.value).forEach(key => {\r\n\t\tif (key !== 'condition') {\r\n\t\t\tdelete queryParam.value[key];\r\n\t\t}\r\n\t});\r\n\r\n\tdelete queryParam.value.condition;\r\n\tinitialIndex.value = 0;\r\n\temit('update:value', queryParam.value);\r\n\temit(\"search\");\r\n\tmenu.value = false;\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.search {\r\n\tposition: relative;\r\n\tmin-width: 380px;\r\n\tmin-height: 40px;\r\n}\r\n\r\n.box {\r\n\tmin-width: 380px;\r\n\tmin-height: 40px;\r\n}\r\n\r\n\r\n:deep(.box .v-field__append-inner) {\r\n\tcursor: pointer;\r\n\tpadding-left: 16px !important;\r\n\tpadding-right: 4px !important;\r\n\tborder-left: 1px #cccccc88 solid;\r\n\tmin-width: 50px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n}\r\n\r\n:deep(.v-overlay__content) {\r\n\ttop: 285px !important;\r\n\tleft: unset !important;\r\n\tright: 60px !important;\r\n\tmin-width: 380px;\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>\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;","/**\n * Specter PUI - Vue 3 组件库\n * 基于 Vuetify 3 的智能组件库\n */\n\n// 组件导出\nexport { default as VtkArea } from './components/assembly/VtkArea.vue'\nexport { default as VtkBreadcrumb } from './components/assembly/VtkBreadcrumb.vue'\nexport { default as VtkCheckbox } from './components/assembly/VtkCheckbox.vue'\nexport { default as VtkCount } from './components/assembly/VtkCount.vue'\nexport { default as VtkDatePicker } from './components/assembly/VtkDatePicker.vue'\nexport { default as VtkEmpty } from './components/assembly/VtkEmpty.vue'\nexport { default as VtkFab } from './components/assembly/VtkFab.vue'\nexport { default as VtkFormItem } from './components/assembly/VtkFormItem.vue'\nexport { default as VtkImg } from './components/assembly/VtkImg.vue'\nexport { default as VtkPage } from './components/assembly/VtkPage.vue'\nexport { default as VtkPdf } from './components/assembly/VtkPdf.vue'\nexport { default as VtkProj } from './components/assembly/VtkProj.vue'\nexport { default as VtkRadio } from './components/assembly/VtkRadio.vue'\nexport { default as VtkSearch } from './components/assembly/VtkSearch.vue'\nexport { default as VtkSelect } from './components/assembly/VtkSelect.vue'\nexport { default as VtkStepper } from './components/assembly/VtkStepper.vue'\n\n// 工具函数导出\nexport * from './commons/filters/dictionary.js'\nexport * from './commons/filters/format.js'\nexport * from './commons/filters/mask.js'\nexport { default as request } from './commons/request.js'\nexport { default as storage } from './commons/storage.js'\nexport { default as themes } from './commons/themes.js'\nexport * from './commons/validation.js'\n\n// Composables 导出\nexport { useMixins } from './composables/usePage.js'\n\n// 消息组件导出\nexport { default as vtkMessage } from './components/message/index.js'\n\n// 插件安装函数\nimport vtkMessage from './components/message/index.js'\nimport storage from './commons/storage.js'\nimport themes from './commons/themes.js'\nimport request from './commons/request.js'\nimport Validation from './commons/validation.js'\nimport * as dictionary from './commons/filters/dictionary.js'\nimport * as mask from './commons/filters/mask.js'\nimport * as format from './commons/filters/format.js'\n\n// 导入所有组件\nimport VtkArea from './components/assembly/VtkArea.vue'\nimport VtkBreadcrumb from './components/assembly/VtkBreadcrumb.vue'\nimport VtkCheckbox from './components/assembly/VtkCheckbox.vue'\nimport VtkCount from './components/assembly/VtkCount.vue'\nimport VtkDatePicker from './components/assembly/VtkDatePicker.vue'\nimport VtkEmpty from './components/assembly/VtkEmpty.vue'\nimport VtkFab from './components/assembly/VtkFab.vue'\nimport VtkFormItem from './components/assembly/VtkFormItem.vue'\nimport VtkImg from './components/assembly/VtkImg.vue'\nimport VtkPage from './components/assembly/VtkPage.vue'\nimport VtkPdf from './components/assembly/VtkPdf.vue'\nimport VtkProj from './components/assembly/VtkProj.vue'\nimport VtkRadio from './components/assembly/VtkRadio.vue'\nimport VtkSearch from './components/assembly/VtkSearch.vue'\nimport VtkSelect from './components/assembly/VtkSelect.vue'\nimport VtkStepper from './components/assembly/VtkStepper.vue'\n\n// 插件安装函数\nfunction install(app, options = {}) {\n // 注册全局组件\n const components = {\n VtkArea,\n VtkBreadcrumb,\n VtkCheckbox,\n VtkCount,\n VtkDatePicker,\n VtkEmpty,\n VtkFab,\n VtkFormItem,\n VtkImg,\n VtkPage,\n VtkPdf,\n VtkProj,\n VtkRadio,\n VtkSearch,\n VtkSelect,\n VtkStepper\n }\n\n // 注册组件\n Object.keys(components).forEach(name => {\n app.component(name, components[name])\n })\n\n // 挂载全局对象\n app.config.globalProperties.$vtk = {\n message: vtkMessage,\n request,\n storage,\n themes,\n Validation,\n filters: {\n ...dictionary, // 字典过滤方法: dict, analyType, analyLevel\n ...mask, // 脱敏方法: mobile, idcard\n ...format // 格式化方法: date, num, age, txt, abs\n },\n ...options\n }\n\n return app\n}\n\n// 默认导出(包含 install 和所有命名导出)\nexport default {\n install,\n // 重新导出所有组件\n VtkArea,\n VtkBreadcrumb,\n VtkCheckbox,\n VtkCount,\n VtkDatePicker,\n VtkEmpty,\n VtkFab,\n VtkFormItem,\n VtkImg,\n VtkPage,\n VtkPdf,\n VtkProj,\n VtkRadio,\n VtkSearch,\n VtkSelect,\n VtkStepper,\n // 工具函数\n request,\n storage,\n themes,\n vtkMessage,\n}\n"],"names":["Storage","storage","type","key","js","value","useMessageStore","defineStore","options","Message","messageStore","defaultOptions","text","toastOptions","service","axios","config","error","response","res","header","Request","url","data","method","headers","responseType","emit","__emit","entity","reactive","user","ref","areaData","getUserInfo","onMounted","area","_a","_b","nextArea","areaCode","index","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","router","inject","route","breadcrumbItems","computed","item","matched","pathArray","p","path","routePath","handleBack","_component_v_breadcrumbs","_component_v_icon","_withCtx","_component_v_breadcrumbs_item","_createTextVNode","_toDisplayString","_component_v_btn","localValue","isUpdatingLocal","isUpdatingModel","watch","newVal","attrs","useAttrs","inputAttrs","list","inline","modelValue","rest","checkboxAttrs","errorMessages","rules","hint","persistentHint","inputValue","items","statc","it","code","codeValue","miscs","_component_VInput","_mergeProps","_createElementVNode","_Fragment","_renderList","_component_VCheckbox","currentNumber","currentDigits","digitKey","isAnimating","formatNumber","num","result","targetNumberString","startNumberString","maxDigitString","target","start","getCurrentDigit","initDigitsArray","startStr","char","startChar","getDigitStyle","currentValue","digitValue","current","offset","translateY","startAnimation","startTime","startValue","endValue","diff","animate","currentTime","elapsed","progress","easeOutQuart","updateDigitArray","valueStr","maxStr","i","oldVal","newStr","oldStr","nextTick","endStr","__expose","_hoisted_2","digitChar","_hoisted_4","_hoisted_3","n","_hoisted_5","menu","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","_component_v_empty_state","$slots","_renderSlot","_ctx","showFab","fabClass","handleScroll","scrollToTop","onBeforeUnmount","_Transition","_component_v_fab","processedMaxWidth","contentStyles","styles","_hoisted_6","_hoisted_7","showPreview","imageRotation","currentIndex","srcWithToken","token","currentImageUrl","currentImage","currentImageTitle","currentImageDescription","hasPrev","hasNext","openPreview","closePreview","prevImage","nextImage","rotateImage","degrees","_component_v_img","_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","resolve","renderPage","pageNum","prevPage","nextPage","downloadPdf","blob","fileName","link","_component_VCol","_component_VSlider","useMixins","urlConfig","queryParam","desserts","superQueryParams","pageData","sumup","pageDataCopy","overlay","getQueryParams","codex","loadPage","params","pageInfo","id","record","modalFormRef","disposition","filename","newUrlConfig","getListPage","expData","mixinQueryParam","examType","permits","projName","projTip","bizType","expShow","menu1","expArr","formArr","select","selectAll","dialog","delItem","delNote","MprojRef","onActivated","event","examAll","chkAll","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","val","_component_VRadioGroup","_component_VRadio","initialIndex","obtain","close","search","reset","$attrs","_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","red","pink","purple","deepPurple","blue","amber","colors","theme_colors","navi_colors","themes","Validation","input","this","idCard","checkCode","multiplier","ids","sum","remainder","checkCodeArr","dateStrNew","dateObj","birth","sex","install","app","components","VtkArea","VtkBreadcrumb","VtkCheckbox","VtkCount","VtkDatePicker","VtkEmpty","VtkFab","VtkFormItem","VtkImg","VtkPage","VtkPdf","VtkProj","VtkRadio","VtkSearch","VtkSelect","VtkStepper","name","vtkMessage","request","dictionary","mask"],"mappings":"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","x_google_ignoreList":[24]}