Browse Source

批量创建兑换码

natasha 1 year ago
parent
commit
bce16b0fea

+ 4 - 0
src/components/Upload.vue

@@ -213,6 +213,10 @@ export default {
           this.accept = ".mp3,.MP3,.wav,.WAV,.mp4,.MP4,.mov,.MOV";
           this.uploadTip = ""
           break;
+        case "txt":
+          this.accept = ".txt,.TXT";
+          this.uploadTip = ""
+          break;
         default:
           this.accept = "*";
           this.fileTypeName = "文件";

+ 68 - 32
src/views/cdkey_manage/CheckGoods.vue

@@ -7,7 +7,11 @@
             <breadcrumb :breadcrumbList="breadcrumbList" class="breadcrumb-box"></breadcrumb>
             <div class="personal-inner">
                 <div class="common-title-box">
-                    <h3>{{info.name}} 兑换码:<span class="code" :id="'copy-'+info.code">{{info.code}}</span><svg-icon icon-class="copy" class="copy" @click="CopyToClipboard('copy-'+info.code)"></svg-icon></h3>
+                    <h3>{{info.name}} 
+                        <template v-if="type===0">
+                        兑换码:<span class="code" :id="'copy-'+info.code">{{info.code}}</span><svg-icon icon-class="copy" class="copy" @click="CopyToClipboard('copy-'+info.code)"></svg-icon>
+                        </template>
+                    </h3>
                     <div class="btn-box">
                         到期日期:{{info.end_date}}
                     </div>
@@ -74,37 +78,68 @@
                     </el-pagination>
                 </template>
                 <template v-if="tabsIndex===1">
-                    <el-table
-                        class="search-table"
-                        :data="tableData"
-                        style="width: 100%"
-                        @sort-change="handleSort"
-                        :default-sort = dataSort
-                        :max-height="tableHeight"
-                        v-loading="tableLoading">
-                        <el-table-column
-                            type="index"
-                            label="#"
-                            sortable
-                            width="54"
-                            :index="(pageNumber-1)*pageSize+1">
-                        </el-table-column>
-                        <el-table-column
-                            prop="person_name"
-                            label="用户名"
-                            sortable="custom">
-                        </el-table-column>
-                        <el-table-column
-                            prop="person_org_name"
-                            label="机构"
-                            sortable="custom">
-                        </el-table-column>
-                        <el-table-column
-                            prop="use_time"
-                            label="激活时间"
-                            sortable="custom">
-                        </el-table-column>
-                    </el-table>
+                    <template v-if="type===0">
+                        <el-table
+                            class="search-table"
+                            :data="tableData"
+                            style="width: 100%"
+                            @sort-change="handleSort"
+                            :default-sort = dataSort
+                            :max-height="tableHeight"
+                            v-loading="tableLoading">
+                            <el-table-column
+                                type="index"
+                                label="#"
+                                width="54"
+                                :index="(pageNumber-1)*pageSize+1">
+                            </el-table-column>
+                            <el-table-column
+                                prop="person_name"
+                                label="用户名">
+                            </el-table-column>
+                            <el-table-column
+                                prop="person_org_name"
+                                label="机构">
+                            </el-table-column>
+                            <el-table-column
+                                prop="use_time"
+                                label="激活时间">
+                            </el-table-column>
+                        </el-table>
+                    </template>
+                    <template v-else>
+                        <el-table
+                            class="search-table"
+                            :data="tableData"
+                            style="width: 100%"
+                            @sort-change="handleSort"
+                            :default-sort = dataSort
+                            :max-height="tableHeight"
+                            v-loading="tableLoading">
+                            <el-table-column
+                                type="index"
+                                label="#"
+                                width="54"
+                                :index="(pageNumber-1)*pageSize+1">
+                            </el-table-column>
+                            <el-table-column
+                                prop="subcode"
+                                label="兑换码">
+                            </el-table-column>
+                            <el-table-column
+                                prop="person_org_name"
+                                label="机构">
+                            </el-table-column>
+                            <el-table-column
+                                prop="person_name"
+                                label="用户名">
+                            </el-table-column>
+                            <el-table-column
+                                prop="use_time"
+                                label="激活时间">
+                            </el-table-column>
+                        </el-table>
+                    </template>
                     <el-pagination
                         background
                         key="auditpagination"
@@ -223,6 +258,7 @@ export default {
             //     bg:'#FFECE8'
             // }
         },
+        type: this.$route.query.type?this.$route.query.type*1:0,
     }
   },
   //计算属性 类似于data概念

