invite.php 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786
  1. <?php
  2. /**
  3. * @link:http://www.goodmall.com/
  4. * @copyright: Copyright (c) 2020
  5. * Created by PhpStorm
  6. * Author: ganxiaohao
  7. * Date: 2020-05-08
  8. * Time: 15:48
  9. */
  10. use common\helpers\ComponentHelper;
  11. //Yii::$app->loadPluginComponentView('agent-order-edit');
  12. $diyPath = dirname(__DIR__) . '/components';
  13. ComponentHelper::loadComponentView('agent-order-edit', $diyPath);
  14. ComponentHelper::loadComponentView('com-export-dialog', '@backend/views/components/common');
  15. ComponentHelper::loadComponentView('com-image', '@backend/views/components/common');
  16. ComponentHelper::loadComponentView('component/order-address', __DIR__);
  17. ?>
  18. <div id="app" v-cloak>
  19. <el-card shadow="never" style="border:0;min-width: 1000px;" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  20. <div slot="header" class="title">
  21. <span>自提订单</span>
  22. <div style="float: right; margin: -5px 0;display:flex;">
  23. <div style="margin-top: -5px;margin-right:10px;">
  24. <el-button type="primary" size="small" @click="batchDelivery">批量发货</el-button>
  25. </div>
  26. <com-export-dialog style="float: right;margin-top: -5px" :field_list='exportList' :action_url="export_url" :params="searchData" @selected="exportConfirm"></com-export-dialog>
  27. </div>
  28. </div>
  29. <div class="table-body">
  30. <el-form :inline="true" :model="search" size="small" class="demo-form-inline">
  31. <el-form-item label="">
  32. <el-input style="width: 260px;margin-right: 20px;" @keyup.enter.native="loadData" size="small" placeholder="请输入代理商昵称/手机号" v-model="search.keyword"
  33. clearable @clear="toSearch">
  34. </el-input>
  35. </el-form-item>
  36. <el-form-item label="">
  37. <el-select size="small" v-model="search.order_type" class="select"
  38. style="width:130px;margin-right: 20px;">
  39. <el-option label="全部" value=""></el-option>
  40. <el-option label="价差礼包自提" :value="2"></el-option>
  41. <el-option label="云仓自提" :value="1"></el-option>
  42. </el-select>
  43. </el-form-item>
  44. <el-form-item label="">
  45. <el-input style="width: 260px;margin-right: 20px;" @keyup.enter.native="loadData" size="small" placeholder="请输入快递单号" v-model="search.express_no"
  46. clearable @clear="toSearch">
  47. </el-input>
  48. </el-form-item>
  49. <el-form-item label="">
  50. <el-input style="width: 260px;margin-right: 20px;" @keyup.enter.native="loadData" size="small" placeholder="订单号" v-model="search.order_no"
  51. clearable @clear="toSearch">
  52. </el-input>
  53. </el-form-item>
  54. <el-form-item label="">
  55. <el-input style="width: 260px;margin-right: 20px;" @keyup.enter.native="loadData" size="small" placeholder="交易号" v-model="search.out_trade_no"
  56. clearable @clear="toSearch">
  57. </el-input>
  58. </el-form-item>
  59. <el-form-item label="">
  60. <el-select size="small" v-model="search.status" class="select" style="width:130px;margin-right: 20px;">
  61. <el-option label="全部订单状态" value="" ></el-option>
  62. <el-option label="待发货" :value="0" ></el-option>
  63. <el-option label="已发货" :value="1" ></el-option>
  64. <el-option label="已完成" :value="2" ></el-option>
  65. <el-option label="已取消" :value="4" ></el-option>
  66. <el-option label="取消自取" :value="-4" ></el-option>
  67. <!-- 0待发货;1已发货;2已完成 -->
  68. </el-select>
  69. </el-form-item>
  70. <el-form-item label="">
  71. <el-input style="width: 260px;margin-right: 20px;" @keyup.enter.native="loadData" size="small" placeholder="请输入收货人名字/手机号" v-model="search.receiving_info"
  72. clearable @clear="toSearch">
  73. </el-input>
  74. </el-form-item>
  75. <el-form-item label="自提时间">
  76. <el-date-picker
  77. v-model="search.created_at"
  78. type="datetimerange"
  79. range-separator="至"
  80. start-placeholder="开始日期"
  81. end-placeholder="结束日期"
  82. value-format="yyyy-MM-dd HH:mm:ss">
  83. </el-date-picker>
  84. </el-form-item>
  85. <el-form-item label="收货地址筛选 省、市、区">
  86. <el-cascader
  87. @change="addressChange"
  88. :options="districtList"
  89. :props="addressProps"
  90. v-model="addressIdsMap"
  91. clearable
  92. @clear="clearAreaIds"
  93. size="small"
  94. >
  95. </el-cascader>
  96. </el-form-item>
  97. <el-form-item>
  98. <el-button type="primary" @click="toSearch">搜索</el-button>
  99. <el-button type="danger" @click="clearSearch" v-if="show_clear_search_btn">清除条件</el-button>
  100. </el-form-item>
  101. </el-form>
  102. <el-tabs v-model="activeName" @tab-click="handleClick">
  103. <el-table :data="list" v-loading="loading" size="small" style="margin-bottom: 15px;" class="myTable">
  104. <el-table-column prop="id" min-width="80" label="ID" align="center"></el-table-column>
  105. <el-table-column label="代理商信息" width="200">
  106. <template slot-scope="scope">
  107. <div class="table-info-img-text" v-if="scope.row.user == null">
  108. <el-image class="table-info-img circle" src="/resources/img/common/default-avatar.png">
  109. <div slot="error" class="image-slot">
  110. <com-image src="/resources/img/common/default-avatar.png"></com-image>
  111. </div>
  112. </el-image>
  113. <div class="column-div">
  114. <span><i class="el-icon-s-custom"></i></el-icon> 代理商不存在</span>
  115. </div>
  116. </div>
  117. <div class="table-info-img-text" v-else>
  118. <el-image class="table-info-img circle" :src="scope.row.user.avatar_url">
  119. <div slot="error" class="image-slot">
  120. <com-image src="/resources/img/common/default-avatar.png"></com-image>
  121. </div>
  122. </el-image>
  123. <div class="column-div">
  124. <span><i class="el-icon-s-custom"></i></el-icon> {{scope.row.user.nickname}}</span>
  125. <span><i class="el-icon-mobile-phone"></i></el-icon> {{scope.row.user.mobile}}</span>
  126. </div>
  127. </div>
  128. </template>
  129. </el-table-column>
  130. <el-table-column label="自提时间" prop="created_at" min-width="150" align="center">
  131. <template slot-scope="scope">
  132. {{formatTime(scope.row.created_at)}}
  133. </template>
  134. </el-table-column>
  135. <el-table-column
  136. width="150"
  137. align="center"
  138. label="商品">
  139. <template slot-scope="scope">
  140. <div>
  141. <div v-for="(item, index) in scope.row.details" :key="index" class="not-last-bottom">
  142. <div style="display: flex;align-items: center;height: 50px;">
  143. <el-image
  144. style="flex-shrink:0;width: 50px; height: 50px; border-radius: 5px;"
  145. :src="item.goods.cover_pic"
  146. fit="cover">
  147. </el-image>
  148. <div style="padding-left: 7px;box-sizing: border-box;line-height: 50px;">
  149. <com-ellipsis :line="1" width="100" :text="item.goods.goods_name+''"></com-ellipsis>
  150. </div>
  151. </div>
  152. </div>
  153. </div>
  154. </template>
  155. </el-table-column>
  156. <el-table-column
  157. label="商品数量">
  158. <template slot-scope="scope">
  159. <div>
  160. <div v-for="(item, index) in scope.row.details" :key="index"
  161. style="height: 50px; line-height: 50px; text-align: center;"
  162. class="not-last-bottom"
  163. >{{ item.num }}</div>
  164. </div>
  165. </template>
  166. </el-table-column>
  167. <el-table-column label="自提类型" prop="order_type_text"></el-table-column>
  168. <el-table-column label="收货地址" prop="address" min-width="200" align="left">
  169. <template slot-scope="scope">
  170. <div class="column-div">
  171. <span><i class="el-icon-s-custom"></i></el-icon> {{scope.row.name}}</span>
  172. <span><i class="el-icon-mobile-phone"></i></el-icon> {{scope.row.mobile}}</span>
  173. <span><i class="el-icon-map-location"></i></el-icon> {{scope.row.address}}</span>
  174. </div>
  175. </template>
  176. </el-table-column>
  177. <el-table-column label="发货信息" min-width="200">
  178. <template slot-scope="scope">
  179. <template v-if="scope.row.send_status==1||scope.row.send_status==2">
  180. <div>公司: {{scope.row.express_name}}</div>
  181. <div>编码: {{scope.row.express_code}}</div>
  182. <div>单号: {{scope.row.express_no}}</div>
  183. </template>
  184. </template>
  185. </el-table-column>
  186. <el-table-column label="运费(元)" prop="pay_money" min-width="80" align="center"></el-table-column>
  187. <el-table-column label="买家备注" prop="remark" min-width="150" align="center">
  188. </el-table-column>
  189. <el-table-column label="卖家备注" prop="seller_remark" min-width="150" align="center">
  190. </el-table-column>
  191. <el-table-column label="状态" prop="send_status" min-width="100" align="center">
  192. <template slot-scope="scope">
  193. <div>{{scope.row.cancel_admin_id > 0 ? '取消自取' : send_status_map[scope.row.send_status]}}</div>
  194. </template>
  195. </el-table-column>
  196. <el-table-column label="附加信息" prop="addinfo" min-width="200" align="left">
  197. <template slot-scope="scope">
  198. <div class="column-div">
  199. <span v-if="scope.row.payment_type != undefined && scope.row.payment_type">支付方式: <el-tag size="small" type="warning">{{payment_type_list[scope.row.payment_type]}}</el-tag></span>
  200. <span v-if="scope.row.order_no != undefined && scope.row.order_no">订单号: {{scope.row.order_no}}</span>
  201. <span v-if="scope.row.trade_no != undefined && scope.row.trade_no">支付流水号: {{scope.row.trade_no}}</span>
  202. <span v-if="scope.row.out_trade_no != undefined && scope.row.out_trade_no">交易流水号: {{scope.row.out_trade_no}}</span>
  203. </div>
  204. </template>
  205. </el-table-column>
  206. <el-table-column label="操作" min-width="150" align="center" fixed="right">
  207. <template slot-scope="scope">
  208. <el-button type="text" @click="editClick(scope.row)" v-if="scope.row.send_status==0" size="small">待发货</el-button>
  209. <el-button type="text" @click="editClick(scope.row)" v-if="scope.row.send_status==1" size="small">修改物流</el-button>
  210. <el-button type="text" @click="viewLogistics(scope.row)"v-if="scope.row.send_status==1||scope.row.send_status==2" size="small" >查看物流</el-button>
  211. <el-button type="text" @click="showCommission(scope.row)" v-if="[0, 1, 2].includes(scope.row.send_status)" size="small">分润明细</el-button>
  212. <template v-if="[0, 3].includes(scope.row.send_status)">
  213. <el-button type="text" @click="cancelAgentOrder(scope.row.id)" size="small">取消自提</el-button>
  214. <el-button type="text" @click="showModifyAddressDialog(scope.row)" size="small">修改地址</el-button>
  215. </template>
  216. <el-button type="text" @click="showEditSellerRemarkDialog(scope.row)" size="small">备注</el-button>
  217. </template>
  218. </el-table-column>
  219. </el-table>
  220. </el-tabs>
  221. <div flex="box:last cross:center">
  222. <div></div>
  223. <div>
  224. <el-pagination
  225. @current-change="pageChange"
  226. background
  227. layout="prev, pager, next"
  228. :page-count="page_count">
  229. </el-pagination>
  230. </div>
  231. </div>
  232. </div>
  233. </el-card>
  234. <agent-order-edit v-model="edit.show" :edit_row="edit" @success="loadData"></agent-order-edit>
  235. <el-dialog
  236. title="物流信息"
  237. :visible.sync="dialogVisible"
  238. width="65%"
  239. >
  240. <div style="padding: 2px;height:500px;overflow-y:auto;">
  241. <div v-if="is_true==1">
  242. <el-timeline>
  243. <el-timeline-item
  244. v-for="(express_log, val) in traces"
  245. :key="val"
  246. size="normal"
  247. :color="'#409eff'"
  248. :timestamp="express_log.AcceptTime">
  249. {{express_log.AcceptStation}}
  250. </el-timeline-item>
  251. </el-timeline>
  252. </div>
  253. <div v-else>
  254. 暂无物流信息
  255. </div>
  256. </div>
  257. <span slot="footer" class="dialog-footer">
  258. </span>
  259. </el-dialog>
  260. <el-dialog class="fenRunData" title="分润明细" :visible.sync="dialogTableVisible_fenRun">
  261. <el-tabs v-model="activeNames" @tab-click="commissionHandleClick">
  262. <el-tab-pane v-for="(v, k) in commission_type" :label="v.label" :key="v.name" :name="v.name">
  263. <el-table :data="fenRunData">
  264. <el-table-column label="用户">
  265. <template slot-scope="scope">
  266. <div class="table-info-img-text">
  267. <el-image class="table-info-img circle" :src="scope.row.avatar_url">
  268. <div slot="error" class="image-slot">
  269. <el-image class="table-info-img" src="/resources/img/common/default-avatar.png"></el-image>
  270. </div>
  271. </el-image>
  272. <div class="table-info-text">
  273. <div>{{scope.row.nickname}}<span style="color:blue">({{scope.row.user_id}})</span></div>
  274. <div>{{scope.row.mobile}}</div>
  275. </div>
  276. </div>
  277. </template>
  278. </el-table-column>
  279. <el-table-column property="change_num" :label="v.label">
  280. <template slot-scope="scope">
  281. <span v-if="scope.row.change_type=='add'" style="color:green;">+{{scope.row.change_num}}</span>
  282. <span v-else style="color:red;">-{{scope.row.change_num}}</span>
  283. </template>
  284. </el-table-column>
  285. <el-table-column property="is_frozen" label="状态"></el-table-column>
  286. <el-table-column property="capital_type_text" label="类型">
  287. <template slot-scope="scope">
  288. {{scope.row.capital_type_text}} : {{scope.row.desc}}
  289. </template>
  290. </el-table-column>
  291. <el-table-column property="from_type_text" label="所属插件"></el-table-column>
  292. </el-table>
  293. </el-tab-pane>
  294. </el-dialog>
  295. <el-dialog
  296. title="编辑商家备注"
  297. :visible.sync="sellerRemarkDialogVisible"
  298. width="30%"
  299. >
  300. <el-form :model="sellerRemarkForm">
  301. <el-form-item label="备注" label-width="100px">
  302. <el-input v-model="sellerRemarkForm.seller_remark"
  303. type="textarea"
  304. :rows="3"
  305. placeholder="请输入备注"
  306. :maxlength="255"
  307. ></el-input>
  308. </el-form-item>
  309. </el-form>
  310. <div slot="footer" class="dialog-footer">
  311. <el-button @click="sellerRemarkDialogVisible = false">取 消</el-button>
  312. <el-button type="primary" @click="editSellerRemark">确 定</el-button>
  313. </div>
  314. </el-dialog>
  315. <!-- 修改地址 -->
  316. <order-address
  317. :is_show="modifyAddressDialogVisible"
  318. :change-address-loading="modifyAddressLoading"
  319. @sure="modifyAddress"
  320. :order_info="modifyAddressForm"
  321. @close="modifyAddressDialogVisible = false"
  322. ></order-address>
  323. </div>
  324. <script>
  325. const app = new Vue({
  326. el: '#app',
  327. data: {
  328. edit: {
  329. show: false,
  330. id: 0,
  331. is_update: 0,
  332. data:{}
  333. },
  334. loading: false,
  335. activeName: '-1',
  336. list: [],
  337. pagination: null,
  338. agent_level_list: [],
  339. send_status_map: [],
  340. search: {
  341. page: 1,
  342. keyword:'',
  343. express_no:'',
  344. order_type: '',
  345. status:'',
  346. order_no: '',
  347. receiving_info: '',
  348. created_at: [],
  349. areaIds: [],
  350. },
  351. page_count:0,
  352. exportList: {},
  353. export_url: 'cloud-stock/order/invite',
  354. searchData:{},
  355. dialogVisible:false,
  356. traces:[],
  357. is_true:0,
  358. dialogTableVisible_fenRun:false,
  359. user_level: {},
  360. commission_type: [
  361. {
  362. 'label':'佣金',
  363. 'name':'commission',
  364. },
  365. ],
  366. orderId:0,
  367. activeNames: 'commission',
  368. fenRunData: [],
  369. payment_type_list:{},
  370. addressProps: {
  371. value: 'id',
  372. label: 'name',
  373. children: 'list',
  374. checkStrictly: true,
  375. multiple: true,
  376. },
  377. districtList: [],
  378. addressIdsMap: [],
  379. sellerRemarkDialogVisible: false,
  380. sellerRemarkForm: {
  381. id:0 ,
  382. seller_remark: ''
  383. },
  384. modifyAddressDialogVisible: false,
  385. modifyAddressLoading: false,
  386. modifyAddressForm: {
  387. id: 0,
  388. receiver_name: '',
  389. mobile: '',
  390. address: '',
  391. region_name: '',
  392. province: 0,
  393. city: 0,
  394. area: 0,
  395. }
  396. },
  397. mounted() {
  398. this.loadData();
  399. this.getDistrict(3)
  400. },
  401. computed: {
  402. show_clear_search_btn: function() {
  403. return !isEmpty(this.search.keyword) || !isEmpty(this.search.express_no) || !isEmpty(this.search.status);
  404. }
  405. },
  406. methods: {
  407. editClick(row) {
  408. //console.log('row='+JSON.stringify(row))
  409. //if (id) {
  410. /* this.edit.id = id; */
  411. this.edit.show = true;
  412. this.edit.data = row;
  413. //} else {
  414. //this.edit.show = true;
  415. //}
  416. },formatTime(timeStamp) {
  417. var date = new Date();
  418. date.setTime(timeStamp * 1000);
  419. var y = date.getFullYear();
  420. var m = date.getMonth() + 1;
  421. m = m < 10 ? ('0' + m) : m;
  422. var d = date.getDate();
  423. d = d < 10 ? ('0' + d) : d;
  424. var h = date.getHours();
  425. h = h < 10 ? ('0' + h) : h;
  426. var minute = date.getMinutes();
  427. var second = date.getSeconds();
  428. minute = minute < 10 ? ('0' + minute) : minute;
  429. second = second < 10 ? ('0' + second) : second;
  430. return y + '-' + m + '-' + d +' '+ h + ':' + minute + ':' + second;
  431. },
  432. loadData() {
  433. this.loading = true;
  434. let params = {
  435. r: 'cloud-stock/order/invite',//plugin/cloud_stock/mall/pick-up/get-list自取订单列表
  436. limit:10
  437. };
  438. params = Object.assign(params, this.search);
  439. //console.log('请求前的params='+JSON.stringify(params))
  440. this.searchData = {
  441. keyword:this.search.keyword,
  442. express_no:this.search.express_no,
  443. status:this.search.status,
  444. order_type: this.search.order_type,
  445. order_no: this.search.order_no,
  446. receiving_info: this.search.receiving_info,
  447. created_at: this.search.created_at,
  448. areaIds: this.search.areaIds,
  449. };
  450. request({
  451. params: params,
  452. method: 'get',
  453. }).then(e => {
  454. //console.log('自取订单列表='+JSON.stringify(e))
  455. this.loading = false;
  456. if (e.data.code == 0) {
  457. this.list = e.data.data.list;
  458. this.send_status_map = e.data.data.send_status_map;
  459. this.page_count = e.data.data.page_count;
  460. this.exportList = e.data.data.export_list;
  461. this.payment_type_list = e.data.data.payment_type_list;
  462. } else {
  463. this.$message.error(e.data.msg);
  464. }
  465. }).catch(e => {
  466. this.loading = false;
  467. });
  468. },
  469. clearSearch() {
  470. this.search.page = 1;
  471. this.search.keyword = '';
  472. this.search.express_no = '';
  473. this.search.status = '';
  474. this.addressIdsMap = [];
  475. this.loadData();
  476. },
  477. pageChange(page) {
  478. this.search.page = page;
  479. this.loadData();
  480. },
  481. handleClick(tab, event) {
  482. this.search.page = 1;
  483. this.search.status = this.activeName;
  484. this.loadData()
  485. },
  486. toSearch() {
  487. this.search.page = 1;
  488. this.loadData();
  489. },
  490. viewLogistics(row){
  491. this.dialogVisible = true;
  492. let params = {
  493. r: 'cloud-stock/order/view-logistics',
  494. id:row.id
  495. };
  496. request({
  497. params: params,
  498. method: 'get',
  499. }).then(e => {
  500. this.loading = false;
  501. if (e.data.code == 0) {
  502. this.traces = e.data.data.traces;
  503. this.is_true = e.data.data.is_true;
  504. } else {
  505. this.$message.error(e.data.msg);
  506. }
  507. }).catch(e => {
  508. this.loading = false;
  509. });
  510. },
  511. exportConfirm(){},
  512. showCommission(row){
  513. this.dialogTableVisible_fenRun = true;
  514. this.orderId = row.id;
  515. this.getCapitalLog(row.id, this.activeNames)
  516. },
  517. commissionHandleClick(tab, event) {
  518. this.getCapitalLog(this.orderId, this.activeNames)
  519. },
  520. getCapitalLog(orderId, wallet_type) {
  521. request({
  522. params: {
  523. r: 'cloud-stock/order/commission-and-score-list',
  524. order_id: orderId,
  525. wallet_type: wallet_type,
  526. },
  527. method: 'get',
  528. }).then(e => {
  529. if (e.data.code == 0) {
  530. this.fenRunData = e.data.data.list;
  531. this.user_level = e.data.data.user_level;
  532. } else {
  533. self.$message.error(e.data.msg);
  534. }
  535. }).catch(e => {
  536. console.log(e);
  537. });
  538. },
  539. batchDelivery()
  540. {
  541. this.$navigate({
  542. r: 'cloud-stock/order/batch-delivery'
  543. })
  544. },
  545. clearAreaIds() {
  546. },
  547. getDistrict(level) {
  548. if (level) {
  549. level1 = level;
  550. } else{
  551. level1 = 1;
  552. }
  553. request({
  554. params: {
  555. r: 'common/region/get-district-list',
  556. level: level1
  557. },
  558. }).then(e => {
  559. if (e.data.code == 0) {
  560. this.districtList = e.data.data
  561. }
  562. }).catch(e => {
  563. });
  564. },
  565. addressChange(e) {
  566. this.search.areaIds = this.chooseJqfl(e)
  567. },
  568. chooseJqfl(params) {
  569. let finalArray = [];
  570. if (params.length > 0) {
  571. const uniqueIn = (arr) => (x) => 1 == arr.filter((v) => v == x).length;
  572. const appendLastId = (result, ids) => [...result, ids[ids.length - 1]];
  573. const flatted = params.flat();
  574. const lastIds = params.reduce(appendLastId, []);
  575. finalArray = lastIds.filter(uniqueIn(flatted));
  576. }
  577. return finalArray
  578. },
  579. showEditSellerRemarkDialog(row) {
  580. this.sellerRemarkForm = {
  581. id: row.id,
  582. seller_remark: row.seller_remark,
  583. }
  584. this.sellerRemarkDialogVisible = true
  585. },
  586. editSellerRemark() {
  587. request({
  588. params: {
  589. r: 'cloud-stock/order/modify-seller-remark'
  590. },
  591. data: this.sellerRemarkForm,
  592. method: 'POST',
  593. }).then(e => {
  594. if (e.data.code == 0) {
  595. this.sellerRemarkDialogVisible = false
  596. this.$message.success('编辑成功')
  597. this.loadData()
  598. } else {
  599. this.$message.error(e.data.msg)
  600. }
  601. }).catch(e => {
  602. this.$message.error('系统错误,请稍后再试!')
  603. });
  604. },
  605. showModifyAddressDialog(row) {
  606. this.modifyAddressDialogVisible = true
  607. this.modifyAddressForm = {
  608. id: row.id,
  609. receiver_name: row.name,
  610. mobile: row.mobile,
  611. address: row.address,
  612. region_name: row.region_name,
  613. province: row.province_id,
  614. city: row.city_id,
  615. area: row.district_id,
  616. }
  617. },
  618. modifyAddress(data) {
  619. data.name = data.receiver_name
  620. data.province_id = data.province
  621. data.city_id = data.city
  622. data.district_id = data.area
  623. this.modifyAddressLoading = true
  624. request({
  625. params: {
  626. r: 'cloud-stock/order/modify-address'
  627. },
  628. data: data,
  629. method: 'POST',
  630. }).then(e => {
  631. if (e.data.code == 0) {
  632. this.modifyAddressDialogVisible = false
  633. this.$message.success('编辑成功')
  634. this.loadData()
  635. } else {
  636. this.$message.error(e.data.msg)
  637. }
  638. }).catch(e => {
  639. this.$message.error('系统错误,请稍后再试!')
  640. }).finally(() => {
  641. this.modifyAddressLoading = false
  642. });
  643. },
  644. cancelAgentOrder(id) {
  645. this.$confirm('确认取消自提吗?', '提示', {
  646. confirmButtonText: '确定',
  647. cancelButtonText: '取消',
  648. type: 'warning'
  649. }).then(() => {
  650. request({
  651. params: {
  652. r: 'cloud-stock/order/cancel-agent-order'
  653. },
  654. data: {id},
  655. method: 'POST',
  656. }).then(e => {
  657. if (e.data.code == 0) {
  658. this.$message.success('取消自提成功!')
  659. this.loadData()
  660. } else {
  661. this.$message.error(e.data.msg)
  662. }
  663. }).catch(e => {
  664. this.$message.error('系统错误,请稍后再试!')
  665. })
  666. })
  667. }
  668. }
  669. });
  670. </script>
  671. <style lang="scss">
  672. .el-tabs__header {
  673. font-size: 16px;
  674. }
  675. .table-body {
  676. padding: 20px;
  677. background-color: #fff;
  678. }
  679. /* .table-body .el-button {
  680. padding: 0 !important;
  681. border: 0;
  682. margin: 0 5px;
  683. } */
  684. .input-item {
  685. width: 250px;
  686. margin: 0 0 20px;
  687. display: flex;
  688. align-items: center;
  689. }
  690. .input-item .el-input__inner {
  691. border-right: 0;
  692. }
  693. .input-item .el-input__inner:hover {
  694. border: 1px solid #dcdfe6;
  695. border-right: 0;
  696. outline: 0;
  697. }
  698. .input-item .el-input__inner:focus {
  699. border: 1px solid #dcdfe6;
  700. border-right: 0;
  701. outline: 0;
  702. }
  703. .input-item .el-input-group__append {
  704. background-color: #fff;
  705. border-left: 0;
  706. width: 10%;
  707. padding: 0;
  708. }
  709. .input-item .el-input-group__append .el-button {
  710. padding: 0;
  711. }
  712. .input-item .el-input-group__append .el-button {
  713. margin: 0;
  714. }
  715. .batch {
  716. margin: 0 0 20px;
  717. display: inline-block;
  718. }
  719. /* .batch .el-button {
  720. padding: 9px 15px !important;
  721. } */
  722. .el-table th>.cell{
  723. color: #333;
  724. font-weight: bold;
  725. font-size: 14px;
  726. }
  727. .myTable .el-table__footer-wrapper,.myTable .el-table__header-wrapper{
  728. border-bottom: 1.4px solid #D6D6D6;
  729. }
  730. .title{
  731. font-size: 18px;
  732. font-weight: bold;
  733. display: flex;
  734. align-items: center;
  735. height: 40px;
  736. display: flex;
  737. justify-content: space-between;
  738. }
  739. .column-div {
  740. display: flex;
  741. flex-direction: column;
  742. margin-left: 5px;
  743. justify-content: center;
  744. align-items: flex-start;
  745. }
  746. .column-div span {
  747. text-align: left;
  748. }
  749. .goods .el-table__header-wrapper {
  750. display: none;
  751. }
  752. .goods {
  753. .el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell {
  754. background-color: transparent !important;
  755. }
  756. }
  757. .not-last-bottom:not(:last-child) {
  758. margin-bottom: 10px !important;
  759. }
  760. </style>