list.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811
  1. <template>
  2. <div class="app-container">
  3. <!--用户数据-->
  4. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
  5. <el-form-item label="所属部门" prop="deptId">
  6. <treeselect style="width:220px" v-model="queryParams.deptId" :options="deptOptions" :show-count="true" placeholder="请选择所属部门" />
  7. </el-form-item>
  8. <el-form-item label="订单号" prop="orderCode">
  9. <el-input
  10. style="width:220px"
  11. v-model="queryParams.orderCode"
  12. placeholder="请输入订单号"
  13. clearable
  14. size="small"
  15. @keyup.enter.native="handleQuery"
  16. />
  17. </el-form-item>
  18. <el-form-item label="运单号" prop="deliveryId">
  19. <el-input
  20. style="width:220px"
  21. v-model="queryParams.deliveryId"
  22. placeholder="请输入运单号"
  23. clearable
  24. size="small"
  25. @keyup.enter.native="handleQuery"
  26. />
  27. </el-form-item>
  28. <el-form-item label="收件人" prop="realName">
  29. <el-input
  30. style="width:220px"
  31. v-model="queryParams.realName"
  32. placeholder="请输入收件人"
  33. clearable
  34. size="small"
  35. @keyup.enter.native="handleQuery"
  36. />
  37. </el-form-item>
  38. <el-form-item label="产品" prop="productName">
  39. <el-input
  40. v-model="queryParams.productName"
  41. placeholder="请输入产品名"
  42. clearable
  43. size="small"
  44. @keyup.enter.native="handleQuery"
  45. />
  46. </el-form-item>
  47. <el-form-item label="支付方式" prop="payType">
  48. <el-select style="width: 200px" v-model="queryParams.payType" placeholder="请选择支付方式" clearable size="small" >
  49. <el-option
  50. v-for="item in payTypeOptions"
  51. :key="item.dictValue"
  52. :label="item.dictLabel"
  53. :value="item.dictValue"
  54. />
  55. </el-select>
  56. </el-form-item>
  57. <el-form-item label="上传凭证" prop="isUpload">
  58. <el-select v-model="queryParams.isUpload" placeholder="请选择" clearable size="small" >
  59. <el-option key="0" label="未上传" value="0" />
  60. <el-option key="1" label="已上传" value="1" />
  61. </el-select>
  62. </el-form-item>
  63. <el-form-item label="手机号" prop="userPhone">
  64. <el-input
  65. style="width:220px"
  66. v-model="queryParams.userPhone"
  67. placeholder="请输入收件人手机号"
  68. clearable
  69. size="small"
  70. @keyup.enter.native="handleQuery"
  71. />
  72. </el-form-item>
  73. <el-form-item label="员工姓名" prop="companyUserNickName">
  74. <el-input
  75. style="width:220px"
  76. v-model="queryParams.companyUserNickName"
  77. placeholder="请输入员工姓名"
  78. clearable
  79. size="small"
  80. @keyup.enter.native="handleQuery"
  81. />
  82. </el-form-item>
  83. <el-form-item label="订单类型" prop="orderType">
  84. <el-select style="width:220px" v-model="queryParams.orderType" placeholder="请选择订单类型" clearable size="small" >
  85. <el-option
  86. v-for="item in orderTypeOptions"
  87. :key="item.dictValue"
  88. :label="item.dictLabel"
  89. :value="item.dictValue"
  90. />
  91. </el-select>
  92. </el-form-item>
  93. <el-form-item label="物流状态" prop="deliveryStatus">
  94. <el-select style="width:220px" v-model="queryParams.deliveryStatus" placeholder="请选择物流状态" clearable size="small" >
  95. <el-option
  96. v-for="item in deliveryStatusOptions"
  97. :key="item.dictValue"
  98. :label="item.dictLabel"
  99. :value="item.dictValue"
  100. />
  101. </el-select>
  102. </el-form-item>
  103. <el-form-item label="结算状态" prop="deliveryPayStatus">
  104. <el-select style="width:220px" v-model="queryParams.deliveryPayStatus" placeholder="请选择物流结算状态" clearable size="small" >
  105. <el-option
  106. v-for="item in deliveryPayStatusOptions"
  107. :key="item.dictValue"
  108. :label="item.dictLabel"
  109. :value="item.dictValue"
  110. />
  111. </el-select>
  112. </el-form-item>
  113. <el-form-item label="下单时间" prop="createTimeRange">
  114. <el-date-picker
  115. style="width:220px"
  116. clearable size="small"
  117. v-model="createTimeRange"
  118. type="daterange"
  119. value-format="yyyy-MM-dd"
  120. start-placeholder="开始日期"
  121. end-placeholder="结束日期">
  122. </el-date-picker>
  123. </el-form-item>
  124. <el-form-item label="支付时间" prop="payTimeRange">
  125. <el-date-picker
  126. style="width:220px"
  127. clearable size="small"
  128. v-model="payTimeRange"
  129. type="daterange"
  130. value-format="yyyy-MM-dd"
  131. start-placeholder="开始日期"
  132. end-placeholder="结束日期">
  133. </el-date-picker>
  134. </el-form-item>
  135. <el-form-item label="回单时间" prop="deliveryImportTimeRange">
  136. <el-date-picker
  137. style="width:220px"
  138. clearable size="small"
  139. v-model="deliveryImportTimeRange"
  140. type="daterange"
  141. value-format="yyyy-MM-dd"
  142. start-placeholder="开始日期"
  143. end-placeholder="结束日期">
  144. </el-date-picker>
  145. </el-form-item>
  146. <el-form-item label="档期归属" prop="scheduleId" >
  147. <el-select filterable style="width: 200px" v-model="queryParams.scheduleId" placeholder="请选择档期" clearable size="small" >
  148. <el-option
  149. v-for="item in scheduleOptions"
  150. :key="item.id"
  151. :label="item.name"
  152. :value="item.id"
  153. />
  154. </el-select>
  155. </el-form-item>
  156. <el-form-item>
  157. <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  158. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  159. </el-form-item>
  160. </el-form>
  161. <el-row :gutter="10" class="mb8">
  162. <el-col :span="1.5">
  163. <el-button
  164. type="warning"
  165. icon="el-icon-download"
  166. size="mini"
  167. @click="handleExport"
  168. >导出订单</el-button>
  169. </el-col>
  170. <el-col :span="1.5">
  171. <el-button
  172. type="warning"
  173. icon="el-icon-download"
  174. size="mini"
  175. @click="handleExportItems"
  176. v-hasPermi="['store:storeOrder:exportItems']"
  177. >导出订单明细</el-button>
  178. </el-col>
  179. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  180. </el-row>
  181. <el-tabs type="card" v-model="activeName" @tab-click="handleClick">
  182. <el-tab-pane label="全部订单" name="00"></el-tab-pane>
  183. <el-tab-pane label="待支付" name="0"></el-tab-pane>
  184. <el-tab-pane label="待发货" name="1"></el-tab-pane>
  185. <el-tab-pane label="待收货" name="2"></el-tab-pane>
  186. <el-tab-pane label="交易完成" name="3"></el-tab-pane>
  187. <el-tab-pane label="退款中" name="-1"></el-tab-pane>
  188. <el-tab-pane label="已退款" name="-2"></el-tab-pane>
  189. <el-tab-pane label="已取消" name="-3"></el-tab-pane>
  190. </el-tabs>
  191. <el-table height="500" border v-loading="loading" :data="storeOrderList" @selection-change="handleSelectionChange">
  192. <el-table-column type="selection" width="55" align="center" />
  193. <el-table-column label="订单号" align="center" prop="orderCode" />
  194. <el-table-column label="所属公司" align="center" prop="companyName" />
  195. <el-table-column label="所属员工" align="center" prop="companyUserNickName" />
  196. <el-table-column label="用户昵称" align="center" prop="nickname" width="150px" >
  197. <template slot-scope="scope">
  198. <span>{{scope.row.nickname}}</span>
  199. </template>
  200. </el-table-column>
  201. <el-table-column label="收件人" align="center" prop="realName" width="150px" >
  202. <template slot-scope="scope">
  203. <span>{{scope.row.realName}} </span>
  204. </template>
  205. </el-table-column>
  206. <!-- <el-table-column label="商品" align="center" width="300px" >
  207. <template slot-scope="scope">
  208. <div v-for="(item, index) in scope.row.items" class="items" >
  209. <img class="pic" :src="JSON.parse(item.jsonInfo).image" />
  210. <div class="goods-content">
  211. <div class="goods-title">{{ JSON.parse(item.jsonInfo).productName}}</div>
  212. <div class="sku">{{ JSON.parse(item.jsonInfo).sku}}</div>
  213. <div class="price">¥{{JSON.parse(item.jsonInfo).price}}×{{item.num}}</div>
  214. </div>
  215. </div>
  216. </template>
  217. </el-table-column> -->
  218. <el-table-column label="订单金额" align="center" prop="totalPrice" >
  219. <template slot-scope="scope">
  220. <span v-if="scope.row.totalPrice!=null">{{scope.row.totalPrice.toFixed(2)}}</span>
  221. </template>
  222. </el-table-column>
  223. <el-table-column label="应付金额" align="center" prop="payPrice" >
  224. <template slot-scope="scope">
  225. <span v-if="scope.row.payPrice!=null">{{scope.row.payPrice.toFixed(2)}}</span>
  226. </template>
  227. </el-table-column>
  228. <el-table-column label="下单时间" align="center" prop="createTime" />
  229. <!-- <el-table-column label="支付状态" align="center" prop="paid" /> -->
  230. <el-table-column label="支付时间" align="center" prop="payTime" width="180">
  231. </el-table-column>
  232. <el-table-column label="支付方式" align="center" prop="payType" >
  233. <template slot-scope="scope">
  234. <span prop="payType" v-for="(item, index) in payTypeOptions" v-if="scope.row.payType==item.dictValue">{{item.dictLabel}}</span>
  235. </template>
  236. </el-table-column>
  237. <el-table-column label="订单类型" align="center" prop="orderType" >
  238. <template slot-scope="scope">
  239. <el-tag prop="status" v-for="(item, index) in orderTypeOptions" v-if="scope.row.orderType==item.dictValue">{{item.dictLabel}}</el-tag>
  240. </template>
  241. </el-table-column>
  242. <el-table-column label="状态" align="center" prop="status" >
  243. <template slot-scope="scope">
  244. <el-tag prop="status" v-for="(item, index) in statusOptions" v-if="scope.row.status==item.dictValue">{{item.dictLabel}}</el-tag>
  245. </template>
  246. </el-table-column>
  247. <el-table-column label="物流状态" align="center" prop="deliveryStatus" >
  248. <template slot-scope="scope">
  249. <el-tag prop="status" v-for="(item, index) in deliveryStatusOptions" v-if="scope.row.deliveryStatus==item.dictValue">{{item.dictLabel}}</el-tag>
  250. </template>
  251. </el-table-column>
  252. <el-table-column label="物流结算状态" align="center" prop="deliveryPayStatus" >
  253. <template slot-scope="scope">
  254. <el-tag prop="status" v-for="(item, index) in deliveryPayStatusOptions" v-if="scope.row.deliveryPayStatus==item.dictValue">{{item.dictLabel}}</el-tag>
  255. </template>
  256. </el-table-column>
  257. <el-table-column label="操作" fixed="right" width="100px" align="center" class-name="small-padding fixed-width">
  258. <template slot-scope="scope">
  259. <el-button
  260. size="mini"
  261. type="text"
  262. @click="handleDetails(scope.row)"
  263. v-hasPermi="['store:storeOrder:query']"
  264. >查看</el-button>
  265. <!-- <el-button
  266. size="mini"
  267. type="text"
  268. @click="handleGenPayUrl(scope.row)"
  269. v-hasPermi="['store:storeOrder:genPayUrl']"
  270. >生成付款链接</el-button> -->
  271. </template>
  272. </el-table-column>
  273. </el-table>
  274. <pagination
  275. v-show="total>0"
  276. :total="total"
  277. :page.sync="queryParams.pageNum"
  278. :limit.sync="queryParams.pageSize"
  279. @pagination="getList"
  280. />
  281. <el-drawer
  282. size="75%"
  283. :title="show.title" :visible.sync="show.open"
  284. >
  285. <product-order ref="order" />
  286. </el-drawer>
  287. </div>
  288. </template>
  289. <script>
  290. import {exportStoreOrderItems, createUserOrder,listStoreOrder, getStoreOrder, delStoreOrder, addStoreOrder, updateStoreOrder, exportStoreOrder } from "@/api/store/storeOrder";
  291. import { getUserList } from "@/api/users/user";
  292. import { getAddressList } from "@/api/users/userAddress";
  293. import { getTcmScheduleList } from "@/api/company/tcmScheduleReport";
  294. import productOrder from "../components/productOrder";
  295. import productSelect from "../components/productSelect";
  296. import addUser from "../components/addUser";
  297. import addUserAddress from "../components/addUserAddress";
  298. import config from "@/utils/config";
  299. import QRCode from 'qrcodejs2'
  300. import { treeselect } from "@/api/company/companyDept";
  301. import Treeselect from "@riophae/vue-treeselect";
  302. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  303. export default {
  304. components: { Treeselect,productOrder,productSelect,addUser,addUserAddress },
  305. name: "StoreOrder",
  306. data() {
  307. return {
  308. // 部门树选项
  309. deptOptions: undefined,
  310. // 是否显示弹出层
  311. open: false,
  312. // 部门名称
  313. deptName: undefined,
  314. defaultProps: {
  315. children: "children",
  316. label: "label",
  317. },
  318. deliveryPayStatusOptions:[],
  319. deliveryStatusOptions:[],
  320. dateRange: [],
  321. orderTypeOptions:[],
  322. payTypeOptions:[],
  323. payQr:{
  324. open:false,
  325. title:"付款二维码"
  326. },
  327. user:{
  328. open:false,
  329. title:"创建会员"
  330. },
  331. userAddress:{
  332. open:false,
  333. title:"创建收货地址"
  334. },
  335. tablekey:false,
  336. totalMoney:0.00,
  337. products:[],
  338. product:{
  339. open:false,
  340. title:"商品选择"
  341. },
  342. userStatusOptions:[],
  343. phone:null,
  344. address:[],
  345. addressloading: false,
  346. userloading: false,
  347. users:[],
  348. userStatusOptions:[],
  349. show:{
  350. open:false,
  351. title:"订单详情"
  352. },
  353. activeName:"00",
  354. statusOptions:[],
  355. // 遮罩层
  356. loading: true,
  357. // 选中数组
  358. ids: [],
  359. // 非单个禁用
  360. single: true,
  361. // 非多个禁用
  362. multiple: true,
  363. // 显示搜索条件
  364. showSearch: true,
  365. // 总条数
  366. total: 0,
  367. // 订单表格数据
  368. storeOrderList: [],
  369. // 弹出层标题
  370. title: "",
  371. // 是否显示弹出层
  372. open: false,
  373. createTimeRange:[],
  374. payTimeRange:[],
  375. deliveryImportTimeRange:[],
  376. scheduleOptions:[],
  377. // 查询参数
  378. queryParams: {
  379. pageNum: 1,
  380. pageSize: 10,
  381. orderCode: null,
  382. extendOrderId: null,
  383. userId: null,
  384. realName: null,
  385. userPhone: null,
  386. userAddress: null,
  387. cartId: null,
  388. freightPrice: null,
  389. totalNum: null,
  390. totalPrice: null,
  391. totalPostage: null,
  392. payPrice: null,
  393. payPostage: null,
  394. deductionPrice: null,
  395. couponId: null,
  396. couponPrice: null,
  397. paid: null,
  398. payTime: null,
  399. payType: null,
  400. status: null,
  401. refundStatus: null,
  402. refundReasonWapImg: null,
  403. refundReasonWapExplain: null,
  404. refundReasonTime: null,
  405. refundReasonWap: null,
  406. refundReason: null,
  407. refundPrice: null,
  408. deliverySn: null,
  409. deliveryName: null,
  410. deliveryType: null,
  411. deliveryId: null,
  412. gainIntegral: null,
  413. useIntegral: null,
  414. payIntegral: null,
  415. backIntegral: null,
  416. mark: null,
  417. isDel: null,
  418. cost: null,
  419. verifyCode: null,
  420. storeId: null,
  421. shippingType: null,
  422. isChannel: null,
  423. isRemind: null,
  424. isSysDel: null
  425. },
  426. // 表单参数
  427. form: {
  428. addressId:null,
  429. userId:null,
  430. products:[],
  431. },
  432. // 表单校验
  433. rules: {
  434. userId: [
  435. { required: true, message: "会员信息不能为空" }
  436. ],
  437. addressId: [
  438. { required: true, message: "收货信息不能为空" }
  439. ],
  440. products: [
  441. { required: true, message: "商品不能为空" }
  442. ],
  443. }
  444. };
  445. },
  446. watch: {
  447. // 根据名称筛选部门树
  448. deptName(val) {
  449. this.$refs.tree.filter(val);
  450. },
  451. },
  452. created() {
  453. this.getTreeselect();
  454. this.getDicts("store_order_type").then((response) => {
  455. this.orderTypeOptions = response.data;
  456. });
  457. this.getDicts("store_pay_type").then((response) => {
  458. this.payTypeOptions = response.data;
  459. });
  460. this.getDicts("user_status").then((response) => {
  461. this.userStatusOptions = response.data;
  462. });
  463. this.getDicts("store_order_status").then((response) => {
  464. this.statusOptions = response.data;
  465. console.log(response.data)
  466. });
  467. this.getDicts("store_order_delivery_status").then((response) => {
  468. this.deliveryStatusOptions = response.data;
  469. });
  470. this.getDicts("store_delivery_pay_status").then((response) => {
  471. this.deliveryPayStatusOptions = response.data;
  472. });
  473. getTcmScheduleList().then(response => {
  474. this.scheduleOptions = response.data;
  475. });
  476. this.getList();
  477. },
  478. methods: {
  479. /** 查询部门下拉树结构 */
  480. getTreeselect() {
  481. treeselect().then((response) => {
  482. this.deptOptions = response.data;
  483. });
  484. },
  485. // 筛选节点
  486. filterNode(value, data) {
  487. if (!value) return true;
  488. return data.label.indexOf(value) !== -1;
  489. },
  490. // 节点单击事件
  491. handleNodeClick(data) {
  492. this.queryParams.deptId = data.id;
  493. this.getList();
  494. },
  495. handleGenPayUrl(row){
  496. this.payQr.open=true;
  497. setTimeout(() => {
  498. var qrcode = new QRCode(this.$refs.qrCodeUrl, {
  499. text: config.payQRUrl+row.id, // 需要转换为二维码的内容
  500. width: 200,
  501. height: 200,
  502. colorDark: '#000000',
  503. colorLight: '#ffffff',
  504. correctLevel: QRCode.CorrectLevel.H
  505. })
  506. }, 200);
  507. },
  508. handleAddUser(){
  509. this.user.open=true;
  510. },
  511. handleAddUserAddress(){
  512. if(this.form.userId==null){
  513. this.msgError("请选择会员");
  514. return;
  515. }
  516. this.userAddress.open=true;
  517. setTimeout(() => {
  518. this.$refs.addUserAddress.init(this.form.userId);
  519. }, 500);
  520. },
  521. addUser(){
  522. this.user.open=false;
  523. },
  524. addUserAddress(){
  525. this.userAddress.open=false;
  526. //获取地址
  527. this.getAddressList(this.form.userId);
  528. },
  529. compute(){
  530. this.totalMoney=0;
  531. var that=this;
  532. this.products.forEach (function (value) {
  533. that.totalMoney += value.money;
  534. });
  535. console.log(that.totalMoney)
  536. },
  537. handleProductCountChange(row){
  538. this.tablekey = !this.tablekey
  539. console.log(row)
  540. row.money=row.count*row.price;
  541. this.$forceUpdate();
  542. this.compute();
  543. },
  544. selectProduct(row){
  545. console.log(row);
  546. for(var i=0;i<this.products.length;i++){
  547. if(this.products[i].id==row.id){
  548. return;
  549. }
  550. }
  551. row.count=1;
  552. row.money=row.count*row.price;
  553. this.products.push(row);
  554. this.compute();
  555. },
  556. handleAddProduct(){
  557. this.product.open=true;
  558. },
  559. searchUser(){
  560. if(this.phone==null||this.phone==""){
  561. return;
  562. }
  563. var data={phone:this.phone}
  564. this.userloading = true;
  565. this.users=[];
  566. this.address=[];
  567. getUserList(data).then(response => {
  568. this.users = response.data;
  569. this.userloading = false;
  570. if(this.users!=null&&this.users.length==1){
  571. this.form.userId=this.users[0].userId;
  572. this.getAddressList(this.form.userId)
  573. }
  574. });
  575. },
  576. getAddressList(userId){
  577. var data={userId:userId}
  578. this.addressloading = true;
  579. this.address=[];
  580. getAddressList(data).then(response => {
  581. this.address = response.data;
  582. this.addressloading = false;
  583. });
  584. },
  585. handleDetails(row){
  586. this.show.open=true;
  587. const orderId = row.id ;
  588. setTimeout(() => {
  589. this.$refs.order.getOrder(orderId);
  590. }, 500);
  591. },
  592. handleClick(tab, event) {
  593. if(tab.name=="all"){
  594. this.queryParams.status==null;
  595. }
  596. else{
  597. this.queryParams.status=tab.name;
  598. }
  599. this.getList();
  600. },
  601. /** 查询订单列表 */
  602. getList() {
  603. if(this.queryParams.status=='00'){
  604. this.queryParams.status=null;
  605. }
  606. if(this.createTimeRange!=null&&this.createTimeRange.length==2){
  607. this.queryParams.createTimeRange=this.createTimeRange[0]+"--"+this.createTimeRange[1]
  608. }
  609. else{
  610. this.queryParams.createTimeRange=null;
  611. }
  612. if(this.payTimeRange!=null&&this.payTimeRange.length==2){
  613. this.queryParams.payTimeRange=this.payTimeRange[0]+"--"+this.payTimeRange[1]
  614. }
  615. else{
  616. this.queryParams.payTimeRange=null;
  617. }
  618. if(this.deliveryImportTimeRange!=null&&this.deliveryImportTimeRange.length==2){
  619. this.queryParams.deliveryImportTimeRange=this.deliveryImportTimeRange[0]+"--"+this.deliveryImportTimeRange[1]
  620. }
  621. else{
  622. this.queryParams.deliveryImportTimeRange=null;
  623. }
  624. this.loading = true;
  625. listStoreOrder(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
  626. this.storeOrderList = response.rows;
  627. this.total = response.total;
  628. this.loading = false;
  629. });
  630. },
  631. // 取消按钮
  632. cancel() {
  633. this.open = false;
  634. this.reset();
  635. },
  636. // 表单重置
  637. reset() {
  638. this.form = {
  639. addressId:null,
  640. userId:null,
  641. products:null,
  642. };
  643. this.resetForm("form");
  644. },
  645. /** 搜索按钮操作 */
  646. handleQuery() {
  647. this.queryParams.pageNum = 1;
  648. this.getList();
  649. },
  650. /** 重置按钮操作 */
  651. resetQuery() {
  652. this.resetForm("queryForm");
  653. this.handleQuery();
  654. },
  655. // 多选框选中数据
  656. handleSelectionChange(selection) {
  657. this.ids = selection.map(item => item.id)
  658. this.single = selection.length!==1
  659. this.multiple = !selection.length
  660. },
  661. /** 新增按钮操作 */
  662. handleAdd() {
  663. this.reset();
  664. this.open = true;
  665. this.title = "创建订单";
  666. },
  667. /** 修改按钮操作 */
  668. handleUpdate(row) {
  669. this.reset();
  670. const id = row.id || this.ids
  671. getStoreOrder(id).then(response => {
  672. this.form = response.data;
  673. this.open = true;
  674. this.title = "修改订单";
  675. });
  676. },
  677. /** 提交按钮 */
  678. submitForm() {
  679. this.$refs["form"].validate(valid => {
  680. if(this.products.length==0){
  681. this.msgError("请选择商品");
  682. return;
  683. }
  684. this.form.products=this.products;
  685. if (valid) {
  686. console.log(this.form);
  687. createUserOrder(this.form).then(response => {
  688. if (response.code === 200) {
  689. this.msgSuccess("创建成功");
  690. this.open = false;
  691. this.getList();
  692. }
  693. });
  694. }
  695. });
  696. },
  697. /** 删除按钮操作 */
  698. handleDelete(row) {
  699. this.products.splice(this.products.findIndex(item => item.id === row.id), 1)
  700. this.compute();
  701. },
  702. /** 导出按钮操作 */
  703. handleExport() {
  704. if(this.queryParams.status=='00'){
  705. this.queryParams.status=null;
  706. }
  707. if(this.createTimeRange!=null&&this.createTimeRange.length==2){
  708. this.queryParams.createTimeRange=this.createTimeRange[0]+"--"+this.createTimeRange[1]
  709. }
  710. else{
  711. this.queryParams.createTimeRange=null;
  712. }
  713. if(this.payTimeRange!=null&&this.payTimeRange.length==2){
  714. this.queryParams.payTimeRange=this.payTimeRange[0]+"--"+this.payTimeRange[1]
  715. }
  716. else{
  717. this.queryParams.payTimeRange=null;
  718. }
  719. if(this.deliveryImportTimeRange!=null&&this.deliveryImportTimeRange.length==2){
  720. this.queryParams.deliveryImportTimeRange=this.deliveryImportTimeRange[0]+"--"+this.deliveryImportTimeRange[1]
  721. }
  722. else{
  723. this.queryParams.deliveryImportTimeRange=null;
  724. }
  725. const queryParams = this.addDateRange(this.queryParams, this.dateRange);
  726. this.$confirm('是否确认导出所有订单数据项?', "警告", {
  727. confirmButtonText: "确定",
  728. cancelButtonText: "取消",
  729. type: "warning"
  730. }).then(function() {
  731. return exportStoreOrder(queryParams);
  732. }).then(response => {
  733. this.download(response.msg);
  734. }).catch(function() {});
  735. },
  736. handleExportItems() {
  737. if(this.queryParams.status=='00'){
  738. this.queryParams.status=null;
  739. }
  740. if(this.createTimeRange!=null&&this.createTimeRange.length==2){
  741. this.queryParams.createTimeRange=this.createTimeRange[0]+"--"+this.createTimeRange[1]
  742. }
  743. else{
  744. this.queryParams.createTimeRange=null;
  745. }
  746. if(this.payTimeRange!=null&&this.payTimeRange.length==2){
  747. this.queryParams.payTimeRange=this.payTimeRange[0]+"--"+this.payTimeRange[1]
  748. }
  749. else{
  750. this.queryParams.payTimeRange=null;
  751. }
  752. if(this.deliveryImportTimeRange!=null&&this.deliveryImportTimeRange.length==2){
  753. this.queryParams.deliveryImportTimeRange=this.deliveryImportTimeRange[0]+"--"+this.deliveryImportTimeRange[1]
  754. }
  755. else{
  756. this.queryParams.deliveryImportTimeRange=null;
  757. }
  758. const queryParams = this.addDateRange(this.queryParams, this.dateRange);
  759. this.$confirm('是否确认导出所有订单明细数据项?', "警告", {
  760. confirmButtonText: "确定",
  761. cancelButtonText: "取消",
  762. type: "warning"
  763. }).then(function() {
  764. return exportStoreOrderItems(queryParams);
  765. }).then(response => {
  766. this.download(response.msg);
  767. }).catch(function() {});
  768. }
  769. }
  770. };
  771. </script>
  772. <style scoped lang="scss">
  773. .items{
  774. margin: 5px 0px;
  775. display: flex;
  776. flex-direction: row;
  777. align-items: center;
  778. justify-content: flex-start;
  779. .pic{
  780. width:60px;
  781. height:60px;
  782. }
  783. .goods-content{
  784. margin-left: 10px;
  785. max-width: 200px;
  786. text-align: left;
  787. .goods-title{
  788. overflow:hidden;
  789. white-space: nowrap;
  790. text-overflow: ellipsis;
  791. -o-text-overflow:ellipsis;
  792. }
  793. }
  794. }
  795. </style>