+ 97 - 6
src/views/cdkey_manage/CreateCdkey.vue

@@ -31,7 +31,7 @@
                         <el-input v-model="organizeForm.name" placeholder="请输入兑换码名称" @blur="handleTrim('organizeForm','name')" maxlength="20"></el-input>
                         <p class="tips">不超过20个字</p>
                     </el-form-item>
-                    <el-form-item label="可使用人数" prop="person_count_max" class="price-box">
+                    <el-form-item label="可使用人数" prop="person_count_max" class="price-box" v-if="type===0">
                         <el-input-number v-model="organizeForm.person_count_max" @change="handleChange" :min="0" :max="500" size="small" class="personal-ceil"></el-input-number>
                         <span class="append">人</span>
                         <p class="tips">最多不超过 500 次</p>
@@ -41,12 +41,23 @@
                             <template slot="append">天</template>
                         </el-input>
                     </el-form-item>
-                    <el-form-item label="备注" prop="momo">
+                    <el-form-item label="兑换码" prop="subcode_import_file_id" v-if="type===1">
+                        <div class="article-mp3-box">
+                            <ul v-if="organizeForm.subcode_import_file_list&&organizeForm.subcode_import_file_list.length>0" class="article-mp3-list">
+                                <li v-for="(item,index) in organizeForm.subcode_import_file_list" :key="index">
+                                    <a><svg-icon :icon-class="'txt'" class="icon-logo"></svg-icon><span>{{item.name}}</span></a>
+                                    <i class="el-icon-error" @click="handleDelResource(index)"></i>
+                                </li>
+                            </ul>
+                            <upload :class="['article-mp3']" :datafileList="organizeForm.subcode_import_file_list" :changeFillId="handleAvatarSuccess" :fileName="'articleMp3'" uploadType="txt" tips=' ' :filleNumber="1" :showList="true" />
+                        </div>
+                    </el-form-item>
+                    <el-form-item label="备注" prop="memo">
                         <el-input
                             type="textarea"
                             :rows="4"
                             placeholder="请输入"
-                            v-model="organizeForm.momo"
+                            v-model="organizeForm.memo"
                             maxlength="200"
                             show-word-limit>
                         </el-input>
@@ -144,10 +155,11 @@ import Header from "../../components/Header.vue";
 import NavMenu from "../../components/NavMenu.vue"
 import Breadcrumb from '../../components/Breadcrumb.vue';
 import { getLogin } from "@/api/ajax";
