message-edit.blade.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. @extends('layouts.base')
  2. @section('title', '新建消息')
  3. @section('content')
  4. <link href="{{ static_url('yunshop/element-ui/2.10.1/css/index.css') }}" rel="stylesheet">
  5. <link rel="stylesheet" type="text/css" href="{{static_url('yunshop/goods/vue-goods1.css')}}"/>
  6. <link rel="stylesheet" href="{{static_url('css/public-number.css')}}">
  7. <style>
  8. .vue-main-title-content a{color:#333}
  9. .vue-main-title-content a:hover{color:#29ba9c;}
  10. .steps{
  11. margin-left:10px;
  12. margin-bottom:20px;
  13. margin-right:10px;
  14. background-color:#fff;
  15. height: 64px;
  16. border-radius: 10px;
  17. display:flex;
  18. align-items:center;
  19. justify-content:center;
  20. }
  21. .active{
  22. color: #29ba9c;
  23. }
  24. .add_meb textarea{
  25. height:100%;
  26. }
  27. .dialog-cover{
  28. z-index:1000!important;
  29. }
  30. </style>
  31. <div class="all">
  32. <div id="app" v-cloak>
  33. <div class="steps">
  34. <div style="width:347px;display:flex;justify-content:space-between;">
  35. <div class="active"><i class="el-icon-setting" style="margin-right:10px;"></i><span>内容设置</span></div>
  36. <div style="font-size:24px;color:#c8cede;">></div>
  37. <div :class="[active==2?'active':'']"><i class="el-icon-s-promotion" style="margin-right:10px;"></i><span>发送内容</span></div>
  38. </div>
  39. </div>
  40. <div class="vue-main">
  41. <div class="vue-main-form" v-if="active==1">
  42. <el-form ref="form" :model="form" label-width="15%">
  43. <el-form-item label="标题" prop="title">
  44. <el-input v-model="form.title" style="width:70%;"></el-input>
  45. </el-form-item>
  46. <el-form-item label="幻灯片图片" prop="head_img_url">
  47. <div class="upload-box" @click="openUpload('msg_img')" v-if="!form.msg_img_url">
  48. <i class="el-icon-plus" style="font-size:32px"></i>
  49. </div>
  50. <div @click="openUpload('msg_img')" class="upload-boxed" v-if="form.msg_img_url" style="height:150px;">
  51. <img :src="form.msg_img_url" alt="" style="width:150px;height:150px;border-radius: 5px;cursor: pointer;">
  52. <div class="upload-boxed-text">点击重新上传</div>
  53. </div>
  54. <div class="tip">建议尺寸:640 * 350 , 请将所有幻灯片图片尺寸保持一致</div>
  55. </el-form-item>
  56. <el-form-item label="描述" prop="desc">
  57. <el-input v-model="form.desc" style="width:70%;" ></el-input>
  58. </el-form-item>
  59. <el-form-item label="详情" prop="explain">
  60. <tinymceee v-model="form.content" style="width:70%"></tinymceee>
  61. </el-form-item>
  62. <el-form-item label="链接" prop="url">
  63. <el-input v-model="form.url" style="width:70%;" placeholder=" 请选择链接"></el-input>
  64. <el-button @click="show=true" type="primary" style="margin-left:10px;">选择链接</el-button>
  65. </el-form-item>
  66. <el-form-item label="小程序链接" prop="mini_url">
  67. <el-input v-model="form.mini_url" style="width:70%;" placeholder=" 请选择链接"></el-input>
  68. <el-button @click="pro=true" type="primary" style="margin-left:10px;">选择小程序链接</el-button>
  69. </el-form-item>
  70. <el-form-item label="类型" prop="type_id">
  71. <el-select v-model="form.type_id" style="width:70%;" placeholder="请选择类型" >
  72. <!-- <el-option label="无" value=""></el-option> -->
  73. <el-option v-for="(item,index) in msgType" :key="index" :label="item.name" :value="item.id"></el-option>
  74. </el-select>
  75. </el-form-item>
  76. </el-form>
  77. </div>
  78. <div>
  79. <div class="vue-main-form" v-if="active==2">
  80. <el-form ref="form" :model="form" label-width="15%">
  81. <el-form-item label="发送对象" >
  82. <el-radio-group v-model="send_obj" style="margin-top:4px;">
  83. <el-radio v-for="(item,index) in sendObj" :label="item.id">[[item.name]]</el-radio>
  84. {{--<el-radio label="0">全部会员</el-radio>--}}
  85. {{--<el-radio label="1">指定会员</el-radio>--}}
  86. {{--<el-radio label="2">会员等级</el-radio>--}}
  87. {{--<el-radio label="3">推客</el-radio>--}}
  88. {{--<el-radio label="4">经销商</el-radio>--}}
  89. {{--<el-radio label="5">门店店长/店员</el-radio>--}}
  90. {{--<el-radio label="6">酒店店长/店员</el-radio>--}}
  91. {{--<el-radio label="7">供应商</el-radio>--}}
  92. </el-radio-group>
  93. </el-form-item>
  94. <el-form-item label="会员ID" v-if="send_obj=='1'">
  95. <el-input v-model="member_str" placeholder="请用半角逗号隔开会员ID, 比如 1,2,3,注意不能有空格" type="textarea" style="height:200px;" class="add_meb"></el-input>
  96. </el-form-item>
  97. <el-form-item label="会员等级" v-if="send_obj=='2'">
  98. <template>
  99. <el-checkbox-group v-model="member_check" style="margin-top:4px;">
  100. <template v-for="(item,index,key) in member_arr">
  101. <el-checkbox :label="item.id">[[item.level_name]]</el-checkbox>
  102. </template>
  103. </el-checkbox-group>
  104. </template>
  105. </el-form-item>
  106. <el-form-item label="推客等级" v-if="send_obj=='3'">
  107. <template>
  108. <el-checkbox-group v-model="pub_check" style="margin-top:4px;">
  109. <template v-for="(item,index,key) in pub_arr">
  110. <el-checkbox :label="item.id">[[item.name]]</el-checkbox>
  111. </template>
  112. </el-checkbox-group>
  113. </template>
  114. </el-form-item>
  115. <el-form-item label="经销商等级" v-if="send_obj=='4'">
  116. <template>
  117. <el-checkbox-group v-model="sale_check" style="margin-top:4px;">
  118. <template v-for="(item,index,key) in sale_arr">
  119. <el-checkbox :label="item.id">[[item.level_name]]</el-checkbox>
  120. </template>
  121. </el-checkbox-group>
  122. </template>
  123. </el-form-item>
  124. </el-form>
  125. </div>
  126. </div>
  127. </div>
  128. <!-- 分页 -->
  129. <div class="vue-page" v-if="active==1">
  130. <div class="vue-center">
  131. <el-button type="primary" @click="next">下一步</el-button>
  132. <el-button @click="goBack">返回</el-button>
  133. </div>
  134. </div>
  135. <div class="vue-page" v-if="active==2">
  136. <div class="vue-center">
  137. <el-button type="primary" @click="submit()">发送</el-button>
  138. <el-button @click="toLast">上一步</el-button>
  139. </div>
  140. </div>
  141. <upload-img :upload-show="uploadShow" :name="chooseImgName" @replace="changeProp" @sure="sureImg"></upload-img>
  142. <pop :show="show" @replace="changeProp1" @add="parHref"></pop>
  143. <program :pro="pro" @replacepro="changeprogram" @addpro="parpro"></program>
  144. <!--end-->
  145. </div>
  146. </div>
  147. <script src="{{resource_get('static/yunshop/tinymce4.7.5/tinymce.min.js')}}"></script>
  148. @include('public.admin.uploadImg')
  149. @include('public.admin.tinymceee')
  150. @include('public.admin.pop')
  151. @include('public.admin.program')
  152. <script>
  153. let data = {!! json_encode($data)?:'{}' !!};
  154. let sendObj = {!! json_encode($sendObj)?:'{}' !!};
  155. console.log(data)
  156. var app = new Vue({
  157. el:"#app",
  158. delimiters: ['[[', ']]'],
  159. name: 'test',
  160. data() {
  161. return{
  162. id:'',
  163. member_arr:[],
  164. pub_arr:[],
  165. sale_arr:[],
  166. member_check:String(data.send_obj)=='2'?data.send_data:[],
  167. pub_check:String(data.send_obj)=='3'?data.send_data:[],
  168. sale_check:String(data.send_obj)=='4'?data.send_data:[],
  169. member_str:String(data.send_obj)=='1'?data.send_data:'',
  170. active:1,
  171. msgType:[
  172. {id:6,name:"服务通知"},
  173. {id:8,name:"活动优惠"},
  174. ],
  175. id:'',
  176. sendObj:sendObj,
  177. send_obj:String(data.send_obj),
  178. show:false,//是否开启公众号弹窗
  179. pro:false ,//是否开启小程序弹窗
  180. uploadShow:false,
  181. chooseImgName:'',
  182. form:{
  183. title:data.title,
  184. desc:data.desc,
  185. type_id:data.type_id,
  186. msg_img:data.msg_img,
  187. msg_img_url:data.msg_img_src.trim(),
  188. content:data.content,
  189. url:data.url,
  190. mini_url:data.mini_url,
  191. },
  192. loading: false,
  193. uploadImg1:'',
  194. }
  195. },
  196. created() {
  197. this.getLevel();
  198. this.getPub();
  199. this.dividend();
  200. this.GetUrlType('type');
  201. this.GetUrlId('id');
  202. },
  203. mounted() {
  204. },
  205. methods: {
  206. GetUrlId(paraName) {
  207. var url = document.location.toString();
  208. var arrObj = url.split("?");
  209. if (arrObj.length > 1) {
  210. var arrPara = arrObj[1].split("&");
  211. var arr;
  212. for (var i = 0; i < arrPara.length; i++) {
  213. arr = arrPara[i].split("=");
  214. if (arr != null && arr[0] == paraName) {
  215. this.id=arr[1]
  216. return arr[1];
  217. }
  218. }
  219. return "";
  220. }
  221. else {
  222. return "";
  223. }
  224. },
  225. GetUrlType(paraName) {
  226. var url = document.location.toString();
  227. var arrObj = url.split("?");
  228. if (arrObj.length > 1) {
  229. var arrPara = arrObj[1].split("&");
  230. var arr;
  231. for (var i = 0; i < arrPara.length; i++) {
  232. arr = arrPara[i].split("=");
  233. if (arr != null && arr[0] == paraName) {
  234. this.active=arr[1]
  235. return arr[1];
  236. }
  237. }
  238. return "";
  239. }
  240. else {
  241. return "";
  242. }
  243. },
  244. next(){
  245. this.active=2
  246. },
  247. submit(){
  248. let send_data
  249. if(this.send_obj=='1'){
  250. send_data=this.member_str
  251. }
  252. if(this.send_obj=='2'){
  253. send_data=this.member_check
  254. }
  255. if(this.send_obj=='3'){
  256. send_data=this.pub_check
  257. }
  258. if(this.send_obj=='4'){
  259. send_data=this.sale_check
  260. }
  261. let json = {
  262. title:this.form.title,
  263. msg_img:this.form.msg_img,
  264. desc:this.form.desc,
  265. content:this.form.content,
  266. url:this.form.url,
  267. mini_url:this.form.mini_url,
  268. type_id:this.form.type_id,
  269. send_obj:this.send_obj,
  270. send_data:send_data
  271. };
  272. this.$http.post('{!! yzWebFullUrl('plugin.instation-message.admin.message.edit') !!}',{'message':json,id:this.id}).then(response => {
  273. if (response.data.result) {
  274. this.$message({message: response.data.msg,type: 'success'});
  275. window.location.href = '{!! yzWebFullUrl('plugin.instation-message.admin.message.index') !!}';
  276. } else {
  277. this.$message({message: response.data.msg,type: 'error'});
  278. }
  279. },response => {
  280. });
  281. },
  282. getLevel(){
  283. this.$http.post('{!! yzWebFullUrl('plugin.instation-message.admin.message.get-member-level') !!}').then(response => {
  284. if (response.data.result) {
  285. this.member_arr=response.data.data.levels;
  286. if(response.data.data.set){
  287. this.member_arr.unshift({id:0,level_name:response.data.data.set})
  288. }
  289. } else {
  290. this.$message({message: response.data.msg,type: 'error'});
  291. }
  292. },response => {
  293. });
  294. },
  295. getPub(){
  296. this.$http.post('{!! yzWebFullUrl('plugin.instation-message.admin.message.get-agent-level') !!}').then(response => {
  297. if (response.data.result) {
  298. this.pub_arr=response.data.data.agentLevels;
  299. if(response.data.data.defaultLevelName){
  300. this.pub_arr.unshift({id:0,name:response.data.data.defaultLevelName})
  301. }
  302. } else {
  303. this.$message({message: response.data.msg,type: 'error'});
  304. }
  305. },response => {
  306. });
  307. },
  308. dividend(){
  309. this.$http.post('{!! yzWebFullUrl('plugin.instation-message.admin.message.get-team-dividend-level') !!}').then(response => {
  310. if (response.data.result) {
  311. this.sale_arr=response.data.data.level;
  312. } else {
  313. this.$message({message: response.data.msg,type: 'error'});
  314. }
  315. },response => {
  316. });
  317. },
  318. toLast(){
  319. this.active=1
  320. },
  321. openUpload(str) {
  322. this.chooseImgName = str;
  323. this.uploadShow = true;
  324. },
  325. changeProp(val) {
  326. if(val == true) {
  327. this.uploadShow = false;
  328. }
  329. else {
  330. this.uploadShow = true;
  331. }
  332. },
  333. sureImg(name,image,image_url) {
  334. this.form[name] = image;
  335. this.form[name+'_url'] = image_url;
  336. },
  337. //弹窗显示与隐藏的控制
  338. changeProp1(item){
  339. this.show=item;
  340. },
  341. //当前链接的增加
  342. parHref(child,confirm){
  343. this.show=confirm;
  344. this.form.url=child;
  345. },
  346. changeprogram(item){
  347. this.pro=item;
  348. },
  349. parpro(child,confirm){
  350. this.pro=confirm;
  351. this.form.mini_url=child;
  352. },
  353. goBack() {
  354. window.location.href = '{!! yzWebFullUrl('plugin.instation-message.admin.message.index') !!}';
  355. },
  356. },
  357. })
  358. </script>
  359. @endsection