index.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. <?php
  2. /**
  3. * @link:http://www.goodmall.com/
  4. * @copyright: Copyright (c) 2020
  5. * Author: james
  6. * Date: 2020-04-20
  7. * Time: 15:41
  8. */
  9. use common\helpers\ComponentHelper;
  10. ComponentHelper::loadComponentView('com-dialog-select');
  11. ?>
  12. <style>
  13. @media screen and (min-width:1370px) {
  14. .form-body {
  15. padding: 20px 0;
  16. padding-right: 50%;
  17. min-width: 1400px;
  18. }
  19. }
  20. @media screen and (max-width:1369px) {
  21. .form-body {
  22. padding: 20px 0;
  23. padding-right: 20%;
  24. }
  25. }
  26. .form-body {
  27. background-color: #fff;
  28. margin-bottom: 20px;
  29. }
  30. .form-button {
  31. margin: 0 !important;
  32. }
  33. .form-button .el-form-item__content {
  34. margin-left: 0 !important;
  35. }
  36. .button-item {
  37. padding: 9px 25px;
  38. }
  39. .agent-item-input {
  40. display: flex;
  41. align-items: center;
  42. margin-top: 16px;
  43. }
  44. .agent-item-input .item-lab-title {
  45. width: 80px;
  46. margin-right: 20px;
  47. }
  48. </style>
  49. <div id="app" v-cloak>
  50. <el-card style="border:0;min-width: 800px;" shadow="never" body-style="background-color: #f3f3f3;padding: 10px 0 0;" v-loading="loading">
  51. <div slot="header">基础设置</div>
  52. <div v-if="load">
  53. <div class="form-body">
  54. <el-form ref="form" :model="form" :rules="rules" label-width="120px" size="small">
  55. <el-form-item label="插件是否开启" prop="is_enabled">
  56. <el-switch v-model="form.is_enabled" :active-value="1" :inactive-value="0" active-text="开启" inactive-text="关闭">
  57. </el-switch>
  58. <div class="tips-text" style="line-height: 24px;">
  59. 是否开启短视频功能
  60. </div>
  61. </el-form-item>
  62. <el-form-item label="推广中心显示" prop="is_show_at_center">
  63. <div>
  64. <el-switch v-model="form.is_show_at_center" :active-value="1" :inactive-value="0" active-text="开启" inactive-text="关闭">
  65. </el-switch>
  66. </div>
  67. </el-form-item>
  68. <el-form-item label="是否需要审核" prop="is_check">
  69. <el-switch v-model="form.is_check" :active-value="1" :inactive-value="0" active-text="开启" inactive-text="关闭">
  70. </el-switch>
  71. <div class="tips-text" style="line-height: 24px;">
  72. 用户发布的视频是否需要后台审核才在前端展示
  73. </div>
  74. </el-form-item>
  75. <!-- 全局带货奖励 -->
  76. <el-form-item label="全局带货奖励" prop="award_status">
  77. <el-switch v-model="form.award_status" :active-value="1" :inactive-value="0" active-text="开启" inactive-text="关闭" @change="awardChange">
  78. </el-switch>
  79. <div v-if="form.award_status==1">
  80. <el-radio v-model="form.award_type" :label="0">金额</el-radio>
  81. <el-radio v-model="form.award_type" :label="1">百分比</el-radio>
  82. </div>
  83. <div class="tips-text" style="line-height: 24px;">
  84. 短视频是否有带货奖励。开启后,发布者发布视频时关联上商城商品,其他用户点击视频下方的商品购买后,该发布者获得奖励.
  85. </div>
  86. </el-form-item>
  87. <el-form-item v-if="form.award_status==1 && form.award_type==0" label="" prop="award_money">
  88. <el-input type="number" :min="0" class="member-money" v-model="form.award_money" placeholder="">
  89. <template slot="append">元</template>
  90. </el-input>
  91. </el-form-item>
  92. <el-form-item v-if="form.award_status==1 && form.award_type==1" label="" prop="award_percentage">
  93. <el-input type="number" :min="0" class="member-money" v-model="form.award_percentage" placeholder="">
  94. <template slot="append">%</template>
  95. </el-input>
  96. </el-form-item>
  97. <!-- 发布权限 -->
  98. <el-form-item label="发布权限" prop="status,purchase_times">
  99. <el-switch v-model="form.release_rule" :active-value="1" :inactive-value="0" active-text="有条件" inactive-text="无条件">
  100. </el-switch>
  101. <div v-if="form.release_rule==1">
  102. <el-checkbox-group @change="checkBoxArr" v-model="checkedCities1">
  103. <el-checkbox v-for="(city, index) in cities" :label="index" :key="city">{{city}}</el-checkbox>
  104. </el-checkbox-group>
  105. </div>
  106. <div class="tips-text" style="line-height: 24px;">
  107. 发布视频的权限。如果三个条件都选择的话,那么需要用户同时满足这三个条件才会升级。
  108. </div>
  109. </el-form-item>
  110. <el-form-item v-for="(item, index) in checkedCities1" :key="index" v-if="form.release_rule==1 && item==0" label="消费次数" prop="purchase_times">
  111. <el-input type="number" :min="0" v-model="form.purchase_times" class="member-money" placeholder="">
  112. <template slot="append">次</template>
  113. </el-input>
  114. </el-form-item>
  115. <el-form-item v-for="(item, index) in checkedCities1" :key="index" v-if="form.release_rule==1 && item==1" label="消费金额" prop="purchase_cost">
  116. <el-input type="number" :min="0" v-model="form.purchase_cost" class="member-money" placeholder="">
  117. <template slot="append">元</template>
  118. </el-input>
  119. </el-form-item>
  120. <el-form-item v-for="(item, index) in checkedCities1" :key="index" v-if="form.release_rule==1 && item==2" label="消费商品" prop="purchase_goods_id">
  121. <com-dialog-select :multiple="false" @selected="goodsSelect" title="商品选择">
  122. <el-button type="text">选择商品</el-button>
  123. </com-dialog-select>
  124. </el-form-item>
  125. <el-form-item v-if="form.purchase_goods_id && form.release_rule==1" prop="purchase_goods_id">
  126. <template>
  127. <div style="color: #ff4544;">最多可关联1个商品</div>
  128. <div style="max-height: 300px;overflow-y: auto">
  129. <el-table :data="selectedGoodList" :show-header="false" border>
  130. <el-table-column label="">
  131. <template slot-scope="scope">
  132. <div flex>
  133. <div style="padding-right: 10px;flex-grow: 0">
  134. <com-image mode="aspectFill" :src="scope.row.cover_pic"></com-image>
  135. </div>
  136. <div style="flex-grow: 1;">
  137. <com-ellipsis :line="2">{{scope.row.goods_name}}</com-ellipsis>
  138. <com-ellipsis :line="2">{{scope.row.price}}</com-ellipsis>
  139. </div>
  140. <div style="flex-grow: 0;">
  141. <el-button @click="deleteGoods(scope.$index)" type="text" circle size="mini">
  142. 删除
  143. </el-button>
  144. </div>
  145. </div>
  146. </template>
  147. </el-table-column>
  148. </el-table>
  149. </div>
  150. </template>
  151. </el-form-item>
  152. <!-- 敏感词过滤 -->
  153. <el-form-item label="评论敏感词过滤" prop="status">
  154. <el-switch @change="CheckSwich" v-model="form.client_status" :active-value="1" :inactive-value="0" active-text="开启" inactive-text="关闭">
  155. </el-switch>
  156. <div class="tips-text" style="line-height: 24px;">
  157. 评论敏感词过滤配置,可联系七件事客服获取申请敏感词的教程
  158. </div>
  159. </el-form-item>
  160. <el-form-item label="随机播放" prop="status">
  161. <el-switch v-model="form.is_shuffle" :active-value="1" :inactive-value="0" active-text="开启" inactive-text="关闭">
  162. </el-switch>
  163. <div class="tips-text" style="line-height: 24px;">
  164. 开启后将无法使用视频置顶功能
  165. </div>
  166. </el-form-item>
  167. <el-form-item label="自定义分享标题">
  168. <label slot="label">
  169. <span>自定义分享标题</span>
  170. <el-tooltip effect="dark" content="分享给好友时,作为分享标题" placement="top">
  171. <i class="el-icon-info"></i>
  172. </el-tooltip>
  173. </label>
  174. <el-input type="text" v-model="form.share_title" class="member-money" placeholder="">
  175. </el-input>
  176. <div class="tips-text" style="line-height: 24px;">
  177. 用户分享短视频页面时,显示的标题
  178. </div>
  179. </el-form-item>
  180. <el-form-item label="自定义分享内容">
  181. <label slot="label">
  182. <span>自定义分享内容</span>
  183. <el-tooltip effect="dark" content="分享给好友时,作为分享内容" placement="top">
  184. <i class="el-icon-info"></i>
  185. </el-tooltip>
  186. </label>
  187. <el-input type="text" v-model="form.share_content" class="member-money" placeholder="">
  188. </el-input>
  189. <div class="tips-text" style="line-height: 24px;">
  190. 用户分享短视频页面时,显示的描述
  191. </div>
  192. </el-form-item>
  193. <el-form-item prop="share_img">
  194. <label slot="label">
  195. <span>自定义分享图片</span>
  196. <el-tooltip effect="dark" content="分享给好友时,作为分享图片" placement="top">
  197. <i class="el-icon-info"></i>
  198. </el-tooltip>
  199. </label>
  200. <com-attachment v-model="form.share_img" :multiple="false" :max="1">
  201. <el-tooltip class="item" effect="dark" content="" placement="top">
  202. <el-button size="mini">选择图片</el-button>
  203. </el-tooltip>
  204. </com-attachment>
  205. <div class="customize-share-img">
  206. <com-image mode="aspectFill" width='80px' height='80px' :src="form.share_img ? form.share_img : ''"></com-image>
  207. <el-button v-if="form.share_img" class="del-btn" size="mini" type="danger" icon="el-icon-close" circle @click="form.share_img = ''"></el-button>
  208. </div>
  209. <div class="tips-text" style="line-height: 24px;">
  210. 用户分享短视频页面时,显示的图片
  211. </div>
  212. </el-form-item>
  213. <el-form-item label="用户协议" prop="agreement">
  214. <el-input v-model.number="form.agreement" type="textarea" :rows="10" style="width: 50%" placeholder="用户协议"></el-input>
  215. </el-form-item>
  216. </el-form>
  217. </div>
  218. <el-button class="button-item" :loading="btnLoading" type="primary" size="small" @click="store('form')" style="margin-bottom: 15px;">保存</el-button>
  219. </div>
  220. </el-card>
  221. </div>
  222. <script>
  223. const app = new Vue({
  224. el: '#app',
  225. data() {
  226. return {
  227. testSelect: '',
  228. loading: false,
  229. load: false,
  230. btnLoading: false,
  231. selectedGoodList: [],
  232. checkedCities1: [0], //这个放多选选中的项
  233. cities: ['消费次数', '消费金额', '消费商品'],
  234. form: {
  235. is_enabled: 0, //是否开启插件
  236. is_show_at_center: 1, //是否开启插件
  237. is_check: 0, //是否需要审核
  238. release_rule: 0, //发布权限
  239. award_status: 0, //是否开启带货奖励
  240. award_type: 0,
  241. award_money: 0,
  242. award_percentage: 0,
  243. purchase_times_status: 1, //有条件发布
  244. purchase_times: 0,
  245. purchase_cost_status: 1,
  246. purchase_cost: 0,
  247. purchase_goods_status: 1,
  248. purchase_goods_id: 0,
  249. client_status: 0, //文本审核
  250. video_lenght: 0, //视频时长
  251. // client_id: "",
  252. // client_secret: "",
  253. agreement: '', //视频协议
  254. start_up_diagram: '',
  255. share_img: '',
  256. share_title: '',
  257. share_content: '',
  258. is_can_use_sensitive: false, // 是否可以打开敏感词检测
  259. is_shuffle: 0,
  260. },
  261. rules: {
  262. award_money: [{
  263. required: true,
  264. message: '请填写全局带货奖励金额',
  265. trigger: 'change'
  266. }, ],
  267. award_percentage: [{
  268. required: true,
  269. message: '请填写全局带货奖励百分比',
  270. trigger: 'change'
  271. }, ],
  272. purchase_times: [{
  273. required: true,
  274. message: '请填写消费次数',
  275. trigger: 'change'
  276. }, ],
  277. purchase_cost: [{
  278. required: true,
  279. message: '请填写消费金额',
  280. trigger: 'change'
  281. }, ],
  282. purchase_goods_id: [{
  283. required: true,
  284. message: '请选择消费商品',
  285. trigger: 'change'
  286. }, ],
  287. client_secret: [{
  288. required: true,
  289. message: '请填写文本审核Secret Key',
  290. trigger: 'change'
  291. }, ],
  292. client_id: [{
  293. required: true,
  294. message: '请填写文本审核API Key',
  295. trigger: 'change'
  296. }, ],
  297. video_lenght: [{
  298. required: true,
  299. message: '请填写发布视频时长',
  300. trigger: 'change'
  301. }, ],
  302. agreement: [{
  303. required: true,
  304. message: '请填写用户协议',
  305. trigger: 'change'
  306. }, ],
  307. },
  308. };
  309. },
  310. created() {
  311. this.getDepartment();
  312. },
  313. methods: {
  314. // 0.1 全局带货swich切换
  315. awardChange() {
  316. this.form.award_type = 0;
  317. this.form.award_money = 0;
  318. this.form.award_percentage = 0;
  319. },
  320. // select的change事件
  321. selectChange() {
  322. if (this.is_default_goods) {
  323. this.is_default_goods = false;
  324. }
  325. },
  326. // 敏感词检测开关切换
  327. CheckSwich(val) {
  328. if (val == 1 && !this.is_can_use_sensitive) {
  329. this.$alert('系统尚未配置百度敏感词检测功能,请先到 设置->商城设置->敏感词过滤 配置相应数据', '提示', {
  330. confirmButtonText: '确定',
  331. });
  332. this.form.client_status = 0;
  333. return false;
  334. }
  335. },
  336. // 0.0.1 选中状态的值
  337. checkBoxArr() {
  338. console.log(this.checkedCities1);
  339. },
  340. // 0.1 拿商品信息和回显数据
  341. getDepartment() {
  342. request({
  343. params: {
  344. r: 'short-video/config/goods-list',
  345. limit: 100,
  346. },
  347. }).then(e => {
  348. if (e.data.code === 0) {
  349. this.purchase_goods = e.data.data;
  350. this.loadData();
  351. } else {
  352. }
  353. this.load = true;
  354. })
  355. },
  356. // 0.2 拿到设置信息
  357. loadData() {
  358. this.loading = true;
  359. request({
  360. params: {
  361. r: 'short-video/default/basic-setting'
  362. }
  363. }).then(e => {
  364. this.loading = false;
  365. if (e.data.code == 0) {
  366. this.is_can_use_sensitive = e.data.data.is_can_use_sensitive;
  367. this.selectedGoodList = e.data.data.good;
  368. if (e.data.data.config) {
  369. // 判断后台传来的参数和form的参数长度是否一致
  370. for (let item in this.form) {
  371. if (!e.data.data.config.hasOwnProperty(item)) {
  372. e.data.data.config[item] = this.form[item];
  373. }
  374. }
  375. this.form = e.data.data.config;
  376. let checkedCities1 = [];
  377. if (this.form.purchase_times_status) {
  378. checkedCities1.push(0);
  379. }
  380. if (this.form.purchase_cost_status) {
  381. checkedCities1.push(1);
  382. }
  383. if (this.form.purchase_goods_status) {
  384. checkedCities1.push(2);
  385. }
  386. this.checkedCities1 = checkedCities1;
  387. }
  388. this.load = true;
  389. } else {
  390. this.$message.error(e.data.msg);
  391. }
  392. }).catch(e => {
  393. this.btnLoading = false;
  394. });
  395. },
  396. // 提交表单
  397. store(formName) {
  398. console.log(this.form);
  399. this.$refs[formName].validate((valid) => {
  400. if (valid) {
  401. this.btnLoading = true;
  402. let postForm = this.form;
  403. if (this.is_default_goods) {
  404. postForm.purchase_goods_id = this.default_goods_id;
  405. }
  406. if (postForm.release_rule == 1) { //如果发布权限开关打开
  407. // 查询多选选中状态
  408. postForm.purchase_times_status = 0;
  409. postForm.purchase_cost_status = 0;
  410. postForm.purchase_goods_status = 0;
  411. if (this.checkedCities1.length == 0) {
  412. this.$message.error('请完善发布权限对应条件');
  413. this.btnLoading = false;
  414. return false;
  415. } else {
  416. this.checkedCities1.forEach(item => {
  417. console.log(item);
  418. item == 0 ? postForm.purchase_times_status = 1 : '';
  419. item == 1 ? postForm.purchase_cost_status = 1 : '';
  420. item == 2 ? postForm.purchase_goods_status = 1 : '';
  421. });
  422. }
  423. if (postForm.purchase_goods_status == 1 && !this.selectedGoodList.length) {
  424. this.$message.error('请选择消费商品');
  425. this.btnLoading = false;
  426. return false;
  427. }
  428. }
  429. // console.log(postForm);
  430. // return
  431. request({
  432. params: {
  433. r: 'short-video/default/basic-setting'
  434. },
  435. method: 'post',
  436. data: {
  437. // form: JSON.stringify(postForm),
  438. form: postForm
  439. }
  440. }).then(e => {
  441. this.btnLoading = false;
  442. if (e.data.code == 0) {
  443. this.$message.success(e.data.msg);
  444. this.loadData();
  445. } else {
  446. this.$message.error(e.data.msg)
  447. }
  448. }).catch(e => {
  449. // this.$message.error(e);
  450. this.btnLoading = false;
  451. });
  452. } else {
  453. this.btnLoading = false;
  454. return false;
  455. }
  456. })
  457. },
  458. // 选择商品回调
  459. goodsSelect(good) {
  460. let good_obj = {};
  461. this.selectedGoodList = [];
  462. good_obj.id = good.id;
  463. good_obj.goods_name = good.goods_name;
  464. good_obj.cover_pic = good.cover_pic;
  465. good_obj.price = good.price;
  466. this.selectedGoodList.push(good_obj);
  467. this.form.purchase_goods_id = good.id;
  468. },
  469. // 删除选择的商品
  470. deleteGoods(index) {
  471. console.log(index);
  472. this.selectedGoodList.splice(index, 1);
  473. this.form.purchase_goods_id = 0;
  474. },
  475. // continueAdd() {
  476. // if (!this.form.continue) {
  477. // this.form.continue = [];
  478. // }
  479. // console.log(this.continue_temp,'this.continue_tempthis.continue_temp')
  480. // this.form.continue.push(JSON.parse(JSON.stringify(this.continue_temp)));
  481. // },
  482. // totalAdd() {
  483. // if (!this.form.total) {
  484. // this.form.total = [];
  485. // }
  486. // this.form.total.push(JSON.parse(JSON.stringify(this.integral_rules)));
  487. // },
  488. // continueDel(index) {
  489. // if (this.form.continue && this.form.continue.length > index) {
  490. // this.form.continue.splice(index, 1);
  491. // }
  492. // },
  493. },
  494. filters: {
  495. checkedStatus(status) {
  496. if (this.checkedCities1.indexOf(status) > -1) {
  497. return true
  498. } else {
  499. return false;
  500. }
  501. }
  502. },
  503. });
  504. </script>