top-theme.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <template>
  2. <div>
  3. <el-dialog title="选择"
  4. :visible.sync="box"
  5. width="50%">
  6. <el-radio-group v-model="text"
  7. class="list">
  8. <el-row :span="24">
  9. <el-col v-for="(item,index) in list"
  10. :key="index"
  11. :md="4"
  12. :xs="12"
  13. :sm="4">
  14. <el-radio :label="item.value">{{item.name}}</el-radio>
  15. </el-col>
  16. </el-row>
  17. </el-radio-group>
  18. </el-dialog>
  19. <span>
  20. <i class="icon-zhuti"
  21. @click="open"></i>
  22. </span>
  23. </div>
  24. </template>
  25. <script>
  26. import { setTheme } from "@/util/util";
  27. import { mapGetters } from "vuex";
  28. export default {
  29. data() {
  30. return {
  31. box: false,
  32. text: "",
  33. list: [
  34. {
  35. name: "默认主题",
  36. value: "default"
  37. },
  38. {
  39. name: "白色主题",
  40. value: "theme-white"
  41. },
  42. {
  43. name: "炫彩主题",
  44. value: "theme-star"
  45. }
  46. ]
  47. };
  48. },
  49. watch: {
  50. text: function(val) {
  51. this.$store.commit("SET_THEME_NAME", val);
  52. setTheme(val);
  53. }
  54. },
  55. computed: {
  56. ...mapGetters(["themeName"])
  57. },
  58. mounted() {
  59. this.text = this.themeName;
  60. if (!this.text) {
  61. this.text = "";
  62. }
  63. },
  64. methods: {
  65. open() {
  66. this.box = true;
  67. }
  68. }
  69. };
  70. </script>
  71. <style lang="scss" scoped>
  72. .list {
  73. width: 100%;
  74. }
  75. </style>