OrderList.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716
  1. <template>
  2. <!-- 工单列表 -->
  3. <div class="orderList">
  4. <div class="inner">
  5. <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
  6. <el-tab-pane :label="'全部 (' + allOrderTotal + ')'" name="all">
  7. <!-- 工单列表 -->
  8. <div class="order" v-for="item in allOrder" :key="item.id">
  9. <!-- 工单头部 -->
  10. <div class="title">
  11. <span v-show="item.status == 6" :class="item.status == 6 ? 'orangeStatus' : 'grayStatus'">{{
  12. order[item.status] }}</span>
  13. <span v-show="item.status == 1" :class="item.status == 1 ? 'greenStatus' : 'grayStatus'">{{
  14. order[item.status] }}</span>
  15. <span v-show="item.status != 6 && item.status != 1"
  16. :class="item.status != 6 && item.status != 1 ? 'grayStatus' : ''">{{ order[item.status]
  17. }}</span>
  18. <span class="code">
  19. 工单编号:
  20. <span>{{ item.order_num }}</span>
  21. </span>
  22. <span class="createTime right">{{ item.created_at }}</span>
  23. </div>
  24. <!-- 工单内容 -->
  25. <div class="text">
  26. <!-- 开始时间和结束时间 -->
  27. <div class="time">
  28. <p>
  29. 开始时间:
  30. <span>{{ item.sttime }}</span>
  31. </p>
  32. <p>
  33. 结束时间:
  34. <span>{{ item.edtime }}</span>
  35. </p>
  36. </div>
  37. <!-- 广告的天数与个数 -->
  38. <div class="num">
  39. <p>
  40. 天数:
  41. <span>{{ item.days }}天</span>
  42. </p>
  43. <p>
  44. 广告个数:
  45. <span>{{ item.num }}个</span>
  46. </p>
  47. </div>
  48. <!-- 广告状态及总价格 -->
  49. <div class="state">
  50. <p>
  51. 广告状态:
  52. <span>{{ order_ad[item.ad_status] }}</span>
  53. </p>
  54. <p>
  55. <span class="price">{{ item.price }}</span>
  56. </p>
  57. </div>
  58. <!-- 按钮 -->
  59. <div class="btn">
  60. <button @click="goCancel(item)">{{ item.status == 1 ? '再次申请' : '取消工单' }}</button>
  61. <button @click="goDetail(item)">查看详情</button>
  62. </div>
  63. </div>
  64. </div>
  65. <!-- 分页 -->
  66. <div class="pagination">
  67. <HomePagination @sendData="handleData" :total="allOrderTotal"></HomePagination>
  68. </div>
  69. </el-tab-pane>
  70. <el-tab-pane :label="'已通过 (' + total1 + ')'" name="1">
  71. <!-- 工单列表 -->
  72. <div class="order1" v-for="item in orderList" :key="item.id">
  73. <!-- 工单头部 -->
  74. <div class="title">
  75. <span class="statusClass">已通过</span>
  76. <span class="code">
  77. 工单编号:
  78. <span>{{ item.order_num }}</span>
  79. </span>
  80. <span class="createTime right">{{ item.created_at }}</span>
  81. </div>
  82. <!-- 工单内容 -->
  83. <div class="text">
  84. <!-- 开始时间和结束时间 -->
  85. <div class="time">
  86. <p>
  87. 开始时间:
  88. <span>{{ item.sttime }}</span>
  89. </p>
  90. <p>
  91. 结束时间:
  92. <span>{{ item.edtime }}</span>
  93. </p>
  94. </div>
  95. <!-- 广告的天数与个数 -->
  96. <div class="num">
  97. <p>
  98. 天数:
  99. <span>{{ item.days }}天</span>
  100. </p>
  101. <p>
  102. 广告个数:
  103. <span>{{ item.num }}个</span>
  104. </p>
  105. </div>
  106. <!-- 广告状态及总价格 -->
  107. <div class="state">
  108. <p>
  109. 广告状态:
  110. <span>{{ order_ad[item.ad_status] }}</span>
  111. </p>
  112. <p>
  113. <span class="price">{{ item.price }}</span>
  114. </p>
  115. </div>
  116. <!-- 按钮 -->
  117. <div class="btn">
  118. <button @click="goCancel(item)">取消工单</button>
  119. <button @click="goDetail(item)">查看详情</button>
  120. </div>
  121. </div>
  122. </div>
  123. <!-- 分页 -->
  124. <div class="pagination">
  125. <HomePagination @sendData="handleData1" :total="total1"></HomePagination>
  126. </div>
  127. </el-tab-pane>
  128. <el-tab-pane :label="'已驳回 (' + total2 + ')'" name="2">
  129. <!-- 工单列表 -->
  130. <div class="order2" v-for="item in orderList" :key="item.id">
  131. <!-- 工单头部 -->
  132. <div class="title">
  133. <span class="statusClass">已驳回</span>
  134. <span class="code">
  135. 工单编号:
  136. <span>{{ item.order_num }}</span>
  137. </span>
  138. <span class="createTime right">{{ item.created_at }}</span>
  139. </div>
  140. <!-- 工单内容 -->
  141. <div class="text">
  142. <!-- 开始时间和结束时间 -->
  143. <div class="time">
  144. <p>
  145. 开始时间:
  146. <span>{{ item.sttime }}</span>
  147. </p>
  148. <p>
  149. 结束时间:
  150. <span>{{ item.edtime }}</span>
  151. </p>
  152. </div>
  153. <!-- 广告的天数与个数 -->
  154. <div class="num">
  155. <p>
  156. 天数:
  157. <span>{{ item.days }}天</span>
  158. </p>
  159. <p>
  160. 广告个数:
  161. <span>{{ item.num }}个</span>
  162. </p>
  163. </div>
  164. <!-- 广告状态及总价格 -->
  165. <div class="state">
  166. <p>
  167. 广告状态:
  168. <span>{{ order_ad[item.ad_status] }}</span>
  169. </p>
  170. <p>
  171. <span class="price">{{ item.price }}</span>
  172. </p>
  173. </div>
  174. <!-- 按钮 -->
  175. <div class="btn">
  176. <button @click="goCancel(item)">取消工单</button>
  177. <button @click="goDetail(item)">查看详情</button>
  178. </div>
  179. </div>
  180. </div>
  181. <!-- 分页 -->
  182. <div class="pagination">
  183. <HomePagination @sendData="handleData2" :total="total2"></HomePagination>
  184. </div>
  185. </el-tab-pane>
  186. <el-tab-pane :label="'待审核 (' + total6 + ')'" name="6">
  187. <!-- 工单列表 -->
  188. <div class="order6" v-for="item in orderList" :key="item.id">
  189. <!-- 工单头部 -->
  190. <div class="title">
  191. <span class="statusClass">待审核</span>
  192. <span class="code">
  193. 工单编号:
  194. <span>{{ item.order_num }}</span>
  195. </span>
  196. <span class="createTime right">{{ item.created_at }}</span>
  197. </div>
  198. <!-- 工单内容 -->
  199. <div class="text">
  200. <!-- 开始时间和结束时间 -->
  201. <div class="time">
  202. <p>
  203. 开始时间:
  204. <span>{{ item.sttime }}</span>
  205. </p>
  206. <p>
  207. 结束时间:
  208. <span>{{ item.edtime }}</span>
  209. </p>
  210. </div>
  211. <!-- 广告的天数与个数 -->
  212. <div class="num">
  213. <p>
  214. 天数:
  215. <span>{{ item.days }}天</span>
  216. </p>
  217. <p>
  218. 广告个数:
  219. <span>{{ item.num }}个</span>
  220. </p>
  221. </div>
  222. <!-- 广告状态及总价格 -->
  223. <div class="state">
  224. <p>
  225. 广告状态:
  226. <span>{{ order_ad[item.ad_status] }}</span>
  227. </p>
  228. <p>
  229. <span class="price">{{ item.price }}</span>
  230. </p>
  231. </div>
  232. <!-- 按钮 -->
  233. <div class="btn">
  234. <button @click="goCancel(item)">取消工单</button>
  235. <button @click="goDetail(item)">查看详情</button>
  236. </div>
  237. </div>
  238. </div>
  239. <!-- 分页 -->
  240. <div class="pagination">
  241. <HomePagination @sendData="handleData3" :total="total6"></HomePagination>
  242. </div>
  243. </el-tab-pane>
  244. </el-tabs>
  245. </div>
  246. </div>
  247. </template>
  248. <script setup>
  249. import { ref } from 'vue'
  250. import { ElTabs, ElTabPane, ElMessage } from 'element-plus'
  251. import { useStatusStore } from "@/store/status"
  252. const StatusStore = useStatusStore()
  253. // axios请求
  254. const nuxtApp = useNuxtApp();
  255. const axios = nuxtApp.$axios;
  256. const activeName = ref('first')
  257. let orderList = useState("orderList", () => "")
  258. let order = useState('order', () => "")
  259. let orders = useState('orders', () => "")
  260. let order_ad = useState('order_ad', () => [])
  261. let allOrder = useState("allOrder", () => "")
  262. let allOrderTotal = useState("allOrderTotal", () => "")
  263. let total1 = useState("total1", () => "")
  264. let total2 = useState("total2", () => "")
  265. let total6 = useState("total6", () => "")
  266. let page = useState("page", () => "1")
  267. let pageSize = useState("pageSize", () => "10")
  268. let page1 = useState("page1", () => "1")
  269. //全部标签下页码改变后触发的事件
  270. const handleData = (data) => {
  271. console.log(data.value)
  272. page.value = data.value
  273. console.log(page);
  274. //在全部下 页码发生变化时去请求对应的数据
  275. axios.get(`/order/getOrderList?pageSize=${pageSize.value}&page=${page.value}`).then(response => {
  276. // if (response.message) {
  277. // ElMessage(response.message)
  278. // }
  279. console.log(response);
  280. console.log(response.data.rows);
  281. allOrder.value = response.data.rows
  282. console.log(orderList.value);
  283. }).catch(error => {
  284. console.log(error);
  285. })
  286. }
  287. //已通过标签 页码改变后触发的事件
  288. const handleData1 = (data) => {
  289. console.log(data.value)
  290. page1.value = data.value
  291. console.log(page1);
  292. //在全部下 页码发生变化时去请求对应的数据
  293. axios.get(`/order/getOrderList?pageSize=${pageSize.value}&page=${page1.value}&status=${1}`).then(response => {
  294. console.log(response.data.rows);
  295. if (response.message) {
  296. ElMessage(response.message)
  297. }
  298. orderList.value = response.data.rows
  299. console.log(orderList.value);
  300. }).catch(error => {
  301. console.log(error);
  302. })
  303. }
  304. //已驳回标签 页码改变后触发的事件
  305. const handleData2 = (data) => {
  306. console.log(data.value)
  307. page1.value = data.value
  308. console.log(page1);
  309. //在全部下 页码发生变化时去请求对应的数据
  310. axios.get(`/order/getOrderList?pageSize=${pageSize.value}&page=${page1.value}&status=${2}`).then(response => {
  311. if (response.message) {
  312. ElMessage(response.message)
  313. }
  314. console.log(response.data.rows);
  315. orderList.value = response.data.rows
  316. console.log(orderList.value);
  317. }).catch(error => {
  318. console.log(error);
  319. })
  320. }
  321. //待审核标签 页码改变后触发的事件
  322. const handleData3 = (data) => {
  323. console.log(data.value)
  324. page1.value = data.value
  325. console.log(page1);
  326. //在全部下 页码发生变化时去请求对应的数据
  327. axios.get(`/order/getOrderList?pageSize=${pageSize.value}&page=${page1.value}&status=${6}`).then(response => {
  328. console.log(response.data.rows);
  329. // if (response.message) {
  330. // ElMessage(response.message)
  331. // }
  332. orderList.value = response.data.rows
  333. console.log(orderList.value);
  334. }).catch(error => {
  335. console.log(error);
  336. })
  337. }
  338. //点击tab标题获取对应的数据
  339. const handleClick = (tab, event) => {
  340. console.log(tab.props.name, event)
  341. if (tab.props.name = 'all') {
  342. // allOrder
  343. axios.get(`/order/getOrderList?pageSize=${pageSize.value}&page=${page.value}`).then(response => {
  344. console.log(response.data.rows);
  345. // if (response.message) {
  346. // ElMessage(response.message)
  347. // }
  348. allOrder.value = response.data.rows
  349. console.log(orderList.value);
  350. }).catch(error => {
  351. console.log(error);
  352. })
  353. } else {
  354. axios.get(`/order/getOrderList?pageSize=${pageSize.value}&page=${page.value}&status=${tab.props.name}`).then(response => {
  355. console.log(response.data.rows);
  356. // if (response.message) {
  357. // ElMessage(response.message)
  358. // }
  359. orderList.value = response.data.rows
  360. console.log(orderList.value);
  361. }).catch(error => {
  362. console.log(error);
  363. })
  364. }
  365. }
  366. // 取消工单
  367. let goCancel = (item) => {
  368. console.log(item);
  369. if (item.status == 1) {
  370. // 再次申请
  371. } else {
  372. //删除订单
  373. // axios.get(`/order/delOrderAD&id=${item.id}`).then(response=>{
  374. // console.log(response);
  375. // })
  376. // 撤销工单
  377. axios.get(`/order/cancelOrder&order_id=${item.id}`).then(response => {
  378. console.log(response.message);
  379. ElMessage(response.message)
  380. })
  381. }
  382. }
  383. // 查看详情
  384. let goDetail = (item) => {
  385. console.log(item);
  386. const params = {
  387. id: item.id,
  388. days: item.days,
  389. status: item.status,
  390. ad_status: item.ad_status
  391. }
  392. navigateTo({
  393. path: "/advertising/adDetail",
  394. query: params
  395. })
  396. }
  397. // 获取广告状态
  398. const getStauts = async () => {
  399. try {
  400. const response = await axios.get("/order/getStatus");
  401. console.log(response.data);
  402. order.value = response.data.order
  403. order_ad.value = response.data.order_ad
  404. StatusStore.setOrderStatus(order.value)
  405. StatusStore.setAdStatus(order_ad.value)
  406. //工单状态
  407. orders.value = JSON.parse(JSON.stringify(order.value)) //深拷贝
  408. // console.log(orders.value);
  409. delete orders.value[3]
  410. delete orders.value[4]
  411. delete orders.value[5]
  412. delete orders.value[7]
  413. } catch (error) {
  414. console.error(error);
  415. }
  416. }
  417. //获取全部工单
  418. const getOrderList = async () => {
  419. try {
  420. const response = await axios.get(`/order/getOrderList?pageSize=${pageSize.value}&page=${page.value}`);
  421. // console.log(response.data.rows);
  422. // if (response.message) {
  423. // ElMessage(response.message)
  424. // }
  425. allOrder.value = response.data.rows
  426. allOrderTotal.value = response.data.count.all
  427. total1.value = response.data.count.pass
  428. total2.value = response.data.count.return
  429. total6.value = response.data.count.wait
  430. } catch (error) {
  431. console.error(error);
  432. }
  433. }
  434. //挂载成功钩子函数
  435. onMounted(() => {
  436. //获取广告状态
  437. getStauts()
  438. // 获取全部工单
  439. getOrderList()
  440. })
  441. </script>
  442. <style lang="less" scoped>
  443. .orderList {
  444. width: 1200px;
  445. .inner {
  446. overflow: hidden;
  447. /deep/.el-tabs__header {
  448. width: 1100px;
  449. margin: 0 auto;
  450. }
  451. /deep/.el-tabs__item {
  452. padding: 0 100px 0 20px;
  453. font-size: 16px;
  454. height: 60px;
  455. }
  456. /deep/.el-tabs__item.is-active,
  457. /deep/.el-tabs__item:hover {
  458. color: #33b023;
  459. }
  460. /deep/.el-tabs__active-bar {
  461. background-color: #33b023;
  462. height: 0;
  463. }
  464. /deep/.el-tabs__nav {
  465. height: 60px;
  466. }
  467. .order1,
  468. .order2,
  469. .order6,
  470. .order {
  471. width: 1196px;
  472. height: 210px;
  473. border: 1px solid #e1e1e1;
  474. margin-top: 30px;
  475. .title {
  476. height: 60px;
  477. line-height: 30px;
  478. border-bottom: 1px solid #e1e1e1;
  479. padding: 15px 24px 15px 50px;
  480. box-sizing: border-box;
  481. background-color: #fafafa;
  482. >span {
  483. display: inline-block;
  484. text-align: center;
  485. font-family: Microsoft YaHei, Microsoft YaHei;
  486. vertical-align: middle;
  487. }
  488. .statusClass {
  489. width: 70px;
  490. height: 32px;
  491. line-height: 32px;
  492. margin-right: 50px;
  493. background: #fbebd5;
  494. color: #FFAA33;
  495. font-weight: 400;
  496. font-size: 16px;
  497. }
  498. .orangeStatus {
  499. width: 70px;
  500. height: 32px;
  501. line-height: 32px;
  502. margin-right: 50px;
  503. background: #fbebd5;
  504. color: #FFAA33;
  505. font-weight: 400;
  506. font-size: 16px;
  507. }
  508. .greenStatus {
  509. width: 70px;
  510. height: 32px;
  511. line-height: 32px;
  512. margin-right: 50px;
  513. background: #d5ecd2;
  514. color: #33B023;
  515. font-weight: 400;
  516. font-size: 16px;
  517. }
  518. .grayStatus {
  519. width: 70px;
  520. height: 32px;
  521. line-height: 32px;
  522. margin-right: 50px;
  523. background: #e8e8e8;
  524. color: #999999;
  525. font-weight: 400;
  526. font-size: 16px;
  527. }
  528. .code {
  529. font-weight: 400;
  530. font-size: 16px;
  531. color: #333333;
  532. }
  533. .createTime {
  534. font-weight: bold;
  535. font-size: 16px;
  536. color: #333333;
  537. }
  538. }
  539. .text {
  540. display: flex;
  541. padding: 35px 70px 35px 50px;
  542. justify-content: space-between;
  543. .state,
  544. .num,
  545. .time {
  546. height: 80px;
  547. padding: 2px 0;
  548. font-weight: 400;
  549. font-size: 16px;
  550. color: #333333;
  551. >p:first-child {
  552. margin-bottom: 30px;
  553. }
  554. }
  555. .state,
  556. .num {
  557. span {
  558. font-weight: 600;
  559. }
  560. }
  561. .state {
  562. >p:first-child {
  563. margin-bottom: 22px;
  564. }
  565. .price {
  566. font-weight: bold;
  567. font-size: 24px;
  568. color: #028E21;
  569. }
  570. }
  571. .btn {
  572. height: 85px;
  573. button {
  574. display: block;
  575. width: 82px;
  576. height: 34px;
  577. border: none;
  578. border-radius: 4px;
  579. }
  580. >button:first-child {
  581. border: 1px solid #33b023;
  582. color: #33b023;
  583. background-color: #fff;
  584. margin-bottom: 15px;
  585. }
  586. >button:last-child {
  587. background-color: #33b023;
  588. color: #fff;
  589. }
  590. }
  591. }
  592. }
  593. .order6>.title>.statusClass {
  594. background: #fbebd5;
  595. color: #FFAA33;
  596. }
  597. .order1>.title>.statusClass {
  598. background: #d5ecd2;
  599. color: #33B023;
  600. }
  601. .order2>.title>.statusClass {
  602. background: #e8e8e8;
  603. color: #999999;
  604. }
  605. .pagination {
  606. margin-top: 60px;
  607. margin-bottom: 90px;
  608. }
  609. }
  610. }
  611. </style>