orderInfo-list.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552
  1. <template>
  2. <div style="padding-left: 5px">
  3. <el-breadcrumb separator=">">
  4. <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
  5. <el-breadcrumb-item>
  6. <a href="#">基础信息管理</a>
  7. </el-breadcrumb-item>
  8. <el-breadcrumb-item>
  9. <a href="/orderInfo">订单管理</a>
  10. </el-breadcrumb-item>
  11. </el-breadcrumb>
  12. <el-divider></el-divider>
  13. <el-form
  14. ref="queryForm"
  15. :model="queryModel"
  16. inline
  17. class="demo-form-inline"
  18. >
  19. <el-form-item label="所属公司" prop="companyId">
  20. <el-select-tree
  21. size="mini"
  22. :props="props"
  23. :options="companyResult"
  24. v-model="queryModel.companyId"
  25. height="200"
  26. ></el-select-tree
  27. >
  28. </el-form-item>
  29. <el-form-item label="车牌号" prop="licensePlateNumber">
  30. <el-input type="text" size="mini" v-model="queryModel.licensePlateNumber"></el-input>
  31. </el-form-item>
  32. <el-form-item label="订单编号" prop="outOrderNo">
  33. <el-input type="text" size="mini" v-model="queryModel.outOrderNo"></el-input>
  34. </el-form-item>
  35. <el-form-item label="交易流水号" prop="transactionId">
  36. <el-input type="text" size="mini" v-model="queryModel.transactionId"></el-input>
  37. </el-form-item>
  38. <el-form-item>
  39. <el-button
  40. type="primary"
  41. size="mini"
  42. icon="ios-search"
  43. @click="changePage(1)"
  44. :loading="loading"
  45. >查询</el-button
  46. >&nbsp;
  47. <el-button
  48. type="info"
  49. size="mini"
  50. style="margin-left: 8px"
  51. @click="handleReset('queryForm')"
  52. >重置</el-button
  53. >&nbsp;
  54. </el-form-item>
  55. </el-form>
  56. <el-divider></el-divider>
  57. <el-table
  58. ref="formTable"
  59. :data="tableData"
  60. v-loading="loading"
  61. stripe
  62. :height="tableHeight"
  63. @sort-change="sortChange"
  64. @selection-change="handleSelectionChange"
  65. >
  66. <el-table-column
  67. prop="companyName"
  68. label="所属公司"
  69. width="150"
  70. ></el-table-column>
  71. <el-table-column
  72. prop="licensePlateNumber"
  73. label="车牌号"
  74. width="150"
  75. ></el-table-column>
  76. <el-table-column
  77. prop="driverName"
  78. label="司机姓名"
  79. width="130"
  80. ></el-table-column>
  81. <el-table-column
  82. prop="routeName"
  83. label="路线名称"
  84. width="130"
  85. ></el-table-column>
  86. <el-table-column
  87. prop="totalFee"
  88. label="账单金额(元)"
  89. width="100"
  90. ></el-table-column>
  91. <el-table-column
  92. prop="payFee"
  93. label="支付金额(元)"
  94. width="100"
  95. ></el-table-column>
  96. <el-table-column prop="payStatus" label="支付状态" width="130">
  97. <template slot-scope="{ row }">
  98. <span v-if="row.payStatus==10" style="color:red">未支付</span>
  99. <span v-else-if="row.payStatus==20" style="color:green">已支付</span>
  100. </template>
  101. </el-table-column>
  102. <el-table-column prop="payName" label="支付方式" width="130">
  103. <template slot-scope="{ row }">
  104. <span v-if="row.payName=='wechat'">微信</span>
  105. <span v-else-if="row.payStatus=='alipay'">支付宝</span>
  106. <span v-else-if="row.payStatus=='cash'">现金</span>
  107. </template>
  108. </el-table-column>
  109. <el-table-column
  110. prop="upStationName"
  111. label="上车站点"
  112. width="130"
  113. ></el-table-column>
  114. <el-table-column
  115. prop="downStationName"
  116. label="下车站点"
  117. width="130"
  118. ></el-table-column>
  119. <el-table-column prop="ticketType" label="购票类型" width="130">
  120. <template slot-scope="{ row }">
  121. <span v-if="row.ticketType=='2'">成人票</span>
  122. <span v-else-if="row.ticketType=='1'">儿童票</span>
  123. </template>
  124. </el-table-column>
  125. <el-table-column
  126. prop="goodsTicket"
  127. label="货票金额(元)"
  128. width="130"
  129. ></el-table-column>
  130. <el-table-column
  131. prop="outOrderNo"
  132. label="订单编号"
  133. width="130"
  134. ></el-table-column>
  135. <el-table-column
  136. prop="transactionId"
  137. label="交易流水号"
  138. width="130"
  139. ></el-table-column>
  140. <el-table-column
  141. prop="payTime"
  142. label="支付时间"
  143. width="150"
  144. ></el-table-column>
  145. <el-table-column label="订单状态" width="150" fixed="right">
  146. <template slot-scope="{row}">
  147. <span v-if="row.payStatus=='10'">
  148. 等待买家付款
  149. <!-- <div>
  150. <el-link type="primary" @click="closeOrder(row)">关闭订单</el-link>
  151. &nbsp;
  152. </div> -->
  153. </span>
  154. <span v-else-if="row.payStatus=='20'">
  155. 已付款
  156. <div>
  157. <!-- <el-link type="danger" @click="offlineRefund(row,'0')">线上退款</el-link> -->
  158. <el-link type="danger" @click="offlineRefund(row)">退款</el-link>
  159. <!-- &nbsp;
  160. <el-link type="danger" @click="offlineRefund(row,'1')">线下退款</el-link> -->
  161. </div>
  162. </span>
  163. <!-- <span v-else-if="row.payStatus=='30'">
  164. 已关闭
  165. &nbsp;
  166. </span> -->
  167. <span v-else-if="row.payStatus=='40'" style="color:red">
  168. 已退款
  169. &nbsp;
  170. </span>
  171. </template>
  172. </el-table-column>
  173. </el-table>
  174. <el-pagination
  175. :current-page.sync="pageIndex"
  176. :total="totalElements"
  177. :page-sizes="pageSizeList"
  178. @current-change="changePage"
  179. @size-change="pageSizeChange"
  180. layout="total, sizes, prev, pager, next, jumper"
  181. ></el-pagination>
  182. <orderInfoDetail
  183. v-if="showModal"
  184. :businessKey="businessKey"
  185. :title="modalTitle"
  186. @close="onDetailModalClose"
  187. ></orderInfoDetail>
  188. <el-dialog
  189. title="导入"
  190. :visible.sync="batchImportVisible"
  191. :modal-append-to-body="false"
  192. style="text-align: left"
  193. :close-on-click-modal="false"
  194. >
  195. <el-form label-width="150px">
  196. <el-form-item label="模板下载">
  197. <el-link
  198. href="http://rccs.oss-cn-hangzhou.aliyuncs.com/smart-bus/excel/vehicle.xls"
  199. type="primary"
  200. target="_blank"
  201. >点击下载模板</el-link
  202. >
  203. </el-form-item>
  204. <el-form-item label="上传文件">
  205. <el-upload
  206. class="upload-demo"
  207. accept=".xls"
  208. :action="uploadUrlXls"
  209. :data="uploadXlsData"
  210. :headers="headers"
  211. :on-preview="handleBatchImportPreview"
  212. name="uploadFile"
  213. :multiple="true"
  214. :limit="1"
  215. :on-remove="handleBatchImportRemove"
  216. :before-remove="beforeBatchImportRemove"
  217. :before-upload="beforeUpload"
  218. :on-exceed="handleBatchImportExceed"
  219. :on-success="handleBatchImportSuccess"
  220. :file-list="batchImportFileList"
  221. >
  222. <el-button size="small" type="primary" :loading="xlsLoading"
  223. >点击上传</el-button
  224. >
  225. <div slot="tip" class="el-upload__tip">
  226. 只能上传xls文件,且不超过500kb
  227. </div>
  228. </el-upload>
  229. </el-form-item>
  230. </el-form>
  231. <div slot="footer" class="dialog-footer">
  232. <el-button type="primary" @click="batchImportVisible = false"
  233. >关 闭</el-button
  234. >
  235. </div>
  236. </el-dialog>
  237. <!--批量导入E-->
  238. </div>
  239. </template>
  240. <script>
  241. import Constant from "@/constant";
  242. import orderInfoApi from "@/api/base/orderInfo";
  243. import SelectTree from "@/components/SelectTree";
  244. import companyInfoApi from "@/api/bus/companyInfo";
  245. import { getToken } from "@/utils/auth"; // get token from cookie
  246. import "nprogress/nprogress.css"; // progress bar style
  247. export default {
  248. name: "BaseOrderInfoList",
  249. data() {
  250. var self = this;
  251. return {
  252. activeName: "list",
  253. queryModel: {
  254. licensePlateNumber: "",
  255. companyId: "",
  256. outOrderNo:"",
  257. transactionId:"",
  258. },
  259. loading: false,
  260. tableData: [],
  261. treeData: [],
  262. pageIndex: 1,
  263. pageSize: 10,
  264. totalPages: 0,
  265. totalElements: 0,
  266. field: "",
  267. direction: "",
  268. pageSizeList: [10, 20, 30],
  269. multipleSelection: [],
  270. showModal: false,
  271. modalTitle: "",
  272. businessKey: "",
  273. tableHeight: 300,
  274. showDeviceModal: false,
  275. companyId: "",
  276. qrCode: "",
  277. companyResult: [],
  278. props: {
  279. // 配置项(必选)
  280. value: "id",
  281. label: "name",
  282. children: "children",
  283. },
  284. batchImportVisible: false,
  285. batchImportFileList: [],
  286. uploadUrlXls: Constant.serverUrl + "/bus/vehicleInfo/importXls",
  287. uploadXlsData: {
  288. subFolder: "driver",
  289. },
  290. headers: {
  291. Authorization: getToken(),
  292. },
  293. xlsLoading: false,
  294. sceneData: [],
  295. typeData:[]
  296. };
  297. },
  298. created() {
  299. var self = this;
  300. companyInfoApi.treeList().then(function (response) {
  301. var jsonData = response.data;
  302. if (jsonData.result) {
  303. self.companyResult = jsonData.data;
  304. }
  305. });
  306. this.changePage(1);
  307. },
  308. methods: {
  309. changePage(pageIndex) {
  310. var self = this;
  311. self.loading = true;
  312. self.pageIndex = pageIndex;
  313. var formData = new FormData();
  314. formData.append("pageIndex", self.pageIndex);
  315. formData.append("pageSize", self.pageSize);
  316. if(self.queryModel.companyId!=null){
  317. formData.append("companyId", self.queryModel.companyId);
  318. }
  319. formData.append("licensePlateNumber", self.queryModel.licensePlateNumber);
  320. formData.append("outOrderNo", self.queryModel.outOrderNo);
  321. formData.append("transactionId", self.queryModel.transactionId);
  322. orderInfoApi
  323. .pageList(formData)
  324. .then(function (response) {
  325. self.loading = false;
  326. var jsonData = response.data.data;
  327. self.tableData = jsonData.data;
  328. self.totalPages = jsonData.totalPages;
  329. self.totalElements = jsonData.recordsTotal;
  330. //45为分页栏的高度
  331. //页面高度-列表上面的高度-分页栏高度
  332. self.tableHeight =
  333. window.innerHeight - self.$refs.formTable.$el.offsetTop - 100;
  334. })
  335. .catch((error) => {
  336. self.loading = false;
  337. // self.$message.error(error + "");
  338. });
  339. },
  340. pageSizeChange(pageSize) {
  341. this.pageSize = pageSize;
  342. },
  343. sortChange(data) {
  344. this.field = data.column.field;
  345. this.direction = data.order == "ascending" ? "asc" : "desc";
  346. this.changePage(this.pageIndex);
  347. },
  348. handleSelectionChange(val) {
  349. this.multipleSelection = val;
  350. },
  351. handleReset(name) {
  352. this.$refs[name].resetFields();
  353. },
  354. handleAdd() {
  355. this.modalTitle = "新增";
  356. this.businessKey = "";
  357. this.showModal = true;
  358. },
  359. handleEdit(record) {
  360. this.modalTitle = "编辑";
  361. this.businessKey = record.id;
  362. this.showModal = true;
  363. },
  364. handleDelete(record) {
  365. var self = this;
  366. self
  367. .$confirm("是否确认删除?", "提示", {
  368. confirmButtonText: "确定",
  369. cancelButtonText: "取消",
  370. type: "warning",
  371. })
  372. .then(() => {
  373. orderInfoApi.remove(record.id).then(function (response) {
  374. var jsonData = response.data;
  375. if (jsonData.result) {
  376. // var index = self.tableData.indexOf(record);
  377. // self.tableData.splice(index, 1);
  378. self.changePage(self.pageIndex);
  379. self.$message({
  380. type: "success",
  381. message: "删除成功!",
  382. });
  383. }
  384. });
  385. });
  386. },
  387. handleBatchDelete() {
  388. var self = this;
  389. var idList = this.multipleSelection.map((record) => {
  390. return record.id;
  391. });
  392. this.$confirm("是否确认删除选中项?", "提示", {
  393. confirmButtonText: "确定",
  394. cancelButtonText: "取消",
  395. type: "warning",
  396. }).then(() => {
  397. orderInfoApi.batchRemove(idList).then(function (response) {
  398. var jsonData = response.data;
  399. if (jsonData.result) {
  400. self.changePage(self.pageIndex);
  401. self.$message({
  402. type: "success",
  403. message: "删除成功!",
  404. });
  405. }
  406. });
  407. });
  408. },
  409. onDetailModalClose(refreshed) {
  410. //保存成功后回调
  411. this.showModal = false;
  412. this.showDeviceModal = false;
  413. if (refreshed) {
  414. this.changePage(this.pageIndex);
  415. }
  416. },
  417. offlineRefund(row){
  418. this.$confirm("是否确认退款?", "提示", {
  419. confirmButtonText: "确定",
  420. cancelButtonText: "取消",
  421. type: "warning"
  422. })
  423. .then(() => {
  424. var formData = new FormData();
  425. formData.append("id", row.id);
  426. formData.append("payStatus", 40);
  427. orderInfoApi.updateOrder(formData).then(response => {
  428. var jsonData = response.data;
  429. if (jsonData.result) {
  430. var count = jsonData.data;
  431. if(count==1){
  432. this.$message.success("退款成功!");
  433. this.changePage(this.pageIndex,0)
  434. }
  435. } else {
  436. this.$message.error(jsonData.message + "");
  437. }
  438. })
  439. })
  440. },
  441. beforeUpload(file, fileList) {
  442. //导入前判断
  443. },
  444. //批量导入-上传成功
  445. handleBatchImportSuccess(response, file, fileList) {
  446. var self = this;
  447. self.xlsLoading = false;
  448. if (response.result) {
  449. self.$message.success(response.message);
  450. this.batchImportFileList = [];
  451. this.changePage(1);
  452. this.uploadCompanyId = "";
  453. this.uploadXlsData.companyId = "";
  454. this.batchImportVisible = false;
  455. } else {
  456. //this.$message.error(response.message);
  457. this.batchImportFileList = [];
  458. this.changePage(1);
  459. this.uploadCompanyId = "";
  460. this.uploadXlsData.companyId = "";
  461. if (response.data != null) {
  462. //下载有错误信息提示的报表
  463. //window.open(response.data);
  464. self.$message({
  465. showClose: true,
  466. dangerouslyUseHTMLString: true,
  467. message:
  468. response.message +
  469. `,<a href="${response.data}" target="_blank">点击下载未导入的数据报表</a>&nbsp;`,
  470. duration: 30000,
  471. });
  472. }
  473. }
  474. },
  475. //批量导入-预览
  476. handleBatchImportPreview(file) {
  477. console.log(file.url);
  478. },
  479. //批量导入-移除
  480. handleBatchImportRemove(file, fileList) {
  481. console.log(file, fileList);
  482. },
  483. //批量导入-移除前操作
  484. beforeBatchImportRemove(file, fileList) {
  485. console.log(file, fileList);
  486. },
  487. //批量导入-文件超出个数限制时的钩子
  488. handleBatchImportExceed(files, fileList) {
  489. this.$message.warning(
  490. `当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
  491. files.length + fileList.length
  492. } 个文件`
  493. );
  494. },
  495. },
  496. mounted: function () {},
  497. components: {
  498. "el-select-tree": SelectTree,
  499. },
  500. };
  501. </script>
  502. <style lang="scss" scoped>
  503. .el-breadcrumb {
  504. margin: 10px;
  505. line-height: 20px;
  506. }
  507. .el-divider {
  508. margin: 5px 0;
  509. }
  510. .demo-form-inline {
  511. margin-left: 10px;
  512. text-align: left;
  513. }
  514. .button-group {
  515. margin-left: 10px;
  516. text-align: left;
  517. }
  518. </style>