index.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. <?php
  2. ?>
  3. <style>
  4. @media screen and (min-width:1370px){
  5. .form-body {
  6. padding: 20px 0;
  7. padding-right: 50%;
  8. min-width: 1400px;
  9. }
  10. }
  11. @media screen and (max-width:1369px){
  12. .form-body {
  13. padding: 20px 0;
  14. padding-right: 20%;
  15. }
  16. }
  17. .form-body {
  18. background-color: #fff;
  19. margin-bottom: 20px;
  20. }
  21. .form-button {
  22. margin: 0!important;
  23. }
  24. .form-button .el-form-item__content {
  25. margin-left: 0!important;
  26. }
  27. .button-item {
  28. padding: 9px 25px;
  29. }
  30. .agent-item-input{
  31. display: flex;
  32. align-items: center;
  33. margin-top: 16px;
  34. }
  35. .agent-item-input .item-lab-title{
  36. width: 80px;
  37. margin-right: 20px;
  38. }
  39. .tips-title{
  40. font-size: 12px;
  41. color: #999999;
  42. }
  43. .el-tabs__header{
  44. background-color: #fff;
  45. }
  46. .el-tabs__item{
  47. width: 100px;
  48. text-align: center;
  49. }
  50. .el-table th>.cell{
  51. color: #333;
  52. font-weight: bold;
  53. font-size: 14px;
  54. }
  55. .el-table__footer-wrapper, .el-table__header-wrapper{
  56. border-bottom: 1.4px solid #D6D6D6;
  57. }
  58. .add-image-btn {
  59. width: 100px;
  60. height: 100px;
  61. color: #419EFB;
  62. border: 1px solid #e2e2e2;
  63. cursor: pointer;
  64. }
  65. .pic-url-remark{
  66. font-size: 12px;
  67. color: #999999;
  68. }
  69. .el-image {
  70. position: relative;
  71. display: inline-block;
  72. overflow: hidden;
  73. }
  74. .el-button.is-circle {
  75. border-radius: 50%;
  76. padding: 12px;
  77. }
  78. .el-button--mini.is-circle {
  79. padding: 7px;
  80. }
  81. .del-btn {
  82. position: absolute;
  83. right: 0px;
  84. top: 0px;
  85. padding: 4px 4px;
  86. }
  87. </style>
  88. <div id="app" v-cloak>
  89. <el-card style="border:0;min-width: 1000px;" shadow="never" body-style="background-color: #f3f3f3;padding: 10px 0 0;" v-loading="loading">
  90. <div slot="header">基本设置</div>
  91. <el-tabs v-model="activeName" @tab-click="handleClick">
  92. <div >
  93. <div class="form-body">
  94. <el-form ref="form" :model="form" :rules="rules" label-width="120px" size="small">
  95. <el-form-item label="电子券开关">
  96. <el-switch
  97. v-model="form.is_open"
  98. :active-value="1"
  99. :inactive-value="0"
  100. inactive-text="关闭"
  101. active-text="开启">
  102. </el-switch>
  103. <div class="tips-text" style="line-height: 24px;">
  104. 开启后电子券才能领取使用
  105. </div>
  106. </el-form-item>
  107. <el-form-item label="自定义名称">
  108. <el-input v-model="form.customize_name" type="text" :maxlength="20" style="width: 50%" placeholder="自定义名称"></el-input>
  109. </el-form-item>
  110. <el-form-item label="领券中心">
  111. <template>
  112. <el-input disabled v-model="center_url" type="text" style="width: 50%" placeholder="领券中心"></el-input>
  113. </template>
  114. <el-button class="button-item" v-on:click="copyText(center_url)">复制链接</el-button>
  115. </el-form-item>
  116. <el-form-item label="电子券首页">
  117. <template>
  118. <el-input disabled v-model="coupon_url" type="text" style="width: 50%" placeholder="电子券首页"></el-input>
  119. </template>
  120. <el-button class="button-item" v-on:click="copyText(coupon_url)">复制链接</el-button>
  121. </el-form-item>
  122. <el-form-item label="电子券转让">
  123. <el-switch
  124. v-model="form.is_allow_deal"
  125. :active-value="1"
  126. :inactive-value="0"
  127. inactive-text="关闭"
  128. active-text="开启">
  129. </el-switch>
  130. <div v-if="form.is_allow_deal==1" class="tips-title">开启后,所有电子券支持转让(注:电子券管理中,每张电子券可单独设置是否允许转让)</div>
  131. </el-form-item>
  132. <el-form-item label="转送权限">
  133. <template>
  134. <el-radio v-model="form.source_transfer_permission" :label="0">不限</el-radio>
  135. <el-radio v-model="form.source_transfer_permission" :label="1">团队上下级</el-radio>
  136. </template>
  137. </el-form-item>
  138. <el-form-item label="转让数量">
  139. <el-input v-model="form.transfer_num" type="number" :maxlength="3" style="width: 50%" placeholder="会员可转让的数量"></el-input>
  140. <div class="pic-url-remark">
  141. 同一张电子券可转让给同一个会员多少张电子券,填 0 不限制
  142. </div>
  143. </el-form-item>
  144. <el-form-item label="接收数量">
  145. <el-input v-model="form.receive_num" type="number" :maxlength="3" style="width: 50%" placeholder="会员可接收的数量"></el-input>
  146. <div class="pic-url-remark">
  147. 同一张电子券可接收不同会员的多少张电子券,填 0 不限制
  148. </div>
  149. </el-form-item>
  150. <el-form-item >
  151. <template slot="label">
  152. <span>公司图文介绍</span>
  153. <el-tooltip effect="dark" placement="top" content="第一张图片为封面图">
  154. <i class="el-icon-info"></i>
  155. </el-tooltip>
  156. </template>
  157. <div flex="dir:left">
  158. <template v-if="form.images && form.images.length">
  159. <div class="el-image" v-for="(item,index) in form.images" :key="index"
  160. style="margin-right: 20px;position: relative;cursor: move;">
  161. <com-attachment @selected="updatePicUrl"
  162. :params="{'currentIndex': index}">
  163. <el-image mode="aspectFill" style="width:100px;height:100px" :src="item">
  164. </el-image>
  165. </com-attachment>
  166. <el-button class="del-btn" size="mini" type="danger"
  167. icon="el-icon-close" circle
  168. @click="handle('delPic', index)"></el-button>
  169. </div>
  170. </template>
  171. <template v-if="form.images && form.images.length < 8">
  172. <com-attachment style="margin-bottom: 10px;" :multiple="true"
  173. :max="9" @selected="handle('picUrl', $event)">
  174. <el-tooltip class="item" effect="dark" content="建议尺寸:750 * 750"
  175. placement="top">
  176. <div flex="main:center cross:center" class="add-image-btn">
  177. + 添加图片
  178. </div>
  179. </el-tooltip>
  180. </com-attachment>
  181. </template>
  182. </div>
  183. <div class="pic-url-remark">
  184. 可以选择多张,建议尺寸是750*200
  185. </div>
  186. </el-form-item>
  187. <el-form-item label="支付完成跳转">
  188. <el-switch
  189. v-model="form.is_payed_url"
  190. :active-value="1"
  191. :inactive-value="0"
  192. inactive-text="关闭"
  193. active-text="开启">
  194. </el-switch>
  195. </el-form-item>
  196. <el-form-item v-if="form.is_payed_url==1">
  197. <!-- @selected="selectLink" -->
  198. <com-pick-link title="选择链接" @selected="selectLink">
  199. <el-input size="small" v-model="form.payed_url" :disabled="true">
  200. <template slot="append">
  201. <el-button>选择链接</el-button>
  202. </template>
  203. </el-input>
  204. </com-pick-link>
  205. </el-form-item>
  206. <el-form-item label="购买商品赠送电子券" >
  207. <el-radio v-model="form.settlement_type" :label="1">订单支付后</el-radio>
  208. <el-radio v-model="form.settlement_type" :label="2">订单完成后</el-radio>
  209. <div class="tips-text" style="line-height: 24px;">
  210. 如会员通过购物赠送其电子券,是支付后赠送还是需要订单完成后再赠送,注意,已赠送电子券无法收回
  211. </div>
  212. </el-form-item>
  213. </el-form>
  214. </div>
  215. <el-button class="button-item" :loading="btnLoading" type="primary" size="small" @click="store('form')">保存</el-button>
  216. </div>
  217. </el-card>
  218. </div>
  219. <script>
  220. const app = new Vue({
  221. el: '#app',
  222. data() {
  223. var validatePass = (rule, value, callback) => {
  224. if (Number.isInteger(Number(value)) && Number(value) > 0) {
  225. callback();
  226. } else {
  227. callback(new Error('请输入大于0的整数'));
  228. }
  229. };
  230. return {
  231. rubik: 0,
  232. h5_url:'',
  233. center_url:'/#/plugins/ElectronCoupon/center',
  234. coupon_url: '/#/plugins/ElectronCoupon/index',
  235. data: {
  236. style: -1,
  237. space: 0,
  238. height: 0,
  239. list: [],
  240. },
  241. // 0.1 设置页数据
  242. activeName: 'first',
  243. loading: false,
  244. load: false,
  245. btnLoading: false,
  246. payed_title : '',
  247. form: {
  248. is_open : 0, //是否开启
  249. customize_name : '电子券', //自定义名称
  250. is_allow_deal : 0, //是否可以转让;1是
  251. source_transfer_permission : 0, //转让权限0不限1团队上下级
  252. transfer_num : 0, //转让数量
  253. receive_num : 0, //接收数量
  254. payed_url : '', //支付后跳转链接
  255. is_payed_url : 0, //支付后是否跳转链接;1是
  256. is_notice : 0, //是否通知
  257. agreement : '', //协议
  258. images:[],//广告图片
  259. settlement_type: 0,
  260. },
  261. rules: {
  262. customize_name: [
  263. {required: true, message: '请填写电子券名称', trigger: 'change'},
  264. ],
  265. name: [
  266. {required: true, message: '请填写图片名称', trigger: 'change'},
  267. ],
  268. transfer_num: [
  269. {required: true, message: '请填写转让数量', trigger: 'change'},
  270. {required: true, validator: validatePass, trigger: 'blur'},
  271. ],
  272. receive_num: [
  273. {required: true, message: '请填写接收数量', trigger: 'change'},
  274. {required: true, validator: validatePass, trigger: 'blur'},
  275. ],
  276. },
  277. };
  278. },
  279. created() {
  280. this.getDetail();
  281. },
  282. methods: {
  283. // 链接选择(edit)
  284. selectLink(list) {
  285. if(list[0].route){
  286. this.payed_title = list[0].title;
  287. this.form.payed_url = list[0].route;
  288. }
  289. },
  290. rubikLink () {
  291. if (!this.data.list[this.rubik].link) {
  292. Vue.set(this.data.list[this.rubik], 'link', {});
  293. }
  294. return this.data.list[this.rubik].link.name
  295. },
  296. // 0.1.1 获取电子券设置详情
  297. getDetail(){
  298. this.loading = true;
  299. request({
  300. params: {
  301. r: 'electron-coupon/setting/index',
  302. }
  303. }).then(e => {
  304. this.loading = false;
  305. if (e.data.code == 0) {
  306. if(e.data.data){
  307. let responsData = e.data.data;
  308. let h5_url = responsData.config.web_url;
  309. let mall_sign = responsData.config.mall_sign;
  310. this.center_url = h5_url+'/#/plugins/ElectronCoupon/center?sign='+mall_sign;
  311. this.coupon_url = h5_url+'/#/plugins/ElectronCoupon/index?sign='+mall_sign;
  312. this.form = {...this.form, ...responsData.setting}
  313. }
  314. } else {
  315. this.$message.error(e.data.msg);
  316. }
  317. }).catch(e => {
  318. this.btnLoading = false;
  319. });
  320. },
  321. // 2.0 提交表单-编辑电子券基础设置
  322. store(formName) {
  323. this.$refs[formName].validate((valid) => {
  324. if (valid) {
  325. if(this.form.is_payed_url){
  326. if(!this.form.payed_url){
  327. this.$message.error('请选中支付成功后跳转路径');
  328. return
  329. }
  330. }
  331. this.btnLoading = true;
  332. let postForm = JSON.parse(JSON.stringify(this.form));
  333. request({
  334. params: {
  335. r: 'electron-coupon/setting/index',
  336. },
  337. method: 'post',
  338. data: postForm,
  339. }).then(e => {
  340. this.btnLoading = false;
  341. if (e.data.code == 0) {
  342. this.$message.success(e.data.msg);
  343. } else {
  344. this.$message.error(e.data.msg)
  345. }
  346. }).catch(e => {
  347. // this.$message.error(e);
  348. this.btnLoading = false;
  349. });
  350. } else {
  351. this.btnLoading = false;
  352. return false;
  353. }
  354. })
  355. },
  356. //复制素材中心链接
  357. copyText(url){
  358. // if (!this.center_url) {
  359. // this.$message.error('请输入复制内容')
  360. // } else {
  361. // var url = this.center_url;
  362. // createElement() 方法通过指定名称创建一个元素
  363. var copyInput = document.createElement('input')
  364. copyInput.setAttribute('value', url)
  365. document.body.appendChild(copyInput)
  366. copyInput.select()
  367. try {
  368. var copyed = document.execCommand('copy')
  369. if (copyed) {
  370. document.body.removeChild(copyInput)
  371. this.$message.success('复制成功')
  372. }
  373. } catch {
  374. this.$message.success('复制失败,请检查浏览器兼容')
  375. }
  376. // }
  377. },
  378. handleClick(tab, event) {
  379. if(tab.name=='second'){ //点击了广告图tab-初始化一下,请求列表
  380. this.page = 1;
  381. this.list = [];
  382. this.getAdList(this.page);
  383. }
  384. },
  385. handle(type, param1 = null, param2 = null) {
  386. switch(type) {
  387. //上传图片
  388. case 'picUrl':
  389. if (param1) {
  390. let self = this;
  391. param1.forEach(function(item, index){
  392. if (!self.form.images && self.form.images.length >= 9) {
  393. return;
  394. }
  395. self.form.images.push(item.url)
  396. })
  397. }
  398. break;
  399. //删除图片
  400. case 'delPic':
  401. this.form.images.splice(param1, 1)
  402. break;
  403. }
  404. },
  405. updatePicUrl(e, params) {
  406. console.log(e);
  407. },
  408. },
  409. filters: {
  410. },
  411. });
  412. </script>