tps-ui-components
Version:
TPS UI组件库 - 基于Vue 2和Element UI的企业级组件库
2 lines • 92.4 kB
JavaScript
!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("axios")):"function"==typeof define&&define.amd?define(["exports","axios"],e):e((n="undefined"!=typeof globalThis?globalThis:n||self).TpsUI={},n.axios)}(this,function(n,e){"use strict";function t(n){return n&&"object"==typeof n&&"default"in n?n:{default:n}}var a=t(e);function o(n,e){for(var t=0;t<e.length;t++){var a=e[t];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(n,s(a.key),a)}}function r(n,e,t){return(e=s(e))in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function l(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);e&&(a=a.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),t.push.apply(t,a)}return t}function i(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?l(Object(t),!0).forEach(function(e){r(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):l(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function s(n){var e=function(n,e){if("object"!=typeof n||!n)return n;var t=n[Symbol.toPrimitive];if(void 0!==t){var a=t.call(n,e||"default");if("object"!=typeof a)return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(n)}(n,"string");return"symbol"==typeof e?e:e+""}var d=function(){return n=function n(){!function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),this.themes={default:{name:"默认主题",primaryColor:"#4d9bd5",backgroundColor:"#F5F5F5",textColor:"#303133",borderColor:"#DCDFE6",successColor:"#67C23A",warningColor:"#E6A23C",dangerColor:"#F56C6C",infoColor:"#909399"},dark:{name:"暗黑主题",primaryColor:"#4d9bd5",backgroundColor:"#303133",textColor:"#E5EAF3",borderColor:"#434343",successColor:"#67C23A",warningColor:"#E6A23C",dangerColor:"#F56C6C",infoColor:"#909399"},blue:{name:"蓝色主题",primaryColor:"#1890ff",backgroundColor:"#f0f9ff",textColor:"#0d1a26",borderColor:"#91d5ff",successColor:"#52c41a",warningColor:"#faad14",dangerColor:"#ff4d4f",infoColor:"#1890ff"},red:{name:"红色主题",primaryColor:"#FF4D4F",backgroundColor:"#F5F5F5",textColor:"#303133",borderColor:"#DCDFE6",successColor:"#67C23A",warningColor:"#E6A23C",dangerColor:"#FF4D4F",infoColor:"#909399"},green:{name:"绿色主题",primaryColor:"#52c41a",backgroundColor:"#f6ffed",textColor:"#000000",borderColor:"#b7eb8f",successColor:"#52c41a",warningColor:"#faad14",dangerColor:"#ff4d4f",infoColor:"#1890ff"}},this.currentTheme="default",this.styleElement=document.createElement("style"),this.styleElement.id="tps-theme-variables",document.head.appendChild(this.styleElement),this.init()},e=[{key:"init",value:function(){var n=localStorage.getItem("tps-theme");n&&this.themes[n]?this.changeTheme(n):this.changeTheme("default"),window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").addListener(this.handleSystemThemeChange.bind(this))}},{key:"changeTheme",value:function(n){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!this.themes[n])return console.error("主题 ".concat(n," 不存在")),!1;var t=this.themes[n];return this.currentTheme=n,this.updateCSSVariables(t),this.updateElementTheme(t),this.emitThemeChange(n,t),e&&localStorage.setItem("tps-theme",n),!0}},{key:"updateCSSVariables",value:function(n){var e=Object.keys(n).filter(function(n){return"name"!==n}).map(function(e){var t="--tps-".concat(e.replace(/([A-Z])/g,"-$1").toLowerCase());return"".concat(t,": ").concat(n[e],";")}).join("\n"),t=":root {\n".concat(e,"\n}");this.styleElement.textContent=t}},{key:"updateElementTheme",value:function(n){var e={"--el-color-primary":n.primaryColor,"--el-color-success":n.successColor,"--el-color-warning":n.warningColor,"--el-color-danger":n.dangerColor,"--el-color-info":n.infoColor,"--el-border-color-base":n.borderColor,"--el-text-color-primary":n.textColor,"--el-background-color-base":n.backgroundColor};Object.keys(e).forEach(function(n){document.documentElement.style.setProperty(n,e[n])})}},{key:"handleSystemThemeChange",value:function(n){n.matches?this.changeTheme("dark",!1):this.changeTheme("default",!1)}},{key:"emitThemeChange",value:function(n,e){var t=new CustomEvent("themeChange",{detail:{themeName:n,theme:e}});window.dispatchEvent(t)}},{key:"getCurrentTheme",value:function(){return this.currentTheme}},{key:"getAvailableThemes",value:function(){var n=this;return Object.keys(this.themes).map(function(e){return{key:e,name:n.themes[e].name,colors:n.themes[e]}})}},{key:"addTheme",value:function(n,e){this.themes[n]=e}},{key:"removeTheme",value:function(n){return"default"===n?(console.warn("不能删除默认主题"),!1):(delete this.themes[n],!0)}}],e&&o(n.prototype,e),t&&o(n,t),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,e,t}(),A=new d,p={install:function(n){n.prototype.$themeManager=A,n.prototype.$changeTheme=function(n){return A.changeTheme(n)},n.prototype.$getCurrentTheme=function(){return A.getCurrentTheme()},n.prototype.$getAvailableThemes=function(){return A.getAvailableThemes()}},changeTheme:function(n){return A.changeTheme(n)},getCurrentTheme:function(){return A.getCurrentTheme()},getAvailableThemes:function(){return A.getAvailableThemes()},addTheme:function(n,e){return A.addTheme(n,e)},removeTheme:function(n){return A.removeTheme(n)}},c={baseURL:process.env.VUE_APP_BASE_API||"/api",timeout:1e4,headers:{"Content-Type":"application/json;charset=UTF-8"}};function u(n){"undefined"!=typeof window&&window.Vue&&window.Vue.prototype.$message?window.Vue.prototype.$message({message:n,type:"error",duration:3e3,showClose:!0}):console.error("API Error:",n)}function f(){localStorage.removeItem("token"),sessionStorage.removeItem("token"),"undefined"!=typeof window&&window.Vue&&window.Vue.prototype.$router&&window.Vue.prototype.$router.push("/login")}var m=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=a.default.create(i(i({},c),n));return e.interceptors.request.use(function(n){var e=localStorage.getItem("token")||sessionStorage.getItem("token");return e&&(n.headers.Authorization="Bearer ".concat(e)),"get"===n.method&&(n.params=i(i({},n.params),{},{_t:Date.now()})),"development"===process.env.NODE_ENV&&console.log("🚀 Request:",{url:n.url,method:n.method,params:n.params,data:n.data}),n},function(n){return console.error("❌ Request Error:",n),Promise.reject(n)}),e.interceptors.response.use(function(n){var e=n.data,t=n.config;if("development"===process.env.NODE_ENV&&console.log("✅ Response:",{url:t.url,data:e}),void 0!==e.code&&200!==e.code){var a=e.message||e.msg||"请求失败";return u(a),function(n,e){switch(n){case 401:case 403:f();break;case 1001:console.warn("业务警告:",e)}}(e.code,a),Promise.reject(new Error(a))}return void 0!==e.data?e.data:e},function(n){console.error("❌ Response Error:",n);var e="网络请求失败";if(n.response){var t=n.response,a=t.status,o=t.data;switch(a){case 400:e=o.message||"请求参数错误";break;case 401:e="未授权,请重新登录",f();break;case 403:e="拒绝访问";break;case 404:e="请求的资源不存在";break;case 408:e="请求超时";break;case 500:e="服务器内部错误";break;case 502:e="网关错误";break;case 503:e="服务不可用";break;case 504:e="网关超时";break;default:e=o.message||"连接错误".concat(a)}}else e=n.request?"网络连接失败,请检查网络设置":n.message||"请求配置错误";return u(e),Promise.reject(n)}),e}(),h=function(n){return m(i({method:"get",url:n,params:arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}))},g=function(n){return m(i({method:"post",url:n,data:arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}))},b=function(n){return m(i({method:"put",url:n,data:arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}))},v=function(n){return m(i({method:"delete",url:n,params:arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}))},C=function(n,e){return m(i({method:"post",url:n,data:e,headers:{"Content-Type":"multipart/form-data"}},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}))},y={name:"TpsButton",props:{type:{type:String,default:"default",validator:n=>["default","primary","success","warning","danger","info","text"].includes(n)},size:{type:String,default:"medium",validator:n=>["medium","small","mini"].includes(n)},plain:{type:Boolean,default:!1},round:{type:Boolean,default:!1},circle:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},icon:{type:String,default:""},autofocus:{type:Boolean,default:!1},nativeType:{type:String,default:"button",validator:n=>["button","submit","reset"].includes(n)},color:{type:String,default:""},variant:{type:String,default:"default",validator:n=>["default","gradient","shadow"].includes(n)}},computed:{computedType(){return"default"===this.type?"":this.type},buttonClass(){return["tps-button",{[`tps-button--${this.variant}`]:"default"!==this.variant,"tps-button--custom-color":this.color}]}},methods:{handleClick(n){this.loading||this.disabled||this.$emit("click",n)},handleFocus(n){this.$emit("focus",n)},handleBlur(n){this.$emit("blur",n)}},mounted(){this.color&&this.$el.style.setProperty("--tps-button-color",this.color)}};function x(n,e,t,a,o,r,l,i,s,d){"boolean"!=typeof l&&(s=i,i=l,l=!1);const A="function"==typeof t?t.options:t;let p;if(n&&n.render&&(A.render=n.render,A.staticRenderFns=n.staticRenderFns,A._compiled=!0,o&&(A.functional=!0)),a&&(A._scopeId=a),r?(p=function(n){(n=n||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(n=__VUE_SSR_CONTEXT__),e&&e.call(this,s(n)),n&&n._registeredComponents&&n._registeredComponents.add(r)},A._ssrRegister=p):e&&(p=l?function(n){e.call(this,d(n,this.$root.$options.shadowRoot))}:function(n){e.call(this,i(n))}),p)if(A.functional){const n=A.render;A.render=function(e,t){return p.call(t),n(e,t)}}else{const n=A.beforeCreate;A.beforeCreate=n?[].concat(n,p):[p]}return t}const E="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());function w(n){return(n,e)=>function(n,e){const t=E?e.media||"default":n,a=k[t]||(k[t]={ids:new Set,styles:[]});if(!a.ids.has(n)){a.ids.add(n);let t=e.source;if(e.map&&(t+="\n/*# sourceURL="+e.map.sources[0]+" */",t+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(e.map))))+" */"),a.element||(a.element=document.createElement("style"),a.element.type="text/css",e.media&&a.element.setAttribute("media",e.media),void 0===_&&(_=document.head||document.getElementsByTagName("head")[0]),_.appendChild(a.element)),"styleSheet"in a.element)a.styles.push(t),a.element.styleSheet.cssText=a.styles.filter(Boolean).join("\n");else{const n=a.ids.size-1,e=document.createTextNode(t),o=a.element.childNodes;o[n]&&a.element.removeChild(o[n]),o.length?a.element.insertBefore(e,o[n]):a.element.appendChild(e)}}}(n,e)}let _;const k={};const S=y;var B=function(){var n=this,e=n.$createElement;return(n._self._c||e)("el-button",{class:n.buttonClass,attrs:{type:n.computedType,size:n.size,plain:n.plain,round:n.round,circle:n.circle,loading:n.loading,disabled:n.disabled,icon:n.icon,autofocus:n.autofocus,"native-type":n.nativeType},on:{click:n.handleClick,focus:n.handleFocus,blur:n.handleBlur}},[n._t("default")],2)};B._withStripped=!0;const T=x({render:B,staticRenderFns:[]},function(n){n&&n("data-v-09be781e_0",{source:"\n.tps-button[data-v-09be781e] {\n /* 基础样式 */\n transition: all 0.3s ease;\n border-radius: var(--tps-border-radius, 4px);\n font-weight: 500;\n letter-spacing: 0.5px;\n}\n\n/* 渐变变体 */\n.tps-button--gradient.el-button--primary[data-v-09be781e] {\n background: linear-gradient(135deg, var(--tps-primary-color, #4d9bd5) 0%, #357abd 100%);\n border: none;\n box-shadow: 0 4px 12px rgba(77, 155, 213, 0.3);\n}\n.tps-button--gradient.el-button--primary[data-v-09be781e]:hover {\n background: linear-gradient(135deg, #357abd 0%, #2968a3 100%);\n box-shadow: 0 6px 16px rgba(77, 155, 213, 0.4);\n transform: translateY(-2px);\n}\n\n/* 阴影变体 */\n.tps-button--shadow[data-v-09be781e] {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n.tps-button--shadow[data-v-09be781e]:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\n transform: translateY(-1px);\n}\n\n/* 自定义颜色 */\n.tps-button--custom-color.el-button--primary[data-v-09be781e] {\n background-color: var(--tps-button-color);\n border-color: var(--tps-button-color);\n}\n.tps-button--custom-color.el-button--primary[data-v-09be781e]:hover {\n background-color: var(--tps-button-color);\n border-color: var(--tps-button-color);\n opacity: 0.8;\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n.tps-button[data-v-09be781e] {\n padding: 8px 16px;\n font-size: 14px;\n}\n}\n\n/* 主题适配 */\n.tps-button[data-v-09be781e] {\n color: var(--tps-text-color, #303133);\n border-color: var(--tps-border-color, #DCDFE6);\n}\n\n/* 加载状态优化 */\n.tps-button.is-loading[data-v-09be781e] {\n pointer-events: none;\n}\n\n/* 禁用状态优化 */\n.tps-button.is-disabled[data-v-09be781e] {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n/* 聚焦状态 */\n.tps-button[data-v-09be781e]:focus {\n outline: 2px solid var(--tps-primary-color, #4d9bd5);\n outline-offset: 2px;\n}\n",map:{version:3,sources:["E:\\新建文件夹\\tps-ui-components\\src\\components\\TpsButton\\index.vue"],names:[],mappings:";AA6NA;EACA,SAAA;EACA,yBAAA;EACA,4CAAA;EACA,gBAAA;EACA,qBAAA;AACA;;AAEA,SAAA;AACA;EACA,uFAAA;EACA,YAAA;EACA,8CAAA;AACA;AAEA;EACA,6DAAA;EACA,8CAAA;EACA,2BAAA;AACA;;AAEA,SAAA;AACA;EACA,wCAAA;AACA;AAEA;EACA,0CAAA;EACA,2BAAA;AACA;;AAEA,UAAA;AACA;EACA,yCAAA;EACA,qCAAA;AACA;AAEA;EACA,yCAAA;EACA,qCAAA;EACA,YAAA;AACA;;AAEA,UAAA;AACA;AACA;IACA,iBAAA;IACA,eAAA;AACA;AACA;;AAEA,SAAA;AACA;EACA,qCAAA;EACA,8CAAA;AACA;;AAEA,WAAA;AACA;EACA,oBAAA;AACA;;AAEA,WAAA;AACA;EACA,YAAA;EACA,mBAAA;AACA;;AAEA,SAAA;AACA;EACA,oDAAA;EACA,mBAAA;AACA",file:"index.vue",sourcesContent:["<template>\n <el-button\n :class=\"buttonClass\"\n :type=\"computedType\"\n :size=\"size\"\n :plain=\"plain\"\n :round=\"round\"\n :circle=\"circle\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n :icon=\"icon\"\n :autofocus=\"autofocus\"\n :native-type=\"nativeType\"\n @click=\"handleClick\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n >\n <slot></slot>\n </el-button>\n</template>\n\n<script>\n/**\n * TpsButton 按钮组件\n * 基于Element UI Button组件封装,提供统一的样式和交互\n * @displayName TpsButton\n */\nexport default {\n name: 'TpsButton',\n \n props: {\n /**\n * 按钮类型\n * @values primary, success, warning, danger, info, text\n */\n type: {\n type: String,\n default: 'default',\n validator: value => {\n return ['default', 'primary', 'success', 'warning', 'danger', 'info', 'text'].includes(value)\n }\n },\n \n /**\n * 按钮尺寸\n * @values medium, small, mini\n */\n size: {\n type: String,\n default: 'medium',\n validator: value => {\n return ['medium', 'small', 'mini'].includes(value)\n }\n },\n \n /**\n * 是否朴素按钮\n */\n plain: {\n type: Boolean,\n default: false\n },\n \n /**\n * 是否圆角按钮\n */\n round: {\n type: Boolean,\n default: false\n },\n \n /**\n * 是否圆形按钮\n */\n circle: {\n type: Boolean,\n default: false\n },\n \n /**\n * 是否加载中状态\n */\n loading: {\n type: Boolean,\n default: false\n },\n \n /**\n * 是否禁用状态\n */\n disabled: {\n type: Boolean,\n default: false\n },\n \n /**\n * 图标类名\n */\n icon: {\n type: String,\n default: ''\n },\n \n /**\n * 是否默认聚焦\n */\n autofocus: {\n type: Boolean,\n default: false\n },\n \n /**\n * 原生type属性\n * @values button, submit, reset\n */\n nativeType: {\n type: String,\n default: 'button',\n validator: value => {\n return ['button', 'submit', 'reset'].includes(value)\n }\n },\n \n /**\n * 自定义主题色\n */\n color: {\n type: String,\n default: ''\n },\n \n /**\n * 按钮变体\n * @values default, gradient, shadow\n */\n variant: {\n type: String,\n default: 'default',\n validator: value => {\n return ['default', 'gradient', 'shadow'].includes(value)\n }\n }\n },\n \n computed: {\n /**\n * 计算按钮类型\n */\n computedType() {\n return this.type === 'default' ? '' : this.type\n },\n \n /**\n * 按钮样式类\n */\n buttonClass() {\n return [\n 'tps-button',\n {\n [`tps-button--${this.variant}`]: this.variant !== 'default',\n 'tps-button--custom-color': this.color\n }\n ]\n }\n },\n \n methods: {\n /**\n * 点击事件处理\n * @param {Event} event - 点击事件\n */\n handleClick(event) {\n if (this.loading || this.disabled) {\n return\n }\n \n /**\n * 按钮点击事件\n * @event click\n * @param {Event} event - 原生点击事件\n */\n this.$emit('click', event)\n },\n \n /**\n * 聚焦事件处理\n * @param {Event} event - 聚焦事件\n */\n handleFocus(event) {\n /**\n * 按钮聚焦事件\n * @event focus\n * @param {Event} event - 原生聚焦事件\n */\n this.$emit('focus', event)\n },\n \n /**\n * 失焦事件处理\n * @param {Event} event - 失焦事件\n */\n handleBlur(event) {\n /**\n * 按钮失焦事件\n * @event blur\n * @param {Event} event - 原生失焦事件\n */\n this.$emit('blur', event)\n }\n },\n \n mounted() {\n // 应用自定义颜色\n if (this.color) {\n this.$el.style.setProperty('--tps-button-color', this.color)\n }\n }\n}\n<\/script>\n\n<style scoped>\n.tps-button {\n /* 基础样式 */\n transition: all 0.3s ease;\n border-radius: var(--tps-border-radius, 4px);\n font-weight: 500;\n letter-spacing: 0.5px;\n}\n\n/* 渐变变体 */\n.tps-button--gradient.el-button--primary {\n background: linear-gradient(135deg, var(--tps-primary-color, #4d9bd5) 0%, #357abd 100%);\n border: none;\n box-shadow: 0 4px 12px rgba(77, 155, 213, 0.3);\n}\n\n.tps-button--gradient.el-button--primary:hover {\n background: linear-gradient(135deg, #357abd 0%, #2968a3 100%);\n box-shadow: 0 6px 16px rgba(77, 155, 213, 0.4);\n transform: translateY(-2px);\n}\n\n/* 阴影变体 */\n.tps-button--shadow {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.tps-button--shadow:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\n transform: translateY(-1px);\n}\n\n/* 自定义颜色 */\n.tps-button--custom-color.el-button--primary {\n background-color: var(--tps-button-color);\n border-color: var(--tps-button-color);\n}\n\n.tps-button--custom-color.el-button--primary:hover {\n background-color: var(--tps-button-color);\n border-color: var(--tps-button-color);\n opacity: 0.8;\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n .tps-button {\n padding: 8px 16px;\n font-size: 14px;\n }\n}\n\n/* 主题适配 */\n.tps-button {\n color: var(--tps-text-color, #303133);\n border-color: var(--tps-border-color, #DCDFE6);\n}\n\n/* 加载状态优化 */\n.tps-button.is-loading {\n pointer-events: none;\n}\n\n/* 禁用状态优化 */\n.tps-button.is-disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n/* 聚焦状态 */\n.tps-button:focus {\n outline: 2px solid var(--tps-primary-color, #4d9bd5);\n outline-offset: 2px;\n}\n</style>"]},media:void 0})},S,"data-v-09be781e",false,undefined,!1,w,void 0,void 0);T.install=function(n){n.component(T.name,T)};const $={name:"TpsCard",props:{title:{type:String,default:""},icon:{type:String,default:""},shadow:{type:String,default:"always",validator:n=>["always","hover","never"].includes(n)},padding:{type:[String,Number],default:"20px"},radius:{type:[String,Number],default:"8px"},bordered:{type:Boolean,default:!0},type:{type:String,default:"default",validator:n=>["default","primary","success","warning","danger","info"].includes(n)},hoverable:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},backgroundColor:{type:String,default:""},size:{type:String,default:"medium",validator:n=>["small","medium","large"].includes(n)}},computed:{cardClass(){return["tps-card",`tps-card--${this.shadow}`,`tps-card--${this.size}`,{[`tps-card--${this.type}`]:"default"!==this.type,"tps-card--bordered":this.bordered,"tps-card--hoverable":this.hoverable,"tps-card--loading":this.loading}]},cardStyle(){const n={};return this.radius&&(n.borderRadius="number"==typeof this.radius?`${this.radius}px`:this.radius),this.backgroundColor&&(n.backgroundColor=this.backgroundColor),n},bodyStyle(){const n={};return this.padding&&(n.padding="number"==typeof this.padding?`${this.padding}px`:this.padding),n}}};var F=function(){var n=this,e=n.$createElement,t=n._self._c||e;return t("div",{class:n.cardClass,style:n.cardStyle},[n.$slots.header||n.title?t("div",{staticClass:"tps-card__header"},[n._t("header",function(){return[t("div",{staticClass:"tps-card__title"},[n.icon?t("i",{staticClass:"tps-card__icon",class:n.icon}):n._e(),n._v("\n "+n._s(n.title)+"\n ")]),n._v(" "),n.$slots.extra?t("div",{staticClass:"tps-card__extra"},[n._t("extra")],2):n._e()]})],2):n._e(),n._v(" "),t("div",{staticClass:"tps-card__body",style:n.bodyStyle},[n._t("default")],2),n._v(" "),n.$slots.footer?t("div",{staticClass:"tps-card__footer"},[n._t("footer")],2):n._e()])};F._withStripped=!0;const O=x({render:F,staticRenderFns:[]},function(n){n&&n("data-v-0f58e5b7_0",{source:"\n.tps-card[data-v-0f58e5b7] {\n background-color: var(--tps-background-color, #ffffff);\n border: 1px solid var(--tps-border-color, #EBEEF5);\n border-radius: 8px;\n overflow: hidden;\n transition: all 0.3s ease;\n position: relative;\n}\n\n/* 阴影样式 */\n.tps-card--always[data-v-0f58e5b7] {\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n.tps-card--hover[data-v-0f58e5b7] {\n box-shadow: none;\n}\n.tps-card--hover[data-v-0f58e5b7]:hover {\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n.tps-card--never[data-v-0f58e5b7] {\n box-shadow: none;\n}\n\n/* 边框样式 */\n.tps-card--bordered[data-v-0f58e5b7] {\n border: 1px solid var(--tps-border-color, #EBEEF5);\n}\n.tps-card[data-v-0f58e5b7]:not(.tps-card--bordered) {\n border: none;\n}\n\n/* 悬浮效果 */\n.tps-card--hoverable[data-v-0f58e5b7]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.15);\n}\n\n/* 尺寸样式 */\n.tps-card--small .tps-card__header[data-v-0f58e5b7] {\n padding: 12px 16px;\n}\n.tps-card--small .tps-card__body[data-v-0f58e5b7] {\n padding: 12px 16px;\n}\n.tps-card--small .tps-card__footer[data-v-0f58e5b7] {\n padding: 12px 16px;\n}\n.tps-card--medium .tps-card__header[data-v-0f58e5b7] {\n padding: 16px 20px;\n}\n.tps-card--medium .tps-card__body[data-v-0f58e5b7] {\n padding: 20px;\n}\n.tps-card--medium .tps-card__footer[data-v-0f58e5b7] {\n padding: 16px 20px;\n}\n.tps-card--large .tps-card__header[data-v-0f58e5b7] {\n padding: 20px 24px;\n}\n.tps-card--large .tps-card__body[data-v-0f58e5b7] {\n padding: 24px;\n}\n.tps-card--large .tps-card__footer[data-v-0f58e5b7] {\n padding: 20px 24px;\n}\n\n/* 类型样式 */\n.tps-card--primary[data-v-0f58e5b7] {\n border-color: var(--tps-primary-color, #4d9bd5);\n}\n.tps-card--primary .tps-card__header[data-v-0f58e5b7] {\n background-color: var(--tps-primary-color, #4d9bd5);\n color: #ffffff;\n}\n.tps-card--success[data-v-0f58e5b7] {\n border-color: var(--tps-success-color, #67C23A);\n}\n.tps-card--success .tps-card__header[data-v-0f58e5b7] {\n background-color: var(--tps-success-color, #67C23A);\n color: #ffffff;\n}\n.tps-card--warning[data-v-0f58e5b7] {\n border-color: var(--tps-warning-color, #E6A23C);\n}\n.tps-card--warning .tps-card__header[data-v-0f58e5b7] {\n background-color: var(--tps-warning-color, #E6A23C);\n color: #ffffff;\n}\n.tps-card--danger[data-v-0f58e5b7] {\n border-color: var(--tps-danger-color, #F56C6C);\n}\n.tps-card--danger .tps-card__header[data-v-0f58e5b7] {\n background-color: var(--tps-danger-color, #F56C6C);\n color: #ffffff;\n}\n.tps-card--info[data-v-0f58e5b7] {\n border-color: var(--tps-info-color, #909399);\n}\n.tps-card--info .tps-card__header[data-v-0f58e5b7] {\n background-color: var(--tps-info-color, #909399);\n color: #ffffff;\n}\n\n/* 头部样式 */\n.tps-card__header[data-v-0f58e5b7] {\n background-color: var(--tps-background-color, #ffffff);\n border-bottom: 1px solid var(--tps-border-color, #EBEEF5);\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-weight: 500;\n}\n.tps-card__title[data-v-0f58e5b7] {\n display: flex;\n align-items: center;\n font-size: 16px;\n color: var(--tps-text-color, #303133);\n}\n.tps-card__icon[data-v-0f58e5b7] {\n margin-right: 8px;\n font-size: 18px;\n}\n.tps-card__extra[data-v-0f58e5b7] {\n color: var(--tps-text-color, #606266);\n}\n\n/* 内容样式 */\n.tps-card__body[data-v-0f58e5b7] {\n color: var(--tps-text-color, #606266);\n line-height: 1.6;\n}\n\n/* 底部样式 */\n.tps-card__footer[data-v-0f58e5b7] {\n background-color: var(--tps-background-color, #fafafa);\n border-top: 1px solid var(--tps-border-color, #EBEEF5);\n color: var(--tps-text-color, #606266);\n}\n\n/* 加载状态 */\n.tps-card--loading[data-v-0f58e5b7] {\n position: relative;\n overflow: hidden;\n}\n.tps-card--loading[data-v-0f58e5b7]::before {\n content: '';\n position: absolute;\n top: 0;\n left: -100%;\n width: 100%;\n height: 100%;\n background: linear-gradient(\n 90deg,\n transparent,\n rgba(255, 255, 255, 0.4),\n transparent\n );\n animation: loading-data-v-0f58e5b7 1.5s infinite;\n z-index: 1;\n}\n@keyframes loading-data-v-0f58e5b7 {\n0% {\n left: -100%;\n}\n100% {\n left: 100%;\n}\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n.tps-card[data-v-0f58e5b7] {\n margin: 8px;\n}\n.tps-card__header[data-v-0f58e5b7] {\n padding: 12px 16px;\n}\n.tps-card__body[data-v-0f58e5b7] {\n padding: 16px;\n}\n.tps-card__footer[data-v-0f58e5b7] {\n padding: 12px 16px;\n}\n}\n",map:{version:3,sources:["E:\\新建文件夹\\tps-ui-components\\src\\components\\TpsCard\\index.vue"],names:[],mappings:";AA8LA;EACA,sDAAA;EACA,kDAAA;EACA,kBAAA;EACA,gBAAA;EACA,yBAAA;EACA,kBAAA;AACA;;AAEA,SAAA;AACA;EACA,2CAAA;AACA;AAEA;EACA,gBAAA;AACA;AAEA;EACA,2CAAA;AACA;AAEA;EACA,gBAAA;AACA;;AAEA,SAAA;AACA;EACA,kDAAA;AACA;AAEA;EACA,YAAA;AACA;;AAEA,SAAA;AACA;EACA,2BAAA;EACA,4CAAA;AACA;;AAEA,SAAA;AACA;EACA,kBAAA;AACA;AAEA;EACA,kBAAA;AACA;AAEA;EACA,kBAAA;AACA;AAEA;EACA,kBAAA;AACA;AAEA;EACA,aAAA;AACA;AAEA;EACA,kBAAA;AACA;AAEA;EACA,kBAAA;AACA;AAEA;EACA,aAAA;AACA;AAEA;EACA,kBAAA;AACA;;AAEA,SAAA;AACA;EACA,+CAAA;AACA;AAEA;EACA,mDAAA;EACA,cAAA;AACA;AAEA;EACA,+CAAA;AACA;AAEA;EACA,mDAAA;EACA,cAAA;AACA;AAEA;EACA,+CAAA;AACA;AAEA;EACA,mDAAA;EACA,cAAA;AACA;AAEA;EACA,8CAAA;AACA;AAEA;EACA,kDAAA;EACA,cAAA;AACA;AAEA;EACA,4CAAA;AACA;AAEA;EACA,gDAAA;EACA,cAAA;AACA;;AAEA,SAAA;AACA;EACA,sDAAA;EACA,yDAAA;EACA,aAAA;EACA,8BAAA;EACA,mBAAA;EACA,gBAAA;AACA;AAEA;EACA,aAAA;EACA,mBAAA;EACA,eAAA;EACA,qCAAA;AACA;AAEA;EACA,iBAAA;EACA,eAAA;AACA;AAEA;EACA,qCAAA;AACA;;AAEA,SAAA;AACA;EACA,qCAAA;EACA,gBAAA;AACA;;AAEA,SAAA;AACA;EACA,sDAAA;EACA,sDAAA;EACA,qCAAA;AACA;;AAEA,SAAA;AACA;EACA,kBAAA;EACA,gBAAA;AACA;AAEA;EACA,WAAA;EACA,kBAAA;EACA,MAAA;EACA,WAAA;EACA,WAAA;EACA,YAAA;EACA;;;;;GAKA;EACA,gDAAA;EACA,UAAA;AACA;AAEA;AACA;IACA,WAAA;AACA;AACA;IACA,UAAA;AACA;AACA;;AAEA,UAAA;AACA;AACA;IACA,WAAA;AACA;AAEA;IACA,kBAAA;AACA;AAEA;IACA,aAAA;AACA;AAEA;IACA,kBAAA;AACA;AACA",file:"index.vue",sourcesContent:["<template>\n <div :class=\"cardClass\" :style=\"cardStyle\">\n \x3c!-- 卡片头部 --\x3e\n <div v-if=\"$slots.header || title\" class=\"tps-card__header\">\n <slot name=\"header\">\n <div class=\"tps-card__title\">\n <i v-if=\"icon\" :class=\"icon\" class=\"tps-card__icon\"></i>\n {{ title }}\n </div>\n <div v-if=\"$slots.extra\" class=\"tps-card__extra\">\n <slot name=\"extra\"></slot>\n </div>\n </slot>\n </div>\n \n \x3c!-- 卡片内容 --\x3e\n <div class=\"tps-card__body\" :style=\"bodyStyle\">\n <slot></slot>\n </div>\n \n \x3c!-- 卡片底部 --\x3e\n <div v-if=\"$slots.footer\" class=\"tps-card__footer\">\n <slot name=\"footer\"></slot>\n </div>\n </div>\n</template>\n\n<script>\n/**\n * TpsCard 卡片组件\n * 提供统一的卡片容器,支持多种样式和布局\n * @displayName TpsCard\n */\nexport default {\n name: 'TpsCard',\n \n props: {\n /**\n * 卡片标题\n */\n title: {\n type: String,\n default: ''\n },\n \n /**\n * 标题图标\n */\n icon: {\n type: String,\n default: ''\n },\n \n /**\n * 卡片阴影\n * @values always, hover, never\n */\n shadow: {\n type: String,\n default: 'always',\n validator: value => {\n return ['always', 'hover', 'never'].includes(value)\n }\n },\n \n /**\n * 卡片内边距\n */\n padding: {\n type: [String, Number],\n default: '20px'\n },\n \n /**\n * 卡片圆角\n */\n radius: {\n type: [String, Number],\n default: '8px'\n },\n \n /**\n * 是否有边框\n */\n bordered: {\n type: Boolean,\n default: true\n },\n \n /**\n * 卡片类型\n * @values default, primary, success, warning, danger, info\n */\n type: {\n type: String,\n default: 'default',\n validator: value => {\n return ['default', 'primary', 'success', 'warning', 'danger', 'info'].includes(value)\n }\n },\n \n /**\n * 是否可悬浮\n */\n hoverable: {\n type: Boolean,\n default: false\n },\n \n /**\n * 是否加载中\n */\n loading: {\n type: Boolean,\n default: false\n },\n \n /**\n * 自定义背景色\n */\n backgroundColor: {\n type: String,\n default: ''\n },\n \n /**\n * 卡片尺寸\n * @values small, medium, large\n */\n size: {\n type: String,\n default: 'medium',\n validator: value => {\n return ['small', 'medium', 'large'].includes(value)\n }\n }\n },\n \n computed: {\n /**\n * 卡片样式类\n */\n cardClass() {\n return [\n 'tps-card',\n `tps-card--${this.shadow}`,\n `tps-card--${this.size}`,\n {\n [`tps-card--${this.type}`]: this.type !== 'default',\n 'tps-card--bordered': this.bordered,\n 'tps-card--hoverable': this.hoverable,\n 'tps-card--loading': this.loading\n }\n ]\n },\n \n /**\n * 卡片样式\n */\n cardStyle() {\n const style = {}\n \n if (this.radius) {\n style.borderRadius = typeof this.radius === 'number' ? `${this.radius}px` : this.radius\n }\n \n if (this.backgroundColor) {\n style.backgroundColor = this.backgroundColor\n }\n \n return style\n },\n \n /**\n * 卡片内容样式\n */\n bodyStyle() {\n const style = {}\n \n if (this.padding) {\n style.padding = typeof this.padding === 'number' ? `${this.padding}px` : this.padding\n }\n \n return style\n }\n }\n}\n<\/script>\n\n<style scoped>\n.tps-card {\n background-color: var(--tps-background-color, #ffffff);\n border: 1px solid var(--tps-border-color, #EBEEF5);\n border-radius: 8px;\n overflow: hidden;\n transition: all 0.3s ease;\n position: relative;\n}\n\n/* 阴影样式 */\n.tps-card--always {\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n\n.tps-card--hover {\n box-shadow: none;\n}\n\n.tps-card--hover:hover {\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n\n.tps-card--never {\n box-shadow: none;\n}\n\n/* 边框样式 */\n.tps-card--bordered {\n border: 1px solid var(--tps-border-color, #EBEEF5);\n}\n\n.tps-card:not(.tps-card--bordered) {\n border: none;\n}\n\n/* 悬浮效果 */\n.tps-card--hoverable:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.15);\n}\n\n/* 尺寸样式 */\n.tps-card--small .tps-card__header {\n padding: 12px 16px;\n}\n\n.tps-card--small .tps-card__body {\n padding: 12px 16px;\n}\n\n.tps-card--small .tps-card__footer {\n padding: 12px 16px;\n}\n\n.tps-card--medium .tps-card__header {\n padding: 16px 20px;\n}\n\n.tps-card--medium .tps-card__body {\n padding: 20px;\n}\n\n.tps-card--medium .tps-card__footer {\n padding: 16px 20px;\n}\n\n.tps-card--large .tps-card__header {\n padding: 20px 24px;\n}\n\n.tps-card--large .tps-card__body {\n padding: 24px;\n}\n\n.tps-card--large .tps-card__footer {\n padding: 20px 24px;\n}\n\n/* 类型样式 */\n.tps-card--primary {\n border-color: var(--tps-primary-color, #4d9bd5);\n}\n\n.tps-card--primary .tps-card__header {\n background-color: var(--tps-primary-color, #4d9bd5);\n color: #ffffff;\n}\n\n.tps-card--success {\n border-color: var(--tps-success-color, #67C23A);\n}\n\n.tps-card--success .tps-card__header {\n background-color: var(--tps-success-color, #67C23A);\n color: #ffffff;\n}\n\n.tps-card--warning {\n border-color: var(--tps-warning-color, #E6A23C);\n}\n\n.tps-card--warning .tps-card__header {\n background-color: var(--tps-warning-color, #E6A23C);\n color: #ffffff;\n}\n\n.tps-card--danger {\n border-color: var(--tps-danger-color, #F56C6C);\n}\n\n.tps-card--danger .tps-card__header {\n background-color: var(--tps-danger-color, #F56C6C);\n color: #ffffff;\n}\n\n.tps-card--info {\n border-color: var(--tps-info-color, #909399);\n}\n\n.tps-card--info .tps-card__header {\n background-color: var(--tps-info-color, #909399);\n color: #ffffff;\n}\n\n/* 头部样式 */\n.tps-card__header {\n background-color: var(--tps-background-color, #ffffff);\n border-bottom: 1px solid var(--tps-border-color, #EBEEF5);\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-weight: 500;\n}\n\n.tps-card__title {\n display: flex;\n align-items: center;\n font-size: 16px;\n color: var(--tps-text-color, #303133);\n}\n\n.tps-card__icon {\n margin-right: 8px;\n font-size: 18px;\n}\n\n.tps-card__extra {\n color: var(--tps-text-color, #606266);\n}\n\n/* 内容样式 */\n.tps-card__body {\n color: var(--tps-text-color, #606266);\n line-height: 1.6;\n}\n\n/* 底部样式 */\n.tps-card__footer {\n background-color: var(--tps-background-color, #fafafa);\n border-top: 1px solid var(--tps-border-color, #EBEEF5);\n color: var(--tps-text-color, #606266);\n}\n\n/* 加载状态 */\n.tps-card--loading {\n position: relative;\n overflow: hidden;\n}\n\n.tps-card--loading::before {\n content: '';\n position: absolute;\n top: 0;\n left: -100%;\n width: 100%;\n height: 100%;\n background: linear-gradient(\n 90deg,\n transparent,\n rgba(255, 255, 255, 0.4),\n transparent\n );\n animation: loading 1.5s infinite;\n z-index: 1;\n}\n\n@keyframes loading {\n 0% {\n left: -100%;\n }\n 100% {\n left: 100%;\n }\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n .tps-card {\n margin: 8px;\n }\n \n .tps-card__header {\n padding: 12px 16px;\n }\n \n .tps-card__body {\n padding: 16px;\n }\n \n .tps-card__footer {\n padding: 12px 16px;\n }\n}\n</style>"]},media:void 0})},$,"data-v-0f58e5b7",false,undefined,!1,w,void 0,void 0);O.install=function(n){n.component(O.name,O)};const D={name:"TpsForm",props:{model:{type:Object,required:!0},rules:{type:Object,default:()=>({})},inline:{type:Boolean,default:!1},labelPosition:{type:String,default:"right",validator:n=>["right","left","top"].includes(n)},labelWidth:{type:String,default:"100px"},labelSuffix:{type:String,default:""},hideRequiredAsterisk:{type:Boolean,default:!1},showMessage:{type:Boolean,default:!0},inlineMessage:{type:Boolean,default:!1},statusIcon:{type:Boolean,default:!1},validateOnRuleChange:{type:Boolean,default:!0},size:{type:String,default:"medium",validator:n=>["medium","small","mini"].includes(n)},disabled:{type:Boolean,default:!1},theme:{type:String,default:"default",validator:n=>["default","card","border"].includes(n)},showSubmit:{type:Boolean,default:!1},showReset:{type:Boolean,default:!1},submitText:{type:String,default:"提交"},resetText:{type:String,default:"重置"}},computed:{formClass(){return["tps-form",`tps-form--${this.theme}`,`tps-form--${this.size}`,{"tps-form--inline":this.inline,"tps-form--disabled":this.disabled}]}},methods:{validate(n){return this.$refs.tpsForm.validate(n)},validateField(n,e){return this.$refs.tpsForm.validateField(n,e)},resetFields(){this.$refs.tpsForm.resetFields()},clearValidate(n){this.$refs.tpsForm.clearValidate(n)},handleValidate(n,e,t){this.$emit("validate",n,e,t)},handleSubmit(){this.validate(n=>{n?this.$emit("submit",this.model):this.$emit("submit-error")})},handleReset(){this.resetFields(),this.$emit("reset")}}};var R=function(){var n=this,e=n.$createElement;return(n._self._c||e)("el-form",{ref:"tpsForm",class:n.formClass,attrs:{model:n.model,rules:n.rules,inline:n.inline,"label-position":n.labelPosition,"label-width":n.labelWidth,"label-suffix":n.labelSuffix,"hide-required-asterisk":n.hideRequiredAsterisk,"show-message":n.showMessage,"inline-message":n.inlineMessage,"status-icon":n.statusIcon,"validate-on-rule-change":n.validateOnRuleChange,size:n.size,disabled:n.disabled},on:{validate:n.handleValidate}},[n._t("default")],2)};R._withStripped=!0;const z=x({render:R,staticRenderFns:[]},function(n){n&&n("data-v-1b098b29_0",{source:"\n.tps-form[data-v-1b098b29] {\n /* 基础样式 */\n}\n\n/* 卡片主题 */\n.tps-form--card[data-v-1b098b29] {\n background: var(--tps-background-color, #ffffff);\n border: 1px solid var(--tps-border-color, #EBEEF5);\n border-radius: 8px;\n padding: 20px;\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n\n/* 边框主题 */\n.tps-form--border[data-v-1b098b29] {\n border: 1px solid var(--tps-border-color, #EBEEF5);\n border-radius: 4px;\n padding: 16px;\n}\n\n/* 尺寸样式 */\n.tps-form--small[data-v-1b098b29] {\n font-size: 13px;\n}\n.tps-form--mini[data-v-1b098b29] {\n font-size: 12px;\n}\n\n/* 禁用状态 */\n.tps-form--disabled[data-v-1b098b29] {\n opacity: 0.6;\n pointer-events: none;\n}\n\n/* 行内表单 */\n.tps-form--inline .el-form-item[data-v-1b098b29] {\n margin-right: 16px;\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n.tps-form--card[data-v-1b098b29] {\n padding: 16px;\n margin: 8px;\n}\n.tps-form--border[data-v-1b098b29] {\n padding: 12px;\n margin: 8px;\n}\n.tps-form .el-form-item__label[data-v-1b098b29] {\n width: 100% !important;\n text-align: left !important;\n}\n.tps-form .el-form-item__content[data-v-1b098b29] {\n margin-left: 0 !important;\n}\n}\n",map:{version:3,sources:["E:\\新建文件夹\\tps-ui-components\\src\\components\\TpsForm\\index.vue"],names:[],mappings:";AAuSA;EACA,SAAA;AACA;;AAEA,SAAA;AACA;EACA,gDAAA;EACA,kDAAA;EACA,kBAAA;EACA,aAAA;EACA,2CAAA;AACA;;AAEA,SAAA;AACA;EACA,kDAAA;EACA,kBAAA;EACA,aAAA;AACA;;AAEA,SAAA;AACA;EACA,eAAA;AACA;AAEA;EACA,eAAA;AACA;;AAEA,SAAA;AACA;EACA,YAAA;EACA,oBAAA;AACA;;AAEA,SAAA;AACA;EACA,kBAAA;AACA;;AAEA,UAAA;AACA;AACA;IACA,aAAA;IACA,WAAA;AACA;AAEA;IACA,aAAA;IACA,WAAA;AACA;AAEA;IACA,sBAAA;IACA,2BAAA;AACA;AAEA;IACA,yBAAA;AACA;AACA",file:"index.vue",sourcesContent:["<template>\n <el-form\n ref=\"tpsForm\"\n :class=\"formClass\"\n :model=\"model\"\n :rules=\"rules\"\n :inline=\"inline\"\n :label-position=\"labelPosition\"\n :label-width=\"labelWidth\"\n :label-suffix=\"labelSuffix\"\n :hide-required-asterisk=\"hideRequiredAsterisk\"\n :show-message=\"showMessage\"\n :inline-message=\"inlineMessage\"\n :status-icon=\"statusIcon\"\n :validate-on-rule-change=\"validateOnRuleChange\"\n :size=\"size\"\n :disabled=\"disabled\"\n @validate=\"handleValidate\"\n >\n <slot></slot>\n </el-form>\n</template>\n\n<script>\n/**\n * TpsForm 表单组件\n * 基于Element UI Form组件封装,提供统一的表单样式和验证\n * @displayName TpsForm\n */\nexport default {\n name: 'TpsForm',\n \n props: {\n /**\n * 表单数据对象\n */\n model: {\n type: Object,\n required: true\n },\n \n /**\n * 表单验证规则\n */\n rules: {\n type: Object,\n default: () => ({})\n },\n \n /**\n * 行内表单模式\n */\n inline: {\n type: Boolean,\n default: false\n },\n \n /**\n * 表单域标签的位置\n * @values right, left, top\n */\n labelPosition: {\n type: String,\n default: 'right',\n validator: value => {\n return ['right', 'left', 'top'].includes(value)\n }\n },\n \n /**\n * 表单域标签的宽度\n */\n labelWidth: {\n type: String,\n default: '100px'\n },\n \n /**\n * 表单域标签的后缀\n */\n labelSuffix: {\n type: String,\n default: ''\n },\n \n /**\n * 是否隐藏必填字段的标签旁边的红色星号\n */\n hideRequiredAsterisk: {\n type: Boolean,\n default: false\n },\n \n /**\n * 是否显示校验错误信息\n */\n showMessage: {\n type: Boolean,\n default: true\n },\n \n /**\n * 是否以行内形式展示校验信息\n */\n inlineMessage: {\n type: Boolean,\n default: false\n },\n \n /**\n * 是否在输入框中显示校验结果反馈图标\n */\n statusIcon: {\n type: Boolean,\n default: false\n },\n \n /**\n * 是否在 rules 属性改变后立即触发一次验证\n */\n validateOnRuleChange: {\n type: Boolean,\n default: true\n },\n \n /**\n * 用于控制该表单内组件的尺寸\n * @values medium, small, mini\n */\n size: {\n type: String,\n default: 'medium',\n validator: value => {\n return ['medium', 'small', 'mini'].includes(value)\n }\n },\n \n /**\n * 是否禁用该表单内的所有组件\n */\n disabled: {\n type: Boolean,\n default: false\n },\n \n /**\n * 表单主题\n * @values default, card, border\n */\n theme: {\n type: String,\n default: 'default',\n validator: value => {\n return ['default', 'card', 'border'].includes(value)\n }\n },\n \n /**\n * 是否显示提交按钮\n */\n showSubmit: {\n type: Boolean,\n default: false\n },\n \n /**\n * 是否显示重置按钮\n */\n showReset: {\n type: Boolean,\n default: false\n },\n \n /**\n * 提交按钮文本\n */\n submitText: {\n type: String,\n default: '提交'\n },\n \n /**\n * 重置按钮文本\n */\n resetText: {\n type: String,\n default: '重置'\n }\n },\n \n computed: {\n /**\n * 表单样式类\n */\n formClass() {\n return [\n 'tps-form',\n `tps-form--${this.theme}`,\n `tps-form--${this.size}`,\n {\n 'tps-form--inline': this.inline,\n 'tps-form--disabled': this.disabled\n }\n ]\n }\n },\n \n methods: {\n /**\n * 对整个表单进行校验的方法\n * @param {Function} callback - 回调函数\n */\n validate(callback) {\n return this.$refs.tpsForm.validate(callback)\n },\n \n /**\n * 对部分表单字段进行校验的方法\n * @param {Array|String} props - 待校验的表单项的 prop 属性\n * @param {Function} callback - 回调函数\n */\n validateField(props, callback) {\n return this.$refs.tpsForm.validateField(props, callback)\n },\n \n /**\n * 对整个表单进行重置,将所有字段值重置为初始值并移除校验结果\n */\n resetFields() {\n this.$refs.tpsForm.resetFields()\n },\n \n /**\n * 移除表单项的校验结果\n * @param {Array|String} props - 传入待移除的表单项的 prop 属性或者 prop 组成的数组\n */\n clearValidate(props) {\n this.$refs.tpsForm.clearValidate(props)\n },\n \n /**\n * 表单验证事件处理\n * @param {String} prop - 被校验的表单项 prop 值\n * @param {Boolean} isValid - 校验是否通过\n * @param {String} message - 错误消息\n */\n handleValidate(prop, isValid, message) {\n /**\n * 表单验证事件\n * @event validate\n * @param {String} prop - 被校验的表单项 prop 值\n * @param {Boolean} isValid - 校验是否通过\n * @param {String} message - 错误消息\n */\n this.$emit('validate', prop, isValid, message)\n },\n \n /**\n * 提交表单\n */\n handleSubmit() {\n this.validate((valid) => {\n if (valid) {\n /**\n * 表单提交事件\n * @event submit\n * @param {Object} model - 表单数据\n */\n this.$emit('submit', this.model)\n } else {\n /**\n * 表单提交失败事件\n * @event submit-error\n */\n this.$emit('submit-error')\n }\n })\n },\n \n /**\n * 重置表单\n */\n handleReset() {\n this.resetFields()\n /**\n * 表单重置事件\n * @event reset\n */\n this.$emit('reset')\n }\n }\n}\n<\/script>\n\n<style scoped>\n.tps-form {\n /* 基础样式 */\n}\n\n/* 卡片主题 */\n.tps-form--card {\n background: var(--tps-background-color, #ffffff);\n border: 1px solid var(--tps-border-color, #EBEEF5);\n border-radius: 8px;\n padding: 20px;\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n\n/* 边框主题 */\n.tps-form--border {\n border: 1px solid var(--tps-border-color, #EBEEF5);\n border-radius: 4px;\n padding: 16px;\n}\n\n/* 尺寸样式 */\n.tps-form--small {\n font-size: 13px;\n}\n\n.tps-form--mini {\n font-size: 12px;\n}\n\n/* 禁用状态 */\n.tps-form--disabled {\n opacity: 0.6;\n pointer-events: none;\n}\n\n/* 行内表单 */\n.tps-form--inline .el-form-item {\n margin-right: 16px;\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n .tps-form--card {\n padding: 16px;\n margin: 8px;\n }\n \n .tps-form--border {\n padding: 12px;\n margin: 8px;\n }\n \n .tps-form .el-form-item__label {\n width: 100% !important;\n text-align: left !important;\n }\n \n .tps-form .el-form-item__content {\n margin-left: 0 !important;\n }\n}\n</style>"]},media:void 0})},D,"data-v-1b098b29",false,undefined,!1,w,void 0,void 0);z.install=function(n){n.component(z.name,z)};const N={name:"TpsTable",props:{data:{type:Array,default:()=>[]},height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},stripe:{type:Boolean,default:!1},border:{type:Boolean,default:!1},size:{type:String,default:"medium"},fit:{type:Boolean,default:!0},showHeader:{type:Boolean,default:!0},highlightCurrentRow:{type:Boolean,default:!1},currentRowKey:{type:[String,Number],default:""},rowClassName:{type:[String,Function],default:""},rowStyle:{type:[Object,Function],default:()=>({})},cellClassName:{type:[String,Function],default:""},cellStyle:{type:[Object,Function],default:()=>({})},headerRowClassName:{type:[String,Function],default:""},headerRowStyle:{type:[Object,Function],default:()=>({})},headerCellClassName:{type:[String,Function],default:""},headerCellStyle:{type:[Object,Function],default:()=>({})},rowKey:{type:[String,Function],default:""},emptyText:{type:String,default:"暂无数据"},defaultExpandAll:{type:Boolean,default:!1},expandRowKeys:{type:Array,default:()=>[]},defaultSort:{type:Object,default:()=>({})},tooltipEffect:{type:String,default:"dark"},showSummary:{type:Boolean,default:!1},sumText:{type:String,default:"合计"},summaryMethod:{type:Function,default:null},spanMethod:{type:Function,default:null},selectOnIndeterminate:{type:Boolean,default:!0},indent:{type:Number,default:16},lazy:{type:Boolean,default:!1},load:{type:Function,default:null},treeProps:{type:Object,default:()=>({})}},methods:{clearSelection(){this.$refs.tpsTable.clearSelection()},toggleRowSelection(n,e){this.$refs.tpsTable.toggleRowSelection(n,e)},toggleAllSelection(){this.$refs.tpsTable.toggleAllSelection()},toggleRowExpansion(n,e){this.$refs.tpsTable.toggleRowExpansion(n,e)},setCurrentRow(n){this.$refs.tpsTable.setCurrentRow(n)},clearSort(){this.$refs.tpsTable.clearSort()},clearFilter(n){this.$refs.tpsTable.clearFilter(n)},doLayout(){this.$refs.tpsTable.doLayout()},sort(n,e){this.$refs.tpsTable.sort(n,e)},handleSelect(n,e){this.$emit("select",n,e)},handleSelectAll(n){this.$emit("select-all",n)},handleSelectionChange(n){this.$emit("selection-change",n)},handleCellMouseEnter(n,e,t,a){this.$emit("cell-mouse-enter",n,e,t,a)},handleCellMouseLeave(n,e,t,a){this.$emit("cell-mouse-leave",n,e,t,a)},handleCellClick(n,e,t,a){this.$emit("cell-click",n,e,t,a)},handleCellDblclick(n,e,t,a){this.$emit("cell-dblclick",n,e,t,a)},handleRowClick(n,e,t){this.$emit("row-click",n,e,t)},handleRowContextmenu(n,e,t){this.$emit("row-contextmenu",n,e,t)},handleRowDblclick(n,e,t){this.$emit("row-dblclick",n,e,t)},handleHeaderClick(n,e){this.$emit("header-click",n,e)},handleHeaderContextmenu(n,e){this.$emit("header-contextmenu",n,e)},handleSortChange({column:n,prop:e,order:t}){this.$emit("sort-change",{column:n,prop:e,order:t})},handleFilterChange(n){this.$emit("filter-change",n)},handleCurrentChange(n,e){this.$emit("current-change",n,e)},handleHeaderDragend(n,e,t,a){this.$emit("header-dragend",n,e,t,a)},handleExpandChange(n,e){this.$emit("expand-change",n,e)}}};var j=function(){var n=this,e=n.$createElement,t=n._self._c||e;return t("div",{staticClass:"tps-table"},[t("el-table",{ref:"tpsTable",attrs:{data:n.data,height:n.height,"max-height":n.maxHeight,stripe:n.stripe,border:n.border,size:n.size,fit:n.fit,"show-header":n.showHeader,"highlight-current-row":n.highlightCurrentRow,"current-row-key":n.currentRowKey,"row-class-name":n.rowClassName,"row-style":n.rowStyle,"cell-class-name":n.cellClassName,"cell-style":n.cellStyle,"header-row-class-name":n.headerRowClassName,"header-row-style":n.headerRowStyle,"header-cell-class-name":n.headerCellClassName,"header-cell-style":n.headerCellStyle,"row-key":n.rowKey,"empty-text":n.emptyText,"default-expand-all":n.defaultExpandAll,"expand-row-keys":n.expandRowKeys,"default-sort":n.defaultSort,"tooltip-effect":n.tooltipEffect,"show-summary":n.showSummary,"sum-text":n.sumText,"summary-method":n.summaryMethod,"span-method":n.spanMethod,"select-on-indeterminate":n.selectOnIndeterminate,indent:n.indent,lazy:n.lazy,load:n.load,"tree-props":n.treeProps},on:{select:n.handleSelect,"select-all":n.handleSelectAll,"selection-change":n.handleSelectionChange,"cell-mouse-enter":n.handleCellMouseEnter,"cell-mouse-leave":n.handleCellMouseLeave,"cell-click":n.handleCellClick,"cell-dblclick":n.handleCellDblclick,"row-click":n.handleRowClick,"row-contextmenu":n.handleRowContextmenu,"row-dblclick":n.handleRowDblclick,"header-click":n.handleHeaderClick,"header-contextmenu":n.handleHeaderContextmenu,"sort-change":n.handleSortChange,"filter-change":n.handleFilterChange,"current-change":n.handleCurrentChange,"header-dragend":n.handleHeaderDragend,"expand-change":n.handleExpandChange}},[n._t("default")],2)],1)};j._withStripped=!0;const I=x({render:j,staticRenderFns:[]},function(n){n&&n("data-v-3813c9fa_0",{source:"\n.tps-table[data-v-3813c9fa] {\n /* 表格容器样式 */\n}\n\n/* 自定义表格样式 */\n.tps-table .el-table[data-v-3813c9fa] {\n border-radius: 8px;\n overflow: hidden;\n}\n.tps-table .el-table th[data-v-3813c9fa] {\n background-color: var(--tps-background-color, #fafafa);\n color: var(--tps-text-color, #303133);\n font-weight: 600;\n}\n.tps-table .el-table td[data-v-3813c9fa] {\n border-bottom: 1px solid var(--tps-border-color, #EBEEF5);\n}\n.tps-table .el-table--striped .el-table__body tr.el-table__row--striped td[data-v-3813c9fa] {\n background-color: var(--tps-background-color, #fafafa);\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n.tps-table[data-v-3813c9fa] {\n overflow-x: auto;\n}\n}\n",map:{version:3,sources:["E:\\新建文件夹\\tps-ui-components\\src\\components\\TpsTable\\index.vue"],names:[],mappings:";AA8bA;EACA,WAAA;AACA;;AAEA,YAAA;AACA;EACA,kBAAA;EACA,gBAAA;AACA;AAEA;EACA,sDAAA;EACA,qCAAA;EACA,gBAAA;AACA;AAEA;EACA,yDAAA;AACA;AAEA;EACA,sDAAA;AACA;;AAEA,UAAA;AACA;AACA;IACA,gBAAA;AACA;AACA",file:"index.vue",sourcesContent:['<template>\n <div class="tps-table">\n <el-table\n ref="tpsTable"\n :data="data"\n :height="height"\n :max-height="maxHeight"\n :stripe="stripe"\n :border="border"\n :size="size"\n :fit="fit"\n :show-header="showHeader"\n :highlight-current-row="highlightCurrentRow"\n :current-row-key="currentRowKey"\n :row-class-name="rowClassName"\n :row-style="rowStyle"\n :cell-class-name="cellClassName"\n :cell-style="cellStyle"\n :header-row-class-name="headerRowClassName"\n :header-row-style="headerRowStyle"\n :header-cell-class-name="headerCellClassName"\n :header-cell-style="headerCellStyle"\n :row-key="rowKey"\n :empty-text="emptyText"\n :default-expand-all="defaultExpandAll"\n :expand-row-keys="expandRowKeys"\n :default-sort="defaultSort"\n :tooltip-effect="tooltipEffect"\n :show-summary="showSummary"\n :sum-text="sumText"\n :summary-method="summaryMethod"\n :span-method="spanMethod"\n :select-on-indeterminate="selectOnIndeterminate"\n :indent="indent"\n :lazy="lazy"\n :load="load"\n :tree-props="treeProps"\n @select="handleSelect"\n @select-all="handleSelectAll"\n @selection-change="handleSelectionChange"\n @cell-mouse-enter="handleCellMouseEnter"\n @cell-mouse-leave="handleCellMouseLeave"\n @cell-click="handleCellClick"\n @cell-dblclick="handleCellDblclick"\n @row-click="handleRowClick"\n @row-contextmenu="handleRowContextmenu"\n @row-dblclick="handleRowDblclick"\n @header-click="handleHeaderClick"\n @header-contextmenu="handleHeaderContextmenu"\n @sort-change="handleSortChange"\n @filter-change="handleFilterChange"\n @current-change="handleCurrentChange"\n @header-dragend="handleHeaderDragend"\n @expand-change="handleExpandChange"\n >\n <slot></slot>\n </el-table>\n </div>\n</template>\n\n<script>\n/**\n * TpsTable 表格组件\n * 基于Element UI Table组件封装\n * @displayName TpsTable\n */\nexport default {\n name: \'TpsTable\',\n \n props: {\n /**\n * 显示的数据\n */\n data: {\n type: Array,\n default: () => []\n },\n \n /**\n * Table的高度\n */\n height: {\n type: [String, Number],\n default: \'\'\n },\n \n /**\n * Table的最大高度\n */\n maxHeight: {\n type: [String, Number],\n default: \'\'\n },\n \n /**\n * 是否为斑马纹table\n */\n stripe: {\n type: Boolean,\n default: false\n },\n \n /**\n * 是否带有纵向边框\n */\n border: {\n type: Boolean,\n default: false\n },\n \n /**\n * Table的尺寸\n */\n size: {\n type: String,\n default: \'medium\'\n },\n \n /**\n * 列的宽度是否自撑开\n */\n fit: {\n type: Boolean,\n default: true\n },\n \n /**\n * 是否显示表头\n */\n showHeader: {\n type: Boolean,\n default: true\n },\n \n /**\n * 是否要高亮当前行\n */\n highlightCurrentRow: {\n type: Boolean,\n default: false\n },\n \n /**\n * 当前行的key\n */\n currentRowKey: {\n type: [String, Number],\n default: \'\'\n },\n \n /**\n * 行的className的回调方法\n */\n rowClassName: {\n type: [String, Function],\n default: \'\'\n },\n \n /**\n * 行的style的回调方法\n */\n rowStyle: {\n type: [Object, Function],\n default: () => ({})\n },\n \n /**\n * 单元格的className的回调方法\n */\n cellClassName: {\n type: [String, Function],\n default: \'\'\n },\n \n /**\n * 单元格的style的回调方法\n */\n cellStyle: {\n type: [Object, Function],\n default: () => ({})\n },\n \n /**\n * 表头行的className的回调方法\n */\n headerRowClassName: {\n type: [String, Function],\n default: \'\'\n },\n \n /**\n * 表头行的style的回调方法\n */\n headerRowStyle: {\n type: [Object, Function],\n default: () => ({})\n },\n \n /**\n * 表头单元格的className的回调方法\n */\n headerCellClassName: {\n type: [String, Function],\n default: \'\'\n },\n \n /**\n * 表头单元格的style的回调方法\n */\n headerCellStyle: {\n type: [Object, Function],\n default: () => ({})\n },\n \n /**\n * 行数据的Key\n */\n rowKey: {\n type: [String, Function],\n default: \'\'\n },\n \n /**\n * 空数据时显示的文本内容\n */\n emptyText: {\n type: String,\n default: \'暂无数据\'\n },\n \n /**\n * 是否默认展开所有行\n */\n defaultExpandAll: {\n type: Boolean,\n default: false\n },\n \n /**\n * 可以通过该属性设置Table目前的展开行\n */\n expandRowKeys: {\n type: Array,\n default: () => []\n },\n \n /**\n * 默认的排序列的prop和顺序\n */\n defaultSort: {\n type: Object,\n default: () => ({})\n },\n \n /**\n * tooltip effect属性\n */\n tooltipEffect: {\n type: String,\n default: \'dark\'\n },\n \n /**\n * 是否在表尾显示合计行\n */\n showSummary: {\n type: Boolean,\n default: false\n },\n \n /**\n * 合计行第一列的文本\n */\n sumText: {\n type: String,\n default: \'合计\'\n },\n \n /**\n * 自定义的合计计算方法\n */\n summaryMethod: {\n type: Function,\n default: null\n },\n \n /**\n * 合并行或列的计算方法\n */\n spanMethod: {\n type: Function,\n default: null\n },\n \n /**\n * 在多选表格中,当仅有部分行被选中时,点击表头的多选框时的行为\n */\n selectOnIndeterminate: {\n type: Boolean,\n default: true\n },\n \n /**\n * 展示树形数据时,树节点的缩进\n */\n indent: {\n type: Number,\n default: 16\n },\n \n /**\n * 是否懒加载子节点数据\n */\n lazy: {\n type: Boolean,\n default: false\n },\n \n /**\n * 加载子节点数据的函数\n */\n load: {\n type: Function,\n default: null\n },\n \n /**\n * 渲染嵌套数据的配置选项\n */\n treeProps: {\n type: Object,\n default: () => ({})\n }\n },\n \n methods: {\n // 表格方法代理\n clearSelection() {\n this.$refs.tpsTable.clearSelection()\n },\n \n toggleRowSelection(row, selected) {\n this.$refs.tpsTable.toggleRowSelection(row, selected)\n },\n \n toggleAllSelection() {\n this.$refs.tpsTable.toggleAllSelection()\n },\n \n toggleRowExpansion(row, expanded) {\n this.$refs.tpsTable.toggleRowExpansion(row, expanded)\n },\n \n setCurrentRow(row) {\n this.$refs.tpsTable.setCurrentRow(row)\n },\n \n clearSort() {\n this.$refs.tpsTable.clearSort()\n },\n \n clearFilter(columnKey) {\n this.$refs.tpsTable.clearFilter(columnKey)\n },\n \n doLayout() {\n this.$refs.tpsTable.doLayout()\n },\n \n sort(prop, order) {\n this.$refs.tpsTable.sort(prop, order)\n },\n \n // 事件处理方法\n handleSelect(selection, row) {\n this.$emit(\'select\', selection, row)\n },\n \n handleSelectAll(selection) {\n this.$emit(\'select-all\', selection)\n },\n \n handleSelectionChange(selection) {\n this.$emit(\'selection-change\', selection)\n },\n \n handleCellMouseEnter(row, column, cell, event) {\n this.$emit(\'cell-mouse-enter\', row, column, cell, event)\n },\n \n handleCellMouseLeave(row, column, cell, event) {\n this.$emit(\'cell-mouse-leave\', row, column, cell, event)\n },\n \n handleCellClick(row, column, cell, event) {\n this.$emit(\'cell-click\', row, column, cell, event)\n },\n \n handleCellDblclick(row, column, cell, event) {\n this.$emit(\'cell-dblclick\', row, column, cell, event)\n },\n \n handleRowClick(row, column, event) {\n this.$emit(\'row-click\', row, column, event)\n },\n \n handleRowContextmenu(row, column, event) {\n this.$emit(\'row-contextmenu\', row, column, event)\n },\n \n handleRowDblclick(row, column, event) {\n this.$emit(\'row-dblclick\', row, column, event)\n },\n \n handleHeaderClick(column, event) {\n this.$emit(\'header-click\', column, event)\n },\n \n handleHeaderContextmenu(column, event) {\n this.$emit(\'header-contextmenu\', column, event)\n },\n \n handleSortChange({ column, prop, order }) {\n this.$emit(\'sort-change\', { column, prop, order })\n },\n \n handleFilterChange(filters) {\n this.$emit(\'filter-change\', filters)\n },\n \n handleCurrentChange(currentRow, oldCurrentRow) {\n this.$emit(\'current-change\', currentRow, oldCurrentRow)\n },\n \n handleHeaderDragend(newWidth, oldWidth, column, event) {\n this.$emit(\'header-dragend\', newWidth, oldWidth, column, event)\n },\n \n handleExpandChange(row, expandedRows) {\n this.$emit(\'expand-change\', row, expandedRows)\n }\n }\n}\n<\/script>\n\n<style scoped>\n.tps-table {\n /* 表格容器样式 */\n}\n\n/* 自定义表格样式 */\n.tps-table .el-table {\n border-radius: 8px;\n overflow: hidden;\n}\n\n.tps-table .el-table th {\n background-color: var(--tps-background-color, #fafafa);\n color: var(--tps-text-color, #303133);\n font-weight: 600;\n}\n\n.tps-table .el-table td {\n border-bottom: 1px solid var(--tps-border-color, #EBEEF5);\n}\n\n.tps-table .el-table--striped .el-table__body tr.el-table__row--striped td {\n background-color: var(--tps-background-color, #fafafa);\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n .tps-table {\n overflow-x: auto;\n }\n}\n</style>']},media:void 0})},N,"data-v-3813c9fa",false,undefined,!1,w,void 0,void 0);I.install=function(n){n.component(I.name,I)};const P={name:"TpsDialog",props:{visible:{type:Boolean,default:!1},title:{type:String,default:""},width:{type:String,default:"50%"},fullscreen:{type:Boolean,default:!1},top:{type:String,default:"15vh"},modal:{type:Boolean,default:!0},modalAppendToBody:{type:Boolean,default:!0},appendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},customClass:{type:String,default:""},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},beforeClose:{type:Function,default:null},center:{type:Boolean,default:!1},destroyOnClose:{type:Boolean,default:!1},showDefaultFooter:{type:Boolean,default:!0},showCancel:{type:Boolean,default:!0},showConfirm:{type:Boolean,default:!0},cancelText:{type:String,default:"取消"},confirmText:{type:String,default:"确定"},confirmLoading:{type:Boolean,default:!1},buttonSize:{type:String,default:"medium"},type:{type:String,default:"default",validator:n=>["default","info","success","warning","error"].includes(n)}},computed:{dialogVisible:{get(){return this.visible},set(n){this.$emit("update:visible",n)}},dialogClass(){return["tps-dialog",{[`tps-dialog--${this.type}`]:"default"!==this.type}]}},methods:{handleCancel(){this.$emit("cancel"),this.dialogVisible=!1},handleConfirm(){this.$emit("confirm")},handleOpen(){this.$emit("open")},handleOpened(){this.$emit("opened")},handleClose(){this.$emit("close")},handleClosed(){this.$emit("closed")}}};var M=function(){var n=this,e=n.$createElement,t=n._self._c||e;return t("el-dialog",{class:n.dialogClass,attrs:{visible:n.dialogVisible,title:n.title,width:n.width,fullscreen:n.fullscreen,top:n.top,modal:n.modal,"modal-append-to-body":n.modalAppendToBody,"append-to-body":n.appendToBody,"lock-scroll":n.lockScroll,"custom-class":n.customClass,"close-on-click-modal":n.closeOnClickModal,"close-on-press-escape":n.closeOnPressEscape,"show-close":n.showClose,"before-close":n.beforeClose,center:n.center,"destroy-on-close":n.destroyOnClose},on:{"update:visible":function(e){n.dialogVisible=e},open:n.handleOpen,opened:n.handleOpened,close:n.handleClose,closed:n.handleClosed},scopedSlots:n._u([n.$slots.title?{key:"title",fn:function(){return[n._t("title")]},proxy:!0}:null,{key:"footer",fn:function(){return[t("div",{staticClass:"tps-dialog__footer"},[n._t("footer",function(){return[n.showDefaultFooter?t("div",{staticClass:"tps-dialog__actions"},[n.showCancel?t("el-button",{attrs:{size:n.buttonSize},on:{click:n.handleCancel}},[n._v("\n "+n._s(n.cancelText)+"\n ")]):n._e(),n._v(" "),n.showConfirm?t("el-button",{attrs:{type:"primary",size:n.buttonSize,loading:n.confirmLoading},on:{click:n.handleConfirm}},[n._v("\n "+n._s(n.confirmText)+"\n ")]):n._e()],1):n._e()]})],2)]},proxy:!0}],null,!0)},[n._v(" "),t("div",{staticClass:"tps-dialog__body"},[n._t("default")],2)])};M._withStripped=!0;const q=x({render:M,staticRenderFns:[]},function(n){n&&n("data-v-50e69e2d_0",{source:"\n.tps-dialog[data-v-50e69e2d] {\n /* 对话框基础样式 */\n}\n.tps-dialog__body[data-v-50e69e2d] {\n padding: 0;\n line-height: 1.6;\n color: var(--tps-text-color, #606266);\n}\n.tps-dialog__footer[data-v-50e69e2d] {\n padding: 0;\n}\n.tps-dialog__actions[data-v-50e69e2d] {\n text-align: right;\n}\n.tps-dialog__actions .el-button[data-v-50e69e2d] {\n margin-left: 12px;\n}\n\n/* 对话框类型样式 */\n.tps-dialog--info .el-dialog__header[data-v-50e69e2d] {\n background-color: var(--tps-info-color, #909399);\n color: #ffffff;\n}\n.tps-dialog--success .el-dialog__header[data-v-50e69e2d] {\n background-color: var(--tps-success-color, #67C23A);\n color: #ffffff;\n}\n.tps-dialog--warning .el-dialog__header[data-v-50e69e2d] {\n background-color: var(--tps-warning-color, #E6A23C);\n color: #ffffff;\n}\n.tps-dialog--error .el-dialog__header[data-v-50e69e2d] {\n background-color: var(--tps-danger-color, #F56C6C);\n color: #ffffff;\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n.tps-dialog .el-dialog[data-v-50e69e2d] {\n width: 90% !important;\n margin-top: 5vh !important;\n}\n.tps-dialog__actions[data-v-50e69e2d] {\n text-align: center;\n}\n.tps-dialog__actions .el-button[data-v-50e69e2d] {\n margin: 0 6px;\n}\n}\n",map:{version:3,sources:["E:\\新建文件夹\\tps-ui-components\\src\\components\\TpsDialog\\index.vue"],names:[],mappings:";AA+WA;EACA,YAAA;AACA;AAEA;EACA,UAAA;EACA,gBAAA;EACA,qCAAA;AACA;AAEA;EACA,UAAA;AACA;AAEA;EACA,iBAAA;AACA;AAEA;EACA,iBAAA;AACA;;AAEA,YAAA;AACA;EACA,gDAAA;EACA,cAAA;AACA;AAEA;EACA,mDAAA;EACA,cAAA;AACA;AAEA;EACA,mDAAA;EACA,cAAA;AACA;AAEA;EACA,kDAAA;EACA,cAAA;AACA;;AAEA,UAAA;AACA;AACA;IACA,qBAAA;IACA,0BAAA;AACA;AAEA;IACA,kBAAA;AACA;AAEA;IACA,aAAA;AACA;AACA",file:"index.vue",sourcesContent:['<template>\n <el-dialog\n :class="dialogClass"\n :visible.sync="dialogVisible"\n :title="title"\n :width="width"\n :fullscreen="fullscreen"\n :top="top"\n :modal="modal"\n :modal-append-to-body="modalAppendToBody"\n :append-to-body="appendToBody"\n :lock-scroll="lockScroll"\n :custom-class="customClass"\n :close-on-click-modal="closeOnClickModal"\n :close-on-press-escape="closeOnPressEscape"\n :show-close="showClose"\n :before-close="beforeClose"\n :center="center"\n :destroy-on-close="destroyOnClose"\n @open="handleOpen"\n @opened="handleOpened"\n @close="handleClose"\n @closed="handleClosed"\n >\n \x3c!-- 自定义标题 --\x3e\n <template v-if="$slots.title" #title>\n <slot name="title"></slot>\n </template>\n \n \x3c!-- 对话框内容 --\x3e\n <div class="tps-dialog__body">\n <slot></slot>\n </div>\n \n \x3c!-- 对话框底部 --\x3e\n <template #footer>\n <div class="tps-dialog__footer">\n <slot name="footer">\n <div v-if="showDefaultFooter" class="tps-dialog__actions">\n <el-button\n v-if="showCancel"\n :size="buttonSize"\n @click="handleCancel"\n >\n {{ cancelText }}\n </el-button>\n <el-button\n v-if="showConfirm"\n type="primary"\n :size="buttonSize"\n :loading="confirmLoading"\n @click="handleConfirm"\n >\n {{ confirmText }}\n </el-button>\n </div>\n </slot>\n </div>\n </template>\n </el-dialog>\n</template>\n\n<script>\n/**\n * TpsDialog 对话框组件\n * 基于Element UI Dialog组件封装\n * @displayName TpsDialog\n */\nexport default {\n name: \'TpsDialog\',\n \n props: {\n /**\n * 是否显示Dialog\n */\n visible: {\n type: Boolean,\n default: false\n },\n \n /**\n * Dialog的标题\n */\n title: {\n type: String,\n default: \'\'\n },\n \n /**\n * Dialog的宽度\n */\n width: {\n type: String,\n default: \'50%\'\n },\n \n /**\n * 是否为全屏Dialog\n */\n fullscreen: {\n type: Boolean,\n default: false\n },\n \n /**\n * Dialog CSS中的margin-top值\n */\n top: {\n type: String,\n default: \'15vh\'\n },\n \n /**\n * 是否需要遮罩层\n */\n modal: {\n type: Boolean,\n default: true\n },\n \n /**\n * 遮罩层是否插入至body元素上\n */\n modalAppendToBody: {\n type: Boolean,\n default: true\n },\n \n /**\n * Dialog自身是否插入至body元素上\n */\n appendToBody: {\n type: Boolean,\n default: false\n },\n \n /**\n * 是否在Dialog出现时将body滚动锁定\n */\n lockScroll: {\n type: Boolean,\n default: true\n },\n \n /**\n * Dialog的自定义类名\n */\n customClass: {\n type: String,\n default: \'\'\n },\n \n /**\n * 是否可以通过点击modal关闭Dialog\n */\n closeOnClickModal: {\n type: Boolean,\n default: true\n },\n \n /**\n * 是否可以通过按下ESC关闭Dialog\n */\n closeOnPressEscape: {\n type: Boolean,\n default: true\n },\n \n /**\n * 是否显示关闭按钮\n */\n showClose: {\n type: Boolean,\n default: true\n },\n \n /**\n * 关闭前的回调\n */\n beforeClose: {\n type: Function,\n default: null\n },\n \n /**\n * 是否对头部和底部采用居中布局\n */\n center: {\n type: Boolean,\n default: false\n },\n \n /**\n * 关闭时销毁Dialog中的元素\n */\n destroyOnClose: {\n type: Boolean,\n default: false\n },\n \n /**\n * 是否显示默认底部\n */\n showDefaultFooter: {\n type: Boolean,\n default: true\n },\n \n /**\n * 是否显示取消按钮\n */\n showCancel: {\n type: Boolean,\n default: true\n },\n \n /**\n * 是否显示确认按钮\n */\n showConfirm: {\n type: Boolean,\n default: true\n },\n \n /**\n * 取消按钮文本\n */\n cancelText: {\n type: String,\n default: \'取消\'\n },\n \n /**\n * 确认按钮文本\n */\n confirmText: {\n type: String,\n default: \'确定\'\n },\n \n /**\n * 确认按钮加载状态\n */\n confirmLoading: {\n type: Boolean,\n default: false\n },\n \n /**\n * 按钮尺寸\n */\n buttonSize: {\n type: String,\n default: \'medium\'\n },\n \n /**\n * 对话框类型\n * @values default, info, success, warning, error\n */\n type: {\n type: String,\n default: \'default\',\n validator: value => {\n return [\'default\', \'info\', \'success\', \'warning\', \'error\'].includes(value)\n }\n }\n },\n \n computed: {\n /**\n * 对话框显示状态\n */\n dialogVisible: {\n get() {\n return this.visible\n },\n set(value) {\n this.$emit(\'update:visible\', value)\n }\n },\n \n /**\n * 对话框样式类\n */\n dialogClass() {\n return [\n \'tps-dialog\',\n {\n [`tps-dialog--${this.type}`]: this.type !== \'default\'\n }\n ]\n }\n },\n \n methods: {\n /**\n * 取消按钮点击处理\n */\n handleCancel() {\n /**\n * 取消事件\n * @event cancel\n */\n this.$emit(\'cancel\')\n this.dialogVisible = false\n },\n \n /**\n * 确认按钮点击处理\n */\n handleConfirm() {\n /**\n * 确认事件\n * @event confirm\n */\n this.$emit(\'confirm\')\n },\n \n /**\n * Dialog打开的回调\n */\n handleOpen() {\n /**\n * 打开事件\n * @event open\n */\n this.$emit(\'open\')\n },\n \n /**\n * Dialog打开动画结束时的回调\n */\n handleOpened() {\n /**\n * 打开完成事件\n * @event opened\n */\n this.$emit(\'opened\')\n },\n \n /**\n * Dialog关闭的回调\n */\n handleClose() {\n /**\n * 关闭事件\n * @event close\n */\n this.$emit(\'close\')\n },\n \n /**\n * Dialog关闭动画结束时的回调\n */\n handleClosed() {\n /**\n * 关闭完成事件\n * @event closed\n */\n this.$emit(\'closed\')\n }\n }\n}\n<\/script>\n\n<style scoped>\n.tps-dialog {\n /* 对话框基础样式 */\n}\n\n.tps-dialog__body {\n padding: 0;\n line-height: 1.6;\n color: var(--tps-text-color, #606266);\n}\n\n.tps-dialog__footer {\n padding: 0;\n}\n\n.tps-dialog__actions {\n text-align: right;\n}\n\n.tps-dialog__actions .el-button {\n margin-left: 12px;\n}\n\n/* 对话框类型样式 */\n.tps-dialog--info .el-dialog__header {\n background-color: var(--tps-info-color, #909399);\n color: #ffffff;\n}\n\n.tps-dialog--success .el-dialog__header {\n background-color: var(--tps-success-color, #67C23A);\n color: #ffffff;\n}\n\n.tps-dialog--warning .el-dialog__header {\n background-color: var(--tps-warning-color, #E6A23C);\n color: #ffffff;\n}\n\n.tps-dialog--error .el-dialog__header {\n background-color: var(--tps-danger-color, #F56C6C);\n color: #ffffff;\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n .tps-dialog .el-dialog {\n width: 90% !important;\n margin-top: 5vh !important;\n }\n \n .tps-dialog__actions {\n text-align: center;\n }\n \n .tps-dialog__actions .el-button {\n margin: 0 6px;\n }\n}\n</style>']},media:void 0})},P,"data-v-50e69e2d",false,undefined,!1,w,void 0,void 0);q.install=function(n){n.component(q.name,q)};var V={name:"TpsNavigation",props:{defaultActive:{type:String,default:""},mode:{type:String,default:"vertical",validator:n=>["horizontal","vertical"].includes(n)},collapse:{type:Boolean,default:!1},backgroundColor:{type:String,default:"#ffffff"},textColor:{type:String,default:"#303133"},activeTextColor:{type:String,default:"#409EFF"},defaultOpeneds:{type:Array,default:()=>[]},uniqueOpened:{type:Boolean,default:!1},menuTrigger:{type:String,default:"hover",validator:n=>["hover","click"].includes(n)},router:{type:Boolean,default:!1},collapseTransition:{type:Boolean,default:!0},theme:{type:String,default:"default",validator:n=>["default","dark","light"].includes(n)},size:{type:String,default:"medium",validator:n=>["medium","small","mini"].includes(n)}},computed:{navigationClass(){return["tps-navigation",`tps-navigation--${this.theme}`,`tps-navigation--${this.size}`,`tps-navigation--${this.mode}`,{"tps-navigation--collapse":this.collapse}]}},methods:{handleOpen(n,e){this.$emit("open",n,e)},handleClose(n,e){this.$emit("close",n,e)},handleSelect(n,e){this.$emit("select",n,e)},open(n){this.$refs.menu.open(n)},close(n){this.$refs.menu.close(n)}}};const U=V;var W=function(){var n=this,e=n.$createElement;return(n._self._c||e)("el-menu",{class:n.navigationClass,attrs:{"default-active":n.defaultActive,mode:n.mode,collapse:n.collapse,"background-color":n.backgroundColor,"text-color":n.textColor,"active-text-color":n.activeTextColor,"default-openeds":n.defaultOpeneds,"unique-opened":n.uniqueOpened,"menu-trigger":n.menuTrigger,router:n.router,"collapse-transition":n.collapseTransition},on:{open:n.handleOpen,close:n.handleClose,select:n.handleSelect}},[n._t("default")],2)};W._withStripped=!0;const H=x({render:W,staticRenderFns:[]},function(n){n&&n("data-v-2d513b9b_0",{source:'\n.tps-navigation[data-v-2d513b9b] {\n /* 导航基础样式 */\n border-right: none;\n}\n\n/* 主题样式 */\n.tps-navigation--dark[data-v-2d513b9b] {\n background-color: #304156;\n}\n.tps-navigation--dark .el-menu-item[data-v-2d513b9b],\n.tps-navigation--dark .el-submenu__title[data-v-2d513b9b] {\n color: #bfcbd9;\n}\n.tps-navigation--dark .el-menu-item[data-v-2d513b9b]:hover,\n.tps-navigation--dark .el-submenu__title[data-v-2d513b9b]:hover {\n background-color: #263445;\n}\n.tps-navigation--dark .el-menu-item.is-active[data-v-2d513b9b] {\n color: var(--tps-primary-color, #409EFF);\n background-color: rgba(64, 158, 255, 0.1);\n}\n.tps-navigation--light[data-v-2d513b9b] {\n background-color: #ffffff;\n border-right: 1px solid var(--tps-border-color, #e6e6e6);\n}\n.tps-navigation--light .el-menu-item[data-v-2d513b9b],\n.tps-navigation--light .el-submenu__title[data-v-2d513b9b] {\n color: var(--tps-text-color, #303133);\n}\n.tps-navigation--light .el-menu-item[data-v-2d513b9b]:hover,\n.tps-navigation--light .el-submenu__title[data-v-2d513b9b]:hover {\n background-color: var(--tps-background-color, #f5f7fa);\n}\n.tps-navigation--light .el-menu-item.is-active[data-v-2d513b9b] {\n color: var(--tps-primary-color, #409EFF);\n background-color: rgba(64, 158, 255, 0.1);\n}\n\n/* 尺寸样式 */\n.tps-navigation--small .el-menu-item[data-v-2d513b9b],\n.tps-navigation--small .el-submenu__title[data-v-2d513b9b] {\n height: 40px;\n line-height: 40px;\n font-size: 13px;\n}\n.tps-navigation--mini .el-menu-item[data-v-2d513b9b],\n.tps-navigation--mini .el-submenu__title[data-v-2d513b9b] {\n height: 36px;\n line-height: 36px;\n font-size: 12px;\n}\n\n/* 水平模式 */\n.tps-navigation--horizontal[data-v-2d513b9b] {\n border-right: none;\n border-bottom: 1px solid var(--tps-border-color, #e6e6e6);\n}\n.tps-navigation--horizontal .el-menu-item[data-v-2d513b9b],\n.tps-navigation--horizontal .el-submenu__title[data-v-2d513b9b] {\n border-bottom: 2px solid transparent;\n}\n.tps-navigation--horizontal .el-menu-item.is-active[data-v-2d513b9b],\n.tps-navigation--horizontal .el-submenu.is-active .el-submenu__title[data-v-2d513b9b] {\n border-bottom-color: var(--tps-primary-color, #409EFF);\n}\n\n/* 折叠状态 */\n.tps-navigation--collapse[data-v-2d513b9b] {\n width: 64px;\n}\n.tps-navigation--collapse .el-menu-item[data-v-2d513b9b],\n.tps-navigation--collapse .el-submenu__title[data-v-2d513b9b] {\n text-align: center;\n padding: 0 !important;\n}\n.tps-navigation--collapse .el-menu-item [class^="el-icon-"][data-v-2d513b9b],\n.tps-navigation--collapse .el-submenu__title [class^="el-icon-"][data-v-2d513b9b] {\n margin: 0;\n vertical-align: middle;\n width: 24px;\n text-align: center;\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n.tps-navigation--vertical[data-v-2d513b9b] {\n width: 100%;\n}\n.tps-navigation--horizontal[data-v-2d513b9b] {\n overflow-x: auto;\n white-space: nowrap;\n}\n.tps-navigation--horizontal .el-menu-item[data-v-2d513b9b],\n .tps-navigation--horizontal .el-submenu[data-v-2d513b9b] {\n display: inline-block;\n vertical-align: top;\n}\n}\n\n/* 自定义滚动条 */\n.tps-navigation[data-v-2d513b9b]::-webkit-scrollbar {\n width: 6px;\n}\n.tps-navigation[data-v-2d513b9b]::-webkit-scrollbar-track {\n background: var(--tps-background-color, #f1f1f1);\n}\n.tps-navigation[data-v-2d513b9b]::-webkit-scrollbar-thumb {\n background: var(--tps-border-color, #c1c1c1);\n border-radius: 3px;\n}\n.tps-navigation[data-v-2d513b9b]::-webkit-scrollbar-thumb:hover {\n background: var(--tps-text-color, #a8a8a8);\n}\n',map:{version:3,sources:["E:\\新建文件夹\\tps-ui-components\\src\\components\\TpsNavigation\\index.vue"],names:[],mappings:";AA4OA;EACA,WAAA;EACA,kBAAA;AACA;;AAEA,SAAA;AACA;EACA,yBAAA;AACA;AAEA;;EAEA,cAAA;AACA;AAEA;;EAEA,yBAAA;AACA;AAEA;EACA,wCAAA;EACA,yCAAA;AACA;AAEA;EACA,yBAAA;EACA,wDAAA;AACA;AAEA;;EAEA,qCAAA;AACA;AAEA;;EAEA,sDAAA;AACA;AAEA;EACA,wCAAA;EACA,yCAAA;AACA;;AAEA,SAAA;AACA;;EAEA,YAAA;EACA,iBAAA;EACA,eAAA;AACA;AAEA;;EAEA,YAAA;EACA,iBAAA;EACA,eAAA;AACA;;AAEA,SAAA;AACA;EACA,kBAAA;EACA,yDAAA;AACA;AAEA;;EAEA,oCAAA;AACA;AAEA;;EAEA,sDAAA;AACA;;AAEA,SAAA;AACA;EACA,WAAA;AACA;AAEA;;EAEA,kBAAA;EACA,qBAAA;AACA;AAEA;;EAEA,SAAA;EACA,sBAAA;EACA,WAAA;EACA,kBAAA;AACA;;AAEA,UAAA;AACA;AACA;IACA,WAAA;AACA;AAEA;IACA,gBAAA;IACA,mBAAA;AACA;AAEA;;IAEA,qBAAA;IACA,mBAAA;AACA;AACA;;AAEA,WAAA;AACA;EACA,UAAA;AACA;AAEA;EACA,gDAAA;AACA;AAEA;EACA,4CAAA;EACA,kBAAA;AACA;AAEA;EACA,0CAAA;AACA",file:"index.vue",sourcesContent:["<template>\n <el-menu\n :class=\"navigationClass\"\n :default-active=\"defaultActive\"\n :mode=\"mode\"\n :collapse=\"collapse\"\n :background-color=\"backgroundColor\"\n :text-color=\"textColor\"\n :active-text-color=\"activeTextColor\"\n :default-openeds=\"defaultOpeneds\"\n :unique-opened=\"uniqueOpened\"\n :menu-trigger=\"menuTrigger\"\n :router=\"router\"\n :collapse-transition=\"collapseTransition\"\n @open=\"handleOpen\"\n @close=\"handleClose\"\n @select=\"handleSelect\"\n >\n <slot></slot>\n </el-menu>\n</template>\n\n<script>\n/**\n * TpsNavigation 导航菜单组件\n * 基于Element UI Menu组件封装\n * @displayName TpsNavigation\n */\nexport default {\n name: 'TpsNavigation',\n \n props: {\n /**\n * 当前激活菜单的index\n */\n defaultActive: {\n type: String,\n default: ''\n },\n \n /**\n * 模式\n * @values horizontal, vertical\n */\n mode: {\n type: String,\n default: 'vertical',\n validator: value => {\n return ['horizontal', 'vertical'].includes(value)\n }\n },\n \n /**\n * 是否水平折叠收起菜单\n */\n collapse: {\n type: Boolean,\n default: false\n },\n \n /**\n * 菜单的背景色\n */\n backgroundColor: {\n type: String,\n default: '#ffffff'\n },\n \n /**\n * 菜单的文字颜色\n */\n textColor: {\n type: String,\n default: '#303133'\n },\n \n /**\n * 当前激活菜单的文字颜色\n */\n activeTextColor: {\n type: String,\n default: '#409EFF'\n },\n \n /**\n * 当前打开的sub-menu的index的数组\n */\n defaultOpeneds: {\n type: Array,\n default: () => []\n },\n \n /**\n * 是否只保持一个子菜单的展开\n */\n uniqueOpened: {\n type: Boolean,\n default: false\n },\n \n /**\n * 子菜单打开的触发方式\n * @values hover, click\n */\n menuTrigger: {\n type: String,\n default: 'hover',\n validator: value => {\n return ['hover', 'click'].includes(value)\n }\n },\n \n /**\n * 是否使用vue-router的模式\n */\n router: {\n type: Boolean,\n default: false\n },\n \n /**\n * 是否开启折叠动画\n */\n collapseTransition: {\n type: Boolean,\n default: true\n },\n \n /**\n * 导航主题\n * @values default, dark, light\n */\n theme: {\n type: String,\n default: 'default',\n validator: value => {\n return ['default', 'dark', 'light'].includes(value)\n }\n },\n \n /**\n * 导航尺寸\n * @values medium, small, mini\n */\n size: {\n type: String,\n default: 'medium',\n validator: value => {\n return ['medium', 'small', 'mini'].includes(value)\n }\n }\n },\n \n computed: {\n /**\n * 导航样式类\n */\n navigationClass() {\n return [\n 'tps-navigation',\n `tps-navigation--${this.theme}`,\n `tps-navigation--${this.size}`,\n `tps-navigation--${this.mode}`,\n {\n 'tps-navigation--collapse': this.collapse\n }\n ]\n }\n },\n \n methods: {\n /**\n * sub-menu展开的回调\n * @param {String} index - 展开的sub-menu的index\n * @param {Array} indexPath - 展开的sub-menu的index path\n */\n handleOpen(index, indexPath) {\n /**\n * sub-menu展开事件\n * @event open\n * @param {String} index - 展开的sub-menu的index\n * @param {Array} indexPath - 展开的sub-menu的index path\n */\n this.$emit('open', index, indexPath)\n },\n \n /**\n * sub-menu收起的回调\n * @param {String} index - 收起的sub-menu的index\n * @param {Array} indexPath - 收起的sub-menu的index path\n */\n handleClose(index, indexPath) {\n /**\n * sub-menu收起事件\n * @event close\n * @param {String} index - 收起的sub-menu的index\n * @param {Array} indexPath - 收起的sub-menu的index path\n */\n this.$emit('close', index, indexPath)\n },\n \n /**\n * 菜单激活回调\n * @param {String} index - 选中菜单项的index\n * @param {Array} indexPath - 选中菜单项的index path\n */\n handleSelect(index, indexPath) {\n /**\n * 菜单激活事件\n * @event select\n * @param {String} index - 选中菜单项的index\n * @param {Array} indexPath - 选中菜单项的index path\n */\n this.$emit('select', index, indexPath)\n },\n \n /**\n * 手动打开指定的sub-menu\n * @param {String} index - 需要打开的sub-menu的index\n */\n open(index) {\n this.$refs.menu.open(index)\n },\n \n /**\n * 手动关闭指定的sub-menu\n * @param {String} index - 需要关闭的sub-menu的index\n */\n close(index) {\n this.$refs.menu.close(index)\n }\n }\n}\n<\/script>\n\n<style scoped>\n.tps-navigation {\n /* 导航基础样式 */\n border-right: none;\n}\n\n/* 主题样式 */\n.tps-navigation--dark {\n background-color: #304156;\n}\n\n.tps-navigation--dark .el-menu-item,\n.tps-navigation--dark .el-submenu__title {\n color: #bfcbd9;\n}\n\n.tps-navigation--dark .el-menu-item:hover,\n.tps-navigation--dark .el-submenu__title:hover {\n background-color: #263445;\n}\n\n.tps-navigation--dark .el-menu-item.is-active {\n color: var(--tps-primary-color, #409EFF);\n background-color: rgba(64, 158, 255, 0.1);\n}\n\n.tps-navigation--light {\n background-color: #ffffff;\n border-right: 1px solid var(--tps-border-color, #e6e6e6);\n}\n\n.tps-navigation--light .el-menu-item,\n.tps-navigation--light .el-submenu__title {\n color: var(--tps-text-color, #303133);\n}\n\n.tps-navigation--light .el-menu-item:hover,\n.tps-navigation--light .el-submenu__title:hover {\n background-color: var(--tps-background-color, #f5f7fa);\n}\n\n.tps-navigation--light .el-menu-item.is-active {\n color: var(--tps-primary-color, #409EFF);\n background-color: rgba(64, 158, 255, 0.1);\n}\n\n/* 尺寸样式 */\n.tps-navigation--small .el-menu-item,\n.tps-navigation--small .el-submenu__title {\n height: 40px;\n line-height: 40px;\n font-size: 13px;\n}\n\n.tps-navigation--mini .el-menu-item,\n.tps-navigation--mini .el-submenu__title {\n height: 36px;\n line-height: 36px;\n font-size: 12px;\n}\n\n/* 水平模式 */\n.tps-navigation--horizontal {\n border-right: none;\n border-bottom: 1px solid var(--tps-border-color, #e6e6e6);\n}\n\n.tps-navigation--horizontal .el-menu-item,\n.tps-navigation--horizontal .el-submenu__title {\n border-bottom: 2px solid transparent;\n}\n\n.tps-navigation--horizontal .el-menu-item.is-active,\n.tps-navigation--horizontal .el-submenu.is-active .el-submenu__title {\n border-bottom-color: var(--tps-primary-color, #409EFF);\n}\n\n/* 折叠状态 */\n.tps-navigation--collapse {\n width: 64px;\n}\n\n.tps-navigation--collapse .el-menu-item,\n.tps-navigation--collapse .el-submenu__title {\n text-align: center;\n padding: 0 !important;\n}\n\n.tps-navigation--collapse .el-menu-item [class^=\"el-icon-\"],\n.tps-navigation--collapse .el-submenu__title [class^=\"el-icon-\"] {\n margin: 0;\n vertical-align: middle;\n width: 24px;\n text-align: center;\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n .tps-navigation--vertical {\n width: 100%;\n }\n \n .tps-navigation--horizontal {\n overflow-x: auto;\n white-space: nowrap;\n }\n \n .tps-navigation--horizontal .el-menu-item,\n .tps-navigation--horizontal .el-submenu {\n display: inline-block;\n vertical-align: top;\n }\n}\n\n/* 自定义滚动条 */\n.tps-navigation::-webkit-scrollbar {\n width: 6px;\n}\n\n.tps-navigation::-webkit-scrollbar-track {\n background: var(--tps-background-color, #f1f1f1);\n}\n\n.tps-navigation::-webkit-scrollbar-thumb {\n background: var(--tps-border-color, #c1c1c1);\n border-radius: 3px;\n}\n\n.tps-navigation::-webkit-scrollbar-thumb:hover {\n background: var(--tps-text-color, #a8a8a8);\n}\n</style>"]},media:void 0})},U,"data-v-2d513b9b",false,undefined,!1,w,void 0,void 0);H.install=function(n){n.component(H.name,H)};var L={TpsButton:T,TpsCard:O,TpsForm:z,TpsTable:I,TpsDialog:q,TpsNavigation:H},Y=function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Object.keys(L).forEach(function(e){n.component(e,L[e])}),n.use(p),n.prototype.$http=m,n.prototype.$get=h,n.prototype.$post=g,n.prototype.$put=b,n.prototype.$delete=v,n.prototype.$upload=C,e.theme&&n.prototype.$themeManager.changeTheme(e.theme)};"undefined"!=typeof window&&window.Vue&&Y(window.Vue);var K=i({install:Y},L);n.ThemeManager=p,n.TpsButton=T,n.TpsCard=O,n.TpsDialog=q,n.TpsForm=z,n.TpsNavigation=H,n.TpsTable=I,n.default=K,n.del=v,n.get=h,n.post=g,n.put=b,n.request=m,n.upload=C,Object.defineProperty(n,"__esModule",{value:!0})});