lihongxiao 1 anno fa
parent
commit
c6014f577e

+ 19 - 0
components/dengrq-datetime-picker/customPickerView/index.css

@@ -0,0 +1,19 @@
+.picker-view {
+  height: 356rpx;
+}
+
+.picker-view-column {
+  font-size: 14px;
+  line-height: 34px;
+  text-align: center;
+  color: #333;
+}
+
+/* 覆盖默认样式,样式可以按需自己改 */
+.uni-picker-view-indicator {
+  background-color: rgba(106, 123, 255, 0.1);
+}
+.uni-picker-view-indicator::before,
+.uni-picker-view-indicator::after {
+  content: none;
+}

+ 53 - 0
components/dengrq-datetime-picker/customPickerView/index.js

@@ -0,0 +1,53 @@
+export default {
+  data() {
+    return {};
+  },
+  props: {
+    // 所有列选项数据
+    columns: {
+      type: Array,
+      default: () => []
+    },
+    // 每一列默认选中值数组,不传默认选中第一项
+    selectVals: {
+      type: Array,
+      default: () => []
+    }
+  },
+  computed: {
+    // 每一列选中项的索引,当默认选中值变化的时候这个值也要变化
+    indexArr: {
+      // 多维数组,深度监听
+      cache: false,
+      get() {
+        if (this.selectVals.length > 0) {
+          return this.columns.map((col, cIdx) => {
+            return col.findIndex((i) => i == this.selectVals[cIdx]);
+          });
+        } else {
+          return [].fill(0, 0, this.columns.length);
+        }
+      }
+    }
+  },
+  methods: {
+    onChange(e) {
+      const { value } = e.detail;
+
+      let ret = this.columns.map((item, index) => {
+        let idx = value[index];
+        if (idx < 0) {
+          idx = 0;
+        }
+        if (idx > item.length - 1) {
+          idx = item.length - 1;
+        }
+        return item[idx];
+      });
+
+      this.$emit('onChange', {
+        value: ret
+      });
+    }
+  }
+};

+ 11 - 0
components/dengrq-datetime-picker/customPickerView/index.vue

@@ -0,0 +1,11 @@
+<template>
+  <picker-view class="picker-view" :value="indexArr" @change="onChange">
+    <picker-view-column class="picker-view-column" v-for="(col, colIdx) in columns" :key="colIdx">
+      <view v-for="(item, idx) in col" :key="idx">{{ item }}</view>
+    </picker-view-column>
+  </picker-view>
+</template>
+
+<script src="./index.js"></script>
+
+<style lang="css" scoped src="./index.css"></style>

+ 72 - 0
components/dengrq-datetime-picker/dateSelector/index.css

