diff --git a/package.json b/package.json
index aca77aa6..87e1b8d1 100644
--- a/package.json
+++ b/package.json
@@ -38,7 +38,7 @@
"echarts": "^5.1.1",
"element-ui": "^2.15.2",
"tinymce": "^5.8.1",
- "tui-calendar-hi": "^1.13.0-3",
+ "tui-calendar-hi": "^1.13.0-5",
"view-design-hi": "^4.6.1-1",
"vue-clipboard2": "^0.3.1",
"vue-emoji-picker": "^1.0.1",
diff --git a/resources/assets/js/pages/manage/calendar.vue b/resources/assets/js/pages/manage/calendar.vue
index a8fac00f..d3cc7724 100644
--- a/resources/assets/js/pages/manage/calendar.vue
+++ b/resources/assets/js/pages/manage/calendar.vue
@@ -22,7 +22,9 @@
@@ -64,6 +66,9 @@ export default {
rangeTime: [],
calendarView: 'month',
+ calendarTheme: {},
+ calendarTemplate: {},
+ calendarList: [],
scheduleLoad: 0,
scheduleList: [],
@@ -74,21 +79,13 @@ export default {
this.setRenderRange();
},
+ activated() {
+ this.$refs.cal.resetRender();
+ },
+
computed: {
...mapState(['projectList']),
- calendarLists() {
- const {projectList} = this;
- return projectList.map((project) => {
- return {
- id: project.id,
- name: project.name,
- bgColor: '#F2F3F5',
- borderColor: '#F2F3F5'
- }
- });
- },
-
scheduleLists() {
return this.scheduleList.filter(({complete_at}) => !complete_at)
}
@@ -97,10 +94,42 @@ export default {
watch: {
rangeTime(time) {
this.getTask(time);
+ },
+
+ projectList(data) {
+ const list = data.map((project) => {
+ return {
+ id: project.id,
+ name: project.name,
+ }
+ });
+ if (JSON.stringify(list) != JSON.stringify(this.calendarList)) {
+ this.calendarList = list;
+ }
}
},
methods: {
+ initLanguage() {
+ this.calendarTheme = {
+ 'common.border': '1px solid #f4f5f5',
+ 'month.dayname.fontSize': '14px',
+ 'month.dayname.borderLeft': '1px solid #f4f5f5',
+ 'month.dayname.height': '50px',
+ }
+ this.calendarTemplate = {
+ titlePlaceholder: () => {
+ return this.$L("任务描述")
+ },
+ popupEdit: () => {
+ return this.$L("详情");
+ },
+ popupDelete: () => {
+ return this.$L("删除");
+ }
+ }
+ },
+
getTask(time) {
if (this.scheduleLoad > 0) {
setTimeout(() => {
@@ -134,6 +163,7 @@ export default {
if (task.overdue) {
schedule.color = "#f56c6c"
schedule.bgColor = "#fef0f0"
+ schedule.priority+= '' + this.$L('超期未完成') + '';
}
let index = this.scheduleList.findIndex(({id}) => id === task.id);
if (index > -1) {
@@ -195,13 +225,48 @@ export default {
},
onBeforeClickSchedule({type, schedule}) {
+ let data = this.scheduleList.find(({id}) => id === schedule.id);
+ if (!data) {
+ return;
+ }
switch (type) {
case "check":
+ this.$set(data, 'complete_at', $A.formatDate("Y-m-d H:i:s"))
+ this.$store.dispatch("taskUpdate", {
+ task_id: data.id,
+ complete_at: $A.formatDate("Y-m-d H:i:s"),
+ }).then(({msg}) => {
+ $A.messageSuccess(msg);
+ }).catch(({msg}) => {
+ this.$set(data, 'complete_at', null)
+ $A.modalError(msg);
+ });
break;
+
case "edit":
this.$store.dispatch("openTask", schedule.id)
break;
+
case "delete":
+ $A.modalConfirm({
+ title: '删除任务',
+ content: '你确定要删除任务【' + data.title + '】吗?',
+ loading: true,
+ onOk: () => {
+ this.scheduleList = this.scheduleList.filter(({id}) => id !== data.id);
+ this.$store.dispatch("taskArchivedOrRemove", {
+ task_id: data.id,
+ type: 'delete',
+ }).then(({msg}) => {
+ $A.messageSuccess(msg);
+ this.$Modal.remove();
+ }).catch(({msg}) => {
+ $A.modalError(msg, 301);
+ this.$Modal.remove();
+ this.setRenderRange();
+ });
+ }
+ });
break;
}
},
diff --git a/resources/assets/js/pages/manage/components/Calendar.vue b/resources/assets/js/pages/manage/components/Calendar.vue
index 692c8aa5..106eda12 100644
--- a/resources/assets/js/pages/manage/components/Calendar.vue
+++ b/resources/assets/js/pages/manage/components/Calendar.vue
@@ -48,22 +48,13 @@ export default {
theme: {
type: Object,
default() {
- return {
- 'common.border': '1px solid #f4f5f5',
- 'month.dayname.fontSize': '14px',
- 'month.dayname.borderLeft': '1px solid #f4f5f5',
- 'month.dayname.height': '50px',
- };
+ return {};
}
},
template: {
type: Object,
default() {
- return {
- titlePlaceholder: function () {
- return "Task Description"
- }
- };
+ return {};
}
},
week: {
@@ -209,6 +200,10 @@ export default {
getInstance() {
return this.calendarInstance;
},
+ resetRender() {
+ this.calendarInstance.clear();
+ this.reflectSchedules();
+ },
invoke(methodName, ...args) {
let result;
diff --git a/resources/assets/sass/pages/page-calendar.scss b/resources/assets/sass/pages/page-calendar.scss
index 66e03aaf..84714635 100644
--- a/resources/assets/sass/pages/page-calendar.scss
+++ b/resources/assets/sass/pages/page-calendar.scss
@@ -57,6 +57,19 @@
z-index: 1;
}
.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;
@@ -68,6 +81,9 @@
.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,
@@ -79,13 +95,30 @@
.tui-full-calendar-popup-task {
.priority {
color: #ffffff;
- padding: 2px 3px;
+ 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-datepicker {
.tui-calendar {