info.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. <template>
  2. <div class="main-menu lt-nv">
  3. <ol class="nav-l-1">
  4. <dt>指南</dt>
  5. <dd :class="curName=='intr' ?'l-1 curs':'l-1'">
  6. <a href="#/doc">介绍</a>
  7. </dd>
  8. <dd :class="curName=='fastStart' ?'l-1 curs':'l-1'">
  9. <a href="#/start">快速上手</a>
  10. </dd>
  11. <dd :class="curName=='theme' ?'l-1 curs':'l-1'">
  12. <a href="#/theme">主题定制</a>
  13. </dd>
  14. <dd :class="curName== 'international' ?'l-1 curs':'l-1'">
  15. <a href="#/international">国际化</a>
  16. </dd>
  17. <dd :class="curName=='update' ?'l-1 curs':'l-1'">
  18. <a href="https://github.com/jdf2e/nutui/releases" target="_blank">更新日志</a>
  19. </dd>
  20. </ol>
  21. <ol>
  22. <dt>组件</dt>
  23. <dd
  24. class="l-1"
  25. @click="selectNav(nameObj.name)"
  26. :class="cur.indexOf(nameObj.name)>-1&&'cur'"
  27. v-for="(nameObj,index) in sortedPackages"
  28. :key="index"
  29. >
  30. <div class="l-c-i">
  31. <span>{{nameObj.name}}</span>
  32. <i class="pt"></i>
  33. </div>
  34. <ul class="l-2" v-if="cur.indexOf(nameObj.name)>-1">
  35. <template v-for="cpt in nameObj.ary">
  36. <li
  37. v-on:click.stop="listCheck(cpt)"
  38. :class="curName==cpt.name ?'curs':''"
  39. :key="cpt.name" v-if="cpt.showDemo"
  40. >
  41. <router-link :to="{name:cpt.name}">
  42. {{cpt.name}}
  43. <span>{{cpt.chnName}}</span>
  44. </router-link>
  45. </li>
  46. </template>
  47. </ul>
  48. </dd>
  49. </ol>
  50. </div>
  51. </template>
  52. <script>
  53. import { sorts,packages } from "../../src/config.json";
  54. export default {
  55. name: "index",
  56. data() {
  57. return {
  58. path: "",
  59. packages: {},
  60. sortedPackages: [],
  61. cur: [],
  62. curName: ""
  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].sort(compare);
  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,ol {
  153. margin: 0;
  154. list-style: none;
  155. padding: 0;
  156. }
  157. dt{
  158. font-size:16px;
  159. font-weight: 500;
  160. text-indent:35px;
  161. color:#5b657b;
  162. margin:10px 0;
  163. }
  164. dd{
  165. margin:0;
  166. &>a{
  167. display:block;
  168. height:100%;
  169. cursor: pointer;
  170. }
  171. }
  172. .lt-nv {
  173. font-size: 14px;
  174. width: 295px;
  175. border-right: 1px solid #d8d8d8;
  176. a,
  177. span {
  178. text-decoration: none;
  179. color: #666666;
  180. }
  181. .curs {
  182. border-right: 4px solid #5396ff;
  183. color: #5396ff;
  184. background: rgba(83, 150, 255, 0.14);
  185. a,
  186. span {
  187. color: #5396ff;
  188. }
  189. }
  190. .pt {
  191. width: 0;
  192. height: 0;
  193. vertical-align: middle;
  194. border-width: 5px 5px 0;
  195. border-style: solid;
  196. border-color: #333 transparent transparent;
  197. transform: rotate(-90deg);
  198. }
  199. .l-1 {
  200. line-height: 40px;
  201. a {
  202. padding: 0 0 0 35px;
  203. }
  204. }
  205. .l-c {
  206. a {
  207. padding: 0 0 0 35px;
  208. }
  209. }
  210. .l-c-i {
  211. position: relative;
  212. span {
  213. padding: 0 0 0 35px;
  214. }
  215. .pt {
  216. float: right;
  217. margin: 20px 20px 0 0;
  218. }
  219. }
  220. .l-2 {
  221. overflow: hidden;
  222. a {
  223. font-size: 14px;
  224. padding: 0 0 0 50px;
  225. span {
  226. font-size: 12px;
  227. padding: 0 0 0 8px;
  228. }
  229. }
  230. }
  231. .cur {
  232. .pt {
  233. transition: all 0.5s;
  234. transform: rotate(0deg);
  235. }
  236. }
  237. .l-2 {
  238. a {
  239. display: inline-block;
  240. box-sizing: border-box;
  241. width: 100%;
  242. border-right: 1px solid #fff;
  243. }
  244. li:hover {
  245. transition: all 0.5;
  246. background: rgba(83, 150, 255, 0.14);
  247. border-right: 4px solid #5396ff;
  248. color: #5396ff;
  249. a,
  250. span {
  251. color: #5396ff;
  252. }
  253. }
  254. }
  255. .nav-l-1{
  256. dd:hover{
  257. transition: all 0.5;
  258. background: rgba(83, 150, 255, 0.14);
  259. border-right: 4px solid #5396ff;
  260. a,
  261. span {
  262. color: #5396ff;
  263. }
  264. }
  265. }
  266. }
  267. </style>