index.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. $diyPath = dirname(__DIR__) . '/components';
  4. ComponentHelper::loadComponentView('stock-goods-edit', $diyPath);
  5. ComponentHelper::loadComponentView('give-coupon', $diyPath);
  6. ?>
  7. <div id="app" v-cloak>
  8. <el-card shadow="never" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  9. <div slot="header">
  10. <div>
  11. <span>商品管理</span>
  12. </div>
  13. </div>
  14. <div class="table-body">
  15. <div style="margin-bottom: 20px;">
  16. <el-button type="primary" style="padding: 9px 15px !important;" @click="editClick(0)" size="small">添加商品</el-button>
  17. </div>
  18. <el-table
  19. v-loading="listLoading"
  20. stripe
  21. size="small"
  22. :data="list"
  23. style="width: 100%"
  24. class="listTable">
  25. <el-table-column
  26. prop="goods_id"
  27. label="商品ID"
  28. align="center"
  29. min-width="80">
  30. </el-table-column>
  31. <el-table-column
  32. label="商品名称"
  33. min-width="200">
  34. <template slot-scope="scope">
  35. <div style="display: flex;align-items: center;">
  36. <el-image fit="cover" :src="scope.row.cover_pic" style="width: 40px;height: 40px;display: block;margin-right: 5px;"></el-image>
  37. <div>{{scope.row.goods_name}}</div>
  38. </div>
  39. </template>
  40. </el-table-column>
  41. <el-table-column
  42. align="center"
  43. prop="goods_price"
  44. label="零售价"
  45. min-width="100">
  46. </el-table-column>
  47. <el-table-column
  48. align="center"
  49. min-width="220"
  50. label="代理商拿货价">
  51. <template slot-scope="scope">
  52. <el-table
  53. :data="scope.row.agent_price"
  54. border
  55. style="width: 100%">
  56. <el-table-column
  57. prop="name"
  58. label="等级名称"
  59. align="center">
  60. </el-table-column>
  61. <el-table-column
  62. prop="price"
  63. label="拿货价(元)"
  64. align="center">
  65. </el-table-column>
  66. </el-table>
  67. </template>
  68. </el-table-column>
  69. <el-table-column
  70. min-width="220"
  71. align="center"
  72. label="平级奖">
  73. <template slot-scope="scope">
  74. <el-table
  75. :data="scope.row.equal_level_list"
  76. border
  77. height="360"
  78. style="width: 100%">
  79. <el-table-column
  80. prop="level_name"
  81. label="等级名称"
  82. align="center">
  83. </el-table-column>
  84. <el-table-column
  85. prop="config_value"
  86. label="平级奖(元)"
  87. align="center"><!-- price -->
  88. </el-table-column>
  89. </el-table>
  90. <!-- <el-tag v-if="scope.row.equal_level_list.length == 0" type="info">暂无数据</el-tag> -->
  91. </template>
  92. </el-table-column>
  93. <el-table-column
  94. min-width="320"
  95. align="center"
  96. label="越级奖励">
  97. <template slot-scope="scope">
  98. <!-- <el-tag style="margin: 0 5px 5px 0;" v-for="(item,index) in scope.row.over_level_list" v-if="item.is_use == 1">{{item.name}}:{{item.price}}元</el-tag> -->
  99. <el-table
  100. :data="scope.row.over_level_list"
  101. border
  102. style="width: 100%">
  103. <el-table-column
  104. prop="name"
  105. label="等级名称"
  106. align="center">
  107. </el-table-column>
  108. <el-table-column
  109. prop="price"
  110. label="越一级奖(元)"
  111. align="center">
  112. </el-table-column>
  113. <el-table-column
  114. prop="price2"
  115. label="越二级奖(元)"
  116. align="center">
  117. </el-table>
  118. </template>
  119. </el-table-column>
  120. <el-table-column
  121. min-width="220"
  122. align="center"
  123. label="补货奖">
  124. <template slot-scope="scope">
  125. <el-table
  126. :data="scope.row.fill_level_list"
  127. border
  128. style="width: 100%">
  129. <el-table-column
  130. prop="name"
  131. label="等级名称"
  132. align="center">
  133. </el-table-column>
  134. <el-table-column
  135. prop="price"
  136. label="补货奖(元)"
  137. align="center">
  138. </el-table-column>
  139. </el-table>
  140. </template>
  141. </el-table-column>
  142. <el-table-column
  143. align="center"
  144. label="是否允许向平台补货"
  145. min-width="100">
  146. <template slot-scope="scope">
  147. <el-switch
  148. @change="((val)=>{switchFun(val,scope.row.goods_id)})"
  149. v-model="scope.row.is_allow_fill"
  150. :active-value="1"
  151. :inactive-value="0">
  152. </el-switch>
  153. </template>
  154. </el-table-column>
  155. <el-table-column
  156. label="操作"
  157. align="center"
  158. min-width="150">
  159. <template slot-scope="scope">
  160. <el-button circle size="mini" type="text" @click="couponClick(scope.row.goods_id)">
  161. <el-tooltip class="item" effect="dark" content="补货设置" placement="top">
  162. <img src="resources/img/mall/coupon.png" alt="">
  163. </el-tooltip>
  164. </el-button>
  165. <el-button circle size="mini" type="text" @click="editClick(scope.row.id)">
  166. <el-tooltip class="item" effect="dark" content="编辑" placement="top">
  167. <img src="resources/img/mall/edit.png" alt="">
  168. </el-tooltip>
  169. </el-button>
  170. <el-button circle size="mini" type="text" @click="cloudStockDelete(scope.row, scope.$index)">
  171. <el-tooltip class="item" effect="dark" content="删除" placement="top">
  172. <img src="resources/img/mall/del.png" alt="">
  173. </el-tooltip>
  174. </el-button>
  175. </template>
  176. </el-table-column>
  177. </el-table>
  178. <div style="text-align: right;margin: 20px 0;">
  179. <el-pagination
  180. @current-change="pagination"
  181. background
  182. layout="prev, pager, next"
  183. :page-count="page_count">
  184. </el-pagination>
  185. </div>
  186. </div>
  187. </el-card>
  188. <stock-goods-edit v-model="edit.show" :edit_row="edit" @refresdatafun="getList"></stock-goods-edit>
  189. <give-coupon :visible="give_coupon.show" :goods_id="give_coupon.goods_id" @cancel="give_coupon.show = false" @save="give_coupon.goods_id = 0"></give-coupon>
  190. </div>
  191. <script>
  192. const app = new Vue({
  193. el: '#app',
  194. data() {
  195. return {
  196. edit: {
  197. show: false,
  198. id: 0,
  199. },
  200. give_coupon: {
  201. show: false,
  202. goods_id: 0,
  203. },
  204. list: [],
  205. keyword: '',
  206. listLoading: false,
  207. page: 1,
  208. level: 1,
  209. pageCount: 0,
  210. condition_type_list: {
  211. 1: '下线用户数',
  212. 2: '累计佣金',
  213. 3: '已提现佣金'
  214. },
  215. price_type_list: {
  216. 1: '%',
  217. 2: '元'
  218. },
  219. page_count: 0,
  220. };
  221. },
  222. mounted: function() {
  223. this.getList();
  224. },
  225. methods: {
  226. couponClick(goods_id) {
  227. console.log(2342);
  228. this.give_coupon.show = true;
  229. this.give_coupon.goods_id = goods_id;
  230. },
  231. search() {
  232. this.page = 1;
  233. this.getList();
  234. },
  235. pagination(currentPage) {
  236. let self = this;
  237. self.page = currentPage;
  238. self.getList();
  239. },
  240. getList() {
  241. //console.log('请求列表前的参数page='+this.page);
  242. this.listLoading = true;
  243. request({
  244. params: {
  245. r: 'cloud-stock/goods/index', //'plugin/stock/mall/goods/index',
  246. page: this.page,
  247. limit: 10
  248. },
  249. method: 'get',
  250. }).then(e => {
  251. this.listLoading = false;
  252. //console.log('请求商品列表的结果='+JSON.stringify(e))
  253. if (e.data.code == 0) {
  254. let arr = e.data.data.list;
  255. arr.forEach((item) => {
  256. item.agent_price = item.agent_price.filter((item2) => {
  257. return item2.is_use == 1;
  258. })
  259. /* item.equal_level_list = item.equal_level_list.filter((item2)=>{
  260. return item2.is_use == 1;
  261. }) */
  262. item.fill_level_list = item.fill_level_list.filter((item2) => {
  263. return item2.is_use == 1;
  264. })
  265. item.over_level_list = item.over_level_list.filter((item2) => {
  266. return item2.is_use == 1;
  267. })
  268. if (item.over_level_list_2) {
  269. item.over_level_list_2 = item.over_level_list_2.filter((item2) => {
  270. return item2.is_use == 1;
  271. })
  272. }
  273. })
  274. this.list = arr;
  275. //console.log('list=='+JSON.stringify(this.list))
  276. this.page_count = e.data.data.page_count;
  277. } else {
  278. this.$message.error(e.data.msg);
  279. }
  280. /* self.list = e.data.data.list;
  281. self.pageCount = e.data.data.pagination.page_count; */
  282. }).catch(e => {
  283. this.listLoading = false;
  284. console.log(e);
  285. });
  286. },
  287. switchStatus(row) {
  288. let self = this;
  289. self.listLoading = true;
  290. request({
  291. params: {
  292. r: 'plugin/stock/mall/level/switch-status',
  293. },
  294. method: 'post',
  295. data: {
  296. id: row.id,
  297. }
  298. }).then(e => {
  299. self.listLoading = false;
  300. if (e.data.code === 0) {
  301. self.$message.success(e.data.msg);
  302. } else {
  303. self.$message.error(e.data.msg);
  304. }
  305. self.getList();
  306. }).catch(e => {
  307. console.log(e);
  308. });
  309. },
  310. editClick(id) {
  311. if (id) {
  312. this.edit.id = id;
  313. this.edit.show = true;
  314. this.edit.title = "编辑商品"
  315. if (id == -1) {
  316. this.edit.title = "添加商品"
  317. }
  318. } else {
  319. this.edit.id = id;
  320. this.edit.show = true;
  321. this.edit.title = "添加商品"
  322. }
  323. },
  324. cloudStockDelete(row, index) {
  325. let self = this;
  326. self.$confirm('删除该库存商品, 是否继续?', '提示', {
  327. confirmButtonText: '确定',
  328. cancelButtonText: '取消',
  329. type: 'warning'
  330. }).then(() => {
  331. self.listLoading = true;
  332. request({
  333. params: {
  334. r: 'cloud-stock/goods/delete',
  335. },
  336. method: 'post',
  337. data: {
  338. id: row.id,
  339. }
  340. }).then(e => {
  341. self.listLoading = false;
  342. if (e.data.code === 0) {
  343. self.$message.success(e.data.msg);
  344. self.list.splice(index, 1);
  345. } else {
  346. self.$message.error(e.data.msg);
  347. }
  348. }).catch(e => {
  349. console.log(e);
  350. });
  351. }).catch(() => {
  352. self.$message.info('已取消删除')
  353. });
  354. },
  355. switchFun(e, id) {
  356. this.listLoading = true;
  357. request({
  358. params: {
  359. r: 'cloud-stock/goods/patch', // 库存商品局部更新plugin/cloud_stock/mall/goods/patch
  360. },
  361. method: 'post',
  362. data: {
  363. goods_id: id,
  364. is_allow_fill: e
  365. }
  366. }).then(res => {
  367. this.listLoading = false;
  368. if (res.data.code === 0) {
  369. this.$message.success(res.data.msg);
  370. } else {
  371. this.$message.error(res.data.msg);
  372. }
  373. }).catch(e => {
  374. this.listLoading = false;
  375. console.log(e);
  376. });
  377. }
  378. }
  379. });
  380. </script>
  381. <style>
  382. .table-body {
  383. padding: 20px;
  384. background-color: #fff;
  385. }
  386. .input-item {
  387. display: inline-block;
  388. width: 250px;
  389. margin: 0 0 20px;
  390. }
  391. .input-item .el-input__inner {
  392. border-right: 0;
  393. }
  394. .input-item .el-input__inner:hover {
  395. border: 1px solid #dcdfe6;
  396. border-right: 0;
  397. outline: 0;
  398. }
  399. .input-item .el-input__inner:focus {
  400. border: 1px solid #dcdfe6;
  401. border-right: 0;
  402. outline: 0;
  403. }
  404. .input-item .el-input-group__append {
  405. background-color: #fff;
  406. border-left: 0;
  407. width: 10%;
  408. padding: 0;
  409. }
  410. .input-item .el-input-group__append .el-button {
  411. padding: 0;
  412. }
  413. .input-item .el-input-group__append .el-button {
  414. margin: 0;
  415. }
  416. .table-body .el-button {
  417. padding: 0 !important;
  418. border: 0;
  419. margin: 0 5px;
  420. }
  421. .el-table thead {
  422. font-size: 14px;
  423. color: #333;
  424. }
  425. .listTable>.el-table__footer-wrapper,
  426. .listTable>.el-table__header-wrapper {
  427. border-bottom: 1.4px solid #D6D6D6;
  428. }
  429. </style>