| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- <?php
- ?>
- <style>
- .table-body {
- padding: 20px;
- background-color: #fff;
- }
- .table-body .el-button {
- padding: 0 !important;
- border: 0;
- margin: 0 5px;
- }
- .input-item {
- width: 200px;
- margin: 0 0 20px;
- display: inline-block;
- }
- /*.input-item .el-input__inner {*/
- /* border-right: 0;*/
- /*}*/
- .input-item .el-input__inner:hover {
- border: 1px solid #dcdfe6;
- /*border-right: 0;*/
- outline: 0;
- }
- .input-item .el-input__inner:focus {
- border: 1px solid #dcdfe6;
- /*border-right: 0;*/
- outline: 0;
- }
- .input-item .el-input-group__append {
- background-color: #fff;
- border-left: 0;
- width: 10%;
- padding: 0;
- }
- .input-item .el-input-group__append .el-button {
- padding: 0;
- }
- .input-item .el-input-group__append .el-button {
- margin: 0;
- }
- .share-name {
- width: 90px;
- display: inline-block;
- margin-right: 18px;
- text-align: end;
- }
- .share-pop-model {
- margin-top: 20px;
- }
- </style>
- <div id="app" v-cloak>
- <el-card shadow="never" style="border:0;min-width: 1000px;" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
- <div slot="header">
- <span>积分商品</span>
- <div style="float: right; margin: -5px 0">
- <el-button type="primary" size="small" @click="handle('add')">添加商品</el-button>
- </div>
- </div>
- <div class="table-body">
- <div id="qrcode-info" style="position: fixed;top: 10000000000px;">
- <!-- 二维码 -->
- <div id="qrcode" style="width:100px; height:100px; margin-top:15px;"></div>
- </div>
- <el-form :inline="true" :model="search" size="small" >
- <div class="input-item">
- <el-input size="small" placeholder="请输入商品名称" v-model="search.goods_name"></el-input>
- </div>
- <el-button type="primary" size="small" style="padding: 9px 15px !important;" @click="send('search')">搜索</el-button>
- <el-button type="danger" size="small" style="padding: 9px 15px !important;" @click="send('clearSearch')" v-if="search.goods_name != ''">清除条件</el-button>
- </el-form>
- <el-table :data="list" stripe v-loading="loading" size="small" style="margin-bottom: 15px;">
- <el-table-column label="商品ID" prop="goods_id" align="center"></el-table-column>
- <el-table-column align="left" label="商品" :show-overflow-tooltip="true">
- <template slot-scope="scope">
- <div class="table-info-img-text">
- <el-image class="table-info-img" :src="scope.row.cover_pic">
- <div slot="error" class="image-slot">
- <com-image src="/resources/img/mall/default_img.png"></com-image>
- </div>
- </el-image>
- <div class="table-info-text">
- <div style="max-width:20px">{{scope.row.goods_name}}</div>
- <div style="color: #ff2727">¥{{scope.row.price}}</div>
- </div>
- </div>
- </template>
- </el-table-column>
- <el-table-column label="兑换类型" prop="type_info" align="center"></el-table-column>
- <el-table-column label="兑换价" prop="money" align="center">
- <template slot-scope="scope">
- <div v-if="scope.row.type=='1'">{{scope.row.score}}积分</div>
- <div v-if="scope.row.type=='2'">{{scope.row.score}}积分+¥{{scope.row.money}}</div>
- <div v-if="scope.row.type=='3'">{{scope.row.price}}积分</div>
- </template>
- </el-table-column>
- <el-table-column label="兑换数量" prop="num" align="center"></el-table-column>
- <el-table-column label="创建时间" prop="created_at" align="center"></el-table-column>
- <el-table-column label="操作" width="300px" align="center">
- <template slot-scope="scope">
- <el-button v-if="domain!=''" type="text" @click="handle('getQrcode', scope.row)">推广码</el-button>
- <el-button type="text" @click="handle('edit', scope.row)">编辑</el-button>
- <el-button type="text" @click="handle('delete', scope.row, scope.$index)">删除</el-button>
- </template>
- </el-table-column>
- </el-table>
- <div flex="box:last cross:center">
- <div></div>
- <div>
- <el-pagination background @current-change="pagination"
- layout="prev, pager, next" :page-count="pageCount">
- </el-pagination>
- </div>
- </div>
- </div>
- <el-dialog v-loading="QRcodeLoading" element-loading-text="二维码生成中" title="分享" :visible.sync="sharePop" width="30%">
- <div class="share-pop-model">
- <div class="share-name">分享链接</div>
- <el-input style="width: 50%;" v-model="shareData.url" placeholder="暂无链接" disabled>
- <template slot="append">
- <el-button circle size="mini" type="text" @click="handle('copyLink', shareData.url)" class="copy_btn">复制</el-button>
- </template>
- </el-input>
- </div>
- <div class="share-pop-model" flex>
- <div class="share-name">二维码</div>
- <div style="width: 180px; height: 180px;background: #F2F2F2;margin-right: 12px;margin-left:5px" flex="main:center cross:center">
- <el-image style="width: 144px; height: 144px;" :src="shareData.img"></el-image>
- </div>
- <!-- downloadShareImg('poster') -->
- <!-- <el-button flex type="text" @click="getPoster">下载海报</el-button>-->
- <el-button flex type="text" @click="handle('downloadQrcode')">下载二维码</el-button>
- </div>
- </el-dialog>
- </el-card>
- </div>
- <!-- <script src="https://cdn.jsdelivr.net/clipboard.js/1.5.12/clipboard.min.js"></script> -->
- <script src="/resources/unpkg/clipboard@1.5.12/dist/clipboard.min.js"></script>
- <script>
- const app = new Vue({
- el: '#app',
- data: {
- search: {
- goods_name: ''
- },
- shareData: {
- url: "", //链接
- img: "", //二维码
- qrcode_filename: '', // 二维码文件名
- },
- loading: false,
- QRcodeLoading: false,
- sharePop: false,
- domain: '',
- page: 1,
- pageCount: 0,
- list: []
- },
- mounted() {
- this.send('getData');
- },
- methods: {
- send(type) {
- switch (type) {
- case 'getData':
- this.loading = true;
- request({
- params: {
- r : 'score-mall/default/index',
- page: this.page,
- goods_name: this.search.goods_name
- },
- method: 'get'
- }).then(e=>{
- this.loading = false;
- if (e.data.code == 0) {
- this.list = e.data.data.list;
- this.pageCount = e.data.data.page_count;
- this.domain = e.data.data.domain;
- } else {
- this.$message.error(e.data.msg);
- }
- }).catch(e => {
- this.loading = false;
- this.$message.error(e.data.msg);
- });
- break;
- case 'search':
- this.page = 1;
- this.send('getData');
- break;
- case 'clearSearch':
- this.page = 1;
- this.search.goods_name = '';
- this.send('getData');
- break;
- }
- },
- async handle(type, param1 = null, param2 = null) {
- switch (type) {
- case 'edit':
- let info = {r: 'score-mall/default/edit',goods_id:param1.goods_id};
- navigateTo(info);
- break;
- case 'delete':
- this.$confirm('删除该商品, 是否继续?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- this.loading = true;
- request({
- params: {
- r: 'score-mall/default/delete',
- },
- method: 'post',
- data: {
- goods_id: param1.goods_id,
- }
- }).then(e => {
- this.loading = false;
- if (e.data.code === 0) {
- this.$message.success(e.data.msg);
- this.list.splice(param2, 1);
- } else {
- this.$message.error(e.data.msg);
- }
- }).catch(e => {
- this.loading = false;
- this.$message.error(e.data.msg);
- });
- }).catch(() => {
- this.$message.info('已取消删除')
- });
- break;
- case 'add':
- let params = {r: 'score-mall/default/edit'}
- navigateTo(params);
- break;
- case 'getQrcode':
- this.QRcodeLoading = true;
- this.sharePop = true;
- let domain = this.domain.split('?');
- let url = domain[0] + 'plugins/pages/goods/detail?marketing_type=ScoreMall&proId=' + param1.goods_id + '&' + domain[1];
- this.shareData.img = await this.handle('createQrcode', url);
- this.shareData.url = url;
- this.shareData.qrcode_filename = param1.goods_name;
- this.QRcodeLoading = false;
- break;
- case 'createQrcode':
- let qrcodeInfo = document.getElementById("qrcode-info");
- document.getElementById("qrcode").remove(); //删除生成的二维码
- let addCodeDom = document.createElement("div")
- addCodeDom.setAttribute("id", "qrcode");
- addCodeDom.setAttribute("style", "width:300px; height:300px;");
- qrcodeInfo.appendChild(addCodeDom) //添加标签
- let qrCodeDom = document.getElementById("qrcode")
- var qrcode = new QRCode(qrCodeDom, {
- width: 300,
- height: 300
- });
- qrcode.makeCode(param1);
- // 获取二维码生成的图片信息
- return new Promise((req, rej) => {
- setTimeout(() => {
- src = qrCodeDom.getElementsByTagName("img")[0].src;
- req(src)
- }, 200);
- })
-
- break;
- case 'downloadQrcode':
- var img_url = this.shareData.img;
- var filename = this.shareData.qrcode_filename;
- fetch(img_url).then(res => res.blob().then(blob => {
- var a = document.createElement('a');
- var url = window.URL.createObjectURL(blob);
- a.href = url;
- a.download = filename;
- a.click();
- window.URL.revokeObjectURL(url);
- }))
- break;
- case 'copyLink':
- var clipboard = new Clipboard('.copy_btn', {
- text: function() {
- return param1;
- }
- });
- var self = this;
- clipboard.on('success', function(e) {
- // console.log("success")
- self.$message.success('复制成功');
- e.clearSelection();
- clipboard.destroy()
- });
- clipboard.on('error', function(e) {
- // console.log("error")
- self.$message.error('复制失败,请手动复制');
- });
- break;
- }
- },
- pagination(currentPage) {
- let self = this;
- self.page = currentPage;
- this.send('getData');
- }
- }
- })
- </script>
|