@@ -0,0 +1,72 @@
+.date-selector {
+  width: 100%;
+  font-size: 12px;
+  color: #333;
+}
+.popup-box {
+  background: #FFFFFF;
+  padding: 0 27upx;
+  border-radius: 24upx 24upx 0px 0px;
+}
+.popup-title {
+  padding: 22upx 0;
+  text-align: center;
+  font-weight: 700;
+  font-size: 26upx;
+  color: #333333;
+  border-bottom: 1px solid #EEEEEE;
+}
+.select-date-wrapper {
+  margin-bottom: 8px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.select-date {
+  padding: 10px;
+  flex: 1;
+  border-radius: 2px;
+  font-weight: bold;
+  text-align: center;
+  /* border: 1px solid rgba(6, 7, 46, 0.05); */
+  font-size: 30upx;
+}
+
+.select-date.active {
+  /* border-color: #6a7bff; */
+  color: #449AFF ;
+}
+
+.select-date-placeholder {
+  color: rgba(6, 7, 46, 0.3);
+}
+
+.btn-group {
+  display: flex;
+  margin: 48rpx 0;
+  justify-content: space-between;
+}
+
+.btn-confirm {
+  width: 180px;
+  height: 40px;
+  line-height: 40px;
+  background: rgba(33, 58, 255, 0.85);
+  border-radius: 4px;
+  font-size: 14px;
+  color: #fff;
+  text-align: center;
+}
+
+.btn-cancel {
+  width: 144px;
+  height: 40px;
+  line-height: 38px;
+  text-align: center;
+  background: #fff;
+  border-radius: 4px;
+  border: 1px solid #979797;
+  font-size: 14px;
+  color: #06072e;
+}

+ 216 - 0
components/dengrq-datetime-picker/dateSelector/index.js

@@ -0,0 +1,216 @@
+import DateTimePicker from '../dateTimePicker/index.vue';
+import DateUtil from '../dateTimePicker/dateUtil';
+import { DATE_TYPES } from '../dateTimePicker/constant';
+
+export default {
+  components: {
+    DateTimePicker
+  },
+  data() {
+    return {
+      showStartDatePicker: false,
+      showEndDatePicker: false,
+      startDate: '',
+      endDate: '',
+      activeDate: 'startDate' // 正在处理哪一个日期值,startDate/endDate
+    };
+  },
+  props: {
+    // 日期筛选模式,1:年月日(默认),2:年月,3:年,4:年月日时分秒,5:时分秒,6:时分
+    mode: {
+      type: Number,
+      default: DATE_TYPES.YMD
+    },
+    // 默认开始日期
+    defaultStartDate: {
+      type: String,
+      default: ''
+    },
+    // 默认结束日期
+    defaultEndDate: {
+      type: String,
+      default: ''
+    },
+    // 可选的最小日期
+    minDate: {
+      type: String,
+      default: ''
+    },
+    // 可选的最大日期
+    maxDate: {
+      type: String,
+      default: ''
+    }
+  },
+  watch: {
+    mode() {
+      // 筛选模式更换时清空一下数据
+      this.resetData();
+    },
+    startDate() {
+      this.$emit('onChange', {
+        startDate: this.startDate,
+        endDate: this.endDate
+      });
+    },
+    endDate() {
+      this.$emit('onChange', {
+        startDate: this.startDate,
+        endDate: this.endDate
+      });
+    },
+    defaultStartDate: {
+      handler(defaultStartDate) {
+        if (!defaultStartDate) {
+          return;
+        }
+
+        if (this.mode == DATE_TYPES.HMS || this.mode == DATE_TYPES.HM) {
+          console.error('时分秒/时分模式不支持设置默认开始时间');
+          return;
+        }
+
+        if (DateUtil.isBefore(defaultStartDate, this.minDate)) {
+          console.warn(
+            `默认开始日期不可小于最小可选日期,已把默认开始日期设为最小可选日期。默认开始日期:${defaultStartDate},最小可选日期:${this.minDate}`
+          );
+          this.startDate = this.getModeFormatDateString(this.minDate);
+        } else {
+          this.startDate = this.getModeFormatDateString(defaultStartDate);
+        }
+      },
+      immediate: true
+    },
+    defaultEndDate: {
+      handler(defaultEndDate) {
+        if (!defaultEndDate) {
+          return;
+        }
+
+        if (this.mode == DATE_TYPES.HMS || this.mode == DATE_TYPES.HM) {
+          console.error('时分秒/时分模式不支持设置默认结束时间');
+          return;
+        }
+
+        if (DateUtil.isAfter(defaultEndDate, this.maxDate)) {
+          console.warn(
+            `默认结束日期不可大于最大可选日期,已把默认结束日期设为最大可选日期。默认结束日期:${defaultEndDate},最大可选日期:${this.maxDate}`
+          );
+          this.endDate = this.getModeFormatDateString(this.maxDate);
+        } else {
+          this.endDate = this.getModeFormatDateString(defaultEndDate);
+        }
+      },
+      immediate: true
+    },
+    minDate(val) {
+      if ((val && this.mode == DATE_TYPES.HMS) || this.mode == DATE_TYPES.HM) {
+        console.error('时分秒/时分模式不支持设置最小可选时间');
+        return;
+      }
+    },
+    maxDate(val) {
+      if ((val && this.mode == DATE_TYPES.HMS) || this.mode == DATE_TYPES.HM) {
+        console.error('时分秒/时分模式不支持设置最大可选时间');
+        return;
+      }
+    }
+  },
+  methods: {
+    open(){
+      this.$refs.popup.open()
+    },
+    onTapStartDate() {
+      this.showEndDatePicker = false;
+      if (!this.startDate) {
+        this.startDate = this.getModeFormatDateString(new Date());
+      }
+      this.activeDate = 'startDate';
+      this.showStartDatePicker = true;
+    },
+    onTapEndDate() {
+      this.showStartDatePicker = false;
+      if (!this.endDate) {
+        this.endDate = this.startDate;
+      }
+      this.activeDate = 'endDate';
+      this.showEndDatePicker = true;
+    },
+    onChangeStartDate(date) {
+      this.startDate = date;
+    },
+    onChangeEndDate(date) {
+      this.endDate = date;
+    },
+    validateInput() {
+      if (!this.startDate) {
+        uni.showToast({
+          title: '请选择开始时间',
+          icon: 'none'
+        });
+        return false;
+      } else if (!this.endDate) {
+        uni.showToast({
+          title: '请选择结束时间',
+          icon: 'none'
+        });
+        return false;
+      } else if (DateUtil.isAfter(this.startDate, this.endDate)) {
+        uni.showToast({
+          title: '结束时间不能小于开始时间',
+          icon: 'none'
+        });
+        return false;
+      }
+      return true;
+    },
+    onCancel() {
+      this.resetData();
+    },
+    onConfirm() {
+      if (this.validateInput()) {
+        this.$emit('onSubmit', {
+          startDate: this.startDate,
+          endDate: this.endDate
+        });
+        this.showStartDatePicker = false;
+        this.showEndDatePicker = false;
+        this.$refs.popup.close()
+      }
+    },
+    resetData() {
+      this.startDate = '';
+      this.endDate = '';
+      this.activeDate = 'startDate';
+      this.showStartDatePicker = false;
+        this.$refs.popup.close()
+        this.showEndDatePicker = false;
+        this.$refs.popup.close()
+
+    },
+    // 返回对应日期模式的时间字符串
+    getModeFormatDateString(date) {
+      let fmt = 'YYYY-MM-DD';
+      switch (this.mode) {
+        case DATE_TYPES.YM:
+          fmt = 'YYYY-MM';
+          break;
+        case DATE_TYPES.Y:
+          fmt = 'YYYY';
+          break;
+        case DATE_TYPES['YMD-HMS']:
+          fmt = 'YYYY-MM-DD HH:mm:ss';
+          break;
+        case DATE_TYPES.HMS:
+          fmt = 'HH:mm:ss';
+          break;
+        case DATE_TYPES.HM:
+          fmt = 'HH:mm';
+          break;
+        default:
+          break;
+      }
+      return DateUtil.formatDate(date, fmt);
+    }
+  }
+};

+ 50 - 0
components/dengrq-datetime-picker/dateSelector/index.vue

@@ -0,0 +1,50 @@
+<template>
+  <view >
+    <uni-popup ref="popup" type="bottom" background-color="#fff">
+      <view class="popup-box">
+        <view class="flex justify-between popup-title" >
+            <text @tap="onCancel">取消</text>
+            <text style=" font-size: 34upx;">选择营业时段</text>
+            <text style=" color: #449AFF ;"  @tap="onConfirm">确定</text>
+        </view>
+      <view class="select-date-wrapper">
+        <view class="select-date" :class="{ active: activeDate == 'startDate' }" @tap="onTapStartDate">
+          <view class="select-date-value" v-if="startDate">{{ startDate }}</view>
+          <view class="select-date-placeholder" v-else>请选择时间</view>
+        </view>
+        <view style="margin: 0 16px">~</view>
+        <view class="select-date" :class="{ active: activeDate == 'endDate' }" @tap="onTapEndDate">
+          <view class="select-date-value" v-if="endDate">{{ endDate }}</view>
+          <view class="select-date-placeholder" v-else>请选择时间</view>
+        </view>
+      </view>
+
+    <DateTimePicker
+      v-if="showStartDatePicker"
+      @onChange="onChangeStartDate"
+      :defaultDate="startDate"
+      :minDate="minDate || ''"
+      :maxDate="endDate || maxDate || ''"
+      :mode="mode"
+    />
+    <DateTimePicker
+      v-if="showEndDatePicker"
+      @onChange="onChangeEndDate"
+      :defaultDate="endDate"
+      :minDate="startDate || minDate || ''"
+      :maxDate="maxDate || ''"
+      :mode="mode"
+    />
+
+    <!-- <view class="btn-group" v-if="showStartDatePicker || showEndDatePicker">
+      <view class="btn-cancel" @tap="onCancel">取消</view>
+      <view class="btn-confirm" @tap="onConfirm">确定</view>
+    </view> -->
+  </view>
+  </uni-popup>
+  </view>
+</template>
+
+<script src="./index.js"></script>
+
+<style lang="css" scoped src="./index.css"></style>

+ 15 - 0
components/dengrq-datetime-picker/dateTimePicker/constant.js

@@ -0,0 +1,15 @@
+// 日期模式
+export const DATE_TYPES = {
+  // 年月日
+  YMD: 1,
+  // 年月
+  YM: 2,
+  // 年份
+  Y: 3,
+  // 年月日时分秒
+  'YMD-HMS': 4,
+  // 时分秒
+  HMS: 5,
+  // 时分
+  HM: 6
+};

+ 93 - 0
components/dengrq-datetime-picker/dateTimePicker/dateUtil.js

@@ -0,0 +1,93 @@
+/**
+ * 日期时间格式化
+ * @param {Date} date 要格式化的日期对象
+ * @param {String} fmt 格式化字符串,eg:YYYY-MM-DD HH:mm:ss
+ * @returns 格式化后的日期字符串
+ */
+function formatDate(date, fmt) {
+  if (typeof date == 'string') {
+    date = new Date(handleDateStr(date));
+  }
+
+  const o = {
+    'M+': date.getMonth() + 1, // 月份
+    'd+': date.getDate(), // 日
+    'D+': date.getDate(), // 日
+    'H+': date.getHours(), // 小时
+    'h+': date.getHours(), // 小时
+    'm+': date.getMinutes(), // 分
+    's+': date.getSeconds(), // 秒
+    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
+    S: date.getMilliseconds() // 毫秒
+  };
+
+  if (/([y|Y]+)/.test(fmt)) {
+    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').slice(4 - RegExp.$1.length));
+  }
+
+  for (const k in o) {
+    if (new RegExp('(' + k + ')').test(fmt)) {
+      fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).slice(('' + o[k]).length));
+    }
+  }
+
+  return fmt;
+}
+
+/**
+ * 处理时间字符串,兼容ios下new Date()返回NaN问题
+ * @param {*} dateStr 日期字符串
+ * @returns
+ */
+function handleDateStr(dateStr) {
+  return dateStr.replace(/\-/g, '/');
+}
+
+/**
+ * 判断日期1是否在日期2之前,即日期1小于日期2
+ * @param {Date} date1
+ * @param {Date} date2
+ * @returns
+ */
+function isBefore(date1, date2) {
+  if (typeof date1 == 'string') {
+    date1 = new Date(handleDateStr(date1));
+  }
+  if (typeof date2 == 'string') {
+    date2 = new Date(handleDateStr(date2));
+  }
+  return date1.getTime() < date2.getTime();
+}
+
+/**
+ * 判断日期1是否在日期2之后,即日期1大于日期2
+ * @param {Date} date1
+ * @param {Date} date2
+ * @returns
+ */
+function isAfter(date1, date2) {
+  if (typeof date1 == 'string') {
+    date1 = new Date(handleDateStr(date1));
+  }
+  if (typeof date2 == 'string') {
+    date2 = new Date(handleDateStr(date2));
+  }
+  return date1.getTime() > date2.getTime();
+}
+
+/**
+ * 检查传入的字符串是否能转换为有效的Date对象
+ * @param {String} date
+ * @returns {Boolean}
+ */
+function isValid(date) {
+  return new Date(date) !== 'Invalid Date' && !isNaN(new Date(date));
+}
+
+export default {
+  formatDate,
+  handleDateStr,
+  isBefore,
+  isAfter,
+  isValid
+};

