index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. <template>
  2. <div class="container">
  3. <el-card class="box-card">
  4. <div class="filter-container">
  5. <el-date-picker
  6. v-model="timeValue"
  7. type="datetimerange"
  8. value-format="yyyy-MM-dd HH:mm:ss"
  9. range-separator="至"
  10. start-placeholder="开始日期"
  11. end-placeholder="结束日期"
  12. :picker-options="pickerOptions"
  13. ></el-date-picker>
  14. <el-button
  15. style="margin-left: 10px"
  16. :loading="exportLoading"
  17. type="primary"
  18. @click="exportBtn"
  19. >导出</el-button
  20. >
  21. </div>
  22. <!-- show-overflow-tooltip -->
  23. <el-table
  24. :data="tableData"
  25. v-loading="listLoading"
  26. highlight-current-row
  27. fit
  28. class="table-list"
  29. :cell-style="{ padding: '6px 0' }"
  30. >
  31. <el-table-column prop="id" label="ID"></el-table-column>
  32. <el-table-column
  33. prop="status"
  34. label="订单状态"
  35. width="90"
  36. show-overflow-tooltip
  37. ></el-table-column>
  38. <el-table-column prop="type" label="订单类型">
  39. <template slot-scope="{ row }">
  40. <span>{{ row.type | setType }}</span>
  41. </template>
  42. </el-table-column>
  43. <el-table-column
  44. prop="deliverypro"
  45. label="配送方式"
  46. show-overflow-tooltip
  47. ></el-table-column>
  48. <el-table-column
  49. prop="outtradeno"
  50. label="订单号"
  51. width="130"
  52. ></el-table-column>
  53. <el-table-column prop="createtime" label="下单时间" width="140">
  54. <template slot-scope="{ row }">
  55. <span>{{ row.createtime | parseTime }}</span>
  56. </template>
  57. </el-table-column>
  58. <el-table-column
  59. prop="products"
  60. label="商品"
  61. width="90"
  62. show-overflow-tooltip
  63. ></el-table-column>
  64. <el-table-column prop="productfee" label="商品价格"></el-table-column>
  65. <el-table-column prop="totalfee" label="总价">
  66. <template slot-scope="{ row }">
  67. <span>{{ row.totalfee | filterFee }}</span>
  68. </template>
  69. </el-table-column>
  70. <el-table-column
  71. prop="shippingaddr"
  72. label="下单地址"
  73. show-overflow-tooltip
  74. ></el-table-column>
  75. <el-table-column
  76. prop="shopname"
  77. label="门店"
  78. width="200"
  79. show-overflow-tooltip
  80. ></el-table-column>
  81. <el-table-column
  82. prop="notes"
  83. show-overflow-tooltip
  84. label="订单备注"
  85. ></el-table-column>
  86. <el-table-column
  87. prop="courier"
  88. label="骑手"
  89. width="140"
  90. show-overflow-tooltip
  91. ></el-table-column>
  92. <el-table-column
  93. prop="peisong_id"
  94. label="peisong_id"
  95. show-overflow-tooltip
  96. ></el-table-column>
  97. <el-table-column
  98. prop="useropenid"
  99. label="useropenid"
  100. show-overflow-tooltip
  101. ></el-table-column>
  102. <el-table-column prop="useticket" label="useticket"></el-table-column>
  103. <el-table-column prop="wxverified" label="wxverified"></el-table-column>
  104. <el-table-column fixed="right" label="操作" width="100">
  105. <template slot-scope="scope">
  106. <el-button @click="handleClick(scope.row)" type="text" size="small"
  107. >查看</el-button
  108. >
  109. </template>
  110. </el-table-column>
  111. </el-table>
  112. <div class="pd-30">
  113. <el-pagination
  114. v-show="total > 0"
  115. background
  116. layout="prev, pager, next"
  117. :total="total"
  118. @current-change="handleCurrentChange"
  119. :current-page.sync="listQuery.page"
  120. :page-size="listQuery.limit"
  121. ></el-pagination>
  122. </div>
  123. </el-card>
  124. <!-- 弹窗 -->
  125. <el-dialog
  126. title="详情"
  127. :visible.sync="dialogVisible"
  128. :before-close="handleClose"
  129. >
  130. <el-form :inline="true" :model="formInline" label-width="100px">
  131. <el-row :gutter="24">
  132. <el-col :span="12">
  133. <el-form-item label="id">
  134. <el-input v-model="formInline.id" readonly autosize></el-input>
  135. </el-form-item>
  136. </el-col>
  137. <el-col :span="12">
  138. <el-form-item label="骑手">
  139. <el-input v-model="formInline.courier" readonly></el-input>
  140. </el-form-item>
  141. </el-col>
  142. </el-row>
  143. <el-row :gutter="24">
  144. <el-col :span="12">
  145. <el-form-item label="下单时间">
  146. <el-input v-model="formInline.createtime" readonly></el-input>
  147. </el-form-item>
  148. </el-col>
  149. <el-col :span="12">
  150. <el-form-item label="配送方式">
  151. <el-input v-model="formInline.deliverypro" readonly></el-input>
  152. </el-form-item>
  153. </el-col>
  154. </el-row>
  155. <el-row :gutter="24">
  156. <el-col :span="12">
  157. <el-form-item label="订单备注">
  158. <el-input
  159. type="textarea"
  160. v-model="formInline.notes"
  161. readonly
  162. ></el-input>
  163. </el-form-item>
  164. </el-col>
  165. <el-col :span="12">
  166. <el-form-item label="订单号">
  167. <el-input v-model="formInline.outtradeno" readonly></el-input>
  168. </el-form-item>
  169. </el-col>
  170. </el-row>
  171. <el-row :gutter="24">
  172. <el-col :span="12">
  173. <el-form-item label="productfee">
  174. <el-input v-model="formInline.productfee" readonly></el-input>
  175. </el-form-item>
  176. </el-col>
  177. <el-col :span="12">
  178. <el-form-item label="products">
  179. <el-input
  180. type="textarea"
  181. v-model="formInline.products"
  182. readonly
  183. ></el-input>
  184. </el-form-item>
  185. </el-col>
  186. </el-row>
  187. <el-row :gutter="24">
  188. <el-col :span="12">
  189. <el-form-item label="peisong_id">
  190. <el-input v-model="formInline.peisong_id" readonly></el-input>
  191. </el-form-item>
  192. </el-col>
  193. <el-col :span="12">
  194. <el-form-item label="shippingaddr">
  195. <el-input
  196. type="textarea"
  197. v-model="formInline.shippingaddr"
  198. readonly
  199. ></el-input>
  200. </el-form-item>
  201. </el-col>
  202. </el-row>
  203. <el-row :gutter="24">
  204. <el-col :span="12">
  205. <el-form-item label="门店名称">
  206. <el-input v-model="formInline.shopname" readonly></el-input>
  207. </el-form-item>
  208. </el-col>
  209. <el-col :span="12">
  210. <el-form-item label="订单状态">
  211. <el-input v-model="formInline.status" readonly></el-input>
  212. </el-form-item>
  213. </el-col>
  214. </el-row>
  215. <el-row :gutter="24">
  216. <el-col :span="12">
  217. <el-form-item label="totalfee">
  218. <el-input v-model="formInline.totalfee" readonly></el-input>
  219. </el-form-item>
  220. </el-col>
  221. <el-col :span="12">
  222. <el-form-item label="订单类型">
  223. <el-input v-model="formInline.type" readonly></el-input>
  224. </el-form-item>
  225. </el-col>
  226. </el-row>
  227. <el-row :gutter="24">
  228. <el-col :span="12">
  229. <el-form-item label="useropenid">
  230. <el-input v-model="formInline.useropenid" readonly></el-input>
  231. </el-form-item>
  232. </el-col>
  233. <el-col :span="12">
  234. <el-form-item label="useticket">
  235. <el-input v-model="formInline.useticket" readonly></el-input>
  236. </el-form-item>
  237. </el-col>
  238. </el-row>
  239. <el-row :gutter="24">
  240. <el-col :span="12">
  241. <el-form-item label="wxverified">
  242. <el-input v-model="formInline.wxverified" readonly></el-input>
  243. </el-form-item>
  244. </el-col>
  245. <el-col :span="12">
  246. <el-form-item label="shopid">
  247. <el-input v-model="formInline.shopid" readonly></el-input>
  248. </el-form-item>
  249. </el-col>
  250. </el-row>
  251. </el-form>
  252. </el-dialog>
  253. </div>
  254. </template>
  255. <script>
  256. import { getOrderList, export_order } from "@/api/order";
  257. export default {
  258. name: "List",
  259. filters: {
  260. setType(type) {
  261. if (type == "takeaway") {
  262. return "外卖";
  263. }
  264. if (type == "pickup") {
  265. return "堂食";
  266. }
  267. },
  268. parseTime(datetime) {
  269. var date = new Date(datetime); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
  270. var year = date.getFullYear(),
  271. month = ("0" + (date.getMonth() + 1)).slice(-2),
  272. sdate = ("0" + date.getDate()).slice(-2),
  273. hour = ("0" + date.getHours()).slice(-2),
  274. minute = ("0" + date.getMinutes()).slice(-2),
  275. second = ("0" + date.getSeconds()).slice(-2);
  276. // 拼接
  277. var result =
  278. year +
  279. "-" +
  280. month +
  281. "-" +
  282. sdate +
  283. " " +
  284. hour +
  285. ":" +
  286. minute +
  287. ":" +
  288. second;
  289. // 返回
  290. return result;
  291. },
  292. filterFee(fee) {
  293. return fee / 100;
  294. }
  295. },
  296. data() {
  297. return {
  298. pickerOptions: {
  299. disabledDate(time) {
  300. return time.getTime() > Date.now();
  301. }
  302. },
  303. exportLoading: false,
  304. timeValue: "",
  305. total: 0,
  306. listLoading: true,
  307. searchLoading: false,
  308. listQuery: {
  309. page: 1,
  310. limit: 100
  311. },
  312. tableData: [],
  313. dialogVisible: false,
  314. formInline: {}
  315. };
  316. },
  317. created() {
  318. this.getList();
  319. },
  320. methods: {
  321. handleClose() {
  322. this.dialogVisible = false;
  323. },
  324. handleClick(row) {
  325. console.log(row);
  326. this.formInline = row;
  327. this.dialogVisible = true;
  328. },
  329. exportBtn() {
  330. if (!this.timeValue.length) {
  331. return this.$message.error("请选择日期范围");
  332. }
  333. this.exportLoading = true;
  334. export_order({
  335. starttime: this.timeValue[0],
  336. endtime: this.timeValue[1]
  337. })
  338. .then(res => {
  339. let blob = new Blob([res], { type: "application/x-xls" });
  340. let link = document.createElement("a");
  341. link.href = window.URL.createObjectURL(blob);
  342. link.download = "订单.xlsx";
  343. link.click();
  344. this.exportLoading = false;
  345. })
  346. .catch(err => {
  347. this.exportLoading = false;
  348. this.$message.error("导出失败,请稍后重试!");
  349. });
  350. },
  351. getList() {
  352. this.listLoading = true;
  353. getOrderList({
  354. page: this.listQuery.page
  355. }).then(res => {
  356. this.tableData = res.orders;
  357. this.total = res.total;
  358. this.listLoading = false;
  359. });
  360. },
  361. handleCurrentChange(val) {
  362. this.listQuery.page = val;
  363. this.getList();
  364. }
  365. }
  366. };
  367. </script>
  368. <style lang="scss" scoped>
  369. .box-card {
  370. overflow: hidden;
  371. }
  372. .container {
  373. padding: 20px;
  374. }
  375. .pd-30 {
  376. padding: 30px 0;
  377. }
  378. .filter-container {
  379. overflow: hidden;
  380. padding: 10px 0;
  381. }
  382. .table-list {
  383. font-size: 12px;
  384. }
  385. </style>