myIndex.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
  4. <el-form-item label="所属部门" prop="deptId">
  5. <treeselect style="width:220px" v-model="queryParams.deptId" :options="deptOptions" :show-count="true" placeholder="请选择所属部门" />
  6. </el-form-item>
  7. <el-form-item label="订单号" prop="orderCode">
  8. <el-input
  9. v-model="queryParams.orderCode"
  10. placeholder="请输入订单号"
  11. clearable
  12. size="small"
  13. @keyup.enter.native="handleQuery"
  14. />
  15. </el-form-item>
  16. <el-form-item label="用户ID" prop="userId">
  17. <el-input
  18. v-model="queryParams.userId"
  19. placeholder="请输入用户ID"
  20. clearable
  21. size="small"
  22. @keyup.enter.native="handleQuery"
  23. />
  24. </el-form-item>
  25. <el-form-item label="收货人" prop="userName">
  26. <el-input
  27. v-model="queryParams.userName"
  28. placeholder="请输入收货人"
  29. clearable
  30. size="small"
  31. @keyup.enter.native="handleQuery"
  32. />
  33. </el-form-item>
  34. <el-form-item label="手机号" prop="userPhone">
  35. <el-input
  36. v-model="queryParams.userPhone"
  37. placeholder="请输入手机号"
  38. clearable
  39. size="small"
  40. @keyup.enter.native="handleQuery"
  41. />
  42. </el-form-item>
  43. <el-form-item label="地址" prop="userAddress">
  44. <el-input
  45. v-model="queryParams.userAddress"
  46. placeholder="请输入地址"
  47. clearable
  48. size="small"
  49. @keyup.enter.native="handleQuery"
  50. />
  51. </el-form-item>
  52. <el-form-item label="支付金额" prop="payMoney">
  53. <el-input
  54. v-model="queryParams.payMoney"
  55. placeholder="请输入支付金额"
  56. clearable
  57. size="small"
  58. @keyup.enter.native="handleQuery"
  59. />
  60. </el-form-item>
  61. <el-form-item label="订单金额" prop="totalPrice">
  62. <el-input
  63. v-model="queryParams.totalPrice"
  64. placeholder="请输入订单金额"
  65. clearable
  66. size="small"
  67. @keyup.enter.native="handleQuery"
  68. />
  69. </el-form-item>
  70. <el-form-item style="margin-left: 20px;">
  71. <el-button type="text" :icon="isCollapsed ? 'el-icon-arrow-down' : 'el-icon-arrow-up'" @click="upDown">{{ isCollapsed ? '展开' : '收起' }}</el-button>
  72. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  73. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  74. </el-form-item>
  75. <div v-if="!isCollapsed">
  76. <el-form-item label="物流信息" prop="searchKey">
  77. <el-input
  78. v-model.trim="searchKey"
  79. :placeholder="searchType=='deliveryCode'?'请输入物流编号':searchType=='deliveryName'?'请输入物流名称':searchType=='deliverySn'?'请输入物流单号':'请先选择搜索类型'"
  80. clearable
  81. size="small"
  82. @keyup.enter.native="handleQuery"
  83. >
  84. <el-select
  85. slot="prepend"
  86. v-model="searchType"
  87. placeholder="请选择"
  88. clearable
  89. @change="handleTypeChange"
  90. class="select-box"
  91. >
  92. <el-option label="物流编号" value="deliveryCode" />
  93. <el-option label="物流名称" value="deliveryName" />
  94. <el-option label="物流单号" value="deliverySn" />
  95. </el-select>
  96. </el-input>
  97. </el-form-item>
  98. <el-form-item label="支付时间" prop="payTimeStart">
  99. <el-date-picker
  100. v-model="payTimeRange"
  101. type="daterange"
  102. value-format="yyyy-MM-dd"
  103. range-separator="至"
  104. start-placeholder="开始日期"
  105. end-placeholder="结束日期"
  106. size="small"
  107. @change="handlePayTimeChange"
  108. />
  109. </el-form-item>
  110. <el-form-item label="完成时间" prop="finishTimeStart">
  111. <el-date-picker
  112. v-model="finishTimeRange"
  113. type="daterange"
  114. value-format="yyyy-MM-dd"
  115. range-separator="至"
  116. start-placeholder="开始日期"
  117. end-placeholder="结束日期"
  118. size="small"
  119. @change="handleFinishTimeChange"
  120. />
  121. </el-form-item>
  122. <el-form-item label="员工姓名" prop="companyUserName">
  123. <el-input
  124. v-model="queryParams.companyUserName"
  125. placeholder="请输入员工姓名"
  126. clearable
  127. size="small"
  128. @keyup.enter.native="handleQuery"
  129. />
  130. </el-form-item>
  131. <el-form-item label="发货时间" prop="deliverySendTime">
  132. <el-date-picker
  133. v-model="deliveryTimeRange"
  134. type="daterange"
  135. value-format="yyyy-MM-dd"
  136. range-separator="至"
  137. start-placeholder="开始日期"
  138. end-placeholder="结束日期"
  139. size="small"
  140. @change="handleDateChange"
  141. />
  142. </el-form-item>
  143. </div>
  144. </el-form>
  145. <el-row :gutter="10" class="mb8">
  146. <el-col :span="1.5">
  147. <el-button
  148. type="warning"
  149. plain
  150. icon="el-icon-download"
  151. size="mini"
  152. :loading="exportLoading"
  153. @click="handleExport"
  154. v-hasPermi="['live:liveOrder:export']"
  155. >导出</el-button>
  156. </el-col>
  157. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  158. </el-row>
  159. <el-tabs type="card" v-model="actName" @tab-click="handleClickX">
  160. <el-tab-pane label="全部订单" name="10"></el-tab-pane>
  161. <el-tab-pane v-for="(item,index) in orderOptions" :key="item.dictValue" :label="item.dictLabel" :name="item.dictValue"></el-tab-pane>
  162. </el-tabs>
  163. <el-table border v-loading="loading" :data="liveOrderList" @selection-change="handleSelectionChange">
  164. <el-table-column type="selection" width="55" align="center" />
  165. <el-table-column label="订单ID" align="center" prop="orderId"/>
  166. <el-table-column label="订单号" align="center" prop="orderCode" />
  167. <el-table-column label="用户ID" align="center" prop="userId" />
  168. <el-table-column label="收货人" align="center" prop="userName" />
  169. <el-table-column label="手机号" align="center" prop="userPhone" />
  170. <!-- <el-table-column label="地址" align="center" prop="userAddress" />-->
  171. <el-table-column label="支付金额" align="center" prop="payMoney" />
  172. <el-table-column label="订单金额" align="center" prop="totalPrice" />
  173. <el-table-column label="物流编号" align="center" prop="deliveryCode" />
  174. <el-table-column label="物流名称" align="center" prop="deliveryName" />
  175. <el-table-column label="物流单号" align="center" prop="deliverySn" />
  176. <el-table-column label="员工名称" align="center" prop="companyUserName" />
  177. <el-table-column label="支付时间" align="center" prop="payTime" width="180">
  178. <template slot-scope="scope">
  179. <span>{{ parseTime(scope.row.payTime, '{y}-{m}-{d}') }}</span>
  180. </template>
  181. </el-table-column>
  182. <el-table-column label="完成时间" align="center" prop="finishTime" width="180">
  183. <template slot-scope="scope">
  184. <span>{{ parseTime(scope.row.finishTime, '{y}-{m}-{d}') }}</span>
  185. </template>
  186. </el-table-column>
  187. <el-table-column label="发货时间" align="center" prop="deliverySendTime" width="180">
  188. <template slot-scope="scope">
  189. <span>{{ parseTime(scope.row.deliverySendTime, '{y}-{m}-{d}') }}</span>
  190. </template>
  191. </el-table-column>
  192. <el-table-column label="状态" align="center" prop="status" :formatter="orderStatusFormatter"/>
  193. <el-table-column label="备注" align="center" prop="remark" />
  194. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  195. <template slot-scope="scope">
  196. <el-button
  197. size="mini"
  198. type="text"
  199. icon="el-icon-edit"
  200. @click="handledetails(scope.row)"
  201. v-hasPermi="['live:liveOrder:edit']"
  202. >查看</el-button>
  203. </template>
  204. </el-table-column>
  205. </el-table>
  206. <pagination
  207. v-show="total>0"
  208. :total="total"
  209. :page.sync="queryParams.pageNum"
  210. :limit.sync="queryParams.pageSize"
  211. @pagination="getList"
  212. />
  213. <el-drawer
  214. :with-header="false"
  215. size="75%"
  216. :title="show.title" :visible.sync="show.open">
  217. <liveOrderDetails ref="Details" />
  218. </el-drawer>
  219. </div>
  220. </template>
  221. <script>
  222. import { listLiveOrder, exportLiveOrder } from "@/api/live/liveOrder";
  223. import liveOrderDetails from './liveOrderDetails.vue';
  224. import { treeselect } from "@/api/company/companyDept";
  225. import Treeselect from "@riophae/vue-treeselect";
  226. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  227. import {parseTime} from "../../../utils/common";
  228. export default {
  229. name: "LiveOrder",
  230. components: { Treeselect, liveOrderDetails },
  231. data() {
  232. return {
  233. searchType: '',
  234. searchKey: '',
  235. isCollapsed: true,
  236. // 发货时间范围
  237. deliveryTimeRange: [],
  238. // 支付时间范围
  239. payTimeRange: [],
  240. // 完成时间范围
  241. finishTimeRange: [],
  242. //字典
  243. orderStatusOptions: [],
  244. loading: true,
  245. exportLoading: false,
  246. ids: [],
  247. single: true,
  248. multiple: true,
  249. showSearch: true,
  250. total: 0,
  251. liveOrderList: [],
  252. queryParams: {
  253. pageNum: 1,
  254. liveId: null,
  255. pageSize: 10,
  256. deptId: null,
  257. orderCode: null,
  258. userId: null,
  259. userName: null,
  260. userPhone: null,
  261. userAddress: null,
  262. payMoney: null,
  263. totalPrice: null,
  264. deliveryCode: null,
  265. deliveryName: null,
  266. deliverySn: null,
  267. payTimeStart: null,
  268. payTimeEnd: null,
  269. finishTimeStart: null,
  270. finishTimeEnd: null,
  271. status: null,
  272. companyUserName: null,
  273. deliverySendTimeStart: null,
  274. deliverySendTimeEnd: null,
  275. },
  276. orderOptions: [],
  277. actName: "10",
  278. show: {
  279. title: "订单详情",
  280. open: false,
  281. },
  282. deptOptions: undefined,
  283. deptName: undefined,
  284. };
  285. },
  286. watch: {
  287. deptName(val) {
  288. this.$refs.tree.filter(val);
  289. },
  290. },
  291. created() {
  292. this.getTreeselect();
  293. this.queryParams.liveId = this.$route.query.liveId;
  294. this.getList();
  295. this.getDicts("sys_live_order_status").then(response => {
  296. this.orderStatusOptions = response.data;
  297. });
  298. this.getDicts("sys_order_status").then(response => {
  299. this.orderOptions = response.data;
  300. });
  301. },
  302. methods: {
  303. parseTime,
  304. // 发货时间范围处理
  305. handleDateChange(val) {
  306. if (val && val.length === 2) {
  307. this.queryParams.deliverySendTimeStart = val[0];
  308. this.queryParams.deliverySendTimeEnd = val[1];
  309. } else {
  310. this.queryParams.deliverySendTimeStart = null;
  311. this.queryParams.deliverySendTimeEnd = null;
  312. }
  313. },
  314. // 支付时间范围处理
  315. handlePayTimeChange(val) {
  316. if (val && val.length === 2) {
  317. this.queryParams.payTimeStart = val[0];
  318. this.queryParams.payTimeEnd = val[1];
  319. } else {
  320. this.queryParams.payTimeStart = null;
  321. this.queryParams.payTimeEnd = null;
  322. }
  323. },
  324. // 完成时间范围处理
  325. handleFinishTimeChange(val) {
  326. if (val && val.length === 2) {
  327. this.queryParams.finishTimeStart = val[0];
  328. this.queryParams.finishTimeEnd = val[1];
  329. } else {
  330. this.queryParams.finishTimeStart = null;
  331. this.queryParams.finishTimeEnd = null;
  332. }
  333. },
  334. // 获取部门树
  335. getTreeselect() {
  336. treeselect().then((response) => {
  337. this.deptOptions = response.data;
  338. });
  339. },
  340. // 查看详情
  341. handledetails(row) {
  342. this.show.open = true;
  343. this.$nextTick(() => {
  344. this.$refs.Details.getDetails(row.orderId, row.nickName, row.storeName);
  345. });
  346. },
  347. // 订单tab切换
  348. handleClickX(tab, event) {
  349. this.orderStatus = tab.name;
  350. if (tab.name == "10") {
  351. this.queryParams.status = null;
  352. } else {
  353. this.queryParams.status = tab.name;
  354. }
  355. this.handleQuery();
  356. },
  357. /** 查询订单列表 */
  358. getList() {
  359. this.loading = true;
  360. this.queryParams = {...this.queryParams,companyUserId: this.$store.state.user.user.userId}
  361. listLiveOrder(this.queryParams).then(response => {
  362. this.liveOrderList = response.rows;
  363. this.total = response.total;
  364. this.loading = false;
  365. delete this.queryParams[this.searchType];
  366. });
  367. },
  368. orderStatusFormatter(row, column) {
  369. return this.selectDictLabel(this.orderStatusOptions, row.status);
  370. },
  371. upDown() {
  372. this.isCollapsed = !this.isCollapsed;
  373. },
  374. handleTypeChange(newType) {
  375. this.searchKey = '';
  376. this.searchType = newType;
  377. },
  378. /** 搜索按钮操作 */
  379. handleQuery() {
  380. this.queryParams.pageNum = 1;
  381. this.queryParams.deliveryCode = null;
  382. this.queryParams.deliveryName = null;
  383. this.queryParams.deliverySn = null;
  384. if (this.searchKey !== '' && this.searchType !== '') {
  385. this.queryParams[this.searchType] = this.searchKey;
  386. }
  387. this.getList();
  388. },
  389. /** 重置按钮操作 */
  390. resetQuery() {
  391. this.searchKey = '';
  392. this.searchType = '';
  393. this.deliveryTimeRange = [];
  394. this.payTimeRange = [];
  395. this.finishTimeRange = [];
  396. this.resetForm("queryForm");
  397. this.queryParams = {
  398. pageNum: 1,
  399. liveId: this.$route.query.liveId,
  400. pageSize: 10,
  401. deptId: null,
  402. orderCode: null,
  403. userId: null,
  404. userName: null,
  405. userPhone: null,
  406. userAddress: null,
  407. payMoney: null,
  408. totalPrice: null,
  409. deliveryCode: null,
  410. deliveryName: null,
  411. deliverySn: null,
  412. payTimeStart: null,
  413. payTimeEnd: null,
  414. finishTimeStart: null,
  415. finishTimeEnd: null,
  416. status: null,
  417. companyUserName: null,
  418. deliverySendTimeStart: null,
  419. deliverySendTimeEnd: null,
  420. };
  421. if (this.actName !== "10") {
  422. this.queryParams.status = this.actName;
  423. }
  424. this.handleQuery();
  425. },
  426. // 多选框选中数据
  427. handleSelectionChange(selection) {
  428. this.ids = selection.map(item => item.orderId);
  429. this.single = selection.length !== 1;
  430. this.multiple = !selection.length;
  431. },
  432. /** 导出按钮操作 */
  433. handleExport() {
  434. const queryParams = { ...this.queryParams };
  435. this.$confirm('是否确认导出所有订单数据项?', "警告", {
  436. confirmButtonText: "确定",
  437. cancelButtonText: "取消",
  438. type: "warning"
  439. }).then(() => {
  440. this.exportLoading = true;
  441. return exportLiveOrder(queryParams);
  442. }).then(response => {
  443. this.download(response.msg);
  444. this.exportLoading = false;
  445. }).catch(() => {
  446. this.exportLoading = false;
  447. });
  448. }
  449. }
  450. };
  451. </script>
  452. <style scoped>
  453. ::v-deep .el-input-group__prepend {
  454. background-color: #fff !important;
  455. width: 100px;
  456. }
  457. ::v-deep .el-input-group--prepend {
  458. vertical-align: middle;
  459. }
  460. ::v-deep .vue-treeselect__control {
  461. height: 30px !important;
  462. line-height: 30px;
  463. }
  464. ::v-deep .vue-treeselect__placeholder {
  465. line-height: 32px;
  466. }
  467. </style>