Ver Fonte

Merge branch 'master' of http://39.105.58.247:3100/yidiandao/ydd_front

ZZ há 1 mês atrás
pai
commit
d310f4131f

+ 62 - 0
mer_plat_admin/src/api/rider.js

@@ -376,3 +376,65 @@ export function configUpdateApi(data) {
     data,
   });
 }
+
+/**
+ * @description 配送时间设置 -- 表单提交
+ */
+export function deliveTimeAddApi(data) {
+  return request({
+    url: '/admin/platform/rider/deliveTime/add',
+    method: 'post',
+    data,
+  });
+}
+/**
+ * @description 配送时间设置 -- 表单提交
+ */
+export function deliveTimeUpdateApi(data) {
+  return request({
+    url: '/admin/platform/rider/deliveTime/edit',
+    method: 'post',
+    data,
+  });
+}
+/**
+ * 配送时间列表
+ * 
+ */
+export function deliveTimeListApi() {
+  return request({
+    url: `/admin/platform/rider/deliveTime/all/list`,
+    method: 'get'
+  });
+}
+/**
+ * 配送时间删除
+ * @param data
+ */
+export function deliveTimeDeleteApi(id) {
+  return request({
+    url: `/admin/platform/rider/deliveTime/delete/${id}`,
+    method: 'post',
+  });
+}
+
+/**
+ *配送时间推荐开关
+ */
+export function deliveTimeSwitchApi(id) {
+  return request({
+    url: `/admin/platform/rider/deliveTime/switch/${id}`,
+    method: 'post',
+  });
+}
+/**
+ * 批量设置
+ * @returns {*}
+ */
+export function deliveTimeBatchSetApi(data) {
+  return request({
+    url: `/admin/platform/rider/batch/set/deliveTime`,
+    method: 'post',
+    data,
+  });
+}

+ 439 - 119
mer_plat_admin/src/views/rider/deliverySetting/index.vue

@@ -1,151 +1,471 @@
 <template>
   <div class="divBox">
-    <el-card class="box-card" :bordered="false" shadow="never" :body-style="{ padding: '40px 50px' }">
-      <el-form
-        ref="promoterForm"
-        :model="promoterForm"
-        :rules="rules"
-        label-width="200px"
-        class="demo-promoterForm"
-        v-loading="loading"
-      >
-        <el-form-item prop="basicFee">
-          <span slot="label">
-            <span>基础配送费:</span>
-            <el-tooltip class="item" effect="dark" content="骑手基础配送费" placement="top-start">
-              <i class="el-icon-warning-outline" />
-            </el-tooltip>
-          </span>
-          <el-input-number
-            v-model.trim="promoterForm.basicFee"
-            placeholder="骑手基础配送费"
-            :min="0"
-            :max="100"
-            class="selWidth"
-          ></el-input-number>
-          <span>元</span>
-        </el-form-item>
-        <el-form-item prop="distanceInKm">
-          <span slot="label">
-            <span>设置配送距离:</span>
-            <el-tooltip
-              class="item"
-              effect="dark"
-              content="设置配送距离"
-              placement="top-start"
-            >
-              <i class="el-icon-warning-outline" />
-            </el-tooltip>
-          </span>
-          <el-input-number
-            v-model.trim="promoterForm.distanceInKm"
-            :min="0"
-            :max="8"
-            class="selWidth"
-            placeholder="设置配送距离"
-          ></el-input-number>
-          <span>km</span>
-        </el-form-item>
-        <el-form-item prop="feePerKm">
-          <span slot="label">
-            <span>超过距离配送费用:</span>
-            <el-tooltip
-              class="item"
-              effect="dark"
-              content="设置超过距离配送费用"
-              placement="top-start"
+    <el-card class="box-card mb20" :body-style="{ padding: '0 20px 20px' }" shadow="never" :bordered="false">
+      <el-tabs class="list-tabs" v-model="currentTab">
+        <el-tab-pane v-for="(item, index) in tabList" :key="index" :name="item.value" :label="item.title" />
+      </el-tabs>
+      <!-- 配送费设置-->
+      <template v-if="currentTab === '0'">
+        <el-form
+          ref="promoterForm"
+          :model="promoterForm"
+          :rules="rules"
+          label-width="200px"
+          class="demo-promoterForm"
+          v-loading="loading"
+        >
+          <el-form-item prop="basicFee">
+            <span slot="label">
+              <span>基础配送费:</span>
+              <el-tooltip class="item" effect="dark" content="骑手基础配送费" placement="top-start">
+                <i class="el-icon-warning-outline" />
+              </el-tooltip>
+            </span>
+            <el-input-number
+              v-model.trim="promoterForm.basicFee"
+              placeholder="骑手基础配送费"
+              :min="0"
+              :max="100"
+              class="selWidth"
+            ></el-input-number>
+            <span>元</span>
+          </el-form-item>
+          <el-form-item prop="distanceInKm">
+            <span slot="label">
+              <span>设置配送距离:</span>
+              <el-tooltip
+                class="item"
+                effect="dark"
+                content="设置配送距离"
+                placement="top-start"
+              >
+                <i class="el-icon-warning-outline" />
+              </el-tooltip>
+            </span>
+            <el-input-number
+              v-model.trim="promoterForm.distanceInKm"
+              :min="0"
+              :max="8"
+              class="selWidth"
+              placeholder="设置配送距离"
+            ></el-input-number>
+            <span>km</span>
+          </el-form-item>
+          <el-form-item prop="feePerKm">
+            <span slot="label">
+              <span>每超过1km距离配送费用:</span>
+              <el-tooltip
+                class="item"
+                effect="dark"
+                content="每超过1km距离配送费用"
+                placement="top-start"
+              >
+                <i class="el-icon-warning-outline" />
+              </el-tooltip>
+            </span>
+            <el-input-number
+              v-model.trim="promoterForm.feePerKm"
+              :min="0"
+              :max="100"
+              class="selWidth"
+              placeholder="每超过1km距离配送费用"
+            ></el-input-number>
+            <span>元</span>
+          </el-form-item>
+        
+          <el-form-item>
+            <el-button
+              type="primary"
+              :loading="loading"
+              @click="submitForm('promoterForm')"
+              v-hasPermi="['platform:rider:fee:add']"
+              >提交</el-button
             >