+import Upload from "../../components/Upload.vue"
 
 export default {
   //import引入的组件需要注入到对象中才能使用
-  components: { Header, NavMenu, Breadcrumb },
+  components: { Header, NavMenu, Breadcrumb, Upload },
   props: {},
   data() {
     //这里存放数据
@@ -223,7 +235,10 @@ export default {
             name: '',
             person_count_max: 50,
             valid_day_count: 30,
-            momo: ''
+            memo: '',
+            subcode_import_file_list: [], 
+            subcode_import_file_id: '', 
+            type: this.$route.query.type?this.$route.query.type*1:0
         },
         rulesOrganize:{
             name:[
@@ -236,6 +251,9 @@ export default {
             valid_day_count:[
                 { required: true, validator: validateValidity, trigger: 'blur' }
             ],
+            subcode_import_file_id:[
+                { required: true, message: '请上传兑换码文件', trigger: 'blur' }
+            ],
         },
         stepIndex:window.localStorage.getItem('cdKeyId')?1:0, // 步骤索引
         loading: false,
@@ -246,7 +264,8 @@ export default {
         tableHeight: "", // 表格高度
         total_count: 0,
         dataSort: {},
-        tableData: []
+        tableData: [],
+        type: this.$route.query.type?this.$route.query.type*1:0,
     }
   },
   //计算属性 类似于data概念
@@ -283,6 +302,23 @@ export default {
                
         });
     },
+    // 删除资源文件
+    handleDelResource(i){
+        this.$confirm("确定删除吗?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+        }).then(() => {
+            this.organizeForm.subcode_import_file_list.splice(i, 1);
+            this.organizeForm.subcode_import_file_id = ''
+            this.$forceUpdate()
+        });
+    },
+    handleAvatarSuccess(fileList,name) {
+        this.organizeForm.subcode_import_file_list = fileList
+        this.organizeForm.subcode_import_file_id = fileList[0]&&fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_id:''
+        this.$forceUpdate()
+    },
     handleSizeChange(val) {
         this.pageSize = val
         this.pageNumber = 1
@@ -502,6 +538,61 @@ export default {
     line-height: 22px;
     border-radius: 2px;
 }
+.article-mp3-box{
+    display: flex;
+    height: 32px;
+    align-items: center;
+}
+.article-mp3{
+    width: 82px;
+    height: 32px;
+    font-size: 0;
+    &-has{
+        width: 320px;
+    }
+}
+.article-mp3-list{
+    list-style: none;
+    margin: 0;
+    padding: 0;
+    display: inline-block;
+    width: 226px;
+    li{
+        padding: 5px 12px;
+        height: 32px;
+        border-radius: 2px 0px 0px 2px;
+        background: #F2F3F5;
+        display: flex;
+        align-items: center;
+        a{
+            color: #1D2129;
+            display: flex;
+            align-items: center;
+            flex: 1;
+            span{
+                overflow:hidden;
+                text-overflow:ellipsis;
+                white-space: nowrap;
+                flex: 1;
+                display: block;
+                font-size: 14px;
+                line-height: 22px;
+                width: 163px;
+            }
+            .svg-icon{
+                width: 16px;
+                height: 16px;
+                margin-right: 4px;
+                color: #1D2129;
+            }
+        }
+        .el-icon-error{
+            color: #4E5969;
+            cursor: pointer;
+            margin-left: 4px;
+        }
+    }
+}
 </style>
 
 <style lang="scss">

+ 15 - 5
src/views/cdkey_manage/index.vue

@@ -9,7 +9,8 @@
                 <div class="common-title-box">
                     <h3>兑换码列表</h3>
                     <div class="btn-box">
-                        <el-button type="primary" size="small" @click="createCdkey">创建兑换码</el-button>
+                        <el-button type="primary" size="small" @click="createCdkey(1)">批量创建</el-button>
+                        <el-button type="primary" size="small" @click="createCdkey(0)">创建兑换码</el-button>
                     </div>
                 </div>
                 <div class="search-box">
@@ -70,6 +71,9 @@
                         label="兑换码"
                         sortable="custom"
                         width="170">
+                        <template slot-scope="scope">
+                            {{scope.row.type===0?scope.row.code:'多个'}}
+                        </template>
                     </el-table-column>
                     <el-table-column
                         prop="type"
@@ -122,7 +126,7 @@
                         </template>
                     </el-table-column>
                     <el-table-column
-                        prop="momo"
+                        prop="memo"
                         label="备注"
                         width="120">
                     </el-table-column>
@@ -296,9 +300,14 @@ export default {
   watch: {},
   //方法集合
   methods: {
-    createCdkey(){
+    createCdkey(type){
         window.localStorage.removeItem('cdKeyId')
-        this.$router.push({path: '/createCdkey'})
+        this.$router.push({
+            path: '/createCdkey',
+            query: {
+                type: type
+            }
+        })
     },
     handleSort(value){
         let dataSort = {
@@ -393,7 +402,8 @@ export default {
             this.$router.push({
                 path: "/checkGoods",
                 query: {
-                    id: row?row.id:''
+                    id: row?row.id:'',
+                    type: row.type
                 },
             });
         }