diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 44f126793..c33c63508 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -2762,8 +2762,8 @@ class ProjectController extends AbstractController if (empty($name)) { return Base::retError('请输入模板名称'); } - if (empty($title)) { - return Base::retError('请输入任务标题'); + if (empty($title) && empty($content)) { + return Base::retError('请输入任务标题或内容'); } $data = [ 'project_id' => $projectId, @@ -2823,7 +2823,7 @@ class ProjectController extends AbstractController } /** - * @api {get} api/project/task/template_default 50. 设置任务模板为默认 + * @api {get} api/project/task/template_default 50. 设置(取消)任务模板为默认 * * @apiDescription 需要token身份(限:项目负责人) * @apiVersion 1.0.0 @@ -2854,9 +2854,12 @@ class ProjectController extends AbstractController if (!$template) { return Base::retError('模板不存在或已被删除'); } - // 先将所有模板设为非默认 + if ($template->is_default) { + $template->update(['is_default' => false]); + return Base::retSuccess('取消成功'); + } + // ProjectTaskTemplate::where('project_id', $projectId)->update(['is_default' => false]); - // 设置当前模板为默认 $template->update(['is_default' => true]); return Base::retSuccess('设置成功'); } diff --git a/resources/assets/js/pages/manage/components/ProjectTaskTemplate.vue b/resources/assets/js/pages/manage/components/ProjectTaskTemplate.vue index 1d978a49d..e4491b029 100644 --- a/resources/assets/js/pages/manage/components/ProjectTaskTemplate.vue +++ b/resources/assets/js/pages/manage/components/ProjectTaskTemplate.vue @@ -21,8 +21,8 @@ {{$L('默认')}}
-
{{ item.title }}
-
+
{{ item.title }}
+
@@ -96,9 +96,6 @@ export default { formRules: { name: [ { required: true, message: this.$L('请输入模板名称'), trigger: 'blur' } - ], - title: [ - { required: true, message: this.$L('请输入任务标题'), trigger: 'blur' } ] } } @@ -135,7 +132,7 @@ export default { }) this.templates = data || [] } catch ({msg}) { - this.$Message.error(msg || this.$L('加载模板失败')) + $A.messageError(msg || '加载模板失败') } this.loading = false }, @@ -155,7 +152,7 @@ export default { // 保存模板 async handleSave() { if (!this.editingTemplate.name) { - this.$Message.warning(this.$L('请输入模板名称')) + $A.messageWarning('请输入模板名称') return } @@ -166,19 +163,19 @@ export default { method: 'post', spinner: 300 }) - this.$Message.success(this.$L('保存成功')) + $A.messageSuccess('保存成功') this.showEditModal = false this.loadTemplates() } catch ({msg}) { - this.$Message.error(msg || this.$L('保存失败')) + $A.messageError(msg || '保存失败') } }, // 删除模板 async handleDelete(template) { - this.$Modal.confirm({ - title: this.$L('确认删除'), - content: this.$L('确定要删除该模板吗?'), + $A.modalConfirm({ + title: '确认删除', + content: '确定要删除该模板吗?', onOk: async () => { try { await this.$store.dispatch("call", { @@ -188,10 +185,10 @@ export default { }, spinner: 300 }) - this.$Message.success(this.$L('删除成功')) + $A.messageSuccess('删除成功') this.loadTemplates() } catch ({msg}) { - this.$Message.error(msg || this.$L('删除失败')) + $A.messageError(msg || '删除失败') } } }) @@ -199,10 +196,6 @@ export default { // 设置默认模板 async handleSetDefault(template) { - if (template.is_default) { - return - } - try { await this.$store.dispatch("call", { url: 'project/task/template_default', @@ -212,10 +205,10 @@ export default { }, spinner: 300 }) - this.$Message.success(this.$L('设置成功')) + $A.messageSuccess('设置成功') this.loadTemplates() } catch ({msg}) { - this.$Message.error(msg || this.$L('设置失败')) + $A.messageError(msg || '设置失败') } } } diff --git a/resources/assets/js/pages/manage/components/TaskAdd.vue b/resources/assets/js/pages/manage/components/TaskAdd.vue index 91bf3b7bf..56ec4aa39 100644 --- a/resources/assets/js/pages/manage/components/TaskAdd.vue +++ b/resources/assets/js/pages/manage/components/TaskAdd.vue @@ -13,7 +13,11 @@ filterable/>
@@ -268,7 +272,10 @@ export default { beforeClose: [], - addContinue: false + addContinue: false, + + templateActiveID: 0, + templateCompareData: {name: '', content: ''}, } }, @@ -279,7 +286,10 @@ export default { async mounted() { this.initCascaderData(); await this.initProjectData(); - this.$nextTick(() => this.$refs.input.focus()) + this.$nextTick(() => { + this.$refs.input.focus(); + this.templateCompareData = {name: this.addData.name, content: this.addData.content}; + }) this.isMounted = true }, @@ -325,12 +335,7 @@ export default { 'addData.project_id'(projectId) { if (projectId > 0) { $A.IDBSave("cacheAddTaskProjectId", projectId); - this.$store.dispatch("updateTaskTemplates", projectId).then(() => { - const defaultTemplate = this.taskTemplateList.find(({is_default}) => is_default); - if (defaultTemplate) { - this.setTaskTemplate(defaultTemplate); - } - }) + this.$store.dispatch("updateTaskTemplates", projectId).then(this.setTaskDefaultTemplate) } }, 'addData.column_id'(columnId) { @@ -555,11 +560,7 @@ export default { this.$store.dispatch("taskAdd", this.addData).then(({msg}) => { $A.messageSuccess(msg); if (continued === true) { - this.addData = Object.assign({}, this.addData, { - name: "", - content: "", - subtasks: [], - }); + this.addData = Object.assign({}, this.addData, this.templateCompareData, {subtasks: []}); this.$refs.input.focus(); } else { this.addData = $A.cloneJSON(this.addDefault); @@ -626,11 +627,33 @@ export default { } }, - setTaskTemplate(item) { - this.addData.name = item.title - this.addData.content = nostyle(item.content, { - sanitize: false, - }); + setTaskTemplate(item, force = false) { + if (force) { + this.templateActiveID = item.id; + this.addData.name = item.name; + this.addData.content = nostyle(item.content, {sanitize: false}); + this.$nextTick(() => { + this.$refs.input.focus(); + this.templateCompareData = {name: this.addData.name, content: this.addData.content}; + }); + return; + } + if ((this.addData.name !== this.templateCompareData.name && this.addData.name !== '') || + (this.addData.content !== this.templateCompareData.content && this.addData.content !== '')) { + $A.modalConfirm({ + content: '当前已有修改的内容,是否要覆盖?', + onOk: () => this.setTaskTemplate(item, true) + }); + } else { + this.setTaskTemplate(item, true); + } + }, + + setTaskDefaultTemplate() { + const defaultTemplate = this.taskTemplateList.find(({is_default}) => is_default); + if (defaultTemplate) { + this.setTaskTemplate(defaultTemplate); + } } } } diff --git a/resources/assets/sass/pages/components/project-task-template.scss b/resources/assets/sass/pages/components/project-task-template.scss index e2c6937e7..a0514b119 100644 --- a/resources/assets/sass/pages/components/project-task-template.scss +++ b/resources/assets/sass/pages/components/project-task-template.scss @@ -53,6 +53,7 @@ .template-title { font-weight: 500; margin-bottom: 8px; + height: 22px; display: flex; align-items: center; color: $primary-title-color;