瀏覽代碼

1. 完成

MONSTER-ygh 1 年之前
父節點
當前提交
ab496bfc61

+ 82 - 43
src/views/tourism/membershipManagement/electronicMembership/formBox/membershipLevelForm.vue

@@ -2,7 +2,7 @@
   <el-dialog
     :title="title"
     :visible.sync="open"
-    width="70%"
+    width="75%"
     append-to-body
     :close-on-click-modal="false"
     @close="cancel"
@@ -18,24 +18,24 @@
         element-loading-spinner="''"
         element-loading-background="rgba(0, 0, 0, 0.8)"
         >
-        <el-form :model="form" ref="form" :rules="rules" label-width="120px">
+        <el-form :model="form" ref="form" :rules="rules" label-width="200px">
           <div class="form-title"><span>基本信息</span></div>
           <el-form-item label="等级名称:" prop="name">
-            <el-input style="width: 350px;" v-model="form.name" placeholder="请输入等级名称" maxlength="20" show-word-limit />
+            <el-input style="width: 350px;" v-model="form.name" placeholder="请输入等级名称" maxlength="50" show-word-limit />
           </el-form-item>
-          <el-form-item label="所需积分值:" prop="name">
-            <el-input style="width: 350px;" v-model="form.name" placeholder="请输入所需积分值" maxlength="20" show-word-limit />
+          <el-form-item label="所需积分值:" prop="upIntegral">
+            <el-input-number style="width: 350px;" v-model="form.upIntegral" controls-position="right" placeholder="请输入所需积分值"></el-input-number>
           </el-form-item>
-          <el-form-item label="等级图片" prop="imgUrl">
+          <el-form-item label="等级图片" prop="logo">
             <div style="display: flex;">
               <div 
-              v-for="(item,index) in form.imgUrl" 
+              v-for="(item,index) in form.logo" 
               :key="index"
               style="width: 100px; height: 100px;position: relative;border: 1px solid #999;border-radius: 5px;margin-right: 20px;">
                 <el-image 
                   style="width: 100%; height: 100%"
                   :src="item" 
-                  :preview-src-list="form.imgUrl">
+                  :preview-src-list="form.logo">
                 </el-image>
                 <span @click="handleRemove(index)" style="position: absolute;top: -15px;right: -15px;color: red;font-size: 24px;z-index: 999;cursor: pointer;">
                   <i class="el-icon-error"></i>
@@ -43,7 +43,7 @@
               </div>
               <div 
               style="width: 100px; height: 100px;" 
-              v-if="!form.imgUrl||form.imgUrl.length<1"
+              v-if="!form.logo||form.logo.length<1"
               v-loading="actionUrlLoading"
               element-loading-text="上传中..."
               element-loading-spinner="el-icon-loading"
@@ -70,32 +70,57 @@
             <span>建议尺寸XXX*XXX,支持jpg、png,支持100KB大小以内的图片上传</span>
           </el-form-item>
           <div class="form-title"><span>会员权益</span></div>
-          <el-form-item label="折扣权益:" prop="name">
-            <el-form-item label="基本折扣:" prop="name">
-              <el-input style="width: 350px;" v-model="form.name" placeholder="请输入基本折扣" maxlength="20" show-word-limit />
-            </el-form-item>
-            <el-form-item label="单品折扣:" prop="name">
-              <el-select v-model="form.goodId" clearable placeholder="请选择景点产品">
-                <el-option
-                  v-for="item in scenicAreaProducts"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value">
-                </el-option>
-              </el-select>
-              <el-input style="width: 350px;" v-model="form.name" placeholder="请输入单品折扣" maxlength="20" show-word-limit />
-            </el-form-item>
+          <el-form-item label="折扣权益:">
+            <div style="display: flex;align-items: center;">
+              <el-form-item label="基本折扣:" prop="discount" label-width="100px">
+                <el-input-number style="width: 150px;" v-model="form.discount" controls-position="right" placeholder="请输入基本折扣"></el-input-number>
+                <span style="padding-bottom: 15px;">%</span>
+              </el-form-item>
+              <el-button style="margin-left: 15px;" v-if="!form.classifyList||form.classifyList.length==0" type="primary" @click="addClassifyList">添加单品</el-button>
+            </div>
+            
+            <div v-for="(item,index) in form.classifyList" :key="index" style="margin-top: 10px;display: flex;align-items: center;">
+              <el-form-item label="单品折扣:" label-width="100px">
+                <el-select v-model="form.classifyList[index].classifyId" clearable placeholder="请选择单品">
+                  <el-option
+                    v-for="item in scenicAreaProducts"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value">
+                  </el-option>
+                </el-select>
+                <el-input-number style="width: 150px;margin-left: 20px;" v-model="form.classifyList[index].discount" placeholder="请输入单品折扣" controls-position="right"></el-input-number>
+                <span style="padding-bottom: 15px;">%</span>
+              </el-form-item>
+              <el-button style="margin-left: 15px;" v-if="form.classifyList.length==(index+1)" type="primary" @click="addClassifyList">添加单品</el-button>
+              <el-button style="margin-left: 15px;" type="danger" @click="clearClassifyList(index)">移除</el-button>
+            </div>
           </el-form-item>
