diff --git a/package.json b/package.json index bc1288378..ff215ff40 100644 --- a/package.json +++ b/package.json @@ -59,8 +59,8 @@ "stylus": "^0.59.0", "stylus-loader": "^7.1.0", "tinymce": "^5.10.3", - "tui-calendar-hi": "^1.15.1-5", - "view-design-hi": "^4.7.0-70", + "tui-calendar-hi": "^2.1.3-3", + "view-design-hi": "^4.7.0-71", "vite": "^2.9.15", "vite-plugin-file-copy": "^1.0.0", "vite-plugin-require": "^1.1.10", diff --git a/resources/assets/js/pages/manage/calendar.vue b/resources/assets/js/pages/manage/calendar.vue index 9079ab19b..fece5c940 100644 --- a/resources/assets/js/pages/manage/calendar.vue +++ b/resources/assets/js/pages/manage/calendar.vue @@ -4,54 +4,54 @@
-
-

{{rangeText}}

+
+

{{ rangeText }}

- - + + - + - - - + + +
-
-
- + ref="calendar" + :view="options.view" + :week="options.week" + :month="options.month" + :theme="options.theme" + :template="options.template" + :events="events" + @selectDateTime="onSelectDateTime" + @beforeUpdateEvent="onBeforeUpdateEvent" + @clickDayName="onClickDayName" + @clickEvent="onClickEvent"/>
diff --git a/resources/assets/js/pages/manage/components/Calendar.vue b/resources/assets/js/pages/manage/components/Calendar.vue deleted file mode 100644 index 93161440b..000000000 --- a/resources/assets/js/pages/manage/components/Calendar.vue +++ /dev/null @@ -1,225 +0,0 @@ - - - diff --git a/resources/assets/js/pages/manage/components/Calendar/index.vue b/resources/assets/js/pages/manage/components/Calendar/index.vue new file mode 100644 index 000000000..7bdc1b121 --- /dev/null +++ b/resources/assets/js/pages/manage/components/Calendar/index.vue @@ -0,0 +1,125 @@ + + + diff --git a/resources/assets/js/pages/manage/components/Calendar/theme.js b/resources/assets/js/pages/manage/components/Calendar/theme.js new file mode 100644 index 000000000..6187a994a --- /dev/null +++ b/resources/assets/js/pages/manage/components/Calendar/theme.js @@ -0,0 +1,63 @@ +export const theme = { + common: { + border: '1px solid #ddd', + backgroundColor: 'white', + holiday: {color: '#f54f3d'}, + saturday: {color: '#135de6'}, + dayName: {color: '#333'}, + today: {color: '#009688'}, + gridSelection: { + backgroundColor: 'rgba(19, 93, 230, 0.1)', + border: '1px solid #135de6', + }, + }, + month: { + dayName: { + borderLeft: 'none', + backgroundColor: 'inherit', + }, + holidayExceptThisMonth: {color: '#f3acac'}, + dayExceptThisMonth: {color: '#bbb'}, + weekend: {backgroundColor: '#fafafa'}, + moreView: {boxShadow: 'none'}, + moreViewTitle: {backgroundColor: '#f4f4f4'}, + }, + week: { + dayName: { + borderTop: 'none', + borderBottom: 'none', + borderLeft: '1px solid #ddd', + backgroundColor: 'inherit', + }, + today: { + color: '#009688', + backgroundColor: 'inherit', + }, + pastDay: {color: '#999'}, + panelResizer: {border: '1px solid #ddd'}, + dayGrid: {borderRight: '1px solid #ddd'}, + dayGridLeft: { + width: '100px', + backgroundColor: '', + borderRight: '1px solid #ddd', + }, + weekend: {backgroundColor: 'inherit'}, + timeGridLeft: { + width: '100px', + backgroundColor: '#fafafa', + borderRight: '1px solid #ddd', + }, + timeGridLeftAdditionalTimezone: {backgroundColor: '#fdfdfd'}, + timeGridHourLine: {borderBottom: '1px solid #eee'}, + timeGridHalfHourLine: {borderBottom: '1px dotted #f9f9f9'}, + timeGrid: {borderRight: '1px solid #ddd'}, + nowIndicatorLabel: {color: '#135de6'}, + nowIndicatorPast: {border: '1px solid rgba(19, 93, 230, 0.3)'}, + nowIndicatorBullet: {backgroundColor: '#135de6'}, + nowIndicatorToday: {border: '1px solid #135de6'}, + nowIndicatorFuture: {border: '1px solid #135de6'}, + pastTime: {color: '#999'}, + futureTime: {color: '#333'}, + gridSelection: {color: '#135de6'}, + }, +}; diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index fa6dc1cc3..cc1b96695 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -1020,6 +1020,7 @@ export default { const cacheItems = { clientId: await $A.IDBString("clientId"), cacheServerUrl: await $A.IDBString("cacheServerUrl"), + cacheCalendarView: await $A.IDBString("cacheCalendarView"), cacheProjectParameter: await $A.IDBArray("cacheProjectParameter"), cacheLoginEmail: await $A.IDBString("cacheLoginEmail"), cacheFileSort: await $A.IDBJson("cacheFileSort"), @@ -1061,6 +1062,7 @@ export default { string: [ 'clientId', 'cacheServerUrl', + 'cacheCalendarView', 'cacheTranslationLanguage', 'cacheTranscriptionLanguage' ], diff --git a/resources/assets/js/store/state.js b/resources/assets/js/store/state.js index 22e3cc6c8..3043173f3 100644 --- a/resources/assets/js/store/state.js +++ b/resources/assets/js/store/state.js @@ -75,6 +75,9 @@ export default { cacheUserWait: [], cacheUserBasic: [], + // 日历 + cacheCalendarView: null, + // Dialog cacheDialogs: [], diff --git a/resources/assets/sass/pages/components/calendar.scss b/resources/assets/sass/pages/components/calendar.scss index aa8dc241b..eeb9e4ae4 100644 --- a/resources/assets/sass/pages/components/calendar.scss +++ b/resources/assets/sass/pages/components/calendar.scss @@ -1,164 +1,17 @@ .calendar-wrapper { flex: 1; position: relative; - &:before { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 2px; - background-color: #ffffff; - z-index: 1; + .toastui-calendar-day-name-item.toastui-calendar-week, + .toastui-calendar-day-names.toastui-calendar-week { + overflow: hidden; } - .tui-full-calendar-popup { - box-shadow: none; - font-weight: normal; - .tui-full-calendar-section-header { - .tui-full-calendar-ic-checkbox-checked { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAhFBMVEUAAACLz3CLz3CLz3CKzm6Gy2+Lz3CLz3CL0HCLz3CLz3CLz3CLz3CMz3GLz3CKz3CLz3CL0HCJ0G+KznCN0HCL0HCLz3CKz3CLz3CLz3CLz3CMz3CLz3CLz3GL0XCL0HCN0XKLz3CLz3CMz3CLz3CM0HCM0G+FzHCLz3CKz3CMz3CLz3Bod5CFAAAAK3RSTlMA18RAOQ3s8+Pc0rmyq3tpiUwTgBnovyDMjmNSRjUvJQX5yKB0WisKppuUFLaY7gAAAotJREFUeNrtm+FymkAUhc8KqIAgSkyUtkmsmqa97/9+HWeSudpCd8qZ7E0m+73A9/1gxmXx4IK0nbipvDFTN2lT9JDVToLh6gx/sHQSFLfEFZUEp8IFczFgrv5CTChe/TsxYvfy/IkZy7M/c2KGywDUYkgNIBdDciARUxI0YkqDiZgygRNTHKZiyhRiTAyIATEgBsSAGBADYsAnCJgdmtIywKUAOrsA94QzJyKA95/pbALcPV7piADGryzDB+Rnv3IkAhi/UhMBjF9pQwbk3/A3JRXA+7GjAng/DqEC5v3+dMYE8P6nQsIEzFOPnw7g/QpC+R8K4QJ4f5iAzaA/TMAm6fdvZQgY+wW2fn9A0a66Bee/2xLH8kp/Rr1MB/3jAxaP0ALCPzagzPBCM9r/XcYH3K4BLfD4vw75xwdMbqB4CmaD/vEB2ztc0RD+MQHFg+c85fffDPv9AbPUd6Lz+ydCBDyjh1//6WcCGngK1L8a8lMBJTwFfj8XIC16+SnX7Af9bIDUngLSrwFEwaD/VogA5YheDj7/Wv1MgL9g/8XjpwNk+c8Cyq8BYwqePX46QOkGCmi/BowrqFi/Bvg4wYv6y7e4Kz4Rfj5AnzY/WSlcwHAB5+cD9ivKzwfIbEX4qQA99RB+NkDfO4b5sRAigHjzpP0C6u6D9wuo2z/eL+DvXx8Zv4C4gVd/qABxCeFnApQT5+cDpOP8fICcLv2VxbfjlQZUNh+vU/XbBIj6jQLm9wDWlZgFyOaYHJ3Ix/gDQwyIATEgBsSAGODBfuBgPvEwH7m0YkqLVExJYfsQuPcwdjOf+5kPHoFKjKio0e3Hn90WUCyGt7v3Nf0GsjqXYOR1hh6SJsz8v0mg/AZRXmaRKXtJBwAAAABJRU5ErkJggg==); - } - } - .tui-full-calendar-popup-container { - word-break: break-all; - border: 0; - box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); - border-radius: 6px; - } - .tui-full-calendar-arrow-top .tui-full-calendar-popup-arrow-border { - top: -8px; - border-bottom-color: rgba(217, 217, 217, .5); - } - } - .tui-full-calendar-dropdown-menu { - border-color: #e8e8e8; - width: calc(100% - 14px); - } - .tui-full-calendar-popup-creation { - .tui-full-calendar-icon { - &.tui-full-calendar-ic-title, - &.tui-full-calendar-calendar-dot { - display: none; - } - &.tui-full-calendar-ic-date { - background-image: url("data:image/svg+xml;base64,PHN2ZyB0PSIxNjIzODU5NjcwNjA3IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE2Mzg4IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTk2MCAxMjhIODMzYzAtNTMtNDMtOTYtOTYtOTZoLTE2Yy01MyAwLTk2IDQzLTk2IDk2SDQwMGMwLTI2LjUtMTAuNy01MC41LTI4LjEtNjcuOUMzNTQuNSA0Mi43IDMzMC41IDMyIDMwNCAzMmgtMTZjLTUzIDAtOTYgNDMtOTYgOTZINjRjLTM1LjMgMC02NCAyOC42LTY0IDY0djczNmMwIDM1LjMgMjguNyA2NCA2NCA2NGg4OTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTkyYzAtMzUuNC0yOC43LTY0LTY0LTY0eiBtLTI3MSA4YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDB2ODBjMCAyMi4xLTE3LjkgNDAtNDAgNDAtMTEgMC0yMS00LjUtMjguMy0xMS43QzY5My41IDIzNyA2ODkgMjI3IDY4OSAyMTZ2LTgweiBtLTQzMyAwYzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDB2ODBjMCAyMi4xLTE3LjkgNDAtNDAgNDAtMTEgMC0yMS00LjUtMjguMy0xMS43QzI2MC41IDIzNyAyNTYgMjI3IDI1NiAyMTZ2LTgweiBtNzA0IDc2MGMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDQ4aDg5NnY0NDh6IiBwLWlkPSIxNjM4OSIgZmlsbD0iIzUxNTE1MSI+PC9wYXRoPjwvc3ZnPg=="); - background-size: contain; - } - } - .tui-full-calendar-content { - padding-left: 0; - } - .tui-full-calendar-popup-section { - display: flex; - justify-content: space-between; - margin-bottom: 10px; - .tui-full-calendar-popup-section-item { - height: 36px; - line-height: 34px; - border-color: #e8e8e8; - border-radius: 4px; - } - .tui-full-calendar-popup-section-item input { - height: 34px; - } - } - .tui-full-calendar-section-title { - width: 100%; - input { - width: 100%; - } - } - .tui-full-calendar-section-start-date, - .tui-full-calendar-section-end-date { - width: 210px; - .tui-full-calendar-content { - padding-left: 8px; - } - } - .tui-full-calendar-popup-location, - .tui-full-calendar-section-private, - .tui-full-calendar-section-allday, - .tui-full-calendar-section-state { - display: none; - } - } - .tui-full-calendar-popup-task { - .priority { - color: #ffffff; - padding: 2px 4px; - border-radius: 4px; - margin-right: 6px; - } - .overdue { - color: #f5222d; - background: #fff1f0; - border: 1px solid #ffa39e; - padding: 1px 3px; - border-radius: 4px; - margin-right: 6px; - } - .tui-full-calendar-calendar-dot, - .tui-full-calendar-ic-priority { - opacity: 0; - } - .tui-full-calendar-ic-edit { - top: -2px; - background-image: url("data:image/svg+xml;base64,PHN2ZyB0PSIxNjIzODU5MzY4MTg5IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjExMTkiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNODMzLjQyODU3MTY4IDYySDE5MC41NzE0MjgzMmExMjguNTcxNDI4MzIgMTI4LjU3MTQyODMyIDAgMCAwLTEyOC41NzE0MjgzMiAxMjguNTcxNDI4MzJ2NjQyLjg1NzE0MzM2YTEyOC41NzE0MjgzMiAxMjguNTcxNDI4MzIgMCAwIDAgMTI4LjU3MTQyODMyIDEyOC41NzE0MjgzMmg2NDIuODU3MTQzMzZhMTI4LjU3MTQyODMyIDEyOC41NzE0MjgzMiAwIDAgMCAxMjguNTcxNDI4MzItMTI4LjU3MTQyODMyVjE5MC41NzE0MjgzMmExMjguNTcxNDI4MzIgMTI4LjU3MTQyODMyIDAgMCAwLTEyOC41NzE0MjgzMi0xMjguNTcxNDI4MzJ6IG02NC4yODU3MTQxNiA3NzEuNDI4NTcxNjhhNjQuMjg1NzE0MTYgNjQuMjg1NzE0MTYgMCAwIDEtNjQuMjg1NzE0MTcgNjQuMjg1NzE0MTZIMTkwLjU3MTQyODMyYTY0LjI4NTcxNDE2IDY0LjI4NTcxNDE2IDAgMCAxLTY0LjI4NTcxNDE2LTY0LjI4NTcxNDE2VjE5MC41NzE0MjgzMmE2NC4yODU3MTQxNiA2NC4yODU3MTQxNiAwIDAgMSA2NC4yODU3MTQxNy02NC4yODU3MTQxNmg2NDIuODU3MTQzMzVhNjQuMjg1NzE0MTYgNjQuMjg1NzE0MTYgMCAwIDEgNjQuMjg1NzE0MTYgNjQuMjg1NzE0MTd6IiBwLWlkPSIxMTIwIiBmaWxsPSIjNTE1MTUxIj48L3BhdGg+PHBhdGggZD0iTTE5MC41NzE0MjgzMiAyNTQuODU3MTQyNDhoNjQuMjg1NzE0MTZ2NjQuMjg1NzE1MDRIMTkwLjU3MTQyODMyek0zMTkuMTQyODU3NTIgMjU0Ljg1NzE0MjQ4aDQ1MHY2NC4yODU3MTUwNEgzMTkuMTQyODU3NTJ6TTE5MC41NzE0MjgzMiA0NDcuNzE0Mjg1ODRoNjQuMjg1NzE0MTZ2NjQuMjg1NzE0MTZIMTkwLjU3MTQyODMyek0zMTkuMTQyODU3NTIgNDQ3LjcxNDI4NTg0aDQ1MHY2NC4yODU3MTQxNkgzMTkuMTQyODU3NTJ6TTE5MC41NzE0MjgzMiA2NDAuNTcxNDI4MzJoNjQuMjg1NzE0MTZ2NjQuMjg1NzE0MTZIMTkwLjU3MTQyODMyek0zMTkuMTQyODU3NTIgNjQwLjU3MTQyODMyaDMyMS40Mjg1NzA4djY0LjI4NTcxNDE2SDMxOS4xNDI4NTc1MnoiIHAtaWQ9IjExMjEiIGZpbGw9IiM1MTUxNTEiPjwvcGF0aD48L3N2Zz4="); - } - .tui-full-calendar-ic-delete { - top: -2px; - background-image: url("data:image/svg+xml;base64,PHN2ZyB0PSIxNjIzODU5MzMwMTc2IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9Ijc5MiIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjxwYXRoIGQ9Ik04OTIuMjg4IDI1NmgtMTkxLjE2OEEyMDIuMjQgMjAyLjI0IDAgMCAwIDUwOS42MzIgNjIuMDggMjAxLjIxNiAyMDEuMjE2IDAgMCAwIDMxOC44NDggMjU2SDEyOGMtMTguNjg4IDAtNjYuMDQ4LTQuMjI0LTY2LjA0OCAyNC43NjhDNjEuOTUyIDMyNy43NDQgMTA5LjM3NiAzMjAgMTI4IDMyMGg2NHY1MTJhMTQ2LjQ5NiAxNDYuNDk2IDAgMCAwIDEyNy40MjQgMTI4aDM4Mi4yNzJBMTUwLjAxNiAxNTAuMDE2IDAgMCAwIDgzMiA4MzJsLTMuMzkyLTUxMmg2NGMxOC4zNjggMCA2NS4wMjQgMS40NzIgNjUuMDI0LTM5Ljc0NEE3Mi4zODQgNzIuMzg0IDAgMCAwIDg5Mi4yODggMjU2ek01MDkuNjMyIDEyOC41MTJBMTM4LjE3NiAxMzguMTc2IDAgMCAxIDYzNy40NCAyNTZIMzgyLjU5MmExMzcuOTIgMTM3LjkyIDAgMCAxIDEyNy4wNC0xMjcuNDg4ek03NjggODMyYTk3Ljk4NCA5Ny45ODQgMCAwIDEtNjYuODggNjRIMzE4Ljg0OGE5My41NjggOTMuNTY4IDAgMCAxLTY0LTY0VjMyMEg3Njh2NTEyeiBtLTM4NS40MDgtNjRWNTEyYzAtMTguNDk2IDAuOTYtNjAuOTkyIDM2LjczNi02MC45OTIgMjcuMzI4IDAgMjYuNDk2IDQzLjAwOCAyNi45NDQgNjAuOTkydjI1NmMwIDE4LjQ5Ni02LjQgMjAuMDMyLTI0Ljk2IDIwLjAzMnMtMzguNzItMS41MzYtMzguNzItMjAuMDMyeiBtMTkxLjE2OCAwVjUxMmE2NCA2NCAwIDAgMSAyMy44MDgtNjAuOTkyYzQyLjQzMiAwIDM5LjM2IDQzLjAwOCAzOS44NzIgNjAuOTkydjI1NmMwIDE4LjQ5Ni0xOS41ODQgMjAuMDMyLTM3Ljk1MiAyMC4wMzJzLTI1Ljc5Mi0xLjUzNi0yNS43OTItMjAuMDMyeiIgcC1pZD0iNzkzIiBmaWxsPSIjNTE1MTUxIj48L3BhdGg+PC9zdmc+"); - } - .tui-full-calendar-popup-detail-item-separate { - padding-left: 22px; - } - } - .tui-full-calendar-popup-detail { - .tui-full-calendar-content { - line-height: normal; - } - } - .tui-datepicker { - border-color: #e8e8e8; - .tui-calendar { - th, - td { - height: 32px; - } - .tui-calendar-prev-month.tui-calendar-date, - .tui-calendar-next-month.tui-calendar-date { - visibility: visible; - } - } - .tui-datepicker-body .tui-timepicker, - .tui-datepicker-footer .tui-timepicker { - padding: 16px 46px 16px 47px; - } - } - .tui-full-calendar-week-container{ - min-height: 100px; - } -} - -body.window-portrait { - .calendar-wrapper { - .tui-full-calendar-section-button { - > button { - .tui-full-calendar-icon { - width: 14px; - height: 14px; - background-size: 14px; - } - .tui-full-calendar-content { - font-size: 14px; - } - } - } - } - @media (max-width: 640px) { - .calendar-wrapper { - .tui-full-calendar-popup-arrow { - display: none; + .toastui-calendar-month-more-list { + .toastui-calendar-weekday-event-title { + > div { + padding: 0 2px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } } } diff --git a/resources/assets/sass/pages/page-calendar.scss b/resources/assets/sass/pages/page-calendar.scss index 0ca481122..c8e1a5f2c 100644 --- a/resources/assets/sass/pages/page-calendar.scss +++ b/resources/assets/sass/pages/page-calendar.scss @@ -51,13 +51,6 @@ padding: 0 48px 6px; overflow: hidden; } - .calendar-menu { - position: absolute; - top: 2px; - right: 2px; - z-index: -1; - opacity: 0; - } } body.window-portrait { @@ -79,31 +72,6 @@ body.window-portrait { } .calendar-box { padding: 0 24px 5px; - .calendar-wrapper { - .tui-full-calendar-section-button { - > button { - .tui-full-calendar-icon { - width: 14px; - height: 14px; - background-size: 14px; - } - .tui-full-calendar-content { - font-size: 14px; - } - } - } - } - } - } - @media (max-width: 640px) { - .page-calendar { - .calendar-box { - .calendar-wrapper { - .tui-full-calendar-popup-arrow { - display: none; - } - } - } } } }