no message
This commit is contained in:
parent
58c8f4f633
commit
075ecae03c
2
dist/index.html
vendored
2
dist/index.html
vendored
@ -1,4 +1,4 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/><meta content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=0" name="viewport"/><link rel="icon" href="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/favicon.ico"><title>X-PHP</title><script>document.write("<script src='config.js'><\/script>");</script><script defer="defer" src="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/static/js/echarts.49558cc4.js"></script><script defer="defer" src="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/static/js/elicons.4bccae06.js"></script><script defer="defer" src="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/static/js/modules.af2834df.js"></script><script defer="defer" src="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/static/js/app.9e64d7b4.js"></script><link href="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/static/css/modules.34563575.css" rel="stylesheet"><link href="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/static/css/app.8a627c74.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but X-PHP doesn't work properly without JavaScript enabled.</strong></noscript><div id="app" class="adminui"><div class="app-loading"><div class="app-loading__logo"><img src="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/logo.png"/></div><div class="app-loading-text"><span class="app-loading-preloader">X</span> <span class="app-loading-preloader">-</span> <span class="app-loading-preloader">A</span> <span class="app-loading-preloader">d</span> <span class="app-loading-preloader">m</span> <span class="app-loading-preloader">i</span> <span class="app-loading-preloader">n</span><div class="app-loading-viewtext-container"><span class="app-loading-viewtext">X</span> <span class="app-loading-viewtext">-</span> <span class="app-loading-viewtext">A</span> <span class="app-loading-viewtext">d</span> <span class="app-loading-viewtext">m</span> <span class="app-loading-viewtext">i</span> <span class="app-loading-viewtext">n</span></div></div></div></div></body><div id="versionCheck" class="versionCheck"><h2>当前浏览器内核版本过低</h2><p>当前版本:<span id="versionCheck-type">--</span> <span id="versionCheck-version">--</span></p><p>最低版本要求:Chrome 71+、Firefox 65+、Safari 12+、Edge 97+。</p><p>请升级浏览器版本,或更换现代浏览器,如果你使用的是双核浏览器,请切换到极速/高速模式。</p></div><style>html,
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/><meta content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=0" name="viewport"/><link rel="icon" href="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/favicon.ico"><title>X-PHP</title><script>document.write("<script src='config.js'><\/script>");</script><script defer="defer" src="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/static/js/echarts.49558cc4.js"></script><script defer="defer" src="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/static/js/elicons.4bccae06.js"></script><script defer="defer" src="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/static/js/modules.af2834df.js"></script><script defer="defer" src="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/static/js/app.d9acf3ba.js"></script><link href="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/static/css/modules.34563575.css" rel="stylesheet"><link href="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/static/css/app.cac8c39f.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but X-PHP doesn't work properly without JavaScript enabled.</strong></noscript><div id="app" class="adminui"><div class="app-loading"><div class="app-loading__logo"><img src="https://ansnid.oss-cn-shenzhen.aliyuncs.com/x-Admin/logo.png"/></div><div class="app-loading-text"><span class="app-loading-preloader">X</span> <span class="app-loading-preloader">-</span> <span class="app-loading-preloader">A</span> <span class="app-loading-preloader">d</span> <span class="app-loading-preloader">m</span> <span class="app-loading-preloader">i</span> <span class="app-loading-preloader">n</span><div class="app-loading-viewtext-container"><span class="app-loading-viewtext">X</span> <span class="app-loading-viewtext">-</span> <span class="app-loading-viewtext">A</span> <span class="app-loading-viewtext">d</span> <span class="app-loading-viewtext">m</span> <span class="app-loading-viewtext">i</span> <span class="app-loading-viewtext">n</span></div></div></div></div></body><div id="versionCheck" class="versionCheck"><h2>当前浏览器内核版本过低</h2><p>当前版本:<span id="versionCheck-type">--</span> <span id="versionCheck-version">--</span></p><p>最低版本要求:Chrome 71+、Firefox 65+、Safari 12+、Edge 97+。</p><p>请升级浏览器版本,或更换现代浏览器,如果你使用的是双核浏览器,请切换到极速/高速模式。</p></div><style>html,
|
||||
body,
|
||||
#app {
|
||||
transition-property: filter;
|
||||
|
4
dist/report.html
vendored
4
dist/report.html
vendored
File diff suppressed because one or more lines are too long
1
dist/static/css/322.f8908ce0.css
vendored
1
dist/static/css/322.f8908ce0.css
vendored
@ -1 +0,0 @@
|
||||
.setting[data-v-6bfa3f9c]{height:100%}.setting[data-v-6bfa3f9c] .el-tabs--left .el-tabs__nav.is-left{width:100%}.setting[data-v-6bfa3f9c] .el-card__body{height:100%;padding:0}.x-page-header[data-v-6bfa3f9c]{padding:10px 25px}.setting[data-v-6bfa3f9c] .el-tabs__item.is-active{background-color:var(--el-menu-background)}.setting[data-v-6bfa3f9c] .el-tabs--left{height:calc(100% - 78px)}.setting[data-v-6bfa3f9c] .el-tabs__content{padding:20px;overflow-y:scroll;height:100%}.setting[data-v-6bfa3f9c] .el-tabs{--el-tabs-header-height:50px}.setting[data-v-6bfa3f9c] .el-tabs--left .el-tabs__header.is-left{margin:0;min-width:120px}.el-footer[data-v-6bfa3f9c]{padding:10px;height:51px;margin:0;text-align:center}.setting[data-v-6bfa3f9c] .el-tabs--top .el-tabs__item{padding:0 20px}
|
1
dist/static/css/444.55741c84.css
vendored
Normal file
1
dist/static/css/444.55741c84.css
vendored
Normal file
@ -0,0 +1 @@
|
||||
.setting[data-v-c77bcd06]{height:100%}.setting[data-v-c77bcd06] .el-tabs--left .el-tabs__nav.is-left{width:100%}.setting[data-v-c77bcd06] .el-card__body{height:100%;padding:0}.x-page-header[data-v-c77bcd06]{padding:10px 25px}.setting[data-v-c77bcd06] .el-tabs__item.is-active{background-color:var(--el-menu-background)}.setting[data-v-c77bcd06] .el-tabs--left{height:calc(100% - 78px)}.setting[data-v-c77bcd06] .el-tabs__content{padding:20px;overflow-y:scroll;height:100%}.setting[data-v-c77bcd06] .el-tabs{--el-tabs-header-height:50px}.setting[data-v-c77bcd06] .el-tabs--left .el-tabs__header.is-left{margin:0;min-width:120px}.el-footer[data-v-c77bcd06]{padding:10px;height:51px;margin:0;text-align:center}.setting[data-v-c77bcd06] .el-tabs--top .el-tabs__item{padding:0 20px}
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
"use strict";(self["webpackChunkx_php_admin"]=self["webpackChunkx_php_admin"]||[]).push([[251],{251:function(e,t,a){a.r(t),a.d(t,{default:function(){return m}});var r=a(6808),l=a(9511);const n={class:"left-panel"},i={class:"right-panel"},s={class:"right-panel-search"};function c(e,t,a,c,o,u){const h=(0,r.up)("el-date-picker"),p=(0,r.up)("el-input"),d=(0,r.up)("el-button"),m=(0,r.up)("el-header"),g=(0,r.up)("el-table-column"),f=(0,r.up)("xTable"),w=(0,r.up)("el-main"),b=(0,r.up)("el-container");return(0,r.wg)(),(0,r.j4)(b,{class:"container"},{default:(0,r.w5)((()=>[(0,r.Wm)(m,null,{default:(0,r.w5)((()=>[(0,r._)("div",n,[(0,r.Wm)(h,{modelValue:o.date,"onUpdate:modelValue":t[0]||(t[0]=e=>o.date=e),type:"datetimerange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期"},null,8,["modelValue"])]),(0,r._)("div",i,[(0,r._)("div",s,[(0,r.Wm)(p,{modelValue:o.search.keyword,"onUpdate:modelValue":t[1]||(t[1]=e=>o.search.keyword=e),placeholder:"输入关键词",clearable:""},null,8,["modelValue"]),(0,r.Wm)(d,{type:"primary",icon:"el-icon-search",onClick:u.upsearch},null,8,["onClick"])])])])),_:1}),(0,r.Wm)(w,{class:"nopadding"},{default:(0,r.w5)((()=>[(0,r.Wm)(f,{ref:"table",api:o.api,params:o.search,tableColumn:o.tableColumn,stripe:"",highlightCurrentRow:"",onRowClick:u.rowClick},{default:(0,r.w5)((()=>[(0,r.Wm)(g,{type:"index",width:"60",align:"center"},{default:(0,r.w5)((e=>[(0,r._)("span",null,(0,l.zw)(e.$index+(o.currentPage-1)*o.limit+1),1)])),_:1})])),_:1},8,["api","params","tableColumn","onRowClick"])])),_:1})])),_:1})}var o=a(7062),u=a(1843),h={name:"log",components:{columnItem:o.Z,xMenuItem:u.Z},data(){return{infoDrawer:!1,chartoption:{},typeList:[],date:[],data:[],search:{},api:"",current:"",config:{},tableColumn:{},column:"default",currentPage:1,limit:20}},mounted(){this.getType()},watch:{current(){this.search.type=this.current,this.getCurrent()}},methods:{sideClick(e){this.info=e,this.search.type=e.value,this.current=e.value,this.column=e.column||"column"},changeURLArg(e,t,a){var r=t+"=([^&]*)";if(""===a)return e=e.replace(new RegExp("&?"+r,"gi"),""),e=e.replace(new RegExp("\\??"+r+"&?","gi"),"?"),e;var l=t+"="+a;if(e.match(r)){var n="("+t+"=)([^&]*)";return n=e.replace(new RegExp(n,"gi"),l),n}return e.match("[?]")?e+"&"+l:e+"?"+l},nodeClick(e){if(e.disabled)return!1;this.current=e.label,this.column=e.column||"column"},getType(){this.$http.get("log/admin/types",{type:this.$route.query.type},{cacheparameters:!0}).then((e=>{if(200==e.code){Object.assign(this.$data,e.data);for(const e in this.search)Object.prototype.hasOwnProperty.call(this.$route.query,e)&&(this.search[e]=this.$route.query[e])}}))},getCurrent(){this.tableColumn=this.config[this.column]||this.config.default,this.api||(this.api="log/admin/lists"),this.$refs.table.reload(this.search);let e=window.location.href;for(const[t,a]of Object.entries(this.search))e=this.changeURLArg(e,t,a);history.replaceState(Object.assign({},window.history.state,{url:e}),"null",e)},upsearch(){this.getCurrent()},rowClick(e){this.infoDrawer=!0,this.$nextTick((()=>{this.$refs.info.setData(e)}))}}},p=a(8700);const d=(0,p.Z)(h,[["render",c],["__scopeId","data-v-eba8b6d4"]]);var m=d}}]);
|
||||
"use strict";(self["webpackChunkx_php_admin"]=self["webpackChunkx_php_admin"]||[]).push([[251],{251:function(e,t,a){a.r(t),a.d(t,{default:function(){return m}});var r=a(6808),l=a(9511);const n={class:"left-panel"},i={class:"right-panel"},s={class:"right-panel-search"};function c(e,t,a,c,o,u){const h=(0,r.up)("el-date-picker"),p=(0,r.up)("el-input"),d=(0,r.up)("el-button"),m=(0,r.up)("el-header"),g=(0,r.up)("el-table-column"),f=(0,r.up)("xTable"),w=(0,r.up)("el-main"),b=(0,r.up)("el-container");return(0,r.wg)(),(0,r.j4)(b,{class:"container"},{default:(0,r.w5)((()=>[(0,r.Wm)(m,null,{default:(0,r.w5)((()=>[(0,r._)("div",n,[(0,r.Wm)(h,{modelValue:o.date,"onUpdate:modelValue":t[0]||(t[0]=e=>o.date=e),type:"datetimerange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期"},null,8,["modelValue"])]),(0,r._)("div",i,[(0,r._)("div",s,[(0,r.Wm)(p,{modelValue:o.search.keyword,"onUpdate:modelValue":t[1]||(t[1]=e=>o.search.keyword=e),placeholder:"输入关键词",clearable:""},null,8,["modelValue"]),(0,r.Wm)(d,{type:"primary",icon:"el-icon-search",onClick:u.upsearch},null,8,["onClick"])])])])),_:1}),(0,r.Wm)(w,{class:"nopadding"},{default:(0,r.w5)((()=>[(0,r.Wm)(f,{ref:"table",api:o.api,params:o.search,tableColumn:o.tableColumn,stripe:"",highlightCurrentRow:"",onRowClick:u.rowClick},{default:(0,r.w5)((()=>[(0,r.Wm)(g,{type:"index",width:"60",align:"center"},{default:(0,r.w5)((e=>[(0,r._)("span",null,(0,l.zw)(e.$index+(o.currentPage-1)*o.limit+1),1)])),_:1})])),_:1},8,["api","params","tableColumn","onRowClick"])])),_:1})])),_:1})}var o=a(9565),u=a(1843),h={name:"log",components:{columnItem:o.Z,xMenuItem:u.Z},data(){return{infoDrawer:!1,chartoption:{},typeList:[],date:[],data:[],search:{},api:"",current:"",config:{},tableColumn:{},column:"default",currentPage:1,limit:20}},mounted(){this.getType()},watch:{current(){this.search.type=this.current,this.getCurrent()}},methods:{sideClick(e){this.info=e,this.search.type=e.value,this.current=e.value,this.column=e.column||"column"},changeURLArg(e,t,a){var r=t+"=([^&]*)";if(""===a)return e=e.replace(new RegExp("&?"+r,"gi"),""),e=e.replace(new RegExp("\\??"+r+"&?","gi"),"?"),e;var l=t+"="+a;if(e.match(r)){var n="("+t+"=)([^&]*)";return n=e.replace(new RegExp(n,"gi"),l),n}return e.match("[?]")?e+"&"+l:e+"?"+l},nodeClick(e){if(e.disabled)return!1;this.current=e.label,this.column=e.column||"column"},getType(){this.$http.get("log/admin/types",{type:this.$route.query.type},{cacheparameters:!0}).then((e=>{if(200==e.code){Object.assign(this.$data,e.data);for(const e in this.search)Object.prototype.hasOwnProperty.call(this.$route.query,e)&&(this.search[e]=this.$route.query[e])}}))},getCurrent(){this.tableColumn=this.config[this.column]||this.config.default,this.api||(this.api="log/admin/lists"),this.$refs.table.reload(this.search);let e=window.location.href;for(const[t,a]of Object.entries(this.search))e=this.changeURLArg(e,t,a);history.replaceState(Object.assign({},window.history.state,{url:e}),"null",e)},upsearch(){this.getCurrent()},rowClick(e){this.infoDrawer=!0,this.$nextTick((()=>{this.$refs.info.setData(e)}))}}},p=a(8700);const d=(0,p.Z)(h,[["render",c],["__scopeId","data-v-eba8b6d4"]]);var m=d}}]);
|
1
dist/static/js/322.46a04953.js
vendored
1
dist/static/js/322.46a04953.js
vendored
@ -1 +0,0 @@
|
||||
"use strict";(self["webpackChunkx_php_admin"]=self["webpackChunkx_php_admin"]||[]).push([[322],{3322:function(e,t,a){a.r(t),a.d(t,{default:function(){return r}});var l=a(6808);const i={key:0};function n(e,t,a,n,o,d){const s=(0,l.up)("x-page-header"),r=(0,l.up)("el-alert"),u=(0,l.up)("el-option"),p=(0,l.up)("el-select"),m=(0,l.up)("el-input"),c=(0,l.up)("el-table-column"),g=(0,l.up)("x-form-table"),h=(0,l.up)("el-button"),w=(0,l.up)("x-form"),f=(0,l.up)("el-tab-pane"),y=(0,l.up)("el-tabs"),b=(0,l.up)("el-card"),v=(0,l.up)("el-main"),k=(0,l.up)("el-footer"),x=(0,l.up)("el-container"),_=(0,l.Q2)("loading");return(0,l.wg)(),(0,l.j4)(x,null,{default:(0,l.w5)((()=>[(0,l.Wm)(v,null,{default:(0,l.w5)((()=>[(0,l.Wm)(b,{shadow:"never",class:"setting"},{default:(0,l.w5)((()=>[(0,l.Wm)(s,{title:"系统设置",description:"可以修改网站及应用的各种配置",icon:"el-icon-setting"}),(0,l.wy)(((0,l.wg)(),(0,l.j4)(y,{"tab-position":o.tabposition,modelValue:o.activename,"onUpdate:modelValue":t[1]||(t[1]=e=>o.activename=e)},{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(o.settingList,(e=>((0,l.wg)(),(0,l.j4)(f,{key:e.key,label:e.name,name:e.key},{default:(0,l.w5)((()=>["extend"==e.type?((0,l.wg)(),(0,l.iD)("div",i,[e.tips?((0,l.wg)(),(0,l.j4)(r,{key:0,title:e.tips,type:"warning",style:{"margin-bottom":"15px"}},null,8,["title"])):(0,l.kq)("",!0),(0,l.Wm)(g,{modelValue:o.extend[e.key],"onUpdate:modelValue":t=>o.extend[e.key]=t,hideAdd:!0,"drag-sort":"",placeholder:"暂无数据"},{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.column,(e=>((0,l.wg)(),(0,l.j4)(c,{label:e.label,prop:e.prop,width:e.width,key:e.prop},{default:(0,l.w5)((t=>["select"==e.component?((0,l.wg)(),(0,l.j4)(p,(0,l.dG)({key:0,modelValue:t.row[e.prop],"onUpdate:modelValue":a=>t.row[e.prop]=a},e.options,{clearable:"",filterable:"",style:{width:"100%"}}),{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.options.items,(e=>((0,l.wg)(),(0,l.j4)(u,{key:e.value,label:e.label||e.name,value:e.value},null,8,["label","value"])))),128))])),_:2},1040,["modelValue","onUpdate:modelValue"])):((0,l.wg)(),(0,l.j4)(m,{key:1,modelValue:t.row[e.prop],"onUpdate:modelValue":a=>t.row[e.prop]=a,placeholder:e.placeholder},null,8,["modelValue","onUpdate:modelValue","placeholder"]))])),_:2},1032,["label","prop","width"])))),128))])),_:2},1032,["modelValue","onUpdate:modelValue"]),(0,l.Wm)(h,{type:"primary",icon:"el-icon-plus",onClick:t=>d.table_add(e),style:{"margin-top":"20px"}},null,8,["onClick"])])):((0,l.wg)(),(0,l.j4)(w,{key:1,ref_for:!0,ref:"formref",config:o.formList[e.key],modelValue:o.info,"onUpdate:modelValue":t[0]||(t[0]=e=>o.info=e),loading:o.loading},null,8,["config","modelValue","loading"]))])),_:2},1032,["label","name"])))),128))])),_:1},8,["tab-position","modelValue"])),[[_,o.loading]])])),_:1})])),_:1}),(0,l.Wm)(k,null,{default:(0,l.w5)((()=>[(0,l.Wm)(h,{type:"primary",onClick:d.submit,style:{"max-width":"500px",width:"100%"},loading:o.submitloading},{default:(0,l.w5)((()=>[(0,l.Uk)("保存")])),_:1},8,["onClick","loading"])])),_:1})])),_:1})}a(8311);var o={name:"setting",data(){return{info:{},activename:"init",tabposition:"left",settingList:[],extend:[],formList:{},loading:!1,submitloading:!1}},watch:{activename(){let e=window.location.href;e=this.changeURLArg(e,"type",this.activename),history.replaceState(Object.assign({},window.history.state,{url:e}),"null",e)}},mounted(){this.render()},created(){this.onLayoutResize(),window.addEventListener("resize",this.onLayoutResize)},methods:{onLayoutResize(){this.tabposition=document.body.clientWidth<992?"top":"left"},changeURLArg(e,t,a){var l=t+"=([^&]*)";if(""===a)return e=e.replace(new RegExp("&?"+l,"gi"),""),e=e.replace(new RegExp("\\??"+l+"&?","gi"),"?"),e;var i=t+"="+a;if(e.match(l)){var n="("+t+"=)([^&]*)";return n=e.replace(new RegExp(n,"gi"),i),n}return e.match("[?]")?e+"&"+i:e+"?"+i},async render(){this.loading=!0;var e=await this.$http.get("setting/get",this.$route.query);if(200!=e.code)return this.$message.warning(e.message),!1;this.settingList=e.data.settingList,this.info=e.data.info,this.formList=e.data.formList,this.extend=e.data.extend||[],this.loading=!1,e.data.activename&&(this.activename=e.data.activename)},async submit(){this.submitloading=!0;var e=this.$http.post("setting/submit",{info:this.info,extend:this.extend});this.submitloading=!1,200!=e.code?this.$alert(e.message,"提示",{type:"error"}):this.$message.success(e.message||"操作成功")},table_add(e){var t={};e.column.forEach((function(e){t[e.prop]=""})),this.extend[e.key].push(t)}}},d=a(8700);const s=(0,d.Z)(o,[["render",n],["__scopeId","data-v-6bfa3f9c"]]);var r=s}}]);
|
1
dist/static/js/412.00e87ced.js
vendored
1
dist/static/js/412.00e87ced.js
vendored
File diff suppressed because one or more lines are too long
1
dist/static/js/444.fe195afe.js
vendored
Normal file
1
dist/static/js/444.fe195afe.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
"use strict";(self["webpackChunkx_php_admin"]=self["webpackChunkx_php_admin"]||[]).push([[444],{2444:function(e,t,a){a.r(t),a.d(t,{default:function(){return r}});var i=a(6808);const l={key:0};function n(e,t,a,n,o,d){const s=(0,i.up)("x-page-header"),r=(0,i.up)("el-alert"),u=(0,i.up)("el-option"),p=(0,i.up)("el-select"),m=(0,i.up)("el-input"),c=(0,i.up)("el-table-column"),g=(0,i.up)("x-form-table"),h=(0,i.up)("el-button"),w=(0,i.up)("x-form"),f=(0,i.up)("el-tab-pane"),y=(0,i.up)("el-tabs"),b=(0,i.up)("el-card"),k=(0,i.up)("el-main"),v=(0,i.up)("el-footer"),x=(0,i.up)("el-container"),_=(0,i.Q2)("loading");return(0,i.wg)(),(0,i.j4)(x,null,{default:(0,i.w5)((()=>[(0,i.Wm)(k,null,{default:(0,i.w5)((()=>[(0,i.Wm)(b,{shadow:"never",class:"setting"},{default:(0,i.w5)((()=>[(0,i.Wm)(s,{title:"系统设置",description:"可以修改网站及应用的各种配置",icon:"el-icon-setting"}),(0,i.wy)(((0,i.wg)(),(0,i.j4)(y,{"tab-position":o.tabposition,modelValue:o.activename,"onUpdate:modelValue":t[1]||(t[1]=e=>o.activename=e)},{default:(0,i.w5)((()=>[((0,i.wg)(!0),(0,i.iD)(i.HY,null,(0,i.Ko)(o.settingList,(e=>((0,i.wg)(),(0,i.j4)(f,{key:e.key,label:e.name,name:e.key},{default:(0,i.w5)((()=>["extend"==e.type?((0,i.wg)(),(0,i.iD)("div",l,[e.tips?((0,i.wg)(),(0,i.j4)(r,{key:0,title:e.tips,type:"warning",style:{"margin-bottom":"15px"}},null,8,["title"])):(0,i.kq)("",!0),(0,i.Wm)(g,{modelValue:o.extend[e.key],"onUpdate:modelValue":t=>o.extend[e.key]=t,hideAdd:!0,"drag-sort":"",placeholder:"暂无数据"},{default:(0,i.w5)((()=>[((0,i.wg)(!0),(0,i.iD)(i.HY,null,(0,i.Ko)(e.column,((e,t)=>((0,i.wg)(),(0,i.j4)(c,{label:e.label,prop:e.prop,width:e.width,key:t},{default:(0,i.w5)((t=>["select"==e.component?((0,i.wg)(),(0,i.j4)(p,(0,i.dG)({key:0,modelValue:t.row[e.prop],"onUpdate:modelValue":a=>t.row[e.prop]=a},e.bind,{clearable:"",filterable:"",style:{width:"100%"}}),{default:(0,i.w5)((()=>[((0,i.wg)(!0),(0,i.iD)(i.HY,null,(0,i.Ko)(e.options,((e,t)=>((0,i.wg)(),(0,i.j4)(u,(0,i.dG)({key:t},e),null,16)))),128))])),_:2},1040,["modelValue","onUpdate:modelValue"])):((0,i.wg)(),(0,i.j4)(m,{key:1,modelValue:t.row[e.prop],"onUpdate:modelValue":a=>t.row[e.prop]=a,placeholder:e.placeholder},null,8,["modelValue","onUpdate:modelValue","placeholder"]))])),_:2},1032,["label","prop","width"])))),128))])),_:2},1032,["modelValue","onUpdate:modelValue"]),(0,i.Wm)(h,{type:"primary",icon:"el-icon-plus",onClick:t=>d.table_add(e),style:{"margin-top":"20px"}},null,8,["onClick"])])):((0,i.wg)(),(0,i.j4)(w,{key:1,ref_for:!0,ref:"formref",config:o.formList[e.key],modelValue:o.info,"onUpdate:modelValue":t[0]||(t[0]=e=>o.info=e),loading:o.loading},null,8,["config","modelValue","loading"]))])),_:2},1032,["label","name"])))),128))])),_:1},8,["tab-position","modelValue"])),[[_,o.loading]])])),_:1})])),_:1}),(0,i.Wm)(v,null,{default:(0,i.w5)((()=>[(0,i.Wm)(h,{type:"primary",onClick:d.submit,style:{"max-width":"500px",width:"100%"},loading:o.submitloading},{default:(0,i.w5)((()=>[(0,i.Uk)("保存")])),_:1},8,["onClick","loading"])])),_:1})])),_:1})}a(8311);var o={name:"setting",data(){return{info:{},activename:"init",tabposition:"left",settingList:[],extend:[],formList:{},loading:!1,submitloading:!1}},watch:{activename(){let e=window.location.href;e=this.changeURLArg(e,"type",this.activename),history.replaceState(Object.assign({},window.history.state,{url:e}),"null",e)}},mounted(){this.render()},created(){this.onLayoutResize(),window.addEventListener("resize",this.onLayoutResize)},methods:{onLayoutResize(){this.tabposition=document.body.clientWidth<992?"top":"left"},changeURLArg(e,t,a){var i=t+"=([^&]*)";if(""===a)return e=e.replace(new RegExp("&?"+i,"gi"),""),e=e.replace(new RegExp("\\??"+i+"&?","gi"),"?"),e;var l=t+"="+a;if(e.match(i)){var n="("+t+"=)([^&]*)";return n=e.replace(new RegExp(n,"gi"),l),n}return e.match("[?]")?e+"&"+l:e+"?"+l},async render(){this.loading=!0;var e=await this.$http.get("setting/get",this.$route.query);if(200!=e.code)return this.$message.warning(e.message),!1;this.settingList=e.data.settingList,this.info=e.data.info,this.formList=e.data.formList,this.extend=e.data.extend||[],this.loading=!1,e.data.activename&&(this.activename=e.data.activename)},async submit(){this.submitloading=!0;var e=await this.$http.post("setting/submit",{info:this.info,extend:this.extend});this.submitloading=!1,200!=e.code?this.$alert(e.message,"提示",{type:"error"}):this.$message.success(e.message||"操作成功")},table_add(e){var t={};e.column.forEach((function(e){t[e.prop]=""})),this.extend[e.key].push(t)}}},d=a(8700);const s=(0,d.Z)(o,[["render",n],["__scopeId","data-v-c77bcd06"]]);var r=s}}]);
|
@ -1 +1 @@
|
||||
"use strict";(self["webpackChunkx_php_admin"]=self["webpackChunkx_php_admin"]||[]).push([[601],{5596:function(e,t,n){n.r(t),n.d(t,{default:function(){return p}});var i=n(6808),a=n(9511),r=n(1441);function h(e,t,n,h,l,o){return(0,i.wg)(),(0,i.iD)("div",{class:"x-code-editor",style:(0,a.j5)({height:o._height})},[(0,i.wy)((0,i._)("textarea",{ref:"textarea","onUpdate:modelValue":t[0]||(t[0]=e=>l.contentValue=e)},null,512),[[r.nr,l.contentValue]])],4)}var l=n(3839),o=n(7353),u=n.n(o),s=(n(5935),n(8881),n(2876),{props:{modelValue:{type:String,default:""},mode:{type:String,default:"javascript"},height:{type:[String,Number],default:300},options:{type:Object,default:()=>{}},theme:{type:String,default:"idea"},readOnly:{type:Boolean,default:!1}},data(){return{contentValue:this.modelValue,coder:null,opt:{theme:this.theme,styleActiveLine:!0,lineNumbers:!0,lineWrapping:!1,tabSize:4,indentUnit:4,indentWithTabs:!0,mode:this.mode,readOnly:this.readOnly,...this.options}}},computed:{_height(){return Number(this.height)?Number(this.height)+"px":this.height}},watch:{modelValue(e){this.contentValue=e,e!==this.coder.getValue()&&this.coder.setValue(e)}},mounted(){this.init()},methods:{init(){this.coder=(0,l.Xl)(u().fromTextArea(this.$refs.textarea,this.opt)),this.coder.on("change",(e=>{this.contentValue=e.getValue(),this.$emit("update:modelValue",this.contentValue)}))},formatStrInJson(e){return JSON.stringify(JSON.parse(e),null,4)}}}),d=n(8700);const c=(0,d.Z)(s,[["render",h],["__scopeId","data-v-1c04bc3c"]]);var p=c}}]);
|
||||
"use strict";(self["webpackChunkx_php_admin"]=self["webpackChunkx_php_admin"]||[]).push([[601],{5596:function(e,t,n){n.r(t),n.d(t,{default:function(){return p}});var i=n(6808),a=n(9511),r=n(1441);function h(e,t,n,h,l,o){return(0,i.wg)(),(0,i.iD)("div",{class:"x-code-editor",style:(0,a.j5)({height:o._height})},[(0,i.wy)((0,i._)("textarea",{ref:"textarea","onUpdate:modelValue":t[0]||(t[0]=e=>l.contentValue=e)},null,512),[[r.nr,l.contentValue]])],4)}var l=n(3839),o=n(3322),u=n.n(o),s=(n(5935),n(8881),n(2876),{props:{modelValue:{type:String,default:""},mode:{type:String,default:"javascript"},height:{type:[String,Number],default:300},options:{type:Object,default:()=>{}},theme:{type:String,default:"idea"},readOnly:{type:Boolean,default:!1}},data(){return{contentValue:this.modelValue,coder:null,opt:{theme:this.theme,styleActiveLine:!0,lineNumbers:!0,lineWrapping:!1,tabSize:4,indentUnit:4,indentWithTabs:!0,mode:this.mode,readOnly:this.readOnly,...this.options}}},computed:{_height(){return Number(this.height)?Number(this.height)+"px":this.height}},watch:{modelValue(e){this.contentValue=e,e!==this.coder.getValue()&&this.coder.setValue(e)}},mounted(){this.init()},methods:{init(){this.coder=(0,l.Xl)(u().fromTextArea(this.$refs.textarea,this.opt)),this.coder.on("change",(e=>{this.contentValue=e.getValue(),this.$emit("update:modelValue",this.contentValue)}))},formatStrInJson(e){return JSON.stringify(JSON.parse(e),null,4)}}}),d=n(8700);const c=(0,d.Z)(s,[["render",h],["__scopeId","data-v-1c04bc3c"]]);var p=c}}]);
|
1
dist/static/js/81.af51a1bc.js
vendored
Normal file
1
dist/static/js/81.af51a1bc.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
dist/static/js/app.9e64d7b4.js
vendored
1
dist/static/js/app.9e64d7b4.js
vendored
File diff suppressed because one or more lines are too long
1
dist/static/js/app.d9acf3ba.js
vendored
Normal file
1
dist/static/js/app.d9acf3ba.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -28,7 +28,7 @@
|
||||
<colgroup>
|
||||
<col width="30">
|
||||
<col width="40">
|
||||
<col width="140">
|
||||
<col width="140">
|
||||
<col>
|
||||
<col width="110">
|
||||
</colgroup>
|
||||
@ -67,7 +67,7 @@
|
||||
<el-button @click="clear">清空过滤</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
@ -114,8 +114,8 @@
|
||||
if (this.data[item.name] === undefined || this.data[item.name] === '' || JSON.stringify(this.data[item.name]) === '') {
|
||||
return ; // 跳过当前迭代,继续下一次迭代
|
||||
}
|
||||
if (item.options && item.options.items && item.options.items.length>0) {
|
||||
const foundItem = item.options.items.find(o => o.value === this.data[item.name]);
|
||||
if (item.options && item.options && item.options.length>0) {
|
||||
const foundItem = item.options.find(o => o.value === this.data[item.name]);
|
||||
if (foundItem?.operator) {
|
||||
item.operator = foundItem.operator;
|
||||
}
|
||||
|
@ -4,118 +4,118 @@
|
||||
<template>
|
||||
<!-- input -->
|
||||
<template v-if="item.component == 'input'">
|
||||
<el-input v-model="data[item.name]" v-bind="item.options" show-word-limit></el-input>
|
||||
<el-input v-model="data[item.name]" v-bind="item.bind || item.options" show-word-limit></el-input>
|
||||
</template>
|
||||
<!-- textarea -->
|
||||
<template v-else-if="item.component == 'textarea'">
|
||||
<el-input v-model="data[item.name]" v-bind="item.options" type="textarea" show-word-limit></el-input>
|
||||
<el-input v-model="data[item.name]" v-bind="item.bind || item.options" type="textarea" show-word-limit></el-input>
|
||||
</template>
|
||||
<!-- checkbox -->
|
||||
<template v-else-if="item.component == 'checkbox'">
|
||||
<el-checkbox v-model="data[item.name]" :label="_item.value" v-for="(_item, _index) in item.options.items" :key="_index">{{ _item.label }}</el-checkbox>
|
||||
<el-checkbox v-model="data[item.name]" v-for="(_item, _index) in options" :key="_index" v-bind="_item">{{ _item.label }}</el-checkbox>
|
||||
</template>
|
||||
<!-- checkboxGroup -->
|
||||
<template v-else-if="item.component == 'checkboxGroup'">
|
||||
<el-checkbox-group v-model="data[item.name]" v-bind="item.bind">
|
||||
<el-checkbox v-for="(_item, index) in options" :key="index" v-bind="_item">
|
||||
{{ _item.label }}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</template>
|
||||
<!-- radio -->
|
||||
<template v-else-if="item.component == 'radio'">
|
||||
<el-radio-group v-model="data[item.name]">
|
||||
<el-radio v-for="_item in item.options.items" :key="_item.value" :label="_item.value">
|
||||
<el-radio-group v-model="data[item.name]" v-bind="item.bind">
|
||||
<el-radio v-for="(_item, index) in options" :key="index" v-bind="_item">
|
||||
{{ _item.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
<!-- select -->
|
||||
<template v-else-if="item.component == 'select'">
|
||||
<el-select v-model="data[item.name]" v-bind="item.options" clearable filterable style="width: 100%;">
|
||||
<el-option v-for="option in item.options.items" :key="option.value" :label="option.label || option.name" :value="option.value"></el-option>
|
||||
<el-select v-model="data[item.name]" v-bind="item.bind" clearable filterable style="width: 100%;">
|
||||
<el-option v-for="(option, index) in options" :key="index" v-bind="option"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<!-- selectgroup -->
|
||||
<template v-else-if="item.component == 'selectgroup'">
|
||||
<el-select v-model="data[item.name]" v-bind="item.bind" clearable filterable style="width: 100%;">
|
||||
<el-option-group v-for="group in item.options" :key="group.label" :label="group.label">
|
||||
<el-option v-for="item in group.options" :key="item.value" :label="item.label" :value="item.value" />
|
||||
<el-option-group v-for="(group, gindex) in options" :key="gindex" :label="group.label">
|
||||
<el-option v-for="(item, index) in group.options" :key="index" v-bind="item" />
|
||||
</el-option-group>
|
||||
</el-select>
|
||||
</template>
|
||||
<!-- checkboxGroup -->
|
||||
<template v-else-if="item.component == 'checkboxGroup'">
|
||||
<el-checkbox-group v-model="data[item.name]">
|
||||
<el-checkbox v-for="_item in item.options.items" :key="_item.value" :label="_item.value">
|
||||
{{ _item.label }}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</template>
|
||||
<!-- upload -->
|
||||
<template v-else-if="item.component == 'upload'">
|
||||
<x-upload v-model="data[item.name]" v-bind="item.options"></x-upload>
|
||||
<x-upload v-model="data[item.name]" v-bind="item.bind || item.options"></x-upload>
|
||||
</template>
|
||||
<!-- uploadfile -->
|
||||
<template v-else-if="item.component == 'uploadfile'">
|
||||
<x-upload-file v-model="data[item.name]" draggable v-bind="item.options"></x-upload-file>
|
||||
<x-upload-file v-model="data[item.name]" draggable v-bind="item.bind || item.options"></x-upload-file>
|
||||
</template>
|
||||
<!-- updatemultiple -->
|
||||
<template v-else-if="item.component == 'updatemultiple'">
|
||||
<x-upload-multiple v-model="data[item.name]" draggable v-bind="item.options"></x-upload-multiple>
|
||||
<x-upload-multiple v-model="data[item.name]" draggable v-bind="item.bind || item.options"></x-upload-multiple>
|
||||
</template>
|
||||
<!-- switch -->
|
||||
<template v-else-if="item.component == 'switch'">
|
||||
<el-switch v-model="data[item.name]" v-bind="item.options" />
|
||||
<el-switch v-model="data[item.name]" v-bind="item.bind || item.options" />
|
||||
</template>
|
||||
<!-- cascader -->
|
||||
<template v-else-if="item.component == 'cascader'">
|
||||
<el-cascader v-model="data[item.name]" :options="item.options.items" clearable></el-cascader>
|
||||
<el-cascader v-model="data[item.name]" :options="item.options" v-bind="item.bind" clearable></el-cascader>
|
||||
</template>
|
||||
<!-- date -->
|
||||
<template v-else-if="item.component == 'date'">
|
||||
<el-date-picker v-model="data[item.name]" v-bind="item.options"></el-date-picker>
|
||||
<el-date-picker v-model="data[item.name]" v-bind="item.bind || item.options"></el-date-picker>
|
||||
</template>
|
||||
<!-- number -->
|
||||
<template v-else-if="item.component == 'number'">
|
||||
<el-input-number v-model="data[item.name]" controls-position="right"></el-input-number>
|
||||
<el-input-number v-model="data[item.name]" v-bind="item.bind"></el-input-number>
|
||||
</template>
|
||||
<!-- color -->
|
||||
<template v-else-if="item.component == 'color'">
|
||||
<el-color-picker v-model="data[item.name]" v-bind="item.options"></el-color-picker>
|
||||
<el-color-picker v-model="data[item.name]" v-bind="item.bind"></el-color-picker>
|
||||
</template>
|
||||
<!-- rate -->
|
||||
<template v-else-if="item.component == 'rate'">
|
||||
<el-rate style="margin-top: 6px;" v-model="data[item.name]" v-bind="item.options"></el-rate>
|
||||
<el-rate style="margin-top: 6px;" v-model="data[item.name]" v-bind="item.bind"></el-rate>
|
||||
</template>
|
||||
<!-- slider -->
|
||||
<template v-else-if="item.component == 'slider'">
|
||||
<el-slider v-model="data[item.name]" v-bind="item.options"></el-slider>
|
||||
<el-slider v-model="data[item.name]" v-bind="item.bind"></el-slider>
|
||||
</template>
|
||||
<!-- tableselect -->
|
||||
<template v-else-if="item.component == 'tableselect'">
|
||||
<tableselect-render v-model="computedValue" :item="item"></tableselect-render>
|
||||
<tableselect-render v-model="computedValue" :item="item" v-bind="item.bind"></tableselect-render>
|
||||
</template>
|
||||
<!-- editor -->
|
||||
<template v-else-if="item.component == 'editor'">
|
||||
<x-editor v-model="data[item.name]" v-bind="item.options"></x-editor>
|
||||
<x-editor v-model="data[item.name]" v-bind="item.bind"></x-editor>
|
||||
</template>
|
||||
<template v-else-if="item.component == 'text'">
|
||||
<el-text v-bind="item.options" v-copy="data[item.name]">{{ data[item.name] }}</el-text>
|
||||
<el-text v-bind="item.bind || item.options" v-copy="data[item.name]">{{ data[item.name] }}</el-text>
|
||||
</template>
|
||||
<template v-else-if="item.component == 'link'">
|
||||
<el-link v-bind="item.options">{{ data[item.name] }}</el-link>
|
||||
<el-link v-bind="item.bind || item.options">{{ data[item.name] }}</el-link>
|
||||
</template>
|
||||
<template v-else-if="item.component == 'button'">
|
||||
<el-button v-bind="item.options">{{ data[item.name] }}</el-button>
|
||||
<el-button v-bind="item.bind || item.options">{{ data[item.name] }}</el-button>
|
||||
</template>
|
||||
<!-- avatar -->
|
||||
<template v-else-if="item.component == 'avatar'">
|
||||
<x-avatar :data="data" :options="item.options" size="small"></x-avatar>
|
||||
</template>
|
||||
<template v-else-if="item.component == 'formtable'">
|
||||
<x-form-table ref="videostable" v-model="data[item.name]" v-bind="item.options"> </x-form-table>
|
||||
<x-form-table ref="xformtable" v-model="data[item.name]" v-bind="item.bind || item.options"> </x-form-table>
|
||||
</template>
|
||||
<template v-else-if="item.component == 'tabs'">
|
||||
<el-tabs v-model="tabsValue" :type="item.options.type || 'border-card'" :tab-position="item.options.position" class="formtabs">
|
||||
<el-tab-pane v-for="t in item.options.items" :key="t.value" :label="t.label" :name="t.value">
|
||||
<el-tabs v-model="tabsValue" v-bind="item.bind" class="formtabs">
|
||||
<el-tab-pane v-for="(t, index) in options" :key="index" v-bind="t">
|
||||
<template #label>
|
||||
<el-badge is-dot v-if="data[item.name][t.value]"> </el-badge>
|
||||
<span>{{ t.label }}</span>
|
||||
</template>
|
||||
<el-input v-model="data[item.name][t.value]" type="textarea" :rows="item.options.rows || 6" show-word-limit></el-input>
|
||||
<el-input v-model="data[item.name][t.value]" type="textarea" v-bind="item.options" show-word-limit></el-input>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</template>
|
||||
@ -166,9 +166,12 @@ export default {
|
||||
xEditor
|
||||
},
|
||||
computed: {
|
||||
options() {
|
||||
return this.item.options.items || this.item.options; // 兼容旧版
|
||||
},
|
||||
tabsValue() {
|
||||
if (this.item.options && this.item.component == 'tabs') {
|
||||
return this.item.options.value || this.item.options.items[0].value;
|
||||
if (this.options && this.item.component == 'tabs') {
|
||||
return this.item.value || this.options[0].value;
|
||||
}
|
||||
return '';
|
||||
},
|
||||
|
@ -47,7 +47,8 @@ export default {
|
||||
},
|
||||
data: {},
|
||||
search: {},
|
||||
date: []
|
||||
date: [],
|
||||
hasBeenActivated: false,
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@ -58,6 +59,15 @@ export default {
|
||||
return this.config.type == 'containe' ? 'el-containe' : (this.config.type == 'drawer' ? 'el-drawer' : 'x-dialog');
|
||||
}
|
||||
},
|
||||
activated() {
|
||||
|
||||
if (this.hasBeenActivated) {
|
||||
this.handleSearchUpdated(this.search);
|
||||
return true;
|
||||
}
|
||||
|
||||
this.hasBeenActivated = true;
|
||||
},
|
||||
mounted() {
|
||||
|
||||
},
|
||||
|
@ -3,7 +3,7 @@
|
||||
<el-badge v-if="item.status && item.status.key && row[item.status.key]" is-dot class="item" :type="item.status.type || 'primary'" style="width: 10px;cursor: pointer;margin-top: 10px;"></el-badge>
|
||||
<x-avatar v-if="item.columntype == 'avatar' || item.component == 'avatar'" :name="item.name" :options="item.options" :data="row"></x-avatar>
|
||||
<el-badge v-else-if="item.columntype == 'badge' || item.columntype == 'imagegroup'" :value="getType(row[item.name])" @click="handleClick(row, item)" v-bind="item.options" style="cursor: pointer; "></el-badge>
|
||||
<el-link v-else-if="item.columntype == 'link'" v-bind="item.options" @click="handleClick(row, item)"> {{ row[item.name] }} </el-link>
|
||||
<el-link v-else-if="item.columntype == 'link'" v-bind="item.bind || item.options" @click="handleClick(row, item)"> {{ row[item.name] }} </el-link>
|
||||
<el-image v-else-if="item.columntype == 'image'" :preview-src-list="[getImg(row[item.name])]" :preview-teleported="true" hide-on-click-modal="true" lazy="true" style="max-width: 60px; height: 26px; border-radius: 2px;" fit="cover" :src="getImg(row[item.name])">
|
||||
<template #error>
|
||||
<div class="image-slot">
|
||||
@ -13,27 +13,27 @@
|
||||
</el-image>
|
||||
<input v-else-if="item.columntype == 'input'" @click="handleClick(row, item)" style="cursor: pointer; " class="el-input__inner" type="text" readonly :value="row[item.name]">
|
||||
<p v-else-if="item.columntype == 'status'">
|
||||
<template v-for="{ value, type = 'success', label, options={} } in item.options.items">
|
||||
<template v-for="{ value, type = 'success', label, options={} } in options">
|
||||
<x-status-indicator :style="item.style" :key="value" pulse :type="type" :label="label" @click="handleClick(row, options || item)" v-if="value == row[item.name]"></x-status-indicator>
|
||||
</template>
|
||||
</p>
|
||||
<p v-else-if="item.columntype == 'button'">
|
||||
<span v-if="item.options.items && item.options.items.length > 0">
|
||||
<template v-for="op in item.options.items">
|
||||
<el-button @click="handleClick(row, op.options || item)" :key="op.value" :type="op.type || 'warning'" :size="op.size || 'small'" v-bind="op" v-if="op.value == row[item.name]">
|
||||
<span v-if="options && options.length > 0">
|
||||
<template v-for="(op, index) in options">
|
||||
<el-button @click="handleClick(row, op.options || item)" :key="index" :type="op.type || 'warning'" :size="op.size || 'small'" v-bind="op" v-if="op.value == row[item.name]">
|
||||
{{ op.label }}
|
||||
</el-button>
|
||||
</template>
|
||||
</span>
|
||||
<el-button v-else @click="handleClick(row, item)" :type="item.options.type || 'warning'" v-bind="item.options"> {{ row[item.name] }} </el-button>
|
||||
<el-button v-else @click="handleClick(row, item)" :type="item.bind.type || 'warning'" v-bind="item.bind"> {{ row[item.name] }} </el-button>
|
||||
</p>
|
||||
<p v-else-if="item.columntype == 'text'">
|
||||
<el-text v-bind="item.options" v-if="item.copy" v-copy="row[item.copy]" style="cursor: pointer;display: inline;"> {{ row[item.name] }} </el-text>
|
||||
<el-text v-bind="item.options" v-else @click="handleClick(row, item)" style="cursor: pointer;display: inline;"> {{ row[item.name] }} </el-text>
|
||||
<el-text v-bind="item.bind || item.options" v-if="item.copy" v-copy="row[item.copy]" style="cursor: pointer;display: inline;"> {{ row[item.name] }} </el-text>
|
||||
<el-text v-bind="item.bind || item.options" v-else @click="handleClick(row, item)" style="cursor: pointer;display: inline;"> {{ row[item.name] }} </el-text>
|
||||
</p>
|
||||
<p v-else-if="item.columntype == 'tag' || item.columntype == 'time'" @click="handleClick(row, item)" v-time.tip="row[item.name]"></p>
|
||||
<slot v-else :name="item.name">
|
||||
{{ item.columntype == 'select' && item.options && item.options.items ? getNameByValue(row[item.name], item.options.items) : row[item.name] }}
|
||||
{{ item.columntype == 'select' && options && options ? getNameByValue(row[item.name], options) : row[item.name] }}
|
||||
</slot>
|
||||
</div>
|
||||
</template>
|
||||
@ -53,6 +53,11 @@ export default {
|
||||
},
|
||||
row: { type: Object, default: () => { } },
|
||||
},
|
||||
computed: {
|
||||
options() {
|
||||
return this.item.options.items || this.item.options; // 兼容旧版
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
handleClick(row, item) {
|
||||
|
||||
|
@ -1,304 +1,315 @@
|
||||
<template>
|
||||
<div class="adminui-tags">
|
||||
<ul ref="tags">
|
||||
<li v-for="tag in tagList" v-bind:key="tag" :class="[isActive(tag)?'active':'',tag.meta.affix?'affix':'' ]" @contextmenu.prevent="openContextMenu($event, tag)">
|
||||
<li v-for="tag in tagList" v-bind:key="tag" :class="[isActive(tag) ? 'active' : '', tag.meta.affix ? 'affix' : '']" @contextmenu.prevent="openContextMenu($event, tag)">
|
||||
<router-link :to="tag">
|
||||
<span>{{ tag.meta.title }}</span>
|
||||
<el-icon v-if="!tag.meta.affix" @click.prevent.stop='closeSelectedTag(tag)'><el-icon-close/></el-icon>
|
||||
<span>{{ tag.meta.title }}</span>
|
||||
<el-icon v-if="!tag.meta.affix" @click.prevent.stop='closeSelectedTag(tag)'><el-icon-close /></el-icon>
|
||||
</router-link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<transition name="el-zoom-in-top">
|
||||
<ul v-if="contextMenuVisible" :style="{left:left+'px',top:top+'px'}" class="contextmenu" id="contextmenu">
|
||||
<li @click="refreshTab()"><el-icon><el-icon-refresh/></el-icon>刷新</li>
|
||||
<ul v-if="contextMenuVisible" :style="{ left: left + 'px', top: top + 'px' }" class="contextmenu" id="contextmenu">
|
||||
<li @click="refreshTab()"><el-icon><el-icon-refresh /></el-icon>刷新</li>
|
||||
<hr>
|
||||
<li @click="closeTabs()" :class="contextMenuItem.meta.affix?'disabled':''"><el-icon><el-icon-close/></el-icon>关闭标签</li>
|
||||
<li @click="closeOtherTabs()"><el-icon><el-icon-folder-delete/></el-icon>关闭其他标签</li>
|
||||
<li @click="closeTabs()" :class="contextMenuItem.meta.affix ? 'disabled' : ''"><el-icon><el-icon-close /></el-icon>关闭标签</li>
|
||||
<li @click="closeOtherTabs()"><el-icon><el-icon-folder-delete /></el-icon>关闭其他标签</li>
|
||||
<hr>
|
||||
<li @click="maximize()"><el-icon><el-icon-full-screen/></el-icon>最大化</li>
|
||||
<li @click="openWindow()"><el-icon><el-icon-copy-document/></el-icon>在新的窗口中打开</li>
|
||||
<li @click="maximize()"><el-icon><el-icon-full-screen /></el-icon>最大化</li>
|
||||
<li @click="openWindow()"><el-icon><el-icon-copy-document /></el-icon>在新的窗口中打开</li>
|
||||
</ul>
|
||||
</transition>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Sortable from 'sortablejs'
|
||||
import Sortable from 'sortablejs'
|
||||
|
||||
export default {
|
||||
name: "tags",
|
||||
data() {
|
||||
return {
|
||||
contextMenuVisible: false,
|
||||
contextMenuItem: null,
|
||||
left: 0,
|
||||
top: 0,
|
||||
tagList: this.$store.state.viewTags.viewTags,
|
||||
tipDisplayed: false
|
||||
export default {
|
||||
name: "tags",
|
||||
data() {
|
||||
return {
|
||||
contextMenuVisible: false,
|
||||
contextMenuItem: null,
|
||||
left: 0,
|
||||
top: 0,
|
||||
tagList: this.$store.state.viewTags.viewTags,
|
||||
tipDisplayed: false
|
||||
}
|
||||
},
|
||||
props: {},
|
||||
watch: {
|
||||
$route(e) {
|
||||
this.addViewTags(e);
|
||||
//判断标签容器是否出现滚动条
|
||||
this.$nextTick(() => {
|
||||
const tags = this.$refs.tags
|
||||
if (tags && tags.scrollWidth > tags.clientWidth) {
|
||||
//确保当前标签在可视范围内
|
||||
let targetTag = tags.querySelector(".active")
|
||||
targetTag.scrollIntoView()
|
||||
//显示提示
|
||||
if (!this.tipDisplayed) {
|
||||
this.$msgbox({
|
||||
type: 'warning',
|
||||
center: true,
|
||||
title: '提示',
|
||||
message: '当前标签数量过多,可通过鼠标滚轴滚动标签栏。关闭标签数量可减少系统性能消耗。',
|
||||
confirmButtonText: '知道了'
|
||||
})
|
||||
this.tipDisplayed = true
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
},
|
||||
contextMenuVisible(value) {
|
||||
const cm = (e) => {
|
||||
const sp = document.getElementById("contextmenu");
|
||||
if (sp && !sp.contains(e.target)) {
|
||||
this.closeMenu()
|
||||
}
|
||||
}
|
||||
if (value) {
|
||||
document.body.addEventListener('click', e => cm(e))
|
||||
} else {
|
||||
document.body.removeEventListener('click', e => cm(e))
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
var menu = this.$router.x_getMenu()
|
||||
var dashboardRoute = this.treeFind(menu, node => node.path == this.$config.DASHBOARD_URL)
|
||||
if (dashboardRoute) {
|
||||
dashboardRoute.fullPath = dashboardRoute.path
|
||||
this.addViewTags(dashboardRoute)
|
||||
this.addViewTags(this.$route)
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.tagDrop();
|
||||
this.scrollInit()
|
||||
},
|
||||
methods: {
|
||||
//查找树
|
||||
treeFind(tree, func) {
|
||||
for (const data of tree) {
|
||||
if (func(data)) return data
|
||||
if (data.children) {
|
||||
const res = this.treeFind(data.children, func)
|
||||
if (res) return res
|
||||
}
|
||||
}
|
||||
return null
|
||||
},
|
||||
//标签拖拽排序
|
||||
tagDrop() {
|
||||
const target = this.$refs.tags
|
||||
Sortable.create(target, {
|
||||
draggable: 'li',
|
||||
animation: 300
|
||||
})
|
||||
},
|
||||
//增加tag
|
||||
addViewTags(route) {
|
||||
if (route.name && !route.meta.fullpage) {
|
||||
this.$store.commit("pushViewTags", route)
|
||||
!route.meta.disablecache && this.$store.commit("pushKeepLive", route.name)
|
||||
}
|
||||
},
|
||||
props: {},
|
||||
watch: {
|
||||
$route(e) {
|
||||
this.addViewTags(e);
|
||||
//判断标签容器是否出现滚动条
|
||||
this.$nextTick(() => {
|
||||
const tags = this.$refs.tags
|
||||
if(tags && tags.scrollWidth > tags.clientWidth){
|
||||
//确保当前标签在可视范围内
|
||||
let targetTag = tags.querySelector(".active")
|
||||
targetTag.scrollIntoView()
|
||||
//显示提示
|
||||
if(!this.tipDisplayed){
|
||||
this.$msgbox({
|
||||
type: 'warning',
|
||||
center: true,
|
||||
title: '提示',
|
||||
message: '当前标签数量过多,可通过鼠标滚轴滚动标签栏。关闭标签数量可减少系统性能消耗。',
|
||||
confirmButtonText: '知道了'
|
||||
})
|
||||
this.tipDisplayed = true
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
},
|
||||
contextMenuVisible(value) {
|
||||
const cm = (e) => {
|
||||
const sp = document.getElementById("contextmenu");
|
||||
if (sp && !sp.contains(e.target)) {
|
||||
this.closeMenu()
|
||||
}
|
||||
}
|
||||
if (value) {
|
||||
document.body.addEventListener('click', e => cm(e))
|
||||
//高亮tag
|
||||
isActive(route) {
|
||||
return route.fullPath === this.$route.fullPath
|
||||
},
|
||||
//关闭tag
|
||||
closeSelectedTag(tag, autoPushLatestView = true) {
|
||||
const nowTagIndex = this.tagList.findIndex(item => item.fullPath == tag.fullPath)
|
||||
this.$store.commit("removeViewTags", tag)
|
||||
this.$store.commit("removeIframeList", tag)
|
||||
this.$store.commit("removeKeepLive", tag.name)
|
||||
if (autoPushLatestView && this.isActive(tag)) {
|
||||
const leftView = this.tagList[nowTagIndex - 1]
|
||||
if (leftView) {
|
||||
this.$router.push(leftView)
|
||||
} else {
|
||||
document.body.removeEventListener('click', e => cm(e))
|
||||
this.$router.push('/')
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
var menu = this.$router.x_getMenu()
|
||||
var dashboardRoute = this.treeFind(menu, node => node.path==this.$config.DASHBOARD_URL)
|
||||
if(dashboardRoute){
|
||||
dashboardRoute.fullPath = dashboardRoute.path
|
||||
this.addViewTags(dashboardRoute)
|
||||
this.addViewTags(this.$route)
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.tagDrop();
|
||||
this.scrollInit()
|
||||
},
|
||||
methods: {
|
||||
//查找树
|
||||
treeFind(tree, func){
|
||||
for (const data of tree) {
|
||||
if (func(data)) return data
|
||||
if (data.children) {
|
||||
const res = this.treeFind(data.children, func)
|
||||
if (res) return res
|
||||
}
|
||||
}
|
||||
return null
|
||||
},
|
||||
//标签拖拽排序
|
||||
tagDrop(){
|
||||
const target = this.$refs.tags
|
||||
Sortable.create(target, {
|
||||
draggable: 'li',
|
||||
animation: 300
|
||||
})
|
||||
},
|
||||
//增加tag
|
||||
addViewTags(route) {
|
||||
if(route.name && !route.meta.fullpage){
|
||||
this.$store.commit("pushViewTags",route)
|
||||
this.$store.commit("pushKeepLive",route.name)
|
||||
}
|
||||
},
|
||||
//高亮tag
|
||||
isActive(route) {
|
||||
return route.fullPath === this.$route.fullPath
|
||||
},
|
||||
//关闭tag
|
||||
closeSelectedTag(tag, autoPushLatestView=true) {
|
||||
const nowTagIndex = this.tagList.findIndex(item => item.fullPath == tag.fullPath)
|
||||
this.$store.commit("removeViewTags", tag)
|
||||
this.$store.commit("removeIframeList", tag)
|
||||
this.$store.commit("removeKeepLive", tag.name)
|
||||
if (autoPushLatestView && this.isActive(tag)) {
|
||||
const leftView = this.tagList[nowTagIndex - 1]
|
||||
if (leftView) {
|
||||
this.$router.push(leftView)
|
||||
} else {
|
||||
this.$router.push('/')
|
||||
}
|
||||
}
|
||||
},
|
||||
//tag右键
|
||||
openContextMenu(e, tag){
|
||||
this.contextMenuItem = tag;
|
||||
this.contextMenuVisible = true;
|
||||
this.left = e.clientX + 1;
|
||||
this.top = e.clientY + 1;
|
||||
//tag右键
|
||||
openContextMenu(e, tag) {
|
||||
this.contextMenuItem = tag;
|
||||
this.contextMenuVisible = true;
|
||||
this.left = e.clientX + 1;
|
||||
this.top = e.clientY + 1;
|
||||
|
||||
//FIX 右键菜单边缘化位置处理
|
||||
//FIX 右键菜单边缘化位置处理
|
||||
this.$nextTick(() => {
|
||||
let sp = document.getElementById("contextmenu");
|
||||
if (document.body.offsetWidth - e.clientX < sp.offsetWidth) {
|
||||
this.left = document.body.offsetWidth - sp.offsetWidth + 1;
|
||||
this.top = e.clientY + 1;
|
||||
}
|
||||
})
|
||||
},
|
||||
//关闭右键菜单
|
||||
closeMenu() {
|
||||
this.contextMenuItem = null;
|
||||
this.contextMenuVisible = false
|
||||
},
|
||||
//TAB 刷新
|
||||
refreshTab() {
|
||||
this.contextMenuVisible = false
|
||||
const nowTag = this.contextMenuItem;
|
||||
//判断是否当前路由,否的话跳转
|
||||
if (this.$route.fullPath !== nowTag.fullPath) {
|
||||
this.$router.push({
|
||||
path: nowTag.fullPath,
|
||||
query: nowTag.query
|
||||
})
|
||||
}
|
||||
|
||||
this.$store.commit("refreshIframe", nowTag)
|
||||
setTimeout(() => {
|
||||
this.$store.commit("removeKeepLive", nowTag.name)
|
||||
this.$store.commit("setRouteShow", false)
|
||||
this.$nextTick(() => {
|
||||
let sp = document.getElementById("contextmenu");
|
||||
if(document.body.offsetWidth - e.clientX < sp.offsetWidth){
|
||||
this.left = document.body.offsetWidth - sp.offsetWidth + 1;
|
||||
this.top = e.clientY + 1;
|
||||
}
|
||||
!this.$route.meta.disablecache && this.$store.commit("pushKeepLive", nowTag.name)
|
||||
this.$store.commit("setRouteShow", true)
|
||||
})
|
||||
},
|
||||
//关闭右键菜单
|
||||
closeMenu() {
|
||||
this.contextMenuItem = null;
|
||||
}, 0);
|
||||
},
|
||||
//TAB 关闭
|
||||
closeTabs() {
|
||||
var nowTag = this.contextMenuItem;
|
||||
if (!nowTag.meta.affix) {
|
||||
this.closeSelectedTag(nowTag)
|
||||
this.contextMenuVisible = false
|
||||
},
|
||||
//TAB 刷新
|
||||
refreshTab() {
|
||||
this.contextMenuVisible = false
|
||||
const nowTag = this.contextMenuItem;
|
||||
//判断是否当前路由,否的话跳转
|
||||
if (this.$route.fullPath !== nowTag.fullPath) {
|
||||
this.$router.push({
|
||||
path: nowTag.fullPath,
|
||||
query: nowTag.query
|
||||
})
|
||||
}
|
||||
|
||||
this.$store.commit("refreshIframe", nowTag)
|
||||
setTimeout(() => {
|
||||
this.$store.commit("removeKeepLive", nowTag.name)
|
||||
this.$store.commit("setRouteShow", false)
|
||||
this.$nextTick(() => {
|
||||
this.$store.commit("pushKeepLive", nowTag.name)
|
||||
this.$store.commit("setRouteShow", true)
|
||||
})
|
||||
}, 0);
|
||||
},
|
||||
//TAB 关闭
|
||||
closeTabs(){
|
||||
var nowTag = this.contextMenuItem;
|
||||
if(!nowTag.meta.affix){
|
||||
this.closeSelectedTag(nowTag)
|
||||
this.contextMenuVisible = false
|
||||
}
|
||||
},
|
||||
//TAB 关闭其他
|
||||
closeOtherTabs(){
|
||||
var nowTag = this.contextMenuItem;
|
||||
//判断是否当前路由,否的话跳转
|
||||
if(this.$route.fullPath != nowTag.fullPath){
|
||||
this.$router.push({
|
||||
path: nowTag.fullPath,
|
||||
query: nowTag.query
|
||||
})
|
||||
}
|
||||
var tags = [...this.tagList];
|
||||
tags.forEach(tag => {
|
||||
if(tag.meta&&tag.meta.affix || nowTag.fullPath==tag.fullPath){
|
||||
return true
|
||||
}else{
|
||||
this.closeSelectedTag(tag, false)
|
||||
}
|
||||
}
|
||||
},
|
||||
//TAB 关闭其他
|
||||
closeOtherTabs() {
|
||||
var nowTag = this.contextMenuItem;
|
||||
//判断是否当前路由,否的话跳转
|
||||
if (this.$route.fullPath != nowTag.fullPath) {
|
||||
this.$router.push({
|
||||
path: nowTag.fullPath,
|
||||
query: nowTag.query
|
||||
})
|
||||
this.contextMenuVisible = false
|
||||
},
|
||||
//TAB 最大化
|
||||
maximize(){
|
||||
var nowTag = this.contextMenuItem;
|
||||
this.contextMenuVisible = false
|
||||
//判断是否当前路由,否的话跳转
|
||||
if(this.$route.fullPath != nowTag.fullPath){
|
||||
this.$router.push({
|
||||
path: nowTag.fullPath,
|
||||
query: nowTag.query
|
||||
})
|
||||
}
|
||||
var tags = [...this.tagList];
|
||||
tags.forEach(tag => {
|
||||
if (tag.meta && tag.meta.affix || nowTag.fullPath == tag.fullPath) {
|
||||
return true
|
||||
} else {
|
||||
this.closeSelectedTag(tag, false)
|
||||
}
|
||||
document.getElementById('app').classList.add('main-maximize')
|
||||
},
|
||||
//新窗口打开
|
||||
openWindow(){
|
||||
var nowTag = this.contextMenuItem;
|
||||
var url = nowTag.href || '/';
|
||||
if(!nowTag.meta.affix){
|
||||
this.closeSelectedTag(nowTag)
|
||||
}
|
||||
window.open(url);
|
||||
this.contextMenuVisible = false
|
||||
},
|
||||
//横向滚动
|
||||
scrollInit(){
|
||||
const scrollDiv = this.$refs.tags;
|
||||
scrollDiv.addEventListener('mousewheel', handler, false) || scrollDiv.addEventListener("DOMMouseScroll", handler, false)
|
||||
function handler(event) {
|
||||
const detail = event.wheelDelta || event.detail;
|
||||
//火狐上滚键值-3 下滚键值3,其他内核上滚键值120 下滚键值-120
|
||||
const moveForwardStep = 1;
|
||||
const moveBackStep = -1;
|
||||
let step = 0;
|
||||
if (detail == 3 || detail < 0 && detail != -3) {
|
||||
step = moveForwardStep * 50;
|
||||
}else{
|
||||
step = moveBackStep * 50;
|
||||
}
|
||||
scrollDiv.scrollLeft += step;
|
||||
})
|
||||
this.contextMenuVisible = false
|
||||
},
|
||||
//TAB 最大化
|
||||
maximize() {
|
||||
var nowTag = this.contextMenuItem;
|
||||
this.contextMenuVisible = false
|
||||
//判断是否当前路由,否的话跳转
|
||||
if (this.$route.fullPath != nowTag.fullPath) {
|
||||
this.$router.push({
|
||||
path: nowTag.fullPath,
|
||||
query: nowTag.query
|
||||
})
|
||||
}
|
||||
document.getElementById('app').classList.add('main-maximize')
|
||||
},
|
||||
//新窗口打开
|
||||
openWindow() {
|
||||
var nowTag = this.contextMenuItem;
|
||||
var url = nowTag.href || '/';
|
||||
if (!nowTag.meta.affix) {
|
||||
this.closeSelectedTag(nowTag)
|
||||
}
|
||||
window.open(url);
|
||||
this.contextMenuVisible = false
|
||||
},
|
||||
//横向滚动
|
||||
scrollInit() {
|
||||
const scrollDiv = this.$refs.tags;
|
||||
scrollDiv.addEventListener('mousewheel', handler, false) || scrollDiv.addEventListener("DOMMouseScroll", handler, false)
|
||||
function handler(event) {
|
||||
const detail = event.wheelDelta || event.detail;
|
||||
//火狐上滚键值-3 下滚键值3,其他内核上滚键值120 下滚键值-120
|
||||
const moveForwardStep = 1;
|
||||
const moveBackStep = -1;
|
||||
let step = 0;
|
||||
if (detail == 3 || detail < 0 && detail != -3) {
|
||||
step = moveForwardStep * 50;
|
||||
} else {
|
||||
step = moveBackStep * 50;
|
||||
}
|
||||
scrollDiv.scrollLeft += step;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.contextmenu {
|
||||
position: fixed;
|
||||
width: 200px;
|
||||
margin:0;
|
||||
border-radius: 0px;
|
||||
background: var(--el-bg-color-overlay);
|
||||
border: 1px solid var(--el-border-color-light);
|
||||
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
|
||||
z-index: 3000;
|
||||
list-style-type: none;
|
||||
padding: 10px 0;
|
||||
}
|
||||
.contextmenu hr {
|
||||
margin:5px 0;
|
||||
border: none;
|
||||
height: 1px;
|
||||
font-size: 0px;
|
||||
background-color: var(--el-border-color-light);
|
||||
}
|
||||
.contextmenu li {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin:0;
|
||||
cursor: pointer;
|
||||
line-height: 30px;
|
||||
padding: 0 17px;
|
||||
color: #606266;
|
||||
}
|
||||
.contextmenu li i {
|
||||
font-size: 14px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.contextmenu li:hover {
|
||||
background-color: #ecf5ff;
|
||||
color: #66b1ff;
|
||||
}
|
||||
.contextmenu li.disabled {
|
||||
cursor: not-allowed;
|
||||
color: #bbb;
|
||||
background: transparent;
|
||||
}
|
||||
.contextmenu {
|
||||
position: fixed;
|
||||
width: 200px;
|
||||
margin: 0;
|
||||
border-radius: 0px;
|
||||
background: var(--el-bg-color-overlay);
|
||||
border: 1px solid var(--el-border-color-light);
|
||||
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
|
||||
z-index: 3000;
|
||||
list-style-type: none;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.tags-tip {padding:5px;}
|
||||
.tags-tip p {margin-bottom: 10px;}
|
||||
.contextmenu hr {
|
||||
margin: 5px 0;
|
||||
border: none;
|
||||
height: 1px;
|
||||
font-size: 0px;
|
||||
background-color: var(--el-border-color-light);
|
||||
}
|
||||
|
||||
.dark .contextmenu li {color: var(--el-text-color-primary);}
|
||||
.contextmenu li {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
line-height: 30px;
|
||||
padding: 0 17px;
|
||||
color: #606266;
|
||||
}
|
||||
|
||||
.contextmenu li i {
|
||||
font-size: 14px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.contextmenu li:hover {
|
||||
background-color: #ecf5ff;
|
||||
color: #66b1ff;
|
||||
}
|
||||
|
||||
.contextmenu li.disabled {
|
||||
cursor: not-allowed;
|
||||
color: #bbb;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.tags-tip {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.tags-tip p {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.dark .contextmenu li {
|
||||
color: var(--el-text-color-primary);
|
||||
}
|
||||
</style>
|
||||
|
@ -13,7 +13,7 @@ export default {
|
||||
store.commit("removeKeepLive", route.name)
|
||||
store.commit("setRouteShow", false)
|
||||
nextTick(() => {
|
||||
store.commit("pushKeepLive", route.name)
|
||||
!route.meta.disablecache && store.commit("pushKeepLive", route.name)
|
||||
store.commit("setRouteShow", true)
|
||||
NProgress.done()
|
||||
})
|
||||
|
@ -8,10 +8,10 @@
|
||||
<div v-if="item.type == 'extend'">
|
||||
<el-alert :title="item.tips" v-if="item.tips" type="warning" style="margin-bottom: 15px;"></el-alert>
|
||||
<x-form-table v-model="extend[item.key]" :hideAdd="true" drag-sort placeholder="暂无数据">
|
||||
<el-table-column :label="c.label" :prop="c.prop" :width="c.width" :key="c.prop" v-for="c in item.column">
|
||||
<el-table-column :label="c.label" :prop="c.prop" :width="c.width" :key="index" v-for="(c, index) in item.column">
|
||||
<template #default="scope">
|
||||
<el-select v-if="c.component == 'select'" v-model="scope.row[c.prop]" v-bind="c.options" clearable filterable style="width: 100%;">
|
||||
<el-option v-for="option in c.options.items" :key="option.value" :label="option.label || option.name" :value="option.value"></el-option>
|
||||
<el-select v-if="c.component == 'select'" v-model="scope.row[c.prop]" v-bind="c.bind" clearable filterable style="width: 100%;">
|
||||
<el-option v-for="(option, index) in c.options" :key="index" v-bind="option"></el-option>
|
||||
</el-select>
|
||||
<el-input v-else v-model="scope.row[c.prop]" :placeholder="c.placeholder"></el-input>
|
||||
</template>
|
||||
@ -156,7 +156,7 @@ export default {
|
||||
},
|
||||
async submit() {
|
||||
this.submitloading = true;
|
||||
var res = this.$http.post('setting/submit', { info: this.info, extend: this.extend });
|
||||
var res = await this.$http.post('setting/submit', { info: this.info, extend: this.extend });
|
||||
this.submitloading = false;
|
||||
if (res.code == 200) {
|
||||
this.$message.success(res.message || "操作成功")
|
||||
|
Loading…
Reference in New Issue
Block a user