+ 378 - 0
components/dengrq-datetime-picker/dateTimePicker/index.js

@@ -0,0 +1,378 @@
+import CustomPickerView from '../customPickerView/index.vue';
+import DateUtil from '../dateTimePicker/dateUtil';
+import { DATE_TYPES } from './constant';
+
+export default {
+  components: {
+    CustomPickerView
+  },
+  props: {
+    // 日期模式,1:年月日(默认),2:年月,3:年份,4:年月日时分秒,5:时分秒,6:时分
+    mode: {
+      type: Number,
+      default: DATE_TYPES.YMD
+    },
+    // 可选的最小日期,默认十年前
+    minDate: {
+      type: String,
+      default: ''
+    },
+    // 可选的最大日期,默认十年后
+    maxDate: {
+      type: String,
+      default: ''
+    },
+    // 默认选中日期(注意要跟日期模式对应)
+    defaultDate: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      selectYear: new Date().getFullYear(),
+      selectMonth: new Date().getMonth() + 1, // 选中的月份,1~12
+      selectDay: new Date().getDate(),
+      selectHour: new Date().getHours(),
+      selectMinute: new Date().getMinutes(),
+      selectSecond: new Date().getSeconds()
+    };
+  },
+  watch: {
+    defaultDate: {
+      immediate: true,
+      handler(val) {
+        if (val) {
+          if (this.mode == DATE_TYPES.YM && val.replace(/\-/g, '/').split('/').length == 2) {
+            // 日期模式为年月时有可能传进来的defaultDate是2022-02这样的格式,在ios下new Date会报错,加上日期部分做兼容
+            val += '-01';
+          } else if (this.mode == DATE_TYPES.HMS || this.mode == DATE_TYPES.HM) {
+            // 只有时分秒或者只有时分是不能调用new Date生成Date对象的,先加上一个假设的年月日(就取当年一月一日)来兼容
+            const now = new Date();
+            val = `${now.getFullYear()}-01-01 ${val}`;
+          }
+
+          let date = new Date(DateUtil.handleDateStr(val));
+          this.selectYear = date.getFullYear();
+          this.selectMonth = date.getMonth() + 1;
+          this.selectDay = date.getDate();
+          this.selectHour = date.getHours();
+          this.selectMinute = date.getMinutes();
+          this.selectSecond = date.getSeconds();
+        }
+      }
+    }
+  },
+  computed: {
+    minDateObj() {
+      let minDate = this.minDate;
+      if (minDate) {
+        if (this.mode == DATE_TYPES.YM && minDate.replace(/\-/g, '/').split('/').length == 2) {
+          // 日期模式为年月时有可能传进来的minDate是2022-02这样的格式,在ios下new Date会报错,加上日期部分做兼容
+          minDate += '-01';
+        } else if (this.mode == DATE_TYPES.HMS || this.mode == DATE_TYPES.HM) {
+          // 只有时分秒或者只有时分是不能调用new Date生成Date对象的,先加上一个假设的年月日(就取当年一月一日)来兼容
+          const now = new Date();
+          minDate = `${now.getFullYear()}-01-01 ${minDate}`;
+        }
+        return new Date(DateUtil.handleDateStr(minDate));
+      } else {
+        // 没有传最小日期,默认十年前
+        let year = new Date().getFullYear() - 10;
+        minDate = new Date(year, 0, 1);
+        return minDate;
+      }
+    },
+    maxDateObj() {
+      let maxDate = this.maxDate;
+      if (maxDate) {
+        if (this.mode == DATE_TYPES.YM && maxDate.replace(/\-/g, '/').split('/').length == 2) {
+          // 日期模式为年月时有可能传进来的maxDate是2022-02这样的格式,在ios下new Date会报错,加上日期部分做兼容
+          maxDate += '-01';
+        } else if (this.mode == DATE_TYPES.HMS || this.mode == DATE_TYPES.HM) {
+          // 只有时分秒或者只有时分是不能调用new Date生成Date对象的,先加上一个假设的年月日(就取当年一月一日)来兼容
+          const now = new Date();
+          maxDate = `${now.getFullYear()}-01-01 ${maxDate}`;
+        }
+        return new Date(DateUtil.handleDateStr(maxDate));
+      } else {
+        // 没有传最大日期,默认十年后
+        let year = new Date().getFullYear() + 10;
+        maxDate = new Date(year, 11, 31);
+        return maxDate;
+      }
+    },
+    years() {
+      let years = [];
+      let minYear = this.minDateObj.getFullYear();
+      let maxYear = this.maxDateObj.getFullYear();
+      for (let i = minYear; i <= maxYear; i++) {
+        years.push(i);
+      }
+
+      return years;
+    },
+    months() {
+      let months = [];
+      let minMonth = 1;
+      let maxMonth = 12;
+
+      // 如果选中的年份刚好是最小可选日期的年份,那月份就要从最小日期的月份开始
+      if (this.selectYear == this.minDateObj.getFullYear()) {
+        minMonth = this.minDateObj.getMonth() + 1;
+      }
+      // 如果选中的年份刚好是最大可选日期的年份,那月份就要在最大日期的月份结束
+      if (this.selectYear == this.maxDateObj.getFullYear()) {
+        maxMonth = this.maxDateObj.getMonth() + 1;
+      }
+
+      for (let i = minMonth; i <= maxMonth; i++) {
+        months.push(i);
+      }
+
+      return months;
+    },
+    days() {
+      // 一年中12个月每个月的天数
+      let monthDaysConfig = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+      // 闰年2月有29天
+      if (this.selectMonth == 2 && this.selectYear % 4 == 0) {
+        monthDaysConfig[1] = 29;
+      }
+
+      let minDay = 1;
+      let maxDay = monthDaysConfig[this.selectMonth - 1];
+
+      if (this.selectYear == this.minDateObj.getFullYear() && this.selectMonth == this.minDateObj.getMonth() + 1) {
+        minDay = this.minDateObj.getDate();
+      }
+      if (this.selectYear == this.maxDateObj.getFullYear() && this.selectMonth == this.maxDateObj.getMonth() + 1) {
+        maxDay = this.maxDateObj.getDate();
+      }
+
+      let days = [];
+      for (let i = minDay; i <= maxDay; i++) {
+        days.push(i);
+      }
+
+      return days;
+    },
+    hours() {
+      let hours = [];
+      let minHour = 0;
+      let maxHour = 23;
+
+      if (
+        this.selectYear == this.minDateObj.getFullYear() &&
+        this.selectMonth == this.minDateObj.getMonth() + 1 &&
+        this.selectDay == this.minDateObj.getDate()
+      ) {
+        minHour = this.minDateObj.getHours();
+      }
+      if (
+        this.selectYear == this.maxDateObj.getFullYear() &&
+        this.selectMonth == this.maxDateObj.getMonth() + 1 &&
+        this.selectDay == this.maxDateObj.getDate()
+      ) {
+        maxHour = this.maxDateObj.getHours();
+      }
+
+      for (let i = minHour; i <= maxHour; i++) {
+        hours.push(i);
+      }
+
+      return hours;
+    },
+    minutes() {
+      let mins = [];
+      let minMin = 0;
+      let maxMin = 59;
+
+      if (
+        this.selectYear == this.minDateObj.getFullYear() &&
+        this.selectMonth == this.minDateObj.getMonth() + 1 &&
+        this.selectDay == this.minDateObj.getDate() &&
+        this.selectHour == this.minDateObj.getHours()
+      ) {
+        minMin = this.minDateObj.getMinutes();
+      }
+      if (
+        this.selectYear == this.maxDateObj.getFullYear() &&
+        this.selectMonth == this.maxDateObj.getMonth() + 1 &&
+        this.selectDay == this.maxDateObj.getDate() &&
+        this.selectHour == this.maxDateObj.getHours()
+      ) {
+        maxMin = this.maxDateObj.getMinutes();
+      }
+
+      for (let i = minMin; i <= maxMin; i++) {
+        mins.push(i);
+      }
+
+      return mins;
+    },
+    seconds() {
+      let seconds = [];
+      let minSecond = 0;
+      let maxSecond = 59;
+
+      if (
+        this.selectYear == this.minDateObj.getFullYear() &&
+        this.selectMonth == this.minDateObj.getMonth() + 1 &&
+        this.selectDay == this.minDateObj.getDate() &&
+        this.selectHour == this.minDateObj.getHours() &&
+        this.selectMinute == this.minDateObj.getMinutes()
+      ) {
+        minSecond = this.minDateObj.getSeconds();
+      }
+      if (
+        this.selectYear == this.maxDateObj.getFullYear() &&
+        this.selectMonth == this.maxDateObj.getMonth() + 1 &&
+        this.selectDay == this.maxDateObj.getDate() &&
+        this.selectHour == this.maxDateObj.getHours() &&
+        this.selectMinute == this.maxDateObj.getMinutes()
+      ) {
+        maxSecond = this.maxDateObj.getSeconds();
+      }
+
+      for (let i = minSecond; i <= maxSecond; i++) {
+        seconds.push(i);
+      }
+
+      return seconds;
+    },
+    // 传给pickerView组件的数组,根据mode来生成不同的数据
+    dateConfig() {
+      let years = this.years.map((y) => y + '年');
+      let months = this.months.map((m) => m + '月');
+      let days = this.days.map((d) => d + '日');
+      let hours = this.hours.map((h) => h + '时');
+      let minutes = this.minutes.map((m) => m + '分');
+      let seconds = this.seconds.map((s) => s + '秒');
+
+      let ret = [];
+      switch (this.mode) {
+        case DATE_TYPES.YM:
+          ret = [years, months];
+          break;
+        case DATE_TYPES.Y:
+          ret = [years];
+          break;
+        case DATE_TYPES['YMD-HMS']:
+          ret = [years, months, days, hours, minutes, seconds];
+          break;
+        case DATE_TYPES.HMS:
+          ret = [hours, minutes, seconds];
+          break;
+        case DATE_TYPES.HM:
+          ret = [hours, minutes];
+          break;
+        default:
+          ret = [years, months, days];
+          break;
+      }
+
+      return ret;
+    },
+    selectVals() {
+      let ret = [];
+      switch (this.mode) {
+        case DATE_TYPES.YM:
+          ret = [this.selectYear + '年', this.selectMonth + '月'];
+          break;
+        case DATE_TYPES.Y:
+          ret = [this.selectYear + '年'];
+          break;
+        case DATE_TYPES['YMD-HMS']:
+          ret = [
+            this.selectYear + '年',
+            this.selectMonth + '月',
+            this.selectDay + '日',
+            this.selectHour + '时',
+            this.selectMinute + '分',
+            this.selectSecond + '秒'
+          ];
+          break;
+        case DATE_TYPES.HMS:
+          ret = [this.selectHour + '时', this.selectMinute + '分', this.selectSecond + '秒'];
+          break;
+        case DATE_TYPES.HM:
+          ret = [this.selectHour + '时', this.selectMinute + '分'];
+          break;
+        default:
+          ret = [this.selectYear + '年', this.selectMonth + '月', this.selectDay + '日'];
+          break;
+      }
+      return ret;
+    }
+  },
+  methods: {
+    onChangePickerValue(e) {
+      const { value } = e;
+
+      if (this.mode == DATE_TYPES.YM && value[0] && value[1]) {
+        // 年月模式
+        this.selectYear = Number(value[0].replace('年', ''));
+        this.selectMonth = Number(value[1].replace('月', ''));
+      } else if (this.mode == DATE_TYPES.Y && value[0]) {
+        // 只有年份模式
+        this.selectYear = Number(value[0].replace('年', ''));
+      } else if (this.mode == DATE_TYPES['YMD-HMS'] && value[0] && value[1] && value[2] != '' && value[3] && value[4] && value[5]) {
+        // 年月日时分秒模式
+        this.selectYear = Number(value[0].replace('年', ''));
+        this.selectMonth = Number(value[1].replace('月', ''));
+        this.selectDay = Number(value[2].replace('日', ''));
+        this.selectHour = Number(value[3].replace('时', ''));
+        this.selectMinute = Number(value[4].replace('分', ''));
+        this.selectSecond = Number(value[5].replace('秒', ''));
+      } else if (this.mode == DATE_TYPES.HMS && value[0] && value[1] && value[2]) {
+        // 时分秒模式
+        this.selectHour = Number(value[0].replace('时', ''));
+        this.selectMinute = Number(value[1].replace('分', ''));
+        this.selectSecond = Number(value[2].replace('秒', ''));
+      } else if (this.mode == DATE_TYPES.HM && value[0] && value[1]) {
+        // 时分模式
+        this.selectHour = Number(value[0].replace('时', ''));
+        this.selectMinute = Number(value[1].replace('分', ''));
+      } else if (value[0] && value[1] && value[2]) {
+        // 默认,年月日模式
+        this.selectYear = Number(value[0].replace('年', ''));
+        this.selectMonth = Number(value[1].replace('月', ''));
+        this.selectDay = Number(value[2].replace('日', ''));
+      } else {
+        // 其他情况可能是pickerView返回的数据有问题,不处理
+        console.log('onChangePickerValue其他情况');
+        return;
+      }
+
+      let formatTmpl = 'YYYY-MM-DD';
+      switch (this.mode) {
+        case DATE_TYPES.YM:
+          formatTmpl = 'YYYY-MM';
+          break;
+        case DATE_TYPES.Y:
+          formatTmpl = 'YYYY';
+          break;
+        case DATE_TYPES['YMD-HMS']:
+          formatTmpl = 'YYYY-MM-DD HH:mm:ss';
+          break;
+        case DATE_TYPES.HMS:
+          formatTmpl = 'HH:mm:ss';
+          break;
+        case DATE_TYPES.HM:
+          formatTmpl = 'HH:mm';
+          break;
+        default:
+          break;
+      }
+
+      this.$emit(
+        'onChange',
+        DateUtil.formatDate(
+          new Date(`${this.selectYear}/${this.selectMonth}/${this.selectDay} ${this.selectHour}:${this.selectMinute}:${this.selectSecond}`),
+          formatTmpl
+        )
+      );
+    }
+  }
+};

