group-code-edit.blade.php 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916
  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. <script type="text/javascript"
  8. src="https://api.map.baidu.com/api?v=2.0&ak=QXSZyPZk26shrYzAXjTkDLx5LbRCHECz"></script>
  9. <style>
  10. .vue-main-title-content a{color:#333}
  11. .vue-main-title-content a:hover{color:#29ba9c;}
  12. </style>
  13. <div class="all">
  14. <div id="app" v-cloak>
  15. <div class="vue-main">
  16. <div class="vue-main-title">
  17. <div class="vue-main-title-left"></div>
  18. <div class="vue-main-title-content"><a @click="goParent">群活码</a> > 编辑活码</div>
  19. </div>
  20. <div class="vue-main-form">
  21. <el-form ref="form" :model="form" :rules="rules" label-width="15%">
  22. <div class="vue-category-title">活动信息</div>
  23. <el-form-item label="活码名称" prop="code_name">
  24. <el-input v-model="form.code_name" style="width:70%;" maxlength="20" show-word-limit></el-input>
  25. </el-form-item>
  26. <el-form-item label="引导语" prop="code_guide">
  27. <el-input v-model="form.code_guide" style="width:70%;" maxlength="20" show-word-limit></el-input>
  28. </el-form-item>
  29. <el-form-item label="访问授权" prop="auth_visit">
  30. <el-radio v-model.number="form.auth_visit" :label="0">关闭授权</el-radio>
  31. <el-radio v-model.number="form.auth_visit" :label="1">开启授权</el-radio>
  32. <div class="tip">开启后会弹窗授权用户信息,可以获取用户头像昵称,关闭授权后则静默获取用户身份</div>
  33. </el-form-item>
  34. <el-form-item label="选择进群方式" prop="join_type">
  35. <el-radio @change="joinTypeChange()" v-model.number="form.join_type" :label="0">默认进群</el-radio>
  36. <el-radio @change="joinTypeChange()" v-model.number="form.join_type" :label="1">标签进群</el-radio>
  37. <el-radio @change="joinTypeChange()" v-model.number="form.join_type" :label="2">距离进群</el-radio>
  38. <div class="tip">当选择默认进群,用户可直接扫码进群,当选择标签进群,用户根据标签选择扫码进群</div>
  39. </el-form-item>
  40. <el-form-item label="进群权限" prop="join_auth">
  41. <el-switch v-model="form.join_auth" :active-value="1" :inactive-value="0"></el-switch>
  42. </el-form-item>
  43. <el-form-item label="" prop="">
  44. <el-checkbox v-model="form.is_pay" :true-label="1" :false-label="0" style="margin-right: 10px"></el-checkbox>
  45. 累计支付金额满<el-input v-model="form.pay_money" style="width:30%;margin: 0 10px 0 10px" ></el-input>元
  46. </el-form-item>
  47. <el-form-item label="" prop="">
  48. <el-checkbox v-model="form.is_member_level" :true-label="1" :false-label="0" style="margin-right: 10px"></el-checkbox>
  49. 指定会员等级
  50. <el-select
  51. v-model="form.member_level"
  52. multiple
  53. filterable
  54. collapse-tags
  55. style="margin-left: 20px;width: 60%"
  56. placeholder="请选择会员等级">
  57. <el-option
  58. v-for="item in member_level_list"
  59. :key="item.id"
  60. :label="item.level_name"
  61. :value="item.id">
  62. </el-option>
  63. </el-select>
  64. </el-form-item>
  65. <el-form-item label="" prop="" v-if="member_tags">
  66. <el-checkbox v-model="form.is_member_tags" :true-label="1" :false-label="0" style="margin-right: 10px"></el-checkbox>
  67. 指定会员标签
  68. <el-select
  69. v-model="form.member_tags"
  70. multiple
  71. filterable
  72. {{--reserve-keyword--}}
  73. remote
  74. :remote-method="selectMemberTag"
  75. :loading="loading"
  76. style="margin-left: 20px;width: 60%"
  77. placeholder="请选择会员标签">
  78. <el-option
  79. v-for="item in tag_list"
  80. :key="item.id"
  81. :label="item.title"
  82. :value="item.id">
  83. </el-option>
  84. </el-select>
  85. </el-form-item>
  86. <el-form-item label="" prop="">
  87. <el-checkbox v-model="form.is_goods" :true-label="1" :false-label="0" style="margin-right: 10px"></el-checkbox>
  88. 购买指定商品
  89. <el-select
  90. v-model="form.goods"
  91. multiple
  92. filterable
  93. {{--reserve-keyword--}}
  94. remote
  95. :remote-method="selectGoods"
  96. :loading="loading"
  97. style="margin-left: 20px;width: 60%"
  98. placeholder="请选择商品">
  99. <el-option
  100. v-for="item in goods_list"
  101. :key="item.id"
  102. :label="item.title"
  103. :value="item.id">
  104. </el-option>
  105. </el-select>
  106. </el-form-item>
  107. <el-form-item label="标签页banner" prop="label_banner" v-if="form.join_type==1">
  108. <div class="upload-box" @click="openUpload('label_banner')" v-if="!form.label_banner_img">
  109. <i class="el-icon-plus" style="font-size:32px"></i>
  110. </div>
  111. <div @click="openUpload('label_banner')" class="upload-boxed" v-if="form.label_banner_img">
  112. <img :src="form.label_banner_img" alt="" style="width:150px;height:150px;border-radius: 5px;cursor: pointer;">
  113. <div class="upload-boxed-text">点击重新上传</div>
  114. </div>
  115. <div class="tip">尺寸: 720px*480px,分辨率:72,大小不超过800Kb</div>
  116. </el-form-item>
  117. <el-form-item label="标签设置" prop="display_order" v-if="form.join_type==1">
  118. <el-input
  119. v-for="(item,index) in label_data"
  120. :key="index"
  121. placeholder="请选择标签名"
  122. @focus="focusInput(index)"
  123. @blur="blurInput(index)"
  124. v-model="label_data[index]"
  125. style="width:150px;margin:5px">
  126. <i slot="suffix" class="el-input__icon el-icon-close" @click="delLable(index)" style="cursor: pointer;"></i>
  127. </el-input>
  128. <el-button plain type="primary" @click="addLable">新增标签</el-button>
  129. <div class="tip">注意事项:删除标签,标签下指定的群二维码也将被删除</div>
  130. </el-form-item>
  131. <el-form-item label="默认参与人数" prop="in_number" v-if="form.join_type==1">
  132. <el-input v-model.number="form.in_number" style="width:70%;"></el-input>
  133. </el-form-item>
  134. <el-form-item label="说明" prop="explain">
  135. <el-radio v-model.number="form.explain" :label="1">开启</el-radio>
  136. <el-radio v-model.number="form.explain" :label="0">关闭</el-radio>
  137. <tinymceee v-model="form.explain_content" style="width:70%"></tinymceee>
  138. </el-form-item>
  139. <div class="vue-category-title">客服设置</div>
  140. <el-form-item label="客服二维码" prop="customer_service">
  141. <div class="upload-box" @click="openUpload('customer_service')" v-if="!form.customer_service_img">
  142. <i class="el-icon-plus" style="font-size:32px"></i>
  143. </div>
  144. <div @click="openUpload('customer_service')" class="upload-boxed" v-if="form.customer_service_img">
  145. <img :src="form.customer_service_img" alt="" style="width:150px;height:150px;border-radius: 5px;cursor: pointer;">
  146. <div class="upload-boxed-text">点击重新上传</div>
  147. </div>
  148. <div class="tip">尺寸: 400px*400px,分辨率:72,大小不超过800Kb</div>
  149. </el-form-item>
  150. <el-form-item label="客服引导话术" prop="customer_service_guide">
  151. <el-input v-model="form.customer_service_guide" style="width:70%;" aria-placeholder="引导用户添加客服微信" maxlength="20" show-word-limit></el-input>
  152. </el-form-item>
  153. <div class="vue-category-title">群二维码管理<div class="tip" style="display:inline-block;padding-left:20px">(图片尺寸: 宽度400px,高度不限,分辨率:72,大小不超过800Kb)</div></div>
  154. <el-form-item label="二维码类型" prop="code_type">
  155. <el-radio :disabled="code_type_disabled" v-model.number="form.code_type" :label="0" @change="changeCodeType">手动上传</el-radio>
  156. <el-radio v-model.number="form.code_type" :label="1" @change="changeCodeType" v-if="group_develop_user">自动生成</el-radio>
  157. <div class="tip">自动生成二维码必须先配置企业微信,并使用群拓客功能。</div>
  158. </el-form-item>
  159. <div style="width:85%;margin:0 auto" v-show="list.length>0 && form.code_type==0">
  160. <el-table :data="list" stripe>
  161. <el-table-column label="群二维码" align="center" prop="display_order">
  162. <template slot-scope="scope">
  163. <div style="display: flex;justify-content: center;">
  164. <div class="upload-box" style="width:60px;height:60px;text-align:center" @click="openUpload('code_url',scope.$index)" v-show="!list[scope.$index].code_url_img">
  165. <i class="el-icon-plus" style="font-size:32px"></i>
  166. </div>
  167. <div @click="openUpload('code_url',scope.$index)" class="upload-boxed" style="width:60px;height:60px;text-align:center" v-show="list[scope.$index].code_url_img">
  168. <img :src="scope.row.code_url_img" alt="" style="width:60px;height:60px;border-radius: 5px;cursor: pointer;">
  169. <div class="upload-boxed-text" style="font-size:12px">重新上传</div>
  170. </div>
  171. </div>
  172. </template>
  173. </el-table-column>
  174. <el-table-column label="过期时间" align="center" width="200">
  175. <template slot-scope="scope">
  176. <el-date-picker
  177. v-model="scope.row.expire"
  178. type="datetime"
  179. style="width:180px"
  180. placeholder="选择日期"
  181. value-format="yyyy-MM-dd HH:mm:ss">
  182. </el-date-picker>
  183. </template>
  184. </el-table-column>
  185. <el-table-column label="扫码上限" align="center" prop="display_order" width="110">
  186. <template slot-scope="scope">
  187. <div>
  188. <el-input v-model.number="scope.row.upper_limit" style="width:100px"></el-input>
  189. </div>
  190. </template>
  191. </el-table-column>
  192. <el-table-column label="群标签" align="center" width="180">
  193. <template slot-scope="scope">
  194. <div>
  195. <el-select v-model="scope.row.label" filterable style="width:150px" placeholder="请选择标签" >
  196. <!-- <el-option label="无" value=""></el-option> -->
  197. <el-option v-for="(item,index) in label_data" :key="index" :label="item" :value="item"></el-option>
  198. </el-select>
  199. </div>
  200. </template>
  201. </el-table-column>
  202. <el-table-column label="状态" align="center" prop="display_order">
  203. <template slot-scope="scope">
  204. <div>
  205. <el-switch v-model="scope.row.status" :active-value="1" :inactive-value="0"></el-switch>
  206. </div>
  207. </template>
  208. </el-table-column>
  209. <el-table-column label="备注" align="center" prop="display_order">
  210. <template slot-scope="scope">
  211. <div>
  212. <el-input v-model="scope.row.remark" style="width:120px"></el-input>
  213. </div>
  214. </template>
  215. </el-table-column>
  216. <el-table-column label="操作" align="center" width="80">
  217. <template slot-scope="scope">
  218. <div>
  219. <el-button type="danger" size="mini" @click="delList(scope.$index)">删除</el-button>
  220. </div>
  221. </template>
  222. </el-table-column>
  223. </el-table>
  224. </div>
  225. <div style="width:85%;margin:0 auto" v-show="list.length>0 && form.code_type==1">
  226. <el-table :data="list" stripe>
  227. <el-table-column label="ID" align="center" prop="id">
  228. </el-table-column>
  229. <el-table-column label="选择群聊" align="center" prop="display_order">
  230. <template slot-scope="scope">
  231. <div style="display: flex;justify-content: center;" v-for="(group,group_index) in scope.row.group_data">
  232. [[group.group_name]]
  233. </div>
  234. <el-button type="primary" size="mini" @click="selectGroup(scope.$index)" v-if="scope.row.group_data_count<5">选择群聊</el-button>
  235. </template>
  236. </el-table-column>
  237. <el-table-column label="群标签" align="center" width="180">
  238. <template slot-scope="scope">
  239. <div>
  240. <el-select v-model="scope.row.label" filterable style="width:150px" placeholder="请选择标签" >
  241. <!-- <el-option label="无" value=""></el-option> -->
  242. <el-option v-for="(item,index) in label_data" :key="index" :label="item" :value="item"></el-option>
  243. </el-select>
  244. </div>
  245. </template>
  246. </el-table-column>
  247. <el-table-column label="是否自动生成群聊" align="center" prop="auto_generate">
  248. <template slot-scope="scope">
  249. <div>
  250. <el-switch v-model="scope.row.auto_generate" :active-value="1" :inactive-value="0"></el-switch>
  251. </div>
  252. </template>
  253. </el-table-column>
  254. <el-table-column label="累计加群人数" align="center" prop="">
  255. <template slot-scope="scope">
  256. <div style="display: flex;justify-content: center;">
  257. [[scope.row.join_group_num]]
  258. </div>
  259. </template>
  260. </el-table-column>
  261. <el-table-column label="自动生成群数量" align="center" prop="display_order">
  262. <template slot-scope="scope">
  263. <div style="display: flex;justify-content: center;">
  264. [[scope.row.generate_group_num]]
  265. </div>
  266. </template>
  267. </el-table-column>
  268. <el-table-column label="状态" align="center" prop="display_order">
  269. <template slot-scope="scope">
  270. <div>
  271. <el-switch v-model="scope.row.status" :active-value="1" :inactive-value="0"></el-switch>
  272. </div>
  273. </template>
  274. </el-table-column>
  275. <el-table-column label="经纬度" align="center" prop="">
  276. <template slot-scope="scope">
  277. 经度:[[scope.row.longitude]]<br>
  278. 纬度:[[scope.row.latitude]]<br>
  279. <el-button type="primary" size="mini"
  280. @click="openMap(scope.row.longitude,scope.row.latitude,true,true,scope.$index)">查看定位
  281. </el-button>
  282. </template>
  283. </el-table-column>
  284. <el-table-column label="备注" align="center" prop="display_order">
  285. <template slot-scope="scope">
  286. <div>
  287. <el-input v-model="scope.row.remark" style="width:120px"></el-input>
  288. </div>
  289. </template>
  290. </el-table-column>
  291. <el-table-column label="操作" align="center" width="80">
  292. <template slot-scope="scope">
  293. <div>
  294. <el-button type="danger" size="mini" @click="delList(scope.$index)">删除</el-button>
  295. </div>
  296. </template>
  297. </el-table-column>
  298. </el-table>
  299. </div>
  300. <div @click="addList" style="width:85%;margin:40px auto;text-align: center;font-size: 16px;font-weight: 600;cursor: pointer;padding: 8px;border: 1px #29ba9c dashed;">添&nbsp;&nbsp;加</div>
  301. </el-form>
  302. <el-dialog :visible.sync="group_show" width="60%" center title="选择群聊">
  303. <div>
  304. <div style="text-align: center">
  305. <el-input v-model="group_keyword_type" style="width:80%" placeholder="请输入群聊ID/群聊名搜索"></el-input>
  306. <el-button type="primary" @click="searchGroup()" style="margin-left:20px;">搜索</el-button>
  307. </div>
  308. <el-table :data="group_list" style="width: 100%;height:600px;overflow-y:auto" >
  309. <el-table-column prop="id" label="ID" align="center"></el-table-column>
  310. <el-table-column prop="group_name" label="群聊名" align="center"></el-table-column>
  311. <el-table-column prop="" label="操作" align="center" >
  312. <template slot-scope="scope">
  313. <el-button @click="addSelectGroup(scope.$index)">
  314. 选择
  315. </el-button>
  316. </template>
  317. </el-table-column>
  318. </el-table>
  319. </div>
  320. </el-dialog>
  321. </div>
  322. </div>
  323. <!-- 分页 -->
  324. <div class="vue-page">
  325. <div class="vue-center">
  326. <el-button type="primary" @click="submitForm('form')">提交</el-button>
  327. <el-button @click="goBack">返回</el-button>
  328. </div>
  329. </div>
  330. <el-dialog :visible.sync="map_show" width="60%" center title="选择坐标">
  331. <div>
  332. <div v-if="map_search_show">
  333. <input v-model="map_keyword" style="width:70%" @keyup.enter="searchMap"
  334. class="el-input__inner">
  335. <el-button type="primary" @click="searchMap()">搜索</el-button>
  336. </div>
  337. <div ref="ditucontent" style="width:100%;height:450px;margin:20px 0"></div>
  338. </div>
  339. <span slot="footer" class="dialog-footer">
  340. <el-button v-if="map_change_show" @click="sureMap">确 定</el-button>
  341. <el-button @click="map_show = false">取 消</el-button>
  342. </span>
  343. </el-dialog>
  344. <upload-img :upload-show="uploadShow" :name="chooseImgName" @replace="changeProp" @sure="sureImg"></upload-img>
  345. <!--end-->
  346. </div>
  347. </div>
  348. <script src="{{resource_get('static/yunshop/tinymce4.7.5/tinymce.min.js')}}"></script>
  349. @include('public.admin.uploadImg')
  350. @include('public.admin.tinymceee')
  351. <script>
  352. /**地图组件代码开始**/
  353. var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});// 左上角,添加比例尺
  354. var top_left_navigation = new BMap.NavigationControl(); //左上角,添加默认缩放平移控件
  355. var top_right_navigation = new BMap.NavigationControl({
  356. anchor: BMAP_ANCHOR_TOP_RIGHT,
  357. type: BMAP_NAVIGATION_CONTROL_SMALL
  358. }); //右上角,仅包含平移和缩放按钮
  359. /*缩放控件type有四种类型:
  360. BMAP_NAVIGATION_CONTROL_SMALL:仅包含平移和缩放按钮;BMAP_NAVIGATION_CONTROL_PAN:仅包含平移按钮;BMAP_NAVIGATION_CONTROL_ZOOM:仅包含缩放按钮*/
  361. /**地图组件代码结束**/
  362. let group = {!! json_encode($data)?:'{}' !!}
  363. console.log(group)
  364. var app = new Vue({
  365. el:"#app",
  366. delimiters: ['[[', ']]'],
  367. name: 'test',
  368. data() {
  369. let member_tags = {!! json_encode($member_tags?:[]) !!};
  370. let member_level = {!! json_encode($member_level?:[]) !!};
  371. let group_develop_user = {!! json_encode($group_develop_user?:[]) !!};
  372. let tags_list = {!! json_encode($tags_list?:[]) !!};
  373. let goods_list = {!! json_encode($goods_list?:[]) !!};
  374. return{
  375. code_type_disabled:false,
  376. id:'',
  377. label_data:group.label_data || [],
  378. choose_value:'',
  379. form:{
  380. auth_visit:0,
  381. join_type:0,
  382. explain:0,
  383. ...group
  384. },
  385. filter_names:[],//选中的标签组名
  386. list:group.has_many_code,
  387. filterShow:false,
  388. keyword:'',
  389. group_develop_user:group_develop_user,
  390. group_show:false,
  391. group_list:[],
  392. select_group_index:'',
  393. group_keyword_type:'',
  394. member_level_list:member_level,
  395. member_tags:member_tags,
  396. tag_list:tags_list,
  397. goods_list:goods_list,
  398. submit_url:'',
  399. uploadShow:false,
  400. chooseImgName:'',
  401. chooseImgIndex:'-1',
  402. loading: false,
  403. uploadImg1:'',
  404. rules:{
  405. code_name:{ required: true, message: '请输入群活码名称'},
  406. code_guide:{ required: true, message: '请输入群活码引导语'},
  407. explain_content:{ required: true, message: '请输入说明内容'},
  408. auth_visit:{ required: true, message: '请选择'},
  409. join_type:{ required: true, message: '请选择'},
  410. explain:{ required: true, message: '请选择'},
  411. // customer_service:{ required: true, message: '请上传客服二维码'},
  412. customer_service_guide:{ required: true, message: '请输入客服引导语'},
  413. // label_banner:{ required: true, message: '请上传标签页banner'},
  414. in_number:{ required: true, message: '请输入默认参与人数'},
  415. },
  416. /**地图组件代码开始**/
  417. map: "",
  418. marker: "",
  419. centerParam: [113.275995, 23.117055],
  420. zoomParam: "",
  421. markersParam: [113.275995, 23.117055],
  422. pointNew: "",
  423. choose_center: [],
  424. choose_marker: [],
  425. map_show: false,
  426. map_search_show: false,
  427. map_change_show: false,
  428. map_keyword: '',
  429. map_save_key:'',
  430. /**地图组件代码结束**/
  431. }
  432. },
  433. created() {
  434. this.joinTypeChange();
  435. },
  436. mounted() {
  437. },
  438. methods: {
  439. joinTypeChange(){
  440. if(this.form.join_type==2){
  441. if(this.form.code_type==0){
  442. this.form.code_type = 1;
  443. this.changeCodeType();
  444. }
  445. this.code_type_disabled = true;
  446. }else{
  447. this.code_type_disabled = false;
  448. }
  449. },
  450. goParent() {
  451. window.location.href = `{!! yzWebFullUrl('plugin.group-code.admin.group-code.index') !!}`;
  452. },
  453. addList() {
  454. if (this.form.code_type==1) {
  455. this.list.push({id:'',select_group:[],group_data:[],group_data_count:0,auto_generate:0,label:'',join_group_num:0,generate_group_num:'',status:0,remark:'',config:'',generate_group:[],longitude:'',latitude:''});
  456. } else {
  457. this.list.push({code_url:'',code_url_img:'',label:'',expire:'',upper_limit:'',status:0,remark:''});
  458. }
  459. },
  460. delList(index) {
  461. this.list.splice(index,1)
  462. },
  463. addLable() {
  464. this.label_data.push('');
  465. },
  466. delLable(index) {
  467. let value = this.label_data[index];
  468. let arr = [];
  469. this.list.forEach((item,index) => {
  470. if(item.label != value) {
  471. arr.push(item);
  472. }
  473. })
  474. this.list = [];
  475. this.list = arr;
  476. this.label_data.splice(index,1)
  477. },
  478. focusInput(index) {
  479. this.choose_value = this.label_data[index];
  480. },
  481. blurInput(index) {
  482. // 改变值
  483. if(this.label_data[index] != this.choose_value) {
  484. this.label_data.forEach((item,index1) => {
  485. if(index1!=index) {
  486. // 标签重复
  487. if(item == this.label_data[index]) {
  488. this.$message.error("标签名不能重复!")
  489. this.label_data[index] = this.choose_value;
  490. this.$forceUpdate();
  491. }
  492. }
  493. })
  494. }
  495. // 改名成功,给群二维码选中的旧的标签名字更新成新名字
  496. if(this.label_data[index] != this.choose_value) {
  497. this.list.forEach((item,index1) => {
  498. if(item.label == this.choose_value) {
  499. item.label = this.label_data[index]
  500. }
  501. })
  502. }
  503. console.log(this.label_data)
  504. },
  505. submitForm(formName) {
  506. console.log(this.list)
  507. let that = this;
  508. if(this.form.explain) {
  509. if(!this.form.explain_content) {
  510. this.$message.error("请输入说明内容");
  511. return;
  512. }
  513. }
  514. if(this.form.join_type==1) {
  515. if(!this.label_data || this.label_data.length<=0) {
  516. this.$message.error("标签不能为空!");
  517. return;
  518. }
  519. if(this.form.label_banner == "") {
  520. this.$message.error("标签banner不能为空!");
  521. return;
  522. }
  523. let is_true = true;
  524. this.list.some((item,index) => {
  525. if(item.label == "") {
  526. this.$message.error("请选中群二维码中的群标签!");
  527. is_true = false;
  528. return true;
  529. }
  530. })
  531. if(is_true == false) {
  532. return;
  533. }
  534. }
  535. if(this.form.customer_service == "") {
  536. this.$message.error("客服二维码不能为空!");
  537. return;
  538. }
  539. let json = {
  540. id:this.form.id,
  541. group:{
  542. code_name:this.form.code_name,
  543. code_guide:this.form.code_guide,
  544. auth_visit:this.form.auth_visit,
  545. join_type:this.form.join_type,
  546. explain:this.form.explain,
  547. explain_content:this.form.explain_content,
  548. customer_service:this.form.customer_service,
  549. customer_service_guide:this.form.customer_service_guide,
  550. label_banner:this.form.label_banner,
  551. label_data:this.label_data,
  552. in_number:this.form.in_number,
  553. join_auth:this.form.join_auth,
  554. is_pay:this.form.is_pay,
  555. pay_money:this.form.pay_money,
  556. is_member_level:this.form.is_member_level,
  557. member_level:this.form.member_level,
  558. is_member_tags:this.form.is_member_tags,
  559. member_tags:this.form.member_tags,
  560. is_goods:this.form.is_goods,
  561. goods:this.form.goods,
  562. code_type:this.form.code_type,
  563. },
  564. // code_data:this.list
  565. };
  566. json.code_data = [];
  567. this.list.forEach((item,index) => {
  568. json.code_data.push(item)
  569. })
  570. if(!json.code_data || json.code_data.length<=0) {
  571. this.$message.error("群二维码不能为空!");
  572. return;
  573. }
  574. json.code_data = JSON.stringify(json.code_data)
  575. console.log(json);
  576. this.$refs[formName].validate((valid) => {
  577. if (valid) {
  578. // plugin.group-code.admin.group-code.add
  579. let loading = this.$loading({target:document.querySelector(".content"),background: 'rgba(0, 0, 0, 0.2)'});
  580. this.$http.post('{!! yzWebFullUrl('plugin.group-code.admin.group-code.update') !!}',json).then(response => {
  581. if (response.data.result) {
  582. this.$message({type: 'success',message: '操作成功!'});
  583. this.goBack();
  584. } else {
  585. this.$message({message: response.data.msg,type: 'error'});
  586. }
  587. loading.close();
  588. },response => {
  589. loading.close();
  590. });
  591. }
  592. else {
  593. console.log('error submit!!');
  594. return false;
  595. }
  596. });
  597. },
  598. goBack() {
  599. history.go(-1)
  600. },
  601. openUpload(str,index) {
  602. console.log(index);
  603. this.chooseImgName = str;
  604. this.uploadShow = true;
  605. this.chooseImgIndex = "-1";
  606. if(index || index == 0) {
  607. this.chooseImgIndex = index;
  608. }
  609. console.log(this.chooseImgIndex);
  610. },
  611. changeProp(val) {
  612. if(val == true) {
  613. this.uploadShow = false;
  614. }
  615. else {
  616. this.uploadShow = true;
  617. }
  618. },
  619. sureImg(name,image,image_url) {
  620. console.log(this.chooseImgIndex)
  621. console.log(name)
  622. console.log(image)
  623. console.log(image_url)
  624. // 表格里
  625. if(this.chooseImgIndex != '-1') {
  626. this.list[this.chooseImgIndex][name] = image;
  627. this.list[this.chooseImgIndex][name+'_img'] = image_url;
  628. this.list.push({});
  629. this.list.splice(this.list.length-1,1)
  630. this.$forceUpdate();
  631. console.log("qqqqqqqqqqqqqqqqqqqqq")
  632. }
  633. // 普通图片
  634. else {
  635. console.log("afdfdfdff")
  636. this.form[name] = image;
  637. this.form[name+'_img'] = image_url;
  638. }
  639. },
  640. clearImg(str) {
  641. this.form[str] = "";
  642. this.form[str+'_url'] = "";
  643. this.$forceUpdate();
  644. },
  645. selectMemberTag(query) {
  646. // console.log(query);
  647. if (query == '') {
  648. return;
  649. }
  650. this.$http.post("{!! yzWebUrl('plugin.group-code.admin.group-code.search-member-tags') !!}",{title:query}).then(response => {
  651. if (response.data.result) {
  652. this.tag_list=response.data.data.data;
  653. }else{
  654. this.$message({type: 'error',message: response.data.msg});
  655. }
  656. }, response => {
  657. this.$message({type: 'error',message: response.data.msg});
  658. console.log(response);
  659. });
  660. },
  661. selectGoods(query) {
  662. if (query == '') {
  663. return;
  664. }
  665. this.$http.post("{!! yzWebUrl('plugin.group-code.admin.group-code.search-goods') !!}",{keyword:query}).then(response => {
  666. if (response.data.result) {
  667. this.goods_list=response.data.data.data;
  668. }else{
  669. this.$message({type: 'error',message: response.data.msg});
  670. }
  671. }, response => {
  672. this.$message({type: 'error',message: response.data.msg});
  673. console.log(response);
  674. });
  675. },
  676. changeCodeType(index) {
  677. this.list = [];
  678. },
  679. selectGroup(index) {
  680. this.select_group_index = index;
  681. this.group_show = true;
  682. },
  683. searchGroup() {
  684. this.$http.post("{!! yzWebUrl('plugin.group-code.admin.group-code.search-work-group') !!}",{keyword:this.group_keyword_type}).then(response => {
  685. if (response.data.result) {
  686. this.group_list=response.data.data.data;
  687. }else{
  688. this.$message({type: 'error',message: response.data.msg});
  689. }
  690. }, response => {
  691. this.$message({type: 'error',message: response.data.msg});
  692. console.log(response);
  693. });
  694. },
  695. addSelectGroup(index) {
  696. let group = this.group_list[index];
  697. if (this.list[this.select_group_index].group_data.length == 5) {
  698. this.$message({type: 'error',message: '最多选择5个群聊'});
  699. return false;
  700. }
  701. let has = false;
  702. this.list[this.select_group_index].group_data.forEach((item,index) => {
  703. if (group.chat_id == item.chat_id ) {
  704. has = true;
  705. }
  706. });
  707. if (has) {
  708. this.$message({type: 'error',message: '已选择该群聊'});
  709. return false;
  710. }
  711. if (this.select_group_index === '') {
  712. return false;
  713. }
  714. this.list[this.select_group_index].group_data.push({
  715. id:group.id,
  716. chat_id:group.chat_id,
  717. group_name:group.group_name,
  718. });
  719. this.list[this.select_group_index].select_group.push(group.chat_id);
  720. this.list[this.select_group_index].join_group_num = this.list[this.select_group_index].join_group_num + group.member_count;
  721. },
  722. /**地图组件代码开始**/
  723. reloadList() {
  724. location.reload(); //刷新页面
  725. },
  726. openMap(longitude, latitude, map_search_show, map_change_show,key) {
  727. this.map_save_key = key;
  728. this.centerParam = [longitude, latitude];
  729. this.markersParam = [longitude, latitude];
  730. this.map_search_show = map_search_show === false ? false : true;
  731. this.map_change_show = map_change_show === false ? false : true;
  732. this.map_show = true;
  733. setTimeout(() => {
  734. this.initMap();
  735. }, 100);
  736. this.map_keyword = "";
  737. },
  738. searchMap() {
  739. console.log(this.marker);
  740. let that = this;
  741. geo.getPoint(this.map_keyword, function (point) {
  742. that.choose_marker = [point.lng, point.lat];
  743. that.choose_center = [point.lng, point.lat];
  744. console.log(point)
  745. that.map.panTo(point);
  746. that.marker.setPosition(point);
  747. that.marker.setAnimation(BMAP_ANIMATION_BOUNCE);
  748. setTimeout(function () {
  749. that.marker.setAnimation(null)
  750. }, 3600);
  751. });
  752. },
  753. sureMap() {
  754. let that = this;
  755. this.markersParam = [];
  756. this.centerParam = [];
  757. this.markersParam = this.choose_marker.length <= 0 ? [113.275995, 23.117055] : this.choose_marker;
  758. this.centerParam = this.choose_center.length <= 0 ? [113.275995, 23.117055] : this.choose_center;
  759. this.list[this.map_save_key].longitude = this.markersParam[0];
  760. this.list[this.map_save_key].latitude = this.markersParam[1];
  761. // this.form.longitude = this.markersParam[0];
  762. // this.form.latitude = this.markersParam[1];
  763. console.log(this.centerParam);
  764. console.log(this.markersParam);
  765. that.map_show = false;
  766. },
  767. //创建和初始化地图函数:
  768. initMap() {
  769. let that = this;
  770. // [FF]切换模式后报错
  771. if (!window.BMap) {
  772. return;
  773. }
  774. console.log(this.$refs['ditucontent']);
  775. for (let i in this.$refs) {
  776. console.log(i)
  777. }
  778. this.createMap(); //创建地图
  779. this.setMapEvent(); //设置地图事件
  780. this.addMapControl(); //向地图添加控件
  781. geo = new BMap.Geocoder();
  782. // 创建标注
  783. var point = new BMap.Point(this.markersParam[0], this.markersParam[1]);
  784. this.marker = new BMap.Marker(point);
  785. this.marker.enableDragging();
  786. this.map.addOverlay(this.marker); // 将标注添加到地图中
  787. this.marker.addEventListener('dragend', function (e) {//拖动标注结束
  788. that.pointNew = e.point;
  789. var point = that.marker.getPosition();
  790. geo.getLocation(point, function (address) {
  791. console.log(address.address);
  792. that.map_keyword = address.address;
  793. });
  794. console.log(e);
  795. console.log("使用拖拽获取的百度坐标" + that.pointNew.lng + "," + that.pointNew.lat);
  796. that.choose_marker = [that.pointNew.lng, that.pointNew.lat];
  797. that.choose_center = [that.pointNew.lng, that.pointNew.lat];
  798. });
  799. if (this.map_change_show) {
  800. this.marker.setLabel(new BMap.Label('请您移动此标记,选择您的坐标!', {'offset': new BMap.Size(10, -20)}));
  801. }
  802. if (parent.editor && parent.document.body.contentEditable == "true") {
  803. //在编辑状态下
  804. setMapListener(); //地图改变修改外层的iframe标签src属性
  805. }
  806. },
  807. //创建地图函数:
  808. createMap() {
  809. this.map = new BMap.Map(this.$refs['ditucontent']); //在百度地图容器中创建一个地图
  810. // this.centerParam = '116.712617,24.778619';
  811. // var centerArr = this.centerParam.split(",");
  812. var point = new BMap.Point(
  813. this.centerParam[0],
  814. this.centerParam[1]
  815. ); //
  816. this.zoomParam = 12;
  817. this.map.centerAndZoom(point, parseInt(this.zoomParam)); //设定地图的中心点和坐标并将地图显示在地图容器中
  818. },
  819. //地图事件设置函数:
  820. setMapEvent() {
  821. // this.map.disableDragging(); //启用地图拖拽事件,默认启用(可不写)
  822. this.map.enableScrollWheelZoom(); //启用地图滚轮放大缩小
  823. this.map.enableDoubleClickZoom(); //启用鼠标双击放大,默认启用(可不写)
  824. this.map.enableKeyboard(); //启用键盘上下左右键移动地图
  825. },
  826. //地图控件添加函数:
  827. addMapControl() {
  828. this.map.addControl(new BMap.NavigationControl());
  829. this.map.addControl(top_left_control);
  830. this.map.addControl(top_left_navigation);
  831. this.map.addControl(top_right_navigation);
  832. },
  833. setMapListener() {
  834. var editor = parent.editor,
  835. containerIframe,
  836. iframes = parent.document.getElementsByTagName("iframe");
  837. for (var key in iframes) {
  838. if (iframes[key].contentWindow == window) {
  839. containerIframe = iframes[key];
  840. break;
  841. }
  842. }
  843. if (containerIframe) {
  844. this.map.addEventListener("moveend", mapListenerHandler);
  845. this.map.addEventListener("zoomend", mapListenerHandler);
  846. this.marker.addEventListener("dragend", mapListenerHandler);
  847. }
  848. function mapListenerHandler() {
  849. var zoom = this.map.getZoom();
  850. this.center = this.map.getCenter();
  851. this.marker = window.marker.getPoint();
  852. containerIframe.src = containerIframe.src
  853. .replace(
  854. new RegExp("([?#&])center=([^?#&]+)", "i"),
  855. "$1center=" + center.lng + "," + center.lat
  856. )
  857. .replace(
  858. new RegExp("([?#&])markers=([^?#&]+)", "i"),
  859. "$1markers=" + this.marker.lng + "," + this.marker.lat
  860. )
  861. .replace(new RegExp("([?#&])zoom=([^?#&]+)", "i"), "$1zoom=" + zoom);
  862. editor.fireEvent("saveScene");
  863. }
  864. },
  865. /**地图组件代码结束**/
  866. },
  867. })
  868. </script>
  869. @endsection