Commit e9ee2c8e by chenxin

fix: build

parent 6e588716
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=static/fonts/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//web-1251519181.file.myqcloud.com/components/element.2.12.0.css><link href=/marketing/static/css/main.bb10561867aaf40be17396f3e8fae676.css rel=stylesheet></head><body><div id=app></div><script src=//web-1251519181.file.myqcloud.com/lib/vue/2.5.2/vue.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vue-router/3.0.2/vue-router.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vuex/3.1.0/vuex.min.js></script><script src=//web-1251519181.file.myqcloud.com/components/element.2.12.0.js></script><script src=//web-1251519181.file.myqcloud.com/components/header.2.0.36.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.12.js></script><script src=//web-1251519181.file.myqcloud.com/components/store.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/img-preview.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/member-group.2.2.22.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.18.js></script><script src=//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.42.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/input.2.0.20.js></script><script src=//web-1251519181.file.myqcloud.com/components/delete.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/selector.1.2.10.js></script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script type=text/javascript src=/marketing/static/js/manifest.936c4a0a94820155d4d4.js></script><script type=text/javascript src=/marketing/static/js/vendor.b30a466c3b2d11195801.js></script><script type=text/javascript src=/marketing/static/js/main.639926e246003bf2a575.js></script></body></html>
\ No newline at end of file
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=static/fonts/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//web-1251519181.file.myqcloud.com/components/element.2.12.0.css><link href=/marketing/static/css/main.e4ab74eaccfc61dbecb2c3b250bc043c.css rel=stylesheet></head><body><div id=app></div><script src=//web-1251519181.file.myqcloud.com/lib/vue/2.5.2/vue.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vue-router/3.0.2/vue-router.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vuex/3.1.0/vuex.min.js></script><script src=//web-1251519181.file.myqcloud.com/components/element.2.12.0.js></script><script src=//web-1251519181.file.myqcloud.com/components/header.2.0.36.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.12.js></script><script src=//web-1251519181.file.myqcloud.com/components/store.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/img-preview.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/member-group.2.2.22.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.18.js></script><script src=//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.42.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/input.2.0.20.js></script><script src=//web-1251519181.file.myqcloud.com/components/delete.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/selector.1.2.10.js></script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script type=text/javascript src=/marketing/static/js/manifest.4ec72ddf0b91a3a354f2.js></script><script type=text/javascript src=/marketing/static/js/vendor.b30a466c3b2d11195801.js></script><script type=text/javascript src=/marketing/static/js/main.639926e246003bf2a575.js></script></body></html>
\ No newline at end of file
!function(e){var r=window.webpackJsonp;window.webpackJsonp=function(t,a,c){for(var i,f,u,s=0,l=[];s<t.length;s++)f=t[s],n[f]&&l.push(n[f][0]),n[f]=0;for(i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i]);for(r&&r(t,a,c);l.length;)l.shift()();if(c)for(s=0;s<c.length;s++)u=o(o.s=c[s]);return u};var t={},n={14:0};function o(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.e=function(e){var r=n[e];if(0===r)return new Promise(function(e){e()});if(r)return r[2];var t=new Promise(function(t,o){r=n[e]=[t,o]});r[2]=t;var a=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.timeout=12e4,o.nc&&c.setAttribute("nonce",o.nc),c.src=o.p+"static/js/"+({0:"card",1:"game",2:"wechat",3:"message",4:"ewash",5:"ecm",6:"evaluation",7:"activity",8:"cdKey",9:"recharge",10:"msg",11:"calllog"}[e]||e)+"."+{0:"8f5b7121286326833189",1:"3718a613133aa34b9424",2:"0927e95d3fe5b6f648da",3:"2d2ca8276e939c42e37e",4:"0f8f5a7e1a28450e55c7",5:"3f053d97d3e9aea26c10",6:"a69c5c6513644d0f2537",7:"c9e4106934931698098b",8:"f1f83085730306644d22",9:"e8e771469c2137096ce5",10:"08d7348811ff689c70ac",11:"07f9326e2a68fd201646"}[e]+".js";var i=setTimeout(f,12e4);function f(){c.onerror=c.onload=null,clearTimeout(i);var r=n[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),n[e]=void 0)}return c.onerror=c.onload=f,a.appendChild(c),t},o.m=e,o.c=t,o.d=function(e,r,t){o.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},o.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(r,"a",r),r},o.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},o.p="/marketing/",o.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
!function(e){var r=window.webpackJsonp;window.webpackJsonp=function(t,a,c){for(var i,f,u,s=0,l=[];s<t.length;s++)f=t[s],n[f]&&l.push(n[f][0]),n[f]=0;for(i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i]);for(r&&r(t,a,c);l.length;)l.shift()();if(c)for(s=0;s<c.length;s++)u=o(o.s=c[s]);return u};var t={},n={14:0};function o(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.e=function(e){var r=n[e];if(0===r)return new Promise(function(e){e()});if(r)return r[2];var t=new Promise(function(t,o){r=n[e]=[t,o]});r[2]=t;var a=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.timeout=12e4,o.nc&&c.setAttribute("nonce",o.nc),c.src=o.p+"static/js/"+({0:"card",1:"game",2:"wechat",3:"message",4:"ewash",5:"ecm",6:"evaluation",7:"activity",8:"cdKey",9:"recharge",10:"msg",11:"calllog"}[e]||e)+"."+{0:"8f5b7121286326833189",1:"3718a613133aa34b9424",2:"0927e95d3fe5b6f648da",3:"2d2ca8276e939c42e37e",4:"0f8f5a7e1a28450e55c7",5:"3f053d97d3e9aea26c10",6:"a69c5c6513644d0f2537",7:"c9e4106934931698098b",8:"4854b37a39ef9685852b",9:"e8e771469c2137096ce5",10:"08d7348811ff689c70ac",11:"07f9326e2a68fd201646"}[e]+".js";var i=setTimeout(f,12e4);function f(){c.onerror=c.onload=null,clearTimeout(i);var r=n[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),n[e]=void 0)}return c.onerror=c.onload=f,a.appendChild(c),t},o.m=e,o.c=t,o.d=function(e,r,t){o.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},o.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(r,"a",r),r},o.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},o.p="/marketing/",o.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
......@@ -16,18 +16,17 @@ export const cdkeyPlanDelete = params => requests(PREFIX + 'cdkey-plan-delete',
// 兑换详情
export const cdkeyPlanEdit = params => requests(PREFIX + 'cdkey-plan-edit', params);
// 兑换记录
export const cdkeyLogRecord = params => requests(PREFIX + 'cdkey-log-record', params);
// 保存/修改兑换码计划
export const cdkeyPlanSave = PREFIX + 'cdkey-plan-save';
// 下载导入失败记录
export const cdkeyFailExport = PREFIX + 'cdkey-fail-export';
// 校验兑换码
export const cdkeyCheck = PREFIX + 'cdkey-check';
// 导出生成的兑换码
export const cdkeyExport = config.api + PREFIX + 'cdkey-export?requestProject=marketing';
// 下载导入失败记录
export const cdkeyFailExport = config.api + PREFIX + 'cdkey-fail-export';
......@@ -11,21 +11,22 @@
<el-date-picker :disabled="!canEdit" class="w400" v-model="dateTime" type="datetimerange" :picker-options="pickerOptions" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-form-item>
<el-form-item label="兑换码类型" prop="cdkeyValue">
<el-radio-group :disabled="!canEdit" v-model="ruleForm.cdkeyType">
<el-radio-group :disabled="!isAdd" v-model="ruleForm.cdkeyType">
<el-radio :label="1" style="margin-right:44px;">专属码</el-radio>
<el-radio :label="2">通用码</el-radio>
</el-radio-group>
<div v-if="ruleForm.cdkeyType == 2">
<div class="code1">码值:<el-input :disabled="!canEdit" style="width:180px;" clearable v-model="ruleForm.cdkeyValue" maxlength="12" palceholder="请输入码值"></el-input></div>
<div class="code1">码值:<el-input :disabled="!isAdd" style="width:180px;" clearable v-model="ruleForm.cdkeyValue" maxlength="12" palceholder="请输入码值"></el-input></div>
</div>
</el-form-item>
<el-form-item label="券码生成方式" prop="fileId">
<el-radio-group :disabled="!canEdit" v-model="ruleForm.cdkeyMode">
<el-radio-group :disabled="!isAdd" v-model="ruleForm.cdkeyMode" @change="changeCdKeyMode">
<el-radio :label="1">系统生成</el-radio>
<el-radio :label="2">手工导入</el-radio>
</el-radio-group>
<el-button v-if="ruleForm.cdkeyMode == 2 && !isAdd" class="ml20" type="text" @click="cdkeyExport">导出兑换码列表</el-button>
<div v-if="ruleForm.cdkeyMode == 2">
<div class="code2">
<div class="code2" v-if="isAdd">
<div>
<file needAxiosDataBack @dataBack="dataBack" ref="fileUpload" class="inline-block" label="点击上传" @backImg="backImg" acceptType=".csv, .xlsx" tips="" :url="uploadUrl" iconClass="el-icon-upload2" /><!-- 上传 -->
<!-- <el-button type="primary" icon="iconfont icon-shangchuan fz14 mr5">上传</el-button> -->
......@@ -42,12 +43,12 @@
</div>
</div>
</el-form-item>
<el-form-item :label="`${ruleForm.cdkeyType == 2 ? '兑换次数上限' : '兑换码数量'}`" v-if="ruleForm.cdkeyMode == 1" prop="cdkeyCount" class="is-required">
<el-input-number :disabled="!canEdit" style="width:140px;" v-model="ruleForm.cdkeyCount" controls-position="right" :min="1" :max="1000"></el-input-number>
<el-form-item :label="`${ruleForm.cdkeyType == 2 ? '兑换次数上限' : '兑换码数量'}`" prop="cdkeyCount" class="is-required">
<el-input-number :disabled="!isAdd || ruleForm.cdkeyMode == 2" style="width:140px;" v-model="ruleForm.cdkeyCount" controls-position="right" :min="0" :max="1000"></el-input-number>
<span class="gray ml10" v-if="ruleForm.cdkeyType != 2">券码数量请控制在10000以内</span>
</el-form-item>
<el-form-item label="兑换内容" prop="cdkeyContentRelated">
<el-button v-show="!ruleForm.cdkeyContentRelated" @click="showCardDialog = true">选择卡券</el-button>
<el-button type="plain" style="border-style:dashed;width:105px;" v-show="!ruleForm.cdkeyContentRelated" @click="showCardDialog = true">选择卡券</el-button>
<div v-show="ruleForm.cdkeyContentRelated">
{{ ruleForm.cdkeyContentDescribe }}
<el-button v-if="canEdit" type="text" @click="cleanCard" class="ml10">删除</el-button>
......@@ -58,6 +59,12 @@
</el-form-item>
</el-form>
<vue-gic-card appendToBody :showCardDialog="showCardDialog" @selectCard="selectCard" :cardLimit="-1" :cardType="null"></vue-gic-card>
<vue-gic-export-excel :dialogVisible.sync="dialogVisible" :dataArr="[1, 2, 3]" :type="2" :excelUrl="excelUrl" :params="params" :projectName="projectName"></vue-gic-export-excel>
<!-- <form action="http://gicdev.demogic.com/api-marketing/cdkey-fail-export" target="_blank" enctype="multipart/form-data">
<input type="text" name="requestProject" value="gic-web" />
<input type="file"/>
<button type="submit">submit</button>
</form> -->
</div>
</template>
......@@ -66,7 +73,7 @@ import axios from 'axios';
import file from '@/components/upload/file';
import { formatDateTimeByType } from '@/utils/index.js';
import activitySelect from '@/components/activity-select';
import { cdkeyCheck, cdkeyPlanSave, cdkeyPlanEdit, cdkeyFailExport } from '@/service/api/cdKeyApi.js';
import { cdkeyCheck, cdkeyPlanSave, cdkeyPlanEdit, cdkeyFailExport, cdkeyExport } from '@/service/api/cdKeyApi.js';
import { _debounce } from '@/utils/index';
export default {
name: 'cdkey-form',
......@@ -90,7 +97,7 @@ export default {
}
};
const checkFileId = (rule, value, callback) => {
if (this.ruleForm.cdkeyMode == 2 && !this.importRes.fileId) {
if (this.ruleForm.cdkeyMode == 2 && !this.importRes.fileId && this.isAdd) {
return callback(new Error(rule.message));
}
callback();
......@@ -98,8 +105,11 @@ export default {
const checkCdkeyCount = (rule, value, callback) => {
if (!value) {
const message = this.ruleForm.cdkeyType == 2 ? '兑换次数上限' : '兑换码数量';
return callback(new Error(`请输入${message}`));
let message = '请输入' + this.ruleForm.cdkeyType == 2 ? '兑换次数上限' : '兑换码数量';
if (this.ruleForm.cdkeyMode == 2) {
message = this.importRes.fileName ? '手工导入数据无可用码' : '请上传文件';
}
return callback(new Error(`${message}`));
}
callback();
};
......@@ -122,6 +132,7 @@ export default {
return {
loading: false,
cdkeyPlanId: this.$route.params.id,
cdkeyFailExportUrl: cdkeyFailExport,
ruleForm: {
cdkeyContentType: '', // 1卡券
cdkeyContentRelated: '', // 1是cardId
......@@ -160,6 +171,11 @@ export default {
}
},
dateTime: [],
// 导出
projectName: 'marketing', // 当前项目名
dialogVisible: false,
excelUrl: '', // 下载数据的地址
params: {}, // 传递的参数
showCardDialog: false,
isAdd: this.$route.meta.type === 'add',
isEdit: this.$route.meta.type === 'edit',
......@@ -173,11 +189,16 @@ export default {
computed: {
canEdit() {
// 是新增或编辑未生效
return this.isAdd || this.isEdit && new Date() < this.dateTime[0];
return this.isAdd || (this.isEdit && new Date() < this.dateTime[0]);
}
},
methods: {
// 下载明细
changeCdKeyMode(val) {
if (val == 2) {
this.ruleForm.cdkeyCount = this.importRes.success || 0;
}
},
// 下载模板
downloadMX() {
const prev = process.env['NODE_ENV'] === 'development' ? '' : '/marketing'; // eslint-disable-line
window.open(`${prev}/static/file/兑换码模板示例.xlsx`, '_blank');
......@@ -215,7 +236,7 @@ export default {
// 手工导入
formData.append('file', this.importRes.file);
}
if(this.isEdit) {
if (this.isEdit) {
formData.append('cdkeyPlanId', this.cdkeyPlanId);
}
Object.keys(params).forEach(key => {
......@@ -227,7 +248,8 @@ export default {
.post(cdkeyPlanSave, formData)
.then(res => {
if (res.data.errorCode === 0) {
console.log(res.data);
this.$tips({ message: '操作成功!' });
this.$router.push('/cdKey/list');
} else {
// throw new Error(res.data); // eslint-disable-line
this.$tips({ type: 'error', message: res.data.message });
......@@ -246,8 +268,21 @@ export default {
let formData = new FormData();
formData.append('requestProject', 'gic-web');
formData.append('file', this.importRes.file);
var xhr=new XMLHttpRequest();
xhr.open("post", cdkeyFailExport);
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.responseType = 'blob'; // 返回类型blob blob 存储着大量的二进制数据
xhr.onload = function() {
if (xhr.status === 200 && xhr.readyState == 4) {
const blob = xhr.response;
const a = document.createElement('a');
const url = window.URL.createObjectURL(blob);
a.href = url;
//设置文件名称
a.download = `兑换码导入失败记录${new Date().getTime()}.xls`;
a.click();
}
};
xhr.open('post', cdkeyFailExport, true);
xhr.send(formData);
},
// *********卡券选择器******
......@@ -274,10 +309,21 @@ export default {
this.importRes.fileId = new Date();
this.importRes.size = (file.size / 1024).toFixed(2);
this.importRes.success = result.success;
this.ruleForm.cdkeyCount = result.success;
this.importRes.fail = result.fail;
this.importRes.total = result.total;
this.importRes.failData = result.failData;
this.$refs.ruleForm.validateField('fileId');
this.$refs.ruleForm.validateField('cdkeyCount');
},
// 导出记录
cdkeyExport() {
this.dialogVisible = true;
this.excelUrl = cdkeyExport;
this.params = {
cdkeyPlanId: this.cdkeyExport,
requestProject: 'marketing'
};
}
},
mounted() {
......
......@@ -8,7 +8,7 @@
<el-table-column :show-overflow-tooltip="true" min-width="120" header-align="left" fixed="left" align="left" prop="memberId" label="会员信息">
<template slot-scope="scope">
<a :href="'/member/#/wechatmemberDetail?memberId=' + scope.row.memberId" target="_blank">
<img class="vertical-middle table__avatar--40" :src="scope.row.imageUrl || defaultAvatar" width="60" height="60" />
<img class="vertical-middle table__avatar--40" :src="scope.row.memberImgUrl || defaultAvatar" width="60" height="60" />
<div class="inline-block vertical-middle">
<p class="table-name--ellipsis">{{ scope.row.memberName || '--' }}</p>
<!-- <p class="fz13 gray">{{ scope.row.phoneNumber || '--' }}</p> -->
......@@ -39,7 +39,11 @@
<div v-if="scope.row.convertibilityStatus == 2" class="dm-status--error">失败</div>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" min-width="120" align="left" prop="convertibilityRemark" label="备注"></el-table-column>
<el-table-column :show-overflow-tooltip="true" min-width="120" align="left" prop="convertibilityRemark" label="备注">
<template slot-scope="scope">
{{ scope.row.convertibilityRemark || '--' }}
</template>
</el-table-column>
</el-table>
<dm-pagination v-show="tableList.length" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="listParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"></dm-pagination>
</section>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment