invitation-edit.blade.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. @extends('layouts.base')
  2. @section('title', '帖子详情')
  3. @section('content')
  4. <link rel="stylesheet" type="text/css" href="{{static_url('yunshop/goods/vue-goods1.css')}}"/>
  5. <link rel="stylesheet" href="{{static_url('css/public-number.css')}}">
  6. <style>
  7. .el-table::before {
  8. height: 0px !important;
  9. }
  10. th {border-bottom: 1px solid #EBEEF5 !important;}
  11. .dialog-cover{z-index:2001}
  12. .dialog-content{z-index:2002}
  13. .upload-boxed.post_img-upload {
  14. line-height: 150px;
  15. text-align: center;
  16. background:#f5f5f5;
  17. cursor: pointer;
  18. }
  19. .upload-boxed.post_img-upload i {
  20. font-size:40px;
  21. }
  22. .post_img-list {
  23. display:inline-flex;
  24. column-gap:10px;
  25. align-items: center;
  26. vertical-align: top;
  27. }
  28. .post_img-item {
  29. position:relative;
  30. }
  31. .post_img-item i {
  32. position: absolute;
  33. right:-4px;
  34. top:-4px;
  35. padding:4px;
  36. color:white;
  37. cursor: pointer;
  38. background-color:rgba(0,0,0,0.8);
  39. border-radius:50%;
  40. }
  41. </style>
  42. <div class="all">
  43. <div id="app" v-cloak>
  44. <el-form ref="form" :model="form" :rules="rules" label-width="15%">
  45. <div class="vue-main">
  46. <div class="vue-main-title">
  47. <div class="vue-main-title-left"></div>
  48. <div class="vue-main-title-content">查看详情</div>
  49. </div>
  50. <div class="vue-main-form">
  51. <el-form-item label="发布会员" prop="">
  52. <div style="display:flex">
  53. <img :src="form.avatar" alt="" style="width:50px;height:50px;margin-right:10px">
  54. <div>[[form.nickname]]</div>
  55. </div>
  56. </el-form-item>
  57. <el-form-item label="发布时间" prop="">
  58. <div>[[form.created_at]]</div>
  59. </el-form-item>
  60. <el-form-item label="帖子标题" prop="title">
  61. <el-input v-model="form.title" style="width:70%;"></el-input>
  62. </el-form-item>
  63. <el-form-item label="帖子内容" prop="content">
  64. <el-input type="textarea" rows="5" v-model="form.content" style="width:70%;"></el-input>
  65. </el-form-item>
  66. <!-- <el-form-item label="帖子图片" prop="alias">
  67. <div class="upload-boxed-list">
  68. <div class="upload-boxed-list-a" v-for="(item,index) in form.tomedia_img" :key="index">
  69. <img :src="item" alt="" style="width:150px;height:150px;border-radius: 5px;">
  70. <i class="el-icon-close" @click="clearImg('img','list',index)" title="点击清除图片"></i>
  71. </div>
  72. <div class="upload-box" @click="openUpload('img',1,'more')">
  73. <i class="el-icon-plus" style="font-size:32px"></i>
  74. </div>
  75. </div>
  76. </el-form-item> -->
  77. <el-form-item label="帖子图片" prop="tomedia_img">
  78. <!-- <div class="upload-box" @click="openUpload('img',1,'more')" v-if="!form.tomedia_img">
  79. <i class="el-icon-plus" style="font-size:32px"></i>
  80. </div> -->
  81. <div @click="openUpload('img',1,'more')" class="upload-boxed post_img-upload" style="display:inline-block;" >
  82. <i class="el-icon-upload2"></i>
  83. <div class="upload-boxed-text">点击上传</div>
  84. </div>
  85. <div class="post_img-list">
  86. <div class="post_img-item" v-for="(imgItem,itemIndex) in form.tomedia_img" :key="imgItem">
  87. <i class="el-icon-close" @click="removePostImage(itemIndex)" title="点击清除图片"></i>
  88. <img :src="imgItem" style="width:150px;height:150px;border-radius: 5px;cursor: pointer;" >
  89. </div>
  90. </div>
  91. </el-form-item>
  92. <el-form-item label="帖子商品" prop="goods_id">
  93. <div class="upload-box" @click="openGoods('goods_id')" v-if="!form.goods_id">
  94. <div>
  95. <i class="el-icon-plus" style="font-size:32px"></i>
  96. </div>
  97. <div>选择商品</div>
  98. </div>
  99. <div @click="openGoods('goods_id')" class="upload-boxed" v-if="form.goods_id" style="margin-bottom:36px">
  100. <img :src="choosed_goods.thumb" alt="" style="width:150px;height:150px;border-radius: 5px;cursor: pointer;"></img>
  101. <div class="upload-boxed-text">重新选择</div>
  102. <div style="position: absolute;top: -3px;right: -3px;background: #333;line-height: 15px;color: #fff;border-radius: 50%;width: 14px;">
  103. <i class="el-icon-close" @click.stop="clearGoods('goods_id')" title="点击清除商品"></i>
  104. </div>
  105. <div style="line-height: 18px;font-weight:500;color:#333;text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;line-clamp: 2;-webkit-box-orient: vertical;">【id:[[choosed_goods.id]]】[[choosed_goods.title]]</div>
  106. </div>
  107. </el-form-item>
  108. <el-form-item label="帖子门店" prop="goods_id">
  109. <div class="upload-box" @click="openStore('store_id')" v-if="!form.store_id">
  110. <div>
  111. <i class="el-icon-plus" style="font-size:32px"></i>
  112. </div>
  113. <div>选择门店</div>
  114. </div>
  115. <div @click="openStore('store_id')" class="upload-boxed" v-if="form.store_id" style="margin-bottom:36px">
  116. <el-image :src="choosed_store.thumb" alt="" style="width:150px;height:150px;border-radius: 5px;cursor: pointer;"></el-image>
  117. <div class="upload-boxed-text">重新选择</div>
  118. <div style="position: absolute;top: -3px;right: -3px;background: #333;line-height: 15px;color: #fff;border-radius: 50%;width: 14px;">
  119. <i class="el-icon-close" @click.stop="clearStore('store_id')" title="点击清除门店"></i>
  120. </div>
  121. <div style="line-height: 18px;font-weight:500;color:#333;text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;line-clamp: 2;-webkit-box-orient: vertical;">【id:[[choosed_store.id]]】[[choosed_store.store_name]]</div>
  122. </div>
  123. </el-form-item>
  124. </div>
  125. </div>
  126. </el-form>
  127. <!--弹框商品-->
  128. <el-dialog :visible.sync="goods_show" width="60%" center title="选择商品">
  129. <div>
  130. <div>
  131. <el-input v-model="keyword" placeholder="商品标题" style="width:300px"></el-input>
  132. <el-button type="primary" @click="searchGoods(1)">搜索</el-button>
  133. </div>
  134. <el-table :data="goods_list" style="width: 100%;height:500px;overflow:auto" id="goods-list">
  135. <el-table-column label="ID" prop="id" align="center" width="150px">
  136. <template slot-scope="scope">
  137. <el-radio v-model="choosed_goods_id" :label="scope.row.id">&nbsp;</el-radio>
  138. </template>
  139. </el-table-column>
  140. <el-table-column label="商品ID" prop="id" align="center" width="150px"></el-table-column>
  141. <el-table-column label="商品">
  142. <template slot-scope="scope">
  143. <div style="display:flex;align-items: center">
  144. <div style="margin-right:10px">
  145. <el-image :src="scope.row.thumb" style="width:50px;height:50px"></el-image>
  146. </div>
  147. <div style="flex:1">
  148. <div style="color:#333;font-weight:500">[[scope.row.title]]</div>
  149. </div>
  150. </div>
  151. </template>
  152. </el-table-column>
  153. </el-table>
  154. </div>
  155. <span slot="footer" class="dialog-footer">
  156. <el-button @click="goods_show = false">取 消</el-button>
  157. <el-button type="primary" @click="sureGoods">确 定 </el-button>
  158. </span>
  159. </el-dialog>
  160. <!--弹框门店-->
  161. <el-dialog :visible.sync="store_show" width="60%" center title="选择门店">
  162. <div>
  163. <div>
  164. <el-input v-model="keyword" placeholder="门店" style="width:300px"></el-input>
  165. <el-button type="primary" @click="searchStore(1)">搜索</el-button>
  166. </div>
  167. <el-table :data="store_list" style="width: 100%;height:500px;overflow:auto" id="store-list">
  168. <el-table-column label="选择" prop="id" align="center" width="150px">
  169. <template slot-scope="scope">
  170. <el-radio v-model="choosed_store_id" :label="scope.row.id">&nbsp;</el-radio>
  171. </template>
  172. </el-table-column>
  173. <el-table-column label="门店ID" prop="id" align="center" width="150px"></el-table-column>
  174. <el-table-column label="门店">
  175. <template slot-scope="scope">
  176. <div style="display:flex;align-items: center">
  177. <div style="margin-right:10px">
  178. <el-image :src="scope.row.thumb" style="width:50px;height:50px"></el-image>
  179. </div>
  180. <div style="flex:1">
  181. <div style="color:#333;font-weight:500">[[scope.row.store_name]]</div>
  182. </div>
  183. </div>
  184. </template>
  185. </el-table-column>
  186. </el-table>
  187. </div>
  188. <span slot="footer" class="dialog-footer">
  189. <el-button @click="store_show = false">取 消</el-button>
  190. <el-button type="primary" @click="sureStore">确 定 </el-button>
  191. </span>
  192. </el-dialog>
  193. <!-- 分页 -->
  194. <div class="vue-page">
  195. <div class="vue-center">
  196. <el-button type="primary" @click="submitForm('form')">提交</el-button>
  197. <el-button @click="goBack">返回</el-button>
  198. </div>
  199. </div>
  200. <upload-multimedia-img :upload-show="uploadShow" :type="type" :name="chooseImgName" :sel-Num="selNum" @replace="changeProp" @sure="sureImg"></upload-multimedia-img>
  201. </div>
  202. </div>
  203. @include('public.admin.uploadMultimediaImg')
  204. <script>
  205. let data = {!! json_encode($data) !!}
  206. console.log(data)
  207. var app = new Vue({
  208. el:"#app",
  209. delimiters: ['[[', ']]'],
  210. name: 'test',
  211. data() {
  212. return{
  213. id:0,
  214. type:'',
  215. category_list:data.cat,
  216. form:{
  217. ...data
  218. },
  219. uploadShow:false,
  220. chooseImgName:'',
  221. submit_url:'',
  222. showVisible:false,
  223. goods_show:false,
  224. goods_list:[],
  225. keyword:'',
  226. choosed_goods:{},
  227. choosed_goods_id:'',
  228. goods_total:1,
  229. goods_current_page:1,
  230. goods_per_page:1,
  231. store_show:false,
  232. store_list:[],
  233. keyword:'',
  234. choosed_store:{},
  235. choosed_store_id:'',
  236. store_total:1,
  237. store_current_page:1,
  238. store_per_page:1,
  239. loading: false,
  240. uploadImg1:'',
  241. selNum:'',
  242. rules:{
  243. // name:{ required: true, message: '请输入轮播图标题'},
  244. },
  245. }
  246. },
  247. created() {
  248. },
  249. mounted() {
  250. this.id = this.getParam("invitation_id");
  251. this.submit_url = `{!! yzWebFullUrl('plugin.circle.admin.invitation.editInvitation') !!}`
  252. this.choosed_goods = this.form.goods_id?this.form.goods[0]:{}
  253. this.choosed_store = this.form.store?this.form.store[0]:{};
  254. this.form.store_id = this.form.store?this.form.store[0].id:''
  255. },
  256. methods: {
  257. removePostImage(itemIndex){
  258. this.form.img.splice(itemIndex,1);
  259. this.form['tomedia_img'].splice(itemIndex,1);
  260. },
  261. getParam(name) {
  262. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  263. var r = window.location.search.substr(1).match(reg);
  264. if (r != null) return unescape(r[2]);
  265. return null;
  266. },
  267. submitForm(formName) {
  268. let that = this;
  269. let json = {
  270. invitation_id:this.id,
  271. goods_id:this.form.goods_id,
  272. store:this.form.store_id,
  273. title:this.form.title,
  274. content:this.form.content,
  275. img:this.form.img,
  276. };
  277. this.$refs[formName].validate((valid) => {
  278. if (valid) {
  279. let loading = this.$loading({target:document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  280. this.$http.post(this.submit_url,json).then(response => {
  281. if (response.data.result) {
  282. this.$message({type: 'success',message: '操作成功!'});
  283. this.goBack();
  284. } else {
  285. this.$message({message: response.data.msg,type: 'error'});
  286. }
  287. loading.close();
  288. },response => {
  289. loading.close();
  290. });
  291. }
  292. else {
  293. console.log('error submit!!');
  294. return false;
  295. }
  296. });
  297. },
  298. goBack() {
  299. history.go(-1)
  300. },
  301. openUpload(str,type,sel) {
  302. this.chooseImgName = str;
  303. this.uploadShow = true;
  304. this.type = type//1图片类型
  305. this.selNum = sel
  306. },
  307. changeProp(val) {
  308. if(val == true) {
  309. this.uploadShow = false;
  310. }
  311. else {
  312. this.uploadShow = true;
  313. }
  314. },
  315. sureImg(name,uploadShow,fileList) {
  316. if(fileList.length <= 0) {
  317. return
  318. }
  319. this.form[name] = [];
  320. this.form['tomedia_'+name]=[];
  321. fileList.forEach(item=>{
  322. this.form[name].push(item.attachment);
  323. this.form['tomedia_'+name].push(item.url);
  324. })
  325. },
  326. clearImg(str,type,index) {
  327. this.form[str] = "";
  328. this.form['tomedia_'+str] = "";
  329. this.$forceUpdate();
  330. },
  331. openGoods() {
  332. this.goods_show = true;
  333. this.choosed_goods_id = this.form.goods_id;
  334. },
  335. changeGoods(val,val1) {
  336. console.log(val,val1)
  337. },
  338. searchGoods() {
  339. let loading = this.$loading({target:document.querySelector("#goods-list"),background: 'rgba(0, 0, 0, 0)'});
  340. this.$http.post("{!! yzWebFullUrl('goods.goods.get-search-goods-json') !!}",{keyword:this.keyword}).then(response => {
  341. if(response.data.result == 1) {
  342. if (response.data.result) {
  343. this.goods_list = response.data.data.goods.data;
  344. this.goods_total = response.data.data.goods.total;
  345. this.goods_current_page = response.data.data.goods.current_page;
  346. this.goods_per_page = response.data.data.goods.per_page;
  347. this.goods_list.forEach((item,index) => {
  348. if(item.title) {
  349. item.title = this.escapeHTML(item.title);
  350. }
  351. });
  352. } else {
  353. this.$message({message: response.data.msg,type: 'error'});
  354. }
  355. }
  356. else {
  357. this.$message.error(response.data.msg)
  358. }
  359. loading.close();
  360. }, response => {
  361. console.log(response);
  362. loading.close();
  363. });
  364. },
  365. sureGoods() {
  366. this.form.goods_id = this.choosed_goods_id;
  367. this.choosed_goods = {};
  368. let obj = this.goods_list.find((item,index) => {
  369. return item.id == this.choosed_goods_id;
  370. })
  371. this.choosed_goods = obj;
  372. console.log(this.choosed_goods);
  373. this.goods_show = false;
  374. },
  375. clearGoods() {
  376. if(this.id) {
  377. this.$message.error('不支持修改商品')
  378. return;
  379. }
  380. this.choosed_goods = {}
  381. this.form.goods_id = '';
  382. },
  383. openStore() {
  384. this.store_show = true;
  385. this.choosed_store_id = this.form.store_id;
  386. },
  387. searchStore() {
  388. let loading = this.$loading({target:document.querySelector("#store-list"),background: 'rgba(0, 0, 0, 0)'});
  389. this.$http.post("{!! yzWebFullUrl('plugin.circle.admin.invitation.searchStore') !!}",{keyword:this.keyword}).then(response => {
  390. if(response.data.result == 1) {
  391. if (response.data.result) {
  392. this.store_list = response.data.data.data;
  393. this.store_total = response.data.data.total;
  394. this.store_current_page = response.data.data.current_page;
  395. this.store_per_page = response.data.data.per_page;
  396. } else {
  397. this.$message({message: response.data.msg,type: 'error'});
  398. }
  399. }
  400. else {
  401. this.$message.error(response.data.msg)
  402. }
  403. loading.close();
  404. }, response => {
  405. console.log(response);
  406. loading.close();
  407. });
  408. },
  409. sureStore() {
  410. this.form.store_id = this.choosed_store_id;
  411. this.choosed_store = {};
  412. let obj = this.store_list.find((item,index) => {
  413. return item.id == this.choosed_store_id;
  414. })
  415. this.choosed_store = obj;
  416. this.store_show = false;
  417. },
  418. clearStore() {
  419. this.choosed_store = {}
  420. this.form.store_id = '';
  421. },
  422. // 字符转义
  423. escapeHTML(a) {
  424. a = "" + a;
  425. return a.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, "\"").replace(/&apos;/g, "'");;
  426. },
  427. },
  428. })
  429. </script>
  430. @endsection