-              <i class="el-icon-warning-outline" />
-            </el-tooltip>
-          </span>
-          <el-input-number
-            v-model.trim="promoterForm.feePerKm"
-            :min="0"
-            :max="100"
-            class="selWidth"
-            placeholder="设置超过距离配送费用"
-          ></el-input-number>
-          <span>元</span>
-        </el-form-item>
-
-        <el-form-item>
-          <el-button
-            type="primary"
-            :loading="loading"
-            @click="submitForm('promoterForm')"
-            v-hasPermi="['platform:rider:fee:add']"
-            >提交</el-button
-          >
+          </el-form-item>
+        </el-form>
+      </template>
+      
+      <!-- 配送时间范围-->
+      <template v-if="currentTab === '1'">
+        <el-button
+          v-hasPermi="['platform:pc:shopping:home:recommended:add']"
+          type="primary"
+          size="small"
+          class="mb20"
+          @click="handleAdd"
+          >添加预约时间范围</el-button
+        >
+		<el-button
+		  size="small"
+		  class="mb20"
+		  @click.native="handleBatchSales()"
+		  v-if="
+		    checkPermi(['platform:product:batch:set:virtual:sales'])
+		  "
+		  >批量设置</el-button
+		>
+        <el-table
+          v-loading="listLoading"
+          :data="tableData.data"
+          style="width: 100%"
+          size="small"
+          row-key="brand_id"
+          :default-expand-all="false"
+          :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
+        >
+          <el-table-column prop="id" label="ID" min-width="60" />
+          <el-table-column label="预约时间范围" prop="beginTime" min-width="150">
+			 <template slot-scope="scope">
+				 <span>{{ scope.row.beginTime | formatDate }}-{{ scope.row.endTime | formatDate }}</span>
+			</template>
+			 </el-table-column>
+          <el-table-column prop="sort" label="排序" min-width="50" />
+          <el-table-column prop="status" label="是否显示" min-width="100" fixed="right">
+            <template slot-scope="scope">
+              <el-switch
+			   v-if="checkPermi(['platform:pc:shopping:home:recommended:switch'])"
+                v-model="scope.row.status"
+                :active-value="true"
+                :inactive-value="false"
+                active-text="显示"
+                inactive-text="关闭"
+                @change="onchangeIsShow(scope.row)"
+              />
+              <div v-else>{{ scope.row.status ? '启用' : '关闭' }}</div>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="120" fixed="right">
+            <template slot-scope="scope">
+              <a  @click="handleEdit(scope.row)">编辑</a>
+              <el-divider direction="vertical"></el-divider>
+              <a
+                @click="handleDelete(scope.row.id, scope.$index)"
+                >删除</a
+              >
+            </template>
+          </el-table-column>
+        </el-table>
+      </template>
+      
+    </el-card>
+ <!-- 批量增加销量-->
+    <el-dialog title="批量设置" :visible.sync="dialogVisible" width="540px" :before-close="handleTimeBatchClose">
+      <el-form :model="formData" ref="formData" label-width="100px" class="demo-ruleForm">
+        <el-form-item label="间隔时间:" required>
+          <el-input-number v-model.trim="formData.intervalTime" :min="20" :max="50"></el-input-number>分钟
         </el-form-item>
       </el-form>