-          <el-form-item label="积分权益:" prop="name">
-            <el-form-item label="积分成长系数:" prop="name">
-              <el-input style="width: 350px;" v-model="form.name" placeholder="请输入积分成长系数" maxlength="20" show-word-limit />
+          <el-form-item label="积分权益:">
+            <el-form-item label="积分成长系数:" prop="integralRatio" label-width="120px">
+              <el-input-number style="width: 150px;" v-model="form.integralRatio" placeholder="请输入积分成长系数" controls-position="right"></el-input-number>
+              <span style="padding-bottom: 15px;font-size: 12px;color: #ccc;">(会员下单获取积分值=实付金额**积分规则基础系数"会员成长系数会员系数越大,获得成长值越多,建议数值设置不要过大)</span>
             </el-form-item>
           </el-form-item>
-          <el-form-item label="专属优惠卷:" prop="name">
-            <el-input style="width: 350px;" v-model="form.name" placeholder="请输入专属优惠卷" maxlength="20" show-word-limit />
+          <el-form-item label="专属优惠卷:" prop="couponIdList">
+            <el-select v-model="form.couponIdLList" clearable placeholder="请选择专属优惠卷">
+              <el-option
+                v-for="item in scenicAreaProducts"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+                </el-option>
+            </el-select>
           </el-form-item>
-          <el-form-item label="指定产品不参与会员折扣:" prop="name">
-            <el-input style="width: 350px;" v-model="form.name" placeholder="请输入指定产品不参与会员折扣" maxlength="20" show-word-limit />
+          <el-form-item label="指定产品不参与会员折扣:" prop="goodsIdList">
+            <el-select v-model="form.goodsIdList" clearable placeholder="请选择指定产品不参与会员折扣">
+              <el-option
+                v-for="item in scenicAreaProducts"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+                </el-option>
+            </el-select>
           </el-form-item>
         </el-form>
       </div>
@@ -145,11 +170,10 @@ export default {
       },
       rules: {
         name: [{ required: true, message: "请输入等级名称", trigger: ["change","blur"] }],
-        imgUrl: [{ required: true, message: "选上传图片", trigger: ["change","blur"] }],
-        openDate: [{ required: true, message: "选择开/闭园时间范围", trigger: ["change","blur"] }],
-        goodId: [{ required: false, message: "请输入景点产品", trigger: ["change","blur"] }],
-        status: [{ required: true, message: "请输入开放状态", trigger: ["change","blur"] }],
-        content: [{ required: true, message: "请输入开放状态", trigger: ["change","blur"] }],
+        logo: [{ required: true, message: "选上传图片", trigger: ["change","blur"] }],
+        upIntegral: [{ required: true, message: "选输入所需积分值", trigger: ["change","blur"] }],
+        discount: [{ required: true, message: "选输入基本折扣", trigger: ["change","blur"] }],
+        integralRatio: [{ required: true, message: "选输入积分成长系数", trigger: ["change","blur"] }],
       },
       scenicAreaProducts: [],// 景点产品关联
 
@@ -168,12 +192,12 @@ export default {
       this.model = model
       this.formStatus = 0
       if(model=='ADD') { // 新增
-        this.$set(this,'form',{...row,imgUrl:[]})
+        this.$set(this,'form',{...row,logo:[]})
         this.formStatus = 1
       }else if(model=='EDIT') { // 新增
         let obj = {
           ...row,
-          imgUrl: row.imgUrl?row.imgUrl.split(','):[]
+          logo: row.logo?row.logo.split(','):[]
         }
         this.$set(this,'form',obj)
         this.formStatus = 1
@@ -196,7 +220,7 @@ export default {
         if(res.code == 200) {
           let obj = {
             ...res.data,
-            imgUrl: res.data.imgUrl?res.data.imgUrl.split(','):[],
+            logo: res.data.logo?res.data.logo.split(','):[],
         }
           this.$set(this,'form',JSON.parse(JSON.stringify(obj)))
           this.formStatus = 1
@@ -228,7 +252,7 @@ export default {
             addTableApi(
               this.configUrl.edit,{
                 ...this.form,
-                imgUrl: this.form.imgUrl ? this.form.imgUrl.join(','):''
+                logo: this.form.logo ? this.form.logo.join(','):''
               }).then(response => {
               this.$modal.msgSuccess("修改成功");
               this.loading = false
@@ -241,7 +265,7 @@ export default {
           } else {
             addTableApi(this.configUrl.edit,{
                 ...this.form,
-                imgUrl: this.form.imgUrl ? this.form.imgUrl.join(','):''
+                logo: this.form.logo ? this.form.logo.join(','):''
               }).then(response => {
               this.$modal.msgSuccess("新增成功");
               this.loading = false
@@ -280,7 +304,7 @@ export default {
       console.log("res, file",response, file, fileList)
       this.actionUrlLoading = false
       if(response.code == 200) {
-        this.form.imgUrl.push(response.data.url)
+        this.form.logo.push(response.data.url)
       }
     },
     beforeAvatarUpload(file) {
@@ -303,8 +327,23 @@ export default {
       this.actionUrlLoading = false
     },
     handleRemove(index) {
-      this.form.imgUrl.splice(index,1)
+      this.form.logo.splice(index,1)
     },
+
+    /** 填加单品  */
+    addClassifyList(){
+      let list = JSON.parse(JSON.stringify(this.form.classifyList))
+      list.push({
+        classifyId: null,
+        discount: null,
+        classifyName: null
+      })
+      this.$set(this.form,'classifyList',list)
+    }, 
+    /** 移除单品  */
+    clearClassifyList(index) {
+      this.form.classifyList.splice(index,1)
+    }
   },
 };
 </script>

+ 66 - 35
src/views/tourism/productManagement/formBox/scenicAreaTicketsSpecsForm.vue

@@ -21,6 +21,13 @@
         <div style="display: flex;">
           <!-- 票种规格  -->
           <div style="width: 400px;">
+            <div><el-button
+                type="primary"
+                plain
+                icon="el-icon-plus"
+                size="mini"
+                @click="handleAdd"
+              >添加票种和规格</el-button></div>
             <el-table :data="tableList">
               <el-table-column type="index" label="序号" align="center"  />
               <el-table-column label="门票名称" align="center" key="name" prop="name" />
@@ -39,59 +46,57 @@
           <div style="width: calc( 100% - 400px );padding-left: 40px;box-sizing: border-box;">
             <el-form :model="form" ref="form" :rules="rules" label-width="130px">
               <div class="form-title"><span>规格信息</span></div>
-              <el-form-item label="票种规格名称:" prop="name">
-                <el-input style="width: 100%;" v-model="form.name" placeholder="请输入票种规格名称" maxlength="50" show-word-limit />
+              <el-form-item label="票种规格名称:" prop="goodsName">
+                <el-input style="width: 100%;" v-model="form.goodsName" placeholder="请输入票种规格名称" maxlength="50" show-word-limit />
               </el-form-item>
-              <el-form-item label="规格描述:" prop="name">
-                <el-input style="width: 100%;" v-model="form.name" placeholder="请输入规格描述" maxlength="50" show-word-limit />
+              <el-form-item label="规格描述:" prop="goodsSnashot">
+                <el-input style="width: 100%;" v-model="form.goodsSnashot" placeholder="请输入规格描述" maxlength="50" show-word-limit />
               </el-form-item>
-              <el-form-item label="日期类型" prop="type">
-                <el-radio-group v-model="form.type">
-                  <el-radio 
-                    v-for="dict in dict.type.tourism_online_type"
-                    :label="Number(dict.value)"
-                    >{{ dict.label }}</el-radio>
+              <el-form-item label="日期类型" prop="dayType">
+                <el-radio-group v-model="form.dayType">
+                  <el-radio-button label="null">日历票</el-radio-button>
+                  <el-radio-button label="YYYY-MM-DD~YYYY-MM-DD">期票,日期范围内有效</el-radio-button>
                 </el-radio-group>
               </el-form-item>
-              <el-form-item label="消费日期" prop="type">
-                <el-radio-group v-model="form.type">
+              <el-form-item label="消费日期" prop="useExpireDate">
+                <el-radio-group v-model="form.useExpireDate">
                   <el-radio 
-                    v-for="dict in dict.type.tourism_online_type"
+                    v-for="dict in dict.type.tourism_scenicAreaTickets_useExpireDate"
                     :label="Number(dict.value)"
                     >{{ dict.label }}</el-radio>
                 </el-radio-group>
               </el-form-item>
               <el-form-item label="销售价格">
                 <div style="display: flex;">
-                  <el-form-item label="小程序价格:" prop="name">
-                    <el-input style="width: 100%;" v-model="form.name" placeholder="请输入小程序价格" maxlength="50" show-word-limit />
+                  <el-form-item label="小程序价格:" prop="saleprice">
+                    <el-input style="width: 100%;" v-model="form.saleprice" placeholder="请输入小程序价格" maxlength="50" show-word-limit />
                   </el-form-item>
-                  <el-form-item label="规划价格:" prop="name">
-                    <el-input style="width: 100%;" v-model="form.name" placeholder="请输入规划价格" maxlength="50" show-word-limit />
+                  <el-form-item label="规划价格:" prop="originalPrice">
+                    <el-input style="width: 100%;" v-model="form.originalPrice" placeholder="请输入规划价格" maxlength="50" show-word-limit />
                   </el-form-item>
                 </div>
               </el-form-item>
               <el-form-item label="实名购票" prop="type">
                 <el-radio-group v-model="form.type">
                   <el-radio 
-                    v-for="dict in dict.type.tourism_online_type"
+                    v-for="dict in dict.type.tourism_scenicAreaTickets_type"
                     :label="Number(dict.value)"
                     >{{ dict.label }}</el-radio>
                 </el-radio-group>
               </el-form-item>
-              <el-form-item label="实名要求" prop="type">
-                <el-radio-group v-model="form.type">
+              <el-form-item label="实名要求" prop="oneMany">
+                <el-radio-group v-model="form.oneMany">
                   <el-radio 
-                    v-for="dict in dict.type.tourism_online_type"
+                    v-for="dict in dict.type.tourism_scenicAreaTickets_oneMany"
                     :label="Number(dict.value)"
                     >{{ dict.label }}</el-radio>
                 </el-radio-group>
               </el-form-item>
               <div class="form-title"><span>退票规则</span></div>
-              <el-form-item label="退票政策" prop="type">
-                <el-radio-group v-model="form.type">
+              <el-form-item label="退票政策" prop="backStatus">
+                <el-radio-group v-model="form.backStatus">
                   <el-radio 
-                    v-for="dict in dict.type.tourism_online_type"
+                    v-for="dict in dict.type.tourism_scenicAreaTickets_backStatus"
                     :label="Number(dict.value)"
                     >{{ dict.label }}</el-radio>
                 </el-radio-group>
@@ -99,15 +104,15 @@
               <el-form-item label="提前退票" prop="type">
                 <el-radio-group v-model="form.type">
                   <el-radio 
-                    v-for="dict in dict.type.tourism_online_type"
+                    v-for="dict in dict.type.tourism_scenicAreaTickets_type"
                     :label="Number(dict.value)"
                     >{{ dict.label }}</el-radio>
                 </el-radio-group>
               </el-form-item>
-              <el-form-item label="过期未核销" prop="type">
-                <el-radio-group v-model="form.type">
+              <el-form-item label="过期未核销" prop="expiredProcess">
+                <el-radio-group v-model="form.expiredProcess">
                   <el-radio 
-                    v-for="dict in dict.type.tourism_online_type"
+                    v-for="dict in dict.type.tourism_scenicAreaTickets_expiredProcess"
                     :label="Number(dict.value)"
                     >{{ dict.label }}</el-radio>
                 </el-radio-group>
@@ -116,7 +121,7 @@
               <el-form-item label="指定年龄" prop="type">
                 <el-radio-group v-model="form.type">
                   <el-radio 
-                    v-for="dict in dict.type.tourism_online_type"
+                    v-for="dict in dict.type.tourism_scenicAreaTickets_type"
                     :label="Number(dict.value)"
                     >{{ dict.label }}</el-radio>
                 </el-radio-group>
@@ -124,7 +129,7 @@
               <el-form-item label="指定性别" prop="type">
                 <el-radio-group v-model="form.type">
                   <el-radio 
-                    v-for="dict in dict.type.tourism_online_type"
+                    v-for="dict in dict.type.tourism_scenicAreaTickets_type"
                     :label="Number(dict.value)"
                     >{{ dict.label }}</el-radio>
                 </el-radio-group>
@@ -132,7 +137,7 @@
               <el-form-item label="指定地点" prop="type">
                 <el-radio-group v-model="form.type">
                   <el-radio 
-                    v-for="dict in dict.type.tourism_online_type"
+                    v-for="dict in dict.type.tourism_scenicAreaTickets_type"
                     :label="Number(dict.value)"
                     >{{ dict.label }}</el-radio>
                 </el-radio-group>
@@ -168,7 +173,7 @@ import {
 
 export default {
   name: "addAndEdit",
-  dicts: ['tourism_online_status','tourism_online_type','tourism_online_type'],
+  dicts: ['tourism_scenicAreaTickets_status','tourism_scenicAreaTickets_type','tourism_scenicAreaTickets_type'],
   data() {
     return {
       title: "",
@@ -179,10 +184,10 @@ export default {
       loadingText: "拼命加载数据中...",
       formStatus: null, // 0/null : 加载中 1 : 获取详情成功 2  : 获取详情失败 
       configUrl: {
-        add: '/merchant/merchantPerformAuditorium/saveMerchantPerform', // 新增地址
+        add: '/merchant/merchantPerformAuditorium/saveMerchantGoods', // 新增地址
         details: '/merchant/merchantPerformAuditorium/merchantGoodsDetail', // 规格详情
         list: '/merchant/merchantPerformAuditorium/merchantGoodsList',// 规格列表
-        edit: '/merchant/merchantPerformAuditorium/saveMerchantPerform', // 编辑地址
+        edit: '/merchant/merchantPerformAuditorium/saveMerchantGoods', // 编辑地址
       },
       form: {
         id: undefined,
@@ -215,7 +220,7 @@ export default {
         this.$set(this,'form',obj)
         this.formStatus = 1
       }else if(model=='EDITInit') { // 新增
-        await this.getTableDeatilsFun(row)
+        await this.getTableListFun(row)
       }
       this.loading = false
       this.$nextTick(()=>{
@@ -225,6 +230,29 @@ export default {
       })
     },
     /** 获取详情 */
+    async getTableListFun(row) {
+      const id = row.performId
+      this.loading = true
+      try {
+        let res = await getTableDeatilsByIdApi(this.configUrl.list,{performId: id})
+        if(res.code == 200) {
+          this.tableList = res.data.rows
+          this.formStatus = 1
+        }else {
+          this.$message.error('获取详情失败!!!');
+          this.formStatus = 2
+          this.loading = false
+          this.open = false;
+        }
+        this.loading = false
+      } catch (error) {
+        console.error('获取详情失败!!!!',error)
+        this.formStatus = 2
+        this.loading = false
+        this.open = false;
+      }
+    },
+    /** 获取详情 */
     async getTableDeatilsFun(row) {
       const id = row.performId
       this.loading = true
@@ -308,6 +336,9 @@ export default {
       this.reset();
       this.open = false;
     },
+    handleAdd(){
+      
+    }
   },
 };
 </script>