index.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <template>
  2. <div class="m-4">
  3. <div class="mt-6" />
  4. <XTTab type="illness11" :selected="tabSelected" :data="tabData1" @item-click="callTab" />
  5. <div class="mt-6" />
  6. <div class="mt-6" />
  7. <XTTab type="illness11" :selected="tabSelected" :data="tabData2" @item-click="callTab" />
  8. <div class="mt-6" />
  9. <div class="flex justify-between my-4">
  10. <XTTab
  11. type="illness"
  12. :width="120"
  13. :selected="tabSelected"
  14. :data="tabData"
  15. @item-click="callTab"
  16. />
  17. <XTForm :form-data="formData" />
  18. </div>
  19. <div class="flex">
  20. <Sift :data="siftData" />
  21. </div>
  22. <div class="custome-tab">
  23. <a-tabs v-model:activeKey="activeKey">
  24. <a-tab-pane key="1" tab="Tab 1">Content of Tab Pane 1</a-tab-pane>
  25. <a-tab-pane key="2" tab="Tab 2" force-render>Content of Tab Pane 2</a-tab-pane>
  26. <a-tab-pane key="3" tab="Tab 3">Content of Tab Pane 3</a-tab-pane>
  27. </a-tabs>
  28. </div>
  29. <div class="tab">
  30. <div class="tab-item tab-item-first--selected"> 业务报价 </div>
  31. <div class="tab-item"> 业务报价 </div>
  32. <div class="tab-item"> 其他测试 </div>
  33. <div class="tab-item"> 其他测试 </div>
  34. <div class="tab-item tab-item--selected"> 其他测试 </div>
  35. </div>
  36. </div>
  37. </template>
  38. <script setup lang="ts">
  39. import { ref } from 'vue';
  40. import { XTTab } from '/@/components/XTTab/index';
  41. import { XTForm } from '/@/components/XTForm/index';
  42. import { onMounted } from 'vue';
  43. import { Sift } from '/@/components/XTList/index';
  44. const tabSelected = ref('0');
  45. const dataSource = ref([]);
  46. const activeKey = ref('1');
  47. const siftData = [
  48. {
  49. field: 'gender',
  50. label: '性别',
  51. value: '男',
  52. },
  53. {
  54. field: 'age',
  55. label: '年龄区间',
  56. value: '25岁-50岁',
  57. },
  58. ];
  59. onMounted(async () => {
  60. for (let i = 0; i < 10; i++) {
  61. const obj = {
  62. createTime: '2023-05-23 10:09:48',
  63. updateTime: '2023-05-23 19:00:32',
  64. id: '1660830352886149125' + Math.round(Math.random() * 10000),
  65. name: '驼人',
  66. packageId: '1655202440997244930',
  67. packageName: '测试套餐',
  68. username: 'tuoren',
  69. type: 'custom',
  70. contractUser: 'Lf',
  71. contactMobile: '18339543638',
  72. remark: null,
  73. disable: 0,
  74. };
  75. dataSource.value.push(obj);
  76. }
  77. });
  78. const tabData = [
  79. {
  80. key: '0',
  81. label: '全部',
  82. value: 128,
  83. hasValue: true,
  84. hasBracket: true,
  85. },
  86. {
  87. key: '1',
  88. label: 'A区',
  89. value: 12,
  90. hasValue: true,
  91. prefixColor: '#1BC1B3',
  92. valueColor: 'red',
  93. hasBracket: true,
  94. },
  95. {
  96. key: '2',
  97. label: 'B区',
  98. value: 18,
  99. hasValue: true,
  100. prefixColor: '#854AFF',
  101. hasBracket: true,
  102. },
  103. ];
  104. const tabData2 = [
  105. {
  106. key: '0',
  107. label: 'A1',
  108. },
  109. {
  110. key: '1',
  111. label: 'A2',
  112. disabled: true,
  113. },
  114. {
  115. key: '2',
  116. label: 'B3',
  117. },
  118. ];
  119. const tabData1 = [
  120. {
  121. key: '0',
  122. label: '全部',
  123. },
  124. {
  125. key: '1',
  126. label: 'A区',
  127. },
  128. {
  129. key: '2',
  130. label: 'B区',
  131. },
  132. ];
  133. // formdata
  134. const formData = [
  135. {
  136. name: 'text',
  137. label: '全部',
  138. componentType: 'Select',
  139. placeholder: '请选择',
  140. width: 80,
  141. defaultValue: '1',
  142. dicts: [
  143. { label: '全部', value: '1' },
  144. { label: '未称量', value: '2', prefixColor: '#1BC1B3' },
  145. { label: '待确认', value: '3', prefixColor: '#854AFF' },
  146. { label: '可打印', value: '4', prefixColor: '#1BC1B3' },
  147. { label: '完成', value: '5', prefixColor: '#854AFF' },
  148. ],
  149. },
  150. {
  151. name: 'text22',
  152. componentType: 'Select',
  153. placeholder: '请选择',
  154. width: 120,
  155. defaultValue: '1',
  156. label: '班次',
  157. dicts: [
  158. { label: '第一班', value: '1' },
  159. { label: '第二班', value: '2' },
  160. { label: '第三班', value: '3' },
  161. ],
  162. },
  163. {
  164. name: 'text1',
  165. componentType: 'Input',
  166. placeholder: '请输入',
  167. width: 200,
  168. },
  169. {
  170. name: 'text233',
  171. componentType: 'DatePicker',
  172. placeholder: '请输入',
  173. format: 'YYYY-MM-DD',
  174. valueFormat: 'YYYY-MM-DD',
  175. },
  176. {
  177. name: 'text233',
  178. componentType: 'RangePicker',
  179. placeholder: '请输入',
  180. format: 'YYYY-MM-DD',
  181. valueFormat: 'YYYY-MM-DD',
  182. },
  183. {
  184. name: 'filter',
  185. componentType: 'IconBtn',
  186. count: 4,
  187. },
  188. ];
  189. // 回调
  190. function callTab(data) {
  191. console.log('🚀 ~ file: index.vue:41 ~ callTab ~ data:', data);
  192. tabSelected.value = data.value;
  193. }
  194. </script>
  195. <style lang="less" scoped>
  196. ::v-deep(.ant-form-item-label > label) {
  197. width: 100% !important;
  198. }
  199. .timeline-outer {
  200. display: flex;
  201. margin-left: 20px;
  202. transition: all 0.3s ease-in-out;
  203. &_item {
  204. padding: 0 30px;
  205. height: 40px;
  206. line-height: 40px;
  207. border-radius: 30px;
  208. color: #fff;
  209. background: #0075ff;
  210. margin-right: 20px;
  211. cursor: pointer;
  212. }
  213. }
  214. .tab {
  215. background-color: #f6f7fb;
  216. // height: 48px;
  217. display: flex;
  218. &-item {
  219. width: 200px;
  220. height: 60px;
  221. text-align: center;
  222. line-height: 4.8;
  223. font-size: 16px;
  224. color: #222a3d;
  225. cursor: pointer;
  226. background-image: url('/@/assets/images/tabm.png');
  227. background-size: cover;
  228. margin-left: -28px;
  229. transition: all 0.32s ease-in-out;
  230. &:first-child {
  231. background-image: url('/@/assets/images/tab.png');
  232. margin-left: -14px;
  233. &:hover {
  234. background-image: url('/@/assets/images/tab-selected.png') !important;
  235. z-index: 29;
  236. }
  237. }
  238. &:last-child {
  239. background-image: url('/@/assets/images/tabl.png');
  240. }
  241. &-first--selected {
  242. background-image: url('/@/assets/images/tab-selected.png') !important;
  243. z-index: 19;
  244. }
  245. &--selected {
  246. background-image: url('/@/assets/images/tabm-selected.png') !important;
  247. z-index: 19;
  248. }
  249. &:hover {
  250. background-image: url('/@/assets/images/tabm-selected.png') !important;
  251. z-index: 29;
  252. }
  253. }
  254. }
  255. </style>