|
|
@@ -111,8 +111,56 @@ export default {
|
|
|
onLoad(query) {
|
|
|
this.fromMulti = query.from === 'multi';
|
|
|
if (this.fromMulti) this.mode = 'fixed';
|
|
|
+ this.hydrateFromEditExtra();
|
|
|
},
|
|
|
methods: {
|
|
|
+ /** 将日期统一为 YYYY-MM-DD,兼容接口带时分秒 */
|
|
|
+ normalizeDate(val) {
|
|
|
+ if (!val) return '';
|
|
|
+ const s = String(val).trim();
|
|
|
+ const m = s.match(/^(\d{4}-\d{2}-\d{2})/);
|
|
|
+ return m ? m[1] : s.slice(0, 10);
|
|
|
+ },
|
|
|
+ /** 编辑回显:优先根据 saleTimes 内容推断,不依赖顶层 saleDateType 一定有值 */
|
|
|
+ hydrateFromEditExtra() {
|
|
|
+ const extra = session.getDishEditExtra() || {};
|
|
|
+ const saleTimes = Array.isArray(extra.saleTimes) ? extra.saleTimes : [];
|
|
|
+ const saleDateType = Number(extra.saleDateType);
|
|
|
+ if (!saleTimes.length && !saleDateType) return;
|
|
|
+
|
|
|
+ // 自定义区间:saleType=2 或带起止日期(接口可能不回顶层 saleDateType)
|
|
|
+ const range = saleTimes.find(
|
|
|
+ (t) => Number(t.saleType) === 2 || t.startDate || t.endDate
|
|
|
+ );
|
|
|
+ if (range && (range.startDate || range.endDate)) {
|
|
|
+ this.mode = 'custom';
|
|
|
+ this.startDate = this.normalizeDate(range.startDate);
|
|
|
+ this.endDate = this.normalizeDate(range.endDate);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 固定日期:saleType=1 或带 saleDate
|
|
|
+ const fixedDates = saleTimes
|
|
|
+ .filter((t) => Number(t.saleType) === 1 || t.saleDate)
|
|
|
+ .map((t) => this.normalizeDate(t.saleDate))
|
|
|
+ .filter(Boolean)
|
|
|
+ .sort();
|
|
|
+ if (fixedDates.length || saleDateType === 1) {
|
|
|
+ this.mode = 'fixed';
|
|
|
+ this.selectedDates = fixedDates;
|
|
|
+ if (fixedDates[0]) {
|
|
|
+ const [y, m] = fixedDates[0].split('-').map(Number);
|
|
|
+ if (y) this.year = y;
|
|
|
+ if (m) this.month = m;
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 无具体区间:全部日期售卖(仅多规格入口有该选项)
|
|
|
+ if ((saleDateType === 2 || !saleTimes.length) && this.fromMulti) {
|
|
|
+ this.mode = 'all';
|
|
|
+ }
|
|
|
+ },
|
|
|
onModeChange() {
|
|
|
this.selectedDates = [];
|
|
|
this.startDate = '';
|