-    </el-card>
+      <span slot="footer">
+        <el-button @click="dialogVisible = false">取消</el-button>
+        <el-button type="primary" @click="submitBatchSetDeliveForm('formData')" v-hasPermi="['platform:express:update']"
+          >确定</el-button
+        >
+      </span>
+    </el-dialog>
+    <!--添加首页推荐模板-->
+    <el-dialog width="540px" :visible.sync="drawer" direction="rtl" class="showHeader" :before-close="handleClose">
+      <div slot="title" class="demo-drawer_title">{{ dataForm.id ? '编辑预约配送时间范围' : '添加预约配送时间范围' }}</div>
+      <div v-if="drawer" class="demo-drawer__content detailSection">
+        <el-form
+          ref="dataForm"
+          v-loading="fullscreenLoading"
+          class="dataForm mt20"
+          :rules="ruleValidate"
+          :model="dataForm"
+          label-width="120px"
+          @submit.native.prevent
+        >
+          <el-form-item label="起始时间:" prop="beginTime">
+            <el-time-picker v-model="dataForm.beginTime" 
+			        format="HH:mm"
+			        value-format="HH:mm"
+					arrow-control
+			        placeholder="选择时间"></el-time-picker>
+          </el-form-item>
+          <el-form-item label="截止时间:" prop="endTime">
+          	<el-time-picker 
+				arrow-control
+          		format="HH:mm"
+          		value-format="HH:mm"
+          		v-model="dataForm.endTime" 
+          		placeholder="结束时间"></el-time-picker>
+          </el-form-item>
+          <el-form-item label="排序:">
+            <el-input-number
+              v-model.trim="dataForm.sort"
+              :min="0"
+              :max="99"
+              :step="1"
+              step-strictly
+              label="排序"
+            ></el-input-number>
+          </el-form-item>
+          <el-form-item label="是否开启:">
+            <el-switch
+              :width="56"
+              v-model="dataForm.status"
+              :active-value="true"
+              :inactive-value="false"
+              active-text="开启"
+              inactive-text="关闭"
+            />
+          </el-form-item>
+          <el-form-item class="btn">
+            <div>
+              <div class="acea-row justify-content">
+                <el-button
+                  type="primary"
+                  v-debounceClick="
+                    () => {
+                      handleRecommendedSave('dataForm');
+                    }
+                  "
+                  >{{ loadingBtn ? '提交中 ...' : '保存' }}</el-button
+                >
+              </div>
+            </div>
+          </el-form-item>
+        </el-form>
+      </div>
+    </el-dialog>
   </div>
 </template>
-
 <script>
