w-web-perm 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +9 -0
- package/.eslintignore +3 -0
- package/.eslintrc.js +55 -0
- package/.github/workflows/ci-test.yml +24 -0
- package/.jsdoc +25 -0
- package/.vscode/launch.json +21 -0
- package/LICENSE +21 -0
- package/README.md +24 -0
- package/SECURITY.md +5 -0
- package/babel.config.js +15 -0
- package/dist/css/app.79b4b59b.css +1 -0
- package/dist/css/chunk-vendors.65775501.css +5 -0
- package/dist/index.tmp +1 -0
- package/dist/js/app-legacy.954e168c.js +2 -0
- package/dist/js/app-legacy.954e168c.js.map +1 -0
- package/dist/js/app.954e168c.js +2 -0
- package/dist/js/app.954e168c.js.map +1 -0
- package/dist/js/chunk-vendors-legacy.f5f1a231.js +13 -0
- package/dist/js/chunk-vendors-legacy.f5f1a231.js.map +1 -0
- package/dist/js/chunk-vendors.f5f1a231.js +13 -0
- package/dist/js/chunk-vendors.f5f1a231.js.map +1 -0
- package/dist/w-web-perm.umd.js +7 -0
- package/dist/w-web-perm.umd.js.map +1 -0
- package/docs/WWebPerm.html +826 -0
- package/docs/WWebPerm.mjs.html +558 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/index.html +84 -0
- package/docs/scripts/collapse.js +39 -0
- package/docs/scripts/commonNav.js +28 -0
- package/docs/scripts/linenumber.js +25 -0
- package/docs/scripts/nav.js +12 -0
- package/docs/scripts/polyfill.js +4 -0
- package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/docs/scripts/prettify/lang-css.js +2 -0
- package/docs/scripts/prettify/prettify.js +28 -0
- package/docs/scripts/search.js +99 -0
- package/docs/styles/jsdoc.css +776 -0
- package/docs/styles/prettify.css +80 -0
- package/g.getSettings.mjs +17 -0
- package/g.mDb.mjs +10 -0
- package/g.mInitialTestData.mjs +20 -0
- package/g.mOrm.mjs +24 -0
- package/package.json +75 -0
- package/public/index.html +23 -0
- package/server/WWebPerm.mjs +486 -0
- package/src/App.vue +153 -0
- package/src/components/Common/CheckYes.vue +85 -0
- package/src/components/Common/CheckYesNo.vue +91 -0
- package/src/components/Common/LabelItem.vue +106 -0
- package/src/components/Common/LoadingWinBar.vue +87 -0
- package/src/components/Layout.vue +152 -0
- package/src/components/LayoutContent.vue +246 -0
- package/src/components/LayoutContentGroups.vue +664 -0
- package/src/components/LayoutContentTargets.vue +538 -0
- package/src/components/LayoutContentUsers.vue +493 -0
- package/src/components/LayoutState.vue +91 -0
- package/src/components/VeUser.vue +453 -0
- package/src/components/ruleGroup.vue +667 -0
- package/src/main.js +103 -0
- package/src/perm.mjs +61 -0
- package/src/plugins/mDataSelectorSchema.mjs +30 -0
- package/src/plugins/mDataSupport.mjs +66 -0
- package/src/plugins/mShare.mjs +366 -0
- package/src/plugins/mUI.mjs +229 -0
- package/src/plugins/mVuetify.mjs +12 -0
- package/src/schema/gi.mjs +8 -0
- package/src/schema/index.mjs +20 -0
- package/src/schema/tables/ruleGroups.mjs +100 -0
- package/src/schema/tables/targets.mjs +100 -0
- package/src/schema/tables/users.mjs +125 -0
- package/src/store/actions.mjs +1 -0
- package/src/store/getters.mjs +1 -0
- package/src/store/index.mjs +25 -0
- package/src/store/mutations.mjs +201 -0
- package/src/store/types.mjs +15 -0
- package/srv.mjs +52 -0
- package/tableTags-web-perm.json +1 -0
- package/test/all.test.mjs +10 -0
- package/toolg/addVersion.mjs +4 -0
- package/toolg/cleanFolder.mjs +4 -0
- package/toolg/gDistRollup.mjs +36 -0
- package/toolg/genEntry.mjs +23 -0
- package/toolg/modifyReadme.mjs +4 -0
- package/vue.config.js +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js/app.954e168c.js","mappings":"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","sources":["webpack://w-web-perm/./src/App.vue","webpack://w-web-perm/./src/components/Common/LoadingWinBar.vue","webpack://w-web-perm/src/components/Common/LoadingWinBar.vue","webpack://w-web-perm/./src/components/Common/LoadingWinBar.vue?524a","webpack://w-web-perm/./src/components/Common/LoadingWinBar.vue?0bae","webpack://w-web-perm/./src/components/Common/CheckYesNo.vue","webpack://w-web-perm/src/components/Common/CheckYesNo.vue","webpack://w-web-perm/./src/components/Common/CheckYesNo.vue?436b","webpack://w-web-perm/./src/components/Common/CheckYesNo.vue?5d88","webpack://w-web-perm/./src/components/Common/CheckYes.vue","webpack://w-web-perm/src/components/Common/CheckYes.vue","webpack://w-web-perm/./src/components/Common/CheckYes.vue?3425","webpack://w-web-perm/./src/components/Common/CheckYes.vue?d003","webpack://w-web-perm/./src/components/LayoutState.vue","webpack://w-web-perm/src/components/LayoutState.vue","webpack://w-web-perm/./src/components/LayoutState.vue?f5e9","webpack://w-web-perm/./src/components/LayoutState.vue?272c","webpack://w-web-perm/./src/components/Layout.vue","webpack://w-web-perm/./src/components/LayoutContent.vue","webpack://w-web-perm/./src/components/LayoutContentTargets.vue","webpack://w-web-perm/./src/plugins/mShare.mjs","webpack://w-web-perm/src/components/LayoutContentTargets.vue","webpack://w-web-perm/./src/components/LayoutContentTargets.vue?7564","webpack://w-web-perm/./src/components/LayoutContentTargets.vue?1e0d","webpack://w-web-perm/./src/components/LayoutContentGroups.vue","webpack://w-web-perm/./src/components/ruleGroup.vue","webpack://w-web-perm/src/components/ruleGroup.vue","webpack://w-web-perm/./src/components/ruleGroup.vue?518e","webpack://w-web-perm/./src/components/ruleGroup.vue?35ac","webpack://w-web-perm/src/components/LayoutContentGroups.vue","webpack://w-web-perm/./src/components/LayoutContentGroups.vue?109f","webpack://w-web-perm/./src/components/LayoutContentGroups.vue?997e","webpack://w-web-perm/./src/components/LayoutContentUsers.vue","webpack://w-web-perm/src/components/LayoutContentUsers.vue","webpack://w-web-perm/./src/components/LayoutContentUsers.vue?409c","webpack://w-web-perm/./src/components/LayoutContentUsers.vue?9c9b","webpack://w-web-perm/src/components/LayoutContent.vue","webpack://w-web-perm/./src/components/LayoutContent.vue?5ffe","webpack://w-web-perm/./src/components/LayoutContent.vue?a8dd","webpack://w-web-perm/src/components/Layout.vue","webpack://w-web-perm/./src/components/Layout.vue?d215","webpack://w-web-perm/./src/components/Layout.vue?6d15","webpack://w-web-perm/./src/components/VeUser.vue","webpack://w-web-perm/src/components/VeUser.vue","webpack://w-web-perm/./src/components/VeUser.vue?b359","webpack://w-web-perm/./src/components/VeUser.vue?ebb2","webpack://w-web-perm/src/App.vue","webpack://w-web-perm/./src/App.vue?7e46","webpack://w-web-perm/./src/App.vue?0e40","webpack://w-web-perm/./src/store/types.mjs","webpack://w-web-perm/./src/schema/tables/ruleGroups.mjs","webpack://w-web-perm/./src/schema/tables/targets.mjs","webpack://w-web-perm/./src/schema/tables/users.mjs","webpack://w-web-perm/./src/schema/index.mjs","webpack://w-web-perm/./src/store/mutations.mjs","webpack://w-web-perm/./src/store/index.mjs","webpack://w-web-perm/./src/plugins/mVuetify.mjs","webpack://w-web-perm/./src/plugins/mUI.mjs","webpack://w-web-perm/./src/plugins/mDataSelectorSchema.mjs","webpack://w-web-perm/./src/plugins/mDataSupport.mjs","webpack://w-web-perm/./src/main.js","webpack://w-web-perm/webpack/bootstrap","webpack://w-web-perm/webpack/runtime/chunk loaded","webpack://w-web-perm/webpack/runtime/compat get default export","webpack://w-web-perm/webpack/runtime/define property getters","webpack://w-web-perm/webpack/runtime/global","webpack://w-web-perm/webpack/runtime/hasOwnProperty shorthand","webpack://w-web-perm/webpack/runtime/make namespace object","webpack://w-web-perm/webpack/runtime/node module decorator","webpack://w-web-perm/webpack/runtime/jsonp chunk loading","webpack://w-web-perm/webpack/startup"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-app',{directives:[{name:\"domresize\",rawName:\"v-domresize\"}],on:{\"domresize\":_vm.resize}},[(!_vm.ready)?_c('LayoutState',{style:(`opacity:${_vm.ready?0:1};`)}):_vm._e(),_c('transition',{attrs:{\"enter-active-class\":\"fade-enter-active\",\"leave-active-class\":\"fade-leave-active\"}},[(_vm.ready)?_c('Layout'):_vm._e()],1),_c('LoadingWinBar'),_c('CheckYesNo'),_c('CheckYes'),_c('VeUser')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('WDialog',{attrs:{\"show\":_vm.loading,\"maxWidth\":_vm.barWidth+_vm.barPadding*2},on:{\"update:show\":function($event){_vm.loading=$event}},scopedSlots:_vm._u([{key:\"panel\",fn:function(){return [_c('div',{style:(`padding:${_vm.barPadding-5}px ${_vm.barPadding}px ${_vm.barPadding}px ${_vm.barPadding}px;`)},[_c('div',{staticStyle:{\"padding-bottom\":\"3px\",\"font-size\":\"0.9rem\",\"color\":\"#666\"}},[(_vm.msg!=='')?_c('span',[_vm._v(_vm._s(_vm.msg))]):_c('span',[_vm._v(\"處理中請稍後...\")])]),_c('WProgressBar',{style:(`width:${_vm.barWidth}px;`),attrs:{\"height\":3,\"enableContinuous\":true,\"progColor\":'deep-purple lighten-1',\"progBackgroundColor\":'deep-purple lighten-4'}})],1)]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <WDialog\r\n :show.sync=\"loading\"\r\n :maxWidth=\"barWidth+barPadding*2\"\r\n >\r\n\r\n <template v-slot:panel>\r\n\r\n <div :style=\"`padding:${barPadding-5}px ${barPadding}px ${barPadding}px ${barPadding}px;`\">\r\n\r\n\r\n <div style=\"padding-bottom:3px; font-size:0.9rem; color:#666;\">\r\n\r\n <span v-if=\"msg!==''\">{{msg}}</span>\r\n\r\n <span v-else>處理中請稍後...</span>\r\n\r\n </div>\r\n\r\n <WProgressBar\r\n :style=\"`width:${barWidth}px;`\"\r\n :height=\"3\"\r\n :enableContinuous=\"true\"\r\n :progColor=\"'deep-purple lighten-1'\"\r\n :progBackgroundColor=\"'deep-purple lighten-4'\"\r\n ></WProgressBar>\r\n\r\n </div>\r\n\r\n </template>\r\n\r\n </WDialog>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport get from 'lodash/get'\r\nimport WDialog from 'w-component-vue/src/components/WDialog.vue'\r\nimport WProgressBar from 'w-component-vue/src/components/WProgressBar.vue'\r\n\r\n\r\nexport default {\r\n components: {\r\n WDialog,\r\n WProgressBar,\r\n },\r\n props: {\r\n },\r\n data: function() {\r\n return {\r\n barPadding: 20,\r\n barWidth: 600,\r\n msg: '',\r\n }\r\n },\r\n mounted: function() {\r\n //console.log('mounted')\r\n\r\n let vo = this\r\n\r\n //set\r\n Vue.prototype.$dg.setLoadingWinBarMessage = vo.setMessage\r\n\r\n },\r\n computed: {\r\n\r\n loading: function() {\r\n //console.log('computed loading')\r\n\r\n let vo = this\r\n\r\n return get(vo, `$store.state.loading`)\r\n },\r\n\r\n },\r\n methods: {\r\n\r\n setMessage: function(msg) {\r\n this.msg = msg\r\n },\r\n\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadingWinBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadingWinBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LoadingWinBar.vue?vue&type=template&id=503dc99a&scoped=true&\"\nimport script from \"./LoadingWinBar.vue?vue&type=script&lang=js&\"\nexport * from \"./LoadingWinBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"503dc99a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('WConfirm',{attrs:{\"show\":_vm.bShow,\"title\":'系統確認訊息',\"content\":_vm.content,\"_contentColor\":'white',\"_contentIconColor\":'white',\"_contentBackgroundColor\":'orange lighten-5',\"_titleColor\":'white',\"headerBackgroundColor\":'grey lighten-3',\"noBtnText\":'取消',\"yesBtnText\":'確定'},on:{\"update:show\":function($event){_vm.bShow=$event},\"click-no\":function($event){return _vm.clickBtn(false)},\"click-yes\":function($event){return _vm.clickBtn(true)}}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <WConfirm\r\n :show.sync=\"bShow\"\r\n :title=\"'系統確認訊息'\"\r\n :content=\"content\"\r\n :_contentColor=\"'white'\"\r\n :_contentIconColor=\"'white'\"\r\n :_contentBackgroundColor=\"'orange lighten-5'\"\r\n :_titleColor=\"'white'\"\r\n :headerBackgroundColor=\"'grey lighten-3'\"\r\n :noBtnText=\"'取消'\"\r\n :yesBtnText=\"'確定'\"\r\n @click-no=\"clickBtn(false)\"\r\n @click-yes=\"clickBtn(true)\"\r\n ></WConfirm>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport genPm from 'wsemi/src/genPm.mjs'\r\nimport WConfirm from 'w-component-vue/src/components/WConfirm.vue'\r\n\r\nexport default {\r\n components: {\r\n WConfirm,\r\n },\r\n props: {\r\n },\r\n data: function() {\r\n return {\r\n\r\n bShow: false,\r\n pm: null,\r\n\r\n content: '',\r\n\r\n }\r\n },\r\n mounted: function() {\r\n //console.log('mounted')\r\n\r\n let vo = this\r\n\r\n //set\r\n Vue.prototype.$dg.showCheckYesNo = vo.show\r\n\r\n },\r\n computed: {\r\n },\r\n methods: {\r\n\r\n show: function (content) {\r\n //console.log('methods show', content)\r\n\r\n let vo = this\r\n\r\n //pm\r\n vo.pm = genPm()\r\n\r\n //save\r\n vo.content = content\r\n\r\n //show\r\n vo.bShow = true\r\n\r\n return vo.pm\r\n },\r\n\r\n clickBtn: function(mode) {\r\n //console.log('methods clickBtn', mode)\r\n\r\n let vo = this\r\n\r\n if (mode) {\r\n vo.pm.resolve()\r\n }\r\n else {\r\n vo.pm.reject('close')\r\n }\r\n\r\n //hide\r\n vo.bShow = false\r\n\r\n },\r\n\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CheckYesNo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CheckYesNo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CheckYesNo.vue?vue&type=template&id=70990081&scoped=true&\"\nimport script from \"./CheckYesNo.vue?vue&type=script&lang=js&\"\nexport * from \"./CheckYesNo.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"70990081\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('WConfirm',{attrs:{\"show\":_vm.bShow,\"title\":'系統確認訊息',\"content\":_vm.content,\"_contentColor\":'white',\"_contentIconColor\":'white',\"_contentBackgroundColor\":'orange lighten-5',\"headerBackgroundColor\":'grey lighten-3',\"hasNoBtn\":false,\"yesBtnText\":'確認'},on:{\"update:show\":function($event){_vm.bShow=$event},\"click-yes\":function($event){return _vm.clickUnit()}}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <WConfirm\r\n :show.sync=\"bShow\"\r\n :title=\"'系統確認訊息'\"\r\n :content=\"content\"\r\n :_contentColor=\"'white'\"\r\n :_contentIconColor=\"'white'\"\r\n :_contentBackgroundColor=\"'orange lighten-5'\"\r\n :headerBackgroundColor=\"'grey lighten-3'\"\r\n :hasNoBtn=\"false\"\r\n :yesBtnText=\"'確認'\"\r\n @click-yes=\"clickUnit()\"\r\n ></WConfirm>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport genPm from 'wsemi/src/genPm.mjs'\r\nimport WConfirm from 'w-component-vue/src/components/WConfirm.vue'\r\n\r\nexport default {\r\n components: {\r\n WConfirm,\r\n },\r\n props: {\r\n },\r\n data: function() {\r\n return {\r\n\r\n bShow: false,\r\n pm: null,\r\n\r\n content: '',\r\n\r\n }\r\n },\r\n mounted: function() {\r\n //console.log('mounted')\r\n\r\n let vo = this\r\n\r\n //set\r\n Vue.prototype.$dg.showCheckYes = vo.show\r\n\r\n },\r\n computed: {\r\n },\r\n methods: {\r\n\r\n show: function (content) {\r\n //console.log('methods show', content)\r\n\r\n let vo = this\r\n\r\n //pm\r\n vo.pm = genPm()\r\n\r\n //save\r\n vo.content = content\r\n\r\n //show\r\n vo.bShow = true\r\n\r\n return vo.pm\r\n },\r\n\r\n clickUnit: function() {\r\n //console.log('methods clickUnit')\r\n\r\n let vo = this\r\n\r\n //resolve\r\n vo.pm.resolve()\r\n\r\n //hide\r\n vo.bShow = false\r\n\r\n },\r\n\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n</style>\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CheckYes.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CheckYes.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CheckYes.vue?vue&type=template&id=1d874a75&scoped=true&\"\nimport script from \"./CheckYes.vue?vue&type=script&lang=js&\"\nexport * from \"./CheckYes.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1d874a75\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{style:(`position:absolute; top:0px; left:0px; width:100%; height:100%; transition:all 0.5s linear; display:flex; align-items:center; justify-content:center;`)},[(_vm.connState==='已連線' || _vm.connState==='連線中...')?[_c('img',{staticStyle:{\"width\":\"100px\",\"height\":\"100px\"},attrs:{\"src\":_vm.img_connection}}),_c('div',{staticStyle:{\"margin-left\":\"10px\"}},[_c('div',{staticStyle:{\"color\":\"#aaa\"}},[_vm._v(\" \"+_vm._s(_vm.connState)+\" \")])])]:(_vm.connState==='已登出')?[_c('img',{staticStyle:{\"width\":\"75px\",\"height\":\"75px\"},attrs:{\"src\":_vm.img_logout}}),_c('div',{staticStyle:{\"margin-left\":\"10px\"}},[_c('div',{staticStyle:{\"color\":\"#aaa\"}},[_vm._v(\" \"+_vm._s(_vm.connState)+\" \")])])]:(_vm.connState==='無法連線')?[_c('img',{staticStyle:{\"width\":\"75px\",\"height\":\"75px\"},attrs:{\"src\":_vm.img_dissconnection}}),_c('div',{staticStyle:{\"margin-left\":\"10px\"}},[_c('div',{staticStyle:{\"color\":\"#aaa\"}},[_vm._v(\" \"+_vm._s(_vm.connState)+\" \")])])]:[_c('img',{staticStyle:{\"width\":\"75px\",\"height\":\"75px\"},attrs:{\"src\":_vm.img_deny}}),_c('div',{staticStyle:{\"margin-left\":\"10px\"}},[_c('div',{staticStyle:{\"color\":\"#aaa\"}},[_vm._v(\" \"+_vm._s(_vm.connState)+\" \")])])]],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div\r\n :style=\"`position:absolute; top:0px; left:0px; width:100%; height:100%; transition:all 0.5s linear; display:flex; align-items:center; justify-content:center;`\"\r\n >\r\n\r\n <template v-if=\"connState==='已連線' || connState==='連線中...'\">\r\n\r\n <img style=\"width:100px; height:100px;\" :src=\"img_connection\">\r\n\r\n <div style=\"margin-left:10px;\">\r\n <div style=\"color:#aaa;\">\r\n {{connState}}\r\n </div>\r\n </div>\r\n\r\n </template>\r\n\r\n <template v-else-if=\"connState==='已登出'\">\r\n\r\n <img style=\"width:75px; height:75px;\" :src=\"img_logout\">\r\n\r\n <div style=\"margin-left:10px;\">\r\n <div style=\"color:#aaa;\">\r\n {{connState}}\r\n </div>\r\n </div>\r\n\r\n </template>\r\n\r\n <template v-else-if=\"connState==='無法連線'\">\r\n\r\n <img style=\"width:75px; height:75px;\" :src=\"img_dissconnection\">\r\n\r\n <div style=\"margin-left:10px;\">\r\n <div style=\"color:#aaa;\">\r\n {{connState}}\r\n </div>\r\n </div>\r\n\r\n </template>\r\n\r\n <template v-else>\r\n\r\n <img style=\"width:75px; height:75px;\" :src=\"img_deny\">\r\n\r\n <div style=\"margin-left:10px;\">\r\n <div style=\"color:#aaa;\">\r\n {{connState}}\r\n </div>\r\n </div>\r\n\r\n </template>\r\n\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport get from 'lodash/get'\r\n\r\n\r\nexport default {\r\n components: {\r\n },\r\n props: {\r\n },\r\n data: function() {\r\n return {\r\n img_connection: `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTAwcHgiIGhlaWdodD0iMTAwcHgiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+DQo8Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSIxMy44MTkzIiBmaWxsPSJub25lIiBzdHJva2U9IiM1ZjJhNjIiIHN0cm9rZS13aWR0aD0iMiI+DQogIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InIiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjEuMjY1ODIyNzg0ODEwMTI2NHMiIHZhbHVlcz0iMDs0NCIga2V5VGltZXM9IjA7MSIga2V5U3BsaW5lcz0iMCAwLjIgMC44IDEiIGNhbGNNb2RlPSJzcGxpbmUiIGJlZ2luPSItMC42MzI5MTEzOTI0MDUwNjMycyI+PC9hbmltYXRlPg0KICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJvcGFjaXR5IiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgZHVyPSIxLjI2NTgyMjc4NDgxMDEyNjRzIiB2YWx1ZXM9IjE7MCIga2V5VGltZXM9IjA7MSIga2V5U3BsaW5lcz0iMC4yIDAgMC44IDEiIGNhbGNNb2RlPSJzcGxpbmUiIGJlZ2luPSItMC42MzI5MTEzOTI0MDUwNjMycyI+PC9hbmltYXRlPg0KPC9jaXJjbGU+DQo8Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSIzNS44MTY1IiBmaWxsPSJub25lIiBzdHJva2U9IiNhOTc2YzMiIHN0cm9rZS13aWR0aD0iMiI+DQogIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InIiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjEuMjY1ODIyNzg0ODEwMTI2NHMiIHZhbHVlcz0iMDs0NCIga2V5VGltZXM9IjA7MSIga2V5U3BsaW5lcz0iMCAwLjIgMC44IDEiIGNhbGNNb2RlPSJzcGxpbmUiPjwvYW5pbWF0ZT4NCiAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGR1cj0iMS4yNjU4MjI3ODQ4MTAxMjY0cyIgdmFsdWVzPSIxOzAiIGtleVRpbWVzPSIwOzEiIGtleVNwbGluZXM9IjAuMiAwIDAuOCAxIiBjYWxjTW9kZT0ic3BsaW5lIj48L2FuaW1hdGU+DQo8L2NpcmNsZT4NCjwvc3ZnPg==`,\r\n img_logout: `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QA/wD/AP+gvaeTAAAMtklEQVR4nO2bf5RU1ZHHP/fVawYQJygixhhDchAxCCLDLgF/ETWowKCGDOF30OFHBFH3rBqTGDMosmtUTmA1CwoGEGQQF5WB4EEgExRYBFyXAIIaURBjFEVg1gDT7373j+6B7hZ6uoeR/WPne847p0/Vu3Wr6v6ounVfQwMa0IAGNOD/L9z/RadtxqkgHvEQMAwAMeuUPfxsywJ3+GTrEp7sDgEU8aCJ21NIdxw8gzhw18nW5aTPgLa36DtOvAmYF1cCBI6VQCTHBW/9u3v3ZOoTnMzOAGIRD5qnkXlmvz3NrXp7mltl4mnzNLI4E062PvXugE6jdd6FIzWvwyh1yOS1H6lOgehv4qCDshp6zHGviS9CGNBhhIoy23UYpQ4XjtS8TqN1Xn3rW28OuPhmnd2pVE8QsTUUAyxiXOY7MfGwicBgypYn3M4a+n9PdbsNHjPhDB7JbGee20IxgIitnUZoWtEofb2+9K4XB3S5WX0D2GRipHkUep5QNeNT3+lcqmvNc7V59jbxPPQlIdX8i3k+NU+PopvVM5Wlw5SZZ4p5IvOMIs6mzqUqrg/dT2gTbDNOBS2q+I1gHOAQSyJx+8ZZ7i9pL5Yp+If3We+gsxx3rn/KPXoseV1v0p2Ch3Fseu1cLqbM+VR+t1K18Z4pgusASUzeeyr3vPNv7lBdbajzDOhWoiZnHqAiELeZiIdi/Gut6fsl44Hu7zE4FJ1N7A4P8LvjyayqYoqJd83Tsfv7DMrkr53h3ln3e3qbuMPE4RDuaHmARd1K1KSudtTJAT2H6pSgCYsDzw/M89cwzvfWzHRlmSN2pBPPXeYh8Pxy7QL39+PJ3bLAHTYx3jwEEXcf+y2ntTPd5CDiUvN8ZJ6e1oSKolFqWhdb8l4CRaMUO/XvLAN6ALvNceWK2e6tbG2uGKbdTpwNfA4oSW4CNM7SbHfl0+6cbHJ7DFc7eVY4cTaOFezk2spKF8/dmjrMgOZV/Kt5epjng+AwV2Qa/4NBOu+qwbovlRaLM8Y8u8zT3DynJZ/G5uE4z64wYmyqjKsG65EeQ9QmlVY5021rFKeHeT60iKvsG0zM1568ZkDPweqDWATE8fRYVu7WpPKvGaTrBbOBQhzFy+a6xVnlDZIAlj3jsupxzWANkpgL7EMMXTbPVaTJGaCuBKwCYnL0e3muez5Xm3KeAT2H6kzzPG3CBZ47M43vNVD9A/GciUITLzSN8WptMk2JpzYUFFBhotzE1wyev3aghqTyl5W7dYHnHhMu9My4rkQtc7UrZwcUJGJx8zBiyUvlbkoqr/cA9Q08z5gnDDz3L53nbnxhpvu8Npk1U742LHrKHVg6zw00McE8Fnpm9h6g3qnvvFTOb82z1DynWcB9x5OViZwcUNxP7QIx0kQ8UPruXNxP7cLEzLBAlC2Z736da+e5zoAaLC53vzK434SFnjk3/lhtj3KdAs8/mag28dPrS/TdXGTm5IBYwAQToYmpLy5wW2voJSWyWMAzJgoDz7xFz7rx2eRkIl8HALw4n7LA86yJ5s4zt6REVsNbtMBtNzHdRBiInAaiVgcM7KtW5ulrnsMFh9JPa84z1jwXm2dH/BAj8jMl9yWQDqfQUWqe983TBc8taeyIB8xTHYobSnLYC2p1gIyhoYgZLJ63yP2thl5SomYmfh0mRnFcRYX7Il9TQiWefLFggasycVuyfVlx8dEkaOFC91eDP4SikcUZkk0O5OAAg+EmMM/vU+mNIkaYON3EqvKFbkn+ZtRtCdSgfKFbZLDGRIvCGKWpvFA8ZYIQhtcmJ6sDbu6rs0NPe/Ps3b2Xl9I6iRhtHkL/5eNrrqjbEkjRwfOw+YQuqfQPPuMP5tlnno7De+msbDKyOkCO7slR+s/UFHPEjbrARDsTe1rvY2ldDTiRGQDQ+nMWm9hjov3wYrWroVdWurjBOhMEMbplk5HVAaHolpxKa1PprprrLLH+KsryzL0BRvdRt5HFer7GASOL9fzoPsqq6LFQVunigVhigkaJI3Kq7muTOtbdAebpZB5cnPVpdChKnu5qzfYyMbq3Sp1YZZ4bUnL/GxCvjO6t0tolpCMUq82D83ROpTvPa8lT5cXZ2tfmgJYmiMHuDHqHpHc35aPsmF7qFIqp5ghbXQ5tbkk8rS6H0GGhmDqmlzrlIzOI80ZSl44ZOn6YnGFZQ2HWewETLQDM+CyDfhbA4Yidx2p3PMTEREF4VndomVL6/FoRFETw0SuEDiYCvXIWGrAruY+cmaHjnuQJq0W25lkdEHpOB1CzdAeEnkIAGftyVhQwz6UA57SDWMbuX9AO9vwJIPFOzjLF3jAh67Q0HZvxqdsP6AQcYEoskVMgyqA7gMJm5LWHB8I5oGkEjaJ03qHoSETIOy4cK5LEq/CNE/Ssy7y2KFBlgn37aZbR4QETHPgkMRNyVtSz3gT7NkOzKP3Zv+VIWNyQj8xmUJhsdyAXeiaye8fzuXloHOeMDEM+NA9NHd/KR9mYmGQedqyBD1+D8ADY/sTvHasTESEQk/KRGR6mdTKSfJDGiGhhHkxkPZbX5oB3TVDgSStFheJNE7iAC/NRdsIKt9jEg0EEb70Ky5+EFdMTv4MIQjFh4vI802rRPhkFtqWSY3HOS86AL1WpU5E9DIptyVH5bgZ9XdLrV+SlLHD/Sndv4CkOI1aap8o8VWHEShN9xq90v8pXXpioT2JKT9ZCcYF5COJsz9o+GzMGGyVwcAkpV1YWZ7kCQPQq66Ew32ywrNItBrLWC3PBtCLFPlEiZAYRy1N5geey5M+se0r2GRBnZfK42+PZlMLDL19xm0KxNRStmvg8YnY9Y29TeoWiZSj+/ItXjhZqphUpForLQwHGymwysjrgnlfdTvO8aZ7mOz/i6lReKKYn0+GT/lFDDUzcnTyRzkil729KT/MUmmfzvSvd7uO1hxzqAYFnrgkCn/ycJYkmxpMmPjVx6aRL6+eiMh88eon6muhu4hM1ZXoqz8QQExjMrU1OrQ4ogDkmIhP9JnXTN2roYytdlXkeMIFFTH7oEp1aN1Pyx5SuKgzF5GShZvxdy9z/1PAevVzfNM8PTUQK6sEBt65x74ee58xT0MhzZypvbwGPm+d1E98+JeIJoa/8kxshFzieNE9r86z/+jlMTeUXHOau5Bco8/95ldtVm7ycqsJOTDQhg58+3u3o9VRZpYs7x49N7DcxYFpX7s/fpPww9XtMsMRXJgeCOEP7L3BHkurfddH55hllwhPldk2WkwPGrHObAs9ME41jEY+l8saude8EYpCJ6kDc+0RXPfBVzAQh9+Q/aoJ5fmGi2nn6j9ngtqfyQ+MxgwKDGbeud1tykZuzok9drJYytgGnA7eWbnCPp/G7aKBgFhATzHcFjCxd7bLm4bliTlcVHorzJI7+QLVg2IgNrjyt/yLdJsdkYE8Y0O4nr7lPc5Gd10jN6qIfIRYAh3zAZTetd+sz+NchyoFCYIcTtw97Pf0iM1/M7KK+TkwGWjvYF4kBN73u0gq0s4vUVSQuRxH9fvJ67pejeU/VOZ31GDAW+Nh5Lh38hns7lf90Z7UJYJ6gCwBiteA3XwQsHb3RVefSx7QixZpF9FLA3UD3JHl96Bg4YGP6FyizLlLbwHjVQUsHkwe/7u7Ix568HTCtSLHCiBdJFCHf89Az0wnPlsji7zDGifvgyEnyY2ApUIljswLeCw+yHyDemMIg4tuC9iQ+vOgFR0pZnwDj7Tympm54AOUXqa0cy4BvAUvOas4N388zLa/TZjW7o05pnOi4O/Cxd/QZ8Eb6cqh5r0nASIlSyO/kCPwZMeMgTB+26Wicr8FzHdXVOypIOGp1k5CexRvzv52q825dUaSmh6tZQGK0Dgl+1m8TUxzumBWd5y5Se8TVDroJzndwLhwptBwQ7HKw3cGauLG8/38dze0z8R8dNArHFKAAx8vhQfpdv71uG+4JhatpRYqdeZBJznFrkrTMIm4tfjN9SdQXXuyo8+V5DLgakGBK8zO4M99pn4p6idcV7fUjYBqJEHkImGrGI702uQ+yt8wNL1yobwZwlxOjgAJgD45RxZtz3+2Ph3pLWCra6gwLeQi4KSn3kMTCAOY0bsWyfEfpjz0UHvob1/iAIYgfAo0Aj5jRSPz86m25xfnaUO8Z28vt1EHwc6A/UFND2A/8SeIVHNvwvG0Bn3xmiYLl6RGnKuJMb7RxjgucuAy4QlBzwIoE8xUw8dqtuWV4ueIrO7y83F7nuoghzjMIR/s6itnsHM9UVzPnmr/UfrCpC07KHyb+2EbnBAFXCrrgOB/RmkR+UBMFqoA9TuxQwHbEhghWXvVW9mJGAxrQgAY0oAEnhv8FFfAtja8ymJEAAAAASUVORK5CYII=`,\r\n img_dissconnection: `data:image/png;base64,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`,\r\n img_deny: `data:image/png;base64,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`,\r\n }\r\n },\r\n computed: {\r\n\r\n connState: function() {\r\n //console.log('computed loading')\r\n\r\n let vo = this\r\n\r\n return get(vo, `$store.state.connState`)\r\n },\r\n\r\n },\r\n methods: {\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n</style>\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LayoutState.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LayoutState.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LayoutState.vue?vue&type=template&id=68a6c545&scoped=true&\"\nimport script from \"./LayoutState.vue?vue&type=script&lang=js&\"\nexport * from \"./LayoutState.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"68a6c545\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"height\":\"100vh\",\"background\":\"#f5f5f5\"}},[_c('div',{style:(`height:${_vm.heightToolbar}px; overflow-y:hidden; padding:0px 10px; background:#fff; border-bottom:1px solid #ccc; display:flex; align-items:center;`)},[(false)?_c('WButtonCircle',{attrs:{\"icon\":'mdi-menu',\"tooltip\":'左側選單',\"shadow\":false},on:{\"click\":function($event){_vm.drawer=!_vm.drawer}}}):_vm._e(),_c('div',{staticStyle:{\"padding-left\":\"5px\",\"white-space\":\"nowrap\"}},[_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\"}},[(_vm.webLogo)?_c('div',{staticStyle:{\"padding-right\":\"10px\",\"display\":\"flex\",\"align-items\":\"center\"}},[_c('img',{staticStyle:{\"width\":\"36px\",\"height\":\"36px\"},attrs:{\"src\":_vm.webLogo}})]):_vm._e(),_c('div',[_c('div',{staticStyle:{\"font-size\":\"1.2rem\",\"color\":\"#000\"}},[_vm._v(_vm._s(_vm.webName))]),_c('div',{staticStyle:{\"font-size\":\"0.8rem\",\"color\":\"#666\"}},[_vm._v(_vm._s(_vm.$t('webDescription')))])])])]),_c('div',{staticStyle:{\"width\":\"100%\"}}),_c('div',{staticStyle:{\"padding-right\":\"10px\",\"white-space\":\"nowrap\"}},[_c('WTextSelect',{staticStyle:{\"width\":\"100px\"},attrs:{\"items\":_vm.tgLangs},on:{\"input\":_vm.changeLang},model:{value:(_vm.tgLangSelect),callback:function ($$v) {_vm.tgLangSelect=$$v},expression:\"tgLangSelect\"}})],1)],1),_c('div',{style:(`height:calc( 100% - ${_vm.heightToolbar}px );`)},[_c('LayoutContent')],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"domresize\",rawName:\"v-domresize\"}],staticStyle:{\"height\":\"100%\",\"width\":\"100%\"},on:{\"domresize\":_vm.resize}},[(_vm.syncState)?[_c('WDrawer',{style:(`height:${_vm.panelHeight}px; width:100%;`),attrs:{\"drawerWidth\":_vm.drawerWidth,\"drawerWidthMin\":_vm.drawerWidthMin,\"drawerWidthMax\":_vm.drawerWidthMax,\"mode\":'from-left',\"afloat\":_vm.drawerAfloat,\"dragDrawerWidth\":true},on:{\"update:drawerWidth\":function($event){_vm.drawerWidth=$event},\"update:drawer-width\":function($event){_vm.drawerWidth=$event}},scopedSlots:_vm._u([{key:\"drawer\",fn:function(props){return [_c('div',{style:(`height:${_vm.panelHeight}px; background:#fff; position:relative;`)},[_c('WListVertical',{staticStyle:{\"height\":\"100%\"},attrs:{\"items\":_vm.menus,\"itemActive\":_vm.menuActive,\"item-text-color\":'#222',\"item-text-color-hover\":'#444',\"item-text-color-active\":'#EF6C00',\"item-icon-color\":'#222',\"item-icon-color-hover\":'#444',\"item-icon-color-active\":'#EF6C00',\"item-background-color\":'#fff',\"item-background-color-hover\":'#f2f2f2',\"item-background-color-active\":'#FFF3E0',\"paddingStyle\":{v:15,h:15}},on:{\"click\":(menu)=>{_vm.menuKey=menu.key}}}),(_vm.drawer)?_c('div',{style:(`position:absolute; top:1px; right:4px;`)},[_c('WButtonCircle',{attrs:{\"paddingStyle\":{v:3,h:3},\"icon\":'mdi-arrow-left',\"iconSize\":16,\"backgroundColor\":'#fff',\"backgroundColorHover\":'#eee',\"backgroundColorFocus\":'#fff',\"borderColor\":'transparent',\"borderColorHover\":'#eee',\"borderColorFocus\":'#eee',\"tooltip\":_vm.$t('menuTreeHide'),\"shadow\":true},on:{\"click\":function($event){_vm.drawer=false}}})],1):_vm._e()],1)]}},{key:\"content\",fn:function(props){return [_c('div',{style:(`height:${_vm.panelHeight}px; width:${props.width}px; position:relative;`)},[[(_vm.menuKey==='blocks')?_c('LayoutContentTargets'):_vm._e(),(_vm.menuKey==='groups')?_c('LayoutContentGroups'):_vm._e(),(_vm.menuKey==='users')?_c('LayoutContentUsers'):_vm._e()],(!_vm.drawer)?_c('div',{style:(`position:absolute; top:1px; left:4px;`)},[_c('WButtonCircle',{attrs:{\"paddingStyle\":{v:3,h:3},\"icon\":'mdi-arrow-right',\"iconSize\":16,\"backgroundColor\":'#fff',\"backgroundColorHover\":'#eee',\"backgroundColorFocus\":'#fff',\"borderColor\":'transparent',\"borderColorHover\":'#eee',\"borderColorFocus\":'#eee',\"tooltip\":_vm.$t('menuTreeShow'),\"shadow\":true},on:{\"click\":function($event){_vm.drawer=true}}})],1):_vm._e()],2)]}}],null,false,2737367644),model:{value:(_vm.drawer),callback:function ($$v) {_vm.drawer=$$v},expression:\"drawer\"}})]:[_c('div',{staticStyle:{\"padding\":\"20px\",\"font-size\":\"0.9rem\"}},[_vm._v(\" \"+_vm._s(_vm.$t('waitingData'))+\" \")])]],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"domresize\",rawName:\"v-domresize\"}],staticStyle:{\"height\":\"100%\"},attrs:{\"changeTargets\":_vm.changeTargets},on:{\"domresize\":_vm.resizePanel}},[_c('div',{directives:[{name:\"domresize\",rawName:\"v-domresize\"}],staticStyle:{\"border-bottom\":\"1px solid #ddd\"},on:{\"domresize\":_vm.resizeHead}},[_c('div',{staticStyle:{\"padding\":\"30px 25px 0px 20px\",\"background\":\"#fff\"}},[_c('div',{staticStyle:{\"padding\":\"5px 15px 5px 5px\",\"display\":\"inline-block\",\"border-bottom\":\"3px solid #FF9100\"}},[_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\"}},[_c('WIcon',{attrs:{\"icon\":_vm.mdiGamepadCircle,\"color\":'#FF9800'}}),_c('div',{staticStyle:{\"padding-left\":\"10px\",\"font-size\":\"1.3rem\",\"color\":\"#d3912c\"}},[_vm._v(\" 管理區塊 \")])],1)])]),_c('div',{staticStyle:{\"background\":\"#fff\"}},[_c('div',{staticStyle:{\"padding\":\"20px 20px 15px 20px\",\"background\":\"#fff\"}},[_c('div',{staticStyle:{\"display\":\"flex\"}},[_c('WSwitch',{attrs:{\"text\":'是否編輯',\"checkedSwitchCircleColor\":'#D81B60',\"checkedSwitchCircleColorHover\":'#f26',\"checkedSwitchBarColor\":'#F8BBD0',\"checkedSwitchBarColorHover\":'#F8BBD0',\"_v-model\":\"isOperatable\",\"value\":_vm.isOperatable},on:{\"input\":_vm.updateIsOperatable}})],1),(_vm.isOperatable)?_c('div',{staticStyle:{\"padding-top\":\"5px\",\"font-size\":\"0.8rem\",\"_color\":\"#f26\"}},[_c('div',{staticStyle:{\"padding\":\"3px 0px\"}},[_vm._v(\" 1. 請於各區塊右側點擊按鈕即可進行操作,例如變更名稱、插入或刪除區塊。 \")]),_c('div',{staticStyle:{\"padding\":\"3px 0px\"}},[_vm._v(\" 2. 編輯區塊時禁止顯隱子區塊功能。 \")])]):_vm._e()]),(_vm.isModified)?_c('div',{staticStyle:{\"padding\":\"10px 10px 12px 10px\",\"border-top\":\"1px solid #F48FB1\",\"border-bottom\":\"1px solid #F48FB1\",\"background\":\"#FCE4EC\",\"display\":\"flex\",\"align-items\":\"center\",\"justify-content\":\"flex-end\"}},[_c('WButtonChip',{attrs:{\"paddingStyle\":{v:0,h:11},\"text\":'儲存變更',\"icon\":_vm.mdiCloudUploadOutline,\"backgroundColor\":'rgba(255,0,50,0.7)',\"backgroundColorHover\":'rgba(255,0,50,0.8)',\"textColor\":'#eee',\"textColorHover\":'#fff',\"iconColor\":'#eee',\"iconColorHover\":'#fff'},on:{\"click\":_vm.saveRuleGroupsAndTargets}})],1):_vm._e()])]),(!_vm.firstLoading)?_c('div',{style:(`padding:${_vm.spacePading}px;`)},[_c('div',{staticStyle:{\"background\":\"#fff\",\"box-shadow\":\"0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12)\"}},[_c('WTree',{ref:\"wt\",attrs:{\"viewHeightMax\":_vm.treeHeight,\"separatorColor\":'rgba(0,0,0,0.1)',\"data\":_vm.treeBlocks,\"indent\":0.5,\"iconToggleColor\":'#666',\"iconToggleBackgroundColor\":'transparent',\"iconToggleBackgroundColorHover\":'transparent',\"operatable\":_vm.isOperatable,\"operateBtnTooltip\":'編輯',\"operateItemTextForRename\":'變更名稱',\"operateItemTextForInsertBefore\":'插入前區塊',\"operateItemTextForInsertChild\":'插入子區塊',\"operateItemTextForInsertAfter\":'插入後區塊',\"operateItemTextForDelete\":'刪除區塊',\"editorRenameSaveBtnText\":'儲存',\"editorRenameSaveBtnTextColor\":'#444',\"editorRenameSaveBtnTextColorHover\":'#222',\"editorRenameCancelBtnText\":'取消',\"editorRenameCancelBtnTextColor\":'#444',\"editorRenameCancelBtnTextColorHover\":'#222'},on:{\"update:data\":function($event){_vm.treeBlocks=$event},\"click-operate-item\":_vm.clickOperateItem}})],1)]):_c('div',{staticStyle:{\"padding\":\"10px 15px\",\"font-size\":\"0.8rem\"}},[_vm._v(\" 載入中... \")])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","//前後端共用函數區\r\n// import min from 'lodash/min'\r\n// import size from 'lodash/size'\r\n// import take from 'lodash/take'\r\n// import isEqual from 'lodash/isEqual'\r\nimport uniq from 'lodash/uniq'\r\n// import set from 'lodash/set'\r\nimport get from 'lodash/get'\r\nimport each from 'lodash/each'\r\nimport map from 'lodash/map'\r\nimport find from 'lodash/find'\r\nimport filter from 'lodash/filter'\r\n// import last from 'lodash/last'\r\n// import size from 'lodash/size'\r\nimport split from 'lodash/split'\r\nimport join from 'lodash/join'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport takeRight from 'lodash/takeRight'\r\nimport dropRight from 'lodash/dropRight'\r\nimport sortBy from 'lodash/sortBy'\r\nimport sep from 'wsemi/src/sep.mjs'\r\nimport isarr from 'wsemi/src/isarr.mjs'\r\nimport isstr from 'wsemi/src/isstr.mjs'\r\nimport iseobj from 'wsemi/src/iseobj.mjs'\r\nimport haskey from 'wsemi/src/haskey.mjs'\r\nimport composeToTree from 'wsemi/src/composeToTree.mjs'\r\n// import getFileAccept from 'wsemi/src/getFileAccept.mjs'\r\n\r\n\r\n// function atSep(attachmentsIds) {\r\n\r\n// //ts\r\n// let ts = sep(attachmentsIds, ';')\r\n\r\n// return ts\r\n// }\r\n\r\n\r\n// function atJoin(ts) {\r\n\r\n// //uniq\r\n// ts = uniq(ts)\r\n\r\n// //str\r\n// let str = join(ts, ';')\r\n\r\n// return str\r\n// }\r\n\r\n\r\n// function atParse(attachmentsIds) {\r\n\r\n// //ts\r\n// let ts = atSep(attachmentsIds)\r\n\r\n// //ids\r\n// let ids = map(ts, (v) => {\r\n// let s = sep(v, '@')\r\n// let table = get(s, 0, '')\r\n// let id = get(s, 1, '')\r\n// if (table === '') {\r\n// console.log('atParse: invalid table in attachmentsIds', attachmentsIds)\r\n// }\r\n// if (id === '') {\r\n// console.log('atParse: invalid id in attachmentsIds', attachmentsIds)\r\n// }\r\n// return {\r\n// table,\r\n// id,\r\n// }\r\n// })\r\n\r\n// return ids\r\n// }\r\n\r\n\r\n// function atRemove(inp, removeId, opt = {}) {\r\n\r\n// //removeId\r\n// if (!isstr(removeId)) {\r\n// removeId = ''\r\n// }\r\n// if (removeId.indexOf('@') >= 0) {\r\n// removeId = split(removeId, '@')[1] //取後面id\r\n// }\r\n\r\n// //ids\r\n// let ids = []\r\n// let returnTypeTemp = ''\r\n// if (isarr(inp)) {\r\n// ids = inp\r\n// returnTypeTemp = 'array'\r\n// }\r\n// else if (isstr(inp)) {\r\n// ids = atParse(inp)\r\n// returnTypeTemp = 'string'\r\n// }\r\n\r\n// //returnType\r\n// let returnType = get(opt, 'returnType', null)\r\n// if (returnType !== 'array' && returnType !== 'string') {\r\n// returnType = returnTypeTemp\r\n// }\r\n\r\n\r\n// //filter\r\n// ids = filter(ids, (v) => {\r\n// return v.id !== removeId\r\n// })\r\n\r\n// if (returnType === 'array') {\r\n// return ids\r\n// }\r\n// return atMerge(ids)\r\n// }\r\n\r\n\r\n// function atMerge(ids) {\r\n\r\n// //ts\r\n// let ts = map(ids, (v) => {\r\n// let table = get(v, 'table', '')\r\n// let id = get(v, 'id', '')\r\n// if (table === '') {\r\n// console.log('atMerge: invalid table in ids', ids)\r\n// }\r\n// if (id === '') {\r\n// console.log('atMerge: invalid id in ids', ids)\r\n// }\r\n// return `${table}@${id}`\r\n// })\r\n\r\n// return atJoin(ts)\r\n// }\r\n\r\n\r\n// function isNumOrEng(str) {\r\n// let regExp = /^[\\d|a-zA-Z]+$/\r\n// if (regExp.test(str)) {\r\n// return true\r\n// }\r\n// else {\r\n// return false\r\n// }\r\n// }\r\n\r\n\r\n// function extractFileType(fileName, fileType) {\r\n// let r = ''\r\n\r\n// //find\r\n// let ar = getFileAccept()\r\n// for (let i = 0; i < ar.length; i++) {\r\n// if (ar[i].acp === fileType) {\r\n// return ar[i].name\r\n// }\r\n// }\r\n\r\n// //from name ext\r\n// let s = split(fileName, '.')\r\n// if (size(s) > 1) {\r\n// return last(s)\r\n// }\r\n\r\n// return r\r\n// }\r\n\r\n\r\nfunction getAllBlocks(targets) {\r\n\r\n //rs\r\n let rs = map(targets, (v) => {\r\n\r\n //text, parentId\r\n let s = sep(v.id, '.')\r\n let text = get(takeRight(s), 0) //取最後節點\r\n s = dropRight(s, 1)\r\n let parentId = join(s, '.') //取父節點\r\n\r\n return {\r\n ...v,\r\n idTemp: v.id,\r\n parentId,\r\n text,\r\n }\r\n })\r\n\r\n //sortBy\r\n rs = sortBy(rs, 'order')\r\n\r\n return rs\r\n}\r\n\r\n\r\nfunction getTreeBlocks(targets) {\r\n\r\n //getAllBlocks\r\n let blocks = getAllBlocks(targets)\r\n\r\n //opt\r\n let opt = {\r\n bindKey: 'id',\r\n bindParent: 'parentId',\r\n bindChildren: 'children',\r\n saveExtProps: true,\r\n }\r\n\r\n //composeToTree\r\n let r\r\n try {\r\n r = composeToTree(blocks, opt)\r\n }\r\n catch (err) {\r\n console.log(err)\r\n }\r\n // console.log('treeBlocks', cloneDeep(r))\r\n\r\n return r\r\n}\r\n\r\n\r\nfunction getUserGroups(user, ruleGroups) {\r\n\r\n //userGroups\r\n let ruleGroupsIds = get(user, 'ruleGroupsIds', '')\r\n\r\n //sep\r\n let s = sep(ruleGroupsIds, ';')\r\n\r\n //gs\r\n let gs = []\r\n each(s, (id) => {\r\n let g = find(ruleGroups, { id })\r\n if (iseobj(g)) {\r\n gs.push(g)\r\n }\r\n })\r\n\r\n //add rules\r\n gs = map(gs, (g) => {\r\n let rules = JSON.parse(g.crules)\r\n g.rules = rules\r\n return g\r\n })\r\n\r\n return gs\r\n}\r\n\r\n\r\nfunction getTargetsByGroup(targets, group) {\r\n\r\n //cloneDeep\r\n targets = cloneDeep(targets)\r\n\r\n //sortBy\r\n targets = sortBy(targets, 'order')\r\n\r\n //cloneDeep\r\n group = cloneDeep(group)\r\n\r\n //rules\r\n let rules = JSON.parse(group.crules)\r\n\r\n //rulesDisplay\r\n let rulesDisplay = {}\r\n let ks = ['show', 'active']\r\n each(ks, (k) => {\r\n\r\n //___all___\r\n let def = get(rules, `___all___.${k}`)\r\n def = (def === 'y') ? 'y' : 'n'\r\n\r\n //other props\r\n each(targets, (v) => {\r\n\r\n //krule\r\n let krule = v.id\r\n\r\n //check\r\n if (!rulesDisplay[krule]) {\r\n rulesDisplay[krule] = {}\r\n }\r\n\r\n //rule\r\n let rule = rules[krule]\r\n\r\n //r\r\n let r = null\r\n\r\n //b\r\n let b = get(rule, `${k}`)\r\n if (b === 'y' || b === 'n') {\r\n r = b\r\n }\r\n else {\r\n r = def\r\n }\r\n\r\n //save\r\n rulesDisplay[krule][k] = r //因krule內含有「.」故不能用set\r\n\r\n })\r\n\r\n })\r\n // console.log('rulesDisplay', rulesDisplay)\r\n\r\n return rulesDisplay\r\n}\r\n\r\n\r\nfunction getUserRules(user, ruleGroups, targets) {\r\n\r\n //getUserGroups\r\n let gs = getUserGroups(user, ruleGroups)\r\n // console.log('gs', gs)\r\n\r\n //getTargetsByGroup\r\n let rulesDisplay = {}\r\n each(gs, (g) => {\r\n let r = getTargetsByGroup(targets, g)\r\n each(r, (v, k) => {\r\n\r\n //check\r\n if (!haskey(rulesDisplay, k)) {\r\n rulesDisplay[k] = {}\r\n }\r\n\r\n //merge\r\n let ks = ['show', 'active']\r\n each(ks, (kk) => {\r\n let bOld = rulesDisplay[k][kk]\r\n let bNew = r[k][kk]\r\n if (bOld === 'y') {\r\n //不用覆寫\r\n }\r\n else {\r\n //需覆寫\r\n if (bNew === 'y') {\r\n rulesDisplay[k][kk] = 'y'\r\n }\r\n else {\r\n rulesDisplay[k][kk] = 'n'\r\n }\r\n }\r\n })\r\n\r\n })\r\n })\r\n // console.log('rulesDisplay', rulesDisplay)\r\n\r\n return rulesDisplay\r\n}\r\n\r\n\r\nexport {\r\n // atSep,\r\n // atJoin,\r\n // atParse,\r\n // atMerge,\r\n // atRemove,\r\n // getAllBlocks,\r\n getTreeBlocks,\r\n // getUserGroups,\r\n // getTargetsByGroup,\r\n getUserRules\r\n}\r\n","<template>\r\n <div\r\n style=\"height:100%;\"\r\n v-domresize\r\n @domresize=\"resizePanel\"\r\n :changeTargets=\"changeTargets\"\r\n >\r\n\r\n <div\r\n style=\"border-bottom:1px solid #ddd;\"\r\n v-domresize\r\n @domresize=\"resizeHead\"\r\n >\r\n\r\n <!-- 標題區 -->\r\n <div style=\"padding:30px 25px 0px 20px; background:#fff;\">\r\n <div style=\"padding:5px 15px 5px 5px; display:inline-block; border-bottom:3px solid #FF9100;\">\r\n <div style=\"display:flex; align-items:center;\">\r\n\r\n <WIcon\r\n :icon=\"mdiGamepadCircle\"\r\n :color=\"'#FF9800'\"\r\n ></WIcon>\r\n\r\n <div style=\"padding-left:10px; font-size:1.3rem; color:#d3912c;\">\r\n 管理區塊\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- 編輯設定區 -->\r\n <div style=\"background:#fff;\">\r\n\r\n <div style=\"padding:20px 20px 15px 20px; background:#fff;\">\r\n\r\n <div style=\"display:flex;\">\r\n <WSwitch\r\n :text=\"'是否編輯'\"\r\n :checkedSwitchCircleColor=\"'#D81B60'\"\r\n :checkedSwitchCircleColorHover=\"'#f26'\"\r\n :checkedSwitchBarColor=\"'#F8BBD0'\"\r\n :checkedSwitchBarColorHover=\"'#F8BBD0'\"\r\n _v-model=\"isOperatable\"\r\n :value=\"isOperatable\"\r\n @input=\"updateIsOperatable\"\r\n ></WSwitch>\r\n </div>\r\n\r\n <div style=\"padding-top:5px; font-size:0.8rem; _color:#f26;\" v-if=\"isOperatable\">\r\n <div style=\"padding:3px 0px;\">\r\n 1. 請於各區塊右側點擊按鈕即可進行操作,例如變更名稱、插入或刪除區塊。\r\n </div>\r\n <div style=\"padding:3px 0px;\">\r\n 2. 編輯區塊時禁止顯隱子區塊功能。\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div\r\n style=\"padding:10px 10px 12px 10px; border-top:1px solid #F48FB1; border-bottom:1px solid #F48FB1; background:#FCE4EC; display:flex; align-items:center; justify-content:flex-end;\"\r\n v-if=\"isModified\"\r\n >\r\n\r\n <WButtonChip\r\n :paddingStyle=\"{v:0,h:11}\"\r\n :text=\"'儲存變更'\"\r\n :icon=\"mdiCloudUploadOutline\"\r\n :backgroundColor=\"'rgba(255,0,50,0.7)'\"\r\n :backgroundColorHover=\"'rgba(255,0,50,0.8)'\"\r\n :textColor=\"'#eee'\"\r\n :textColorHover=\"'#fff'\"\r\n :iconColor=\"'#eee'\"\r\n :iconColorHover=\"'#fff'\"\r\n @click=\"saveRuleGroupsAndTargets\"\r\n ></WButtonChip>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div :style=\"`padding:${spacePading}px;`\" v-if=\"!firstLoading\">\r\n\r\n <div style=\"background:#fff; box-shadow:0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12);\">\r\n <WTree\r\n ref=\"wt\"\r\n :viewHeightMax=\"treeHeight\"\r\n :separatorColor=\"'rgba(0,0,0,0.1)'\"\r\n :data.sync=\"treeBlocks\"\r\n :indent=\"0.5\"\r\n :iconToggleColor=\"'#666'\"\r\n :iconToggleBackgroundColor=\"'transparent'\"\r\n :iconToggleBackgroundColorHover=\"'transparent'\"\r\n :operatable=\"isOperatable\"\r\n :operateBtnTooltip=\"'編輯'\"\r\n :operateItemTextForRename=\"'變更名稱'\"\r\n :operateItemTextForInsertBefore=\"'插入前區塊'\"\r\n :operateItemTextForInsertChild=\"'插入子區塊'\"\r\n :operateItemTextForInsertAfter=\"'插入後區塊'\"\r\n :operateItemTextForDelete=\"'刪除區塊'\"\r\n :editorRenameSaveBtnText=\"'儲存'\"\r\n :editorRenameSaveBtnTextColor=\"'#444'\"\r\n :editorRenameSaveBtnTextColorHover=\"'#222'\"\r\n :editorRenameCancelBtnText=\"'取消'\"\r\n :editorRenameCancelBtnTextColor=\"'#444'\"\r\n :editorRenameCancelBtnTextColorHover=\"'#222'\"\r\n @click-operate-item=\"clickOperateItem\"\r\n ></WTree>\r\n </div>\r\n\r\n </div>\r\n\r\n <div style=\"padding:10px 15px; font-size:0.8rem;\" v-else>\r\n 載入中...\r\n </div>\r\n\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mdiGamepadCircle, mdiStackOverflow, mdiAccountGroupOutline, mdiBallotRecountOutline, mdiCloudUploadOutline } from '@mdi/js/mdi.js'\r\nimport get from 'lodash/get'\r\nimport set from 'lodash/set'\r\nimport each from 'lodash/each'\r\nimport map from 'lodash/map'\r\nimport size from 'lodash/size'\r\nimport dropRight from 'lodash/dropRight'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport haskey from 'wsemi/src/haskey.mjs'\r\nimport genID from 'wsemi/src/genID.mjs'\r\nimport delay from 'wsemi/src/delay.mjs'\r\nimport flattenTree from 'wsemi/src/flattenTree.mjs'\r\nimport WIcon from 'w-component-vue/src/components/WIcon.vue'\r\nimport WButtonChip from 'w-component-vue/src/components/WButtonChip.vue'\r\nimport WSwitch from 'w-component-vue/src/components/WSwitch.vue'\r\nimport WTree from 'w-component-vue/src/components/WTree.vue'\r\nimport { getTreeBlocks } from '../plugins/mShare.mjs'\r\n\r\n\r\nexport default {\r\n components: {\r\n WIcon,\r\n WButtonChip,\r\n WSwitch,\r\n WTree,\r\n },\r\n props: {\r\n },\r\n data: function() {\r\n return {\r\n mdiGamepadCircle,\r\n mdiStackOverflow,\r\n mdiAccountGroupOutline,\r\n mdiBallotRecountOutline,\r\n mdiCloudUploadOutline,\r\n\r\n panelWidth: 100,\r\n panelHeight: 100,\r\n headHeight: 100,\r\n\r\n firstLoading: true,\r\n isOperatable: false,\r\n isModified: false,\r\n\r\n treeBlocks: null,\r\n listRename: [],\r\n\r\n }\r\n },\r\n mounted: function() {\r\n // console.log('mounted')\r\n\r\n let vo = this\r\n\r\n //clear\r\n vo.listRename = []\r\n\r\n },\r\n computed: {\r\n\r\n targets: function() {\r\n return get(this, `$store.state.targets`)\r\n },\r\n\r\n ruleGroups: function() {\r\n return get(this, `$store.state.ruleGroups`)\r\n },\r\n\r\n changeTargets: function() {\r\n // console.log('computed changeTargets')\r\n\r\n let vo = this\r\n\r\n //check\r\n if (size(vo.targets) === 0) {\r\n return ''\r\n }\r\n\r\n //getTreeBlocks\r\n let treeBlocks = getTreeBlocks(vo.targets)\r\n\r\n //save\r\n vo.treeBlocks = treeBlocks\r\n\r\n //firstLoading\r\n vo.firstLoading = false\r\n\r\n return ''\r\n },\r\n\r\n spacePading: function() {\r\n let vo = this\r\n if (vo.panelWidth < 400) {\r\n return 0\r\n }\r\n else if (vo.panelWidth < 800) {\r\n return 10\r\n }\r\n return 20\r\n },\r\n\r\n treeHeight: function() {\r\n let vo = this\r\n\r\n //h\r\n let h = vo.panelHeight - vo.headHeight - 2 * vo.spacePading\r\n h = Math.max(h, 0)\r\n\r\n return h\r\n },\r\n\r\n },\r\n methods: {\r\n\r\n resizePanel: function(msg) {\r\n // console.log('methods resizePanel', msg)\r\n\r\n let vo = this\r\n\r\n //panelWidth, panelHeight\r\n vo.panelWidth = msg.snew.offsetWidth\r\n vo.panelHeight = msg.snew.offsetHeight\r\n\r\n },\r\n\r\n resizeHead: function(msg) {\r\n // console.log('methods resizeHead', msg)\r\n\r\n let vo = this\r\n\r\n //headHeight\r\n vo.headHeight = msg.snew.offsetHeight\r\n\r\n },\r\n\r\n updateIsOperatable: function(isOperatable) {\r\n // console.log('methods updateIsOperatable', isOperatable)\r\n\r\n let vo = this\r\n\r\n async function core() {\r\n // let errTemp = null\r\n\r\n //show loading\r\n vo.$ui.updateLoading(true)\r\n\r\n //isOperatable\r\n if (isOperatable) {\r\n //切換至編輯模式時\r\n try {\r\n\r\n //先顯示全部節點\r\n let toUnfolding = true\r\n let toLevel = null\r\n vo.$refs.wt.toggleItemsAll(toUnfolding, toLevel)\r\n\r\n //若節點多顯示全部節點須一些時間, 故延遲變更\r\n await delay(300)\r\n\r\n //update\r\n vo.isOperatable = isOperatable\r\n\r\n\r\n }\r\n catch (err) {}\r\n }\r\n else {\r\n //切換至顯示模式時\r\n\r\n //update\r\n vo.isOperatable = isOperatable\r\n\r\n }\r\n\r\n }\r\n\r\n //core\r\n core()\r\n // .then((res) => {\r\n // console.log('then', res)\r\n // })\r\n .catch((err) => {\r\n console.log('catch', err)\r\n vo.$alert(`發生非預期錯誤,請洽管理員`, { type: 'error' })\r\n })\r\n .finally(() => {\r\n\r\n //hide loading\r\n vo.$ui.updateLoading(false)\r\n\r\n })\r\n\r\n },\r\n\r\n clickOperateItem: function(msg) {\r\n // console.log('methods clickOperateItem', msg)\r\n\r\n let vo = this\r\n\r\n async function core() {\r\n\r\n //fun, 僅處理並回傳新項目, 不處理其他項目\r\n let fun = async function() {\r\n let id = genID()\r\n let text = '新區塊'\r\n let dataNew = {\r\n id,\r\n text,\r\n }\r\n return dataNew\r\n }\r\n\r\n //targetInd\r\n let targetInd = msg.rowItem.index\r\n\r\n //operateItem\r\n await msg.operateItem(targetInd, msg.opItem.key, fun)\r\n\r\n //modifyTreeBlocks\r\n vo.modifyTreeBlocks()\r\n\r\n }\r\n\r\n //core\r\n core()\r\n // .then((res) => {\r\n // console.log('then', res)\r\n // })\r\n .catch((err) => {\r\n console.log('catch', err)\r\n vo.$alert(`發生非預期錯誤,請洽管理員`, { type: 'error' })\r\n })\r\n\r\n },\r\n\r\n modifyTreeBlocks: function() {\r\n // console.log('methods modifyTreeBlocks')\r\n\r\n let vo = this\r\n\r\n //treeBlocksTemp\r\n let treeBlocksTemp = cloneDeep(vo.treeBlocks)\r\n\r\n //flattenTree\r\n let blocksNew = flattenTree(treeBlocksTemp)\r\n // console.log('blocksNew', cloneDeep(blocksNew))\r\n\r\n //calc id, parentId, order\r\n each(blocksNew, (v, k) => {\r\n if (size(v.nk) === 1) {\r\n v.parentId = ''\r\n v.id = v.text\r\n }\r\n else { //size(v.nk)>=3\r\n let nkParent = dropRight(v.nk, 2)\r\n let p = get(treeBlocksTemp, nkParent)\r\n v.parentId = p.id\r\n v.id = `${v.parentId}.${v.text}`\r\n }\r\n v.order = k //需重新給予order\r\n set(treeBlocksTemp, v.nk, v)\r\n })\r\n\r\n //save\r\n vo.treeBlocks = treeBlocksTemp\r\n // console.log('treeBlocks', cloneDeep(treeBlocksTemp))\r\n\r\n //isModified\r\n vo.isModified = true\r\n\r\n },\r\n\r\n saveRuleGroupsAndTargets: function() {\r\n // console.log('method saveRuleGroupsAndTargets')\r\n\r\n let vo = this\r\n\r\n //replaceObjKeys\r\n let replaceObjKeys = (obj, kpKeys) => {\r\n // console.log('methods replaceObjKeys', obj, kpKeys)\r\n\r\n //r\r\n let b = false\r\n let r = {}\r\n each(obj, (v, k) => {\r\n if (haskey(kpKeys, k)) {\r\n b = true\r\n let kk = kpKeys[k]\r\n r[kk] = v\r\n }\r\n else {\r\n r[k] = v\r\n }\r\n })\r\n\r\n return {\r\n obj: r,\r\n isChanged: b,\r\n }\r\n }\r\n\r\n async function core() {\r\n let errTemp = null\r\n\r\n //show loading\r\n vo.$ui.updateLoading(true)\r\n\r\n //treeBlocksTemp\r\n let treeBlocksTemp = cloneDeep(vo.treeBlocks)\r\n\r\n //flattenTree\r\n let blocksNew = flattenTree(treeBlocksTemp)\r\n // console.log('blocksNew1', cloneDeep(blocksNew))\r\n\r\n //kpDiffs\r\n let kpDiffs = {}\r\n map(blocksNew, (v, k) => {\r\n if (v.id !== v.idTemp) {\r\n kpDiffs[v.idTemp] = v.id\r\n }\r\n })\r\n // console.log('kpDiffs', kpDiffs)\r\n\r\n //gs\r\n let gs = []\r\n each(vo.ruleGroups, (v) => {\r\n let rules = JSON.parse(v.crules)\r\n let r = replaceObjKeys(rules, kpDiffs)\r\n if (r.isChanged) {\r\n gs.push({\r\n id: v.id,\r\n crules: JSON.stringify(r.obj),\r\n })\r\n }\r\n })\r\n // console.log('ruleGroups', vo.ruleGroups, gs)\r\n\r\n //save\r\n await vo.$fapi.ruleGroups.save(gs)\r\n .catch((err) => {\r\n errTemp = err\r\n })\r\n\r\n //check\r\n if (errTemp !== null) {\r\n vo.$alert(`連動變更權限群組失敗: ${errTemp}`, { type: 'error' })\r\n return\r\n }\r\n\r\n //rs\r\n let rs = map(blocksNew, (v, k) => {\r\n return {\r\n id: v.id,\r\n order: v.order,\r\n }\r\n })\r\n // console.log('targets rs', rs)\r\n\r\n //delAll\r\n await vo.$fapi.targets.delAll()\r\n .catch((err) => {\r\n errTemp = err\r\n })\r\n\r\n //check\r\n if (errTemp !== null) {\r\n vo.$alert(`清除既有區塊數據失敗: ${errTemp}`, { type: 'error' })\r\n return\r\n }\r\n\r\n //save\r\n await vo.$fapi.targets.save(rs)\r\n .catch((err) => {\r\n errTemp = err\r\n })\r\n\r\n //check\r\n if (errTemp !== null) {\r\n vo.$alert(`儲存區塊數據失敗: ${errTemp}`, { type: 'error' })\r\n return\r\n }\r\n\r\n //isModified\r\n vo.isModified = false\r\n\r\n //alert\r\n vo.$alert(`儲存區塊數據成功`)\r\n\r\n }\r\n\r\n //core\r\n core()\r\n // .then((res) => {\r\n // console.log('then', res)\r\n // })\r\n .catch((err) => {\r\n console.log('catch', err)\r\n vo.$alert(`發生非預期錯誤,請洽管理員`, { type: 'error' })\r\n })\r\n .finally(() => {\r\n\r\n //hide loading\r\n vo.$ui.updateLoading(false)\r\n\r\n })\r\n\r\n },\r\n\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n</style>\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LayoutContentTargets.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LayoutContentTargets.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LayoutContentTargets.vue?vue&type=template&id=22fae1b7&scoped=true&\"\nimport script from \"./LayoutContentTargets.vue?vue&type=script&lang=js&\"\nexport * from \"./LayoutContentTargets.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"22fae1b7\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"domresize\",rawName:\"v-domresize\"}],staticStyle:{\"height\":\"100%\"},attrs:{\"changeGroups\":_vm.changeGroups},on:{\"domresize\":_vm.resizePanel}},[_c('div',{directives:[{name:\"domresize\",rawName:\"v-domresize\"}],staticStyle:{\"border-bottom\":\"1px solid #ddd\"},on:{\"domresize\":_vm.resizeHead}},[_c('div',{staticStyle:{\"padding\":\"30px 25px 0px 20px\",\"background\":\"#fff\"}},[_c('div',{staticStyle:{\"padding\":\"5px 15px 5px 5px\",\"display\":\"inline-block\",\"border-bottom\":\"3px solid #FF9100\"}},[_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\"}},[_c('WIcon',{attrs:{\"icon\":_vm.mdiStackOverflow,\"color\":'#FF9800'}}),_c('div',{staticStyle:{\"padding-left\":\"10px\",\"font-size\":\"1.3rem\",\"color\":\"#d3912c\"}},[_vm._v(\" 管理權限群組 \")])],1)])]),_c('div',{staticStyle:{\"background\":\"#fff\"}},[_c('div',{staticStyle:{\"padding\":\"20px 20px 15px 20px\",\"background\":\"#fff\"}},[_c('div',{staticStyle:{\"display\":\"flex\"}},[_c('WSwitch',{attrs:{\"text\":'是否編輯',\"checkedSwitchCircleColor\":'#D81B60',\"checkedSwitchCircleColorHover\":'#f26',\"checkedSwitchBarColor\":'#F8BBD0',\"checkedSwitchBarColorHover\":'#F8BBD0'},model:{value:(_vm.isOperatable),callback:function ($$v) {_vm.isOperatable=$$v},expression:\"isOperatable\"}})],1),(_vm.isOperatable)?_c('div',{staticStyle:{\"padding-top\":\"5px\",\"font-size\":\"0.8rem\",\"_color\":\"#f26\"}},[_c('div',{staticStyle:{\"padding\":\"3px 0px\"}},[_vm._v(\" 1. 請依照系統管理需求創建適合各類使用者適合的權限群組。 \")]),_c('div',{staticStyle:{\"padding\":\"3px 0px\"}},[_vm._v(\" 2. 開啟編輯時可拖曳權限群組變更其相對順序。 \")]),_c('div',{staticStyle:{\"padding\":\"3px 0px\"}},[_vm._v(\" 3. 此區域變更時將自動儲存。 \")])]):_vm._e()]),(_vm.isModified)?_c('div',{staticStyle:{\"padding\":\"10px 10px 12px 10px\",\"border-top\":\"1px solid #F48FB1\",\"border-bottom\":\"1px solid #F48FB1\",\"background\":\"#FCE4EC\",\"display\":\"flex\",\"align-items\":\"center\",\"justify-content\":\"flex-end\"}},[_c('WButtonChip',{attrs:{\"paddingStyle\":{v:0,h:11},\"text\":'儲存變更',\"icon\":_vm.mdiCloudUploadOutline,\"backgroundColor\":'rgba(255,0,50,0.7)',\"backgroundColorHover\":'rgba(255,0,50,0.8)',\"textColor\":'#eee',\"textColorHover\":'#fff',\"iconColor\":'#eee',\"iconColorHover\":'#fff'},on:{\"click\":_vm.saveGroups}})],1):_vm._e()])]),(!_vm.firstLoading)?_c('div',{style:(`padding:${_vm.spacePading}px;`)},[_c('div',{staticStyle:{\"background\":\"#fff\",\"box-shadow\":\"0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12)\"}},[_c('div',{directives:[{name:\"domresize\",rawName:\"v-domresize\"}],on:{\"domresize\":_vm.resizeGroupInfor}},[_c('div',{staticStyle:{\"padding\":\"10px 20px\",\"border-bottom\":\"3px solid #ddd\"}},[_c('WGroupTags',{attrs:{\"keyText\":'name',\"draggable\":_vm.isOperatable,\"editableClose\":_vm.isOperatable,\"editableInput\":_vm.isOperatable,\"addButtonText\":'新增群組',\"addButtonTooltip\":'新增權限群組',\"addButtonTextColor\":'#eee',\"addButtonTextColorHover\":'#fff',\"addButtonIconColor\":'#eee',\"addButtonIconColorHover\":'#fff',\"addButtonBackgroundColor\":'rgba(255,0,50,0.7)',\"addButtonBackgroundColorHover\":'rgba(255,0,50,0.8)',\"value\":_vm.groupsTrans},on:{\"input\":_vm.dragGroupsOrder,\"click\":_vm.clickGroup,\"click-add\":_vm.clickAddGroup,\"click-close\":_vm.clickRemoveGroup}})],1)]),(_vm.pickGroup)?_c('ruleGroup',{attrs:{\"height\":_vm.ruleGroupHeight,\"group\":_vm.pickGroup,\"editable\":_vm.isOperatable},on:{\"update\":_vm.modifyGroup}}):_c('div',{staticStyle:{\"padding\":\"20px\",\"_color\":\"#666\",\"font-size\":\"0.85rem\"}},[_vm._v(\" 未選擇權限群組,請點擇上方任一權限群組以顯示管理範圍。 \")])],1)]):_c('div',{staticStyle:{\"padding\":\"10px 15px\",\"font-size\":\"0.8rem\"}},[_vm._v(\" 載入中... \")])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.treeBlocks!==null)?_c('div',{attrs:{\"changeGroup\":_vm.changeGroup}},[(_vm.showHead)?_c('div',{directives:[{name:\"domresize\",rawName:\"v-domresize\"}],on:{\"domresize\":_vm.resizeHead}},[(_vm.editable)?_c('div',{staticStyle:{\"padding\":\"15px\",\"border-bottom\":\"1px solid #ddd\"}},[_c('div',{staticStyle:{\"padding\":\"5px 0px\",\"display\":\"flex\",\"align-items\":\"center\"}},[_c('div',{staticStyle:{\"padding-right\":\"5px\",\"font-size\":\"0.9rem\",\"color\":\"#888\"}},[_vm._v(\" 名稱: \")]),_c('div',{},[_c('WText',{staticStyle:{\"width\":\"300px\"},attrs:{\"value\":_vm.getName(_vm.group)},on:{\"input\":(v)=>{_vm.updateProp('name',v)}}})],1)]),_c('div',{staticStyle:{\"padding\":\"5px 0px\",\"display\":\"flex\",\"align-items\":\"center\"}},[_c('div',{staticStyle:{\"padding-right\":\"5px\",\"font-size\":\"0.9rem\",\"color\":\"#888\"}},[_vm._v(\" 說明: \")]),_c('div',{},[_c('WText',{staticStyle:{\"width\":\"300px\"},attrs:{\"value\":_vm.getDescription(_vm.group)},on:{\"input\":(v)=>{_vm.updateProp('description',v)}}})],1)])]):_c('div',{staticStyle:{\"padding\":\"15px\",\"border-bottom\":\"1px solid #ddd\"}},[_c('div',{staticStyle:{\"font-size\":\"1.2rem\",\"white-space\":\"nowrap\"}},[_vm._v(\" \"+_vm._s(_vm.group.name)+\" \")]),_c('div',{staticStyle:{\"color\":\"#888\",\"font-size\":\"0.8rem\",\"white-space\":\"nowrap\"}},[_vm._v(\" \"+_vm._s(_vm.getDescription(_vm.group))+\" \")])]),(false)?_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\",\"padding\":\"20px 15px 15px 15px\",\"background\":\"#eee\",\"border-bottom\":\"1px solid #ddd\"}},[_c('div',{staticStyle:{\"margin-right\":\"10px\"}},[_vm._v(\"全部項目預設值:\")]),_c('div',{staticStyle:{\"margin-right\":\"10px\",\"display\":\"flex\",\"align-items\":\"center\"}},[_c('div',{staticStyle:{\"margin-right\":\"5px\"}},[_vm._v(\"顯示\")]),_c('div',[_c('WSwitch',{attrs:{\"value\":_vm.defaultShow},on:{\"input\":(b)=>{_vm.setDefaultShow(b)}}})],1)]),_c('div',{staticStyle:{\"margin-right\":\"10px\",\"display\":\"flex\",\"align-items\":\"center\"}},[_c('div',{staticStyle:{\"margin-right\":\"5px\"}},[_vm._v(\"啟用\")]),_c('div',[_c('WSwitch',{attrs:{\"value\":_vm.defaultActive},on:{\"input\":(b)=>{_vm.setDefaultActive(b)}}})],1)])]):_vm._e()]):_vm._e(),_c('WTree',{attrs:{\"viewHeightMax\":_vm.treeHeight,\"icon-toggle-color\":'#666',\"icon-toggle-background-color\":'transparent',\"icon-toggle-background-color-hover\":'transparent',\"data\":_vm.treeBlocks},scopedSlots:_vm._u([{key:\"item\",fn:function(props){return [_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\",\"min-height\":\"34px\"}},[_c('div',{},[_vm._v(\" \"+_vm._s(props.data.text)+\" \")])]),_c('div',{staticStyle:{\"position\":\"absolute\",\"top\":\"5px\",\"right\":\"15px\"}},[(_vm.editable)?_c('div',{staticStyle:{\"margin-left\":\"10px\",\"display\":\"inline-block\"}},[_c('WButtonCircle',{attrs:{\"icon\":_vm.mdiEyeCheck,\"iconSize\":18,\"paddingStyle\":{v:4,h:4},\"shadow\":false,\"tooltip\":'所屬顯示',\"backgroundColor\":'rgba(200,200,200,0.2)',\"backgroundColorHover\":'rgba(255,150,100,0.2)',\"backgroundColorFocus\":'rgba(255,150,100,0.2)',\"iconColor\":'#444',\"iconColorHover\":'#EF6C00',\"iconColorFocus\":'#EF6C00'},on:{\"click\":function($event){return _vm.treeToogleShowAndActive(props.data,true,'show')}}}),_c('WButtonCircle',{attrs:{\"icon\":_vm.mdiEyeOff,\"iconSize\":18,\"paddingStyle\":{v:4,h:4},\"shadow\":false,\"tooltip\":'所屬不顯示',\"backgroundColor\":'rgba(200,200,200,0.2)',\"backgroundColorHover\":'rgba(255,150,100,0.2)',\"backgroundColorFocus\":'rgba(255,150,100,0.2)',\"iconColor\":'#444',\"iconColorHover\":'#EF6C00',\"iconColorFocus\":'#EF6C00'},on:{\"click\":function($event){return _vm.treeToogleShowAndActive(props.data,false,'show')}}}),_c('WButtonCircle',{attrs:{\"icon\":_vm.mdiEyedropper,\"iconSize\":18,\"paddingStyle\":{v:4,h:4},\"shadow\":false,\"tooltip\":'所屬啟用',\"backgroundColor\":'rgba(200,200,200,0.2)',\"backgroundColorHover\":'rgba(255,150,100,0.2)',\"backgroundColorFocus\":'rgba(255,150,100,0.2)',\"iconColor\":'#444',\"iconColorHover\":'#EF6C00',\"iconColorFocus\":'#EF6C00'},on:{\"click\":function($event){return _vm.treeToogleShowAndActive(props.data,true,'active')}}}),_c('WButtonCircle',{attrs:{\"icon\":_vm.mdiEyedropperOff,\"iconSize\":18,\"paddingStyle\":{v:4,h:4},\"shadow\":false,\"tooltip\":'所屬不啟用',\"backgroundColor\":'rgba(200,200,200,0.2)',\"backgroundColorHover\":'rgba(255,150,100,0.2)',\"backgroundColorFocus\":'rgba(255,150,100,0.2)',\"iconColor\":'#444',\"iconColorHover\":'#EF6C00',\"iconColorFocus\":'#EF6C00'},on:{\"click\":function($event){return _vm.treeToogleShowAndActive(props.data,false,'active')}}})],1):_vm._e(),_c('div',{staticStyle:{\"margin-left\":\"10px\",\"display\":\"inline-block\"}},[_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\"}},[_c('div',{staticStyle:{\"margin-right\":\"3px\",\"font-size\":\"0.8rem\"}},[_vm._v(\"顯示\")]),_c('WCheckbox',{attrs:{\"checkedIconColor\":'yellow darken-4',\"uncheckedIconColor\":'yellow darken-4',\"value\":_vm.getShow(props.data),\"editable\":_vm.editable},on:{\"input\":function($event){return _vm.toogleShow(props.data)}}})],1)]),_c('div',{staticStyle:{\"margin-left\":\"10px\",\"display\":\"inline-block\"}},[_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\"}},[_c('div',{staticStyle:{\"margin-right\":\"3px\",\"font-size\":\"0.8rem\"}},[_vm._v(\"啟用\")]),_c('WCheckbox',{attrs:{\"checkedIconColor\":'yellow darken-4',\"uncheckedIconColor\":'yellow darken-4',\"value\":_vm.getActive(props.data),\"editable\":_vm.editable},on:{\"input\":function($event){return _vm.toogleActive(props.data)}}})],1)])])]}}],null,false,3062145534)},[_vm._v(\" > \")])],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div\r\n :changeGroup=\"changeGroup\"\r\n v-if=\"treeBlocks!==null\"\r\n >\r\n\r\n <div\r\n style=\"\"\r\n v-domresize\r\n @domresize=\"resizeHead\"\r\n v-if=\"showHead\"\r\n >\r\n\r\n <div\r\n style=\"padding:15px; border-bottom:1px solid #ddd;\"\r\n v-if=\"editable\"\r\n >\r\n\r\n <div style=\"padding:5px 0px; display:flex; align-items:center;\">\r\n <div style=\"padding-right:5px; font-size:0.9rem; color:#888;\">\r\n 名稱:\r\n </div>\r\n <div style=\"\">\r\n <WText\r\n style=\"width:300px;\"\r\n :value=\"getName(group)\"\r\n @input=\"(v)=>{updateProp('name',v)}\"\r\n ></WText>\r\n </div>\r\n </div>\r\n\r\n <div style=\"padding:5px 0px; display:flex; align-items:center;\">\r\n <div style=\"padding-right:5px; font-size:0.9rem; color:#888;\">\r\n 說明:\r\n </div>\r\n <div style=\"\">\r\n <WText\r\n style=\"width:300px;\"\r\n :value=\"getDescription(group)\"\r\n @input=\"(v)=>{updateProp('description',v)}\"\r\n ></WText>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div\r\n style=\"padding:15px; border-bottom:1px solid #ddd;\"\r\n v-else\r\n >\r\n\r\n <div style=\"font-size:1.2rem; white-space:nowrap;\">\r\n {{group.name}}\r\n </div>\r\n\r\n <div style=\"color:#888; font-size:0.8rem; white-space:nowrap;\">\r\n {{getDescription(group)}}\r\n </div>\r\n\r\n </div>\r\n\r\n <div\r\n style=\"display:flex; align-items:center; padding:20px 15px 15px 15px; background:#eee; border-bottom:1px solid #ddd;\"\r\n v-if=\"false\"\r\n >\r\n\r\n <div style=\"margin-right:10px;\">全部項目預設值:</div>\r\n\r\n <div style=\"margin-right:10px; display:flex; align-items:center;\">\r\n <div style=\"margin-right:5px;\">顯示</div>\r\n <div>\r\n <WSwitch\r\n :value=\"defaultShow\"\r\n @input=\"(b)=>{setDefaultShow(b)}\"\r\n ></WSwitch>\r\n </div>\r\n </div>\r\n\r\n <div style=\"margin-right:10px; display:flex; align-items:center;\">\r\n <div style=\"margin-right:5px;\">啟用</div>\r\n <div>\r\n <WSwitch\r\n :value=\"defaultActive\"\r\n @input=\"(b)=>{setDefaultActive(b)}\"\r\n ></WSwitch>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <WTree\r\n :viewHeightMax=\"treeHeight\"\r\n :icon-toggle-color=\"'#666'\"\r\n :icon-toggle-background-color=\"'transparent'\"\r\n :icon-toggle-background-color-hover=\"'transparent'\"\r\n :data=\"treeBlocks\"\r\n >\r\n <template v-slot:item=\"props\">\r\n <div style=\"display:flex; align-items:center; min-height:34px;\">\r\n\r\n <div style=\"\">\r\n {{props.data.text}}\r\n </div>\r\n\r\n </div>\r\n <div style=\"position:absolute; top:5px; right:15px;\">\r\n\r\n <div style=\"margin-left:10px; display:inline-block;\" v-if=\"editable\">\r\n\r\n <WButtonCircle\r\n :icon=\"mdiEyeCheck\"\r\n :iconSize=\"18\"\r\n :paddingStyle=\"{v:4,h:4}\"\r\n :shadow=\"false\"\r\n :tooltip=\"'所屬顯示'\"\r\n :backgroundColor=\"'rgba(200,200,200,0.2)'\"\r\n :backgroundColorHover=\"'rgba(255,150,100,0.2)'\"\r\n :backgroundColorFocus=\"'rgba(255,150,100,0.2)'\"\r\n :iconColor=\"'#444'\"\r\n :iconColorHover=\"'#EF6C00'\"\r\n :iconColorFocus=\"'#EF6C00'\"\r\n @click=\"treeToogleShowAndActive(props.data,true,'show')\"\r\n ></WButtonCircle>\r\n\r\n <WButtonCircle\r\n :icon=\"mdiEyeOff\"\r\n :iconSize=\"18\"\r\n :paddingStyle=\"{v:4,h:4}\"\r\n :shadow=\"false\"\r\n :tooltip=\"'所屬不顯示'\"\r\n :backgroundColor=\"'rgba(200,200,200,0.2)'\"\r\n :backgroundColorHover=\"'rgba(255,150,100,0.2)'\"\r\n :backgroundColorFocus=\"'rgba(255,150,100,0.2)'\"\r\n :iconColor=\"'#444'\"\r\n :iconColorHover=\"'#EF6C00'\"\r\n :iconColorFocus=\"'#EF6C00'\"\r\n @click=\"treeToogleShowAndActive(props.data,false,'show')\"\r\n ></WButtonCircle>\r\n\r\n <WButtonCircle\r\n :icon=\"mdiEyedropper\"\r\n :iconSize=\"18\"\r\n :paddingStyle=\"{v:4,h:4}\"\r\n :shadow=\"false\"\r\n :tooltip=\"'所屬啟用'\"\r\n :backgroundColor=\"'rgba(200,200,200,0.2)'\"\r\n :backgroundColorHover=\"'rgba(255,150,100,0.2)'\"\r\n :backgroundColorFocus=\"'rgba(255,150,100,0.2)'\"\r\n :iconColor=\"'#444'\"\r\n :iconColorHover=\"'#EF6C00'\"\r\n :iconColorFocus=\"'#EF6C00'\"\r\n @click=\"treeToogleShowAndActive(props.data,true,'active')\"\r\n ></WButtonCircle>\r\n\r\n <WButtonCircle\r\n :icon=\"mdiEyedropperOff\"\r\n :iconSize=\"18\"\r\n :paddingStyle=\"{v:4,h:4}\"\r\n :shadow=\"false\"\r\n :tooltip=\"'所屬不啟用'\"\r\n :backgroundColor=\"'rgba(200,200,200,0.2)'\"\r\n :backgroundColorHover=\"'rgba(255,150,100,0.2)'\"\r\n :backgroundColorFocus=\"'rgba(255,150,100,0.2)'\"\r\n :iconColor=\"'#444'\"\r\n :iconColorHover=\"'#EF6C00'\"\r\n :iconColorFocus=\"'#EF6C00'\"\r\n @click=\"treeToogleShowAndActive(props.data,false,'active')\"\r\n ></WButtonCircle>\r\n\r\n </div>\r\n\r\n <div style=\"margin-left:10px; display:inline-block;\">\r\n <div style=\"display:flex; align-items:center;\">\r\n <div style=\"margin-right:3px; font-size:0.8rem;\">顯示</div>\r\n <WCheckbox\r\n :checkedIconColor=\"'yellow darken-4'\"\r\n :uncheckedIconColor=\"'yellow darken-4'\"\r\n :value=\"getShow(props.data)\"\r\n :editable=\"editable\"\r\n @input=\"toogleShow(props.data)\"\r\n ></WCheckbox>\r\n </div>\r\n </div>\r\n\r\n <div style=\"margin-left:10px; display:inline-block;\">\r\n <div style=\"display:flex; align-items:center;\">\r\n <div style=\"margin-right:3px; font-size:0.8rem;\">啟用</div>\r\n <WCheckbox\r\n :checkedIconColor=\"'yellow darken-4'\"\r\n :uncheckedIconColor=\"'yellow darken-4'\"\r\n :value=\"getActive(props.data)\"\r\n :editable=\"editable\"\r\n @input=\"toogleActive(props.data)\"\r\n ></WCheckbox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </template>\r\n >\r\n </WTree>\r\n\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mdiEyeCheck, mdiEyeOff, mdiEyedropper, mdiEyedropperOff } from '@mdi/js/mdi.js'\r\nimport get from 'lodash/get'\r\nimport set from 'lodash/set'\r\nimport each from 'lodash/each'\r\nimport size from 'lodash/size'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport iseobj from 'wsemi/src/iseobj.mjs'\r\nimport isobj from 'wsemi/src/isobj.mjs'\r\nimport isestr from 'wsemi/src/isestr.mjs'\r\nimport haskey from 'wsemi/src/haskey.mjs'\r\nimport debounce from 'wsemi/src/debounce.mjs'\r\nimport WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'\r\nimport WTree from 'w-component-vue/src/components/WTree.vue'\r\nimport WCheckbox from 'w-component-vue/src/components/WCheckbox.vue'\r\nimport WText from 'w-component-vue/src/components/WText.vue'\r\nimport { getTreeBlocks } from '../plugins/mShare.mjs'\r\n\r\n\r\nexport default {\r\n components: {\r\n WButtonCircle,\r\n WTree,\r\n WCheckbox,\r\n WText,\r\n },\r\n props: {\r\n height: {\r\n type: Number,\r\n default: 100,\r\n },\r\n group: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n showHead: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n editable: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n data: function() {\r\n return {\r\n dbc: debounce(),\r\n\r\n mdiEyeCheck,\r\n mdiEyeOff,\r\n mdiEyedropper,\r\n mdiEyedropperOff,\r\n\r\n headHeight: 100,\r\n\r\n groupTrans: null,\r\n\r\n }\r\n },\r\n computed: {\r\n\r\n changeGroup: function() {\r\n // console.log('computed changeGroup')\r\n\r\n let vo = this\r\n\r\n //save\r\n let group = cloneDeep(vo.group)\r\n\r\n //save rules\r\n let rules = JSON.parse(group.crules)\r\n group.rules = rules\r\n // console.log('rules', rules)\r\n\r\n //delete\r\n delete group.crules\r\n\r\n //save\r\n vo.groupTrans = group\r\n // console.log('group', group)\r\n\r\n return ''\r\n },\r\n\r\n treeHeight: function() {\r\n let vo = this\r\n\r\n //h\r\n let h = vo.height - vo.headHeight\r\n h = Math.max(h, 0)\r\n\r\n return h\r\n },\r\n\r\n targets: function() {\r\n return get(this, `$store.state.targets`)\r\n },\r\n\r\n // blocks: function() {\r\n // // console.log('computed blocks')\r\n\r\n // let vo = this\r\n\r\n // //rs\r\n // let rs = map(vo.targets, (v) => {\r\n\r\n // //text, parentId\r\n // let s = sep(v.id, '.')\r\n // let text = get(takeRight(s), 0) //取最後節點\r\n // s = dropRight(s, 1)\r\n // let parentId = join(s, '.') //取父節點\r\n\r\n // return {\r\n // ...v,\r\n // parentId,\r\n // text,\r\n // }\r\n // })\r\n\r\n // return rs\r\n // },\r\n\r\n treeBlocks: function() {\r\n // console.log('computed treeBlocks')\r\n\r\n let vo = this\r\n\r\n //check\r\n if (size(vo.targets) === 0) {\r\n return null\r\n }\r\n\r\n //getTreeBlocks\r\n let r = getTreeBlocks(vo.targets)\r\n\r\n return r\r\n },\r\n\r\n defaultShow: function() {\r\n let r = get(this.groupTrans, 'rules.___all___.show', 'n')\r\n return r === 'y'\r\n },\r\n\r\n defaultActive: function() {\r\n let r = get(this.groupTrans, 'rules.___all___.active', 'n')\r\n return r === 'y'\r\n },\r\n\r\n },\r\n methods: {\r\n\r\n resizeHead: function(msg) {\r\n // console.log('methods resizeHead', msg)\r\n\r\n let vo = this\r\n\r\n //headHeight\r\n vo.headHeight = msg.snew.offsetHeight\r\n\r\n },\r\n\r\n getName: function(g) {\r\n // console.log('methods getName', g)\r\n\r\n //r\r\n let r = get(g, 'name', '')\r\n\r\n //check\r\n if (!isestr(r)) {\r\n r = '無名稱'\r\n }\r\n\r\n return r\r\n },\r\n\r\n getDescription: function(g) {\r\n // console.log('methods getDescription', g)\r\n\r\n //r\r\n let r = get(g, 'description', '')\r\n\r\n //check\r\n if (!isestr(r)) {\r\n r = '無說明'\r\n }\r\n\r\n return r\r\n },\r\n\r\n setDefaultShow: function(b) {\r\n let r = b ? 'y' : 'n'\r\n return set(this.groupTrans, 'rules.___all___.show', r)\r\n },\r\n\r\n setDefaultActive: function(b) {\r\n let r = b ? 'y' : 'n'\r\n return set(this.groupTrans, 'rules.___all___.active', r)\r\n },\r\n\r\n getShowAndActive: function(item, key, def) {\r\n // console.log('getShowAndActive', item, key, def)\r\n\r\n let vo = this\r\n\r\n //rules\r\n let rules = get(vo.groupTrans, 'rules', null)\r\n\r\n //rule\r\n let rule = null\r\n if (haskey(rules, item.id)) {\r\n rule = rules[item.id]\r\n }\r\n\r\n //r\r\n let r = get(rule, key, null)\r\n // console.log(item.id, r, def)\r\n\r\n //b\r\n let b = def\r\n if (r === 'y' || r === 'n') { //若權限內有定義則優先使用(覆蓋)\r\n b = r === 'y'\r\n }\r\n\r\n return b\r\n },\r\n\r\n getShow: function(item) {\r\n // console.log('getShow', item)\r\n\r\n let vo = this\r\n\r\n //def\r\n let def = vo.defaultShow\r\n\r\n //getShowAndActive\r\n let b = vo.getShowAndActive(item, 'show', def)\r\n\r\n return b\r\n },\r\n\r\n getActive: function(item) {\r\n // console.log('getActive', item)\r\n\r\n let vo = this\r\n\r\n //def\r\n let def = vo.defaultActive\r\n\r\n //getShowAndActive\r\n let b = vo.getShowAndActive(item, 'active', def)\r\n\r\n return b\r\n },\r\n\r\n getDefaultShowAndActive: function(key) {\r\n if (key === 'show') {\r\n return this.defaultShow\r\n }\r\n return this.defaultActive\r\n },\r\n\r\n toogleShowAndActive: function(id, b, key) {\r\n // console.log('toogleShowAndActive', id, b, key)\r\n\r\n let vo = this\r\n\r\n //def\r\n let def = vo.getDefaultShowAndActive(key)\r\n\r\n //groupTrans\r\n let groupTrans = cloneDeep(vo.groupTrans)\r\n\r\n //cb\r\n let cb = b ? 'y' : 'n'\r\n\r\n //rules\r\n let rules = get(vo.groupTrans, 'rules', null)\r\n\r\n //rule\r\n let rule = null\r\n if (haskey(rules, id)) {\r\n rule = rules[id]\r\n }\r\n\r\n //r\r\n let r = get(rule, key, null)\r\n\r\n //toogle\r\n if (r === 'y' || r === 'n') { //若權限內有定義則優先使用(覆蓋)\r\n // console.log('權限內有定義')\r\n\r\n //check\r\n if (b === def) { //欲切換值與預設值相同\r\n\r\n //delete\r\n delete rule[key]\r\n\r\n }\r\n else {\r\n\r\n //save rule\r\n rule[key] = cb\r\n\r\n }\r\n\r\n }\r\n else {\r\n // console.log('權限內無定義')\r\n\r\n //check\r\n if (b === def) { //欲切換值與預設值相同, 不變更\r\n // console.log('不變更')\r\n }\r\n else {\r\n\r\n //save rule\r\n if (isobj(rule)) {\r\n rule[key] = cb\r\n }\r\n else {\r\n rule = {\r\n [key]: cb,\r\n }\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n //check\r\n if (iseobj(rule)) {\r\n\r\n //save rule\r\n groupTrans.rules[id] = rule\r\n\r\n }\r\n else {\r\n\r\n //delete rule\r\n delete groupTrans.rules[id]\r\n\r\n }\r\n\r\n //save groupTrans\r\n vo.groupTrans = groupTrans\r\n // console.log('groupTrans', cloneDeep(vo.groupTrans))\r\n\r\n //emitGroupDebounce\r\n vo.emitGroupDebounce()\r\n\r\n },\r\n\r\n toogleShow: function(item) {\r\n // console.log('toogleShow', item)\r\n\r\n let vo = this\r\n\r\n //check\r\n if (!vo.editable) {\r\n return\r\n }\r\n\r\n //b\r\n let b = !vo.getShow(item)\r\n\r\n //toogleShowAndActive\r\n vo.toogleShowAndActive(item.id, b, 'show')\r\n\r\n },\r\n\r\n toogleActive: function(item) {\r\n // console.log('toogleActive', item)\r\n\r\n let vo = this\r\n\r\n //check\r\n if (!vo.editable) {\r\n return\r\n }\r\n\r\n //b\r\n let b = !vo.getActive(item)\r\n\r\n //toogleShowAndActive\r\n vo.toogleShowAndActive(item.id, b, 'active')\r\n\r\n },\r\n\r\n treeToogleShowAndActive: function(item, b, key) {\r\n // console.log('treeToogleShowAndActive', item, b, key)\r\n\r\n let vo = this\r\n\r\n //self\r\n vo.toogleShowAndActive(item.id, b, key)\r\n\r\n //children\r\n each(item.children, (v) => {\r\n vo.treeToogleShowAndActive(v, b, key)\r\n })\r\n\r\n },\r\n\r\n updateProp: function(key, value) {\r\n // console.log('methods updateProp', key, value)\r\n\r\n let vo = this\r\n\r\n //groupTrans\r\n let groupTrans = cloneDeep(vo.groupTrans)\r\n\r\n //save value\r\n groupTrans[key] = value\r\n\r\n //save groupTrans\r\n vo.groupTrans = groupTrans\r\n // console.log('groupTrans', cloneDeep(vo.groupTrans))\r\n\r\n //emitGroupDebounce\r\n vo.emitGroupDebounce()\r\n\r\n },\r\n\r\n emitGroupDebounce: function() {\r\n //console.log('methods emitGroupDebounce')\r\n\r\n let vo = this\r\n\r\n //dbc\r\n vo.dbc(() => {\r\n\r\n //emitGroup\r\n vo.emitGroup()\r\n\r\n })\r\n\r\n },\r\n\r\n emitGroup: function() {\r\n //console.log('methods emitGroup')\r\n\r\n let vo = this\r\n\r\n //groupTrans\r\n let groupTrans = cloneDeep(vo.groupTrans)\r\n\r\n //save crules\r\n groupTrans.crules = JSON.stringify(vo.groupTrans.rules)\r\n\r\n //emit\r\n vo.$emit('update', groupTrans)\r\n\r\n },\r\n\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n</style>\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ruleGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ruleGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ruleGroup.vue?vue&type=template&id=4855fd31&scoped=true&\"\nimport script from \"./ruleGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./ruleGroup.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4855fd31\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <div\r\n style=\"height:100%;\"\r\n v-domresize\r\n @domresize=\"resizePanel\"\r\n :changeGroups=\"changeGroups\"\r\n >\r\n\r\n <div\r\n style=\"border-bottom:1px solid #ddd;\"\r\n v-domresize\r\n @domresize=\"resizeHead\"\r\n >\r\n\r\n <!-- 標題區 -->\r\n <div style=\"padding:30px 25px 0px 20px; background:#fff;\">\r\n <div style=\"padding:5px 15px 5px 5px; display:inline-block; border-bottom:3px solid #FF9100;\">\r\n <div style=\"display:flex; align-items:center;\">\r\n\r\n <WIcon\r\n :icon=\"mdiStackOverflow\"\r\n :color=\"'#FF9800'\"\r\n ></WIcon>\r\n\r\n <div style=\"padding-left:10px; font-size:1.3rem; color:#d3912c;\">\r\n 管理權限群組\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- 編輯設定區 -->\r\n <div style=\"background:#fff;\">\r\n\r\n <div style=\"padding:20px 20px 15px 20px; background:#fff;\">\r\n\r\n <div style=\"display:flex;\">\r\n <WSwitch\r\n :text=\"'是否編輯'\"\r\n :checkedSwitchCircleColor=\"'#D81B60'\"\r\n :checkedSwitchCircleColorHover=\"'#f26'\"\r\n :checkedSwitchBarColor=\"'#F8BBD0'\"\r\n :checkedSwitchBarColorHover=\"'#F8BBD0'\"\r\n v-model=\"isOperatable\"\r\n ></WSwitch>\r\n </div>\r\n\r\n <div style=\"padding-top:5px; font-size:0.8rem; _color:#f26;\" v-if=\"isOperatable\">\r\n <div style=\"padding:3px 0px;\">\r\n 1. 請依照系統管理需求創建適合各類使用者適合的權限群組。\r\n </div>\r\n <div style=\"padding:3px 0px;\">\r\n 2. 開啟編輯時可拖曳權限群組變更其相對順序。\r\n </div>\r\n <div style=\"padding:3px 0px;\">\r\n 3. 此區域變更時將自動儲存。\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div\r\n style=\"padding:10px 10px 12px 10px; border-top:1px solid #F48FB1; border-bottom:1px solid #F48FB1; background:#FCE4EC; display:flex; align-items:center; justify-content:flex-end;\"\r\n v-if=\"isModified\"\r\n >\r\n\r\n <WButtonChip\r\n :paddingStyle=\"{v:0,h:11}\"\r\n :text=\"'儲存變更'\"\r\n :icon=\"mdiCloudUploadOutline\"\r\n :backgroundColor=\"'rgba(255,0,50,0.7)'\"\r\n :backgroundColorHover=\"'rgba(255,0,50,0.8)'\"\r\n :textColor=\"'#eee'\"\r\n :textColorHover=\"'#fff'\"\r\n :iconColor=\"'#eee'\"\r\n :iconColorHover=\"'#fff'\"\r\n @click=\"saveGroups\"\r\n ></WButtonChip>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div :style=\"`padding:${spacePading}px;`\" v-if=\"!firstLoading\">\r\n\r\n <div style=\"background:#fff; box-shadow:0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12);\">\r\n\r\n <div\r\n v-domresize\r\n @domresize=\"resizeGroupInfor\"\r\n >\r\n\r\n <!-- 權限群組區(含新增) -->\r\n <div style=\"padding:10px 20px; border-bottom:3px solid #ddd;\">\r\n\r\n <WGroupTags\r\n :keyText=\"'name'\"\r\n :draggable=\"isOperatable\"\r\n :editableClose=\"isOperatable\"\r\n :editableInput=\"isOperatable\"\r\n :addButtonText=\"'新增群組'\"\r\n :addButtonTooltip=\"'新增權限群組'\"\r\n :addButtonTextColor=\"'#eee'\"\r\n :addButtonTextColorHover=\"'#fff'\"\r\n :addButtonIconColor=\"'#eee'\"\r\n :addButtonIconColorHover=\"'#fff'\"\r\n :addButtonBackgroundColor=\"'rgba(255,0,50,0.7)'\"\r\n :addButtonBackgroundColorHover=\"'rgba(255,0,50,0.8)'\"\r\n :value=\"groupsTrans\"\r\n @input=\"dragGroupsOrder\"\r\n @click=\"clickGroup\"\r\n @click-add=\"clickAddGroup\"\r\n @click-close=\"clickRemoveGroup\"\r\n ></WGroupTags>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <ruleGroup\r\n :height=\"ruleGroupHeight\"\r\n :group=\"pickGroup\"\r\n :editable=\"isOperatable\"\r\n @update=\"modifyGroup\"\r\n v-if=\"pickGroup\"\r\n ></ruleGroup>\r\n\r\n <div\r\n style=\"padding:20px; _color:#666; font-size:0.85rem;\"\r\n v-else\r\n >\r\n 未選擇權限群組,請點擇上方任一權限群組以顯示管理範圍。\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div style=\"padding:10px 15px; font-size:0.8rem;\" v-else>\r\n 載入中...\r\n </div>\r\n\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mdiStackOverflow, mdiVectorPolylinePlus, mdiCheckboxMarkedCircle, mdiCloudUploadOutline } from '@mdi/js/mdi.js'\r\nimport get from 'lodash/get'\r\nimport each from 'lodash/each'\r\nimport map from 'lodash/map'\r\nimport find from 'lodash/find'\r\nimport size from 'lodash/size'\r\nimport max from 'lodash/max'\r\nimport sortBy from 'lodash/sortBy'\r\nimport isEqual from 'lodash/isEqual'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport genID from 'wsemi/src/genID.mjs'\r\nimport isestr from 'wsemi/src/isestr.mjs'\r\nimport iseobj from 'wsemi/src/iseobj.mjs'\r\nimport waitFun from 'wsemi/src/waitFun.mjs'\r\nimport WIcon from 'w-component-vue/src/components/WIcon.vue'\r\nimport WButtonChip from 'w-component-vue/src/components/WButtonChip.vue'\r\nimport WSwitch from 'w-component-vue/src/components/WSwitch.vue'\r\nimport WGroupTags from 'w-component-vue/src/components/WGroupTags.vue'\r\nimport ruleGroup from './ruleGroup.vue'\r\n\r\n\r\nexport default {\r\n components: {\r\n WIcon,\r\n WButtonChip,\r\n WSwitch,\r\n WGroupTags,\r\n ruleGroup,\r\n },\r\n props: {\r\n },\r\n data: function() {\r\n return {\r\n mdiStackOverflow,\r\n mdiVectorPolylinePlus,\r\n mdiCheckboxMarkedCircle,\r\n mdiCloudUploadOutline,\r\n\r\n panelWidth: 100,\r\n panelHeight: 100,\r\n headHeight: 100,\r\n groupInforHeight: 100,\r\n\r\n firstLoading: true,\r\n isOperatable: false,\r\n isModified: false,\r\n\r\n groupsTrans: [],\r\n\r\n pickGroupId: '',\r\n\r\n }\r\n },\r\n computed: {\r\n\r\n ruleGroups: function() {\r\n return get(this, `$store.state.ruleGroups`)\r\n },\r\n\r\n groups: function() {\r\n // console.log('computed groups')\r\n\r\n let vo = this\r\n\r\n //rs, 此區程式碼等同於ruleGroups, 若確認後續無需求再移除\r\n let rs = map(vo.ruleGroups, (v) => {\r\n // let rules = JSON.parse(v.crules)\r\n return {\r\n ...v,\r\n // rules,\r\n }\r\n })\r\n\r\n //sortBy\r\n rs = sortBy(rs, 'order')\r\n\r\n return rs\r\n },\r\n\r\n changeGroups: function() {\r\n // console.log('computed changeGroups')\r\n\r\n let vo = this\r\n\r\n //default\r\n vo.groupsTrans = []\r\n\r\n //check\r\n if (size(vo.groups) === 0) { //不能用被修改的groupsTrans, 否則會反覆觸發\r\n return ''\r\n }\r\n\r\n //save\r\n vo.groupsTrans = cloneDeep(vo.groups)\r\n\r\n //firstLoading\r\n vo.firstLoading = false\r\n\r\n return ''\r\n },\r\n\r\n spacePading: function() {\r\n let vo = this\r\n if (vo.panelWidth < 400) {\r\n return 0\r\n }\r\n else if (vo.panelWidth < 800) {\r\n return 10\r\n }\r\n return 20\r\n },\r\n\r\n ruleGroupHeight: function() {\r\n let vo = this\r\n\r\n //h\r\n let h = vo.panelHeight - vo.headHeight - 2 * vo.spacePading - vo.groupInforHeight\r\n h = Math.max(h, 0)\r\n\r\n return h\r\n },\r\n\r\n pickGroup: function() {\r\n // console.log('computed pickGroup')\r\n\r\n let vo = this\r\n\r\n //find, 點擊權限按鈕提供權限物件, 刪除後找不到亦可自動清空\r\n let r = find(vo.groupsTrans, { id: vo.pickGroupId })\r\n\r\n return r\r\n },\r\n\r\n },\r\n methods: {\r\n\r\n resizePanel: function(msg) {\r\n // console.log('methods resizePanel', msg)\r\n\r\n let vo = this\r\n\r\n //panelWidth, panelHeight\r\n vo.panelWidth = msg.snew.offsetWidth\r\n vo.panelHeight = msg.snew.offsetHeight\r\n\r\n },\r\n\r\n resizeHead: function(msg) {\r\n // console.log('methods resizeHead', msg)\r\n\r\n let vo = this\r\n\r\n //headHeight\r\n vo.headHeight = msg.snew.offsetHeight\r\n\r\n },\r\n\r\n resizeGroupInfor: function(msg) {\r\n // console.log('methods resizeGroupInfor', msg)\r\n\r\n let vo = this\r\n\r\n //groupInforHeight\r\n vo.groupInforHeight = msg.snew.offsetHeight\r\n\r\n },\r\n\r\n getDescription: function(g) {\r\n // console.log('methods getDescription', g)\r\n\r\n //r\r\n let r = get(g, 'description', '')\r\n\r\n //check\r\n if (!isestr(r)) {\r\n r = '無說明'\r\n }\r\n\r\n return r\r\n },\r\n\r\n clickGroup: function(msg) {\r\n // console.log('methods clickGroup', msg)\r\n\r\n let vo = this\r\n\r\n //g\r\n let g = get(msg, 'item', {})\r\n // console.log('g', g)\r\n\r\n //id\r\n let id = get(g, 'id', '')\r\n\r\n //save\r\n vo.pickGroupId = id\r\n\r\n },\r\n\r\n clickAddGroup: function() {\r\n // console.log('methods clickAddGroup')\r\n\r\n let vo = this\r\n\r\n async function core() {\r\n let errTemp = null\r\n\r\n //show loading\r\n vo.$ui.updateLoading(true)\r\n\r\n //orderMax\r\n let orderMax = null\r\n orderMax = map(vo.groupsTrans, 'order')\r\n orderMax = max(orderMax) + 1\r\n\r\n //g\r\n let g = {\r\n id: genID(),\r\n name: '新權限群組',\r\n crules: `{ \"___all___\": { \"show\": \"n\", \"active\": \"n\" } }`,\r\n order: orderMax,\r\n }\r\n\r\n //save\r\n await vo.$fapi.ruleGroups.insert(g)\r\n .catch((err) => {\r\n errTemp = err\r\n })\r\n\r\n //check\r\n if (errTemp !== null) {\r\n vo.$alert(`新增權限群組失敗: ${errTemp}`, { type: 'error' })\r\n }\r\n\r\n //gn\r\n let gn = null\r\n await waitFun(() => {\r\n gn = find(vo.groupsTrans, { id: g.id })\r\n let b = iseobj(gn) //確認g.id已存在\r\n // console.log('waitFun', gn, b)\r\n return b\r\n })\r\n // console.log('gn', gn)\r\n\r\n //alert\r\n vo.$alert(`新增權限群組成功`)\r\n\r\n }\r\n\r\n //core\r\n core()\r\n // .then((res) => {\r\n // console.log('then', res)\r\n // })\r\n .catch((err) => {\r\n console.log('catch', err)\r\n vo.$alert(`發生非預期錯誤,請洽管理員`, { type: 'error' })\r\n })\r\n .finally(() => {\r\n\r\n //hide loading\r\n vo.$ui.updateLoading(false)\r\n\r\n })\r\n\r\n },\r\n\r\n clickRemoveGroup: function(msg) {\r\n // console.log('methods clickRemoveGroup', msg)\r\n\r\n let vo = this\r\n\r\n async function core() {\r\n let errTemp = null\r\n\r\n //g\r\n let g = get(msg, 'item', {})\r\n\r\n //name\r\n let name = get(g, 'name', '未知')\r\n\r\n //showCheckYesNo\r\n let bExit = false\r\n await vo.$dg.showCheckYesNo(`確認是否刪除權限群組「${name}」?`)\r\n .catch(() => {\r\n bExit = true\r\n })\r\n if (bExit) {\r\n return\r\n }\r\n\r\n //show loading\r\n vo.$ui.updateLoading(true)\r\n\r\n //save\r\n await vo.$fapi.ruleGroups.del(g)\r\n .catch((err) => {\r\n errTemp = err\r\n })\r\n\r\n //check\r\n if (errTemp !== null) {\r\n vo.$alert(`刪除權限群組失敗: ${errTemp}`, { type: 'error' })\r\n return\r\n }\r\n\r\n //gn\r\n let gn = null\r\n await waitFun(() => {\r\n gn = find(vo.groupsTrans, { id: g.id })\r\n let b = !iseobj(gn) //確認g.id已不存在\r\n // console.log('waitFun', gn, b)\r\n return b\r\n })\r\n // console.log('gn', gn)\r\n\r\n //alert\r\n vo.$alert(`刪除權限群組成功`)\r\n\r\n }\r\n\r\n //core\r\n core()\r\n // .then((res) => {\r\n // console.log('then', res)\r\n // })\r\n .catch((err) => {\r\n console.log('catch', err)\r\n vo.$alert(`發生非預期錯誤,請洽管理員`, { type: 'error' })\r\n })\r\n .finally(() => {\r\n\r\n //hide loading\r\n vo.$ui.updateLoading(false)\r\n\r\n })\r\n\r\n },\r\n\r\n dragGroupsOrder: function(groupsNew) {\r\n // console.log('dragGroupsOrder', groupsNew)\r\n\r\n let vo = this\r\n\r\n async function core() {\r\n let errTemp = null\r\n\r\n //check, 新增或刪除皆跳出, 僅處理排序之操作\r\n if (size(vo.groupsTrans) !== size(groupsNew)) {\r\n return\r\n }\r\n // console.log(`size(vo.groupsTrans)`, size(vo.groupsTrans))\r\n // console.log(`size(groupsNew)`, size(groupsNew))\r\n\r\n //show loading\r\n vo.$ui.updateLoading(true)\r\n\r\n //gs\r\n let gs = []\r\n each(groupsNew, (v, k) => {\r\n gs.push({\r\n id: v.id,\r\n order: k,\r\n })\r\n })\r\n // console.log('gs', gs)\r\n\r\n //save\r\n await vo.$fapi.ruleGroups.save(gs)\r\n .catch((err) => {\r\n errTemp = err\r\n })\r\n\r\n //check\r\n if (errTemp !== null) {\r\n vo.$alert(`變更權限群組順序失敗: ${errTemp}`, { type: 'error' })\r\n return\r\n }\r\n\r\n //gsn\r\n let gsn = null\r\n await waitFun(() => {\r\n gsn = map(vo.groupsTrans, (v, k) => {\r\n return {\r\n id: v.id,\r\n order: k,\r\n }\r\n })\r\n return isEqual(gsn, gs)\r\n })\r\n // console.log('gsn', gsn)\r\n\r\n //alert\r\n vo.$alert(`變更權限群組順序成功`)\r\n\r\n }\r\n\r\n //core\r\n core()\r\n // .then((res) => {\r\n // console.log('then', res)\r\n // })\r\n .catch((err) => {\r\n console.log('catch', err)\r\n vo.$alert(`發生非預期錯誤,請洽管理員`, { type: 'error' })\r\n })\r\n .finally(() => {\r\n\r\n //hide loading\r\n vo.$ui.updateLoading(false)\r\n\r\n })\r\n\r\n },\r\n\r\n modifyGroup: function(group) {\r\n // console.log('methods modifyGroup', group)\r\n\r\n let vo = this\r\n\r\n //check\r\n if (!isestr(group.name)) {\r\n vo.$alert(`權限群組名稱請記得給予`, { type: 'warning' })\r\n }\r\n\r\n //modify\r\n each(vo.groupsTrans, (v, k) => {\r\n if (v.id === group.id) {\r\n vo.groupsTrans[k] = group\r\n }\r\n })\r\n // console.log('vo.groupsTrans', cloneDeep(vo.groupsTrans))\r\n\r\n //isModified\r\n vo.isModified = true\r\n\r\n },\r\n\r\n saveGroups: function() {\r\n // console.log('methods saveGroups')\r\n\r\n let vo = this\r\n\r\n async function core() {\r\n let errTemp = null\r\n\r\n //check\r\n let b = false\r\n each(vo.groupsTrans, (v, k) => {\r\n if (!isestr(v.name)) {\r\n vo.$alert(`第 ${k + 1} 個權限群組名稱為空`, { type: 'error' })\r\n b = true\r\n }\r\n })\r\n if (b) {\r\n return\r\n }\r\n\r\n //show loading\r\n vo.$ui.updateLoading(true)\r\n\r\n //groups\r\n let groups = map(vo.groupsTrans, (group) => {\r\n let g = {\r\n id: group.id,\r\n name: group.name,\r\n description: group.description,\r\n crules: group.crules,\r\n }\r\n return g\r\n })\r\n\r\n //save\r\n await vo.$fapi.ruleGroups.save(groups)\r\n .catch((err) => {\r\n errTemp = err\r\n })\r\n\r\n //check\r\n if (errTemp !== null) {\r\n vo.$alert(`儲存權限群組失敗: ${errTemp}`, { type: 'error' })\r\n return\r\n }\r\n\r\n //isModified\r\n vo.isModified = false\r\n\r\n //alert\r\n vo.$alert(`儲存權限群組成功`)\r\n\r\n }\r\n\r\n //core\r\n core()\r\n // .then((res) => {\r\n // console.log('then', res)\r\n // })\r\n .catch((err) => {\r\n console.log('catch', err)\r\n vo.$alert(`發生非預期錯誤,請洽管理員`, { type: 'error' })\r\n })\r\n .finally(() => {\r\n\r\n //hide loading\r\n vo.$ui.updateLoading(false)\r\n\r\n })\r\n\r\n },\r\n\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n</style>\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LayoutContentGroups.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LayoutContentGroups.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LayoutContentGroups.vue?vue&type=template&id=84acbe94&scoped=true&\"\nimport script from \"./LayoutContentGroups.vue?vue&type=script&lang=js&\"\nexport * from \"./LayoutContentGroups.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"84acbe94\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"domresize\",rawName:\"v-domresize\"}],staticStyle:{\"height\":\"100%\"},attrs:{\"changeUsers\":_vm.changeUsers},on:{\"domresize\":_vm.resizePanel}},[_c('div',{directives:[{name:\"domresize\",rawName:\"v-domresize\"}],staticStyle:{\"border-bottom\":\"1px solid #ddd\"},on:{\"domresize\":_vm.resizeHead}},[_c('div',{staticStyle:{\"padding\":\"30px 25px 0px 20px\",\"background\":\"#fff\"}},[_c('div',{staticStyle:{\"padding\":\"5px 15px 5px 5px\",\"display\":\"inline-block\",\"border-bottom\":\"3px solid #FF9100\"}},[_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\"}},[_c('WIcon',{attrs:{\"icon\":_vm.mdiAccountGroupOutline,\"color\":'#FF9800'}}),_c('div',{staticStyle:{\"padding-left\":\"10px\",\"font-size\":\"1.3rem\",\"color\":\"#d3912c\"}},[_vm._v(\" 使用者權限 \")])],1)])]),_c('div',{staticStyle:{\"background\":\"#fff\"}},[_c('div',{staticStyle:{\"padding\":\"20px 20px 15px 20px\",\"background\":\"#fff\"}},[_c('div',{staticStyle:{\"display\":\"flex\"}},[_c('WSwitch',{attrs:{\"text\":'是否編輯',\"checkedSwitchCircleColor\":'#D81B60',\"checkedSwitchCircleColorHover\":'#f26',\"checkedSwitchBarColor\":'#F8BBD0',\"checkedSwitchBarColorHover\":'#F8BBD0'},model:{value:(_vm.isOperatable),callback:function ($$v) {_vm.isOperatable=$$v},expression:\"isOperatable\"}})],1),(_vm.isOperatable)?_c('div',{staticStyle:{\"padding-top\":\"5px\",\"font-size\":\"0.8rem\",\"_color\":\"#f26\"}},[_c('div',{staticStyle:{\"padding\":\"3px 0px\"}},[_vm._v(\" 1. 請依照使用者身份給予適合之權限群組。 \")]),_c('div',{staticStyle:{\"padding\":\"3px 0px\"}},[_vm._v(\" 2. 請確認新增使用者為核可之使用者。 \")])]):_vm._e()]),(_vm.isModified)?_c('div',{staticStyle:{\"padding\":\"10px 10px 12px 10px\",\"border-top\":\"1px solid #F48FB1\",\"border-bottom\":\"1px solid #F48FB1\",\"background\":\"#FCE4EC\",\"display\":\"flex\",\"align-items\":\"center\",\"justify-content\":\"flex-end\"}},[_c('WButtonChip',{attrs:{\"paddingStyle\":{v:0,h:11},\"text\":'儲存變更',\"icon\":_vm.mdiCloudUploadOutline,\"backgroundColor\":'rgba(255,0,50,0.7)',\"backgroundColorHover\":'rgba(255,0,50,0.8)',\"textColor\":'#eee',\"textColorHover\":'#fff',\"iconColor\":'#eee',\"iconColorHover\":'#fff'},on:{\"click\":_vm.saveGroups}})],1):_vm._e()])]),(!_vm.firstLoading)?_c('div',{style:(`padding:${_vm.spacePading}px;`)},[_c('div',{staticStyle:{\"background\":\"#fff\",\"box-shadow\":\"0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12)\"}},[_c('div',{directives:[{name:\"domresize\",rawName:\"v-domresize\"}],staticStyle:{\"padding\":\"20px\",\"display\":\"flex\",\"align-items\":\"center\",\"border-bottom\":\"3px solid #ddd\"},on:{\"domresize\":_vm.resizeGroupInfor}},[_c('div',{staticStyle:{\"color\":\"#666\",\"font-size\":\"1.1rem\"}},[_vm._v(\" 使用者分類清單 \")]),(_vm.isOperatable)?[_c('div',{staticStyle:{\"padding-left\":\"10px\"}}),_c('WButtonChip',{attrs:{\"paddingStyle\":{v:0,h:11},\"text\":'新增使用者',\"icon\":_vm.mdiAccountPlusOutline,\"backgroundColor\":'rgba(255,0,50,0.7)',\"backgroundColorHover\":'rgba(255,0,50,0.8)',\"textColor\":'#eee',\"textColorHover\":'#fff',\"iconColor\":'#eee',\"iconColorHover\":'#fff'},on:{\"click\":_vm.clickAddUser}})]:_vm._e()],2),_c('WPanelScrolly',{style:(`height:${_vm.usersGroupsHeight}px; _overflow-y:auto;`)},[_c('div',{staticStyle:{\"padding\":\"10px\"}},_vm._l((_vm.usersGroups),function(us,kus){return _c('div',{key:'kus:'+kus,staticStyle:{\"padding\":\"10px\"}},[_c('div',{staticStyle:{\"padding-bottom\":\"5px\",\"display\":\"flex\",\"align-items\":\"center\",\"border-bottom\":\"1px dashed #ddd\"}},[_c('div',{staticStyle:{\"padding-right\":\"5px\",\"color\":\"#888\",\"font-size\":\"0.8rem\"}},[_vm._v(\" 來源: \")]),_c('div',{staticStyle:{\"color\":\"#000\",\"font-size\":\"0.8rem\"}},[_vm._v(\" \"+_vm._s(_vm.getFrom(kus))+\" \")])]),_c('div',{staticStyle:{\"padding-top\":\"10px\"}},_vm._l((us),function(u,ku){return _c('div',{key:'ku:'+ku,staticStyle:{\"display\":\"inline-block\",\"margin\":\"0px 10px 10px 0px\"}},[_c('WButtonChip',{attrs:{\"text\":u.name,\"paddingStyle\":{\n v: u.isVirtual!=='y' ? 2 : 4,\n h: 12,\n },\"icon\":_vm.getIsAdmin(u)?_vm.mdiChessRook:'',\"backgroundColor\":_vm.getIsNotActive(u)?'rgba(130,130,130,0.8)':_vm.getIsAdmin(u)?'rgba(216, 27, 96, 0.8)':'rgba(50,110,230,0.8)',\"backgroundColorHover\":_vm.getIsNotActive(u)?'rgba(130,130,130,0.9)':_vm.getIsAdmin(u)?'rgba(216, 27, 96, 0.9)':'rgba(50,110,230,0.9)',\"textColor\":'#eee',\"textColorHover\":'#fff',\"iconColor\":'#eee',\"iconColorHover\":'#fff',\"close\":_vm.isOperatable?(u.isVirtual!=='y'):false},on:{\"click\":function($event){return _vm.clickEditUser(u)},\"click-close\":function($event){return _vm.clickRemoveUser(u)}}})],1)}),0)])}),0)])],1)]):_c('div',{staticStyle:{\"padding\":\"10px 15px\",\"font-size\":\"0.8rem\"}},[_vm._v(\" 載入中... \")])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div\r\n style=\"height:100%;\"\r\n v-domresize\r\n @domresize=\"resizePanel\"\r\n :changeUsers=\"changeUsers\"\r\n >\r\n\r\n <div\r\n style=\"border-bottom:1px solid #ddd;\"\r\n v-domresize\r\n @domresize=\"resizeHead\"\r\n >\r\n\r\n <!-- 標題區 -->\r\n <div style=\"padding:30px 25px 0px 20px; background:#fff;\">\r\n <div style=\"padding:5px 15px 5px 5px; display:inline-block; border-bottom:3px solid #FF9100;\">\r\n <div style=\"display:flex; align-items:center;\">\r\n\r\n <WIcon\r\n :icon=\"mdiAccountGroupOutline\"\r\n :color=\"'#FF9800'\"\r\n ></WIcon>\r\n\r\n <div style=\"padding-left:10px; font-size:1.3rem; color:#d3912c;\">\r\n 使用者權限\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- 編輯設定區 -->\r\n <div style=\"background:#fff;\">\r\n\r\n <div style=\"padding:20px 20px 15px 20px; background:#fff;\">\r\n\r\n <div style=\"display:flex;\">\r\n <WSwitch\r\n :text=\"'是否編輯'\"\r\n :checkedSwitchCircleColor=\"'#D81B60'\"\r\n :checkedSwitchCircleColorHover=\"'#f26'\"\r\n :checkedSwitchBarColor=\"'#F8BBD0'\"\r\n :checkedSwitchBarColorHover=\"'#F8BBD0'\"\r\n v-model=\"isOperatable\"\r\n ></WSwitch>\r\n </div>\r\n\r\n <div style=\"padding-top:5px; font-size:0.8rem; _color:#f26;\" v-if=\"isOperatable\">\r\n <div style=\"padding:3px 0px;\">\r\n 1. 請依照使用者身份給予適合之權限群組。\r\n </div>\r\n <div style=\"padding:3px 0px;\">\r\n 2. 請確認新增使用者為核可之使用者。\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div\r\n style=\"padding:10px 10px 12px 10px; border-top:1px solid #F48FB1; border-bottom:1px solid #F48FB1; background:#FCE4EC; display:flex; align-items:center; justify-content:flex-end;\"\r\n v-if=\"isModified\"\r\n >\r\n\r\n <WButtonChip\r\n :paddingStyle=\"{v:0,h:11}\"\r\n :text=\"'儲存變更'\"\r\n :icon=\"mdiCloudUploadOutline\"\r\n :backgroundColor=\"'rgba(255,0,50,0.7)'\"\r\n :backgroundColorHover=\"'rgba(255,0,50,0.8)'\"\r\n :textColor=\"'#eee'\"\r\n :textColorHover=\"'#fff'\"\r\n :iconColor=\"'#eee'\"\r\n :iconColorHover=\"'#fff'\"\r\n @click=\"saveGroups\"\r\n ></WButtonChip>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div :style=\"`padding:${spacePading}px;`\" v-if=\"!firstLoading\">\r\n\r\n <div style=\"background:#fff; box-shadow:0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12);\">\r\n\r\n <div\r\n style=\"padding:20px; display:flex; align-items:center; border-bottom:3px solid #ddd;\"\r\n v-domresize\r\n @domresize=\"resizeGroupInfor\"\r\n >\r\n\r\n <div style=\"color:#666; font-size:1.1rem;\">\r\n 使用者分類清單\r\n </div>\r\n\r\n <template v-if=\"isOperatable\">\r\n\r\n <div style=\"padding-left:10px;\"></div>\r\n\r\n <WButtonChip\r\n :paddingStyle=\"{v:0,h:11}\"\r\n :text=\"'新增使用者'\"\r\n :icon=\"mdiAccountPlusOutline\"\r\n :backgroundColor=\"'rgba(255,0,50,0.7)'\"\r\n :backgroundColorHover=\"'rgba(255,0,50,0.8)'\"\r\n :textColor=\"'#eee'\"\r\n :textColorHover=\"'#fff'\"\r\n :iconColor=\"'#eee'\"\r\n :iconColorHover=\"'#fff'\"\r\n @click=\"clickAddUser\"\r\n ></WButtonChip>\r\n\r\n </template>\r\n\r\n </div>\r\n\r\n <WPanelScrolly\r\n :style=\"`height:${usersGroupsHeight}px; _overflow-y:auto;`\"\r\n >\r\n <div style=\"padding:10px;\">\r\n\r\n <div\r\n style=\"padding:10px;\"\r\n :key=\"'kus:'+kus\"\r\n v-for=\"(us,kus) in usersGroups\"\r\n >\r\n\r\n <div style=\"padding-bottom:5px; display:flex; align-items:center; border-bottom:1px dashed #ddd;\">\r\n <div style=\"padding-right:5px; color:#888; font-size:0.8rem;\">\r\n 來源:\r\n </div>\r\n <div style=\"color:#000; font-size:0.8rem;\">\r\n {{getFrom(kus)}}\r\n </div>\r\n </div>\r\n\r\n <div style=\"padding-top:10px;\">\r\n\r\n <div\r\n style=\"display:inline-block; margin:0px 10px 10px 0px;\"\r\n :key=\"'ku:'+ku\"\r\n v-for=\"(u,ku) in us\"\r\n >\r\n\r\n <WButtonChip\r\n :text=\"u.name\"\r\n :paddingStyle=\"{\r\n v: u.isVirtual!=='y' ? 2 : 4,\r\n h: 12,\r\n }\"\r\n :icon=\"getIsAdmin(u)?mdiChessRook:''\"\r\n :backgroundColor=\"getIsNotActive(u)?'rgba(130,130,130,0.8)':getIsAdmin(u)?'rgba(216, 27, 96, 0.8)':'rgba(50,110,230,0.8)'\"\r\n :backgroundColorHover=\"getIsNotActive(u)?'rgba(130,130,130,0.9)':getIsAdmin(u)?'rgba(216, 27, 96, 0.9)':'rgba(50,110,230,0.9)'\"\r\n :textColor=\"'#eee'\"\r\n :textColorHover=\"'#fff'\"\r\n :iconColor=\"'#eee'\"\r\n :iconColorHover=\"'#fff'\"\r\n :close=\"isOperatable?(u.isVirtual!=='y'):false\"\r\n @click=\"clickEditUser(u)\"\r\n @click-close=\"clickRemoveUser(u)\"\r\n ></WButtonChip>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </WPanelScrolly>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div style=\"padding:10px 15px; font-size:0.8rem;\" v-else>\r\n 載入中...\r\n </div>\r\n\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mdiAccountGroupOutline, mdiAccountPlusOutline, mdiCheckboxMarkedCircle, mdiChessRook } from '@mdi/js/mdi.js'\r\nimport get from 'lodash/get'\r\nimport each from 'lodash/each'\r\nimport keys from 'lodash/keys'\r\nimport sortBy from 'lodash/sortBy'\r\nimport find from 'lodash/find'\r\nimport size from 'lodash/size'\r\nimport groupBy from 'lodash/groupBy'\r\nimport genID from 'wsemi/src/genID.mjs'\r\nimport isestr from 'wsemi/src/isestr.mjs'\r\nimport iseobj from 'wsemi/src/iseobj.mjs'\r\nimport waitFun from 'wsemi/src/waitFun.mjs'\r\nimport WIcon from 'w-component-vue/src/components/WIcon.vue'\r\nimport WButtonChip from 'w-component-vue/src/components/WButtonChip.vue'\r\nimport WSwitch from 'w-component-vue/src/components/WSwitch.vue'\r\nimport WPanelScrolly from 'w-component-vue/src/components/WPanelScrolly.vue'\r\n\r\n\r\nexport default {\r\n components: {\r\n WIcon,\r\n WButtonChip,\r\n WSwitch,\r\n WPanelScrolly,\r\n },\r\n props: {\r\n },\r\n data: function() {\r\n return {\r\n mdiAccountGroupOutline,\r\n mdiAccountPlusOutline,\r\n mdiCheckboxMarkedCircle,\r\n mdiChessRook,\r\n\r\n panelWidth: 100,\r\n panelHeight: 100,\r\n headHeight: 100,\r\n groupInforHeight: 100,\r\n\r\n firstLoading: true,\r\n isOperatable: false,\r\n isModified: false,\r\n\r\n pickGroupId: '',\r\n\r\n }\r\n },\r\n computed: {\r\n\r\n users: function() {\r\n return get(this, `$store.state.users`)\r\n },\r\n\r\n usersGroups: function() {\r\n let gs = groupBy(this.users, 'from')\r\n let ks = keys(gs)\r\n ks = sortBy(ks)\r\n let gsTemp = {}\r\n each(ks, (k) => {\r\n gsTemp[k] = gs[k]\r\n })\r\n gs = gsTemp\r\n return gs\r\n },\r\n\r\n changeUsers: function() {\r\n // console.log('computed changeUsers')\r\n\r\n let vo = this\r\n\r\n //check\r\n if (size(vo.users) === 0) {\r\n return ''\r\n }\r\n\r\n //firstLoading\r\n vo.firstLoading = false\r\n\r\n return ''\r\n },\r\n\r\n spacePading: function() {\r\n let vo = this\r\n if (vo.panelWidth < 400) {\r\n return 0\r\n }\r\n else if (vo.panelWidth < 800) {\r\n return 10\r\n }\r\n return 20\r\n },\r\n\r\n usersGroupsHeight: function() {\r\n let vo = this\r\n\r\n //h\r\n let h = vo.panelHeight - vo.headHeight - 2 * vo.spacePading - vo.groupInforHeight\r\n h = Math.max(h, 0)\r\n\r\n return h\r\n },\r\n\r\n },\r\n methods: {\r\n\r\n resizePanel: function(msg) {\r\n // console.log('methods resizePanel', msg)\r\n\r\n let vo = this\r\n\r\n //panelWidth, panelHeight\r\n vo.panelWidth = msg.snew.offsetWidth\r\n vo.panelHeight = msg.snew.offsetHeight\r\n\r\n },\r\n\r\n resizeHead: function(msg) {\r\n // console.log('methods resizeHead', msg)\r\n\r\n let vo = this\r\n\r\n //headHeight\r\n vo.headHeight = msg.snew.offsetHeight\r\n\r\n },\r\n\r\n resizeGroupInfor: function(msg) {\r\n // console.log('methods resizeGroupInfor', msg)\r\n\r\n let vo = this\r\n\r\n //groupInforHeight\r\n vo.groupInforHeight = msg.snew.offsetHeight\r\n\r\n },\r\n\r\n getFrom: function(kus) {\r\n // console.log('methods getFrom', kus)\r\n if (!isestr(kus)) {\r\n kus = '無'\r\n }\r\n return kus\r\n },\r\n\r\n getIsAdmin: function(u) {\r\n return get(u, 'isAdmin') === 'y'\r\n },\r\n\r\n getIsNotActive: function(u) {\r\n return get(u, 'isActive') === 'n'\r\n },\r\n\r\n clickAddUser: function() {\r\n // console.log('methods clickAddUser')\r\n\r\n let vo = this\r\n\r\n async function core() {\r\n let errTemp = null\r\n\r\n //show loading\r\n vo.$ui.updateLoading(true)\r\n\r\n //u\r\n let u = {\r\n id: genID(),\r\n name: '新使用者',\r\n from: '',\r\n isVirtual: 'n', //新增使用者代表為權限使用者, 故非虛擬使用者\r\n isAdmin: 'n',\r\n isActive: 'y',\r\n }\r\n\r\n //save\r\n await vo.$fapi.users.insert(u)\r\n .catch((err) => {\r\n errTemp = err\r\n })\r\n\r\n //check\r\n if (errTemp !== null) {\r\n vo.$alert(`新增權限群組失敗: ${errTemp}`, { type: 'error' })\r\n }\r\n\r\n //un\r\n let un = null\r\n await waitFun(() => {\r\n un = find(vo.users, { id: u.id })\r\n return iseobj(un) //確認g.id已存在\r\n })\r\n // console.log('un', un)\r\n\r\n //showVeUser\r\n vo.$dg.showVeUser(un)\r\n .catch(() => {})\r\n\r\n //alert\r\n vo.$alert(`新增使用者成功`)\r\n\r\n }\r\n\r\n //core\r\n core()\r\n // .then((res) => {\r\n // console.log('then', res)\r\n // })\r\n .catch((err) => {\r\n console.log('catch', err)\r\n vo.$alert(`發生非預期錯誤,請洽管理員`, { type: 'error' })\r\n })\r\n .finally(() => {\r\n\r\n //hide loading\r\n vo.$ui.updateLoading(false)\r\n\r\n })\r\n\r\n },\r\n\r\n clickRemoveUser: function(u) {\r\n // console.log('methods clickRemoveUser', u)\r\n\r\n let vo = this\r\n\r\n async function core() {\r\n let errTemp = null\r\n\r\n //showCheckYesNo\r\n let bExit = false\r\n await vo.$dg.showCheckYesNo(`確認是否刪除使用者「${u.name}」?`)\r\n .catch(() => {\r\n bExit = true\r\n })\r\n if (bExit) {\r\n return\r\n }\r\n\r\n //show loading\r\n vo.$ui.updateLoading(true)\r\n\r\n //save\r\n await vo.$fapi.users.del(u)\r\n .catch((err) => {\r\n errTemp = err\r\n })\r\n\r\n //check\r\n if (errTemp !== null) {\r\n vo.$alert(`刪除使用者失敗: ${errTemp}`, { type: 'error' })\r\n return\r\n }\r\n\r\n //un\r\n let un = null\r\n await waitFun(() => {\r\n un = find(vo.users, (v) => {\r\n return v.id === u.id && v.isVirtual !== 'y' //找到id, 且不能為虛擬使用者, 才能代表已刪除\r\n })\r\n return !iseobj(un) //確認g.id已不存在\r\n })\r\n // console.log('un', un)\r\n\r\n //alert\r\n vo.$alert(`刪除使用者成功`)\r\n\r\n }\r\n\r\n //core\r\n core()\r\n // .then((res) => {\r\n // console.log('then', res)\r\n // })\r\n .catch((err) => {\r\n console.log('catch', err)\r\n vo.$alert(`發生非預期錯誤,請洽管理員`, { type: 'error' })\r\n })\r\n .finally(() => {\r\n\r\n //hide loading\r\n vo.$ui.updateLoading(false)\r\n\r\n })\r\n\r\n },\r\n\r\n clickEditUser: function(u) {\r\n // console.log('clickEditGroup', u)\r\n\r\n let vo = this\r\n\r\n //check\r\n if (!vo.isOperatable) {\r\n vo.$alert(`非編輯模式無法查閱使用者詳細資訊`, { type: 'error' })\r\n return\r\n }\r\n\r\n //showVeUser\r\n vo.$dg.showVeUser(u)\r\n .catch(() => {})\r\n\r\n },\r\n\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n</style>\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LayoutContentUsers.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LayoutContentUsers.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LayoutContentUsers.vue?vue&type=template&id=52290ea5&scoped=true&\"\nimport script from \"./LayoutContentUsers.vue?vue&type=script&lang=js&\"\nexport * from \"./LayoutContentUsers.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"52290ea5\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <div\r\n style=\"height:100%; width:100%;\"\r\n v-domresize\r\n @domresize=\"resize\"\r\n >\r\n\r\n <template v-if=\"syncState\">\r\n\r\n <WDrawer\r\n :style=\"`height:${panelHeight}px; width:100%;`\"\r\n v-model=\"drawer\"\r\n :drawerWidth.sync=\"drawerWidth\"\r\n :drawerWidthMin=\"drawerWidthMin\"\r\n :drawerWidthMax=\"drawerWidthMax\"\r\n :mode=\"'from-left'\"\r\n :afloat=\"drawerAfloat\"\r\n :dragDrawerWidth=\"true\"\r\n >\r\n\r\n <template v-slot:drawer=\"props\">\r\n\r\n <!-- 因drawer內部resize觸發可能不足或有容許誤差, 使用props.height可能會有多1px情形, 導致出現垂直捲軸 -->\r\n <div :style=\"`height:${panelHeight}px; background:#fff; position:relative;`\">\r\n\r\n <WListVertical\r\n style=\"height:100%;\"\r\n :items=\"menus\"\r\n :itemActive=\"menuActive\"\r\n :item-text-color=\"'#222'\"\r\n :item-text-color-hover=\"'#444'\"\r\n :item-text-color-active=\"'#EF6C00'\"\r\n :item-icon-color=\"'#222'\"\r\n :item-icon-color-hover=\"'#444'\"\r\n :item-icon-color-active=\"'#EF6C00'\"\r\n :item-background-color=\"'#fff'\"\r\n :item-background-color-hover=\"'#f2f2f2'\"\r\n :item-background-color-active=\"'#FFF3E0'\"\r\n :paddingStyle=\"{v:15,h:15}\"\r\n @click=\"(menu)=>{menuKey=menu.key}\"\r\n ></WListVertical>\r\n\r\n <div\r\n :style=\"`position:absolute; top:1px; right:4px;`\"\r\n v-if=\"drawer\"\r\n >\r\n <WButtonCircle\r\n :paddingStyle=\"{v:3,h:3}\"\r\n :icon=\"'mdi-arrow-left'\"\r\n :iconSize=\"16\"\r\n :backgroundColor=\"'#fff'\"\r\n :backgroundColorHover=\"'#eee'\"\r\n :backgroundColorFocus=\"'#fff'\"\r\n :borderColor=\"'transparent'\"\r\n :borderColorHover=\"'#eee'\"\r\n :borderColorFocus=\"'#eee'\"\r\n :tooltip=\"$t('menuTreeHide')\"\r\n :shadow=\"true\"\r\n @click=\"drawer=false\"\r\n ></WButtonCircle>\r\n </div>\r\n\r\n </div>\r\n\r\n </template>\r\n\r\n <template v-slot:content=\"props\">\r\n <!-- 因drawer內部resize觸發可能不足或有容許誤差, 使用props.height可能會有多1px情形, 導致出現垂直捲軸 -->\r\n <div :style=\"`height:${panelHeight}px; width:${props.width}px; position:relative;`\">\r\n\r\n <template>\r\n\r\n <LayoutContentTargets\r\n v-if=\"menuKey==='blocks'\"\r\n ></LayoutContentTargets>\r\n\r\n <LayoutContentGroups\r\n v-if=\"menuKey==='groups'\"\r\n ></LayoutContentGroups>\r\n\r\n <LayoutContentUsers\r\n v-if=\"menuKey==='users'\"\r\n ></LayoutContentUsers>\r\n\r\n </template>\r\n\r\n <div\r\n :style=\"`position:absolute; top:1px; left:4px;`\"\r\n v-if=\"!drawer\"\r\n >\r\n <WButtonCircle\r\n :paddingStyle=\"{v:3,h:3}\"\r\n :icon=\"'mdi-arrow-right'\"\r\n :iconSize=\"16\"\r\n :backgroundColor=\"'#fff'\"\r\n :backgroundColorHover=\"'#eee'\"\r\n :backgroundColorFocus=\"'#fff'\"\r\n :borderColor=\"'transparent'\"\r\n :borderColorHover=\"'#eee'\"\r\n :borderColorFocus=\"'#eee'\"\r\n :tooltip=\"$t('menuTreeShow')\"\r\n :shadow=\"true\"\r\n @click=\"drawer=true\"\r\n ></WButtonCircle>\r\n </div>\r\n\r\n </div>\r\n </template>\r\n\r\n </WDrawer>\r\n\r\n </template>\r\n\r\n <template v-else>\r\n <div\r\n style=\"padding:20px; font-size:0.9rem;\"\r\n >\r\n {{$t('waitingData')}}\r\n </div>\r\n </template>\r\n\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mdiGamepadCircle, mdiStackOverflow, mdiAccountGroupOutline, mdiBallotRecountOutline } from '@mdi/js/mdi.js'\r\nimport get from 'lodash/get'\r\n// import map from 'lodash/map'\r\n// import each from 'lodash/each'\r\n// import cloneDeep from 'lodash/cloneDeep'\r\n// import pmSeries from 'wsemi/src/pmSeries.mjs'\r\nimport WDrawer from 'w-component-vue/src/components/WDrawer.vue'\r\nimport WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'\r\nimport WListVertical from 'w-component-vue/src/components/WListVertical.vue'\r\nimport LayoutContentTargets from './LayoutContentTargets.vue'\r\nimport LayoutContentGroups from './LayoutContentGroups.vue'\r\nimport LayoutContentUsers from './LayoutContentUsers.vue'\r\n\r\n\r\nexport default {\r\n components: {\r\n WDrawer,\r\n WButtonCircle,\r\n WListVertical,\r\n LayoutContentTargets,\r\n LayoutContentGroups,\r\n LayoutContentUsers,\r\n },\r\n props: {\r\n // menuKey: {\r\n // type: String,\r\n // default: '',\r\n // },\r\n },\r\n data: function() {\r\n let menus = [\r\n {\r\n key: 'blocks',\r\n text: '管理區塊',\r\n icon: mdiGamepadCircle,\r\n },\r\n {\r\n key: 'groups',\r\n text: '權限群組',\r\n icon: mdiStackOverflow,\r\n },\r\n {\r\n key: 'users',\r\n text: '使用者權限',\r\n icon: mdiAccountGroupOutline,\r\n },\r\n // {\r\n // key: 'logs',\r\n // text: '事件紀錄',\r\n // icon: mdiBallotRecountOutline,\r\n // },\r\n ]\r\n return {\r\n\r\n menuKey: 'blocks',\r\n menus,\r\n menuActive: menus[0],\r\n\r\n panelWidth: 0,\r\n panelWidthTemp: 0,\r\n panelHeight: 0,\r\n\r\n drawer: true,\r\n drawerAfloat: false,\r\n drawerWidth: 180,\r\n drawerWidthMin: 150,\r\n drawerWidthMax: 300,\r\n\r\n }\r\n },\r\n computed: {\r\n\r\n syncState: function() {\r\n return get(this, '$store.state.syncState')\r\n },\r\n\r\n },\r\n methods: {\r\n\r\n resize: function(msg) {\r\n // console.log('methods resize', msg)\r\n\r\n let vo = this\r\n\r\n //save\r\n vo.panelWidth = msg.snew.clientWidth\r\n vo.panelHeight = msg.snew.clientHeight\r\n // console.log('vo.panelHeight', vo.panelHeight)\r\n\r\n //modeResize\r\n let modeResize = '' //寬度可能相同故得有預設空字串的種類\r\n if (vo.panelWidth > vo.panelWidthTemp) {\r\n modeResize = 'toLarge'\r\n }\r\n else if (vo.panelWidth < vo.panelWidthTemp) {\r\n modeResize = 'toSmall'\r\n }\r\n // console.log('modeResize', modeResize, vo.panelWidth, vo.panelWidthTemp)\r\n\r\n //drawer\r\n if (vo.drawer && modeResize === 'toSmall' && vo.panelWidth < 1.7 * vo.drawerWidthMax) { //已開啟抽屜且為變窄時才偵測\r\n vo.drawer = false\r\n }\r\n else if (!vo.drawer && modeResize === 'toLarge' && vo.panelWidth >= 1.7 * vo.drawerWidthMax) { //已隱藏抽屜且為變寬時才偵測\r\n vo.drawer = true\r\n }\r\n\r\n //drawerAfloat\r\n vo.drawerAfloat = vo.panelWidth < 1.7 * vo.drawerWidthMax\r\n\r\n //save\r\n vo.panelWidthTemp = vo.panelWidth\r\n\r\n },\r\n\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n</style>\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LayoutContent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LayoutContent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LayoutContent.vue?vue&type=template&id=393791a9&scoped=true&\"\nimport script from \"./LayoutContent.vue?vue&type=script&lang=js&\"\nexport * from \"./LayoutContent.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"393791a9\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <div style=\"height:100vh; background:#f5f5f5;\">\r\n\r\n <!-- menu top, 因窄版導致名稱換行故須使用overflow-y:hidden -->\r\n <div :style=\"`height:${heightToolbar}px; overflow-y:hidden; padding:0px 10px; background:#fff; border-bottom:1px solid #ccc; display:flex; align-items:center;`\">\r\n\r\n <WButtonCircle\r\n :icon=\"'mdi-menu'\"\r\n :tooltip=\"'左側選單'\"\r\n :shadow=\"false\"\r\n @click=\"drawer=!drawer\"\r\n v-if=\"false\"\r\n ></WButtonCircle>\r\n\r\n <div style=\"padding-left:5px; white-space:nowrap\">\r\n <div style=\"display:flex; align-items:center;\">\r\n\r\n <div style=\"padding-right:10px; display:flex; align-items:center;\" v-if=\"webLogo\">\r\n <img style=\"width:36px; height:36px;\" :src=\"webLogo\" />\r\n </div>\r\n\r\n <div>\r\n <div style=\"font-size:1.2rem; color:#000;\">{{webName}}</div>\r\n <div style=\"font-size:0.8rem; color:#666;\">{{$t('webDescription')}}</div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div style=\"width:100%;\"></div>\r\n\r\n <div style=\"padding-right:10px; white-space:nowrap\">\r\n <WTextSelect\r\n style=\"width:100px;\"\r\n :items=\"tgLangs\"\r\n v-model=\"tgLangSelect\"\r\n @input=\"changeLang\"\r\n ></WTextSelect>\r\n </div>\r\n\r\n </div>\r\n\r\n <div :style=\"`height:calc( 100% - ${heightToolbar}px );`\">\r\n <LayoutContent\r\n ></LayoutContent>\r\n </div>\r\n\r\n\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { mdiMenu } from '@mdi/js/mdi.js'\r\nimport get from 'lodash/get'\r\n// import cloneDeep from 'lodash/cloneDeep'\r\nimport isestr from 'wsemi/src/isestr.mjs'\r\nimport WTextSelect from 'w-component-vue/src/components/WTextSelect.vue'\r\nimport WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'\r\nimport LayoutContent from './LayoutContent.vue'\r\n\r\n\r\nexport default {\r\n components: {\r\n WTextSelect,\r\n WButtonCircle,\r\n LayoutContent,\r\n },\r\n props: {\r\n },\r\n data: function() {\r\n return {\r\n\r\n mdiMenu,\r\n // drawer: null, //null false\r\n // menuKey: 'blocks',\r\n userName: 'tester',\r\n\r\n drawer: true, //null,\r\n\r\n tgLangs: [\r\n {\r\n id: 'cht',\r\n text: '中文',\r\n },\r\n {\r\n id: 'eng',\r\n text: 'English',\r\n },\r\n ],\r\n tgLangSelect: {\r\n id: 'cht',\r\n text: '中文',\r\n },\r\n\r\n }\r\n },\r\n beforeMount: function() {\r\n // console.log('beforeMount')\r\n\r\n let vo = this\r\n\r\n //setLang\r\n vo.$ui.setLang(vo.tgLangSelect.id)\r\n\r\n },\r\n computed: {\r\n\r\n viewState: function() {\r\n return get(this, `$store.state.viewState`)\r\n },\r\n\r\n heightToolbar: function() {\r\n return get(this, `$store.state.heightToolbar`)\r\n },\r\n\r\n webName: {\r\n get() {\r\n let vo = this\r\n let c = vo.$t('webName')\r\n // console.log('get webName1', c)\r\n if (!isestr(c)) {\r\n c = vo.$t('waitingData')\r\n }\r\n // console.log('get webName2', c)\r\n document.title = c //更換網頁title\r\n return c\r\n },\r\n // set(value) {\r\n // return value\r\n // },\r\n },\r\n\r\n webLogo: function() {\r\n return get(this, `$store.state.webInfor.webLogo`)\r\n },\r\n\r\n },\r\n methods: {\r\n\r\n changeLang: function(msg) {\r\n // console.log('methods changeLang', msg)\r\n let vo = this\r\n let lang = msg.id\r\n vo.$ui.setLang(lang)\r\n },\r\n\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n</style>\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Layout.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Layout.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Layout.vue?vue&type=template&id=4f4ea7ec&scoped=true&\"\nimport script from \"./Layout.vue?vue&type=script&lang=js&\"\nexport * from \"./Layout.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f4ea7ec\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('WDialog',{attrs:{\"show\":_vm.bShow,\"icon\":_vm.mdiAccountEdit,\"_maxWidth\":\"1200\",\"_minWidth\":\"1200\",\"fullscreen\":true,\"title\":'編修使用者',\"save-btn-tooltip\":'儲存',\"close-btn-tooltip\":'關閉'},on:{\"update:show\":function($event){_vm.bShow=$event},\"click-save\":_vm.clickSave,\"click-close\":_vm.clickClose,\"resize\":_vm.resize},scopedSlots:_vm._u([{key:\"content\",fn:function(){return [_c('div',{staticStyle:{\"min-height\":\"400px\"}},[_c('div',{staticStyle:{\"padding-top\":\"20px\"}}),_c('div',{staticStyle:{\"padding\":\"0px 20px 20px 20px\",\"display\":\"flex\",\"align-items\":\"center\"}},[_c('div',{staticStyle:{\"padding-right\":\"10px\",\"color\":\"#777\",\"white-space\":\"nowrap\"}},[_vm._v(\"使用者姓名:\")]),_c('WText',{staticStyle:{\"width\":\"100%\"},model:{value:(_vm.u.name),callback:function ($$v) {_vm.$set(_vm.u, \"name\", $$v)},expression:\"u.name\"}})],1),_c('div',{staticStyle:{\"padding\":\"0px 20px 20px 20px\",\"display\":\"flex\",\"align-items\":\"center\"}},[_c('div',{staticStyle:{\"padding-right\":\"10px\",\"color\":\"#777\",\"white-space\":\"nowrap\"}},[_vm._v(\"電子郵件:\")]),_c('WText',{staticStyle:{\"width\":\"100%\"},model:{value:(_vm.u.email),callback:function ($$v) {_vm.$set(_vm.u, \"email\", $$v)},expression:\"u.email\"}})],1),_c('div',{staticStyle:{\"padding\":\"0px 20px 20px 20px\",\"display\":\"flex\",\"align-items\":\"center\"}},[_c('div',{staticStyle:{\"padding-right\":\"10px\",\"color\":\"#777\",\"white-space\":\"nowrap\"}},[_vm._v(\"來源:\")]),_c('WTextSuggest',{staticStyle:{\"width\":\"200px\"},attrs:{\"noResultsText\":'無',\"items\":_vm.userFroms},model:{value:(_vm.u.from),callback:function ($$v) {_vm.$set(_vm.u, \"from\", $$v)},expression:\"u.from\"}})],1),_c('div',{staticStyle:{\"padding-top\":\"20px\",\"border-top\":\"1px solid #ddd\"}}),_c('div',{staticStyle:{\"padding\":\"0px 20px 20px 20px\"}},[_c('div',{staticStyle:{\"padding-bottom\":\"5px\",\"color\":\"#777\",\"white-space\":\"nowrap\"}},[_vm._v(\"隸屬權限群組:\")]),_vm._l((_vm.groups),function(g,kg){return _c('div',{key:kg,staticStyle:{\"display\":\"inline-block\",\"padding\":\"0px 15px 15px 0px\"}},[_c('div',{staticStyle:{\"padding\":\"3px 15px 3px 0px\",\"_border-radius\":\"30px\",\"_border\":\"1px dashed #aaa\",\"display\":\"flex\",\"align-content\":\"center\"}},[_c('WCheckbox',{attrs:{\"value\":_vm.kpugs[g.id],\"_checkedIconColor\":\"'rgba(200,70,20,0.8)'\",\"_uncheckedIconColor\":\"'rgba(200,70,20,0.8)'\"},on:{\"input\":(v)=>{_vm.modifyUserRuleGroupsIds(g.id,v)}}}),_c('div',[_vm._v(\" \"+_vm._s(g.name)+\" \")])],1)])}),_c('div',{staticStyle:{\"padding-bottom\":\"5px\",\"color\":\"#777\",\"white-space\":\"nowrap\"}},[_vm._v(\"使用者可用區塊:\")]),_c('div',{staticStyle:{\"border\":\"1px dashed #f26\",\"background\":\"rgba(255,50,100,0.05)\"}},[_c('ruleGroup',{attrs:{\"height\":600,\"group\":_vm.mergedGroup,\"showHead\":false,\"editable\":false}})],1)],2),_c('div',{staticStyle:{\"padding-top\":\"20px\",\"border-top\":\"1px solid #ddd\"}}),_c('div',{staticStyle:{\"padding\":\"0px 20px 20px 20px\",\"display\":\"flex\",\"align-items\":\"center\"}},[_c('div',{staticStyle:{\"padding-right\":\"10px\",\"color\":\"#777\",\"white-space\":\"nowrap\"}},[_vm._v(\"是否為管理者:\")]),_c('WSwitch',{attrs:{\"value\":_vm.u.isAdmin==='y'},on:{\"input\":(v)=>{_vm.u.isAdmin=v?'y':'n'}}})],1),_c('div',{staticStyle:{\"padding\":\"0px 20px 20px 20px\",\"display\":\"flex\",\"align-items\":\"center\"}},[_c('div',{staticStyle:{\"padding-right\":\"10px\",\"color\":\"#777\",\"white-space\":\"nowrap\"}},[_vm._v(\"是否有效:\")]),_c('WSwitch',{attrs:{\"value\":_vm.u.isActive==='y'},on:{\"input\":(v)=>{_vm.u.isActive=v?'y':'n'}}})],1),_c('div',{staticStyle:{\"padding-top\":\"20px\",\"border-top\":\"1px solid #ddd\"}}),_c('div',{staticStyle:{\"padding\":\"0px 20px 20px 20px\",\"display\":\"flex\",\"align-items\":\"center\"}},[_c('div',{staticStyle:{\"padding-right\":\"10px\",\"color\":\"#777\",\"white-space\":\"nowrap\"}},[_vm._v(\"備註:\")]),_c('WText',{staticStyle:{\"width\":\"100%\"},model:{value:(_vm.u.description),callback:function ($$v) {_vm.$set(_vm.u, \"description\", $$v)},expression:\"u.description\"}})],1),_c('div',{staticStyle:{\"padding-top\":\"20px\",\"border-top\":\"1px solid #ddd\"}}),_c('div',{staticStyle:{\"padding\":\"0px 20px 20px 20px\",\"display\":\"flex\",\"align-items\":\"center\"}},[_c('div',{staticStyle:{\"padding-right\":\"10px\",\"color\":\"#777\",\"white-space\":\"nowrap\"}},[_vm._v(\"創建日期:\")]),_c('div',{staticStyle:{\"padding\":\"0px 7px\",\"border-radius\":\"20px\",\"font-size\":\"0.8rem\",\"color\":\"#fff\",\"background\":\"#A1887F\"}},[_vm._v(\" \"+_vm._s(_vm.getCreateDay(_vm.u))+\" \")])])])]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <WDialog\r\n :show.sync=\"bShow\"\r\n :icon=\"mdiAccountEdit\"\r\n _maxWidth=\"1200\"\r\n _minWidth=\"1200\"\r\n :fullscreen=\"true\"\r\n :title=\"'編修使用者'\"\r\n :save-btn-tooltip=\"'儲存'\"\r\n :close-btn-tooltip=\"'關閉'\"\r\n @click-save=\"clickSave\"\r\n @click-close=\"clickClose\"\r\n @resize=\"resize\"\r\n >\r\n <template v-slot:content>\r\n <div style=\"min-height:400px;\">\r\n\r\n <div style=\"padding-top:20px;\"></div>\r\n\r\n <div style=\"padding:0px 20px 20px 20px; display:flex; align-items:center;\">\r\n\r\n <div style=\"padding-right:10px; color:#777; white-space:nowrap;\">使用者姓名:</div>\r\n\r\n <WText\r\n style=\"width:100%;\"\r\n v-model=\"u.name\"\r\n ></WText>\r\n\r\n </div>\r\n\r\n <div style=\"padding:0px 20px 20px 20px; display:flex; align-items:center;\">\r\n\r\n <div style=\"padding-right:10px; color:#777; white-space:nowrap;\">電子郵件:</div>\r\n\r\n <WText\r\n style=\"width:100%;\"\r\n v-model=\"u.email\"\r\n ></WText>\r\n\r\n </div>\r\n\r\n <div style=\"padding:0px 20px 20px 20px; display:flex; align-items:center;\">\r\n\r\n <div style=\"padding-right:10px; color:#777; white-space:nowrap;\">來源:</div>\r\n\r\n <WTextSuggest\r\n style=\"width:200px;\"\r\n :noResultsText=\"'無'\"\r\n :items=\"userFroms\"\r\n v-model=\"u.from\"\r\n ></WTextSuggest>\r\n\r\n </div>\r\n\r\n <div style=\"padding-top:20px; border-top:1px solid #ddd;\"></div>\r\n\r\n <div style=\"padding:0px 20px 20px 20px;\">\r\n\r\n <div style=\"padding-bottom:5px; color:#777; white-space:nowrap;\">隸屬權限群組:</div>\r\n\r\n <div\r\n style=\"display:inline-block; padding:0px 15px 15px 0px;\"\r\n :key=\"kg\"\r\n v-for=\"(g,kg) in groups\"\r\n >\r\n\r\n <div style=\"padding:3px 15px 3px 0px; _border-radius:30px; _border:1px dashed #aaa; display:flex; align-content:center;\">\r\n\r\n <WCheckbox\r\n :value=\"kpugs[g.id]\"\r\n _checkedIconColor=\"'rgba(200,70,20,0.8)'\"\r\n _uncheckedIconColor=\"'rgba(200,70,20,0.8)'\"\r\n @input=\"(v)=>{modifyUserRuleGroupsIds(g.id,v)}\"\r\n ></WCheckbox>\r\n\r\n <div>\r\n {{g.name}}\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div style=\"padding-bottom:5px; color:#777; white-space:nowrap;\">使用者可用區塊:</div>\r\n\r\n <div style=\"border:1px dashed #f26; background:rgba(255,50,100,0.05);\">\r\n\r\n <ruleGroup\r\n :height=\"600\"\r\n :group=\"mergedGroup\"\r\n :showHead=\"false\"\r\n :editable=\"false\"\r\n ></ruleGroup>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div style=\"padding-top:20px; border-top:1px solid #ddd;\"></div>\r\n\r\n <div style=\"padding:0px 20px 20px 20px; display:flex; align-items:center;\">\r\n\r\n <div style=\"padding-right:10px; color:#777; white-space:nowrap;\">是否為管理者:</div>\r\n\r\n <WSwitch\r\n :value=\"u.isAdmin==='y'\"\r\n @input=\"(v)=>{u.isAdmin=v?'y':'n'}\"\r\n ></WSwitch>\r\n\r\n </div>\r\n\r\n <div style=\"padding:0px 20px 20px 20px; display:flex; align-items:center;\">\r\n\r\n <div style=\"padding-right:10px; color:#777; white-space:nowrap;\">是否有效:</div>\r\n\r\n <WSwitch\r\n :value=\"u.isActive==='y'\"\r\n @input=\"(v)=>{u.isActive=v?'y':'n'}\"\r\n ></WSwitch>\r\n\r\n </div>\r\n\r\n <div style=\"padding-top:20px; border-top:1px solid #ddd;\"></div>\r\n\r\n <div style=\"padding:0px 20px 20px 20px; display:flex; align-items:center;\">\r\n\r\n <div style=\"padding-right:10px; color:#777; white-space:nowrap;\">備註:</div>\r\n\r\n <WText\r\n style=\"width:100%;\"\r\n v-model=\"u.description\"\r\n ></WText>\r\n\r\n </div>\r\n\r\n <div style=\"padding-top:20px; border-top:1px solid #ddd;\"></div>\r\n\r\n <div style=\"padding:0px 20px 20px 20px; display:flex; align-items:center;\">\r\n\r\n <div style=\"padding-right:10px; color:#777; white-space:nowrap;\">創建日期:</div>\r\n\r\n <div style=\"padding:0px 7px; border-radius:20px; font-size:0.8rem; color:#fff; background:#A1887F;\">\r\n {{getCreateDay(u)}}\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </template>\r\n </WDialog>\r\n</template>\r\n\r\n<script>\r\nimport { mdiAccountEdit, mdiFileTree } from '@mdi/js/mdi.js'\r\nimport Vue from 'vue'\r\nimport get from 'lodash/get'\r\nimport each from 'lodash/each'\r\nimport map from 'lodash/map'\r\nimport trim from 'lodash/trim'\r\nimport uniq from 'lodash/uniq'\r\nimport filter from 'lodash/filter'\r\nimport join from 'lodash/join'\r\nimport sortBy from 'lodash/sortBy'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport genPm from 'wsemi/src/genPm.mjs'\r\nimport sep from 'wsemi/src/sep.mjs'\r\nimport timemsTZ2day from 'wsemi/src/timemsTZ2day.mjs'\r\nimport isernot from 'wsemi/src/isernot.mjs'\r\nimport isestr from 'wsemi/src/isestr.mjs'\r\nimport WDialog from 'w-component-vue/src/components/WDialog.vue'\r\nimport WText from 'w-component-vue/src/components/WText.vue'\r\nimport WTextSuggest from 'w-component-vue/src/components/WTextSuggest.vue'\r\nimport WSwitch from 'w-component-vue/src/components/WSwitch.vue'\r\nimport WCheckbox from 'w-component-vue/src/components/WCheckbox.vue'\r\nimport { getUserRules } from '../plugins/mShare.mjs'\r\nimport ruleGroup from './ruleGroup.vue'\r\n\r\n\r\nexport default {\r\n components: {\r\n WDialog,\r\n WText,\r\n WTextSuggest,\r\n WSwitch,\r\n WCheckbox,\r\n ruleGroup,\r\n },\r\n props: {\r\n },\r\n data: function() {\r\n return {\r\n mdiAccountEdit,\r\n mdiFileTree,\r\n\r\n bShow: false,\r\n pm: null,\r\n\r\n // panelHeight: 100,\r\n\r\n u: null,\r\n kpugs: {},\r\n mergedGroup: {},\r\n\r\n }\r\n },\r\n mounted: function() {\r\n //console.log('mounted')\r\n\r\n let vo = this\r\n\r\n //set\r\n Vue.prototype.$dg.showVeUser = vo.show\r\n\r\n },\r\n computed: {\r\n\r\n targets: function() {\r\n return get(this, `$store.state.targets`)\r\n },\r\n\r\n ruleGroups: function() {\r\n return get(this, `$store.state.ruleGroups`)\r\n },\r\n\r\n groups: function() {\r\n // console.log('computed groups')\r\n\r\n let vo = this\r\n\r\n //rs, 此區程式碼等同於ruleGroups, 若確認後續無需求再移除\r\n let rs = map(vo.ruleGroups, (v) => {\r\n // let rules = JSON.parse(v.crules)\r\n return {\r\n ...v,\r\n // rules,\r\n }\r\n })\r\n\r\n //sortBy\r\n rs = sortBy(rs, 'order')\r\n\r\n return rs\r\n },\r\n\r\n users: function() {\r\n return get(this, `$store.state.users`)\r\n },\r\n\r\n userFroms: function() {\r\n let vo = this\r\n let froms = map(vo.users, 'from')\r\n froms = uniq(froms)\r\n froms = filter(froms, isernot)\r\n froms = sortBy(froms)\r\n return froms\r\n },\r\n\r\n },\r\n methods: {\r\n\r\n resize: function(msg) {\r\n // console.log('methods resize', msg)\r\n\r\n let vo = this\r\n\r\n // //panelHeight\r\n // vo.panelHeight = msg.contentHeightMax - 59 //- 61.6\r\n\r\n },\r\n\r\n getCreateDay: function(u) {\r\n let timeCreate = get(u, 'timeCreate', '')\r\n return timemsTZ2day(timeCreate)\r\n },\r\n\r\n modifyUserRuleGroupsIds: function(ruleGroupsId, b) {\r\n // console.log('methods modifyUserRuleGroupsIds', ruleGroupsId, b)\r\n\r\n let vo = this\r\n\r\n //kpugs, 因kugs初始化可能不是全部群組, 得用set才能觸發所有checkbox的value記憶體變更\r\n // vo.kpugs[ruleGroupsId] = b\r\n vo.$set(vo.kpugs, ruleGroupsId, b)\r\n\r\n //modify ruleGroupsIds\r\n let ruleGroupsIds = []\r\n each(vo.kpugs, (v, k) => {\r\n if (v) {\r\n ruleGroupsIds.push(k)\r\n }\r\n })\r\n ruleGroupsIds = join(ruleGroupsIds, ';')\r\n vo.u.ruleGroupsIds = ruleGroupsIds\r\n // console.log('ruleGroupsIds', ruleGroupsIds)\r\n\r\n //calcMergedGroup\r\n vo.calcMergedGroup()\r\n\r\n },\r\n\r\n calcMergedGroup: function() {\r\n let vo = this\r\n\r\n //save\r\n let u = cloneDeep(vo.u)\r\n\r\n //getUserRules\r\n let urs = getUserRules(u, vo.ruleGroups, vo.targets)\r\n // console.log('urs', urs)\r\n\r\n //mergedGroup\r\n let mergedGroup = {\r\n id: 'merged-group',\r\n name: 'merged-group',\r\n crules: JSON.stringify(urs),\r\n }\r\n\r\n //mergedGroup\r\n vo.mergedGroup = mergedGroup\r\n\r\n },\r\n\r\n clickSave: function(msg) {\r\n //console.log('methods clickSave', msg)\r\n\r\n let vo = this\r\n\r\n async function core() {\r\n let errTemp = null\r\n\r\n //check\r\n if (!isestr(vo.u.name)) {\r\n vo.$alert(`使用者名稱不得為空`, { type: 'error' })\r\n return\r\n }\r\n\r\n //show loading\r\n vo.$ui.updateLoading(true)\r\n\r\n //u\r\n let u = {\r\n id: vo.u.id,\r\n name: trim(vo.u.name),\r\n email: trim(vo.u.email),\r\n description: trim(vo.u.description),\r\n ruleGroupsIds: trim(vo.u.ruleGroupsIds),\r\n from: trim(vo.u.from),\r\n isVirtual: 'n', //儲存時則更改為非虛擬使用者, 也就是將外部系統(如SSO或AD)使用者資料另存至資料庫中, 用以識別\r\n isAdmin: vo.u.isAdmin,\r\n isActive: vo.u.isActive,\r\n // userId, //insert時自動由後端給予\r\n // timeCreate, //insert時自動由後端給予\r\n // userIdUpdate: userId, //虛擬使用者皆與創建者相同\r\n // timeUpdate: timeCreate,\r\n }\r\n\r\n //mode\r\n let mode = 'save'\r\n if (vo.u.isVirtual === 'y') { //若是儲存虛擬使用者, 代表是第1次儲存至資料庫中, 故需要insert來自動給予userId與timeCreate\r\n mode = 'insert'\r\n }\r\n // console.log('vo.u.isVirtual', vo.u.isVirtual)\r\n\r\n //insert or save\r\n await vo.$fapi.users[mode](u)\r\n .catch((err) => {\r\n errTemp = err\r\n })\r\n\r\n //check\r\n if (errTemp !== null) {\r\n vo.$alert(`變更使用者失敗: ${errTemp}`, { type: 'error' })\r\n return\r\n }\r\n\r\n //alert\r\n vo.$alert(`變更使用者成功`)\r\n\r\n }\r\n\r\n //core\r\n core()\r\n .then(() => {\r\n\r\n //resolve\r\n vo.pm.resolve()\r\n\r\n //hide\r\n vo.bShow = false\r\n\r\n })\r\n .catch(() => { })\r\n .finally(() => {\r\n\r\n //save按鈕解除loading\r\n msg.pm.resolve()\r\n\r\n //hide loading\r\n vo.$ui.updateLoading(false)\r\n\r\n })\r\n\r\n },\r\n\r\n clickClose: function() {\r\n //console.log('methods clickClose')\r\n\r\n let vo = this\r\n\r\n //reject\r\n vo.pm.reject('close window')\r\n\r\n //hide\r\n vo.bShow = false\r\n\r\n },\r\n\r\n show: function (u) {\r\n // console.log('methods show', u)\r\n\r\n let vo = this\r\n\r\n //pm\r\n vo.pm = genPm()\r\n\r\n //save u\r\n u = cloneDeep(u)\r\n vo.u = u\r\n\r\n //save kpugs\r\n let kpugs = {}\r\n let ruleGroupsIds = get(u, 'ruleGroupsIds', '')\r\n let s = sep(ruleGroupsIds, ';')\r\n each(s, (v) => {\r\n kpugs[v] = true\r\n })\r\n vo.kpugs = kpugs\r\n\r\n //calcMergedGroup\r\n vo.calcMergedGroup()\r\n\r\n //bShow\r\n vo.bShow = true\r\n\r\n return vo.pm\r\n },\r\n\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n</style>\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VeUser.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VeUser.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VeUser.vue?vue&type=template&id=2c5c7389&scoped=true&\"\nimport script from \"./VeUser.vue?vue&type=script&lang=js&\"\nexport * from \"./VeUser.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2c5c7389\",\n null\n \n)\n\nexport default component.exports","<template>\n <v-app\n v-domresize\n @domresize=\"resize\"\n >\n\n <LayoutState :style=\"`opacity:${ready?0:1};`\" v-if=\"!ready\"></LayoutState>\n\n <transition enter-active-class=\"fade-enter-active\" leave-active-class=\"fade-leave-active\">\n <Layout v-if=\"ready\"></Layout>\n </transition>\n\n <LoadingWinBar></LoadingWinBar>\n <CheckYesNo></CheckYesNo>\n <CheckYes></CheckYes>\n\n <VeUser></VeUser>\n\n </v-app>\n</template>\n\n<script>\nimport get from 'lodash/get'\nimport cloneDeep from 'lodash/cloneDeep'\nimport wui from 'w-ui-loginout/src/WUiLoginout.mjs'\nimport LoadingWinBar from './components/Common/LoadingWinBar.vue'\nimport CheckYesNo from './components/Common/CheckYesNo.vue'\nimport CheckYes from './components/Common/CheckYes.vue'\nimport LayoutState from './components/LayoutState.vue'\nimport Layout from './components/Layout.vue'\nimport VeUser from './components/VeUser.vue'\n\n\nexport default {\n components: {\n LoadingWinBar,\n CheckYesNo,\n CheckYes,\n LayoutState,\n Layout,\n VeUser,\n },\n data: function() {\n return {\n ll: null,\n }\n },\n beforeMount: function() {\n // console.log('methods beforeMount')\n\n let vo = this\n\n //setVo, 更換ui內vo, 才能使用廣播技術, 更換語系才能用廣播通知全部組件forceUpdate\n vo.$ui.setVo(vo)\n\n function loginSuccess(data) {\n console.log('login success', cloneDeep(data.user))\n vo.$ui.updateConnState('已連線')\n vo.$ui.updateUserToken(data.token)\n vo.$ui.updateUserSelf(data.user)\n }\n\n function loginError(data) {\n console.log('login error', cloneDeep(data))\n vo.$ui.updateConnState(data.text)\n vo.$ui.updateUserToken('')\n vo.$ui.updateUserSelf(get(vo, `$store.state.userDef`))\n }\n\n //login\n console.log('login...')\n let ll = wui('wperm', {\n timeWaitAnimation: 2000,\n params: {},\n })\n ll.login({\n afterGetUser: null,\n afterLogin: null,\n loginSuccess,\n loginError,\n })\n vo.ll = ll\n\n },\n computed: {\n\n ready: function() {\n let connState = get(this, `$store.state.connState`)\n return connState === '已連線'\n },\n\n },\n methods: {\n\n resize: function(msg) {\n // console.log('methods resize', msg)\n\n let vo = this\n\n //syncHeight\n vo.$ui.syncHeight()\n\n },\n\n },\n}\n</script>\n\n<style>\nhtml,\nbody {\n font-family: '微軟正黑體', 'Microsoft JhengHei', 'MicrosoftJhengHeiRegular', 'Avenir', Helvetica, Arial, sans-serif;\n overflow-y: hidden;\n}\n\ndiv,\np,\nspan,\na,\npre,\ninput,\ntextarea,\nbutton {\n font-family: inherit;\n}\n\n.v-application, .v-application--wrap {\n font-family: inherit;\n}\n\n.v-chip {\n cursor: inherit;\n}\n\n.fade-enter-active {\n animation: go 1s;\n}\n\n.fade-leave-active {\n animation: back 1s;\n}\n\n@keyframes go {\n from { opacity: 0; }\n to {opacity: 1;}\n}\n\n@keyframes back {\n from { opacity: 1; }\n to { opacity: 0; }\n}\n\n</style>\n","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=89d23a3a&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=89d23a3a&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export const UpdateWebInfor = 'UpdateWebInfor'\r\nexport const UpdateLang = 'UpdateLang'\r\nexport const UpdateKpText = 'UpdateKpText'\r\nexport const UpdateConnState = 'UpdateConnState'\r\nexport const UpdateSyncState = 'UpdateSyncState'\r\nexport const UpdateLoading = 'UpdateLoading'\r\nexport const UpdateViewState = 'UpdateViewState'\r\nexport const UpdateTableData = 'UpdateTableData'\r\nexport const UpdateData = 'UpdateData'\r\nexport const UpdateHeightApp = 'UpdateHeightApp'\r\nexport const UpdateHeightAppEff = 'UpdateHeightAppEff'\r\nexport const UpdateHeightToolbar = 'UpdateHeightToolbar'\r\nexport const UpdateMenu = 'UpdateMenu'\r\nexport const UpdateUserToken = 'UpdateUserToken'\r\nexport const UpdateUserSelf = 'UpdateUserSelf'\r\n","import map from 'lodash/map'\r\nimport keys from 'lodash/keys'\r\nimport genID from 'wsemi/src/genID.mjs'\r\nimport dtmapping from 'wsemi/src/dtmapping.mjs'\r\nimport dtpick from 'wsemi/src/dtpick.mjs'\r\nimport nowms2str from 'wsemi/src/nowms2str.mjs'\r\nimport now2strp from 'wsemi/src/now2strp.mjs'\r\n\r\n\r\nlet keyTable = 'ruleGroups'\r\nlet tableNameCht = '權限群組'\r\nlet tableNameEng = 'Rule groups'\r\n\r\nlet settings = {\r\n id: {\r\n pk: true,\r\n name: '主鍵',\r\n type: 'STRING',\r\n },\r\n name: {\r\n name: '名稱',\r\n type: 'STRING',\r\n },\r\n order: {\r\n name: '順序',\r\n type: 'INTEGER',\r\n },\r\n // type: { //可依照type分組\r\n // name: '類別',\r\n // type: 'STRING',\r\n // },\r\n description: {\r\n name: '說明',\r\n type: 'TEXT',\r\n },\r\n crules: {\r\n name: '規則', //為json字串, 例如{ '___all___': {show:'y',active:'n'}, '專案A.頁A': {show:'y',active:'y'}, '專案A.頁B': {show:'n',active:'n'} }\r\n type: 'TEXT',\r\n },\r\n userId: {\r\n name: '創建使用者主鍵',\r\n type: 'STRING',\r\n },\r\n timeCreate: {\r\n name: '創建時間',\r\n type: 'STRING',\r\n },\r\n userIdUpdate: {\r\n name: '最新變更使用者主鍵',\r\n type: 'STRING',\r\n },\r\n timeUpdate: {\r\n name: '更新時間',\r\n type: 'STRING',\r\n },\r\n}\r\n\r\nlet funNew = (ndata = {}) => {\r\n let o = dtmapping(ndata, keys(settings))\r\n o.id = `${now2strp()}-${genID()}`\r\n o.userIdUpdate = o.userId\r\n o.timeCreate = nowms2str()\r\n o.timeUpdate = o.timeCreate\r\n o.isActive = 'y'\r\n return o\r\n}\r\n\r\nlet funTest = () => {\r\n let rs = [\r\n ['權限群組1', `{ \"___all___\": { \"show\": \"y\", \"active\": \"n\" }, \"專案A.頁A\": { \"show\": \"y\", \"active\": \"y\" }, \"專案A.頁B\": { \"show\": \"n\", \"active\": \"n\" } }`],\r\n ['權限群組2', `{ \"___all___\": { \"show\": \"y\", \"active\": \"n\" } }`],\r\n ['權限群組3', `{ \"___all___\": { \"show\": \"y\", \"active\": \"y\" } }`],\r\n // ['L0權限群組', `{ \"___all___\": { \"show\": \"n\", \"active\": \"n\" }, \"主題列表\": { \"show\": \"y\", \"active\": \"n\" } }`],\r\n // ['L1權限群組', `{ \"___all___\": { \"show\": \"y\", \"active\": \"y\" } }`],\r\n ]\r\n rs = map(rs, ([g, crules], k) => {\r\n let v = funNew({ userId: 'id-for-admin', crules })\r\n v.id = `id-for-${g}`\r\n v.name = g\r\n v.order = k\r\n v.description = `${g}的說明`\r\n v = dtpick(v, keys(settings))\r\n return v\r\n })\r\n console.log(`已產生: ${keyTable} 測試資料`, rs)\r\n return rs\r\n}\r\n\r\nlet tab = {\r\n keyTable,\r\n tableNameCht,\r\n tableNameEng,\r\n settings,\r\n funNew,\r\n funTest,\r\n}\r\n\r\n\r\nexport default tab\r\n\r\n","import map from 'lodash/map'\r\nimport keys from 'lodash/keys'\r\nimport genID from 'wsemi/src/genID.mjs'\r\nimport dtmapping from 'wsemi/src/dtmapping.mjs'\r\nimport dtpick from 'wsemi/src/dtpick.mjs'\r\nimport nowms2str from 'wsemi/src/nowms2str.mjs'\r\nimport now2strp from 'wsemi/src/now2strp.mjs'\r\n\r\n\r\nlet keyTable = 'targets'\r\nlet tableNameCht = '管控對象'\r\nlet tableNameEng = 'Targets'\r\n\r\nlet settings = {\r\n id: {\r\n pk: true,\r\n name: '主鍵', //儲存對象路徑, 不同階層用句點「.」分開, 可用unicode\r\n type: 'STRING',\r\n },\r\n order: {\r\n name: '順序',\r\n type: 'INTEGER',\r\n },\r\n // key: {\r\n // name: '所屬區塊識別鍊',\r\n // type: 'STRING',\r\n // },\r\n // name: {\r\n // name: '區塊名稱',\r\n // type: 'STRING',\r\n // },\r\n description: {\r\n name: '說明',\r\n type: 'TEXT',\r\n },\r\n}\r\n\r\nlet funNew = (ndata = {}) => {\r\n let o = dtmapping(ndata, keys(settings))\r\n o.id = `${now2strp()}-${genID()}`\r\n o.timeCreate = nowms2str()\r\n o.timeUpdate = o.timeCreate\r\n o.isActive = 'y'\r\n return o\r\n}\r\n\r\nlet funTest = () => {\r\n let rs = [\r\n '專案A',\r\n '專案A.頁A',\r\n '專案A.頁A.區塊A',\r\n '專案A.頁A.區塊A.執行按鈕',\r\n '專案A.頁A.區塊A.分析按鈕',\r\n '專案A.頁B',\r\n '專案A.頁B.區塊A',\r\n '專案A.頁B.區塊A.執行按鈕',\r\n '專案A.頁B.區塊A.分析按鈕',\r\n '專案A.頁B.區塊B',\r\n '專案A.頁B.區塊B.展開按鈕',\r\n '專案A.頁B.區塊B.下載按鈕',\r\n '專案B',\r\n '專案B.頁A',\r\n '專案B.頁A.區塊A',\r\n '專案B.頁A.區塊A.下載報表按鈕',\r\n '專案B.頁A.區塊A.下載數據按鈕',\r\n '專案B.頁B.區塊A',\r\n '專案B.頁B.區塊B',\r\n '專案B.頁B.區塊B.顯示後台按鈕',\r\n '專案B.頁B.區塊B.轉跳主站按鈕',\r\n // '主題列表',\r\n // '主題列表.隱藏已刪除',\r\n // '主題列表.新增主題',\r\n // '主題列表.主題排序',\r\n // '主題列表.編輯主題',\r\n // '主題列表.刪除主題',\r\n // '後台管理',\r\n // '權限管理',\r\n ]\r\n rs = map(rs, (key, k) => {\r\n let v = funNew({ userId: 'id-for-admin', description: key })\r\n v.id = `id-for-${key}`\r\n v = dtpick(v, keys(settings))\r\n return v\r\n })\r\n console.log(`已產生: ${keyTable} 測試資料`, rs)\r\n return rs\r\n}\r\n\r\nlet tab = {\r\n keyTable,\r\n tableNameCht,\r\n tableNameEng,\r\n settings,\r\n funNew,\r\n funTest,\r\n}\r\n\r\n\r\nexport default tab\r\n\r\n","import map from 'lodash/map'\r\nimport keys from 'lodash/keys'\r\nimport genID from 'wsemi/src/genID.mjs'\r\nimport dtmapping from 'wsemi/src/dtmapping.mjs'\r\nimport dtpick from 'wsemi/src/dtpick.mjs'\r\nimport nowms2str from 'wsemi/src/nowms2str.mjs'\r\nimport now2strp from 'wsemi/src/now2strp.mjs'\r\n\r\n\r\nlet keyTable = 'users'\r\nlet tableNameCht = '使用者'\r\nlet tableNameEng = 'Users'\r\n\r\n\r\nlet settings = {\r\n id: {\r\n pk: true,\r\n name: '主鍵',\r\n type: 'STRING',\r\n },\r\n name: {\r\n name: '姓名',\r\n type: 'STRING',\r\n },\r\n email: {\r\n name: '電子郵件',\r\n type: 'STRING',\r\n },\r\n description: {\r\n name: '描述',\r\n type: 'TEXT',\r\n },\r\n from: {\r\n name: '來源',\r\n type: 'STRING',\r\n },\r\n ruleGroupsIds: {\r\n name: '所屬權限群組主鍵', //多主鍵用分號區隔\r\n type: 'STRING',\r\n },\r\n isVirtual: {\r\n name: '是否為虛擬使用者', //代表由外部系統(如SSO或AD)提供之使用者\r\n type: 'STRING',\r\n },\r\n isAdmin: {\r\n name: '是否為系統管理員',\r\n type: 'STRING',\r\n },\r\n userId: {\r\n name: '創建使用者主鍵',\r\n type: 'STRING',\r\n },\r\n timeCreate: {\r\n name: '創建時間',\r\n type: 'STRING',\r\n },\r\n userIdUpdate: {\r\n name: '最新變更使用者主鍵',\r\n type: 'STRING',\r\n },\r\n timeUpdate: {\r\n name: '更新時間',\r\n type: 'STRING',\r\n },\r\n isActive: {\r\n name: '是否有效',\r\n type: 'STRING',\r\n },\r\n}\r\n\r\nlet funNew = (ndata = {}) => {\r\n let o = dtmapping(ndata, keys(settings))\r\n o.id = `${now2strp()}-${genID()}`\r\n o.isVirtual = 'n'\r\n o.isAdmin = 'n'\r\n o.userIdUpdate = o.userId\r\n o.timeCreate = nowms2str()\r\n o.timeUpdate = o.timeCreate\r\n o.isActive = 'y'\r\n return o\r\n}\r\n\r\nlet funTest = () => {\r\n let rs = [\r\n '王小明',\r\n 'peter',\r\n 'mary',\r\n 'john',\r\n 'bill',\r\n 'admin',\r\n ]\r\n rs = map(rs, (name, k) => {\r\n let v = funNew({ userId: 'id-for-admin', name })\r\n v.id = `id-for-${name}`\r\n v.email = `${name}@example.com`\r\n v = dtpick(v, keys(settings))\r\n return v\r\n })\r\n rs[0].ruleGroupsIds = `id-for-權限群組1;id-for-權限群組2`\r\n rs[1].ruleGroupsIds = `id-for-權限群組1`\r\n rs[0].from = 'teamA'\r\n rs[1].from = 'teamA'\r\n rs[2].from = 'teamA'\r\n rs[3].from = 'teamB'\r\n rs[4].from = 'teamB'\r\n rs[4].isActive = 'n'\r\n rs[5].ruleGroupsIds = `id-for-L1權限群組`\r\n rs[5].description = '測試系統管理員描述說明'\r\n rs[5].isAdmin = 'y' //admin\r\n console.log(`已產生: ${keyTable} 測試資料`, rs)\r\n return rs\r\n}\r\n\r\nlet tab = {\r\n keyTable,\r\n tableNameCht,\r\n tableNameEng,\r\n settings,\r\n funNew,\r\n funTest,\r\n}\r\n\r\n\r\nexport default tab\r\n\r\n","import ruleGroups from './tables/ruleGroups.mjs'\nimport targets from './tables/targets.mjs'\nimport users from './tables/users.mjs'\nimport build from 'w-data-collector/src/build.mjs'\n\n\nlet cs = {\n ruleGroups,\n targets,\n users,\n}\n\n//ds\nlet ds = {}\nfor (let k in cs) {\n ds[k] = build(cs[k], { useCreateStorage: false })\n}\n\n\nexport default ds\n","import each from 'lodash/each'\r\nimport set from 'lodash/set'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport * as types from './types.mjs'\r\nimport ds from '../schema/index.mjs'\r\n\r\n\r\n//userDef\r\nlet userDef = {\r\n id: '', //id-for-admin\r\n name: '', //測試者\r\n email: '', //id-for-admin@example.com\r\n // isVirtual: 'n',\r\n isAdmin: 'n',\r\n // isActive: 'n',\r\n}\r\n\r\n//state, 全域狀態\r\nlet state = {\r\n\r\n hostname: `${window.location.origin}`,\r\n webInfor: {},\r\n connState: '連線中...',\r\n syncState: false,\r\n viewState: 'lists',\r\n loading: false,\r\n settings: {\r\n leftDrawerWidth: 200,\r\n },\r\n\r\n heightApp: 0,\r\n heightAppEff: 0,\r\n heightToolbar: 60,\r\n\r\n menu: {}, //初始值需為物件, 否則LayoutContent會取menu.key出錯\r\n\r\n userToken: '',\r\n userDef: cloneDeep(userDef),\r\n userSelf: cloneDeep(userDef),\r\n\r\n lang: 'cht',\r\n keyLangs: {\r\n\r\n empty: {\r\n eng: 'Empty',\r\n cht: '無',\r\n },\r\n // noSelectApi: {\r\n // eng: 'No Select',\r\n // cht: '尚未選擇API',\r\n // },\r\n waitingData: {\r\n eng: 'Waiting data...',\r\n cht: '等待數據中...',\r\n },\r\n tokens: {\r\n eng: 'Tokens',\r\n cht: '授權金鑰',\r\n },\r\n version: {\r\n eng: 'Version',\r\n cht: '版本',\r\n },\r\n levels: {\r\n eng: 'Levels',\r\n cht: '所屬階層',\r\n },\r\n keywords: {\r\n eng: 'Keywords',\r\n cht: '關鍵字',\r\n },\r\n state: {\r\n eng: 'State',\r\n cht: '狀態',\r\n },\r\n // timeCreate: {\r\n // eng: 'Create time',\r\n // cht: '創建時間',\r\n // },\r\n // timeUpdate: {\r\n // eng: 'Update time',\r\n // cht: '更新時間',\r\n // },\r\n // creator: {\r\n // eng: 'Creator',\r\n // cht: 'API創建者',\r\n // },\r\n // dataSource: {\r\n // eng: 'Source',\r\n // cht: '資料提供者',\r\n // },\r\n isActive: {\r\n eng: 'Active',\r\n cht: '有效',\r\n },\r\n // mdInputParams: {\r\n // eng: 'Input',\r\n // cht: '輸入參數資訊或結構',\r\n // },\r\n // inputExample: {\r\n // eng: 'Input example',\r\n // cht: '輸入範例',\r\n // },\r\n // mdOutputParams: {\r\n // eng: 'Output',\r\n // cht: '回傳數據結構',\r\n // },\r\n // outputExample: {\r\n // eng: 'Output example',\r\n // cht: '回傳數據範例',\r\n // },\r\n\r\n // outputMenuTree: {\r\n // eng: 'Tree',\r\n // cht: '樹狀組件',\r\n // },\r\n // outputMenuRaw: {\r\n // eng: 'Raw',\r\n // cht: '原始數據',\r\n // },\r\n\r\n },\r\n kpText: {},\r\n\r\n}\r\n\r\n//添加各資料表\r\neach(ds, (v, k) => {\r\n state[k] = null //初始化null\r\n})\r\n\r\n//儲存至state\r\nexport { state }\r\n\r\n//mutations, 同步執行\r\nexport let mutations = {\r\n\r\n [types.UpdateWebInfor] (state, webInfor) {\r\n state.webInfor = webInfor\r\n },\r\n\r\n [types.UpdateLang] (state, lang) {\r\n state.lang = lang\r\n },\r\n\r\n [types.UpdateKpText] (state, kpText) {\r\n state.kpText = kpText\r\n },\r\n\r\n [types.UpdateConnState] (state, connState) {\r\n state.connState = connState\r\n },\r\n\r\n [types.UpdateSyncState] (state, syncState) {\r\n state.syncState = syncState\r\n },\r\n\r\n [types.UpdateLoading] (state, loading) {\r\n state.loading = loading\r\n },\r\n\r\n [types.UpdateViewState] (state, viewState) {\r\n state.viewState = viewState\r\n },\r\n\r\n [types.UpdateTableData] (state, msg) {\r\n state[msg.tableName] = msg.data\r\n },\r\n\r\n [types.UpdateData] (state, msg) {\r\n //msg.path內為存取路徑, 需使用lodash的set處理\r\n // console.log('UpdateData msg', msg)\r\n set(state, msg.path, msg.data)\r\n },\r\n\r\n [types.UpdateHeightApp] (state, heightApp) {\r\n state.heightApp = heightApp\r\n },\r\n\r\n [types.UpdateHeightAppEff] (state, heightAppEff) {\r\n state.heightAppEff = heightAppEff\r\n },\r\n\r\n [types.UpdateHeightToolbar] (state, heightToolbar) {\r\n state.heightToolbar = heightToolbar\r\n },\r\n\r\n [types.UpdateMenu] (state, menu) {\r\n state.menu = menu\r\n },\r\n\r\n [types.UpdateUserToken] (state, userToken) {\r\n state.userToken = userToken\r\n },\r\n\r\n [types.UpdateUserSelf] (state, userSelf) {\r\n state.userSelf = userSelf\r\n },\r\n\r\n}\r\n\r\n","import Vue from 'vue'\r\nimport Vuex from 'vuex'\r\nimport { state, mutations } from './mutations.mjs'\r\nimport * as getters from './getters.mjs'\r\nimport * as actions from './actions.mjs'\r\nimport * as types from './types.mjs'\r\n\r\n\r\n//use\r\nVue.use(Vuex)\r\n\r\nlet st = new Vuex.Store({\r\n state,\r\n mutations,\r\n getters,\r\n actions,\r\n strict: true, //嚴格模式禁止修改state\r\n})\r\n\r\n//save to $store\r\nst.types = types\r\nVue.prototype.$store = st\r\n// console.log('$store', st)\r\n\r\nexport default st\r\n","import Vue from 'vue'\nimport Vuetify from 'vuetify/lib'\n// import Vuetify from 'vuetify'\n// import 'vuetify/dist/vuetify.min.css'\n\nVue.use(Vuetify)\n\nexport default new Vuetify({\n icons: {\n iconfont: 'mdiSvg',\n },\n})\n","import Vue from 'vue'\r\nimport min from 'lodash/min'\r\nimport size from 'lodash/size'\r\nimport take from 'lodash/take'\r\nimport isEqual from 'lodash/isEqual'\r\nimport uniq from 'lodash/uniq'\r\nimport set from 'lodash/set'\r\nimport get from 'lodash/get'\r\nimport each from 'lodash/each'\r\nimport map from 'lodash/map'\r\nimport filter from 'lodash/filter'\r\nimport last from 'lodash/last'\r\nimport split from 'lodash/split'\r\nimport join from 'lodash/join'\r\nimport drop from 'lodash/drop'\r\nimport dropRight from 'lodash/dropRight'\r\nimport groupBy from 'lodash/groupBy'\r\nimport sortBy from 'lodash/sortBy'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport cint from 'wsemi/src/cint.mjs'\r\nimport delay from 'wsemi/src/delay.mjs'\r\nimport isarr from 'wsemi/src/isarr.mjs'\r\nimport isestr from 'wsemi/src/isestr.mjs'\r\nimport isfun from 'wsemi/src/isfun.mjs'\r\nimport iseobj from 'wsemi/src/iseobj.mjs'\r\nimport isearr from 'wsemi/src/isearr.mjs'\r\nimport isEle from 'wsemi/src/isEle.mjs'\r\nimport strleft from 'wsemi/src/strleft.mjs'\r\nimport strdelleft from 'wsemi/src/strdelleft.mjs'\r\nimport sep from 'wsemi/src/sep.mjs'\r\nimport aes2str from 'wsemi/src/aes2str.mjs'\r\nimport str2aes from 'wsemi/src/str2aes.mjs'\r\nimport haskey from 'wsemi/src/haskey.mjs'\r\nimport genPm from 'wsemi/src/genPm.mjs'\r\nimport pmSeries from 'wsemi/src/pmSeries.mjs'\r\nimport waitFun from 'wsemi/src/waitFun.mjs'\r\nimport browserView from 'wsemi/src/browserView.mjs'\r\nimport arrHas from 'wsemi/src/arrHas.mjs'\r\nimport arrSort from 'wsemi/src/arrSort.mjs'\r\nimport arrInsert from 'wsemi/src/arrInsert.mjs'\r\nimport replace from 'wsemi/src/replace.mjs'\r\nimport timemsTZ2past from 'wsemi/src/timemsTZ2past.mjs'\r\nimport convertToTree from 'wsemi/src/convertToTree.mjs'\r\n// import WUiDwload from 'w-ui-dwload/src/WUiDwload.mjs'\r\n\r\n\r\nlet vo = Vue.prototype\r\n\r\n\r\nfunction setVo(vObj) {\r\n vo = vObj\r\n}\r\n\r\n\r\nfunction updateConnState(connState) {\r\n vo.$store.commit(vo.$store.types.UpdateConnState, connState)\r\n}\r\n\r\n\r\nfunction updateLoading(loading) {\r\n vo.$store.commit(vo.$store.types.UpdateLoading, loading)\r\n}\r\n\r\n\r\nfunction updateViewState(viewState) {\r\n vo.$store.commit(vo.$store.types.UpdateViewState, viewState)\r\n}\r\n\r\n\r\nfunction updateUserToken(userToken) {\r\n vo.$store.commit(vo.$store.types.UpdateUserToken, userToken)\r\n}\r\n\r\n\r\nfunction updateUserSelf(userSelf) {\r\n vo.$store.commit(vo.$store.types.UpdateUserSelf, userSelf)\r\n}\r\n\r\n\r\nfunction forceUpdate() {\r\n // console.log('call forceUpdate')\r\n\r\n function broadcast(chs) {\r\n each(chs, (v) => {\r\n // console.log(v.$el)\r\n v.$forceUpdate()\r\n if (v.$children) {\r\n broadcast(v.$children)\r\n }\r\n })\r\n }\r\n\r\n //broadcast, 注意此處需使用更換ui內vo為mounted後的vo, 也就是含元素, 才能使用廣播技術\r\n broadcast(vo.$children)\r\n\r\n}\r\n\r\n\r\nfunction setLang(lang = null) {\r\n // console.log('call setLang')\r\n\r\n //check lang, 若有輸入才commit\r\n if (isestr(lang)) {\r\n vo.$store.commit(vo.$store.types.UpdateLang, lang)\r\n }\r\n\r\n //getKpLang, 切換lang得調用getKpLang重算kpText\r\n getKpLang()\r\n\r\n //forceUpdate\r\n forceUpdate()\r\n\r\n}\r\n\r\n\r\nfunction getKpLang() {\r\n // console.log('call getKpLang')\r\n\r\n //merge keyLangs\r\n let keyLangs = get(vo, '$store.state.keyLangs')\r\n let webName = get(vo, '$store.state.webInfor.webName')\r\n let webDescription = get(vo, '$store.state.webInfor.webDescription')\r\n let kls = {\r\n ...keyLangs,\r\n webName: {\r\n ...webName,\r\n },\r\n webDescription: {\r\n ...webDescription,\r\n },\r\n }\r\n\r\n //lang\r\n let lang = get(vo, '$store.state.lang')\r\n\r\n //kpText\r\n let kpText = {}\r\n each(kls, (v, k) => {\r\n kpText[k] = v[lang]\r\n })\r\n\r\n //commit\r\n vo.$store.commit(vo.$store.types.UpdateKpText, kpText)\r\n\r\n return kpText\r\n}\r\n\r\n\r\nfunction getKpText(key) {\r\n // console.log('call getKpText')\r\n let kpText = get(vo, '$store.state.kpText')\r\n return get(kpText, key, '')\r\n}\r\n\r\n\r\nfunction gv(o, k, cv = null) {\r\n let r = get(o, k, '')\r\n if (!isestr(r)) {\r\n let def = getKpText('empty')\r\n return def\r\n }\r\n if (isfun(cv)) {\r\n r = cv(r)\r\n }\r\n return r\r\n}\r\n\r\n\r\nfunction syncHeight() {\r\n\r\n //heightToolbar\r\n let heightToolbar = get(vo, '$store.state.heightToolbar')\r\n\r\n //heightAppEff\r\n let heightAppEff = window.innerHeight - heightToolbar\r\n\r\n //commit\r\n // vo.$store.commit(vo.$store.types.UpdateHeightToolbar, heightToolbar)\r\n vo.$store.commit(vo.$store.types.UpdateHeightApp, window.innerHeight)\r\n vo.$store.commit(vo.$store.types.UpdateHeightAppEff, heightAppEff)\r\n\r\n return ''\r\n}\r\n\r\n\r\nasync function waitData(t = 0) {\r\n\r\n //delay\r\n if (t > 0) {\r\n await delay(t)\r\n }\r\n\r\n //waitFun, 等待dsrl模組掛載\r\n await waitFun(() => {\r\n return iseobj(get(vo, '$dsrl'))\r\n })\r\n\r\n //等待前端第一次同步完畢數據\r\n await waitFun(() => {\r\n return get(vo, '$store.state.syncState')\r\n })\r\n\r\n}\r\n\r\n\r\nlet mUI = {\r\n\r\n setVo,\r\n\r\n updateConnState,\r\n updateLoading,\r\n updateViewState,\r\n updateUserToken,\r\n updateUserSelf,\r\n forceUpdate,\r\n\r\n setLang,\r\n getKpLang,\r\n getKpText,\r\n\r\n gv,\r\n syncHeight,\r\n\r\n waitData,\r\n\r\n}\r\n\r\n\r\nexport default mUI\r\n","import get from 'lodash/get'\r\nimport find from 'lodash/find'\r\nimport isestr from 'wsemi/src/isestr.mjs'\r\n\r\n\r\nfunction mDataSelectorSchema(ds, opt = {}) {\r\n\r\n function getTableInforBy(keyFind, valueFind, keyPick) {\r\n let r = find(ds, { [keyFind]: valueFind })\r\n if (!r) {\r\n r = ''\r\n }\r\n if (isestr(keyPick)) {\r\n r = get(r, keyPick, '')\r\n }\r\n return r\r\n }\r\n\r\n function getTableChtByKey(valueFind) {\r\n return getTableInforBy('keyTable', valueFind, 'tableNameCht')\r\n }\r\n\r\n return {\r\n getTableInforBy,\r\n getTableChtByKey,\r\n }\r\n}\r\n\r\n\r\nexport default mDataSelectorSchema\r\n","// import min from 'lodash/min'\r\n// import size from 'lodash/size'\r\n// import take from 'lodash/take'\r\n// import isEqual from 'lodash/isEqual'\r\n// import uniq from 'lodash/uniq'\r\n// import set from 'lodash/set'\r\n// import get from 'lodash/get'\r\n// import each from 'lodash/each'\r\n// import map from 'lodash/map'\r\n// import filter from 'lodash/filter'\r\n// import last from 'lodash/last'\r\n// import split from 'lodash/split'\r\n// import join from 'lodash/join'\r\n// import drop from 'lodash/drop'\r\n// import dropRight from 'lodash/dropRight'\r\n// import groupBy from 'lodash/groupBy'\r\n// import sortBy from 'lodash/sortBy'\r\n// import cloneDeep from 'lodash/cloneDeep'\r\n// import cint from 'wsemi/src/cint.mjs'\r\n// import delay from 'wsemi/src/delay.mjs'\r\n// import isarr from 'wsemi/src/isarr.mjs'\r\n// import isestr from 'wsemi/src/isestr.mjs'\r\n// import isfun from 'wsemi/src/isfun.mjs'\r\n// import iseobj from 'wsemi/src/iseobj.mjs'\r\n// import isearr from 'wsemi/src/isearr.mjs'\r\n// import isEle from 'wsemi/src/isEle.mjs'\r\n// import strleft from 'wsemi/src/strleft.mjs'\r\n// import strdelleft from 'wsemi/src/strdelleft.mjs'\r\n// import sep from 'wsemi/src/sep.mjs'\r\n// import aes2str from 'wsemi/src/aes2str.mjs'\r\n// import str2aes from 'wsemi/src/str2aes.mjs'\r\n// import haskey from 'wsemi/src/haskey.mjs'\r\n// import genPm from 'wsemi/src/genPm.mjs'\r\n// import pmSeries from 'wsemi/src/pmSeries.mjs'\r\n// import waitFun from 'wsemi/src/waitFun.mjs'\r\n// import browserView from 'wsemi/src/browserView.mjs'\r\n// import arrHas from 'wsemi/src/arrHas.mjs'\r\n// import arrSort from 'wsemi/src/arrSort.mjs'\r\n// import arrInsert from 'wsemi/src/arrInsert.mjs'\r\n// import replace from 'wsemi/src/replace.mjs'\r\n// import timemsTZ2past from 'wsemi/src/timemsTZ2past.mjs'\r\n// import convertToTree from 'wsemi/src/convertToTree.mjs'\r\n// import html2picDyn from 'wsemi/src/html2picDyn.mjs'\r\n// import urlParse from 'wsemi/src/urlParse.mjs'\r\n// import domConvertToPicDyn from 'wsemi/src/domConvertToPicDyn.mjs'\r\n// import ltdtkeysheads2mat from 'wsemi/src/ltdtkeysheads2mat.mjs'\r\n// import downloadFileFromB64 from 'wsemi/src/downloadFileFromB64.mjs'\r\n// import downloadExcelFileFromDataDyn from 'wsemi/src/downloadExcelFileFromDataDyn.mjs'\r\n// import getFileAccept from 'wsemi/src/getFileAccept.mjs'\r\n// import downloadFileFromU8Arr from 'wsemi/src/downloadFileFromU8Arr.mjs'\r\n\r\n\r\nfunction mDataSupport(vo, opt = {}) {\r\n\r\n\r\n return {\r\n\r\n // mdCheckKeyInd,\r\n // mdGetTextByKey,\r\n // mdGetTextByKeyIndAndKey,\r\n\r\n }\r\n}\r\n\r\n\r\nexport default mDataSupport\r\n","import get from 'lodash/get'\r\n// import '@babel/polyfill' //需提供Vuetify的Symbol等API\r\n// import 'core-js/stable' //需提供Vuetify的Symbol等API, 官網說使用transpileDependencies但不夠, 改用之前提到的@babel/polyfill會被提示已廢棄, 改使用給webpack的polyfill方式才行\r\n// import 'regenerator-runtime/runtime'\r\n// import 'intersection-observer' //需供Vuetify的Intersection Observer, 專案內有使用v-intersect才需引入, 而w-component-vue沒用v-intersect\r\nimport Vue from 'vue'\r\nimport WServHapiClient from 'w-serv-hapi/src/WServHapiClient.mjs'\r\nimport WAlert from 'w-component-vue/src/components/WAlert.mjs'\r\nimport domMutation from 'w-component-vue/src/js/domMutation.mjs'\r\nimport domResize from 'w-component-vue/src/js/domResize.mjs'\r\nimport domDragDrop from 'w-component-vue/src/js/domDragDrop.mjs'\r\nimport App from './App.vue'\r\nimport store from './store/index.mjs'\r\nimport mVuetify from './plugins/mVuetify.mjs'\r\nimport ui from './plugins/mUI.mjs'\r\nimport mDataSelectorSchema from './plugins/mDataSelectorSchema.mjs'\r\nimport mDataSupport from './plugins/mDataSupport.mjs'\r\nimport * as s from './plugins/mShare.mjs'\r\nimport ds from './schema/index.mjs'\r\n// console.log('globalState', globalState)\r\n// console.log('ds', ds)\r\n\r\n\r\n//不提示vue產品\r\nVue.config.productionTip = false\r\n\r\n//$alert\r\nVue.prototype.$alert = function() {\r\n let [msg, type] = arguments\r\n console.log(msg, type)\r\n if (msg !== 'close') {\r\n WAlert(msg, type)\r\n }\r\n}\r\n\r\n//dssm\r\nlet dssm = mDataSelectorSchema(ds)\r\n\r\n//dspt\r\nlet dspt = mDataSupport(Vue.prototype)\r\n\r\n//prototype\r\nVue.prototype.$ui = ui\r\nVue.prototype.$t = ui.getKpText\r\nVue.prototype.$s = s\r\nVue.prototype.$dssm = dssm\r\nVue.prototype.$dspt = dspt\r\n// Vue.prototype.$ds = ds\r\nVue.prototype.$dg = {}\r\n\r\n//directive\r\nVue.directive('domresize', domResize())\r\nVue.directive('dommutation', domMutation())\r\nVue.directive('domdragdrop', domDragDrop())\r\n\r\n//WServHapiClient\r\nlet bFirstSync = false\r\nWServHapiClient({\r\n showLog: false,\r\n getUrl: () => {\r\n return window.location.origin + window.location.pathname\r\n },\r\n useWaitToken: true,\r\n getToken: () => {\r\n let token = get(Vue.prototype, `$store.state.userToken`, '')\r\n // console.log('getToken', token)\r\n return token\r\n },\r\n getServerMethods: (_fapi) => {\r\n console.log('$fapi', _fapi)\r\n Vue.prototype.$fapi = _fapi\r\n _fapi.getWebInfor() //已有fapi時優先取得web資訊\r\n .then((wi) => {\r\n console.log('$fapi getWebInfor', wi)\r\n Vue.prototype.$store.commit(Vue.prototype.$store.types.UpdateWebInfor, wi)\r\n ui.setLang() //因更新webInfor得要重刷語系才能依照語言取得顯示文字\r\n })\r\n .catch((err) => {\r\n console.log(err)\r\n })\r\n },\r\n recvData: (r) => {\r\n console.log('sync data', r.tableName, r.data)\r\n Vue.prototype.$store.commit(Vue.prototype.$store.types.UpdateTableData, r)\r\n },\r\n getAfterUpdateTableTags: (r) => {\r\n // console.log('getAfterUpdateTableTags', r, 'needToRefresh', JSON.stringify(r.oldTableTags) !== JSON.stringify(r.newTableTags))\r\n if (bFirstSync) {\r\n return\r\n }\r\n bFirstSync = true\r\n console.log('first-sync')\r\n Vue.prototype.$store.commit(Vue.prototype.$store.types.UpdateSyncState, true)\r\n },\r\n})\r\n\r\n//new\r\nnew Vue({\r\n vuetify: mVuetify,\r\n store,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkw_web_perm\"] = self[\"webpackChunkw_web_perm\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(9439); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["_c","_self","directives","name","_vm","_e","attrs","staticRenderFns","render","this","loading","barWidth","barPadding","on","$event","scopedSlots","_u","key","fn","style","concat","staticStyle","msg","_v","_s","proxy","components","WDialog","WProgressBar","props","data","mounted","vo","Vue","prototype","$dg","setLoadingWinBarMessage","setMessage","computed","get","methods","component","bShow","content","clickBtn","WConfirm","pm","showCheckYesNo","show","genPm","mode","resolve","reject","clickUnit","showCheckYes","connState","img_connection","img_logout","img_dissconnection","img_deny","heightToolbar","webLogo","webName","$t","tgLangs","changeLang","model","value","tgLangSelect","callback","$$v","expression","rawName","resize","syncState","panelHeight","drawerWidth","drawerWidthMin","drawerWidthMax","drawerAfloat","menus","menuActive","v","h","menu","menuKey","drawer","width","changeTargets","resizePanel","resizeHead","mdiGamepadCircle","isOperatable","updateIsOperatable","isModified","mdiCloudUploadOutline","saveRuleGroupsAndTargets","firstLoading","spacePading","ref","treeHeight","treeBlocks","clickOperateItem","getAllBlocks","targets","rs","map","s","sep","id","text","takeRight","dropRight","parentId","join","_objectSpread","idTemp","sortBy","getTreeBlocks","r","blocks","opt","bindKey","bindParent","bindChildren","saveExtProps","composeToTree","err","console","log","getUserGroups","user","ruleGroups","ruleGroupsIds","gs","each","g","find","iseobj","push","rules","JSON","parse","crules","getTargetsByGroup","group","cloneDeep","rulesDisplay","ks","k","def","krule","rule","b","getUserRules","haskey","kk","bOld","bNew","WIcon","WButtonChip","WSwitch","WTree","mdiStackOverflow","mdiAccountGroupOutline","mdiBallotRecountOutline","panelWidth","headHeight","listRename","size","Math","max","snew","offsetWidth","offsetHeight","core","_core","apply","arguments","_asyncToGenerator","_regeneratorRuntime","_callee","toUnfolding","toLevel","_context","prev","next","$ui","updateLoading","$refs","wt","toggleItemsAll","delay","t0","stop","catch","$alert","type","finally","_core2","_callee3","fun","targetInd","_context3","_ref","_callee2","dataNew","_context2","genID","abrupt","rowItem","index","operateItem","opItem","modifyTreeBlocks","treeBlocksTemp","blocksNew","flattenTree","nk","nkParent","p","order","set","replaceObjKeys","obj","kpKeys","isChanged","_core3","_callee4","errTemp","kpDiffs","_context4","stringify","$fapi","save","delAll","changeGroups","saveGroups","resizeGroupInfor","groupsTrans","dragGroupsOrder","clickGroup","clickAddGroup","clickRemoveGroup","pickGroup","ruleGroupHeight","modifyGroup","changeGroup","showHead","editable","getName","updateProp","getDescription","mdiEyeCheck","treeToogleShowAndActive","mdiEyeOff","mdiEyedropper","mdiEyedropperOff","getShow","toogleShow","getActive","toogleActive","WButtonCircle","WCheckbox","WText","height","Number","default","Object","Boolean","dbc","debounce","groupTrans","defaultShow","defaultActive","isestr","setDefaultShow","setDefaultActive","getShowAndActive","item","getDefaultShowAndActive","toogleShowAndActive","cb","isobj","_defineProperty","emitGroupDebounce","children","emitGroup","$emit","WGroupTags","ruleGroup","mdiVectorPolylinePlus","mdiCheckboxMarkedCircle","groupInforHeight","pickGroupId","groups","orderMax","gn","insert","waitFun","bExit","del","groupsNew","gsn","isEqual","_core4","description","changeUsers","mdiAccountPlusOutline","clickAddUser","usersGroupsHeight","_l","usersGroups","us","kus","getFrom","u","ku","isVirtual","getIsAdmin","mdiChessRook","getIsNotActive","clickEditUser","clickRemoveUser","WPanelScrolly","users","groupBy","keys","gsTemp","un","from","isAdmin","isActive","showVeUser","WDrawer","WListVertical","LayoutContentTargets","LayoutContentGroups","LayoutContentUsers","icon","panelWidthTemp","clientWidth","clientHeight","modeResize","WTextSelect","LayoutContent","mdiMenu","userName","beforeMount","setLang","viewState","c","document","title","lang","mdiAccountEdit","clickSave","clickClose","$set","email","userFroms","kg","kpugs","modifyUserRuleGroupsIds","mergedGroup","getCreateDay","WTextSuggest","mdiFileTree","froms","uniq","filter","isernot","timeCreate","timemsTZ2day","ruleGroupsId","calcMergedGroup","urs","trim","then","LoadingWinBar","CheckYesNo","CheckYes","LayoutState","Layout","VeUser","ll","loginSuccess","updateConnState","updateUserToken","token","updateUserSelf","loginError","setVo","wui","timeWaitAnimation","params","login","afterGetUser","afterLogin","ready","syncHeight","UpdateWebInfor","UpdateLang","UpdateKpText","UpdateConnState","UpdateSyncState","UpdateLoading","UpdateViewState","UpdateTableData","UpdateData","UpdateHeightApp","UpdateHeightAppEff","UpdateHeightToolbar","UpdateMenu","UpdateUserToken","UpdateUserSelf","keyTable","tableNameCht","tableNameEng","settings","pk","userId","userIdUpdate","timeUpdate","funNew","ndata","length","undefined","o","dtmapping","now2strp","nowms2str","funTest","_ref2","_slicedToArray","dtpick","tab","cs","ds","build","useCreateStorage","userDef","state","hostname","window","location","origin","webInfor","leftDrawerWidth","heightApp","heightAppEff","userToken","userSelf","keyLangs","empty","eng","cht","waitingData","tokens","version","levels","keywords","kpText","mutations","_mutations","types","tableName","path","use","Vuex","st","getters","actions","strict","$store","Vuetify","icons","iconfont","vObj","commit","updateViewState","forceUpdate","broadcast","chs","$forceUpdate","$children","getKpLang","webDescription","kls","getKpText","gv","cv","isfun","innerHeight","waitData","_waitData","t","_args","mUI","mDataSelectorSchema","getTableInforBy","keyFind","valueFind","keyPick","getTableChtByKey","mDataSupport","config","productionTip","_arguments","Array","slice","call","WAlert","dssm","dspt","ui","$s","$dssm","$dspt","directive","domResize","domMutation","domDragDrop","bFirstSync","WServHapiClient","showLog","getUrl","pathname","useWaitToken","getToken","getServerMethods","_fapi","getWebInfor","wi","recvData","getAfterUpdateTableTags","vuetify","mVuetify","store","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","loaded","__webpack_modules__","m","deferred","O","result","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","every","splice","n","getter","__esModule","d","a","definition","defineProperty","enumerable","globalThis","Function","e","prop","hasOwnProperty","Symbol","toStringTag","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"sourceRoot":""}
|