index.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. <template>
  2. <div>
  3. <basic-container v-if="show">
  4. <div class="home-container">
  5. <div style="display: flex;justify-content: center;">
  6. <div class="content">
  7. <div class="content-item" @click="handleClick('')">
  8. <div class="card">
  9. <div class="card-title card-title1">
  10. <span>
  11. </span>
  12. </div>
  13. <div class="card-content">
  14. <span class="card-content-num">1</span>
  15. <span class="card-content-text">全部订单</span>
  16. </div>
  17. </div>
  18. </div>
  19. <div class="divider"/>
  20. <div class="content-item" @click="handleClick('0')">
  21. <div class="card">
  22. <div class="card-title card-title2">
  23. <span>
  24. </span>
  25. </div>
  26. <div class="card-content">
  27. <span class="card-content-num">1</span>
  28. <span class="card-content-text">未调度</span>
  29. </div>
  30. </div>
  31. </div>
  32. <div class="divider"/>
  33. <div class="content-item" @click="handleClick('1')">
  34. <div class="card">
  35. <div class="card-title card-title3">
  36. <span>
  37. </span>
  38. </div>
  39. <div class="card-content">
  40. <span class="card-content-num">1</span>
  41. <span class="card-content-text">未派车</span>
  42. </div>
  43. </div>
  44. </div>
  45. <div class="divider"/>
  46. <div class="content-item" @click="handleClick('2')">
  47. <div class="card">
  48. <div class="card-title card-title4">
  49. <span>
  50. </span>
  51. </div>
  52. <div class="card-content">
  53. <span class="card-content-num">1</span>
  54. <span class="card-content-text">未受理</span>
  55. </div>
  56. </div>
  57. </div>
  58. <div class="divider"/>
  59. <div class="content-item" @click="handleClick('3')">
  60. <div class="card">
  61. <div class="card-title card-title5">
  62. <span>
  63. </span>
  64. </div>
  65. <div class="card-content">
  66. <span class="card-content-num">1</span>
  67. <span class="card-content-text">未完工</span>
  68. </div>
  69. </div>
  70. </div>
  71. <div class="divider"/>
  72. <div class="content-item" @click="handleClick('4')">
  73. <div class="card">
  74. <div class="card-title card-title6">
  75. <span>
  76. </span>
  77. </div>
  78. <div class="card-content">
  79. <span class="card-content-num">1</span>
  80. <span class="card-content-text">工单关闭</span>
  81. </div>
  82. </div>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. <avue-crud
  88. :table-loading="loading"
  89. :page.sync="page"
  90. :data="dataList"
  91. ref="crud"
  92. :option="option"
  93. @on-load="onLoad"
  94. @row-del="rowDel"
  95. @resetColumn="resetColumn"
  96. @saveColumn="saveColumn"
  97. @search-criteria-switch="searchCriteriaSwitch"
  98. @search-change="searchChange">
  99. <template slot="menuLeft" slot-scope="{size}">
  100. <el-button type="primary" :size="size" @click="rowSave">创建单据</el-button>
  101. <el-button type="success" :size="size" @click="rowSave">复制单据</el-button>
  102. <el-button type="info" :size="size" icon="el-icon-printer" @click="rowSave">报表</el-button>
  103. </template>
  104. <template slot="corpNameSearch" slot-scope="{ row,index}">
  105. <crop-select
  106. v-model="row.corpId"
  107. ></crop-select>
  108. </template>
  109. <template slot-scope="{row,index}" slot="menu">
  110. <el-button type="text"
  111. icon="el-icon-edit"
  112. size="small"
  113. @click.stop="rowCell(row,index)">编辑
  114. </el-button>
  115. <el-button type="text"
  116. icon="el-icon-delete"
  117. size="small"
  118. v-if="row.status < 1"
  119. @click.stop="$refs.crud.rowDel(row,index)">删除
  120. </el-button>
  121. </template>
  122. </avue-crud>
  123. </basic-container>
  124. <detail-page v-else @backToList="backToList" :id="id"></detail-page>
  125. </div>
  126. </template>
  127. <script>
  128. import detailPage from './detailPage'
  129. import {removeDelegationList, selectInvoiceList} from "@/api/landTransportation";
  130. import {getQueryString} from "@/util/util";
  131. export default {
  132. name: "index",
  133. components: {
  134. detailPage
  135. },
  136. data() {
  137. return {
  138. id: '',
  139. activeName: null,
  140. show: true,
  141. dataList: [],
  142. loading: false,
  143. page: {
  144. pageSize: 10,
  145. currentPage: 1,
  146. total: 0,
  147. pageSizes: [10, 50, 100, 200, 300]
  148. },
  149. option: {},
  150. optionList: {
  151. align: 'center',
  152. index: true,
  153. addBtn: false,
  154. editBtn: false,
  155. delBtn: false,
  156. height: "auto",
  157. searchSpan: 8,
  158. searchIcon: true,
  159. searchIndex: 2,
  160. column: [{
  161. label: '状态',
  162. prop: 'itemStatusDetail',
  163. index: 1,
  164. width: 140
  165. }, {
  166. label: '订单号',
  167. prop: 'id',
  168. index: 2,
  169. overHidden: true,
  170. width: 160,
  171. search: true,
  172. }, {
  173. label: '客户名称',
  174. prop: 'corpName',
  175. overHidden: true,
  176. index: 3,
  177. width: 140,
  178. search: true,
  179. }, {
  180. label: '所属公司',
  181. prop: 'belongCompany',
  182. overHidden: true,
  183. index: 4,
  184. width: 140,
  185. search: true,
  186. }, {
  187. label: '提单号',
  188. prop: 'billNo',
  189. index: 5,
  190. overHidden: true,
  191. width: 140,
  192. search: true,
  193. }, {
  194. label: '货物名称',
  195. prop: 'goods',
  196. overHidden: true,
  197. index: 6,
  198. width: 140,
  199. search: true,
  200. }, {
  201. label: '路线',
  202. prop: 'id',
  203. overHidden: true,
  204. index: 7,
  205. width: 140,
  206. search: true,
  207. }, {
  208. label: '场站',
  209. prop: 'station',
  210. overHidden: true,
  211. index: 8,
  212. width: 140,
  213. search: true,
  214. },
  215. {
  216. label: '到厂时间',
  217. prop: 'arrivalTime',
  218. overHidden: true,
  219. type: "date",
  220. searchRange: true,
  221. unlinkPanels: true,
  222. defaultTime: ['00:00:00', '23:59:59'],
  223. format: "yyyy-MM-dd HH:mm:ss",
  224. valueFormat: "yyyy-MM-dd HH:mm:ss",
  225. index: 9,
  226. width: 140,
  227. search: true,
  228. }, {
  229. label: '工厂名称',
  230. prop: 'factory',
  231. overHidden: true,
  232. index: 10,
  233. width: 140,
  234. search: true,
  235. }, {
  236. label: '制单日期',
  237. overHidden: true,
  238. prop: 'createTime',
  239. type: "date",
  240. searchRange: true,
  241. defaultTime: ['00:00:00', '23:59:59'],
  242. format: "yyyy-MM-dd HH:mm:ss",
  243. valueFormat: "yyyy-MM-dd HH:mm:ss",
  244. index: 11,
  245. width: 140,
  246. search: true,
  247. }]
  248. }
  249. }
  250. },
  251. async created() {
  252. this.option = await this.getColumnData(this.getColumnName(85), this.optionList);
  253. let i = 0;
  254. this.option.column.forEach(item => {
  255. if (item.search) i++
  256. })
  257. if (i % 3 !== 0) {
  258. const num = 3 - Number(i % 3)
  259. this.option.searchMenuSpan = num * 8;
  260. this.option.searchMenuPosition = "right";
  261. }
  262. },
  263. methods: {
  264. //自定义列保存
  265. async saveColumn() {
  266. /**
  267. * 已定义全局方法,直接使用,saveColumnData保存列数据方法,参数传值(表格名称,当前表格的option数据)
  268. * 已定义全局方法,直接使用,getColumnName方法用来获取枚举值,参数根据自己定义的code值获取中文名
  269. * 一定要执行异步操作,要等接口成功返回,才能执行下一行代码
  270. */
  271. const inSave = await this.saveColumnData(this.getColumnName(85), this.option);
  272. if (inSave) {
  273. this.$message.success("保存成功");
  274. //关闭窗口
  275. this.$refs.crud.$refs.dialogColumn.columnBox = false;
  276. }
  277. },
  278. //自定义列重置
  279. async resetColumn() {
  280. this.option = this.optionList;
  281. const inSave = await this.delColumnData(this.getColumnName(85), this.optionList);
  282. if (inSave) {
  283. this.$message.success("重置成功");
  284. this.$refs.crud.$refs.dialogColumn.columnBox = false;
  285. }
  286. },
  287. // 获得高度
  288. searchCriteriaSwitch(type) {
  289. if (type) {
  290. this.option.height = this.option.height - 138
  291. } else {
  292. this.option.height = this.option.height + 138
  293. }
  294. this.$refs.crud.getTableHeight()
  295. },
  296. //切换订单状态
  297. handleClick(tab) {
  298. this.activeName = tab
  299. this.onLoad(this.page)
  300. },
  301. onLoad(page, params) {
  302. let queryParams = {
  303. size: page.pageSize,
  304. current: page.currentPage,
  305. itemStatus: this.activeName,
  306. kind: '1',
  307. ...params
  308. }
  309. this.loading = true;
  310. selectInvoiceList(queryParams).then(res => {
  311. this.dataList = res.data.data.records
  312. this.page.total = res.data.data.total
  313. this.option.height = window.innerHeight - 370;
  314. }).finally(() => {
  315. this.loading = false;
  316. })
  317. },
  318. //搜索
  319. searchChange(params, done) {
  320. let data = params
  321. if (params.arrivalTime) {
  322. data.beginArrivalTime = params.arrivalTime[0]
  323. data.endArrivalTime = params.arrivalTime[1]
  324. }
  325. if (params.createTime) {
  326. data.beginCrateTime = params.createTime[0]
  327. data.endCrateTime = params.createTime[1]
  328. }
  329. delete data.arrivalTime
  330. delete data.createTime
  331. this.onLoad(this.page, data)
  332. done();
  333. },
  334. //列表删除
  335. rowDel(row) {
  336. this.$confirm('此操作将永久删除该单据, 是否继续?', '提示', {
  337. confirmButtonText: '确定',
  338. cancelButtonText: '取消',
  339. type: 'warning'
  340. }).then(() => {
  341. removeDelegationList({ids: row.id}).then(res => {
  342. this.$message.success('删除成功');
  343. this.onLoad(this.page)
  344. })
  345. }).catch(() => {
  346. this.$message({
  347. type: 'info',
  348. message: '已取消删除'
  349. });
  350. });
  351. },
  352. //行编辑
  353. rowCell(row, index) {
  354. console.log(localStorage.getItem("roleName").split(','))
  355. this.id = row.id
  356. this.show = false
  357. },
  358. rowSave() {
  359. this.show = false
  360. },
  361. backToList() {
  362. this.id = ''
  363. this.show = true
  364. }
  365. }
  366. }
  367. </script>
  368. <style lang="scss" scoped>
  369. .home-container {
  370. padding: 0px 5px 5px 5px;
  371. box-sizing: border-box;
  372. height: 100%;
  373. ::v-deep .el-card__body {
  374. padding: 10px 15px;
  375. font-size: 14px;
  376. }
  377. &__card {
  378. width: 100%;
  379. height: 100%;
  380. }
  381. .title {
  382. display: flex;
  383. justify-content: space-between;
  384. .right {
  385. display: flex;
  386. align-items: center;
  387. &_but {
  388. margin-right: 10px;
  389. border: 1px solid #409eff;
  390. width: 80px;
  391. border-radius: 3px;
  392. display: flex;
  393. &_left {
  394. width: 40px;
  395. text-align: center;
  396. color: #409eff;
  397. cursor: pointer;
  398. }
  399. &_right {
  400. width: 40px;
  401. text-align: center;
  402. color: #409eff;
  403. cursor: pointer;
  404. }
  405. &_active {
  406. color: #fff;
  407. background-color: #409eff;
  408. }
  409. }
  410. }
  411. }
  412. }
  413. .content {
  414. display: flex;
  415. justify-content: center;
  416. align-items: center;
  417. height: 15vh;
  418. width: 80vw;
  419. .divider {
  420. display: block;
  421. height: 0px;
  422. width: 100%;
  423. border-top: 1px dashed #dcdfe6;
  424. }
  425. &-item {
  426. margin-left: 1vw;
  427. .card {
  428. width: 130px;
  429. display: flex;
  430. align-items: center;
  431. &-title {
  432. width: 40px;
  433. height: 40px;
  434. text-align: center;
  435. border-radius: 50%;
  436. font-size: 20px;
  437. font-weight: 600;
  438. display: flex;
  439. justify-content: center;
  440. align-items: center;
  441. span {
  442. line-height: 20px;
  443. }
  444. }
  445. &-title1 {
  446. color: #037fe1;
  447. background-color: rgba(3, 127, 225, 0.15);
  448. }
  449. &-title2 {
  450. color: #ffa21e;
  451. background-color: rgba(255, 162, 30, 0.15);
  452. }
  453. &-title3 {
  454. color: #fb5b60;
  455. background-color: rgba(251, 91, 96, 0.15);
  456. }
  457. &-title4 {
  458. color: #42bc6f;
  459. background-color: rgba(66, 188, 111, 0.15);
  460. }
  461. &-title5 {
  462. color: #14cde1;
  463. background-color: rgba(52, 149, 161, 0.15);
  464. }
  465. &-title6 {
  466. color: rgba(4, 66, 31, 0.63);
  467. background-color: rgba(66, 188, 111, 0.15);
  468. }
  469. &-content {
  470. padding-left: 1vw;
  471. display: flex;
  472. flex-direction: column;
  473. &-num {
  474. font-size: 20px;
  475. font-weight: 600;
  476. }
  477. &-text {
  478. color: #909399;
  479. }
  480. }
  481. }
  482. }
  483. }
  484. </style>