index.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. <template>
  2. <div class="project-init-manage">
  3. <a-tabs v-model:activeKey="activeKey" class="tabs">
  4. <a-tab-pane v-for="(item, index) in tabsOptions" :key="index">
  5. <template #tab>
  6. <span @click="item.onClick(item.params)">
  7. <component :is="item.icon"></component>
  8. {{ item.title }}({{ item.count }})
  9. </span>
  10. </template>
  11. </a-tab-pane>
  12. </a-tabs>
  13. <bs-table v-bind="tableOptions"></bs-table>
  14. </div>
  15. </template>
  16. <script setup lang="jsx">
  17. import { ref, reactive } from "vue"
  18. import BsTable, { useBsTable } from '/@/components/BsUi/Table/index.js';
  19. import { DISPLAY_STATE } from '/@/components/BsUi/constant.js';
  20. import { message } from "ant-design-vue";
  21. const activeKey = ref(0);
  22. const tabsOptions = [
  23. {
  24. title: '全部',
  25. icon: 'AppstoreOutlined',
  26. count: 0,
  27. params: {
  28. a: 1,
  29. },
  30. onClick: (value) => {
  31. console.log(value);
  32. },
  33. },
  34. {
  35. title: '标段',
  36. icon: 'TeamOutlined',
  37. count: 0,
  38. params: {},
  39. onClick: (value) => { },
  40. },
  41. {
  42. title: '商机',
  43. count: 0,
  44. icon: 'FileSyncOutlined',
  45. params: {},
  46. onClick: (value) => { },
  47. },
  48. {
  49. title: '立项',
  50. count: 0,
  51. icon: 'UserDeleteOutlined',
  52. params: {},
  53. onClick: (value) => { },
  54. },
  55. {
  56. title: '投标',
  57. count: 0,
  58. icon: 'UserDeleteOutlined',
  59. params: {},
  60. onClick: (value) => { },
  61. },
  62. {
  63. title: '中标',
  64. count: 0,
  65. icon: 'UserDeleteOutlined',
  66. params: {},
  67. onClick: (value) => { },
  68. },
  69. {
  70. title: '合同',
  71. count: 0,
  72. icon: 'UserDeleteOutlined',
  73. params: {},
  74. onClick: (value) => { },
  75. },
  76. {
  77. title: '履约',
  78. count: 0,
  79. icon: 'UserDeleteOutlined',
  80. params: {},
  81. onClick: (value) => { },
  82. },
  83. {
  84. title: '未中标',
  85. count: 0,
  86. icon: 'UserDeleteOutlined',
  87. params: {},
  88. onClick: (value) => { },
  89. },
  90. ];
  91. const {
  92. tableOptions,
  93. setTablePropsValue: setValue,
  94. getTablePropsValue: getValue,
  95. fetchTableData,
  96. } = useBsTable({
  97. tableOptions: {
  98. url: '/supports/customer/queryPage',
  99. gridOptions: {
  100. height: 600,
  101. loading: false,
  102. data: [],
  103. columns: [
  104. {
  105. type: 'seq',
  106. width: 80,
  107. },
  108. {
  109. field: 'projectName',
  110. title: '项目名称',
  111. },
  112. {
  113. field: 'projectCode',
  114. title: '项目ID',
  115. },
  116. {
  117. field: 'projectLocation',
  118. title: '项目地址',
  119. // cellRender: {
  120. // name: 'CellDict',
  121. // },
  122. },
  123. {
  124. field: 'projectStatus',
  125. title: '项目状态',
  126. },
  127. {
  128. field: 'clientName',
  129. title: '甲方名称',
  130. },
  131. {
  132. field: 'estimatedBidDate',
  133. title: '预计招标日期',
  134. },
  135. {
  136. field: 'budget',
  137. title: '概算金额(元)',
  138. },
  139. {
  140. field: 'plantPhaseUnit',
  141. title: '分厂/几期/机组',
  142. },
  143. {
  144. field: 'source',
  145. title: '项目来源',
  146. },
  147. {
  148. field: 'projectType',
  149. title: '项目类型',
  150. },
  151. {
  152. field: 'engineeringType',
  153. title: '工程属性',
  154. },
  155. {
  156. field: 'businessType',
  157. title: '业务类型',
  158. },
  159. {
  160. field: 'salesPerson',
  161. title: '归属营销人员',
  162. },
  163. {
  164. field: 'salesDepartment',
  165. title: '归属营销部门',
  166. },
  167. {
  168. field: 'creator',
  169. title: '创建人',
  170. },
  171. {
  172. field: 'createTime',
  173. title: '创建时间',
  174. },
  175. {
  176. cellRender: {
  177. name: 'CellOption',
  178. extraProps: {
  179. buttons: [
  180. {
  181. title: '查看详情',
  182. code: 'view',
  183. display: ({ row }) => {
  184. return DISPLAY_STATE.VISIBLE;
  185. },
  186. disabled({ row }) {
  187. return false;
  188. },
  189. onClick({ row }) {
  190. },
  191. extraProps: {},
  192. },
  193. ],
  194. },
  195. },
  196. },
  197. ],
  198. },
  199. data:[
  200. {
  201. id: 'OPP20230001',
  202. projectName: '智慧城市数据中心建设项目',
  203. projectCode: 'DC-2023-001',
  204. projectLocation: '北京市海淀区',
  205. projectStatus: '前期接触',
  206. clientName: '北京市政数管局',
  207. estimatedBidDate: '2023-11-15',
  208. budget: '28,500,000',
  209. plantPhaseUnit: '一期/主数据中心',
  210. source: '政府招标',
  211. projectType: '新基建',
  212. engineeringType: '机电安装',
  213. businessType: 'EPC总包',
  214. salesPerson: '张经理',
  215. salesDepartment: '华北营销部',
  216. creator: '系统管理员',
  217. createTime: '2023-01-10 09:00:00',
  218. activityType: '技术交流会',
  219. activityDate: '2023-02-20'
  220. },
  221. {
  222. id: 'OPP20230002',
  223. projectName: '新能源充电桩网络工程',
  224. projectCode: 'EV-2023-002',
  225. projectLocation: '上海市浦东新区',
  226. projectStatus: '方案设计',
  227. clientName: '上海电力公司',
  228. estimatedBidDate: '2023-09-30',
  229. budget: '15,200,000',
  230. plantPhaseUnit: '核心商圈/一期',
  231. source: '战略合作',
  232. projectType: '新能源',
  233. engineeringType: '市政配套',
  234. businessType: '设备供应',
  235. salesPerson: '李主管',
  236. salesDepartment: '华东营销部',
  237. creator: '市场专员',
  238. createTime: '2023-02-15 14:30:00',
  239. activityType: '现场考察',
  240. activityDate: '2023-03-10'
  241. },
  242. // 更多数据...
  243. {
  244. id: 'OPP20230003',
  245. projectName: '医疗云平台升级项目',
  246. projectCode: 'MED-2023-003',
  247. projectLocation: '广州市天河区',
  248. projectStatus: '需求确认',
  249. clientName: '广东省人民医院',
  250. estimatedBidDate: '2023-08-25',
  251. budget: '9,800,000',
  252. plantPhaseUnit: '主院区/云平台',
  253. source: '老客户',
  254. projectType: '医疗信息化',
  255. engineeringType: '系统集成',
  256. businessType: '软件服务',
  257. salesPerson: '王总监',
  258. salesDepartment: '华南营销部',
  259. creator: '技术顾问',
  260. createTime: '2023-03-05 11:20:00',
  261. activityType: '需求研讨会',
  262. activityDate: '2023-03-28'
  263. },
  264. {
  265. id: 'OPP20230004',
  266. projectName: '高校智慧校园改造',
  267. projectCode: 'EDU-2023-004',
  268. projectLocation: '武汉市洪山区',
  269. projectStatus: '招标准备',
  270. clientName: '武汉大学',
  271. estimatedBidDate: '2023-10-10',
  272. budget: '12,500,000',
  273. plantPhaseUnit: '主校区/信息化',
  274. source: '公开招标',
  275. projectType: '教育信息化',
  276. engineeringType: '智能化改造',
  277. businessType: '综合解决方案',
  278. salesPerson: '赵经理',
  279. salesDepartment: '华中营销部',
  280. creator: '商务专员',
  281. createTime: '2023-01-28 16:45:00',
  282. activityType: '技术宣讲会',
  283. activityDate: '2023-02-15'
  284. },
  285. {
  286. id: 'OPP20230005',
  287. projectName: '金融数据中心容灾系统',
  288. projectCode: 'FIN-2023-005',
  289. projectLocation: '深圳市南山区',
  290. projectStatus: '商务谈判',
  291. clientName: '招商银行',
  292. estimatedBidDate: '2023-07-15',
  293. budget: '32,000,000',
  294. plantPhaseUnit: '主中心/容灾机房',
  295. source: '定向邀标',
  296. projectType: '金融科技',
  297. engineeringType: '系统安全',
  298. businessType: '专业服务',
  299. salesPerson: '陈主管',
  300. salesDepartment: '深圳办事处',
  301. creator: '产品经理',
  302. createTime: '2023-02-10 10:15:00',
  303. activityType: '方案评审会',
  304. activityDate: '2023-03-05'
  305. },
  306. {
  307. id: 'OPP20230006',
  308. projectName: '工业4.0智能工厂项目',
  309. projectCode: 'IND-2023-006',
  310. projectLocation: '成都市龙泉驿区',
  311. projectStatus: '合同签订',
  312. clientName: '长安汽车',
  313. estimatedBidDate: '2023-06-30',
  314. budget: '45,000,000',
  315. plantPhaseUnit: '三工厂/智能制造',
  316. source: '战略客户',
  317. projectType: '工业自动化',
  318. engineeringType: '技术改造',
  319. businessType: '交钥匙工程',
  320. salesPerson: '马总监',
  321. salesDepartment: '西南营销部',
  322. creator: '解决方案专家',
  323. createTime: '2023-01-15 13:50:00',
  324. activityType: '工厂参观',
  325. activityDate: '2023-02-08'
  326. },
  327. {
  328. id: 'OPP20230007',
  329. projectName: '跨境电商物流中心',
  330. projectCode: 'LOG-2023-007',
  331. projectLocation: '杭州市萧山区',
  332. projectStatus: '实施中',
  333. clientName: '阿里巴巴国际站',
  334. estimatedBidDate: '2023-05-20',
  335. budget: '18,600,000',
  336. plantPhaseUnit: '保税区/智能仓',
  337. source: '生态合作',
  338. projectType: '物流自动化',
  339. engineeringType: '新建工程',
  340. businessType: '设备集成',
  341. salesPerson: '徐经理',
  342. salesDepartment: '浙江分公司',
  343. creator: '行业经理',
  344. createTime: '2023-01-05 08:30:00',
  345. activityType: '合作伙伴大会',
  346. activityDate: '2023-01-25'
  347. },
  348. {
  349. id: 'OPP20230008',
  350. projectName: '5G基站配套电源系统',
  351. projectCode: 'TEL-2023-008',
  352. projectLocation: '南京市江宁区',
  353. projectStatus: '已验收',
  354. clientName: '中国移动',
  355. estimatedBidDate: '2023-04-15',
  356. budget: '8,500,000',
  357. plantPhaseUnit: '主城区/基站群',
  358. source: '框架协议',
  359. projectType: '通信基建',
  360. engineeringType: '电力配套',
  361. businessType: '产品供应',
  362. salesPerson: '刘经理',
  363. salesDepartment: '江苏办事处',
  364. creator: '客户经理',
  365. createTime: '2022-12-20 15:20:00',
  366. activityType: '产品展示会',
  367. activityDate: '2023-01-10'
  368. }
  369. ],
  370. searchConfig: {
  371. enabled: true,
  372. fieldSpan: 4,
  373. fields: [
  374. {
  375. field: 'name',
  376. label: '项目名称',
  377. component: 'a-input',
  378. componentProps: {
  379. placeholder: '请输入项目名称',
  380. },
  381. },
  382. {
  383. field: 'name',
  384. label: '项目ID',
  385. component: 'a-input',
  386. componentProps: {
  387. placeholder: '请输入项目名称',
  388. },
  389. },
  390. {
  391. field: 'name',
  392. label: '项目地址',
  393. component: 'a-select',
  394. componentProps: {
  395. placeholder: '请选择项目地址',
  396. },
  397. },
  398. {
  399. field: 'name',
  400. label: '项目状态',
  401. component: 'a-select',
  402. componentProps: {
  403. placeholder: '请选择项目状态',
  404. },
  405. },
  406. ],
  407. },
  408. pagerConfig: {
  409. enabled: true,
  410. pageSize: 10,
  411. pageNum: 1,
  412. total: 0,
  413. isFixed: false,
  414. },
  415. mounted() {
  416. },
  417. },
  418. });
  419. </script>
  420. <style lang="scss" scoped>
  421. .project-init-manage{
  422. background-color: #fff;
  423. .tabs{
  424. padding: 0 24px;
  425. :deep(.anticon) {
  426. margin: 0;
  427. }
  428. }
  429. }
  430. </style>