+ 9 - 0
components/dengrq-datetime-picker/dateTimePicker/index.vue

@@ -0,0 +1,9 @@
+<template>
+  <view class="datetime-picker">
+    <CustomPickerView :columns="dateConfig" :selectVals="selectVals" @onChange="onChangePickerValue" />
+  </view>
+</template>
+
+<script src="./index.js"></script>
+
+<style scoped lang="css"></style>

+ 0 - 255
pages/component/rang-time.vue

@@ -1,255 +0,0 @@
-<template>
-    <view class="w-picker-cnt" :class="{ 'visible': visible }">
-        <view class="w-picker-header" @touchmove.stop.prevent catchtouchmove="true">
-            <text @tap.stop.prevent="onCancel">取消</text>
-            <slot></slot>
-            <text :style="{ 'color': themeColor }" @tap.stop.prevent="pickerConfirm">确定</text>
-        </view>
-
-        <view class="w-picker-view">
-            <picker-view class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
-                <picker-view-column class="w-picker-flex2">
-                    <view class="w-picker-item" v-for="(item, index) in range.hours" :key="index">{{ item }}时</view>
-                </picker-view-column>
-                <picker-view-column class="w-picker-flex2">
-                    <view class="w-picker-item" v-for="(item, index) in range.minutes" :key="index">{{ item }}分</view>
-                </picker-view-column>
-
-                <picker-view-column class="w-picker-flex1">
-                    <view class="w-picker-item">-</view>
-                </picker-view-column>
-                <picker-view-column class="w-picker-flex2">
-                    <view class="w-picker-item" v-for="(item, index) in range.fhours" :key="index">{{ item }}时</view>
-                </picker-view-column>
-                <picker-view-column class="w-picker-flex2">
-                    <view class="w-picker-item" v-for="(item, index) in range.fminutes" :key="index">{{ item }}分</view>
-                </picker-view-column>
-            </picker-view>
-        </view>
-    </view>
-</template>
-
-<script>
-export default {
-    data() {
-        return {
-            pickVal: [],
-            range: {},
-            checkObj: {}
-        };
-    },
-    props: {
-        itemHeight: {
-            type: String,
-            default: "44px"
-        },
-        value: {
-            type: [String, Array, Number],
-            default: ""
-        },
-        current: {//是否默认选中当前日期
-            type: Boolean,
-            default: false
-        },
-
-    },
-    watch: {
-        value(val) {
-            console.log(val, 222222);
-
-            this.initData();
-        }
-    },
-    created() {
-        this.initData();
-    },
-    methods: {
-        formatNum(n) {
-            return (Number(n) < 10 ? '0' + Number(n) : Number(n) + '');
-        },
-        checkValue(value) {
-            let strReg = /^\d{2}:\d{2}:\d{2}$/, example = "18:00:05";
-            if (!strReg.test(value)) {
-                console.log(new Error("请传入与mode、fields匹配的value值,例value=" + example + ""))
-            }
-            return strReg.test(value);
-        },
-        resetData(hour, minute, fhour, fminute) {
-            let hours = [], minutes = [], fhours = [], fminutes = []
-
-            for (let hour = 0; hour < 24; hour++) {
-                hours.push(this.formatNum(hour));
-            }
-            for (let minute = 0; minute < 60; minute++) {
-                minutes.push(this.formatNum(minute));
-            }
-            for (let i = hour * 1; i < 24; i++) {
-                fhours.push(this.formatNum(i));
-            }
-            for (let i = minute * 1; i < 60; i++) {
-                fminutes.push(this.formatNum(i));
-            }
-            return {
-                hours,
-                minutes,
-                fhours,
-                fminutes,
-            }
-        },
-        getData(curDate) {
-            //用来处理初始化数据
-            let hours = [], minutes = [], fhours = [], fminutes = [], seconds = [];
-            let curFlag = this.current;
-            let disabledAfter = this.disabledAfter;
-            let fields = this.fields;
-            let curHour = curDate.curHour;
-            let curMinute = curDate.curMinute;
-
-            console.log(curHour, 7777777);
-
-            for (let hour = 0; hour < 24; hour++) {
-                hours.push(this.formatNum(hour));
-            }
-            for (let minute = 0; minute < 60; minute++) {
-                minutes.push(this.formatNum(minute));
-            }
-            for (let hour = 0; hour < 24; hour++) {
-                fhours.push(this.formatNum(hour));
-            }
-            for (let minute = 0; minute < 60; minute++) {
-                fminutes.push(this.formatNum(minute));
-            }
-            return {
-                hours,
-                minutes,
-                fhours,
-                fminutes
-            }
-        },
-        getCurrenDate() {
-            let curDate = new Date();
-            let curHour = curDate.getHours();
-            let curMinute = curDate.getMinutes();
-            let fcurHour = curDate.getHours();
-            let fcurMinute = curDate.getMinutes();
-            return {
-                curHour,
-                curMinute,
-                fcurHour,
-                fcurMinute,
-            }
-        },
-        getDval() {
-            let value = this.value;
-            let fields = this.fields;
-            let dVal = null;
-            let aDate = new Date();
-            let hour = this.formatNum(aDate.getHours());
-            let minute = this.formatNum(aDate.getMinutes());
-            let fhour = this.formatNum(aDate.getHours());
-            let fminute = this.formatNum(aDate.getMinutes());
-            if (value) {
-                let flag = this.checkValue(value);
-                if (!flag) {
-                    dVal = [hour, minute, "-", fhour, fminute]
-                } else {
-                    dVal = value ? value.split(":") : [];
-                }
-            } else {
-                dVal = [hour, minute, "-", fhour, fminute]
-
-            }
-            return dVal;
-        },
-        initData() {
-            let range = []
-            let curDate = this.getCurrenDate();
-            let dateData = this.getData(curDate);
-            let pickVal = [], obj = {}, full = "", result = "", hour = "", minute = "", fhour = "", fminute = "", second = "";
-            let dVal = this.getDval();
-            let curFlag = this.current;
-            let disabledAfter = this.disabledAfter;
-
-            let hours = dateData.hours;
-            let fhours = dateData.fhours;
-            let minutes = dateData.minutes;
-            let fminutes = dateData.fminutes;
-
-
-            // let defaultArr=[
-            // 	dVal[0]&&hours.indexOf(dVal[0])!=-1?hours.indexOf(dVal[0]):0,
-            // 	dVal[1]&&minutes.indexOf(dVal[1])!=-1?minutes.indexOf(dVal[1]):0
-            // ]
-            // pickVal=disabledAfter?defaultArr:(curFlag?(this.second?[
-            // 	hours.indexOf(this.formatNum(curDate.curHour)),
-            // 	minutes.indexOf(this.formatNum(curDate.curMinute)),
-            // ]:[
-            // 	hours.indexOf(this.formatNum(curDate.curHour)),
-            // 	minutes.indexOf(this.formatNum(curDate.curMinute))
-            // ]):defaultArr);
-            range = {
-                hours,
-                fhours,
-                minutes,
-                fminutes,
-            }
-            hour = dVal[0] ? dVal[0] : hours[0];
-            console.log(range, 33333333);
-
-            minute = dVal[1] ? dVal[1] : minutes[0];
-            fhour = dVal[3] ? dVal[3] : fhours[0];
-            fminute = dVal[4] ? dVal[4] : fminutes[0];
-            obj = {
-                hour,
-                minute,
-                fminute,
-                fhour,
-            }
-            this.range = dateData;
-            this.checkObj = obj;
-
-            result = `${hour + ':' + minute + '至' + fhour + ':' + fminute}`;
-            this.$nextTick(() => {
-                this.pickVal = pickVal;
-            });
-            this.$emit("change", {
-                result: result,
-                value: result.split("至"),
-                obj: obj
-            })
-        },
-        handlerChange(e) {
-            let arr = [...e.detail.value];
-            this.checkObj = obj;
-            let data = this.range;
-            let hour = "", minute = "", result = "", full = "", obj = {};
-            hour = (arr[0] || arr[0] == 0) ? data.hours[arr[0]] || data.hours[data.hours.length - 1] : "";
-            minute = (arr[1] || arr[1] == 0) ? data.minutes[arr[1]] || data.minutes[data.minutes.length - 1] : "";
-
-            let fhour = (arr[0] || arr[0] == 0) ? data.fhours[arr[0]] || data.fhours[data.fhours.length - 1] : "";
-            let fminute = (arr[1] || arr[1] == 0) ? data.fminutes[arr[1]] || data.fminutes[data.fminutes.length - 1] : "";
-
-            let resetData = this.resetData(hour, minute, fhour, fminute);
-            console.log(arr, 777777777);
-
-            obj = {
-                hour,
-                minute,
-                fhour,
-                fminute
-            };
-            result = `${hour + ':' + minute}` + '至' + fhour + ':' + fminute;
-
-            this.$emit("change", {
-                result: result,
-                value: result.split("至"),
-                obj: obj
-            })
-        }
-    }
-}
-</script>
-
-<style lang="scss">
-@import "../../components/w-picker/w-picker.css";
-</style>

