edit.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ComponentHelper::loadComponentView('com-dialog-select-goods', __DIR__ . '/component');
  4. ?>
  5. <div id="app" v-cloak>
  6. <el-card shadow="never" style="border:0" class="box-card" body-style="background-color: #f3f3f3;padding: 10px 0 0;"
  7. v-loading="cardLoading" v-loading="cardLoading">
  8. <div slot="header">
  9. <div flex="cross:center box:first">
  10. <div>编辑</div>
  11. </div>
  12. </div>
  13. <div class="form-body">
  14. <el-form :model="ruleForm" :rules="rules" size="small" ref="ruleForm"
  15. label-width="160px">
  16. <el-form-item label="商品信息:" label-width="160px" prop="goods_id">
  17. <div>
  18. <com-dialog-screen-select :multiple="true" :url="get_can_set_give_goods_list"
  19. @selected="goodsSelect"
  20. title="商品选择">
  21. <el-button type="primary">选择商品</el-button>
  22. </com-dialog-screen-select>
  23. <el-alert style="margin-top: 20px;line-height: 25px;border:1px solid #f6b4f8"
  24. :title="tip"
  25. type="warning">
  26. </el-alert>
  27. </div>
  28. <el-table max-height="800" :data="goods_list" size="small" stripe border
  29. style="min-width: 1200px;margin-top: 20px;">
  30. <el-table-column prop="id" label="规格id" align="center" min-width="80">
  31. </el-table-column>
  32. <el-table-column prop="goods_id" label="商品id" align="center" min-width="80">
  33. </el-table-column>
  34. <el-table-column prop="label_name" label="商品标签" align="center" min-width="80">
  35. </el-table-column>
  36. <el-table-column prop="price" label="价格" align="center" min-width="80">
  37. </el-table-column>
  38. <el-table-column label="商品" min-width="150">
  39. <template slot-scope="scope">
  40. <div style="display: flex;align-items: center;">
  41. <el-image fit="cover" :src="scope.row.cover_pic"
  42. style="width: 40px;height: 40px;display: block;margin-right: 5px;flex-shrink: 0;"></el-image>
  43. <div>
  44. <div>{{scope.row.goods_name}}</div>
  45. </div>
  46. </div>
  47. </template>
  48. </el-table-column>
  49. <el-table-column label="库存" width="80" prop="stock"></el-table-column>
  50. <el-table-column label="最高盈利" width="100" prop="max_income"></el-table-column>
  51. <el-table-column label="最低提货数量" width="120" prop="min_num"></el-table-column>
  52. <el-table-column prop="stock" label="提货数量" align="center" width="180">
  53. <template slot-scope="scope">
  54. <el-input-number type="text" :min="scope.row.min_num"
  55. :max="scope.row.stock" v-model="scope.row.buy_num"
  56. onInput="value=value.replace(/[^\d]/g,'')"></el-input-number>
  57. </template>
  58. </el-table-column>
  59. <el-table-column prop="num" label="操作" align="center" min-width="80" v-if="!ruleForm.id">
  60. <template slot-scope="scope">
  61. <el-button @click="delFun(scope.$index)" type="primary" size="mini">删除</el-button>
  62. </template>
  63. </el-table-column>
  64. </el-table>
  65. </el-form-item>
  66. </el-form>
  67. </div>
  68. <div>
  69. <div flex="dir:center">
  70. <div>
  71. <el-button class="button-item" style="margin-bottom: 15px;" type="primary"
  72. @click="submitForm('ruleForm')" size="small" :loading="btnLoading">保存
  73. </el-button>
  74. </div>
  75. </div>
  76. </div>
  77. </el-card>
  78. </div>
  79. <script src="/resources/js/Sortable.min.js"></script>
  80. <script src="/resources/unpkg/vuedraggable@2.18.1/dist/vuedraggable.umd.min.js"></script>
  81. <script>
  82. const app = new Vue({
  83. el: '#app',
  84. data() {
  85. return {
  86. ruleForm: {
  87. goods_list:[]
  88. },
  89. rules: {
  90. },
  91. communities: [{name: '', isNew: true}],
  92. btnLoading: false,
  93. cardLoading: false,
  94. dialogLoading: false,
  95. goods_list: [],
  96. levels: [],
  97. tip:'您暂无提货券',
  98. get_can_set_give_goods_list: 'happiness/client/goods/search-goods-data',
  99. reward_calculation_list: [ // 赠送计算方式选项
  100. {
  101. value: 1,
  102. label: '商品售价'
  103. },
  104. {
  105. value: 2,
  106. label: '订单实付金额'
  107. }
  108. ],
  109. };
  110. },
  111. mounted: function () {
  112. const id = getQuery('id');
  113. this.loadData(id);
  114. },
  115. methods: {
  116. loadData(id) {
  117. this.loading = true;
  118. request({
  119. params: {
  120. r: 'happiness/client/goods/edit',
  121. id: id,
  122. },
  123. method: 'get',
  124. }).then(e => {
  125. this.loading = false;
  126. if (e.data.code == 0) {
  127. this.tip = e.data.data.tip;
  128. } else {
  129. this.$message.error(e.data.msg);
  130. }
  131. }).catch(e => {
  132. console.log('错误信息为', e)
  133. this.loading = false;
  134. });
  135. },
  136. // 选中商品处理
  137. goodsSelect(goodsList) {
  138. //判断是不是数组
  139. if (!Array.isArray(goodsList)) {
  140. this.$message.error('请选择商品');
  141. return;
  142. }
  143. let self = this
  144. console.log('goodsList', goodsList.length)
  145. goodsList.forEach(function (param) {
  146. //已存在的不再添加
  147. if (!self.goods_list.some(function (item) {
  148. return item.id == param.id;
  149. })) {
  150. self.goods_list.push({
  151. id: param.id,
  152. goods_id: param.goods_id,
  153. stock: param.stock,
  154. goods_name: param.goods_name,
  155. cover_pic: param.cover_pic,
  156. price: param.price,
  157. max_income: param.max_income,
  158. min_num: param.min_num,
  159. buy_num:param.min_num,
  160. label_name: param.label_name,
  161. label_id: param.label_id,
  162. });
  163. }
  164. });
  165. console.log('goodsList', self.goods_list.length)
  166. },
  167. // 删除商品
  168. delFun(index) {
  169. this.goods_list.splice(index, 1)
  170. },
  171. submitForm(formName) {
  172. let self = this;
  173. self.ruleForm.goods_list=[];
  174. if(this.goods_list.length==0)
  175. {
  176. this.$message.error('请选择商品');
  177. return
  178. }
  179. this.goods_list.forEach(function (item) {
  180. let param = {
  181. goods_id: item.goods_id,
  182. stock: item.stock,
  183. buy_num: item.buy_num,
  184. label_id: item.label_id,
  185. attr_id: item.id,
  186. }
  187. self.ruleForm.goods_list.push(param)
  188. });
  189. this.$refs[formName].validate((valid) => {
  190. if (valid) {
  191. self.btnLoading = true;
  192. request({
  193. params: {
  194. r: 'happiness/client/goods/edit',
  195. },
  196. method: 'post',
  197. data: self.ruleForm,
  198. }).then(e => {
  199. self.btnLoading = false;
  200. if (e.data.code == 0) {
  201. navigateTo({
  202. r: 'happiness/client/goods/index',
  203. });
  204. //添加完成之后初始化
  205. self.$message.success('保存成功');
  206. } else {
  207. self.$message.error(e.data.msg);
  208. }
  209. }).catch(e => {
  210. self.btnLoading = false;
  211. console.log(e);
  212. self.$message.error('网络错误');
  213. return false;
  214. });
  215. }
  216. });
  217. }
  218. }
  219. });
  220. </script>
  221. <style>
  222. .form-body {
  223. padding: 20px 0;
  224. background-color: #fff;
  225. margin-bottom: 20px;
  226. padding-right: 40%;
  227. }
  228. .form-button {
  229. margin: 0;
  230. }
  231. /* .el-form-item__content{margin-left:100px !important;} */
  232. .form-button .el-form-item__content {
  233. /* margin-left: 0px !important; */
  234. }
  235. .button-item {
  236. padding: 9px 25px;
  237. }
  238. .radio-box div {
  239. margin-right: 20px;
  240. }
  241. .input-item {
  242. display: inline-block;
  243. width: 250px;
  244. margin: 0;
  245. }
  246. .input-item .el-input__inner {
  247. / / border-right: 0;
  248. }
  249. .input-item .el-input__inner:hover {
  250. border: 1px solid #dcdfe6;
  251. border-right: 0;
  252. outline: 0;
  253. }
  254. .input-item .el-input__inner:focus {
  255. border: 1px solid #dcdfe6;
  256. border-right: 0;
  257. outline: 0;
  258. }
  259. .input-item .el-input-group__append {
  260. background-color: #fff;
  261. border-left: 0;
  262. width: 10%;
  263. padding: 0 10px;
  264. }
  265. .input-item .el-input-group__append .el-button {
  266. padding: 15px;
  267. }
  268. .el-dialog-1 .el-dialog {
  269. min-width: 350px;
  270. }
  271. .dialog-cat-box {
  272. border: 1px solid #E3E3E3;
  273. height: 250px;
  274. -webkit-border-radius: 5px;
  275. -moz-border-radius: 5px;
  276. border-radius: 5px;
  277. width: 100%;
  278. margin-right: 10px;
  279. overflow-y: auto;
  280. }
  281. .el-dialog__body {
  282. padding: 10px 20px;
  283. }
  284. .el-table td,
  285. .el-table th {
  286. padding: 5px 0;
  287. }
  288. .cat-edit-text {
  289. color: #409EFF;
  290. margin-left: 10px;
  291. cursor: pointer;
  292. }
  293. .com-gallery .com-gallery-item {
  294. margin-bottom: 0;
  295. margin-right: 0;
  296. cursor: pointer;
  297. }
  298. .show-example {
  299. cursor: pointer;
  300. color: #409EFF;
  301. }
  302. .text {
  303. cursor: pointer;
  304. color: #419EFB;
  305. }
  306. .pic-url-remark {
  307. font-size: 13px;
  308. color: #c9c9c9;
  309. margin-bottom: 12px;
  310. }
  311. .add-image-btn {
  312. width: 100px;
  313. height: 100px;
  314. color: #419EFB;
  315. border: 1px solid #e2e2e2;
  316. cursor: pointer;
  317. }
  318. .del-btn {
  319. position: absolute;
  320. top: -4%;
  321. right: -4%;
  322. }
  323. .el-select--small {
  324. width: 23%
  325. }
  326. .community_add {
  327. display: flex;
  328. width: 200px
  329. }
  330. .modify-list {
  331. font-size: 20px;
  332. display: flex;
  333. align-items: center;
  334. margin-left: 10px;
  335. }
  336. .el-card__body {
  337. padding-bottom: 25px;
  338. padding-top: 25px
  339. }
  340. </style>