info.vue 5.5 KB

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