info.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <template>
  2. <div class="main-menu lt-nv">
  3. <div class="left-nav-fixed">
  4. <ol class="nav-l-1">
  5. <dt>指南</dt>
  6. <dd :class="curName == 'intr' ? 'l-1 curs' : 'l-1'">
  7. <a href="#/intro">介绍</a>
  8. </dd>
  9. <dd :class="curName == 'fastStart' ? 'l-1 curs' : 'l-1'">
  10. <a href="#/start">快速上手</a>
  11. </dd>
  12. <dd :class="curName == 'theme' ? 'l-1 curs' : 'l-1'">
  13. <a href="#/theme">主题定制</a>
  14. </dd>
  15. <dd :class="curName == 'international' ? 'l-1 curs' : 'l-1'">
  16. <a href="#/international">国际化</a>
  17. </dd>
  18. <dd :class="curName == 'update' ? 'l-1 curs' : 'l-1'">
  19. <a href="https://github.com/jdf2e/nutui/releases" target="_blank">更新日志</a>
  20. </dd>
  21. </ol>
  22. <ol class="cplist">
  23. <dt>组件</dt>
  24. <dd
  25. class="l-1"
  26. @click="selectNav(nameObj.name)"
  27. :class="cur.indexOf(nameObj.name) > -1 && 'cur'"
  28. v-for="(nameObj, index) in sortedPackages"
  29. :key="index"
  30. >
  31. <div class="l-c-i">
  32. <span>{{ nameObj.name }}</span>
  33. <i class="pt"></i>
  34. </div>
  35. <ul class="l-2" v-if="cur.indexOf(nameObj.name) > -1">
  36. <template v-for="cpt in nameObj.ary">
  37. <li v-on:click.stop="listCheck(cpt)" :class="curName == cpt.name ? 'curs' : ''" :key="cpt.name" v-if="cpt.showDemo">
  38. <router-link :to="{ name: cpt.name }">
  39. {{ cpt.name }}
  40. <span>{{ cpt.chnName }}</span>
  41. </router-link>
  42. </li>
  43. </template>
  44. </ul>
  45. </dd>
  46. </ol>
  47. </div>
  48. </div>
  49. </template>
  50. <script>
  51. import { sorts, packages } from '@/config.json';
  52. import { version } from '@/../package.json';
  53. export default {
  54. name: 'index',
  55. data() {
  56. return {
  57. path: '',
  58. packages: {},
  59. sortedPackages: [],
  60. cur: [],
  61. curName: '',
  62. version: version,
  63. };
  64. },
  65. watch: {
  66. packages() {
  67. // const compare = (obj1, obj2) => {
  68. // const val1 = obj1.name;
  69. // const val2 = obj2.name;
  70. // if (val1 < val2) {
  71. // return -1;
  72. // } else if (val1 > val2) {
  73. // return 1;
  74. // } else {
  75. // return 0;
  76. // }
  77. // };
  78. let that = this;
  79. let tempAry = [];
  80. let temp = {};
  81. let sorts = this.sorts;
  82. let sortArys = [...this.packages];
  83. sortArys.map((item) => {
  84. let name = sorts[item.sort];
  85. if (!temp[name]) {
  86. temp[name] = [];
  87. }
  88. temp[name].push(item);
  89. });
  90. for (let key in temp) {
  91. tempAry.push({
  92. name: key,
  93. ary: temp[key],
  94. });
  95. }
  96. let routeName = this.$route.name;
  97. this.sortedPackages = tempAry;
  98. tempAry.map((list) => {
  99. let showParentNode = false;
  100. list.ary.map((ary) => {
  101. if (ary.name == routeName) {
  102. showParentNode = true;
  103. }
  104. });
  105. if (showParentNode) {
  106. that.cur.push(list.name);
  107. }
  108. });
  109. },
  110. $route: 'fetchData',
  111. },
  112. methods: {
  113. fetchData(obj) {
  114. let that = this;
  115. this.curName = obj.name;
  116. let sortedPackages = this.sortedPackages;
  117. this.selectNav(obj.name);
  118. },
  119. listCheck(obj) {
  120. // this.curName = obj.name;
  121. },
  122. selectNav(val) {
  123. let nowCur = this.cur;
  124. let index = nowCur.indexOf(val);
  125. if (index > -1) {
  126. nowCur.splice(index, 1);
  127. } else {
  128. nowCur.push(val);
  129. }
  130. this.cur = nowCur;
  131. },
  132. },
  133. created() {
  134. let nameRt = this.$route.name;
  135. let packgs = packages;
  136. this.cur = sorts;
  137. this.curName = nameRt;
  138. this.packages = packgs;
  139. this.sorts = sorts;
  140. },
  141. };
  142. </script>
  143. <style lang="scss" scoped>
  144. .fade-enter-active,
  145. .fade-leave-active {
  146. transition: all 1s;
  147. }
  148. .fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
  149. opacity: 0;
  150. height: 0;
  151. }
  152. ul,
  153. ol {
  154. margin: 0;
  155. list-style: none;
  156. padding: 0;
  157. }
  158. dt {
  159. font-size: 16px;
  160. font-weight: 500;
  161. text-indent: 35px;
  162. color: #5b657b;
  163. margin: 10px 0;
  164. }
  165. dd {
  166. margin: 0;
  167. & > a {
  168. display: block;
  169. height: 100%;
  170. cursor: pointer;
  171. }
  172. }
  173. .cplist {
  174. padding-bottom: 20px;
  175. }
  176. .left-nav-fixed {
  177. margin-top: 115px;
  178. }
  179. .lt-nv {
  180. font-size: 14px;
  181. width: 295px;
  182. border-right: 1px solid #d8d8d8;
  183. a,
  184. span {
  185. text-decoration: none;
  186. color: #666666;
  187. }
  188. .curs {
  189. border-right: 4px solid #5396ff;
  190. color: #5396ff;
  191. background: rgba(83, 150, 255, 0.14);
  192. a,
  193. span {
  194. color: #5396ff;
  195. }
  196. }
  197. .pt {
  198. width: 0;
  199. height: 0;
  200. vertical-align: middle;
  201. border-width: 5px 5px 0;
  202. border-style: solid;
  203. border-color: #333 transparent transparent;
  204. transform: rotate(-90deg);
  205. }
  206. .l-1 {
  207. line-height: 40px;
  208. a {
  209. padding: 0 0 0 35px;
  210. }
  211. }
  212. .l-c {
  213. a {
  214. padding: 0 0 0 35px;
  215. }
  216. }
  217. .l-c-i {
  218. cursor: pointer;
  219. position: relative;
  220. span {
  221. padding: 0 0 0 35px;
  222. }
  223. .pt {
  224. float: right;
  225. margin: 20px 20px 0 0;
  226. }
  227. }
  228. .l-2 {
  229. overflow: hidden;
  230. a {
  231. font-size: 14px;
  232. padding: 0 0 0 50px;
  233. span {
  234. font-size: 12px;
  235. padding: 0 0 0 8px;
  236. }
  237. }
  238. }
  239. .cur {
  240. .pt {
  241. transition: all 0.5s;
  242. transform: rotate(0deg);
  243. }
  244. }
  245. .l-2 {
  246. a {
  247. display: inline-block;
  248. box-sizing: border-box;
  249. width: 100%;
  250. border-right: 1px solid #fff;
  251. }
  252. li:hover {
  253. transition: all 0.5;
  254. background: rgba(83, 150, 255, 0.14);
  255. border-right: 4px solid #5396ff;
  256. color: #5396ff;
  257. a,
  258. span {
  259. color: #5396ff;
  260. }
  261. }
  262. }
  263. .nav-l-1 {
  264. dd:hover {
  265. transition: all 0.5;
  266. background: rgba(83, 150, 255, 0.14);
  267. border-right: 4px solid #5396ff;
  268. a,
  269. span {
  270. color: #5396ff;
  271. }
  272. }
  273. }
  274. }
  275. </style>