{"remainingRequest":"D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\源码\\vue-element-admin-master\\src\\components\\ThemePicker\\index.vue?vue&type=style&index=0&lang=css&","dependencies":[{"path":"D:\\源码\\vue-element-admin-master\\src\\components\\ThemePicker\\index.vue","mtime":1649647926000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\css-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\loaders\\stylePostLoader.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\postcss-loader\\src\\index.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCi50aGVtZS1tZXNzYWdlLAoudGhlbWUtcGlja2VyLWRyb3Bkb3duIHsKICB6LWluZGV4OiA5OTk5OSAhaW1wb3J0YW50Owp9CgoudGhlbWUtcGlja2VyIC5lbC1jb2xvci1waWNrZXJfX3RyaWdnZXIgewogIGhlaWdodDogMjZweCAhaW1wb3J0YW50OwogIHdpZHRoOiAyNnB4ICFpbXBvcnRhbnQ7CiAgcGFkZGluZzogMnB4Owp9CgoudGhlbWUtcGlja2VyLWRyb3Bkb3duIC5lbC1jb2xvci1kcm9wZG93bl9fbGluay1idG4gewogIGRpc3BsYXk6IG5vbmU7Cn0K"},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA","file":"index.vue","sourceRoot":"src/components/ThemePicker","sourcesContent":["<template>\n <el-color-picker\n v-model=\"theme\"\n :predefine=\"['#409EFF', '#1890ff', '#304156','#212121','#11a983', '#13c2c2', '#6959CD', '#f5222d', ]\"\n class=\"theme-picker\"\n popper-class=\"theme-picker-dropdown\"\n />\n</template>\n\n<script>\nconst version = require('element-ui/package.json').version // element-ui version from node_modules\nconst ORIGINAL_THEME = '#409EFF' // default color\n\nexport default {\n data() {\n return {\n chalk: '', // content of theme-chalk css\n theme: ''\n }\n },\n computed: {\n defaultTheme() {\n return this.$store.state.settings.theme\n }\n },\n watch: {\n defaultTheme: {\n handler: function(val, oldVal) {\n this.theme = val\n },\n immediate: true\n },\n async theme(val) {\n const oldVal = this.chalk ? this.theme : ORIGINAL_THEME\n if (typeof val !== 'string') return\n const themeCluster = this.getThemeCluster(val.replace('#', ''))\n const originalCluster = this.getThemeCluster(oldVal.replace('#', ''))\n console.log(themeCluster, originalCluster)\n\n const $message = this.$message({\n message: ' Compiling the theme',\n customClass: 'theme-message',\n type: 'success',\n duration: 0,\n iconClass: 'el-icon-loading'\n })\n\n const getHandler = (variable, id) => {\n return () => {\n const originalCluster = this.getThemeCluster(ORIGINAL_THEME.replace('#', ''))\n const newStyle = this.updateStyle(this[variable], originalCluster, themeCluster)\n\n let styleTag = document.getElementById(id)\n if (!styleTag) {\n styleTag = document.createElement('style')\n styleTag.setAttribute('id', id)\n document.head.appendChild(styleTag)\n }\n styleTag.innerText = newStyle\n }\n }\n\n if (!this.chalk) {\n const url = `https://unpkg.com/element-ui@${version}/lib/theme-chalk/index.css`\n await this.getCSSString(url, 'chalk')\n }\n\n const chalkHandler = getHandler('chalk', 'chalk-style')\n\n chalkHandler()\n\n const styles = [].slice.call(document.querySelectorAll('style'))\n .filter(style => {\n const text = style.innerText\n return new RegExp(oldVal, 'i').test(text) && !/Chalk Variables/.test(text)\n })\n styles.forEach(style => {\n const { innerText } = style\n if (typeof innerText !== 'string') return\n style.innerText = this.updateStyle(innerText, originalCluster, themeCluster)\n })\n\n this.$emit('change', val)\n\n $message.close()\n }\n },\n\n methods: {\n updateStyle(style, oldCluster, newCluster) {\n let newStyle = style\n oldCluster.forEach((color, index) => {\n newStyle = newStyle.replace(new RegExp(color, 'ig'), newCluster[index])\n })\n return newStyle\n },\n\n getCSSString(url, variable) {\n return new Promise(resolve => {\n const xhr = new XMLHttpRequest()\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4 && xhr.status === 200) {\n this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, '')\n resolve()\n }\n }\n xhr.open('GET', url)\n xhr.send()\n })\n },\n\n getThemeCluster(theme) {\n const tintColor = (color, tint) => {\n let red = parseInt(color.slice(0, 2), 16)\n let green = parseInt(color.slice(2, 4), 16)\n let blue = parseInt(color.slice(4, 6), 16)\n\n if (tint === 0) { // when primary color is in its rgb space\n return [red, green, blue].join(',')\n } else {\n red += Math.round(tint * (255 - red))\n green += Math.round(tint * (255 - green))\n blue += Math.round(tint * (255 - blue))\n\n red = red.toString(16)\n green = green.toString(16)\n blue = blue.toString(16)\n\n return `#${red}${green}${blue}`\n }\n }\n\n const shadeColor = (color, shade) => {\n let red = parseInt(color.slice(0, 2), 16)\n let green = parseInt(color.slice(2, 4), 16)\n let blue = parseInt(color.slice(4, 6), 16)\n\n red = Math.round((1 - shade) * red)\n green = Math.round((1 - shade) * green)\n blue = Math.round((1 - shade) * blue)\n\n red = red.toString(16)\n green = green.toString(16)\n blue = blue.toString(16)\n\n return `#${red}${green}${blue}`\n }\n\n const clusters = [theme]\n for (let i = 0; i <= 9; i++) {\n clusters.push(tintColor(theme, Number((i / 10).toFixed(2))))\n }\n clusters.push(shadeColor(theme, 0.1))\n return clusters\n }\n }\n}\n</script>\n\n<style>\n.theme-message,\n.theme-picker-dropdown {\n z-index: 99999 !important;\n}\n\n.theme-picker .el-color-picker__trigger {\n height: 26px !important;\n width: 26px !important;\n padding: 2px;\n}\n\n.theme-picker-dropdown .el-color-dropdown__link-btn {\n display: none;\n}\n</style>\n"]}]}
|