info.vue 5.8 KB

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