UNPKG

tps-ui-components

Version:

TPS UI组件库 - 基于Vue 2和Element UI的企业级组件库

2 lines 92.4 kB
!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})});