{"version":3,"file":"chart-l8A0MbDv.js","sources":["../../../app/web/projects/client/pages/personal/schedule/components/cardChart/index.vue","../../../app/web/projects/client/pages/personal/schedule/calender/instance.js","../../../app/web/projects/client/pages/personal/schedule/components/weekStage/index.vue","../../../app/web/projects/client/pages/personal/schedule/calender/table.vue","../../../app/web/projects/client/pages/personal/schedule/calender/mixins.js","../../../app/web/projects/client/pages/personal/config/instance.js","../../../app/web/projects/client/pages/personal/schedule/scheduleChart/config.js","../../../app/web/projects/client/pages/personal/schedule/scheduleChart/chart.js"],"sourcesContent":["\n\n\n\n\n","export const MONTH_TRANSLATE = {\n '01': {\n label: 'R3015'\n },\n '02': {\n label: 'R3016'\n },\n '03': {\n label: 'R3017'\n },\n '04': {\n label: 'R3018'\n },\n '05': {\n label: 'R3019'\n },\n '06': {\n label: 'R3020'\n },\n '07': {\n label: 'R3021'\n },\n '08': {\n label: 'R3022'\n },\n '09': {\n label: 'R3023'\n },\n 10: {\n label: 'R3024'\n },\n 11: {\n label: 'R3025'\n },\n 12: {\n label: 'R3026'\n }\n};\n\nexport const FIRST_DAY_OF_WEEK = [1, 2, 3, 4, 5, 6, 7];\nexport const WEEK = ['C1039', 'C1040', 'C1041', 'C1042', 'C1043', 'C1044', 'C1045'];\nexport const SCHEDULE_ICON = {\n events: {\n 1: 'label-other.svg',\n 2: 'label-race.svg',\n 3: 'label-test.svg'\n },\n competition: 'label-race.svg'\n};\nexport const TRAIN_SUM = [\n {\n label: 'SQ9005',\n key: 'actualCti',\n color: '#aadb37'\n },\n {\n label: 'SQ9006',\n key: 'actualAti',\n color: '#3070ff'\n },\n {\n label: 'Y9081',\n key: 'actualTrainingLoadRatio',\n color: '#ff8602'\n }\n];\nexport const TRAIN_SUM_DETAIL = [\n {\n label: 'R3010',\n key: 'duration',\n plan: 'plan_duration',\n act: 'act_duration'\n },\n {\n label: 'R3011',\n key: 'distance',\n plan: 'plan_distance',\n act: 'act_distance'\n },\n {\n label: 'R3009',\n key: 'trainingload',\n plan: 'plan_trainingload',\n act: 'act_trainingload'\n }\n];\n\nexport const WEEK_STAGE_OPTIONS = [\n {\n label: 'C1026',\n color: 'rgba(223, 221, 40, 1)',\n bg: 'rgba(223, 221, 40, 0.2)'\n },\n {\n label: 'C1027',\n color: 'rgba(45, 227, 155, 1)',\n bg: 'rgba(45, 227, 155, 0.2)'\n },\n {\n label: 'C1028',\n color: 'rgba(2, 222, 234, 1)',\n bg: 'rgba(2, 222, 234, 0.2)'\n },\n {\n label: 'C1029',\n color: 'rgba(43, 147, 255, 1)',\n bg: 'rgba(43, 147, 255, 0.2)'\n },\n {\n label: 'C1030',\n color: 'rgba(129, 101, 255, 1)',\n bg: 'rgba(129, 101, 255, 0.2)'\n },\n {\n label: 'C1031',\n color: 'rgba(187, 187, 187, 1)',\n bg: 'rgba(187, 187, 187, 0.2)'\n }\n];\nexport const WEEK_STAGE_OPTIONS_MAP = {\n 0: {\n label: 'R3002',\n color: 'rgba(255, 255, 255, 0.6)',\n bg: '#394053'\n }\n};\nWEEK_STAGE_OPTIONS.forEach((item, index) => {\n WEEK_STAGE_OPTIONS_MAP[index + 1] = item;\n});\nexport const ADD_TEMPLATE_OPTION = [\n {\n label: 'R3003',\n value: 'training',\n icon: 'iconkuaijiexunlian'\n },\n {\n label: 'R3004',\n value: 'program',\n icon: 'iconxunlianzuhe'\n },\n {\n label: 'R3005',\n value: 'label',\n icon: 'iconicon_jichutubiao_biaoqian'\n }\n];\n\nexport const DEFAULT_TAG_FORM = {\n type: 2,\n name: '',\n id: '',\n planId: ''\n};\nexport const DEFAULT_TRAINING_FORM = {\n sportType: 1,\n name: '',\n overview: '',\n id: '',\n planId: '',\n exercises: [],\n programs: {}\n};\n","\n\n","\n \n \n \n \n \n \n \n {{ $t(option.label) }}\n \n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n \n \n
\n \n \n \n \n \n \n \n \n \n
\n {{ $t(`R3007`) }}\n {{ $t(`C1006`) }}\n
\n \n \n \n \n
\n \n \n \n \n \n \n
\n
\n {{ $t(`R3007`) }}\n {{ $t(`C1006`) }}\n
\n
\n \n \n \n \n\n\n\n","import dayjs from 'dayjs';\nimport { MONTH_TRANSLATE, WEEK, SCHEDULE_ICON } from './instance';\nimport Definition from '@client/config/definition';\nimport { chunk, cloneDeep } from 'lodash';\nimport { s2hmsFullStr, getLastMonday } from '@client/helper/day';\nimport { distanceKM2mile } from '@client/helper/distance';\nimport { getDistanceInfo, getSportIconBySportType, getSportIconBySportCategoryType, getEventTagByType } from '@client/helper/sport';\n\nimport { getStringByMaxBytes, getStringByte } from '@client/helper/string';\n\nimport * as corosSportConfig from '@coros/sport-config';\n\nconst { isIndoorClimbOrBoulderingTrainingSportType } = corosSportConfig.sport.climb;\n\nconst DATE_FORMAT = 'YYYYMMDD';\nexport default {\n name: 'calenderMix',\n data: function () {\n const COLUMNS = [];\n WEEK.forEach((item, index) => {\n COLUMNS.push({\n title: item,\n dataIndex: `day-${index + 1}`\n });\n });\n COLUMNS.push({\n title: 'R3001',\n dataIndex: 'week-sum'\n });\n return {\n tableBorder: {\n wrapper: true,\n cell: true,\n headerCell: true,\n bodyCell: true\n },\n programsConfig: {}, // 模板\n columns: COLUMNS,\n chunkDays: [],\n weekStagesData: {},\n mapDays: {},\n days: [],\n firstDay: '',\n lastDay: ''\n };\n },\n\n methods: {\n getStringByte,\n getStringByMaxBytes,\n appendCalenderDays(firstDay, lastDay) {\n const today = dayjs();\n const { mapDays } = this;\n let days = [];\n firstDay = dayjs(firstDay, DATE_FORMAT);\n lastDay = dayjs(lastDay, DATE_FORMAT);\n // const firstDate = dayjs(firstDay, DATE_FORMAT);\n // const lastDate = dayjs(lastDay, DATE_FORMAT);\n const firstDate = dayjs(getLastMonday(firstDay, DATE_FORMAT), DATE_FORMAT);\n const lastDate = dayjs(getLastMonday(lastDay, DATE_FORMAT, 1), DATE_FORMAT);\n // 重新填充开始的周一和结束的周一\n //计算当前时间前的天数\n const daysCount = dayjs(lastDate).diff(firstDate, 'day');\n for (let i = 0; i < daysCount; i++) {\n const day = firstDate.add(i, 'day');\n let happenDay = day.format(DATE_FORMAT);\n\n const data = this.getDataForDay(happenDay, today);\n data.rowGroupId = 'group-' + firstDay + '-' + i;\n if (!mapDays[happenDay]) mapDays[happenDay] = data;\n }\n\n // 将mapDays 转换为days数组\n const daysSortArr = Object.keys(mapDays).sort();\n daysSortArr.forEach((happenDay) => {\n days.push(mapDays[happenDay]);\n });\n\n this.days = days;\n this.fullfillSportCard();\n },\n /**\n *\n * @param {*} happenDay YYYYMMDD 格式\n * @param {*} today 时间格式\n */\n getDataForDay(happenDay, today) {\n const day = dayjs(happenDay, DATE_FORMAT);\n const isBefore = day.isBefore(today, 'day');\n const isAfter = day.isAfter(today, 'day');\n const isToday = day.isSame(today, 'day');\n const type = isAfter ? 'next' : isToday ? 'current' : 'prev';\n const data = {\n happenDay,\n date: day.format('D'),\n day: day.format('d'),\n dateType: 'weekday',\n DATE: this.getCalenderDate(day),\n type,\n putable: !isBefore,\n isBefore,\n isToday,\n sports: [],\n loading: false,\n popover: false,\n limit: 999\n };\n return data;\n },\n getCalenderDate(date) {\n const TODAY = dayjs();\n let { $t } = this;\n const isToday = dayjs(date).isSame(TODAY, 'day');\n const MM = date.format('MM');\n const DD = date.format('DD');\n\n const TODAY_DD = TODAY.format('DD');\n const TODAY_MM = TODAY.format('MM');\n if (DD === '01') {\n if (isToday) {\n return `${$t('C1038')} ${DD}`;\n } else {\n return `${$t(MONTH_TRANSLATE[MM].label)} ${DD}`;\n }\n } else if (TODAY_DD === '01' && TODAY_MM === MM && DD === '02') {\n return `${$t(MONTH_TRANSLATE[MM].label)} ${DD}`;\n } else {\n return (isToday ? `${$t('C1038')} ` : '') + DD;\n }\n },\n // 重新初始化数据\n reinitChunkDays() {\n let { chunkDays } = this;\n chunkDays.forEach((item1) => {\n item1.forEach((item2) => {\n item2.sports = [];\n });\n });\n },\n preHandleWeekStage(weekStages) {\n let { weekStagesData } = this;\n weekStages.forEach((item) => {\n let { firstDayInWeek } = item;\n // if (!weekStagesData[firstDayInWeek])\n weekStagesData[firstDayInWeek] = item;\n });\n },\n handleScheduleData(programs) {\n programs.forEach((item) => {\n if (item.sportType === 4) {\n item.simple = false;\n item.dataType = 'training';\n }\n });\n },\n handleProgramsData(programs = []) {\n programs.forEach((item) => {\n let { createTimestamp, sportType, idInPlan, planId = '', bitmapType } = item;\n let happenDay = dayjs(createTimestamp * 1000).format(DATE_FORMAT);\n // item.happenDay = happenDay;\n item.iconConfig = getSportIconBySportType(sportType, bitmapType);\n item.cardType = 'program';\n item.dataType = 'program';\n let key = idInPlan + '&' + planId;\n this.programsConfig[key] = item;\n });\n },\n handleEntriesData(entities) {\n let exitsObj = {};\n let { programsConfig } = this;\n // 第一次循环\n let today = dayjs();\n entities.forEach((item) => {\n let { happenDay, sportData, completeRate = 0, planId = '', idInPlan, id, exerciseBarChart = [], thirdParty = false } = item;\n item.entitie = cloneDeep(item);\n item.cloneable = true;\n let key = idInPlan + '&' + planId;\n let program = programsConfig[key];\n item.program = program;\n let { name = '', sportType, dataType, simple, overview = '', bitmapType } = program;\n item.cardType = 'entities';\n item.dataType = simple ? 'training' : dataType;\n\n const sportIconConfig = getSportIconBySportCategoryType(sportType);\n let i18n = '';\n if (sportIconConfig) {\n i18n = sportIconConfig.label;\n } else {\n i18n = Definition.getSportI18nKeyBySportType(sportType);\n }\n\n item.thirdParty = thirdParty;\n const displayName = name || i18n;\n // const displayOverview = overview;\n program.name = displayName;\n // program.overview = displayName;\n item.name = displayName;\n item.overview = overview;\n item.iconConfig = sportIconConfig || getSportIconBySportType(sportType, bitmapType);\n\n if (sportData) {\n sportType = sportData.sportType;\n }\n item.sportType = sportType;\n // 过去\n let currentDay = dayjs(happenDay + '', DATE_FORMAT);\n let isBefore = currentDay.isBefore(today, 'day');\n let isSame = currentDay.isSame(today, 'day');\n if (isBefore) {\n if (sportData) {\n // 有运动数据\n const n = parseFloat(completeRate);\n if (n >= 0.8 && n <= 1.2) {\n item.childType = 'planReach';\n } else if (n > 1.2) {\n item.childType = 'planOver';\n } else {\n item.childType = 'planFailed';\n }\n item.compareTime = sportData.startTime;\n } else {\n // 无运动数据\n item.childType = 'planMiss';\n item.compareTime = null;\n }\n } else if (isSame) {\n // 当天\n if (sportData) {\n // 有运动\n const n = parseFloat(completeRate);\n if (n >= 0.8 && n <= 1.2) {\n item.childType = 'planReach';\n } else if (n > 1.2) {\n item.childType = 'planOver';\n } else {\n item.childType = 'planFailed';\n }\n item.compareTime = item.sportData.startTime;\n } else {\n // 无运动\n item.childType = 'planFuture';\n item.compareTime = null;\n }\n } else {\n // 将来\n item.childType = 'planFuture';\n item.compareTime = null;\n }\n item.showCopy = true;\n item.isBefore = isBefore;\n item.listItem = this.getItemList(item);\n // 重构后, 提前计算, 节省一次计算量\n let chartHeight = 0;\n exerciseBarChart.forEach((item) => {\n chartHeight += item.height;\n });\n item.chartHeight = chartHeight;\n if (!exitsObj[happenDay]) exitsObj[happenDay] = [];\n exitsObj[happenDay].push(item);\n });\n\n // 第二次循环, 匹配date, 数据插入进对应的日期中\n this.mixToDays(exitsObj, true);\n },\n handleCompetitionsData(data) {\n let exitsObj = {};\n data.forEach((item) => {\n let type = 'competition';\n let { happenDay } = item;\n item.cardType = type;\n item.childType = 'competition';\n item.iconConfig = getEventTagByType(2);\n // = getScheduleAssetsFile(SCHEDULE_ICON[sportType]);\n if (!exitsObj[happenDay]) exitsObj[happenDay] = [];\n exitsObj[happenDay].push(item);\n });\n this.mixToDays(exitsObj, true);\n },\n\n handleFreeData(data) {\n // 即兴运动, todo\n let exitsObj = {};\n let today = dayjs();\n data.forEach((item) => {\n let { startTime, happenDay, sportType, name = '', bitmapType } = item;\n\n const iconConfig = getSportIconBySportCategoryType(sportType);\n\n let i18n = '';\n if (iconConfig) {\n i18n = iconConfig.label;\n } else {\n i18n = Definition.getSportI18nKeyBySportType(sportType);\n }\n\n item.name = this.$t(name) || this.$t(`${i18n}`);\n\n let currentDay = dayjs(happenDay + '', DATE_FORMAT);\n let isBefore = currentDay.isBefore(today, 'day');\n item.showCopy = false;\n item.cardType = 'free';\n item.childType = 'planFree';\n item.isBefore = isBefore;\n item.sportType = sportType;\n item.iconConfig = iconConfig || getSportIconBySportType(sportType, bitmapType);\n\n item.compareTime = startTime;\n item.listItem = this.getItemList(item);\n if (!exitsObj[happenDay]) exitsObj[happenDay] = [];\n exitsObj[happenDay].push(item);\n });\n this.mixToDays(exitsObj, true);\n },\n handleEventsData(events = []) {\n // 标签\n let exitsObj = {};\n events.forEach((item) => {\n let { happenDay, type } = item;\n item.cardType = 'label';\n item.dataType = 'label';\n item.childType = 'label';\n item.iconConfig = getEventTagByType(type);\n // getScheduleAssetsFile(SCHEDULE_ICON.events[type]);\n if (!exitsObj[happenDay]) exitsObj[happenDay] = [];\n exitsObj[happenDay].push(item);\n });\n this.mixToDays(exitsObj, true);\n },\n\n mixToDays(exitsObj, sortable = false) {\n let { days } = this;\n days.forEach((item) => {\n let { happenDay } = item;\n let _item = exitsObj[happenDay];\n if (_item && _item.length) {\n _item.forEach((item1) => {\n item1.copying = false;\n item.sports.push(item1);\n if (item && sortable) item.sports = this.cardSort(item);\n });\n }\n });\n },\n getItemList(item) {\n let { cardType, program, childType, sportData } = item;\n let listItem = [];\n let data = item;\n if (childType === 'planMiss' || childType === 'planFailed' || childType === 'planFuture' || childType === 'planReach') {\n data = program;\n }\n if (childType === 'planReach') {\n // console.log(222, program);\n }\n if (cardType === 'free') {\n listItem = this.getFreeItemList({}, data, cardType);\n }\n if (cardType === 'entities') {\n listItem = this.getFreeItemList(data, sportData, cardType);\n }\n return listItem;\n },\n getFreeItemList(program, sportData = {}, cardType) {\n let {\n sportType,\n duration,\n trainingLoad = 0,\n totalSets,\n targetValue,\n distance = 0,\n exercises = [],\n pitch,\n distanceDisplayUnit\n } = program;\n let {\n duration: s_duration,\n trainingLoad: s_trainingLoad = 0,\n sets: s_sets,\n distance: s_distance = 0,\n sportType: s_sportType,\n happenDay,\n distanceDisplayUnit: s_distanceDisplayUnit\n } = sportData;\n\n sportType = sportType || s_sportType;\n\n const list = [];\n if (sportType === 400) {\n list.push({\n program_value: duration > 0 ? s2hmsFullStr(duration) : undefined,\n sport_value: s_duration > 0 ? s2hmsFullStr(s_duration) : undefined //实际运动\n });\n list.push({\n program_value: trainingLoad > 0 ? `${trainingLoad} TL` : undefined,\n sport_value: s_trainingLoad > 0 ? `${s_trainingLoad} TL` : undefined //实际运动\n });\n } else if (sportType === 4 || sportType === 402) {\n list.push({\n program_value: duration > 0 ? s2hmsFullStr(duration) : undefined,\n sport_value: s_duration > 0 ? s2hmsFullStr(s_duration) : undefined\n });\n\n list.push({\n program_value: totalSets !== undefined ? this.$t('Y1103', { OvO: totalSets }) : undefined,\n sport_value: s_sets !== undefined ? this.$t('Y1103', { OvO: s_sets }) : undefined\n });\n list.push({\n program_value: trainingLoad > 0 ? `${trainingLoad} TL` : undefined,\n sport_value: s_trainingLoad > 0 ? `${s_trainingLoad} TL` : undefined //实际运动\n });\n }\n // 训练计划的室内攀岩、抱石\n else if (isIndoorClimbOrBoulderingTrainingSportType(sportType)) {\n /**\n * 1. 若动作均为时间,显示时间(00:00/00:00:00)\n 2. 若动作均为线路,显示线路数\n 3. 若动作均为自由模式,显示线路数(线路数等于动作数)\n 4. 若动作目标不一致,显示线路数(n条)\n 1. 目标类型为时间、自由模式时,一个动作默认为一条线路\n 2. 目标类型为线路时,设置的线路数量即为线路数\n 3. 课程线路数为以上之和\n */\n if (exercises.filter((item) => !item.isGroup).every((item) => item.targetType === 2)) {\n list.push({\n program_value: duration > 0 ? s2hmsFullStr(duration) : undefined,\n // 没计划的 sportType 是 800, 801,不支持\n sport_value: s_duration > 0 ? s2hmsFullStr(s_duration) : undefined\n });\n } else if (\n // 目标类型 targetType=9 是路线\n // 目标类型 targetType=1 manualEnd 自由模式\n exercises.every((item) => [1, 9].includes(item.targetType))\n ) {\n list.push({\n program_value: pitch ? `${pitch} ${this.$t(sportType === 7 ? 'H9095' : 'H9039')}` : undefined,\n // 没计划的 sportType 是 800, 801,不支持\n sport_value: sportData.pitch ? `${sportData.pitch} ${this.$t(sportType === 801 ? 'H9095' : 'H9039')}` : undefined\n });\n } else {\n // 路线相加\n // const targetValues = exercises.map((item) => {\n // if (item.targetType === 9) return item.targetValue;\n // if (item.targetType === 1 || item.targetType === 2) return 1;\n // });\n // const targetValueSum = targetValues.reduce((pre, cur) => {\n // return pre + cur;\n // }, 0);\n list.push({\n program_value: pitch ? `${pitch} ${this.$t(sportType === 7 ? 'H9095' : 'H9039')}` : undefined,\n // 攀岩这里sportData没有组数\n sport_value: sportData.pitch ? `${sportData.pitch} ${this.$t(sportType === 801 ? 'H9095' : 'H9039')}` : undefined\n });\n }\n } else {\n let unitA; //= sportData.unitType === 2 ? this.unit : sportData.unitType;\n let unitB; // = program.unit === 2 ? this.unit : program.unit;\n if (sportData.unitType !== undefined) {\n unitA = sportData.unitType === 2 ? this.unit : sportData.unitType;\n } else {\n unitA = this.unit;\n }\n if (program.unit !== undefined) {\n unitB = program.unit === 2 ? this.unit : program.unit;\n } else {\n unitB = this.unit;\n }\n // console.log(`distanceDisplayUnit`, program.name, s_distanceDisplayUnit, distanceDisplayUnit);\n const sportDataValue = getDistanceInfo(s_sportType, parseFloat(s_distance) / 100, unitA, {\n distanceDisplayUnit: s_distanceDisplayUnit\n });\n const sportValue = getDistanceInfo(sportType, parseFloat(distance) / 100, unitB, { distanceDisplayUnit });\n\n // 时间\n if (duration > 0 || s_duration > 0) {\n list.push({\n program_value: s2hmsFullStr(duration),\n sport_value: s2hmsFullStr(s_duration) //实际运动\n });\n }\n //距离\n const data_distance = Number(sportDataValue.value) || 0;\n const program_distance = Number(sportValue.value) || 0;\n if (data_distance > 0 || program_distance > 0) {\n list.push({\n program_value: `${sportValue.value} ${sportValue.unit}`,\n sport_value: `${sportDataValue.value} ${sportDataValue.unit}`\n });\n }\n\n // 负荷\n if (trainingLoad > 0 || s_trainingLoad > 0) {\n list.push({\n program_value: `${trainingLoad} TL`,\n sport_value: `${s_trainingLoad} TL` //实际运动\n });\n }\n }\n\n if (sportType === 5 && exercises.some((item) => item.targetType === 8)) {\n list.push({\n program_value: this.$t('Y1103', { OvO: totalSets }),\n sport_value: this.$t('Y1103', { OvO: s_sets })\n });\n }\n\n if (cardType !== 'free') {\n // return list.filter((l) => {\n // return l.program_value !== undefined;\n // });\n return list;\n } else {\n return list.filter((l) => {\n return l.sport_value !== undefined;\n });\n }\n },\n // 生成日历运动类型卡片\n fullfillSportCard() {\n // 将月数据分组为周数据[[1,2,3,4,5,6,7],[1,2,3,4,5,6,7]]\n let { days } = this;\n\n let chunkDays = chunk(days, 7);\n // 混合周阶段数据\n this.makeWeekStageData(chunkDays);\n this.chunkDays = chunkDays;\n },\n makeWeekStageData(chunkDays) {\n chunkDays.forEach((week) => {\n let _firstDayInWeek = week[0].happenDay;\n let item = {\n trainSum: {},\n showTrainSum: true,\n sumByType: [],\n stage: 0,\n firstDayInWeek: _firstDayInWeek\n };\n // this.handleWeekDataFormat(item.trainSum);\n item.dateType = 'weeksum';\n week.push(item);\n });\n },\n handleWeekData() {\n let { weekStagesData, chunkDays } = this;\n chunkDays.forEach((week) => {\n let _firstDayInWeek = week[0].happenDay;\n\n let item = weekStagesData[_firstDayInWeek] || {\n trainSum: {},\n sumByType: [],\n showTrainSum: true,\n stage: 0,\n firstDayInWeek: _firstDayInWeek\n };\n if (item.trainSum.actualCti === undefined) {\n item.showTrainSum = false;\n }\n this.handleWeekDataFormat(item.trainSum);\n\n item.dateType = 'weeksum';\n let weekStage = week[7];\n const { firstDayInWeek } = weekStage;\n item.firstDayInWeek = firstDayInWeek;\n week[7] = Object.assign(cloneDeep(weekStage), { ...item, clone: true, showActData: true });\n });\n },\n handleWeekDataFormat(trainSum) {\n let { unit } = this;\n let {\n actualDuration = 0,\n actualDistance = 0,\n actualTrainingLoad = 0,\n planDuration = 0,\n planDistance = 0,\n planTrainingLoad = 0\n } = trainSum;\n // 运动数据转换\n trainSum.act_duration = s2hmsFullStr(actualDuration);\n trainSum.plan_duration = s2hmsFullStr(planDuration);\n trainSum.act_distance = distanceKM2mile(parseInt(actualDistance) / 100000, 2, unit) + (unit === 0 ? ' km' : ' mi');\n trainSum.plan_distance = distanceKM2mile(parseInt(planDistance) / 100000, 2, unit) + (unit === 0 ? ' km' : ' mi');\n trainSum.act_trainingload = actualTrainingLoad + ' TL';\n trainSum.plan_trainingload = planTrainingLoad + ' TL';\n },\n cardSort(item) {\n let { isBefore, isToday, sports, happenDay } = item;\n let arr = [];\n const arrE = [];\n const arrST = [];\n const arrSS = [];\n const arrSP = [];\n if (isBefore) {\n // 过去的\n sports.forEach((s) => {\n if (s.cardType === 'label') {\n arrE.push(s);\n } else if (s.cardType === 'free') {\n arrST.push(s);\n } else if (s.cardType.includes('plan') && s.compareTime) {\n arrST.push(s);\n } else {\n arrSS.push(s);\n }\n });\n } else if (isToday) {\n sports.forEach((s) => {\n if (s.cardType === 'label') {\n arrE.push(s);\n } else if (s.cardType === 'free') {\n arrST.push(s);\n } else if (s.cardType.includes('plan') && s.compareTime) {\n arrST.push(s);\n } else {\n arrSS.push(s);\n }\n });\n } else {\n // 未来\n sports.forEach((s) => {\n if (s.cardType === 'label') {\n arrE.push(s);\n } else {\n arrSP.push(s);\n }\n });\n }\n arrE.sort((a, b) => {\n return a.updateTime - b.updateTime;\n });\n arrST.sort((a, b) => {\n return b.compareTime - a.compareTime;\n });\n arrSS.sort((a, b) => {\n return a.sortNoInSchedule - b.sortNoInSchedule;\n });\n arrSP.sort((a, b) => {\n return a.sortNoInSchedule - b.sortNoInSchedule;\n });\n arr = arr.concat(arrE);\n arr = arr.concat(arrST);\n arr = arr.concat(arrSS);\n arr = arr.concat(arrSP);\n return arr;\n }\n }\n};\n","export const SCHEDULE_TABS = [\n {\n // 训练负荷\n key: 'trainingLoad',\n name: 'R1001',\n type: 'default'\n },\n {\n // 运动时间\n key: 'workoutTime',\n name: 'R1002',\n type: 'default'\n },\n {\n // 运动距离\n key: 'distance',\n name: 'R1003',\n type: 'default'\n }\n];\nexport const TABS_DATA = [\n {\n // 长期负荷\n name: 'SQ9005',\n key: '6WeekAvgTL',\n default: true,\n valueKey: 'actualCti'\n },\n {\n // 短期负荷\n name: 'SQ9006',\n key: '7DayAvgTL',\n default: false,\n valueKey: 'actualAti'\n },\n {\n // 负荷疲劳-> 负荷差值\n name: 'Y9081',\n key: 'tiredRateNew',\n default: true,\n valueKey: 'actualTrainingLoadRatio'\n }\n];\nexport const TRAININGLOAD_TAB = {\n name: 'R1001',\n key: 'trainingLoad',\n default: true\n};\nexport const DECORATE_LIST = [\n {\n // 周期阶段\n name: 'R2010',\n key: 'cyclePhase'\n },\n {\n // 标签\n name: 'R2011',\n key: 'label'\n }\n];\n","export const ATTR_COLOR = {\n // 长期负荷\n '6WeekAvgTL': '#aadb37',\n '6WeekAvgTL-plan': 'rgba(170,219,55,0.25)',\n // 短期负荷\n '7DayAvgTL': '#3070ff',\n '7DayAvgTL-plan': 'rgba(49,112,255,0.25)',\n // 负荷差值\n tiredRateNew: '#ff8602',\n 'tiredRateNew-plan': 'rgba(255,158,15,0.25)',\n\n // 训练负荷\n trainingLoad: '#00B3FF',\n 'trainingLoad-plan': 'rgba(0, 179, 255, 0.25)',\n 'trainingLoad-overflow': '#0081FF',\n // 运动时间\n duration: '#00B3FF',\n 'duration-plan': 'rgba(0, 179, 255, 0.25)',\n 'duration-overflow': '#0081FF',\n // 运动距离\n distance: '#00B3FF',\n 'distance-plan': 'rgba(0, 179, 255, 0.25)',\n 'distance-overflow': '#0081FF'\n};\nexport const ATTR_PATH_COLOR = [\n {\n attr: {\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%'\n },\n datas: [\n { offset: '0%', color: 'rgb(25,179,255,0.6)' },\n { offset: '100%', color: 'rgba(25, 179, 255, 0)' }\n ],\n id: '6WeekAvgTL'\n },\n {\n attr: {\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%'\n },\n datas: [\n { offset: '0%', color: 'rgba(11, 231, 201, 0.8)' },\n { offset: '100%', color: 'rgba(11, 231, 201, 0)' }\n ],\n id: '7DayAvgTL'\n },\n {\n attr: {\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%'\n },\n datas: [\n { offset: '0%', color: 'rgba(255, 134, 2, 0.8)' },\n { offset: '100%', color: 'rgba(255, 197, 134, 0)' }\n ],\n id: 'tiredRateNew'\n }\n];\n\nexport const LABEL_TYPE = {\n 1: {\n value: 1,\n text: 'R5002'\n // icon: require('@/static/img/schedule/label-other.svg')\n },\n 2: {\n value: 2,\n text: 'R5003'\n // icon: require('@/static/img/schedule/label-race.svg')\n },\n 3: {\n value: 3,\n text: 'R5004'\n // icon: require('@/static/img/schedule/label-test.svg')\n }\n};\n","import * as d3 from 'd3';\nimport dayjs from 'dayjs';\nimport Helpers from '@client/helper/unit';\nimport { isNoValue } from '@client/helper/validate';\nimport { xss } from '@client/helper/string';\nexport class OverviewChart {\n STROKE_DASHARRAY = '8,8';\n\n constructor(options) {\n const that = this;\n that.el = options.el || null;\n\n // 主题\n that.theme = options.theme || 'theme-dark';\n\n that.margin = options.margin || null;\n that.width = that.el.clientWidth || 0;\n that.height = that.el.clientHeight || 0;\n\n // 整个图表\n that.svg = d3.select(that.el).append('svg').attr('width', that.width).attr('height', that.height);\n // 面积图渐变色\n let { linearGradients = [] } = options;\n this.defs = that.svg.append('defs');\n linearGradients.forEach((item) => {\n let { x1, x2, y1, y2 } = item.attr;\n this.defs\n .append('linearGradient')\n .attr('id', item.id)\n .attr('gradientUnits', 'userSpaceOnUse')\n .attr('x1', x1)\n .attr('y1', y1)\n .attr('x2', x2)\n .attr('y2', y2)\n .selectAll('stop')\n .data(item.datas)\n .enter()\n .append('stop')\n .attr('offset', function (d) {\n return d.offset;\n })\n .attr('stop-color', function (d) {\n return d.color;\n });\n });\n\n // 存放图表背景\n that.chartBg = that.svg.append('g').attr('class', 'chart-bg').attr('width', that.width).attr('height', that.height);\n\n // 存放标签图标\n that.labelArea = that.svg.append('g').attr('class', 'label-area').attr('transform', `translate(${that.margin.left}, 28)`);\n\n // 图表内容区域(不含坐标轴)\n that.content = that.svg\n .append('g')\n .attr('class', 'chart-content')\n .attr('transform', `translate(${that.margin.left}, ${that.margin.top})`);\n that.contentWidth = that.width - that.margin.left - that.margin.right;\n that.contentHeight = that.height - that.margin.top - that.margin.bottom;\n\n that.weekCount = options.weekCount || 52;\n\n // 每天的格子宽度\n that.dayWidth = that.contentWidth / (7 * that.weekCount - 1);\n\n // 用于存放面积图\n that.areaChartGroup = that.content.append('g').attr('class', 'area-chart');\n // 用于存放柱状图\n that.histogramChartGroup = that.content.append('g').attr('class', 'histogram-chart');\n // 用于存放折线图\n that.polylineChartGroup = that.content.append('g').attr('class', 'polyline-chart');\n\n that.xScale = null;\n that.xAxisKey = options.xAxisKey;\n // x轴刻度文字大小\n that.xTickFontSize = options.xTickFontSize >= 0 ? options.xTickFontSize : 12;\n that.xTicks = options.xTicks || [];\n that.xTicksObj = {};\n that.xTickInfo =\n options.xTickInfo ||\n ((value) => {\n return {\n text: value,\n value\n };\n });\n that.yScales = {};\n that.showingAttributes = [];\n\n // 需要展示的内容\n that.decorateList = options.decorateList || [];\n\n that.data = null;\n that.objData = null;\n\n // 用于十字线移动时回调(获取鼠标对应位置的数据)\n that.crossHairCallback = options.crossHairCallback || null;\n\n // 使用初始数据进行初始化\n that.setData(that.data);\n that.rootListener();\n\n that.setPolylineShadow();\n }\n\n /**\n * 主题颜色\n * @returns {*}\n */\n get themeStyle() {\n const that = this;\n const style = {\n 'theme-dark': {\n xTooltipBg: '#3B3C44',\n xTooltipColor: '#ffffff',\n xScaleLineColor: 'rgba(222, 223, 225, 0.1)',\n xTickLineColor: '#999999',\n xTickTextColor: 'rgba(225, 225, 225, 0.8)',\n\n yScaleLineColor: '#999999',\n yScaleUnitTextColor: '#999999',\n yTickTextColor: '#999999',\n yTickLineColor: 'rgba(222, 223, 225, 0.1)',\n\n // 属性窗口\n attrTooltipBg: 'rgba(46, 56, 81, 0.9)',\n attrTooltipTitleColor: 'rgba(255, 255, 255, 0.6)',\n attrItemTextColor: 'rgba(255, 255, 255, 0.6)',\n attrItemActualTextColor: 'rgba(255, 255, 255, 1)',\n\n weekLabelGroupBg: '#29324A',\n labelDateColor: 'rgba(255, 255, 255, 0.6)',\n labelNameColor: 'rgba(255, 255, 255, 0.8)',\n\n stageLineBg: '#29324A',\n stageLineDateColor: 'rgba(255, 255, 255, 0.6)',\n stageLineNameColor: '#FFFFFF',\n\n crossHairHorizontalLineColor: '#999999',\n crossHairVerticalLineColor: '#999999'\n },\n 'theme-light': {\n xTooltipBg: '#2ac595',\n xTooltipColor: '#ffffff',\n xScaleLineColor: 'rgba(222, 223, 225, 0.1)',\n xTickLineColor: '#999999',\n xTickTextColor: '#999999',\n\n yScaleLineColor: '#999999',\n yScaleUnitTextColor: '#999999',\n yTickTextColor: '#999999',\n yTickLineColor: '#dedfe1',\n\n // 属性窗口\n attrTooltipBg: '#ffffff',\n attrTooltipTitleColor: '#5e5e5e',\n attrItemTextColor: '#2e2e2e',\n attrItemActualTextColor: 'rgba(46, 46, 46, 0.74)',\n\n weekLabelGroupBg: '#ffffff',\n labelDateColor: 'rgba(46, 46, 46, 0.74)',\n labelNameColor: '#2e2e2e',\n\n stageLineBg: '#ffffff',\n stageLineDateColor: 'rgba(46, 46, 46, 0.74)',\n stageLineNameColor: '#2e2e2e',\n\n crossHairHorizontalLineColor: '#999999',\n crossHairVerticalLineColor: '#999999'\n }\n };\n const themeNames = Object.keys(style);\n if (themeNames.includes(that.theme)) {\n return style[that.theme];\n }\n return style[themeNames[0]];\n }\n\n /**\n * 创建用于折线图的阴影滤镜\n */\n setPolylineShadow() {\n const that = this;\n const polylineChartGroup = that.polylineChartGroup;\n\n const defs = polylineChartGroup.append('defs');\n\n const filter = defs.append('filter').attr('id', 'polyline-shadow').attr('height', '130%').attr('filterUnits', 'userSpaceOnUse');\n\n filter.append('feOffset').attr('in', 'SourceAlpha').attr('dx', 1).attr('dy', 2).attr('result', 'shadow-down');\n\n filter.append('feGaussianBlur').attr('in', 'shadow-down').attr('stdDeviation', 1).attr('result', 'shadow-down-result');\n\n const feMerge = filter.append('feMerge');\n\n feMerge.append('feMergeNode').attr('in', 'shadow-down-result');\n feMerge.append('feMergeNode').attr('in', 'SourceGraphic');\n }\n\n setBg(data) {\n const that = this;\n const yearTexts = {};\n\n for (let n = 0, length = data.length; n < length; n++) {\n const d = data[n];\n const rectWidth = that.xScale(d.endTimestamp) - that.xScale(d.startTimestamp);\n const monthItem = that.chartBg\n .append('g')\n .attr('class', 'month-item')\n .attr('transform', `translate(${that.xScale(d.startTimestamp)}, 0)`);\n\n const rect = monthItem\n .append('rect')\n .attr('class', 'month-rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', rectWidth)\n .attr('height', that.height)\n .attr('fill', d.color);\n\n const text = monthItem\n .append('text')\n .attr('class', 'month-text')\n .attr('x', 8)\n .attr('y', 5)\n .attr('fill', 'rgba(255, 255, 255, 0.4)')\n .attr('font-size', '12')\n .attr('dominant-baseline', 'text-before-edge')\n .attr('text-anchor', 'start')\n .text(() => {\n return d.text;\n });\n\n if (text._groups[0][0].getBoundingClientRect().width > rect._groups[0][0].getBoundingClientRect().width - 8) {\n text.attr('fill', 'rgba(255, 255, 255, 0)');\n }\n\n // 定义直线画法\n const lineFun = d3\n .line()\n .x((d, i) => {\n return d.x;\n })\n .y((d, i) => {\n return d.y;\n });\n\n monthItem\n .append('path')\n .attr('class', 'month-line')\n .attr(\n 'd',\n lineFun([\n { x: 0, y: 27 },\n { x: rectWidth, y: 27 }\n ])\n )\n .attr('fill', 'none')\n .attr('stroke-width', 1)\n .attr('stroke', '#3F4353')\n .attr('stroke-dasharray', '8,8');\n\n // 年份文字\n if (d.yearText && !yearTexts[d.yearText]) {\n yearTexts[d.yearText] = {\n x: that.xScale(d.startTimestamp),\n y: 163,\n text: d.yearText\n };\n // monthItem\n // .append('text')\n // .attr('class', 'month-text')\n // .attr('x', 8)\n // .attr('y', 163)\n // .attr('fill', 'rgba(255, 255, 255, 0.4)')\n // .attr('font-size', `12`)\n // .attr('dominant-baseline', 'text-before-edge')\n // .attr('text-anchor', 'start')\n // .text(() => {\n // return d.yearText\n // })\n }\n }\n\n for (const n in yearTexts) {\n const item = yearTexts[n];\n if (!item.text) {\n continue;\n }\n that.chartBg\n .append('text')\n .attr('class', 'month-text')\n .attr('x', item.x)\n .attr('y', item.y)\n .attr('fill', 'rgba(255, 255, 255, 0.4)')\n .attr('font-size', '12')\n .attr('dominant-baseline', 'text-before-edge')\n .attr('text-anchor', 'start')\n .text(() => {\n return item.text;\n });\n }\n }\n\n /**\n * 画图表\n * @param attr\n */\n drawChart(attr) {\n const that = this;\n switch (attr.chartType) {\n case 'planAndActualAreaLine':\n that.drawPlanAndActualAreaLineChart(attr);\n break;\n case 'planAndActualHistogram':\n that.drawPlanAndActualHistogramChart(attr);\n break;\n }\n }\n\n /**\n * 绘制周数据的面积折线图\n * @param attr\n */\n drawPlanAndActualAreaLineChart(attr) {\n const that = this;\n const { planValueKey, actualValueKey, valueKey, chartName, linearGradientId } = attr;\n const className = `attribute-${chartName}-chart`;\n const chartData = attr.chartData || that.chartData;\n const planColor = attr.planColor || 'rgba(184, 233, 255, 0.5)';\n const actualColor = attr.actualColor || '#00b3ff';\n\n let today = dayjs(new Date().getTime()).format('YYYY-MM-DD');\n today = new Date(today).getTime();\n\n // 定义面积画法\n const areaFun = d3\n .area()\n .defined(\n attr.defined ||\n ((d, i) => {\n // 控制是否绘制该点(return false不绘制)\n const value = d[valueKey][planValueKey];\n return !(isNaN(value) || isNaN(that.yScales[chartName](value)) || [undefined, ''].includes(value));\n })\n )\n .x((d, i) => {\n return that.xScale(d[that.xAxisKey]);\n })\n .y0((d, i) => {\n if (attr.y && attr.y instanceof Function) {\n return attr.y(d, i, that, attr);\n }\n return that.contentHeight - that.yScales[chartName](that.valueCorrect(attr, d[valueKey][planValueKey]));\n })\n .y1((d, i) => {\n return that.contentHeight;\n })\n .curve(attr.curve || d3.curveLinear);\n\n // 定义过去折线画法\n const foretimePolylineFun = d3\n .line()\n .defined(\n attr.defined ||\n ((d, i) => {\n // 控制是否绘制该点(return false不绘制)\n const value = d[valueKey][actualValueKey];\n return !(\n isNaN(value) ||\n isNaN(that.yScales[chartName](value)) ||\n [undefined, ''].includes(value) ||\n d[that.xAxisKey] > new Date().getTime()\n );\n })\n )\n .x((d, i) => {\n return that.xScale(d[that.xAxisKey]);\n })\n .y((d, i) => {\n if (attr.y && attr.y instanceof Function) {\n return attr.y(d, i, that, attr);\n }\n return that.contentHeight - that.yScales[chartName](that.valueCorrect(attr, d[valueKey][actualValueKey]));\n })\n .curve(attr.curve || d3.curveLinear);\n\n // 定义未来折线画法\n const futurePolylineFun = d3\n .line()\n .defined(\n attr.defined ||\n ((d, i) => {\n // 控制是否绘制该点(return false不绘制)\n const value = d[valueKey][actualValueKey];\n return !(isNaN(value) || isNaN(that.yScales[chartName](value)) || [undefined, ''].includes(value) || d[that.xAxisKey] < today);\n })\n )\n .x((d, i) => {\n return that.xScale(d[that.xAxisKey]);\n })\n .y((d, i) => {\n if (attr.y && attr.y instanceof Function) {\n return attr.y(d, i, that, attr);\n }\n return that.contentHeight - that.yScales[chartName](that.valueCorrect(attr, d[valueKey][actualValueKey]));\n })\n .curve(attr.curve || d3.curveLinear);\n\n let areaChart = that.areaChartGroup.select(`.${className}`);\n areaChart.remove();\n areaChart = that.areaChartGroup.append('g').attr('class', className);\n\n let polylineChart = that.polylineChartGroup.select(`.${className}`);\n polylineChart.remove();\n polylineChart = that.polylineChartGroup.append('g').attr('class', className);\n const fill = linearGradientId ? `url(#${linearGradientId})` : planColor;\n areaChart.append('path').attr('class', 'area').attr('d', areaFun(chartData)).attr('fill', fill);\n\n polylineChart\n .append('path')\n .attr('d', foretimePolylineFun(chartData))\n .attr('stroke', actualColor)\n .attr('stroke-width', 1)\n .attr('fill', 'none')\n .style('filter', 'url(#polyline-shadow)');\n\n polylineChart\n .append('path')\n .attr('d', futurePolylineFun(chartData))\n .attr('stroke', actualColor)\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', '2,2')\n .attr('fill', 'none');\n }\n\n /**\n * 绘制周数据的柱状图\n * @param attr\n */\n drawPlanAndActualHistogramChart(attr) {\n const that = this;\n const chartName = attr.chartName;\n const className = `attribute-${chartName}-chart`;\n const chartData = attr.chartData || that.chartData;\n const rectWidth = that.dayWidth * 6 * 0.7;\n const rectMarginLeft = (that.dayWidth * 6 * 0.3) / 2;\n\n const valueKey = attr.valueKey;\n const planValueKey = attr.planValueKey;\n const actualValueKey = attr.actualValueKey;\n const planColor = attr.planColor || 'rgba(184, 233, 255, 0.5)';\n const actualColor = attr.actualColor || '#00b3ff';\n const overflowColor = attr.overflowColor || '#0088c2';\n const overflowLineColor = attr.overflowLineColor || 'rgba(255, 255, 255, 0.7)';\n\n let chart = that.histogramChartGroup.select(`.${className}`);\n chart.remove();\n chart = that.histogramChartGroup.append('g').attr('class', className);\n chartData.forEach((d, index) => {\n const weekGroup = chart.append('g').attr('class', 'week-group');\n\n const planValue = d[valueKey][planValueKey];\n const actualValue = d[valueKey][actualValueKey];\n\n // 柱的公共属性设置\n const setHistogramAttr = (select) => {\n return select\n .attr('class', 'rect')\n .attr('x', () => {\n return that.xScale(d[that.xAxisKey]) + rectMarginLeft;\n })\n .attr('width', rectWidth);\n };\n // 绘制计划柱状图\n if (!isNoValue(planValue) && planValue > 0) {\n setHistogramAttr(\n weekGroup\n .append('rect')\n .attr('class', 'plan-rect')\n .attr('y', () => {\n let height = 0;\n height = that.yScales[attr.chartName](that.valueCorrect(attr, planValue));\n if (height <= 0) {\n height = 0;\n // height = 1\n }\n return that.contentHeight - height - 1;\n })\n .attr('height', () => {\n let height = 0;\n height = that.yScales[attr.chartName](that.valueCorrect(attr, planValue));\n if (height <= 0) {\n height = 0;\n // height = 1\n }\n return height;\n })\n .attr('fill', that.getFillColor(planColor))\n );\n }\n\n // 今天之后的日期不需要绘制实际值\n if (d[that.xAxisKey] > new Date().getTime()) {\n return;\n }\n\n // 绘制实际柱状图\n if (!isNoValue(actualValue) && actualValue > 0) {\n setHistogramAttr(\n weekGroup\n .append('rect')\n .attr('class', 'actual-rect')\n .attr('y', () => {\n let height = 0;\n height = that.yScales[attr.chartName](that.valueCorrect(attr, actualValue));\n if (height <= 0) {\n height = 0;\n // height = 1\n }\n return that.contentHeight - height;\n })\n .attr('height', () => {\n let height = 0;\n height = that.yScales[attr.chartName](that.valueCorrect(attr, actualValue));\n if (height <= 0) {\n height = 0;\n // height = 1\n }\n return height;\n })\n .attr('fill', that.getFillColor(actualColor))\n );\n }\n\n if (!isNoValue(actualValue) && !isNoValue(planValue) && planValue > 0 && actualValue - planValue > 0) {\n // 绘制超出部分柱状图\n setHistogramAttr(\n weekGroup\n .append('rect')\n .attr('class', 'overflow-rect')\n .attr('y', () => {\n let height = 0;\n height = that.yScales[attr.chartName](that.valueCorrect(attr, actualValue));\n if (height <= 0) {\n height = 0;\n // height = 1\n }\n return that.contentHeight - height;\n })\n .attr('height', () => {\n let height = 0;\n height =\n that.yScales[attr.chartName](that.valueCorrect(attr, actualValue)) -\n that.yScales[attr.chartName](that.valueCorrect(attr, planValue));\n if (height <= 0) {\n height = 0;\n // height = 1\n }\n return height;\n })\n .attr('fill', that.getFillColor(overflowColor))\n );\n\n // 绘制超出的分割线\n setHistogramAttr(\n weekGroup\n .append('rect')\n .attr('class', 'overflowLine-rect')\n .attr('y', () => {\n let height = 0;\n height = that.yScales[attr.chartName](that.valueCorrect(attr, planValue));\n if (height <= 0) {\n height = 0;\n // height = 1\n }\n return that.contentHeight - height;\n })\n .attr('height', () => {\n return 1;\n })\n .attr('fill', that.getFillColor(overflowLineColor))\n );\n }\n });\n }\n\n /**\n * 监听图表根元素事件\n */\n rootListener() {\n const that = this;\n // 十字线\n d3.select(that.el)\n .on('mousemove', (e) => {\n requestAnimationFrame(() => {\n that.elMoveEvent(e);\n });\n })\n .on('mouseleave', (e) => {\n requestAnimationFrame(() => {\n that.deleteCrossHair();\n that.hideWeekStageLineLabel();\n that.hideWeekLabel();\n });\n })\n .on('touchstart', (e) => {\n e.preventDefault();\n requestAnimationFrame(() => {\n that.elMoveEvent(e?.touches?.[0]);\n });\n })\n .on('touchmove', (e) => {\n e.preventDefault();\n requestAnimationFrame(() => {\n that.elMoveEvent(e?.touches?.[0]);\n });\n });\n }\n\n /**\n * 取样之后的数据\n * @returns {null}\n */\n get chartData() {\n return this.data;\n }\n\n /**\n * 清空图表所有内容\n */\n remove() {\n const that = this;\n for (let n = that.el.childNodes.length - 1; n >= 0; n--) {\n that.el.removeChild(that.el.childNodes[n]);\n }\n }\n\n /**\n * 判断是否为不存在的元素\n * @param select\n * @returns {boolean}\n */\n isEmptySelect(select) {\n return [undefined, null].includes(select._groups[0][0]);\n }\n\n /**\n * 将颜色转换为rgba格式,change为变色方式,使用颜色前统一转换为rgba格式,解决出现一瞬间蓝色的问题\n * @param color\n * @param opacity\n * @returns {string|*}\n */\n getFillColor(color, opacity) {\n const activeColor = d3.color(color);\n if (!activeColor) {\n return color;\n }\n if (opacity) {\n activeColor.opacity = opacity;\n }\n for (const n in activeColor) {\n if (isNaN(activeColor[n])) {\n activeColor[n] = 0;\n }\n }\n return `rgba(${activeColor.r}, ${activeColor.g}, ${activeColor.b}, ${activeColor.opacity})`;\n }\n\n /**\n * 设置需要绘制的内容\n * @param list\n */\n setDecorate(list = []) {\n this.decorateList = list;\n }\n\n /**\n * 设置数据\n * @param data\n */\n setData(data) {\n if (!data) {\n return;\n }\n const that = this;\n // that.data = JSON.parse(JSON.stringify(data))\n that.data = data;\n that.objData = {};\n that.data.forEach((item) => {\n that.objData[item[that.xAxisKey]] = item;\n });\n }\n\n /**\n * 修正超出y坐标的数据为正常范围值\n * @param attr\n * @param value\n * @returns {*}\n */\n valueCorrect(attr, value) {\n // 若该属性有自己的数据修正逻辑,则优先使用\n if (attr.valueCorrect && attr.valueCorrect instanceof Function) {\n return attr.valueCorrect(attr, value);\n }\n const that = this;\n const chartName = attr.chartName;\n const bottomY = that.yScales[chartName].domain()[0];\n const topY = that.yScales[chartName].domain()[1];\n let result = value;\n\n // 正向y轴\n if (bottomY < topY) {\n if (result < bottomY) {\n result = bottomY;\n } else if (topY < result) {\n result = topY;\n }\n }\n\n // 反向y轴\n if (bottomY > topY) {\n if (result > bottomY) {\n result = bottomY;\n } else if (topY > result) {\n result = topY;\n }\n }\n\n return result;\n }\n\n /**\n * 创建x轴比例尺\n * @param domain\n * @param scaleType\n */\n createXAxis(domain, scaleType) {\n const that = this;\n that.xScale = d3[scaleType || 'scaleLinear']().domain(domain).range([0, that.contentWidth]);\n }\n\n /**\n * 设置x轴刻度文字大小\n * @param fontSize\n */\n setXTickFontSize(fontSize) {\n if (typeof fontSize !== 'number' || fontSize < 0) {\n return;\n }\n this.xTickFontSize = fontSize;\n this.drawXTickTexts();\n this.drawXTickImages();\n }\n\n /**\n * 生成X轴刻度文字\n */\n drawXTickTexts() {\n const that = this;\n const xAxis = that.svg.select('.x-axis');\n let xAxisTickTexts = xAxis.select('.x-axis-tick-texts');\n\n if (that.isEmptySelect(xAxis)) {\n return;\n }\n\n const dayWidth = that.dayWidth;\n\n xAxisTickTexts.remove();\n xAxisTickTexts = xAxis.append('g').attr('class', 'x-axis-tick-texts');\n xAxisTickTexts\n .selectAll('.x-tick-text')\n .data(that.xTicks)\n .enter()\n .filter((d) => {\n return !!d.text;\n })\n .append('text')\n .attr('class', 'x-tick-text')\n .attr('x', (d) => {\n return d.x + dayWidth * 3;\n })\n .attr('y', 13)\n .attr('fill', that.themeStyle.xTickTextColor)\n .attr('font-size', `${that.xTickFontSize}px`)\n .attr('dominant-baseline', 'text-before-edge')\n .attr('text-anchor', 'middle')\n .text((d) => {\n return d.text;\n });\n }\n\n /**\n * 生成X轴周标签图片\n */\n drawXTickImages() {\n const that = this;\n const dayWidth = that.dayWidth;\n if (!that.decorateList.includes('label')) {\n return;\n }\n\n // 标签图片\n that.labelArea\n .selectAll('.week-label-image')\n .data(that.xTicks)\n .enter()\n .filter((d, i) => {\n // 控制是否绘制该点(return false不绘制)\n if (!d.weekEventTags || !Array.isArray(d.weekEventTags) || d.weekEventTags.length === 0) {\n return false;\n }\n return true;\n })\n .append('image')\n .attr('class', 'week-label-image')\n .attr('x', (d) => {\n return d.x + dayWidth * 3 - 7;\n })\n .attr('y', 6)\n .attr('width', 14)\n .attr('xlink:href', (d) => {\n // return d.weekEventTags[d.weekEventTags.length - 1].image\n return d.weekEventImage;\n })\n .attr('data-week-num', (d) => {\n return d.weekNum;\n });\n\n that.drawWeekLabelList();\n }\n\n /**\n * 绘制周标签列表\n */\n drawWeekLabelList() {\n const that = this;\n let weekLabels = that.el.getElementsByClassName('week-labels')[0];\n\n if (!weekLabels) {\n weekLabels = document.createElement('div');\n weekLabels.className = 'week-labels';\n that.el.append(weekLabels);\n }\n\n weekLabels.innerHTML = '';\n if (!that.decorateList.includes('label')) {\n return;\n }\n\n // 内容样式\n const innerStyle = `\n \n `;\n\n let innerHtml = '';\n\n // 标签列表\n for (let n = 0, length = that.xTicks.length; n < length; n++) {\n const d = that.xTicks[n];\n\n if (!d.weekEventTags || !Array.isArray(d.weekEventTags) || d.weekEventTags.length === 0) {\n continue;\n }\n\n innerHtml += `\n
\n `;\n d.weekEventTags.forEach((week) => {\n const { format_date, data } = week;\n innerHtml += `\n
\n
${format_date}
\n
`;\n\n data.forEach((label) => {\n const name = xss(label.name) || label.typeName;\n innerHtml += `\n
\n \n ${name}\n
`;\n });\n\n innerHtml += `\n
\n
\n `;\n });\n\n innerHtml += `\n
\n `;\n }\n\n weekLabels.innerHTML = innerStyle + innerHtml;\n }\n\n // 展示周阶段连线对应的tip\n showWeekLabel(weekNum, x, y) {\n const that = this;\n const item = document.getElementsByClassName(`week-label-group-${weekNum}`)[0];\n\n // 出现位置\n const tipPositionInfo = that.getTipPositionInfo(x, y, item);\n\n item.style.transform = `translate(${tipPositionInfo.translateX}px, ${tipPositionInfo.translateY}px)`;\n item.style.visibility = 'visible';\n item.style.opacity = '1';\n item.style.zIndex = 3;\n item.className = `week-label-group week-label-group-${weekNum} ${tipPositionInfo.className}`;\n }\n\n // 隐藏周阶段连线tip\n hideWeekLabel() {\n const list = document.getElementsByClassName('week-label-group');\n\n for (let n = 0, length = list.length; n < length; n++) {\n const item = list[n];\n item.style.opacity = '0';\n item.style.visibility = 'hidden';\n }\n }\n\n /**\n * 绘制周阶段连续线条\n */\n drawWeekStageLine() {\n const that = this;\n const xAxis = that.svg.select('.x-axis');\n let xAxisWeekStages = xAxis.select('.x-axis-week-stages');\n\n if (that.isEmptySelect(xAxis)) {\n return;\n }\n\n const dayWidth = that.dayWidth;\n const rectWidth = dayWidth * 6 * 0.7;\n const rectMarginLeft = (dayWidth * 6 * 0.3) / 2;\n\n xAxisWeekStages.remove();\n\n if (!that.decorateList.includes('cyclePhase')) {\n return;\n }\n\n xAxisWeekStages = xAxis.append('g').attr('class', 'x-axis-week-stages');\n xAxisWeekStages\n .selectAll('.week-stage-color-line')\n .data(that.weekStageColorLine)\n .enter()\n .append('rect')\n .attr('class', 'week-stage-color-line')\n .attr('x', (d, i) => {\n return that.xScale(d.between[0]) + rectMarginLeft;\n })\n .attr('y', 2)\n .attr('width', (d, i) => {\n const start = that.xScale(d.between[0]);\n const end = that.xScale(d.between[1]);\n return end - start + rectWidth;\n })\n .attr('height', 4)\n .attr('fill', (d, i) => {\n return that.getFillColor(d.color);\n })\n .attr('data-line-num', (d, i) => {\n return i;\n });\n\n that.drawWeekStageLineLabelList();\n }\n\n drawWeekStageLineLabelList() {\n const that = this;\n\n // 标识分组\n let weekStageLines = that.el.getElementsByClassName('week-stage-lines')[0];\n\n if (!weekStageLines) {\n weekStageLines = document.createElement('div');\n weekStageLines.className = 'week-stage-lines';\n that.el.append(weekStageLines);\n }\n\n // 内容样式\n const innerStyle = `\n \n `;\n\n let innerHtml = '';\n\n that.weekStageColorLine.forEach((item) => {\n innerHtml += `\n
\n
${item.weekBetweenText}
\n
\n \n ${item.name}\n
\n
\n `;\n });\n\n weekStageLines.innerHTML = innerStyle + innerHtml;\n }\n\n // 展示周阶段连线对应的tip\n showWeekStageLineLabel(lineNum, x, y) {\n const that = this;\n const item = document.getElementsByClassName('stage-line-item')[lineNum];\n\n // 出现位置\n const tipPositionInfo = that.getTipPositionInfo(x, y, item);\n\n item.style.visibility = 'visible';\n item.style.opacity = '1';\n item.style.transform = `translate(${tipPositionInfo.translateX}px, ${tipPositionInfo.translateY}px)`;\n\n item.className = `stage-line-item ${tipPositionInfo.className}`;\n }\n\n // 隐藏周阶段连线tip\n hideWeekStageLineLabel() {\n const list = document.getElementsByClassName('stage-line-item');\n\n for (let n = 0, length = list.length; n < length; n++) {\n const item = list[n];\n item.style.opacity = '0';\n item.style.visibility = 'hidden';\n }\n }\n\n /**\n * 画出x轴\n * @param ticks\n * @param weekStageColorLine\n */\n drawXScale(ticks = [], weekStageColorLine = []) {\n const that = this;\n // 定义直线画法\n const lineFun = d3\n .line()\n .x((d, i) => {\n return d.x;\n })\n .y((d, i) => {\n return d.y;\n });\n\n if (!that.xScale) {\n console.error(new Error('绘制x轴需要先创建x轴比例尺'));\n return;\n }\n\n let xAxis = that.svg.select('.x-axis');\n // 没有创建过x轴元素\n xAxis.remove();\n xAxis = that.svg\n .append('g')\n .attr('class', 'x-axis')\n .attr('transform', `translate(${that.margin.left}, ${that.margin.top + that.contentHeight})`);\n\n // 绘制x轴横线\n xAxis\n .append('path')\n .attr('class', 'x-axis-line')\n .attr(\n 'd',\n lineFun([\n { x: 0, y: 0 },\n { x: that.contentWidth, y: 0 }\n ])\n )\n .attr('fill', 'none')\n .attr('stroke-width', 1)\n .attr('stroke', that.getFillColor(that.themeStyle.xScaleLineColor));\n // .attr('stroke-dasharray', that.STROKE_DASHARRAY)\n\n that.xTicks = JSON.parse(JSON.stringify(ticks)).map((item, index) => {\n item.x = that.xScale(item[that.xAxisKey]);\n that.xTicksObj[item[that.xAxisKey]] = item;\n return item;\n });\n that.weekStageColorLine = weekStageColorLine;\n\n // 生成X轴刻度文字\n that.drawXTickTexts();\n that.drawXTickImages();\n that.drawWeekStageLine();\n }\n\n /**\n * 使用比例尺反向获取该坐标对应的值\n * @param x\n * @returns {number}\n */\n getValueFromXScale(x) {\n return Math.round(this.xScale.invert(x));\n // return Math.floor(this.xScale.invert(x))\n }\n\n /**\n * 创建y轴比例尺\n * @param attr\n */\n createYAxis(attr) {\n const that = this;\n\n const chartName = attr.chartName;\n const data = that.data.map((item) => {\n return item[attr.valueKey];\n });\n let min = Object.prototype.hasOwnProperty.call(attr, 'min') ? attr.min : d3.min(data) * 0.9;\n let max = Object.prototype.hasOwnProperty.call(attr, 'max') ? attr.max : d3.max(data) * 1.1;\n min = [undefined].includes(min) ? 0 : min;\n max = [undefined].includes(max) ? (min + 1) * 2 : max;\n if (min === max) {\n max = (min + 1) * 2;\n }\n\n that.yScales[chartName] = d3.scaleLinear().domain([min, max]).range([0, that.contentHeight]);\n }\n\n /**\n * 画出y轴\n * @param attrs\n * @param scaleType\n */\n drawYScale(attrs = [], scaleType) {\n const that = this;\n attrs.forEach((attr, index) => {\n that.createYAxis(attr);\n });\n }\n\n /**\n * 统一属性分组命名格式\n * @param attr\n * @returns {string}\n */\n attrGroupClassName(attr) {\n return `attribute-${attr.chartName}-chart`;\n }\n\n /**\n * 设置需要读取的属性\n * @param attributes\n */\n setShowingAttributes(attributes = []) {\n const that = this;\n that.yScales = {};\n that.showingAttributes = attributes;\n that.drawYScale(attributes);\n for (let n = 0, length = attributes.length; n < length; n++) {\n const attr = attributes[n];\n // 画图\n that.drawChart(attr);\n }\n }\n\n /**\n * 获取文本元素大小\n * @param text\n * @param fontSize\n * @returns {{width: number, height: number}}\n */\n getTextEleSize(text, fontSize = '12') {\n const ele = document.createElement('text');\n ele.style.fontSize = `${fontSize}px`;\n ele.textContent = text;\n document.body.append(ele);\n\n const rectInfo = ele.getBoundingClientRect();\n document.body.removeChild(ele);\n return {\n width: rectInfo.width,\n height: rectInfo.height\n };\n }\n\n /**\n * 绘制属性Tooltip\n * @param x\n * @param y\n * @param info\n */\n drawAttrTooltip(x, y, info = {}) {\n const that = this;\n let attributeTooltip = that.el.getElementsByClassName('chart-attribute-tooltip')[0];\n\n if (!attributeTooltip) {\n attributeTooltip = document.createElement('div');\n attributeTooltip.className = 'chart-attribute-tooltip';\n that.el.append(attributeTooltip);\n }\n\n const dayAttr = [];\n const weekAttr = [];\n\n that.showingAttributes.forEach((item) => {\n if (item.tooltipType === 'day') {\n dayAttr.push(item);\n return;\n }\n if (item.tooltipType === 'week') {\n weekAttr.push(item);\n }\n });\n\n // 生成内容\n\n // 内容样式\n const innerStyle = `\n \n `;\n\n let innerHtml = '';\n\n // 天数据\n if (dayAttr.length > 0) {\n innerHtml += `\n
\n
${info.dateNumText}
\n
\n `;\n\n dayAttr.forEach((attr) => {\n const dayData = info[attr.valueKey];\n const actualValue = dayData[attr.actualValueKey];\n const planValue = dayData[attr.planValueKey];\n innerHtml += `\n
\n \n ${attr.name}:`;\n\n innerHtml += `\n ${attr.valueText ? attr.valueText(actualValue) : actualValue}\n /\n ${attr.valueText ? attr.valueText(planValue) : planValue}`;\n\n innerHtml += `\n
\n `;\n });\n\n innerHtml += `\n
\n
\n `;\n }\n\n // 分割线\n if (dayAttr.length > 0 && weekAttr.length > 0) {\n innerHtml += `\n
\n `;\n }\n\n // 周数据\n if (weekAttr.length > 0) {\n const weekNum = info.weekNum - 1;\n innerHtml += `\n
\n
${info.weekNumText}
\n
\n `;\n\n weekAttr.forEach((attr) => {\n const weekData = attr.chartData[weekNum][attr.valueKey];\n const actualValue = weekData[attr.actualValueKey];\n const planValue = weekData[attr.planValueKey];\n innerHtml += `\n
\n \n ${attr.name}:`;\n\n if (isNoValue(actualValue)) {\n // 计划的图表\n innerHtml += `\n ${attr.valueText ? attr.valueText(planValue) : planValue}`;\n // 日程的图表\n } else if (actualValue === 0 && planValue === 0) {\n innerHtml += `\n ${attr.valueText ? attr.valueText(actualValue) : actualValue}`;\n } else {\n innerHtml += `\n ${attr.valueText ? attr.valueText(actualValue) : actualValue}\n /\n ${attr.valueText ? attr.valueText(planValue) : planValue}`;\n }\n\n innerHtml += `\n
\n `;\n });\n innerHtml += `\n
\n
\n `;\n }\n attributeTooltip.innerHTML = innerStyle + innerHtml;\n\n // 出现位置\n const tipPositionInfo = that.getTipPositionInfo(x, y, attributeTooltip);\n\n attributeTooltip.className = `chart-attribute-tooltip ${tipPositionInfo.className}`;\n\n attributeTooltip.style.opacity = '1';\n attributeTooltip.style.transform = `translate(${tipPositionInfo.translateX}px, ${tipPositionInfo.translateY}px)`;\n }\n\n /**\n * 删除属性Tooltip\n */\n removeAttrTooltip() {\n const that = this;\n const attributeTooltip = that.el.getElementsByClassName('chart-attribute-tooltip');\n if (that.el && attributeTooltip && attributeTooltip[0]) {\n attributeTooltip[0].remove();\n }\n }\n\n /**\n * 根据鼠标位置和元素,获取位置和箭头信息\n * @param x\n * @param y\n * @param tipEle\n * @returns {{translateY: number, translateX: number, className: string}}\n */\n getTipPositionInfo(x, y, tipEle) {\n const that = this;\n\n // 出现位置\n // const contentWidth = that.el.clientWidth\n // const contentHeight = that.el.clientHeight\n const contentWidth = that.contentWidth;\n const contentHeight = that.contentHeight;\n const offsetWidth = tipEle.offsetWidth;\n const offsetHeight = tipEle.offsetHeight;\n let translateX = 20;\n let translateY = 15;\n let className = '';\n\n if (x <= contentWidth / 2 && y <= contentHeight / 2) {\n // translateX = translateX\n translateY = -translateY;\n className = 'left-top-arrow';\n } else if (x > contentWidth / 2 && y <= contentHeight / 2) {\n translateX = -translateX - offsetWidth;\n translateY = -translateY;\n className = 'right-top-arrow';\n } else if (x <= contentWidth / 2 && y > contentHeight / 2) {\n // translateX = translateX\n translateY = translateY - offsetHeight;\n className = 'left-bottom-arrow';\n } else if (x > contentWidth / 2 && y > contentHeight / 2) {\n translateX = -translateX - offsetWidth;\n translateY = translateY - offsetHeight;\n className = 'right-bottom-arrow';\n }\n\n return {\n translateX: x + that.margin.left + translateX,\n translateY: y + that.margin.top + translateY,\n className\n };\n }\n\n /**\n * 获取数据中最接近的x的值\n * @param value\n * @returns {*}\n */\n getSimilarXValue(value) {\n const that = this;\n let result = 0;\n let num = 0;\n if (that.data.length < 1000) {\n return Helpers.getNearlyDataByBinarySearch({\n originalData: that.data,\n key: that.xAxisKey,\n value\n }).data[that.xAxisKey];\n }\n for (;;) {\n if (that.objData[value - num]) {\n result = that.objData[value - num][that.xAxisKey];\n break;\n }\n if (that.objData[value + num]) {\n result = that.objData[value + num][that.xAxisKey];\n break;\n }\n num++;\n }\n return result;\n }\n\n /**\n * 绘制十字线的横竖线\n * @param x\n * @param y\n */\n drawCrossHairLine(x, y) {\n const that = this;\n const drawHorizontalLine = false;\n const drawVerticalLine = true;\n\n // 定义直线画法\n const lineFun = d3\n .line()\n .x((d, i) => {\n return d.x;\n })\n .y((d, i) => {\n return d.y;\n });\n\n let crossHair = that.svg.select('.cross-hair');\n if (that.isEmptySelect(crossHair)) {\n crossHair = that.svg\n .append('g')\n .attr('class', 'cross-hair')\n .attr('transform', `translate(${that.margin.left}, ${that.margin.top})`)\n .style('pointer-events', 'none');\n }\n const horizontalLine = crossHair.select('.horizontal-line');\n const verticalLine = crossHair.select('.vertical-line');\n\n // 横线\n horizontalLine.remove();\n if (drawHorizontalLine) {\n crossHair\n .append('path')\n .attr('class', 'horizontal-line')\n .attr(\n 'd',\n lineFun([\n { x: 0, y },\n { x: that.contentWidth, y }\n ])\n )\n .attr('pointer-events', 'none')\n .attr('fill', 'none')\n .attr('stroke-width', 1)\n .attr('stroke', that.themeStyle.crossHairHorizontalLineColor)\n .attr('stroke-dasharray', that.STROKE_DASHARRAY);\n }\n\n // 竖线\n if (that.isEmptySelect(verticalLine)) {\n verticalLine.remove();\n if (drawVerticalLine) {\n crossHair\n .append('path')\n .attr('class', 'vertical-line')\n .attr(\n 'd',\n lineFun([\n { x: 0, y: 0 },\n { x: 0, y: that.contentHeight }\n ])\n )\n .attr('transform', `translate(${x}, 0)`)\n .attr('pointer-events', 'none')\n .attr('fill', 'none')\n .attr('stroke-width', 1)\n .attr('stroke', that.themeStyle.crossHairVerticalLineColor)\n .attr('stroke-dasharray', that.STROKE_DASHARRAY);\n }\n } else {\n verticalLine.attr('transform', `translate(${x}, 0)`);\n }\n }\n\n isIncludeElList(elList, el) {\n let result = false;\n for (let n = 0, length = elList.length; n < length; n++) {\n if (elList[n] === el) {\n result = true;\n break;\n }\n }\n return result;\n }\n\n elMoveEvent(e) {\n const that = this;\n\n const clientRect = that.el.getBoundingClientRect();\n const x = e.clientX - clientRect.left - that.margin.left;\n const y = e.clientY - clientRect.top - that.margin.top;\n\n const pointEle = document.elementFromPoint(e.clientX, e.clientY);\n\n // svg元素上\n if (that.isIncludeElList(document.getElementsByClassName('week-stage-color-line'), pointEle)) {\n that.deleteCrossHair();\n that.hideWeekLabel();\n that.showWeekStageLineLabel(pointEle.dataset.lineNum, x, y);\n return;\n } else if (that.isIncludeElList(document.getElementsByClassName('week-label-image'), pointEle)) {\n // 标签图片\n that.deleteCrossHair();\n that.hideWeekStageLineLabel();\n\n that.showWeekLabel(pointEle.dataset.weekNum, x, y);\n return;\n }\n that.hideWeekStageLineLabel();\n that.hideWeekLabel();\n\n if (x < 0 || x > that.contentWidth) {\n that.deleteCrossHair();\n return;\n }\n if (y < 0 || y > that.contentHeight) {\n that.deleteCrossHair();\n return;\n }\n\n this.drawCrossHair(e);\n }\n\n /**\n * 十字线\n * @param e\n */\n drawCrossHair(e) {\n const that = this;\n\n const clientRect = that.el.getBoundingClientRect();\n let x = e.clientX - clientRect.left - that.margin.left;\n const y = e.clientY - clientRect.top - that.margin.top;\n\n // 使用比例尺反向获取该坐标对应的值,并返回与该值最接近的数据值\n const xm = that.getSimilarXValue(this.getValueFromXScale(x));\n // 获取对应改x坐标的数据\n const xValueInfo = that.objData[xm];\n\n if (!xValueInfo) {\n return;\n }\n x = that.xScale(xValueInfo[that.xAxisKey]);\n\n if (that.crossHairCallback) {\n that.crossHairCallback(e, xValueInfo);\n }\n\n // 绘制十字线的横竖线\n that.drawCrossHairLine(x, y);\n // 绘制属性Tooltip\n that.drawAttrTooltip(x, y, xValueInfo);\n }\n\n /**\n * 清除十字线\n */\n deleteCrossHair() {\n const that = this;\n const crossHair = that.svg.select('.cross-hair');\n crossHair.remove();\n // 删除Tooltip\n if (\n that.el &&\n that.el.getElementsByClassName('chart-attribute-tooltip') &&\n that.el.getElementsByClassName('chart-attribute-tooltip')[0]\n ) {\n that.el.getElementsByClassName('chart-attribute-tooltip')[0].remove();\n }\n }\n}\n"],"names":["value","concat","MONTH_TRANSLATE","label","FIRST_DAY_OF_WEEK","WEEK","SCHEDULE_ICON","events","competition","TRAIN_SUM","key","color","TRAIN_SUM_DETAIL","plan","act","WEEK_STAGE_OPTIONS","bg","WEEK_STAGE_OPTIONS_MAP","forEach","item","index","ADD_TEMPLATE_OPTION","icon","DEFAULT_TAG_FORM","type","name","id","planId","DEFAULT_TRAINING_FORM","sportType","overview","exercises","programs","isIndoorClimbOrBoulderingTrainingSportType","corosSportConfig.sport","climb","t","useI18n","props","__props","userStore","useUserStore","currentUnit","computed","unit","getTrainingSumLabel","trainsum","stageInfo","trainSum","includes","Math","round","showXti","from","visibleElevGainUnit","parseElevGain","elevGain","mathjsUnit","toNumber","toFixed","isShowTypeCount","sumByType","count","length","s","littleCount","i","Number","getSportName","Definition","getSportCategoryByValue","i18n","getSportI18nKeyBySportType","scheduleStore","scheduleStoreRef","userStoreRef","memberDataStore","memberDataStoreRef","corosCalender","ref","height","useElementSize","emits","__emit","hoverLock","activeWeekCopyIndex","week_stage_options","cloneDeep","week_stage_options_map","add_template_options","options","site","push","copying","weekCopying","initScrollTop","safeLoadPadding","handleScroll","throttle","e","scrollTop","scrollHeight","clientHeight","target","currentTotals","total","data","weekItem","dayItem","sports","isMyself","teamViewMode","hasEditPermission","editPermission","userData","isNormalProgram","element","cardType","isNotPlanExpired","childType","showTeamLocker","operateUserId","teamId","happenDay","userId","isNotStudentSelf","viewerData","isCoachRole","isGroupHolder","role","isCoach","isNotGroupHolderOrCoach","findIsInTeamCoaching","isNotSameTeam","showUserLocker","thirdParty","showDayDelete","isBefore","isOwner","hasOwner","isTriangle","editable","userProfile","allowCoachEditing","showCopy","activeTeamCoachList","activeTeamUserList","findIndex","m","handleDragEnd","Array","document","getElementsByClassName","classList","remove","handleDragMove","event","to","add","handleDragData","dataTransfer","el","handleDragAdd","readonly","handleTableClick","handlePopoverChange","status","weekIndex","dayIndex","activeCalendCardData","handleStageChange","indexStr","arr","split","cancelWeekCopy","showWeekDeleteBtn","dateType","content","Modal","confirm","titleAlign","title","okText","cancelText","modalClass","onOk","dataType","labelId","sportData","query","href","queryString","stringifyUrl","url","location","origin","window","open","fromWeekIndex","toWeekIndex","DATE_FORMAT","canenderMixin","COLUMNS","dataIndex","tableBorder","wrapper","cell","headerCell","bodyCell","programsConfig","columns","chunkDays","weekStagesData","mapDays","days","firstDay","lastDay","methods","getStringByte","getStringByMaxBytes","appendCalenderDays","today","dayjs","this","firstDate","getLastMonday","lastDate","daysCount","diff","format","getDataForDay","rowGroupId","Object","keys","sort","fullfillSportCard","day","isAfter","isToday","isSame","date","DATE","getCalenderDate","putable","loading","popover","limit","TODAY","$t","MM","DD","TODAY_DD","TODAY_MM","reinitChunkDays","item1","item2","preHandleWeekStage","weekStages","firstDayInWeek","handleScheduleData","simple","handleProgramsData","createTimestamp","idInPlan","bitmapType","iconConfig","getSportIconBySportType","handleEntriesData","entities","exitsObj","completeRate","exerciseBarChart","entitie","cloneable","program","sportIconConfig","getSportIconBySportCategoryType","displayName","currentDay","n","parseFloat","compareTime","startTime","listItem","getItemList","chartHeight","mixToDays","handleCompetitionsData","getEventTagByType","handleFreeData","handleEventsData","sortable","_item","cardSort","getFreeItemList","duration","trainingLoad","totalSets","targetValue","distance","pitch","distanceDisplayUnit","s_duration","s_trainingLoad","sets","s_sets","s_distance","s_sportType","s_distanceDisplayUnit","list","program_value","s2hmsFullStr","sport_value","OvO","filter","isGroup","every","targetType","unitA","unitB","unitType","sportDataValue","getDistanceInfo","sportValue","data_distance","program_distance","some","l","chunk","makeWeekStageData","week","showTrainSum","stage","handleWeekData","_firstDayInWeek","actualCti","handleWeekDataFormat","weekStage","assign","clone","showActData","actualDuration","actualDistance","actualTrainingLoad","planDuration","planDistance","planTrainingLoad","act_duration","plan_duration","act_distance","distanceKM2mile","parseInt","plan_distance","act_trainingload","plan_trainingload","arrE","arrST","arrSS","arrSP","a","b","updateTime","sortNoInSchedule","SCHEDULE_TABS","TABS_DATA","default","valueKey","TRAININGLOAD_TAB","DECORATE_LIST","ATTR_COLOR","tiredRateNew","ATTR_PATH_COLOR","attr","x1","y1","x2","y2","datas","offset","LABEL_TYPE","text","OverviewChart","constructor","__publicField","that","theme","margin","width","clientWidth","svg","d3.select","append","linearGradients","defs","selectAll","enter","d","chartBg","labelArea","left","top","contentWidth","right","contentHeight","bottom","weekCount","dayWidth","areaChartGroup","histogramChartGroup","polylineChartGroup","xScale","xAxisKey","xTickFontSize","xTicks","xTicksObj","xTickInfo","yScales","showingAttributes","decorateList","objData","crossHairCallback","setData","rootListener","setPolylineShadow","themeStyle","style","xTooltipBg","xTooltipColor","xScaleLineColor","xTickLineColor","xTickTextColor","yScaleLineColor","yScaleUnitTextColor","yTickTextColor","yTickLineColor","attrTooltipBg","attrTooltipTitleColor","attrItemTextColor","attrItemActualTextColor","weekLabelGroupBg","labelDateColor","labelNameColor","stageLineBg","stageLineDateColor","stageLineNameColor","crossHairHorizontalLineColor","crossHairVerticalLineColor","themeNames","feMerge","setBg","yearTexts","rectWidth","endTimestamp","startTimestamp","monthItem","rect","_groups","getBoundingClientRect","lineFun","d3\n .line","x","y","yearText","drawChart","chartType","drawPlanAndActualAreaLineChart","drawPlanAndActualHistogramChart","planValueKey","actualValueKey","chartName","linearGradientId","className","chartData","planColor","actualColor","Date","getTime","areaFun","d3\n .area","defined","isNaN","y0","Function","valueCorrect","curve","d3.curveLinear","foretimePolylineFun","d3\n .line","futurePolylineFun","areaChart","select","polylineChart","fill","rectMarginLeft","overflowColor","overflowLineColor","chart","weekGroup","planValue","actualValue","setHistogramAttr","isNoValue","getFillColor","on","requestAnimationFrame","elMoveEvent","deleteCrossHair","hideWeekStageLineLabel","hideWeekLabel","preventDefault","_a","touches","childNodes","removeChild","isEmptySelect","opacity","activeColor","d3.color","r","g","setDecorate","bottomY","domain","topY","result","createXAxis","scaleType","d3","range","setXTickFontSize","fontSize","drawXTickTexts","drawXTickImages","xAxis","xAxisTickTexts","weekEventTags","isArray","weekEventImage","weekNum","drawWeekLabelList","weekLabels","createElement","innerHTML","innerStyle","innerHtml","format_date","xss","typeName","image","showWeekLabel","tipPositionInfo","getTipPositionInfo","transform","translateX","translateY","visibility","zIndex","drawWeekStageLine","xAxisWeekStages","weekStageColorLine","between","start","drawWeekStageLineLabelList","weekStageLines","weekBetweenText","showWeekStageLineLabel","lineNum","drawXScale","ticks","JSON","parse","stringify","map","getValueFromXScale","invert","createYAxis","min","prototype","hasOwnProperty","call","d3.min","max","d3.max","max$1","d3.scaleLinear","drawYScale","attrs","attrGroupClassName","setShowingAttributes","attributes","getTextEleSize","ele","textContent","body","rectInfo","drawAttrTooltip","info","attributeTooltip","dayAttr","weekAttr","tooltipType","dateNumText","dayData","valueText","weekNumText","weekData","removeAttrTooltip","tipEle","offsetWidth","offsetHeight","getSimilarXValue","num","Helpers","getNearlyDataByBinarySearch","originalData","drawCrossHairLine","crossHair","horizontalLine","verticalLine","STROKE_DASHARRAY","isIncludeElList","elList","clientRect","clientX","clientY","pointEle","elementFromPoint","dataset","drawCrossHair","xm","xValueInfo"],"mappings":"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"}