message-create1.blade.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  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" :key="item.id" :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 sendObj = {!! json_encode($sendObj)?:'{}' !!};
  154. var app = new Vue({
  155. el:"#app",
  156. delimiters: ['[[', ']]'],
  157. name: 'test',
  158. data() {
  159. return{
  160. member_arr:[],
  161. pub_arr:[],
  162. sale_arr:[],
  163. member_check:[],
  164. pub_check:[],
  165. sale_check:[],
  166. member_str:'',
  167. active:1,
  168. msgType:[
  169. {id:6,name:"服务通知"},
  170. {id:8,name:"活动优惠"},
  171. ],
  172. id:'',
  173. send_obj:'0',
  174. sendObj:sendObj,
  175. show:false,//是否开启公众号弹窗
  176. pro:false ,//是否开启小程序弹窗
  177. uploadShow:false,
  178. chooseImgName:'',
  179. form:{
  180. title:'',
  181. desc:'',
  182. type_id:'',
  183. msg_img:'',
  184. content:'',
  185. url:'',
  186. mini_url:'',
  187. msg_img_url:'',
  188. },
  189. loading: false,
  190. uploadImg1:'',
  191. }
  192. },
  193. created() {
  194. this.getLevel();
  195. this.getPub();
  196. this.dividend();
  197. },
  198. mounted() {
  199. },
  200. methods: {
  201. next(){
  202. this.active=2
  203. },
  204. submit(){
  205. let send_data
  206. if(this.send_obj=='1'){
  207. send_data=this.member_str
  208. }
  209. if(this.send_obj=='2'){
  210. send_data=this.member_check
  211. }
  212. if(this.send_obj=='3'){
  213. send_data=this.pub_check
  214. }
  215. if(this.send_obj=='4'){
  216. send_data=this.sale_check
  217. }
  218. let json = {
  219. title:this.form.title,
  220. msg_img:this.form.msg_img,
  221. desc:this.form.desc,
  222. content:this.form.content,
  223. url:this.form.url,
  224. mini_url:this.form.mini_url,
  225. type_id:this.form.type_id,
  226. send_obj:this.send_obj,
  227. send_data:send_data
  228. };
  229. this.$http.post('{!! yzWebFullUrl('plugin.instation-message.admin.message.create1') !!}',{'message':json}).then(response => {
  230. if (response.data.result) {
  231. this.$message({message: response.data.msg,type: 'success'});
  232. window.location.href = '{!! yzWebFullUrl('plugin.instation-message.admin.message.index') !!}';
  233. } else {
  234. this.$message({message: response.data.msg,type: 'error'});
  235. }
  236. },response => {
  237. });
  238. },
  239. getLevel(){
  240. this.$http.post('{!! yzWebFullUrl('plugin.instation-message.admin.message.get-member-level') !!}').then(response => {
  241. if (response.data.result) {
  242. this.member_arr=response.data.data.levels;
  243. if(response.data.data.set){
  244. this.member_arr.unshift({id:0,level_name:response.data.data.set})
  245. }
  246. } else {
  247. this.$message({message: response.data.msg,type: 'error'});
  248. }
  249. },response => {
  250. });
  251. },
  252. getPub(){
  253. this.$http.post('{!! yzWebFullUrl('plugin.instation-message.admin.message.get-agent-level') !!}').then(response => {
  254. if (response.data.result) {
  255. this.pub_arr=response.data.data.agentLevels;
  256. if(response.data.data.defaultLevelName){
  257. this.pub_arr.unshift({id:0,name:response.data.data.defaultLevelName})
  258. }
  259. } else {
  260. this.$message({message: response.data.msg,type: 'error'});
  261. }
  262. },response => {
  263. });
  264. },
  265. dividend(){
  266. this.$http.post('{!! yzWebFullUrl('plugin.instation-message.admin.message.get-team-dividend-level') !!}').then(response => {
  267. if (response.data.result) {
  268. this.sale_arr=response.data.data.level;
  269. } else {
  270. this.$message({message: response.data.msg,type: 'error'});
  271. }
  272. },response => {
  273. });
  274. },
  275. toLast(){
  276. this.active=1
  277. },
  278. openUpload(str) {
  279. this.chooseImgName = str;
  280. this.uploadShow = true;
  281. },
  282. changeProp(val) {
  283. if(val == true) {
  284. this.uploadShow = false;
  285. }
  286. else {
  287. this.uploadShow = true;
  288. }
  289. },
  290. sureImg(name,image,image_url) {
  291. this.form[name] = image;
  292. this.form[name+'_url'] = image_url;
  293. console.log(this.form.msg_img_url)
  294. },
  295. //弹窗显示与隐藏的控制
  296. changeProp1(item){
  297. this.show=item;
  298. },
  299. //当前链接的增加
  300. parHref(child,confirm){
  301. this.show=confirm;
  302. this.form.url=child;
  303. },
  304. changeprogram(item){
  305. this.pro=item;
  306. },
  307. parpro(child,confirm){
  308. this.pro=confirm;
  309. this.form.mini_url=child;
  310. },
  311. goBack() {
  312. window.location.href = '{!! yzWebFullUrl('plugin.instation-message.admin.message.index') !!}';
  313. },
  314. },
  315. })
  316. </script>
  317. @endsection