infoVue.blade.php 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799
  1. @extends('layouts.base')
  2. @section('title', '编辑文章')
  3. @section('content')
  4. @include('public.admin.uploadMultimediaImg')
  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. .right .el-form-item__label {
  9. width:27%!important;
  10. }
  11. .right .el-form-item__content {
  12. margin-left:27%!important;
  13. }
  14. .right2 .el-form-item__label {
  15. width:32%!important;
  16. }
  17. .right2 .el-form-item__content {
  18. margin-left:32%!important;
  19. }
  20. .navbar-absolute {
  21. z-index:99
  22. }
  23. .el-checkbox-group .el-checkbox {
  24. margin-right: 20px;
  25. }
  26. .receive-levels label{
  27. line-height: 2.5;
  28. }
  29. </style>
  30. <div class="all">
  31. <div id="app" v-cloak>
  32. <div class="vue-crumbs">
  33. <a @click="goParent()">文章管理</a>
  34. > {{id?'编辑':'发布'}}文章
  35. </div>
  36. <el-form ref="form" :model="form" :rules="rules" label-width="15%">
  37. <div style="display:flex;width:100%">
  38. <div style="flex:1;">
  39. <div class="vue-head">
  40. <div class="vue-main-title">
  41. <div class="vue-main-title-left"></div>
  42. <div class="vue-main-title-content">基本信息</div>
  43. </div>
  44. <div class="vue-main-form">
  45. <el-form-item label="文章标题" prop="title">
  46. <el-input v-model="form.title" placeholder="请输入文章标题" style="width:70%"></el-input>
  47. </el-form-item>
  48. <el-form-item label="文章类型" prop="type">
  49. <div style="line-height:40px">
  50. <el-radio v-model.number="form.type" :label="0">普通文章</el-radio>
  51. <el-radio v-model.number="form.type" :label="1">音频文章</el-radio>
  52. </div>
  53. </el-form-item>
  54. <el-form-item label="音频链接" prop="audio_link" v-if="form.type">
  55. <el-input v-model="form.audio_link" placeholder="请输入音频链接" style="width:70%"></el-input>
  56. <el-button type="primary" @click="openUploadMult('audio_link', '2')">本地上传</el-button>
  57. <div class="tip">注:如是音频类型文章则从装修页面可以选择链接的地方选择音频文章入口链接</div>
  58. </el-form-item>
  59. <el-form-item label="发布作者" prop="author">
  60. <el-input v-model="form.author" placeholder="请输入发布作者" style="width:70%"></el-input>
  61. <div class="tip">注:如果不填文章作者,作者名字默认为平台名称</div>
  62. </el-form-item>
  63. </div>
  64. </div>
  65. <div class="vue-head">
  66. <div class="vue-main-title">
  67. <div class="vue-main-title-left"></div>
  68. <div class="vue-main-title-content">文章内容</div>
  69. </div>
  70. <div class="vue-main-form" v-if="showPage">
  71. <tinymceee v-model="form.content" ref = "tinymceee" :upload_only_text_area="upload_only_text_area"></tinymceee>
  72. </div>
  73. </div>
  74. <div class="vue-head">
  75. <div class="vue-main-title">
  76. <div class="vue-main-title-left"></div>
  77. <div class="vue-main-title-content">SEO/分享设置</div>
  78. </div>
  79. <div class="vue-main-form">
  80. <el-form-item label="文章关键词" prop="keyword">
  81. <el-input v-model="form.keyword" placeholder="请输入文章关键词" style="width:70%"></el-input>
  82. </el-form-item>
  83. <el-form-item label="文章描述" prop="desc">
  84. <el-input v-model="form.desc" placeholder="请输入文章描述" style="width:70%" type="textarea" :rows="5"></el-input>
  85. </el-form-item>
  86. <el-form-item label="文章封面" prop="thumb">
  87. <div class="upload-box" @click="openUpload('thumb')" v-if="!form.thumb_url">
  88. <i class="el-icon-plus" style="font-size:32px"></i>
  89. </div>
  90. <p>建议尺寸: 375 * 286px</p>
  91. <div @click="openUpload('thumb')" class="upload-boxed" v-if="form.thumb_url">
  92. <img :src="form.thumb_url" alt="" style="width:150px;height:150px;border-radius: 5px;cursor: pointer;">
  93. <i class="el-icon-close" @click.stop="clearImg('thumb')" title="点击清除图片"></i>
  94. <div class="upload-boxed-text">点击重新上传</div>
  95. </div>
  96. </el-form-item>
  97. <el-form-item label="原文链接(网页)" prop="link">
  98. <el-input v-model="form.link" style="width:70%;" placeholder=" 请选择链接"></el-input>
  99. <el-button @click="showLink('link','link')">选择链接</el-button>
  100. </el-form-item>
  101. <el-form-item label="原文链接(小程序)" prop="small_link">
  102. <el-input v-model="form.small_link" style="width:70%;" placeholder=" 请选择链接"></el-input>
  103. <el-button @click="showLink('mini','small_link')">选择小程序链接</el-button>
  104. </el-form-item>
  105. </div>
  106. </div>
  107. <div class="vue-main">
  108. <div class="vue-main-title">
  109. <div class="vue-main-title-left"></div>
  110. <div class="vue-main-title-content">底部广告设置</div>
  111. </div>
  112. <div class="vue-main-form">
  113. <el-form-item label="是否开启" prop="advs_type">
  114. <div style="line-height:40px">
  115. <el-switch v-model="form.advs_type" :active-value="1" :inactive-value="0"></el-switch>
  116. </div>
  117. </el-form-item>
  118. <el-form-item label="广告标题" prop="advs_title">
  119. <el-input v-model="form.advs_title" placeholder="请输入广告标题" style="width:70%"></el-input>
  120. </el-form-item>
  121. <el-form-item label="广告文字" prop="advs_title_footer">
  122. <el-input v-model="form.advs_title_footer" placeholder="请输入广告文字" style="width:70%" type="textarea" :rows="5"></el-input>
  123. </el-form-item>
  124. <el-form-item label="广告图片" prop="advs_img">
  125. <div class="upload-box" @click="openUpload('advs_img')" v-if="!form.advs_img_url">
  126. <i class="el-icon-plus" style="font-size:32px"></i>
  127. </div>
  128. <div @click="openUpload('advs_img')" class="upload-boxed" v-if="form.advs_img_url">
  129. <img :src="form.advs_img_url" alt="" style="width:150px;height:150px;border-radius: 5px;cursor: pointer;">
  130. <i class="el-icon-close" @click.stop="clearImg('advs_img')" title="点击清除图片"></i>
  131. <div class="upload-boxed-text">点击重新上传</div>
  132. </div>
  133. <div class="tip">建议尺寸:380*130</div>
  134. </el-form-item>
  135. <el-form-item label="广告链接(网页)" prop="advs_link">
  136. <el-input v-model="form.advs_link" style="width:70%;" placeholder=" 请选择链接"></el-input>
  137. <el-button @click="showLink('link','advs_link')">选择链接</el-button>
  138. </el-form-item>
  139. <el-form-item label="广告链接(小程序)" prop="min_app_advs_link">
  140. <el-input v-model="form.min_app_advs_link" style="width:70%;" placeholder=" 请选择链接"></el-input>
  141. <el-button @click="showLink('mini','min_app_advs_link')">选择小程序链接</el-button>
  142. </el-form-item>
  143. </div>
  144. </div>
  145. </div>
  146. <div style="width:350px">
  147. <div class="vue-head">
  148. <div class="vue-main-title">
  149. <div class="vue-main-title-left"></div>
  150. <div class="vue-main-title-content">发布</div>
  151. </div>
  152. <div class="vue-main-form">
  153. <div style="width:100%;text-align:center;margin:20px 0">
  154. <el-button type="primary" size="small" @click="submitForm('form')">发布</el-button>
  155. <el-button size="small" @click="goBack">返回列表</el-button>
  156. </div>
  157. <el-form-item label="排序" prop="display_order" class="right">
  158. <el-input v-model="form.display_order" placeholder="请输入排序"></el-input>
  159. </el-form-item>
  160. <el-form-item label="是否开启" prop="state" class="right">
  161. <div style="line-height:40px">
  162. <el-switch v-model="form.state" :active-value="1" :inactive-value="0"></el-switch>
  163. </div>
  164. </el-form-item>
  165. <el-form-item label="文章logo" prop="article_logo" class="right">
  166. <div class="upload-box" @click="openUpload('article_logo')" v-if="!form.article_logo_url" style="width:130px;height:80px">
  167. <i class="el-icon-plus" style="font-size:32px"></i>
  168. </div>
  169. <div @click="openUpload('article_logo')" class="upload-boxed" v-if="form.article_logo_url" style="width:130px;height:80px">
  170. <img :src="form.article_logo_url" alt="" style="width:130px;height:80px;border-radius: 5px;cursor: pointer;">
  171. <div class="upload-boxed-text">点击重新上传</div>
  172. </div>
  173. <div class="tip">建议尺寸:180*64</div>
  174. </el-form-item>
  175. <el-form-item label="页面设置" prop="effective_time" class="right">
  176. <el-checkbox :true-label="1" :false-label="0" v-model="form.no_copy_url">禁止复制链接</el-checkbox><br>
  177. <el-checkbox :true-label="1" :false-label="0" v-model="form.no_share">禁止分享朋友圈</el-checkbox><br>
  178. <el-checkbox :true-label="1" :false-label="0" v-model="form.no_share_to_friend">禁止分享好友</el-checkbox>
  179. </el-form-item>
  180. <el-form-item label="举报按钮" prop="report_enabled" class="right">
  181. <el-radio v-model.number="form.report_enabled" :label="1">模拟举报(使用有风险)</el-radio>
  182. <el-radio v-model.number="form.report_enabled" :label="0">不显示</el-radio>
  183. </el-form-item>
  184. <el-form-item label="虚拟阅读量" prop="virtual_read_num" class="right">
  185. <el-input v-model="form.virtual_read_num" placeholder="请输入虚拟阅读量"></el-input>
  186. </el-form-item>
  187. <el-form-item label="虚拟点赞量" prop="virtual_like_num" class="right">
  188. <el-input v-model="form.virtual_like_num" placeholder="请输入虚拟点赞量"></el-input>
  189. </el-form-item>
  190. <el-form-item label="虚拟发布时间" prop="virtual_created_at" class="right">
  191. <!-- <el-input v-model="form.virtual_created_at" placeholder="请输入虚拟发布时间"></el-input> -->
  192. <el-date-picker
  193. v-model="form.virtual_created_at"
  194. value-format="yyyy-MM-dd HH:mm:ss"
  195. type="datetime"
  196. placeholder="选择日期时间">
  197. </el-date-picker>
  198. </el-form-item>
  199. </div>
  200. </div>
  201. @if($wx_article_is_open == 1)
  202. <div class="vue-head" id="wx_article">
  203. <div class="vue-main-title">
  204. <div class="vue-main-title-left"></div>
  205. <div class="vue-main-title-content">微信文章智能抓取</div>
  206. </div>
  207. <div class="vue-main-form">
  208. <el-form-item label="" prop="" class="right1">
  209. <el-form-item prop="wx_link">
  210. <el-input v-model="wx_link" placeholder="请输入微信图文链接地址" style="width:90%" type="textarea" :rows="5"></el-input>
  211. </el-form-item>
  212. </el-form-item>
  213. <div class="confirm-btn" style=" text-align: center;">
  214. <el-button type="primary" @click="capture">抓取</el-button>
  215. </div>
  216. </div>
  217. </div>
  218. @endif
  219. <div class="vue-head" id="category">
  220. <div class="vue-main-title">
  221. <div class="vue-main-title-left"></div>
  222. <div class="vue-main-title-content">选择分类</div>
  223. </div>
  224. <div class="vue-main-form">
  225. <el-form-item label="" prop="" class="right1">
  226. <el-checkbox-group v-model="form.checklist">
  227. <span v-for="(item,index) in categorys" :key="index" >
  228. <el-radio v-model="form.category_id" :label="item.id">[[item.name]]</el-radio><br>
  229. </span>
  230. </el-checkbox-group>
  231. <div>
  232. <el-link style="color:#29BA9C" :underline="false" @click="openCategory">
  233. <i class="el-icon-plus"></i>添加新分类
  234. </el-link>
  235. </div>
  236. </el-form-item>
  237. <div v-show="is_category">
  238. <el-form-item label="新分类名称" prop="category_name" class="right" size="mini">
  239. <el-input v-model="category_name" placeholder="请输入新分类名称"></el-input>
  240. </el-form-item>
  241. <el-form-item label=""size="mini" class="right">
  242. <el-button size="mini" @click="addCategory">添加分类</el-button>
  243. </el-form-item>
  244. </div>
  245. </div>
  246. </div>
  247. <div class="vue-head">
  248. <div class="vue-main-title">
  249. <div class="vue-main-title-left"></div>
  250. <div class="vue-main-title-content">会员等级浏览权限</div>
  251. </div>
  252. <div class="vue-main-form">
  253. <el-form-item label="" prop="" class="right1">
  254. <el-checkbox v-model="all_level" :true-label="1" :false-label="0" @change="changeLevel('all')">全部会员等级</el-checkbox><br>
  255. <el-checkbox-group v-model="form.show_levels">
  256. <span>
  257. <el-checkbox label="0" @change="changeLevel(0)">普通等级</el-checkbox><br>
  258. </span>
  259. <span v-for="(item,index) in levels" :key="index" >
  260. <el-checkbox :label="String(item.id)" @change="changeLevel(item.id)">[[item.level_name]]</el-checkbox><br>
  261. </span>
  262. </el-checkbox-group>
  263. </el-form-item>
  264. </div>
  265. </div>
  266. <div class="vue-head">
  267. <div class="vue-main-title">
  268. <div class="vue-main-title-left"></div>
  269. <div class="vue-main-title-content">营销设置</div>
  270. </div>
  271. <div class="vue-main-form">
  272. <el-form-item label="奖励方式" prop="reward_mode" class="right2">
  273. <div style="line-height:40px">
  274. <el-radio v-model.number="form.reward_mode" :label="0">按次</el-radio>
  275. <el-radio v-model.number="form.reward_mode" :label="1">按天</el-radio>
  276. </div>
  277. </el-form-item>
  278. <el-form-item label="最高累计奖金" prop="bonus_total" class="right2">
  279. <el-input v-model="form.bonus_total" placeholder="请输入最高累计奖金">
  280. <template slot="append">元</template>
  281. </el-input>
  282. <div class="tip">已奖励:[[bonus_sum||'0']]元</div>
  283. </el-form-item>
  284. <el-form-item label="每人每天奖励" prop="per_person_per_day" class="right2">
  285. <el-input v-model="form.per_person_per_day" placeholder="请输入每人每天奖励">
  286. <template slot="append">次</template>
  287. </el-input>
  288. </el-form-item>
  289. <el-form-item label="每人总共奖励" prop="total_per_person" class="right2">
  290. <el-input v-model="form.total_per_person" placeholder="请输入每人总共奖励">
  291. <template slot="append">次</template>
  292. </el-input>
  293. </el-form-item>
  294. <el-form-item label="分享一次奖励" prop="point" class="right2">
  295. <el-input v-model="form.point" placeholder="请输入分享一次奖励">
  296. <template slot="append">个积分</template>
  297. </el-input>
  298. <div style="margin-top:15px">
  299. <el-input v-model="form.credit" placeholder="请输入分享一次奖励">
  300. <template slot="append">元余额</template>
  301. </el-input>
  302. </div>
  303. </el-form-item>
  304. <el-form-item label="会员领取权限" class="right2">
  305. <el-radio v-model="form.is_member_receive_rule" :label="1">开启</el-radio>
  306. <el-radio v-model="form.is_member_receive_rule" :label="0">关闭</el-radio>
  307. </el-form-item>
  308. <el-form-item label="会员等级权限" class="right2 receive-levels">
  309. <el-checkbox-group v-model="form.receive_levels" class="el-checkbox-group-style">
  310. <el-checkbox :label="item.id" v-for="(item,index) in levels" :key="index">[[item.level_name]]</el-checkbox><br>
  311. </el-checkbox-group>
  312. </el-form-item>
  313. <div class="tip">奖励规则提示:分享后,好友点击进入后,才算成功分享一次。</div>
  314. <div class="tip">奖励方式:1、按次,一篇文章同一个浏览者只奖励分享者一次积分/余额(只奖励首次浏览)。</div>
  315. <div class="tip">2、按天,一篇文章同一个浏览者每天点击浏览,每天奖励分享者一次积分/余额(只奖励每天首次浏览)。</div>
  316. <div class="tip">3、开启后,勾选到的等级才能获取奖励。</div>
  317. </div>
  318. </div>
  319. </div>
  320. </div>
  321. </el-form>
  322. <!--end-->
  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. <upload-img :upload-show="uploadShow" :name="chooseImgName" @replace="changeProp" @sure="sureImg"></upload-img>
  331. <pop :show="show" @replace="changeLink" @add="parHref"></pop>
  332. <program :pro="pro" @replacepro="changeprogram" @addpro="parpro"></program>
  333. <upload-multimedia-img :upload-show="uploadShowMult"
  334. :type="typeStatusMult"
  335. :name="chooseImgNameMult"
  336. :sel-Num="selNumMult"
  337. :platform-type="platformType"
  338. @replace="changePropMult"
  339. @sure="sureImgMult">
  340. </upload-multimedia-img>
  341. </div>
  342. </div>
  343. <script src="{{resource_get('static/yunshop/tinymce4.7.5/tinymce.min.js')}}"></script>
  344. @include('Yunshop\Article::admin.tinymceee')
  345. @include('public.admin.uploadImg')
  346. @include('public.admin.pop')
  347. @include('public.admin.program')
  348. <script>
  349. let upload_url = `{!! $upload_url?:'' !!}`
  350. let id = {!! $id?:'0' !!}
  351. console.log(id)
  352. var app = new Vue({
  353. el:"#app",
  354. delimiters: ['[[', ']]'],
  355. name: 'test',
  356. data() {
  357. return{
  358. uploadShowMult: false,
  359. typeStatusMult: '',
  360. selNumMult: '',
  361. platformType: '1',
  362. chooseImgNameMult: '',
  363. showPage: false,
  364. upload_only_text_area:'',
  365. show:false,//是否开启公众号弹窗
  366. pro:false ,//是否开启小程序弹窗
  367. chooseLink:'',
  368. chooseMiniLink:'',
  369. upload_url:upload_url,
  370. bonus_sum:'',//已奖励
  371. wx_link:'',//需要抓取的微信文章链接
  372. form:{
  373. title:'',
  374. type:'',
  375. audio_link:'',
  376. author:'',
  377. content:'',
  378. keyword:'',
  379. desc:'',
  380. thumb:'',
  381. link:'',
  382. small_link:'',
  383. advs_type:'',
  384. advs_title:'',
  385. advs_title_footer:'',
  386. advs_img:'',
  387. advs_link:'',
  388. display_order:'',
  389. state:1,
  390. no_copy_url:0,
  391. no_share:0,
  392. no_share_to_friend:0,
  393. report_enabled:0,
  394. virtual_read_num:'0',
  395. virtual_like_num:'0',
  396. virtual_created_at: this.timeStyle(new Date()),
  397. category_id:'',
  398. show_levels:[],
  399. reward_mode:0,
  400. bonus_total:'0',
  401. per_person_per_day:'0',
  402. total_per_person:'0',
  403. point:'0',
  404. credit:'0',
  405. min_app_advs_link:'',
  406. article_logo:'',
  407. is_member_receive_rule:1, //会员领取权限
  408. receive_levels:[], //会员等级权限
  409. },
  410. all_level:1,
  411. categorys:[],
  412. levels:[],
  413. is_category:false,
  414. category_name:'',
  415. id:id,
  416. submit_url:'',
  417. uploadShow:false,
  418. chooseImgName:'',
  419. chooseIndex:-1,
  420. type:0,
  421. goods_show:false,
  422. goods_list:[],
  423. search_goods:{},
  424. choosed_goods:{},
  425. choosed_goods_id:'',
  426. goods_total:1,
  427. goods_current_page:1,
  428. goods_per_page:1,
  429. rules:{
  430. name:{ required: true, message: '请输入品牌名称'}
  431. },
  432. }
  433. },
  434. created() {
  435. if(this.id) {
  436. this.submit_url = "{!! yzWebFullUrl('plugin.article.admin.article-vue.edit') !!}"
  437. }
  438. else {
  439. this.submit_url = "{!! yzWebFullUrl('plugin.article.admin.article-vue.add') !!}"
  440. }
  441. this.getData();
  442. },
  443. mounted() {
  444. },
  445. methods: {
  446. //抓取微信文章内容
  447. capture(){
  448. if(!this.wx_link) {
  449. this.$message({type: 'error',message: '抓取链接不能为空!'});
  450. return
  451. }
  452. // "http://mp.weixin.qq.com/s?__biz=MjM5NDAwMTA2MA==&mid=2695729619&idx=1&sn=8be0b6bd0210cee0d492ebdf20f7371f&chksm=83d74818b4a0c10ef286b33bb7deb73226125f866ddb5b2781166066a69afef3705eabdb3b85#rd
  453. let loading = this.$loading({target:document.querySelector("#goods-list"),background: 'rgba(0, 0, 0, 0)'});
  454. this.$http.post("{!! yzWebFullUrl('plugin.wx-article.api.wx-article.get-wx-article') !!}",{wx_link:this.wx_link}).then(response => {
  455. var data = response.data;
  456. if (data.code == 1) {
  457. this.$message({message: data.msg,type: 'error'});
  458. } else {
  459. app.$refs.tinymceee.hasChange = false;//让其监听改变回显
  460. this.form.content += data.data.content_html;tinymceee.value = data.data.content_html;
  461. this.$message({type: 'success',message: data.msg});
  462. }
  463. loading.close();
  464. },response => {
  465. loading.close();
  466. });
  467. },
  468. getData() {
  469. let json = {}
  470. if(this.id) {
  471. json.id = this.id
  472. }
  473. let loading = this.$loading({target:document.querySelector("#goods-list"),background: 'rgba(0, 0, 0, 0)'});
  474. this.$http.post(this.submit_url,json).then(response => {
  475. if(response.data.result == 1) {
  476. if (response.data.result) {
  477. this.categorys = response.data.data.categorys;
  478. this.levels = response.data.data.levels;
  479. this.bonus_sum = response.data.data.bonus_sum;
  480. if(this.id) {
  481. this.form = response.data.data.article
  482. this.form.receive_levels = this.form.receive_levels !== null ? this.form.receive_levels : [];
  483. console.log(this.form);
  484. }
  485. if(this.form.show_levels=='' || this.form.show_levels.length==0) {
  486. this.all_level = 1;
  487. this.form.show_levels = []
  488. }
  489. else {
  490. this.all_level = 0;
  491. }
  492. } else {
  493. this.$message({message: response.data.msg,type: 'error'});
  494. }
  495. }
  496. else {
  497. this.$message.error(response.data.msg)
  498. }
  499. this.showPage = true;
  500. loading.close();
  501. }, response => {
  502. console.log(response);
  503. loading.close();
  504. });
  505. },
  506. openUpload(str,index,type) {
  507. this.chooseImgName = str;
  508. this.uploadShow = true;
  509. this.chooseIndex = index;
  510. this.type = '2';
  511. },
  512. changeProp(val) {
  513. if(val == true) {
  514. this.uploadShow = false;
  515. }
  516. else {
  517. this.uploadShow = true;
  518. }
  519. },
  520. sureImg(name,image,img_url) {
  521. if(this.type==1) {
  522. this.form[name][this.chooseIndex]['img_url'] = image;
  523. this.form[name][this.chooseIndex]['full_img_url'] = img_url;
  524. }
  525. else {
  526. this.form[name] = image;
  527. this.form[name+'_url'] = img_url;
  528. }
  529. },
  530. clearImg(str,index,type) {
  531. if(!type) {
  532. this.form[str] = "";
  533. this.form[str+'_url'] = "";
  534. }
  535. else if(type==1){
  536. this.form[str][index].full_img_url = '';
  537. this.form[str][index].img_url = '';
  538. }
  539. this.$forceUpdate();
  540. },
  541. submitForm(formName) {
  542. console.log(this.form)
  543. let json = {
  544. title:this.form.title,
  545. type:this.form.type,
  546. audio_link:this.form.audio_link,
  547. author:this.form.author,
  548. content:this.form.content,
  549. keyword:this.form.keyword,
  550. desc:this.form.desc,
  551. thumb:this.form.thumb,
  552. link:this.form.link,
  553. small_link:this.form.small_link,
  554. advs_type:this.form.advs_type,
  555. advs_title:this.form.advs_title,
  556. advs_title_footer:this.form.advs_title_footer,
  557. advs_img:this.form.advs_img,
  558. advs_link:this.form.advs_link,
  559. display_order:this.form.display_order,
  560. state:this.form.state,
  561. no_copy_url:this.form.no_copy_url,
  562. no_share:this.form.no_share,
  563. no_share_to_friend:this.form.no_share_to_friend,
  564. report_enabled:this.form.report_enabled,
  565. virtual_read_num:this.form.virtual_read_num,
  566. virtual_like_num:this.form.virtual_like_num,
  567. virtual_created_at:this.form.virtual_created_at,
  568. category_id:this.form.category_id,
  569. reward_mode:this.form.reward_mode,
  570. bonus_total:this.form.bonus_total,
  571. per_person_per_day:this.form.per_person_per_day,
  572. total_per_person:this.form.total_per_person,
  573. point:this.form.point,
  574. credit:this.form.credit,
  575. min_app_advs_link:this.form.min_app_advs_link,
  576. article_logo:this.form.article_logo,
  577. is_member_receive_rule:this.form.is_member_receive_rule, //会员领取权限
  578. receive_levels:this.form.receive_levels, //会员等级权限
  579. };
  580. if(this.all_level) {
  581. json.show_levels = []
  582. }
  583. if(this.form.show_levels.length>=0) {
  584. json.show_levels = this.form.show_levels
  585. }
  586. let json1 = {
  587. article:json
  588. }
  589. if(this.id) {
  590. json1.id = this.id
  591. }
  592. this.$refs[formName].validate((valid) => {
  593. if (valid) {
  594. let loading = this.$loading({target:document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  595. this.$http.post(this.submit_url,json1).then(response => {
  596. if (response.data.result) {
  597. this.$message({type: 'success',message: '操作成功!'});
  598. this.goBack();
  599. } else {
  600. this.$message({message: response.data.msg,type: 'error'});
  601. }
  602. loading.close();
  603. },response => {
  604. loading.close();
  605. });
  606. }
  607. else {
  608. console.log('error submit!!');
  609. return false;
  610. }
  611. });
  612. },
  613. openCategory() {
  614. this.is_category = true;
  615. this.category_name = '';
  616. },
  617. addCategory() {
  618. if(!this.category_name) {
  619. this.$message({type: 'error',message: '分类名不能为空!'});
  620. return
  621. }
  622. let loading = this.$loading({target:document.querySelector("#category"),background: 'rgba(0, 0, 0, 0)'});
  623. this.$http.post("{!! yzWebFullUrl('plugin.article.admin.article-vue.add-category') !!}",{name:this.category_name}).then(response => {
  624. if (response.data.result) {
  625. this.$message({type: 'success',message: '添加成功!'});
  626. this.is_category = false;
  627. this.categorys = response.data.data
  628. } else {
  629. this.$message({message: response.data.msg,type: 'error'});
  630. }
  631. loading.close();
  632. },response => {
  633. loading.close();
  634. });
  635. },
  636. changeLevel(val) {
  637. console.log(val);
  638. if(val=='all') {
  639. this.form.show_levels = []
  640. }
  641. else {
  642. if(this.form.show_levels.length>0) {
  643. this.all_level = 0;
  644. }
  645. }
  646. },
  647. isNumber(index,type,key) {
  648. console.log(this.form[key][index][type])
  649. if(type=='quantity'){
  650. this.form[key][index][type] = this.form[key][index][type].replace(/[^\d]/g,'')
  651. }
  652. else if(type=='single_consumption'){
  653. this.form[key][index][type] = this.form[key][index][type].replace(/[^\d]/g,'')
  654. }
  655. else if(type=='price') {
  656. this.form[key][index][type] = this.form[key][index][type].replace(/[^\d.]/g,'')
  657. this.form[key][index][type] = this.form[key][index][type].replace(/\.{2,}/g, ".");
  658. this.form[key][index][type] = this.form[key][index][type].replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
  659. }
  660. },
  661. // 字符转义
  662. escapeHTML(a) {
  663. a = "" + a;
  664. return a.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, "\"").replace(/&apos;/g, "'");;
  665. },
  666. goBack() {
  667. history.go(-1)
  668. },
  669. goParent() {
  670. window.location.href = `{!! yzWebFullUrl('plugin.article.admin.article.index') !!}`;
  671. },
  672. //弹窗显示与隐藏的控制
  673. changeLink(item){
  674. this.show=item;
  675. },
  676. //当前链接的增加
  677. parHref(child,confirm){
  678. this.show=confirm;
  679. // this.form.link=child;
  680. let arr = []
  681. if(this.chooseLink.indexOf(".") != -1) {
  682. arr = this.chooseLink.split(".")
  683. this.form[arr[0]][arr[1]] = child;
  684. }
  685. else {
  686. this.form[this.chooseLink] = child;
  687. }
  688. },
  689. changeprogram(item){
  690. this.pro=item;
  691. },
  692. parpro(child,confirm){
  693. this.pro=confirm;
  694. // this.form.prolink=child;
  695. let arr = []
  696. if(this.chooseMiniLink.indexOf(".") != -1) {
  697. arr = this.chooseMiniLink.split(".")
  698. this.form[arr[0]][arr[1]] = child;
  699. }
  700. else {
  701. this.form[this.chooseMiniLink] = child;
  702. }
  703. },
  704. showLink(type,name) {
  705. if(type=="link") {
  706. this.chooseLink = name;
  707. this.show = true;
  708. }
  709. else {
  710. this.chooseMiniLink = name;
  711. this.pro = true;
  712. }
  713. },
  714. timeStyle(time) {
  715. let time1 = new Date(time);
  716. let y = time1.getFullYear();
  717. let m = time1.getMonth()+1;
  718. let d = time1.getDate();
  719. let h = time1.getHours();
  720. let mm = time1.getMinutes();
  721. let s = time1.getSeconds();
  722. return y+'-'+this.add0(m)+'-'+this.add0(d)+' '+this.add0(h)+':'+this.add0(mm)+':'+this.add0(s);
  723. },
  724. add0(m) {
  725. return m<10?'0'+m:m
  726. },
  727. openUploadMult(str, typeStatus) {
  728. this.uploadShowMult = true;
  729. this.chooseImgNameMult = str;
  730. this.typeStatusMult = typeStatus
  731. this.selNumMult = 'one'
  732. },
  733. changePropMult(val) {
  734. if (val == true) {
  735. this.uploadShowMult = false;
  736. } else {
  737. this.uploadShowMult = true;
  738. }
  739. },
  740. sureImgMult(name, uploadShow, fileList) {
  741. if (fileList.length <= 0) {
  742. return
  743. }
  744. console.log(this.form, fileList[0].attachment, fileList[0].url)
  745. this.$http.post("{!! yzWebFullUrl('plugin.article.admin.article-vue.format-audio-link') !!}",{ url : fileList[0].attachment}).then(response => {
  746. if (response.data.result) {
  747. this.form.audio_link = response.data.data
  748. }
  749. })
  750. }
  751. },
  752. })
  753. </script>
  754. @endsection