+ 6 - 1
pages/index/shop.vue

@@ -44,7 +44,7 @@
 			<view class="business" @click="isPopup = true">
 				<image src="/static/index/business.png" mode=""></image>营业管理
 			</view>
-			<view class="edit">
+			<view class="edit" @click="edit">
 				<image src="/static/index/edit.png" mode=""></image>编辑门店
 			</view>
 		</view>
@@ -132,6 +132,11 @@
 			}
 		},
 		methods: {
+			edit(){
+				uni.navigateTo({
+					url: '/pages/store/editStore'
+				})
+			},
 			//返回
 			back() {
 				uni.navigateBack({

+ 14 - 16
pages/login/settled.vue

@@ -256,14 +256,14 @@
                     <view class="customize">
                         <view class="title">门头照片</view>
                         <view class="grid col-3 grid-square flex-sub booder-top">
-                            <view class="bg-img" v-for="(item, index) in imgList" :key="index" @tap="ViewImage"
-                                :data-url="imgList[index]">
-                                <image :src="imgList[index]" mode="aspectFill"></image>
+                            <view class="bg-img" v-for="(item, index) in form.headPhoto" :key="index" @tap="ViewImage"
+                                :data-url="form.headPhoto[index]">
+                                <image :src="form.headPhoto[index]" mode="aspectFill"></image>
                                 <view class="cu-tag bg-red" @tap.stop="DelImg" :data-index="index">
                                     <text class='cuIcon-close'></text>
                                 </view>
                             </view>
-                            <view class="solids" @tap="ChooseImage" v-if="imgList.length < 4">
+                            <view class="solids" @tap="ChooseImage" v-if="form.headPhoto.length < 4">
                                 <text class='cuIcon-cameraadd'></text>
                             </view>
                         </view>
@@ -339,8 +339,6 @@ export default {
             identityOneImg: '',
             identityTwoImg: '',
             visible: false,
-            imgList: [],
-            imgList1: [],
             index: -1,
             country: '',
             // markers:[{
@@ -371,6 +369,7 @@ export default {
                 : []
             this.businessLicenseImg = configService.apiUrl + '/' + obj.businessLicense
             this.identityOneImg = configService.apiUrl + '/' + obj.identityOne
+            obj.headPhoto=obj.headPhoto? obj.headPhoto.split(',').filter(id => id !== ''):[]
             this.form = obj
 
         }
@@ -384,7 +383,6 @@ export default {
     },
     methods: {
         handleMarkerTap() {
-
             const queryString = uni.getStorageSync('address') ? encodeURIComponent(JSON.stringify(uni.getStorageSync('address'))) : ''
             uni.navigateTo({
                 url: '/pages/login/map?position=${queryString}'
@@ -409,12 +407,12 @@ export default {
                             success: (files) => {
                                 let data = JSON.parse(files.data);
                                 if (data.success) {
-                                    if (this.imgList.length != 0) {
-                                        this.imgList = this.imgList.concat(res.tempFilePaths)
-                                        this.form.headPhoto.push(data.message)
+                                    if (this.form.headPhoto.length != 0) {
+                                        this.form.headPhoto.push(configService.apiUrl + '/' + data.message)
+
                                     } else {
-                                        this.imgList = res.tempFilePaths
-                                        this.form.headPhoto = [data.message]
+                                        this.form.headPhoto = [configService.apiUrl + '/' + data.message]
+
                                     }
 
                                     // this.form.headPhoto =this.form.headPhoto+'/'+ data.message
@@ -428,7 +426,7 @@ export default {
         },
         ViewImage(e) {
             uni.previewImage({
-                urls: this.imgList,
+                urls: this.form.headPhoto,
                 current: e.currentTarget.dataset.url
             });
         },
@@ -440,7 +438,7 @@ export default {
                 confirmText: '确定',
                 success: res => {
                     if (res.confirm) {
-                        this.imgList.splice(e.currentTarget.dataset.index, 1)
+                        this.form.headPhoto.splice(e.currentTarget.dataset.index, 1)
                         this.form.headPhoto.splice(e.currentTarget.dataset.index, 1)
 
                     }
@@ -564,7 +562,7 @@ export default {
                     }
 
                 }
-                this.$http.post('/merchant/app/add', { ...this.form, source: 2, headPhoto, longitude: this.markers[0].longitude, latitude: this.markers[0].latitude }).then(res => {
+                this.$http.post('/merchant/app/add', { ...this.form, source: 2, headPhoto: this.form.headPhoto.join(',') , longitude: this.markers[0].longitude, latitude: this.markers[0].latitude }).then(res => {
                     if (res.data.success) {
                         this.$tip.success(res.data.result || '成功')
                         this.$Router.push({ name: "login" })
@@ -575,7 +573,7 @@ export default {
                 })
             }
             else {
-                this.$http.post('/merchant/localMerchantInfo/edit', { ...this.form, source: 2 }).then(res => {
+                this.$http.post('/merchant/localMerchantInfo/edit', { ...this.form, source: 2,headPhoto: this.form.headPhoto.join(',') }).then(res => {
                     if (res.data.success) {
                         this.$tip.success(res.data.result || '成功')
                         uni.navigateBack({

+ 14 - 7
pages/store/addHours.vue

@@ -1,5 +1,8 @@
 <template>
     <view>
+        <cu-custom bgColor="bg-fff" :isBack="true">
+            <block slot="content">添加营业时间</block>
+        </cu-custom>
         <view class="tab-top bg-fff">
             <view class="title">营业日</view>
             <view style="padding-bottom:20upx;border-bottom: 1px solid #EEEEEE;">
@@ -16,15 +19,17 @@
 
             </view>
         </view>
-		<rangTime ref="rangTime" @change="onEndTimeChange"  v-model="selectedTime" v-if="isSelectDate" />
-
-        <view class="padding flex sub-bottom">
+        <rangTime ref="rangTime"
+            :mode="mode"
+            @onSubmit="onEndTimeChange"   />
+        <view class="padding flex flex-direction sub-bottom">
             <button class="cu-btn bg-blue round " @click="sumbit">提交</button>
+
         </view>
     </view>
 </template>
 <script>
-	import rangTime from '../component/rang-time.vue'
+	import rangTime from '../../components/dengrq-datetime-picker/dateSelector/index.vue'
 
 export default {
     components: {
@@ -32,11 +37,12 @@ export default {
 		},
     data() {
         return {
+            mode: 6,
             corporateName:'',
             tags: ['周一', '周二', '周三', '周四', '周五', '周六', '周日', '整周'], // 你的标签数组
             selectedIndices: [], // 用于存储被选中的标签索引
             isSelectDate: false,
-				selectedTime: ['15:30', '15:30'],
+			selectedTime: [],
         }
     },
     methods: {
@@ -64,10 +70,10 @@ export default {
             }
         },
         add(){
-            this.isSelectDate = true
+            this.$refs.rangTime.open()
         },
         onEndTimeChange(val){
-            console.log(val,888888888 );
+            console.log(val,99999 );
             
         }
           
@@ -124,4 +130,5 @@ page {
     background: #FFFFFF;
     border-top: 1px solid #EEEEEE;
 }
+
 </style>

+ 100 - 13
pages/store/editStore.vue

@@ -3,7 +3,7 @@
         <cu-custom bgColor="bg-fff" :isBack="true">
             <block slot="content">编辑门店</block>
         </cu-custom>
-        <view class="borderRadiu" style="margin: 22upx 26upx;">
+        <view class="borderRadiu" style="margin: 22upx 26upx;padding-bottom: 120upx">
             <view class="cu-form-group">
                 <view class="title">门店名称</view>
                 <input placeholder="请输入门店名称" v-model="form.storeName" name="input"></input>
@@ -23,8 +23,8 @@
             <view class="customize">
                 <view class="title">地理位置</view>
                 <view class=" booder-top" style="padding-bottom: 16upx;">
-                    <!-- <map style="width: 100%; height: 218upx;" :latitude="latitude" scale="14"
-                                :longitude="longitude" :markers="markers" @tap="handleMarkerTap"></map> -->
+                    <map style="width: 100%; height: 218upx;" :latitude="form.latitude" scale="14"
+                                :longitude="form.longitude" :markers="markers" @tap="handleMarkerTap"></map>
                 </view>
 
                 <!-- <aMap class=" booder-top" style="padding-bottom: 7px;"></aMap> -->
@@ -39,14 +39,14 @@
             <view class="customize">
                 <view class="title">门头照片</view>
                 <view class="grid col-3 grid-square flex-sub booder-top">
-                    <view class="bg-img" v-for="(item, index) in imgList" :key="index" @tap="ViewImage"
-                        :data-url="imgList[index]">
-                        <image :src="imgList[index]" mode="aspectFill"></image>
+                    <view class="bg-img" v-for="(item, index) in form.headPhoto" :key="index" @tap="ViewImage"
+                        :data-url="form.headPhoto[index]">
+                        <image :src="form.headPhoto[index]" mode="aspectFill"></image>
                         <view class="cu-tag bg-red" @tap.stop="DelImg" :data-index="index">
                             <text class='cuIcon-close'></text>
                         </view>
                     </view>
-                    <view class="solids" @tap="ChooseImage" v-if="imgList.length < 4">
+                    <view class="solids" @tap="ChooseImage" v-if="form.headPhoto.length < 4">
                         <text class='cuIcon-cameraadd'></text>
                     </view>
                 </view>
@@ -56,12 +56,15 @@
             </view>
         </view>
         <view class="padding flex flex-direction sub-bottom">
-            <button class="cu-btn bg-blue round ">提交审核</button>
+            <button class="cu-btn bg-blue round " @click="submit">提交审核</button>
         </view>
     </view>
 </template>
 <script>
 import regionPicker from "../../components/w-picker/region-picker.vue"
+import { USER_INFO } from "@/common/util/constants"
+import configService from '../../common/service/config.service'
+
 export default {
     components: {
         regionPicker,
@@ -70,13 +73,78 @@ export default {
     data() {
         return {
             imgList: [],
-            form:{},
+            form: {},
             visible: false,
+            markers: []
 
         }
     },
-   
-     methods:{
+    async onShow() {
+        this.merchantId = uni.getStorageSync(USER_INFO).merchantId;
+        let res = await this.$http.get("/merchant/localMerchantInfo/queryAppInfoById?id=" + this.merchantId)
+        if (res.data.success) {
+            this.markers =  res.data.result.longitude &&  res.data.result.latitude?
+            [
+                {
+                    longitude: res.data.result.longitude,
+                    latitude: res.data.result.latitude,
+                    iconPath: '../../static/boiaoji.png' 
+                }
+            ]
+            :  uni.getStorageSync('address')?
+            [Object.assign(uni.getStorageSync('address'), { iconPath: '../../static/boiaoji.png' })]:[]
+            res.data.result.headPhoto= res.data.result.headPhoto?  res.data.result.headPhoto.split(',').filter(id => id !== ''):[]
+
+            this.form = res.data.result
+        } else {
+            this.$tip.toast(res.data.message);
+        }
+
+    },
+    methods: {
+        submit(){
+            this.$http.post('/merchant/localMerchantInfo/edit', {...this.form,  headPhoto: this.form.headPhoto.join(',') }).then(res => {
+                if (res.data.success) {
+                    this.$tip.success(res.data.result || '成功')
+                    uni.navigateBack({
+                            delta: 1 // 返回的页面数,默认为1
+                        })
+                }
+                else {
+                    this.$tip.error(res.data.message);
+                }
+            })
+        },
+        ChooseImage() {
+            uni.chooseImage({
+                // count: 4, //默认9
+                sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+                sourceType: ['album'], //从相册选择
+                success: (res) => {
+                    if (res) {
+                        uni.uploadFile({
+                            url: configService.apiUrl + '/sys/common/upload',
+                            filePath: res.tempFilePaths[0],
+                            name: "file",
+                            formData: {
+                                'biz': 'temp',
+                            },
+                            success: (files) => {
+                                let data = JSON.parse(files.data);
+                                if (data.success) {
+                                    if (this.form.headPhoto.length != 0) {
+                                        this.form.headPhoto.push(configService.apiUrl + '/' + data.message)
+                                    } else {
+                                        this.form.headPhoto = [configService.apiUrl + '/' + data.message]
+                                    }
+                                }
+                            }
+                        })
+                    }
+
+                }
+            });
+        },
         onConfirm(e) {
             this.form.locality = e.result
             this.form.country = e.value[e.value.length - 1]
@@ -89,7 +157,7 @@ export default {
                 confirmText: '确定',
                 success: res => {
                     if (res.confirm) {
-                        this.imgList.splice(e.currentTarget.dataset.index, 1)
+                        this.form.headPhoto.splice(e.currentTarget.dataset.index, 1)
                         this.form.headPhoto.splice(e.currentTarget.dataset.index, 1)
 
                     }
@@ -98,10 +166,25 @@ export default {
         },
         ViewImage(e) {
             uni.previewImage({
-                urls: this.imgList,
+                urls: this.form.headPhoto,
                 current: e.currentTarget.dataset.url
             });
         },
+        handleMarkerTap() {
+            const queryString  =  this.form.longitude &&   this.form.latitude?
+                {
+                    longitude:  this.form.longitude,
+                    latitude:  this.form.latitude,
+                }
+            :  uni.getStorageSync('address')?
+            encodeURIComponent(JSON.stringify(uni.getStorageSync('address'))) :{}
+
+            // const queryString = uni.getStorageSync('address') ? encodeURIComponent(JSON.stringify(uni.getStorageSync('address'))) : ''
+            uni.navigateTo({
+                url: '/pages/login/map?position=${queryString}'
+            })
+
+        },
     }
 }
 </script>
@@ -109,12 +192,14 @@ export default {
 page {
     background: #F8F8FA;
 }
+
 .borderRadiu {
     border-radius: 8px;
     padding-bottom: 10px;
     background-color: #ffffff;
     // border-bottom: 1px solid #eee;
 }
+
 .sub-bottom {
     position: fixed;
     width: 100%;
@@ -122,6 +207,7 @@ page {
     background: #FFFFFF;
     border-top: 1px solid #EEEEEE;
 }
+
 .customize {
     background-color: #fff;
     // border-top: 0.5px solid #eee;
@@ -153,6 +239,7 @@ page {
         color: #999999;
     }
 }
+
 .booder-top {
     border-bottom: 1px solid rgb(238, 238, 238);
     padding-top: 7px;

+ 0 - 1
pages/store/settings.vue

@@ -47,7 +47,6 @@
                     <button class="cu-btn round line-gray  shadow" @click=" $refs.popup.close()">取消</button>
                     <button style="width:77%" class="cu-btn bg-blue  round shadow" @click="submit">确定</button>
                 </view>
-            </view>
         </uni-popup>
     </view>
 </template>

+ 2 - 1
plugin/colorui/main.css

@@ -1605,13 +1605,14 @@ button.cuIcon.lg {
 	top: 0;
 	margin: auto;
 	height: 60upx;
-	font-size: 32upx;
+	font-size: 38upx;
 	line-height: 60upx;
 	cursor: none;
 	pointer-events: none;
 	text-overflow: ellipsis;
 	white-space: nowrap;
 	overflow: hidden;
+	font-weight: 500;
 }
 
 .cu-bar.ios .content {