فهرست منبع

完成积分规则

Joe 4 سال پیش
والد
کامیت
356b57d41a
3فایلهای تغییر یافته به همراه341 افزوده شده و 251 حذف شده
  1. 1 6
      src/views/market/Market_Discount.vue
  2. 338 245
      src/views/point/Point_Rule.vue
  3. 2 0
      src/views/station/Station_Equipment.vue

+ 1 - 6
src/views/market/Market_Discount.vue

@@ -351,11 +351,6 @@ export default {
       this.getPay().then(() => {
         this.getList();
       });
-      getStationPay().then((response) => {
-        this.ruleForm = response.data;
-        this.discountSetting = response.data.discountSetting;
-        this.getList();
-      });
     },
     getPay() {
       return getStationPay().then((response) => {
@@ -367,7 +362,7 @@ export default {
     save() {
       this.$refs["ruleForm"].validate((valid) => {
         if (valid) {
-          if (this.ruleForm.payId != null) {
+          if (this.ruleForm.deptId != null) {
             let e = this.ruleForm.discountSetting;
             if (e == "0") {
               updatePay(this.ruleForm).then((response) => {

+ 338 - 245
src/views/point/Point_Rule.vue

@@ -1,247 +1,273 @@
 <template>
   <div class="app-container">
     <el-form ref="form" :model="form" :rules="rules" label-width="120px">
-      <el-form-item label="是否开启积分规则功能" label-width="160px">
+      <el-form-item
+        label="是否开启积分"
+        label-width="160px"
+        prop="integralFlag"
+      >
         <el-radio-group v-model="form.integralFlag">
           <el-radio label="0">关闭</el-radio>
           <el-radio label="1">开启</el-radio>
         </el-radio-group>
       </el-form-item>
-      <el-form-item label="油品积分规则">
-        <div
-          v-for="(item, index) in form.itemsDetail || []"
-          :key="index"
-          style="border: 1px solid"
+      <div v-show="form.integralFlag==1">
+        <el-form-item
+          label="积分规则"
+          prop="itemsDetail"
+          :required="form.integralFlag==1"
         >
-          <div>
-            适用油品
-            <el-select
-              v-model="item.oilName"
-              placeholder="请选择油品"
-              clearable
-              size="small"
-              @change="oilNameChang(item, index)"
-            >
-              <el-option
-                v-for="item in oilNameOptions"
-                :key="item.oilName"
-                :label="item.oilName"
-                :value="item.oilName"
-              ></el-option>
-            </el-select>
+          <div
+            v-for="(item, index) in form.itemsDetail"
+            :key="index"
+            style="border: 1px solid"
+          >
+            <div>
+              适用油品
+              <el-select
+                v-model="item.oilName"
+                placeholder="请选择油品"
+                clearable
+                size="small"
+                @change="oilNameChang(item, index)"
+              >
+                <el-option
+                  v-for="ele in oilNameOptions"
+                  :key="ele.oilName"
+                  :label="ele.oilName"
+                  :value="ele.oilName"
+                ></el-option>
+              </el-select>
+            </div>
+            <div v-if="item.oilType != 3">
+              规则类型
+              <el-select
+                v-model="item.ruleType"
+                placeholder="请选择规则"
+                clearable
+                size="small"
+              >
+                <el-option label="以订单实付累计" value="1"></el-option>
+                <el-option label="以订单应付累计" value="2"></el-option>
+                <el-option label="以加油升数累计" value="3"></el-option>
+              </el-select>
+            </div>
+            <div v-if="item.oilType != 3">
+              适用等级
+              <el-select
+                v-model="item.grade"
+                placeholder="请选择等级"
+                clearable
+                size="small"
+                @change="gradeChange(item)"
+              >
+                <el-option
+                  v-for="ele in item.gradeList || []"
+                  :key="ele.id"
+                  :label="ele.grade"
+                  :value="ele.id"
+                ></el-option>
+                <el-option key="0" label="所有人" :value="0"></el-option>
+              </el-select>
+            </div>
+            <div>
+              满
+              <el-input-number
+                v-model="item.ruleTerms"
+                :min="0"
+                size="small"
+              />元(L) 开始积分
+            </div>
+            <div>
+              每消费
+              <el-input-number
+                v-model="item.saleAmt"
+                size="small"
+                :min="0"
+              />元获得
+              <el-input-number
+                v-model="item.integral"
+                size="small"
+                :min="0"
+              />积分
+            </div>
+            <div>
+              <el-button type="danger" @click="delItem(index)" size="small"
+                >删除</el-button
+              >
+              <el-button
+                v-show="index == form.itemsDetail.length - 1"
+                type="success"
+                @click="addItem()"
+                size="small"
+                >新增</el-button
+              >
+            </div>
           </div>
-          <div v-if="item.oilType != 3">
-            规则类型
-            <el-select
-              v-model="item.ruleType"
-              placeholder="请选择规则"
+        </el-form-item>
+
+        <el-form-item
+          label="积分有效期"
+          prop="integralTermSetting"
+          :required="form.integralFlag == 1"
+        >
+          <el-radio-group v-model="form.integralTermSetting">
+            <el-radio label="1">永久有效</el-radio>
+            <el-radio label="2">指定清空积分时间</el-radio>
+          </el-radio-group>
+          <div v-show="form.integralTermSetting == 2">
+            <el-date-picker
               clearable
               size="small"
+              style="width: 200px; margin-left: 10px"
+              v-model="form.integralEmptyTime"
+              type="datetime"
             >
-              <el-option label="以订单实付累计" value="1"></el-option>
-              <el-option label="以订单应付累计" value="2"></el-option>
-              <el-option label="以加油升数累计" value="3"></el-option>
-            </el-select>
+            </el-date-picker>
           </div>
-          <div v-if="item.oilType != 3">
-            适用等级
-            <el-select
-              v-model="item.gread"
-              placeholder="请选择等级"
+        </el-form-item>
+
+        <el-form-item
+          label="积分活动时限"
+          prop="termDateManage"
+          :required="form.integralFlag == 1"
+        >
+          <el-radio-group v-model="form.termDateManage">
+            <el-radio label="1">永久有效</el-radio>
+            <el-radio label="2">指定活动结束时间</el-radio>
+          </el-radio-group>
+          <div v-show="form.termDateManage == 2">
+            <el-date-picker
               clearable
               size="small"
+              style="width: 200px; margin-left: 10px"
+              v-model="form.emptyDate"
+              type="date"
+              value-format="yyyy-MM-dd"
             >
-              <el-option
-                v-for="ele in item.gradeList || []"
-                :key="ele.id"
-                :label="ele.grade"
-                :value="ele.id.toString()"
-              ></el-option>
-              <el-option key="0" label="所有人" value="0"></el-option>
-            </el-select>
-          </div>
-          <div>
-            满
-            <el-input-number
-              v-model="item.ruleTerms"
-              :min="0"
-              size="small"
-            />元(L) 开始积分
+            </el-date-picker>
           </div>
-          <div>
-            每消费
-            <el-input-number
-              v-model="item.saleAmt"
-              size="small"
-              :min="0"
-            />元获得
-            <el-input-number
-              v-model="item.integral"
-              size="small"
-              :min="0"
-            />积分
-          </div>
-          <div>
-            <el-button type="danger" @click="del(index)" size="small"
-              >删除</el-button
-            >
-            <el-button
-              v-show="index == rowsnum"
-              type="success"
-              @click="addItem()"
-              size="small"
-              >新增</el-button
-            >
-          </div>
-        </div>
-      </el-form-item>
-
-      <el-form-item label="积分有效期设置" prop="termDateManage">
-        <el-radio-group v-model="form.integralTermSetting">
-          <el-radio label="1"> 永久有效 </el-radio>
-          <el-radio label="2"> 指定清空积分时间 </el-radio>
-        </el-radio-group>
-        <div v-show="form.integralTermSetting == 2">
-          <el-date-picker
-            clearable
-            size="small"
-            style="width: 200px; margin-left: 10px"
-            v-model="form.integralEmptyTime"
-            type="datetime"
-          >
-          </el-date-picker>
-        </div>
-      </el-form-item>
-
-      <el-form-item label="积分活动时限" prop="termDateManage">
-        <el-radio-group v-model="form.termDateManage">
-          <el-radio label="1">不指定结束时间</el-radio>
-          <el-radio label="2">指定结束时间</el-radio>
-        </el-radio-group>
-        <div v-show="form.termDateManage == 2">
-          <el-date-picker
-            clearable
-            size="small"
-            style="width: 200px; margin-left: 10px"
-            v-model="form.emptyDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-          >
-          </el-date-picker>
-        </div>
-      </el-form-item>
-      <el-form-item label="多倍积分活动">
-        <el-radio-group v-model="form.integralActivity">
-          <el-radio label="0">关闭</el-radio>
-          <el-radio label="1">开启</el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item
-        label="周期类型"
-        prop="datePicker"
-        v-show="form.integralActivity == 1"
-      >
-        <el-select v-model="form.datePicker" clearable size="small">
-          <el-option label="每周指定日" value="1"></el-option>
-          <el-option label="每月指定日" value="2"></el-option>
-          <el-option label="固定活动日" value="3"></el-option>
-        </el-select>
-        <div
-          v-show="form.datePicker != 3"
-          style="
-            display: flex;
-            flex-wrap: wrap;
-            border-style: solid;
-            border-color: #f5f7fa;
-          "
+        </el-form-item>
+        <el-form-item
+          label="多倍积分"
+          prop="integralActivity"
+          :required="form.integralFlag == 1"
+        >
+          <el-radio-group v-model="form.integralActivity">
+            <el-radio label="0">关闭</el-radio>
+            <el-radio label="1">开启</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item
+          label="周期类型"
+          prop="datePicker"
+          :required="form.integralActivity == 1"
+          v-show="form.integralActivity == 1"
         >
+          <el-select v-model="form.datePicker" clearable size="small">
+            <el-option label="每周指定日" value="1"></el-option>
+            <el-option label="每月指定日" value="2"></el-option>
+            <el-option label="固定活动日" value="3"></el-option>
+          </el-select>
           <div
-            v-for="(item, index) in timeSelect[form.datePicker]"
-            :key="index"
-            style="margin: 3px"
+            v-show="form.datePicker != 3"
+            style="
+              display: flex;
+              flex-wrap: wrap;
+              border-style: solid;
+              border-color: #f5f7fa;
+            "
           >
             <div
-              class="hover-style"
-              style="
-                border-radius: 5px;
-                font-weight: bold;
-                font-size: 12px;
-                cursor: pointer;
-              "
-              @click="clickCalendar(index)"
+              v-for="(item, index) in timeSelect[form.datePicker]"
+              :key="index"
+              style="margin: 3px"
             >
-              <div>{{ item }}</div>
               <div
-                v-if="form.collectClickCalendar.indexOf(index) > -1"
+                class="hover-style"
                 style="
-                  width: 4px;
-                  height: 4px;
-                  border-radius: 50%;
-                  background-color: red;
-                  position: relative;
-                  left: calc(50% - 2px);
+                  border-radius: 5px;
+                  font-weight: bold;
+                  font-size: 12px;
+                  cursor: pointer;
                 "
-              ></div>
-              <div v-else style="width: 4px; height: 4px"></div>
+                @click="clickCalendar(index)"
+              >
+                <div>{{ item }}</div>
+                <div
+                  v-if="form.collectClickCalendar.indexOf(index) > -1"
+                  style="
+                    width: 4px;
+                    height: 4px;
+                    border-radius: 50%;
+                    background-color: red;
+                    position: relative;
+                    left: calc(50% - 2px);
+                  "
+                ></div>
+                <div v-else style="width: 4px; height: 4px"></div>
+              </div>
             </div>
           </div>
-        </div>
-      </el-form-item>
-      <el-form-item
-        label="积分比例"
-        prop="integralProportion"
-        v-show="form.integralActivity == 1"
-      >
-        <el-input-number
-          v-model="form.integralProportion"
-          style="width: 130px"
-          :min="1"
-          placeholder="请输入加倍比例"
-        />
-        <span>倍</span>
-      </el-form-item>
-      <el-form-item> </el-form-item>
-      <el-form-item v-show="datetrue">
-        <el-date-picker
-          clearable
-          size="small"
-          style="margin-left: 10px; width: 200px"
-          v-model="form.collectClickDay"
-          type="dates"
-          value-format="yyyy-MM-dd"
-          placeholder="选择提醒时间设置"
+          <div v-show="form.datePicker == 3">
+            <el-date-picker
+              clearable
+              size="small"
+              style="margin-left: 10px; width: 200px"
+              v-model="form.collectClickDay"
+              type="dates"
+              value-format="yyyy-MM-dd"
+              placeholder="选择提醒时间设置"
+            >
+            </el-date-picker>
+          </div>
+        </el-form-item>
+        <el-form-item
+          label="积分比例"
+          prop="integralProportion"
+          v-show="form.integralActivity == 1"
+          :required="form.integralActivity == 1"
         >
-        </el-date-picker>
-      </el-form-item>
-      <el-row v-show="form.integralActivity == 1">
-        <el-col :span="8" style=""> </el-col>
+          <el-input-number
+            v-model="form.integralProportion"
+            style="width: 130px"
+            :min="1"
+            placeholder="请输入加倍比例"
+          />
+          <span>倍</span>
+        </el-form-item>
+        <el-form-item> </el-form-item>
+        <el-row v-show="form.integralActivity == 1">
+          <el-col :span="8" style=""> </el-col>
 
-        <el-col :span="8"> </el-col>
-      </el-row>
-      <el-form-item label="积分轮播图">
-        <el-upload
-          class="avatar-uploader"
-          :action="addressUrl"
-          :headers="headers"
-          multiple
-          list-type="picture-card"
-          :limit="5"
-          :file-list="form.imgFileList"
-          accept="image/gif,image/jpeg,image/png,image/jpg,image/bmp"
-          :before-upload="beforeAvatarUpload"
-          :on-remove="handleRemove"
-          :on-success="handlepaymentSuccess"
-        >
-          <i class="el-icon-plus"></i>
-          <div class="el-upload__tip" slot="tip">
-            只能上传jpg/png文件,最多上传5张且单张图片不超过1M
-          </div>
-        </el-upload>
-        <el-dialog :visible.sync="dialogVisible" append-to-body>
-          <img width="100%" :src="dialogImageUrl" alt="" />
-        </el-dialog>
-      </el-form-item>
+          <el-col :span="8"> </el-col>
+        </el-row>
+        <el-form-item label="积分轮播图" prop="imgFileList">
+          <el-upload
+            class="avatar-uploader"
+            :action="addressUrl"
+            :headers="headers"
+            multiple
+            list-type="picture-card"
+            :limit="5"
+            :file-list="form.imgFileList"
+            accept="image/gif,image/jpeg,image/png,image/jpg,image/bmp"
+            :before-upload="beforeAvatarUpload"
+            :on-remove="handleRemove"
+            :on-success="handlepaymentSuccess"
+          >
+            <i class="el-icon-plus"></i>
+            <div class="el-upload__tip" slot="tip">
+              只能上传jpg/png文件,最多上传5张且单张图片不超过1M
+            </div>
+          </el-upload>
+          <el-dialog :visible.sync="dialogVisible" append-to-body>
+            <img width="100%" :src="dialogImageUrl" alt="" />
+          </el-dialog>
+        </el-form-item>
+      </div>
     </el-form>
+
     <div slot="footer" class="dialog-footer">
       <el-button type="primary" @click="submitForm" :disabled="false"
         >确 定</el-button
@@ -265,30 +291,98 @@ import { queryOilType } from "@/utils/oil";
 export default {
   name: "Point_Rule",
   data() {
+    let validateItemsDetail = (rule, value, callback) => {
+      if (this.form.itemsDetail.length <= 0) {
+        callback(new Error("请先配置设置规则"));
+        return;
+      }
+      this.form.itemsDetail.forEach((ele) => {
+        if (!ele.oilName || !ele.ruleTerms || !ele.saleAmt || !ele.integral) {
+          console.log("1");
+          callback(new Error("请检查规则完整性"));
+          return;
+        }
+        if (ele.oilType != 3) {
+          if (!ele.ruleType || ele.grade == undefined || ele.grade == "") {
+            console.log("2");
+            callback(new Error("请检查规则完整性"));
+            return;
+          }
+        }
+      });
+      callback();
+    };
+    let validateIntegralTermSetting = (rule, value, callback)=>{
+      if(!this.form.integralTermSetting){
+        callback(new Error("请选择积分有效期"));
+        return;
+      }
+      if(this.form.integralTermSetting == 2){
+        if(!this.form.integralEmptyTime){
+          callback(new Error("请填写积分指定的到期时间"));
+          return;
+        }
+      }
+      callback();
+    }
+    let validateTermDateManage = (rule, value, callback)=>{
+      if(!this.form.termDateManage){
+        callback(new Error("请选择积分活动的结束时间"));
+        return;
+      }
+      if(this.form.termDateManage == 2){
+        if(!this.form.emptyDate){
+          callback(new Error("请填写积分活动的结束时间"));
+          return;
+        }
+      }
+      callback();
+    }
+    let validateDatePicker =(rule, value, callback)=>{
+      if(!this.form.datePicker){
+        callback(new Error("请选择多倍积分的周期类型"));
+        return;
+      }
+      console.log('列表',this.form.collectClickCalendar,this.form.datePicker)
+      if(this.form.datePicker == 1 || this.form.datePicker == 2){
+        if(this.form.collectClickCalendar.length<= 0){
+          callback(new Error("请选择多倍积分的时间"));
+          return;
+        }
+      }
+      if(this.form.datePicker == 3){
+        if(!this.form.collectClickDay){
+          callback(new Error("请填写指定的多倍积分日"));
+          return;
+        }
+      }
+      callback();
+    }
     return {
       oilNameOptions: [],
-      gradeOptions: [],
       dialogImageUrl: "",
       num: 0,
       dialogVisible: false,
-      workDaytrue: false,
-      moonDaytrue: false,
-      datetrue: false,
-      rowsnum: 0,
       // 表单参数
       form: {
         itemsDetail: [{}],
-        notOilList: [{}],
         imgFileList: [],
         collectClickCalendar: [], // 收集固定日期选择的日子
         collectClickDay: "",
       },
-      deptInfo: {},
-      query: {
-        deptId: null,
+      rules: {
+        integralFlag: [
+          { required: true, message: "请选择是否开启积分", trigger: "change" },
+        ],
+        integralTermSetting: [{ validator:validateIntegralTermSetting, trigger: "change" }],
+        // termDateManage:[{ required: true, message: "请选择是否开启积分", trigger: "change" }],
+        // integralActivity:[{ required: true, message: "请选择是否开启积分", trigger: "change" }],
+        imgFileList: [{ required: true, message: "", trigger: "change" }],
+        itemsDetail: [{ validator: validateItemsDetail, trigger: "change" }],
+        termDateManage:[{ validator: validateTermDateManage, trigger: "change" }],
+        datePicker:[{ validator: validateDatePicker, trigger: "change" }],
+        
       },
-      // 表单校验
-      rules: {},
       headers: {
         Authorization: "Bearer " + getToken(),
       },
@@ -343,18 +437,22 @@ export default {
       pageNum: 1,
       pageSize: 100,
     }).then((response) => {
-      console.log("拉取", response.data);``
+      console.log("拉取", response.data);
       this.form = response.data;
       this.form.collectClickCalendar = [];
       this.form.collectClickDay = "";
-
+      if (!this.form.itemsDetail || this.form.itemsDetail.length == 0) {
+        this.form.itemsDetail = [{}];
+      }
       if (this.form.datepicker == "1" || this.form.datepicker == "2") {
         this.collectClickCalendar = this.form.datePickerTime
           .split(",")
           .map(parseFloat);
       } else {
-        this.collectClickDay = this.form.datePickerTime;
+        console.log(this.form.datePickerTime);
+        this.form.collectClickDay = "";
       }
+      this.form = { ...this.form };
     });
 
     oilNameList({
@@ -365,29 +463,21 @@ export default {
     });
   },
   methods: {
-    async initGrade(itemDetail) {
-      for (let j = 0; j < itemDetail.length; j++) {
-        const response = await gradeList({
-          oilName: itemDetail[j].oilName,
-        });
-        console.log("12");
-        console.log(response);
-        response.rows.push({
-          id: 0,
-          grade: "所有人",
-        });
-        this.gradeOptions.push(response.rows);
-      }
+    gradeChange(item) {
+      setTimeout(() => {
+        this.form = { ...this.form };
+      }, 0);
     },
     //添加行
     addItem() {
       this.form.itemsDetail.push({});
-      this.rowsnum = this.form.itemsDetail.length - 1;
     },
     // 删除行
-    del(index) {
+    delItem(index) {
+      console.log(123456);
+      console.log(index);
       this.form.itemsDetail.splice(index, 1);
-      if (this.form.itemsDetail.length <= 1) {
+      if (this.form.itemsDetail.length <= 0) {
         this.form.itemsDetail = [{}];
       }
     },
@@ -395,6 +485,9 @@ export default {
       this.form.notOilList = [{}];
     },
     oilNameChang(item, index) {
+      item.grade = "";
+      item.gradeList = [];
+      this.form = { ...this.form };
       gradeList({
         oilName: item.oilName,
       }).then((response) => {
@@ -402,8 +495,8 @@ export default {
         this.form = {
           ...this.form,
         };
+        console.log(item);
       });
-
       queryOilType(item.oilName).then((res) => {
         item.oilType = res;
         this.form = {
@@ -411,7 +504,6 @@ export default {
         };
       });
     },
-
     handleRemove(file, fileList) {
       if (fileList != null && fileList.length > 0) {
         this.form.imgFileList = [];
@@ -451,6 +543,7 @@ export default {
     submitForm() {
       console.log("提交");
       this.$refs["form"].validate((valid) => {
+        console.log(valid);
         if (valid) {
           if (this.form.datePicker == "1" || this.form.datePicker == "2") {
             this.form.datePickerTime = this.form.collectClickCalendar.toString();

+ 2 - 0
src/views/station/Station_Equipment.vue

@@ -261,9 +261,11 @@ export default {
     let validateGunNo = (rule, value, callback) => {
       if (this.allGunList.length === 0) {
         callback(new Error("请先配置油枪后再来配置设备"));
+        return;
       }
       if (this.dialogForm.checkedGunList.length === 0) {
         callback(new Error("请勾选要绑定的油枪"));
+        return;
       }
       callback();
     };