detail.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ComponentHelper::loadComponentView('component/order-shipping', \Yii::$app->basePath.'/modules/mall/views/order');
  4. ?>
  5. <style>
  6. .card-box {
  7. border: none;
  8. }
  9. .marign-b-20 {
  10. margin-bottom: 20px;
  11. }
  12. .step-box {
  13. margin-top: 10px;
  14. padding-top: 10px;
  15. }
  16. .step-inactive {
  17. position: absolute;
  18. top: 50%;
  19. left: 50%;
  20. width: 34px;
  21. height: 34px;
  22. border-radius: 50%;
  23. background-color: #e8e8e8;
  24. transform: translate(-50%, -50%);
  25. }
  26. .step-inside {
  27. position: absolute;
  28. top: 50%;
  29. left: 50%;
  30. width: 25px;
  31. height: 25px;
  32. border-radius: 50%;
  33. background-color: #cccbcb;
  34. transform: translate(-50%, -50%);
  35. text-align: center;
  36. line-height: 24px;
  37. z-index: 9;
  38. color: #fff;
  39. font-size: 12px;
  40. }
  41. .step-active {
  42. background-color: var(--primary, #fb6638);
  43. }
  44. .step-outside {
  45. background-color: transparent;
  46. }
  47. .step-box .el-step__title {
  48. font-size: 14px;
  49. }
  50. .text-item {
  51. padding: 10px 0;
  52. font-size: 12px;
  53. }
  54. .row-card-header {
  55. font-weight: 700;
  56. font-size: 14px;
  57. }
  58. .text-item > span:nth-child(1) {
  59. display: inline-block;
  60. width: 105px;
  61. padding-right: 20px;
  62. text-align: right;
  63. }
  64. .el-row-flex {
  65. display: flex;
  66. flex-flow: row wrap;
  67. }
  68. .el-row-flex .card-box {
  69. height: 100%;
  70. }
  71. .order-goods .el-table th > .cell,
  72. .order-goods .el-table {
  73. font-size: 13px;
  74. }
  75. .package-item {
  76. padding: 10px 0;
  77. font-size: 12px;
  78. }
  79. .package-item > span:nth-child(1) {
  80. display: inline-block;
  81. width: 105px;
  82. padding: 0 20px;
  83. text-align: left;
  84. }
  85. .package-item img {
  86. width: 55px;
  87. height: 55px;
  88. border-radius: 5px;
  89. margin-right: 10px;
  90. }
  91. .range-right {
  92. margin-right: 20px;
  93. }
  94. .com-order-refund-status {
  95. position: absolute;
  96. bottom: 0px;
  97. left: 0px;
  98. height: 20px;
  99. width: 50px;
  100. background-color: #FF7171;
  101. color: #fff;
  102. text-align: center;
  103. border-radius: 0 0 5px 5px;
  104. font-size: 12px;
  105. }
  106. .package .el-tab-pane {
  107. display: flex;
  108. }
  109. .package-item ::-webkit-scrollbar {
  110. width: 5px;
  111. }
  112. .el-timeline {
  113. font-size: 12px;
  114. }
  115. .com-order-count-price{
  116. float: right;
  117. margin-right: 100px;
  118. }
  119. .com-order-count-price .el-form-item{
  120. margin-bottom:0px;
  121. }
  122. </style>
  123. <div id="app" v-cloak>
  124. <el-card shadow="never" style="border: none;" body-style="background-color: #f3f3f3;padding: 10px 0 0;"
  125. v-loading="cardLoading">
  126. <div slot="header">
  127. <span>订单详情</span>
  128. </div>
  129. <el-card class="card-box step-box marign-b-20" shadow="never">
  130. <div slot="header">
  131. <span>订单路径</span>
  132. </div>
  133. <el-steps :active="stepArr.length" align-center>
  134. <el-step v-for="(item,index) in stepArr" :key="index" align-center>
  135. <template slot="icon">
  136. <template v-if="item.agent_user_avatar_url">
  137. <com-image src="item.agent_user_avatar_url"></com-image>
  138. </template>
  139. <template v-else>
  140. <com-image src="/resources/img/common/default-avatar.png"></com-image>
  141. </template>
  142. </template>
  143. <template slot="title">
  144. <div>{{ item.agent_user_level_name }}</div>
  145. </template>
  146. <template slot="description">
  147. <div>{{ item.agent_user_mobile }}</div>
  148. </template>
  149. </el-step>
  150. </el-steps>
  151. </el-card>
  152. <el-card v-if="detailList.length > 0" class="card-box marign-b-20" shadow="never">
  153. <div slot="header" class="clearfix row-card-header">
  154. <span>库存明细</span>
  155. </div>
  156. <el-table
  157. size="small"
  158. :data="detailList"
  159. style="width: 100%"
  160. v-loading="listLoading">
  161. <el-table-column
  162. prop="agent_user_id"
  163. label="代理商用户id"
  164. align="center"
  165. min-width="80"
  166. >
  167. </el-table-column>
  168. <el-table-column
  169. label="代理商"
  170. min-width="150"
  171. >
  172. <template slot-scope="scope">
  173. <div class="table-info-img-text">
  174. <el-image class="table-info-img circle" v-if="scope.row.agent_user_avatar_url" :src="scope.row.agent_user_avatar_url">
  175. <div slot="error" class="image-slot">
  176. <com-image src="/resources/img/common/default-avatar.png"></com-image>
  177. </div>
  178. </el-image>
  179. <div class="table-info-text">
  180. <div style="color:#000;">{{scope.row.agent_user_nickname}}</div>
  181. </div>
  182. </div>
  183. </template>
  184. </el-table-column>
  185. <!-- <el-table-column
  186. label="商品名称"
  187. min-width="150"
  188. >
  189. <template slot-scope="scope">
  190. <div style="display: flex;align-items: center;">
  191. <img v-if="scope.row.goods.cover_pic" :src="scope.row.goods.cover_pic" style="width: 40px;height: 40px;display: block;margin-right: 5px;" />
  192. <div style="text-align: left;line-height: 16px;">{{scope.row.goods.goods_name}}</div>
  193. </div>
  194. </template>
  195. </el-table-column> -->
  196. <el-table-column
  197. prop="num"
  198. label="扣减库存数"
  199. align="center"
  200. min-width="100"
  201. >
  202. <template slot-scope="scope">
  203. -{{scope.row.num}}
  204. </template>
  205. </el-table-column>
  206. <el-table-column
  207. prop="id"
  208. align="center"
  209. label="扣减库存类型"
  210. min-width="100">
  211. <template slot-scope="scope">
  212. <el-tag>{{computedType(scope.row.changes_type)}}</el-tag>
  213. </template>
  214. </el-table-column>
  215. <!-- <el-table-column
  216. prop="order_id"
  217. align="center"
  218. label="订单id"
  219. min-width="80">
  220. </el-table-column> -->
  221. <el-table-column
  222. prop="created_at"
  223. align="center"
  224. label="时间"
  225. min-width="100">
  226. <template slot-scope="scope">
  227. {{formatTime(scope.row.created_at)}}
  228. </template>
  229. </el-table-column>
  230. </el-table>
  231. </el-card>
  232. <el-card v-if="priceList.length > 0" class="card-box marign-b-20" shadow="never">
  233. <div slot="header" class="clearfix row-card-header">
  234. <span>资金明细</span>
  235. </div>
  236. <el-table :data="priceList" stripe style="width: 100%" v-loading="listLoading">
  237. <el-table-column prop="user_id" label="会员ID" min-width="100" align="center"></el-table-column>
  238. <el-table-column label="会员" width="200">
  239. <template slot-scope="scope">
  240. <div class="table-info-img-text">
  241. <el-image class="table-info-img circle" :src="scope.row.avatar_url">
  242. <div slot="error" class="image-slot">
  243. <com-image src="/resources/img/common/default-avatar.png"></com-image>
  244. </div>
  245. </el-image>
  246. <div class="table-info-text">
  247. <div v-if="scope.row.nickname">{{scope.row.nickname}}</div>
  248. <div>{{scope.row.mobile}}</div>
  249. </div>
  250. </div>
  251. </template>
  252. </el-table-column>
  253. <!-- <el-table-column prop="orderDetail.order.order_no" label="订单号" min-width="200" align="center"></el-table-column> -->
  254. <el-table-column prop="source_text" label="佣金类型" min-width="200" align="center">
  255. <template slot-scope="scope">
  256. <div v-if="scope.row.source_text">{{scope.row.source_text}}</div>
  257. <div v-else-if="scope.row.source">{{scope.row.source}}</div>
  258. <div v-else>--</div>
  259. </template>
  260. </el-table-column>
  261. <el-table-column label="结算金额" min-width="150" align="center">
  262. <template slot-scope="scope">
  263. <div style="font-size: 18px;color: #68CF3D" v-if="scope.row.change_type == 'add'">+{{scope.row.change_num}}</div>
  264. <div style="font-size: 18px;color: #F6AA5A" v-if="scope.row.change_type == 'sub'">-{{scope.row.change_num}}</div>
  265. </template>
  266. </el-table-column>
  267. <!-- <el-table-column prop="current_num" label="变动前佣金" min-width="150" align="center"></el-table-column>
  268. <el-table-column prop="current_num" label="变动后佣金" min-width="150" align="center">
  269. <template slot-scope="scope">
  270. <div v-if="scope.row.change_type == 'add'">{{Number((scope.row.current_num + scope.row.change_num)).toFixed(2)}}</div>
  271. <div v-if="scope.row.change_type == 'sub'">{{Number((scope.row.current_num - scope.row.change_num)).toFixed(2)}}</div>
  272. </template>
  273. </el-table-column> -->
  274. <el-table-column prop="desc" label="说明" min-width="300" align="center"></el-table-column>
  275. <el-table-column prop="scope" min-width="180" label="创建时间" align="center">
  276. <template slot-scope="scope">
  277. {{scope.row.created_at}}
  278. </template>
  279. </el-table-column>
  280. <!-- <el-table-column label="操作" min-width="110" align="center">
  281. <template slot-scope="scope">
  282. <el-button v-if="scope.status == '1'" type="primary" @click="settlement(scope.row.id)" size="mini">结算<i class="el-icon-caret-right"></i></el-button>
  283. </template>
  284. </el-table-column> -->
  285. </el-table>
  286. </el-card>
  287. </el-card>
  288. </div>
  289. <script>
  290. const app = new Vue({
  291. el: '#app',
  292. data() {
  293. return {
  294. id: 0,
  295. user_id:0,
  296. order_type:1,
  297. count: 6,
  298. isShowChangeShipping: false,
  299. changeShippingLoading: false,
  300. remarkLoading: false,
  301. isShowRemark: false,
  302. shipping_form: {},
  303. remark_form: {
  304. seller_remark: null,
  305. },
  306. activePackage: '0',
  307. cardLoading: false,
  308. logLoading: false,
  309. detailList:[],
  310. stepArr:[],
  311. listLoading:false,
  312. priceList:[],
  313. };
  314. },
  315. created() {
  316. this.id = getQuery('id');
  317. this.user_id = getQuery('user_id');
  318. this.order_type = getQuery('order_type');
  319. },
  320. mounted() {
  321. // this.getDetail();
  322. this.getAgentDetail();
  323. // this.getStockList();
  324. // this.getPriceList();
  325. },
  326. methods: {
  327. load() {
  328. // this.count += 2
  329. },
  330. getAgentDetail() {
  331. let self = this;
  332. self.cardLoading = true;
  333. request({
  334. params: {
  335. r: 'cloud-stock-two/order/detail',
  336. id: self.id,
  337. type:self.order_type,
  338. },
  339. method: 'get',
  340. }).then(e => {
  341. self.cardLoading = false;
  342. if (e.data.code == 0) {
  343. console.log(e.data.data);
  344. self.stepArr = e.data.data.step_arr;
  345. self.detailList = e.data.data.detail_list;
  346. self.priceList = e.data.data.capital_log;
  347. } else {
  348. self.$message.error(e.data.msg);
  349. }
  350. }).catch(e => {
  351. console.log(e);
  352. });
  353. },
  354. formatTime(timeStamp) {
  355. var date = new Date();
  356. date.setTime(timeStamp * 1000);
  357. var y = date.getFullYear();
  358. var m = date.getMonth() + 1;
  359. m = m < 10 ? ('0' + m) : m;
  360. var d = date.getDate();
  361. d = d < 10 ? ('0' + d) : d;
  362. var h = date.getHours();
  363. h = h < 10 ? ('0' + h) : h;
  364. var minute = date.getMinutes();
  365. var second = date.getSeconds();
  366. minute = minute < 10 ? ('0' + minute) : minute;
  367. second = second < 10 ? ('0' + second) : second;
  368. return y + '-' + m + '-' + d +' '+ h + ':' + minute + ':' + second;
  369. },
  370. computedType(type){//200会员买货;201给下级配货;202下级向自己补货;203自提货到线下;204系统扣减;
  371. if(type == 200){
  372. return "会员买货"
  373. }else if(type == 201){
  374. return "给下级配货"
  375. }else if(type == 202){
  376. return "下级向自己补货"
  377. }else if(type == 203){
  378. return "自提货到线下"
  379. }else if(type == 204){
  380. return "系统扣减"
  381. }
  382. if(type == 100){
  383. return "向上级补货"
  384. }else if(type == 101){
  385. return "上级给自己配货"
  386. }else if(type == 102){
  387. return "退货退库存"
  388. }else if(type == 103){
  389. return "系统添加"
  390. }else if(type == 104){
  391. return "平台补货赠送"
  392. }else if(type == 105){
  393. return "购买礼包赠送"
  394. }
  395. },
  396. computedType2(type){
  397. if(type == 100){
  398. return "向上级补货"
  399. }else if(type == 101){
  400. return "上级给自己配货"
  401. }else if(type == 102){
  402. return "退货退库存"
  403. }else if(type == 103){
  404. return "系统添加"
  405. }else if(type == 104){
  406. return "平台补货赠送"
  407. }else if(type == 105){
  408. return "购买礼包赠送"
  409. }
  410. if(type == 200){
  411. return "会员买货"
  412. }else if(type == 201){
  413. return "给下级配货"
  414. }else if(type == 202){
  415. return "下级向自己补货"
  416. }else if(type == 203){
  417. return "自提货到线下"
  418. }else if(type == 204){
  419. return "系统扣减"
  420. }
  421. },
  422. getStockList() {
  423. let self = this;
  424. self.listLoading = true;
  425. request({
  426. params: {
  427. r: 'cloud-stock-two/default/stock-log',//plugin/cloud_stock/mall/stock-log/get-deduction-list扣减库存明细列表
  428. page:self.page,
  429. limit: 99,
  430. log_type: 'sub',
  431. order_id:self.id,
  432. order_type:self.order_type,
  433. },
  434. method: 'get',
  435. }).then(e => {
  436. //console.log('扣减库存明细列表='+JSON.stringify(e))
  437. self.listLoading = false;
  438. if(e.data.code == 0){
  439. self.detailList = e.data.data.list;
  440. }
  441. }).catch(e => {
  442. console.log(e);
  443. });
  444. },
  445. getPriceList() {
  446. let params = {
  447. r: 'cloud-stock-two/order/price-log',
  448. page: 1,
  449. user_id: this.user_id,
  450. order_type:this.order_type,
  451. };
  452. request({
  453. params,
  454. }).then(e => {
  455. if (e.data.code === 0) {
  456. this.priceList = e.data.data.list;
  457. } else {
  458. if(e.data.msg == 'User Id必须是整数。'){
  459. e.data.msg = '会员id必须是整数';
  460. }
  461. this.$message.error(e.data.msg);
  462. }
  463. this.listLoading = false;
  464. }).catch(e => {
  465. this.listLoading = false;
  466. });
  467. this.listLoading = true;
  468. },
  469. }
  470. });
  471. </script>