group-code-add.blade.php 50 KB

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