index.vue 13 KB

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