-// +---------------------------------------------------------------------
-// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
-// +---------------------------------------------------------------------
-// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
-// +---------------------------------------------------------------------
-// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
-// +---------------------------------------------------------------------
-// | Author: CRMEB Team <admin@crmeb.com>
-// +---------------------------------------------------------------------
-import { configApi, configUpdateApi } from '@/api/rider';
-import * as selfUtil from '@/utils/ZBKJIutil.js';
-import { checkPermi } from '@/utils/permission'; // 权限判断函数
+import FromList from '@/components/FromList';
+
+
+import productAssociationForm from '@/components/productAssociationForm';
+
+import { configApi, configUpdateApi,deliveTimeAddApi,deliveTimeUpdateApi,deliveTimeListApi,deliveTimeDeleteApi,deliveTimeSwitchApi,deliveTimeBatchSetApi } from '@/api/rider';
+import { mapGetters } from 'vuex';
+import { checkPermi } from '@/utils/permission';
 import { Debounce } from '@/utils/validate';
+import { advertisementDefault, bannerDefault, menuDefault } from '@/views/systemSetting/pcConfig/defaultPcConfig';
+const fromData = {
+  endTime: null,
+  beginTime: null,
+  sort: 0,
+  id: 0,
+  status: false
+};
+ 
 export default {
-  name: 'deliverySetting',
+  name: 'homeSettings',
+  components: { productAssociationForm, FromList },
   data() {
+	  
+    // 自定义组件校验规则
+    let validatePlayTypeAndPlayProducts = (rule, value, callback) => {
+      if (value === '' || this.dataForm.playProducts.length === 0) {
+        callback(new Error('请选择参与类型和对应规则'));
+      } else {
+        callback();
+      }
+    };
     return {
-      promoterForm: {},
-      loading: false,
-      rules: {
-        basicFee: [{ required: true, message: '请设置骑手基础费用', trigger: 'change' }],
-        distanceInKm: [{ required: true, message: '请设置公里数', trigger: 'blur' }],
-        feePerKm: [{ required: true, message: '请输入每公里费用', trigger: 'blur' }],
+	  formData: { intervalTime: 20 },
+	  dialogVisible: false,
+	  loading: false,
+	  promoterForm: {},
+      currentTab: '0',
+      tabList: [
+        { value: '0', title: '配送费设置' },
+        { value: '1', title: '配送预约时间设置' }
+      ],
+      drawer: false,
+      fullscreenLoading: false,
+	  rules: {
+	    basicFee: [{ required: true, message: '请设置骑手基础费用', trigger: 'change' }],
+	    distanceInKm: [{ required: true, message: '请设置公里数', trigger: 'blur' }],
+	    feePerKm: [{ required: true, message: '请输入每公里费用', trigger: 'blur' }],
+	  },
+      ruleValidate: {
+        beginTime: [{ required: true, message: '请输入预约起始时间', trigger: 'blur' }],
+        endTime: [{ required: true, message: '请输入预约结束时间', trigger: 'blur' }],
+      },
+      dataForm: Object.assign({}, fromData),
+      loadingBtn: false,
+      tableData: {
+        data: [],
       },
+      listLoading: false,
+      productData: [], //选中的商品类型值
+      // 首页广告语
+      advertisementlistConfig: Object.assign({}, advertisementDefault()),
+      // banner数据
+      bannerListConfig: Object.assign({}, bannerDefault()),
+      playValues: null, // 待添加的商品参与类型
+      //顶部菜单
+      menuListConfig: Object.assign({}, menuDefault()),
+      multipleMer: true,
     };
   },
+  filters: {
+      formatDate(date) {
+          return date.substr(0,date.lastIndexOf(':'));
+      }
+	  },
   mounted() {
-    if (checkPermi(['platform:rider:fee:add'])) this.getDetal();
+    // if (this.id > 0) {
+    //   this.getRecommendedInfo(this.id);
+    // }
+	if (checkPermi(['platform:rider:fee:add'])) this.getDetal();
+	this.getList();
+  },
+  computed: {
+    ...mapGetters(['merPlatProductClassify', 'productBrand']),
+    isEdit() {
+      return this.dataForm.id > 0 ? true : false;
+    }
   },
   methods: {
     checkPermi,
-    getDetal() {
-      this.loading = true;
-      configApi()
+    //顶部菜单保存
+    handleMenuSave() {
+      this.menuListConfig.list.map((item, index) => {
+        item.sort = index + 1;
+      });
+      this.loadingBtn = true;
+      pcHomeNavigationSaveApi(this.menuListConfig.list)
+        .then((res) => {
+          this.$message.success('保存成功');
+          this.loadingBtn = false;
+          this.getPcHomeNavigation();
+        })
+        .catch(() => {
+          this.loadingBtn = false;
+        });
+    },
+    
+    //首页推荐模板列表
+    getList() {
+      this.listLoading = true;
+      deliveTimeListApi()
         .then((res) => {
-          this.loading = false;
-          this.promoterForm = res;
+          this.tableData.data = res;
+          this.listLoading = false;
         })
-        .catch((res) => {
-          this.loading = false;
-          this.$message.error(res.message);
+        .catch(() => {
+          this.listLoading = false;
         });
     },
-    submitForm: Debounce(function (formName) {
+	handleTimeBatchClose() {
+	  this.dialogVisible = false;
+	  this.formData.ficti = 0;
+	},
+    //模板弹窗
+    handleClose() {
+      //this.$refs['formValidate'].resetFields();
+      this.drawer = false;
+    },
+    //新增模板
+    handleAdd() {
+      this.dataForm = Object.assign({}, fromData);
+      this.drawer = true;
+      this.loadingBtn = false;
+    },
+    //模板状态
+    onchangeIsShow(row) {
+      deliveTimeSwitchApi(row.id).then((res) => {
+        this.$message.success('操作成功');
+        this.getList();
+      });
+    },
+    //编辑首页推荐模板
+    handleEdit(row) {
+      this.dataForm.id = row.id;
+      Object.assign(this.dataForm, row);
+      this.drawer = true;
+      this.loadingBtn = false;
+    },
+    
+    // 删除首页推荐
+    handleDelete(id, idx) {
+      this.$modalSure('删除该配置吗?').then(() => {
+        deliveTimeDeleteApi(id).then((res) => {
+          this.$message.success('删除成功');
+          this.getList();
+        });
+      });
+    },
+   /** 提交按钮 */
+   submitBatchSetDeliveForm: Debounce(function (formData) {
+	 this.loadingBtn = false;
+     this.$refs[formData].validate((valid) => {
+       if (valid) {
+         deliveTimeBatchSetApi(this.formData).then((response) => {
+           this.$modal.msgSuccess('操作成功');
+           this.getList();
+		   this.loadingBtn = true;
+           this.handleTimeBatchClose();
+         });
+       }
+     });
+   }),
+	submitForm: Debounce(function (formName) {
+	  this.$refs[formName].validate((valid) => {
+	    if (valid) {
+	      this.loading = true;
+	      configUpdateApi(this.promoterForm)
+	        .then((res) => {
+	          this.loading = false;
+	          this.getDetal();
+	          this.$message.success('提交成功');
+	        })
+	        .catch((err) => {
+	          this.loading = false;
+	        });
+	    } else {
+	      return false;
+	    }
+	  });
+	}),
+    //推荐模板保存
+    handleRecommendedSave(formName) {
       this.$refs[formName].validate((valid) => {
         if (valid) {
-          this.loading = true;
-          configUpdateApi(this.promoterForm)
-            .then((res) => {
-              this.loading = false;
-              this.getDetal();
-              this.$message.success('提交成功');
-            })
-            .catch((err) => {
-              this.loading = false;
-            });
+          this.loadingBtn = true;
+          this.isEdit
+            ? deliveTimeUpdateApi(this.dataForm)
+                .then((res) => {
+                  this.$message.success('编辑成功');
+                  this.handleClose();
+                  this.getList();
+                })
+                .catch(() => {
+                  this.loadingBtn = false;
+                })
+            : deliveTimeAddApi(this.dataForm)
+                .then((res) => {
+                  this.$message.success('新增成功');
+                  this.handleClose();
+                  this.getList();
+                })
+                .catch(() => {
+                  this.loadingBtn = false;
+                });
         } else {
           return false;
         }
       });
-    }),
+    },
+     //批量增加初始销量
+     handleBatchSales() {
+         this.dialogVisible = true;
+     },
+	getDetal() {
+	  configApi().then((res) => {
+	      this.promoterForm = res;
+	    });
+	},
   },
 };
 </script>
-
-<style scoped lang="scss"></style>
+<style scoped lang="scss">
+.demo-drawer__content {
+  padding: 0 40px;
+}
+.selWidth {
+  width: 500px;
+}
+</style>