Ver código fonte

修复前端error报错,修改路由格式

liangzhicheng 4 anos atrás
pai
commit
d58b631987

+ 19 - 3
.eslintrc.js

@@ -65,15 +65,31 @@ module.exports = {
     "vue/v-on-event-hyphenation": ["warn", "always", {
       "autofix": true,
       "ignore": []
-    }]
+    }],
+
+    "vue/no-unused-components": "off",
+    "no-unused-vars": "off",
+
+    'vue/no-parsing-error': [
+      2, 
+      { 
+        'x-invalid-end-tag': false 
+      }
+    ],
+
+    'camelcase': [0,{
+      'properties': 'always'
+    }],
 
   },
-  "globals":{
+  "globals": {
     "document": true,
     "localStorage": true,
     "window": true,
     "BootstrapDialog": true,
     "moment": true,
-    "gantt": true
+    "gantt": true,
+    "__webpack_public_path__": true,
+    "Notify": true
   }
 }

+ 3 - 1
config/index.js

@@ -41,9 +41,11 @@ module.exports = {
     // https://vue-loader.vuejs.org/en/options.html#cachebusting
     cacheBusting: true,
 
-    cssSourceMap: true
+    cssSourceMap: true,
+    
   },
 
+  
   build: {
     // Template for index.html
     index: path.resolve(__dirname, '../dist/index.html'),

Diferenças do arquivo suprimidas por serem muito extensas
+ 1 - 7525
package-lock.json


+ 5 - 4
src/common/Common.js

@@ -114,6 +114,7 @@ module.exports = {
 
   // 获取微信测试api地址
   getWeixinApiURL: function (apiName) {
+    var that = this;
     return that.getHostPageBaseURL() + '/api/' + apiName;
   },
 
@@ -244,7 +245,7 @@ module.exports = {
     } else {
       var hostPageBaseURL = localStorage.getItem('hostPageBaseURL');
       if (hostPageBaseURL == undefined) {
-        var href = window.location.href;
+        let href = window.location.href;
         href = href.substring(0, href.indexOf('#') + 2);
         localStorage.setItem('href', href);
       }
@@ -310,7 +311,7 @@ module.exports = {
 
   // 清空 Cookie
   clearCookie: function () {
-    var keys = document.cookie.match(/[^ =;]+(?=\=)/g);
+    var keys = document.cookie.match(/[^ =;]+(?==)/g);
     if (keys) {
       for (var i = keys.length; i--;) {
         // 清除当前域名路径的有限日期
@@ -345,7 +346,7 @@ module.exports = {
     window.localStorage.clear();
 
     //还原参数信息
-    for (var i = 0; i < len; i++) {
+    for (let i = 0; i < len; i++) {
       localStorage.setItem(reserveParams[i], reserveParamValues[i]);
     }
 
@@ -441,7 +442,7 @@ module.exports = {
       tmp = url.replace(eval(tmp), replaceText);
       return tmp;
     } else {
-      if (url.match('[\?]')) {
+      if (url.match('[?]')) {
         return url + '&' + replaceText;
       } else {
         return url + '?' + replaceText;

+ 46 - 23
src/router/index.js

@@ -1,49 +1,72 @@
+const HelloWorld = () => import(/* webpackChunkName: "component-1" */ '../components/HelloWorld.vue');
+// const TraceMenu = () => import(/* webpackChunkName: "component-2" */ '../trace/TraceMenu.vue');
+const TraceList = () => import(/* webpackChunkName: "component-3" */ '../trace/TraceList.vue');
+const TraceDynamic = () => import(/* webpackChunkName: "component-4" */ '../trace/TraceDynamic.vue');
+const ProjectUserList = () => import(/* webpackChunkName: "component-5" */ '../trace/ProjectUserList.vue');
+const ProjectList = () => import(/* webpackChunkName: "component-6" */ '../trace/ProjectList.vue');
+const TraceCreate = () => import(/* webpackChunkName: "component-7" */ '../trace/TraceCreate.vue');
+const TraceUpdate = () => import(/* webpackChunkName: "component-8" */ '../trace/TraceUpdate.vue');
+const Trace = () => import(/* webpackChunkName: "component-9" */ '../trace/TraceName.vue');
+const TraceCommentCreate = () => import(/* webpackChunkName: "component-10" */ '../trace/TraceCommentCreate.vue');
+const TraceCommentEdit = () => import(/* webpackChunkName: "component-11" */ '../trace/TraceCommentEdit.vue');
+const TraceTimeLineCreate = () => import(/* webpackChunkName: "component-12" */ '../trace/TraceTimeLineCreate.vue');
+const TraceTimeLineEdit = () => import(/* webpackChunkName: "component-13" */ '../trace/TraceTimeLineEdit.vue');
+const UserNotFinishedTrace = () => import(/* webpackChunkName: "component-14" */ '../trace/UserNotFinishedTrace.vue');
+const UseFinishedTrace = () => import(/* webpackChunkName: "component-15" */ '../trace/UseFinishedTrace.vue');
+const NotFinishedProjectTraces = () => import(/* webpackChunkName: "component-16" */ '../trace/NotFinishedProjectTraces.vue');
+const FinishedProjectTraces = () => import(/* webpackChunkName: "component-17" */ '../trace/FinishedProjectTraces.vue');
+const TeamList = () => import(/* webpackChunkName: "component-18" */ '../trace/TeamList.vue');
+const TraceConfig = () => import(/* webpackChunkName: "component-19" */ '../trace/TraceConfig.vue');
+const ProjectArchive = () => import(/* webpackChunkName: "component-20" */ '../trace/ProjectArchive.vue');
+const ProjectManagement = () => import(/* webpackChunkName: "component-21" */ '../trace/ProjectManagement.vue');
+const ProjectAdminUserList = () => import(/* webpackChunkName: "component-22" */ '../trace/ProjectAdminUserList.vue');
+const CompleteProjectList = () => import(/* webpackChunkName: "component-23" */ '../trace/CompleteProjectList.vue');
 
 
 const routes = [
 
-  { path: '/trace/hello-world', component: resolve => require.ensure([], () => resolve(require('../components/HelloWorld.vue')), 'client-trace-0') },
+  { path: '/trace/hello-world', component: HelloWorld},
 
   // 追踪单主界面
-  // { path: '/trace/traceMenu/:uuid', component: resolve => require.ensure([], () => resolve(require('../trace/TraceMenu.vue')), 'client-trace-1') },
-  { path: '/trace/traceList/:traceState', component: resolve => require.ensure([], () => resolve(require('../trace/TraceList.vue')), 'client-trace-2') },
-  { path: '/trace/traceDynamic', component: resolve => require.ensure([], () => resolve(require('../trace/TraceDynamic.vue')), 'client-trace-3') },
+  // { path: '/trace/traceMenu/:uuid', component: TraceMenu},
+  { path: '/trace/traceList/:traceState', component: TraceList},
+  { path: '/trace/traceDynamic', component: TraceDynamic},
   //项目人员列表
-  { path: '/trace/projectUserList/:projectId', component: resolve => require.ensure([], () => resolve(require('../trace/ProjectUserList.vue')), 'client-trace-4') },
+  { path: '/trace/projectUserList/:projectId', component: ProjectUserList},
   // 项目追踪
-  { path: '/trace/projectList', component: resolve => require.ensure([], () => resolve(require('../trace/ProjectList.vue')), 'client-trace-5') },
+  { path: '/trace/projectList', component: ProjectList},
   // 追踪单主界面-新建追踪单
-  { path: '/trace/traceCreate/:projectId', component: resolve => require.ensure([], () => resolve(require('../trace/TraceCreate.vue')), 'client-trace-6') },
-  { path: '/trace/traceUpdate/:traceId', component: resolve => require.ensure([], () => resolve(require('../trace/TraceUpdate.vue')), 'client-trace-7') },
+  { path: '/trace/traceCreate/:projectId', component: TraceCreate},
+  { path: '/trace/traceUpdate/:traceId', component: TraceUpdate},
   // 追踪单主界面(追踪列表)-追踪单		
-  { path: '/trace/trace/:traceId', component: resolve => require.ensure([], () => resolve(require('../trace/Trace.vue')), 'client-trace-8') },
+  { path: '/trace/trace/:traceId', component: Trace},
   // 创建追踪单评论信息
-  { path: '/trace/traceCommentCreate/:traceId', component: resolve => require.ensure([], () => resolve(require('../trace/TraceCommentCreate.vue')), 'client-trace-9') },
+  { path: '/trace/traceCommentCreate/:traceId', component: TraceCommentCreate},
   // 创建追踪单评论信息
-  { path: '/trace/traceCommentEdit/:traceCommentId', component: resolve => require.ensure([], () => resolve(require('../trace/TraceCommentEdit.vue')), 'client-trace-10') },
+  { path: '/trace/traceCommentEdit/:traceCommentId', component: TraceCommentEdit},
   // 创建追踪单时间节点
-  { path: '/trace/traceTimeLineCreate/:traceId', component: resolve => require.ensure([], () => resolve(require('../trace/TraceTimeLineCreate.vue')), 'client-trace-11') },
+  { path: '/trace/traceTimeLineCreate/:traceId', component: TraceTimeLineCreate},
   // 创建追踪单时间节点
-  { path: '/trace/traceTimeLineEdit/:traceTimeLineId', component: resolve => require.ensure([], () => resolve(require('../trace/TraceTimeLineEdit.vue')), 'client-trace-12') },
+  { path: '/trace/traceTimeLineEdit/:traceTimeLineId', component: TraceTimeLineEdit},
   // 个人未完成的任务
-  { path: '/trace/userNotFinishedTrace/:userId', component: resolve => require.ensure([], () => resolve(require('../trace/UserNotFinishedTrace.vue')), 'client-trace-17') },
+  { path: '/trace/userNotFinishedTrace/:userId', component: UserNotFinishedTrace},
   // 个人已完成的任务
-  { path: '/trace/useFinishedTrace/:userId', component: resolve => require.ensure([], () => resolve(require('../trace/UseFinishedTrace.vue')), 'client-trace-18') },
+  { path: '/trace/useFinishedTrace/:userId', component: UseFinishedTrace},
   // 未完成的项目任务
-  { path: '/trace/notFinishedProjectTraces/:projectId', component: resolve => require.ensure([], () => resolve(require('../trace/NotFinishedProjectTraces.vue')), 'client-trace-19') },
+  { path: '/trace/notFinishedProjectTraces/:projectId', component: NotFinishedProjectTraces},
   // 已完成的项目任务
-  { path: '/trace/finishedProjectTraces/:projectId', component: resolve => require.ensure([], () => resolve(require('../trace/FinishedProjectTraces.vue')), 'client-trace-19') },
-  { path: '/trace/teamList', component: resolve => require.ensure([], () => resolve(require('../trace/TeamList.vue')), 'client-trace-20') },
+  { path: '/trace/finishedProjectTraces/:projectId', component: FinishedProjectTraces },
+  { path: '/trace/teamList', component: TeamList},
   //任务配置
-  { path: '/trace/traceConfig', component: resolve => require.ensure([], () => resolve(require('../trace/TraceConfig.vue')), 'client-trace-22') },
+  { path: '/trace/traceConfig', component: TraceConfig },
   // 项目归档界面
-  { path: '/trace/projectArchive/:projectId', component: resolve => require.ensure([], () => resolve(require('../trace/ProjectArchive.vue')), 'client-trace-23') },
+  { path: '/trace/projectArchive/:projectId', component: ProjectArchive},
   // 项目管理图
-  { path: '/trace/projectManagement/:projectId', component: resolve => require.ensure([], () => resolve(require('../trace/ProjectManagement.vue')), 'client-trace-24') },
+  { path: '/trace/projectManagement/:projectId', component: ProjectManagement},
   //项目管理员列表
-  { path: '/trace/projectAdminUserList/:projectId', component: resolve => require.ensure([], () => resolve(require('../trace/ProjectAdminUserList.vue')), 'client-trace-25') },
+  { path: '/trace/projectAdminUserList/:projectId', component: ProjectAdminUserList},
   // 已完成项目追踪
-  { path: '/trace/completeProjectList', component: resolve => require.ensure([], () => resolve(require('../trace/CompleteProjectList.vue')), 'client-trace-26') },
+  { path: '/trace/completeProjectList', component: CompleteProjectList},
 	
 ];
 

+ 0 - 15
src/trace/NotFinishedProjectTraces.vue

@@ -397,21 +397,6 @@ export default {
       });
     },
 
-    /**
-			 * 项目归档
-			 * @param {Object} projectId
-			 * @author GuoZhiBo 20190926
-			 */
-    projectManagement: function(projectId) {
-      var _self = this;
-      this.$router.push({
-        path: '/trace/projectManagement/' + projectId,
-        query: {
-          projectName: _self.projectName,
-        },
-      });
-    },
-
   },
 };
 </script>

+ 1 - 1
src/trace/ProjectAdminUserList.vue

@@ -193,7 +193,7 @@ export default {
               }
             }
           }
-          for (var index = 0; index < data.length; index++) {
+          for (let index = 0; index < data.length; index++) {
             _self.$set(_self.projectItemUsers, index, data[index]);
           }
         },

+ 248 - 212
src/trace/ProjectArchive.vue

@@ -114,7 +114,7 @@
                 </thead>
                 <tbody>
                   <tr
-                    v-for="item,index in projectArchiveDtos"
+                    v-for="item in projectArchiveDtos" :key="item"
                     :class="projectArchivesId == item.id ?'success':''"
                     @click="trClick(item)"
                     @dblclick="openFolder2()"
@@ -326,10 +326,10 @@
       </Modal>
 			
       <!--
-            	作者:GuoZhiBo
-            	时间:2019-10-14
-            	描述:归档项新增和修改
-            -->
+        作者:GuoZhiBo
+        时间:2019-10-14
+        描述:归档项新增和修改
+      -->
       <Modal
         ref="modal2"
         :small="true"
@@ -347,7 +347,7 @@
             v-model="projectArchivesDto.name"
             style="width: 100%;"
             class="form-control"
-          /></input>
+          />
         </div>
         <div class="form-group">
           <label for="exampleInputEmail2">计划归档日期</label>
@@ -364,7 +364,7 @@
             style="width: 100%;"
             class="form-control"
             readonly="readonly"
-          /></input>
+          />
           <!--<span @click="projectArchivesDto.fileName = ''">删除</span>-->
         </div>
         <div class="form-group">
@@ -374,7 +374,7 @@
             style="width: 100%;"
             class="form-control"
             readonly="readonly"
-          /></input>
+          />
         </div>
         <div>
           <input
@@ -435,7 +435,7 @@ export default {
       projectArchiveFolderDtos: [], //文件夹dtos
       folderName: undefined, //文件夹名称
       tree: undefined,
-      projectArchiveDtos: [],//归档项Dto
+      projectArchiveDtos: [], //归档项Dto
       projectArchivesDto: {
         id: undefined,
         name: undefined,
@@ -453,20 +453,20 @@ export default {
       },
       className: 'com.leanwo.prodog.model.project.ProjectArchives',
       type: undefined,
-      folderId: undefined,//选中文件夹Id
-      projectArchivesId: undefined,//选中归档项Id
-      param: undefined,//查询参数
-      projectArchiveAuditDtos: [],//历史归档项记录
-      parentProjectArchiveFolderId: undefined,//上级文件夹Id
+      folderId: undefined, //选中文件夹Id
+      projectArchivesId: undefined, //选中归档项Id
+      param: undefined, //查询参数
+      projectArchiveAuditDtos: [], //历史归档项记录
+      parentProjectArchiveFolderId: undefined, //上级文件夹Id
       data: undefined,
     };
   },
   watch: {
-    'folderId': function (currentValue, oldValue) {
+    folderId: function (currentValue, oldValue) {
       this.cleanData();
       this.queryByProjectArchiveDtos();
     },
-    'projectArchivesId': function (currentValue, oldValue) {
+    projectArchivesId: function (currentValue, oldValue) {
       this.queryByProjectArchiveDtoAudit();
     },
   },
@@ -475,22 +475,20 @@ export default {
     var _self = this;
     _self.projectId = this.$route.params.projectId;
     _self.projectName = _self.$route.query.projectName + '-项目归档';
-    if(_self.projectName.length > 7){
-        	_self.projectName = _self.projectName.substr(0,7)+'...';
+    if (_self.projectName.length > 7) {
+      _self.projectName = _self.projectName.substr(0, 7) + '...';
     }
     setTimeout(function () {
       _self.initData();
     }, 300);
   },
 
-  unmounted: function () {
-
-  },
+  unmounted: function () {},
   methods: {
     /**
-         * 清空文件
-         * @param {Object} item
-         */
+     * 清空文件
+     * @param {Object} item
+     */
     cleanFile: function (item) {
       var _self = this;
       _self.$refs.modal2.show = false;
@@ -519,28 +517,32 @@ export default {
       }
     },
     /**
-         * 下载文件
-         * @param  {String} fileName 文件名
-         * @return {void}          
-         */
+     * 下载文件
+     * @param  {String} fileName 文件名
+     * @return {void}
+     */
     download: function (fileName) {
       var _self = this;
-      var downloadUrl = Common.getResourceUrl('file', _self.className, fileName);
+      var downloadUrl = Common.getResourceUrl(
+        'file',
+        _self.className,
+        fileName,
+      );
       window.open(downloadUrl);
     },
     /**
-         * 表格点击事件
-         * @param {Object} item
-         */
+     * 表格点击事件
+     * @param {Object} item
+     */
     trClick: function (item) {
       var _self = this;
       _self.projectArchivesId = item.id;
       _self.projectArchivesDto = item;
     },
     /**
-         * 点击上传按钮事件
-         * @return {[type]} [description]
-         */
+     * 点击上传按钮事件
+     * @return {[type]} [description]
+     */
     clickButton: function () {
       $(this.$refs.fileInput).click();
     },
@@ -549,29 +551,29 @@ export default {
       this.projectArchivesDto.planArchiveDate = value;
     },
     /**
-         * 新建文件夹取消
-         */
+     * 新建文件夹取消
+     */
     cancel: function () {
       var _self = this;
       _self.$refs.modal1.show = false;
     },
     /**
-         * 归档项取消
-         */
+     * 归档项取消
+     */
     cancel1: function () {
       var _self = this;
       _self.$refs.modal2.show = false;
     },
     /**
-         * 修改文件夹取消
-         */
+     * 修改文件夹取消
+     */
     cancel2: function () {
       var _self = this;
       _self.$refs.modal4.show = false;
     },
     /**
-         * 打开新建文件夹弹窗
-         */
+     * 打开新建文件夹弹窗
+     */
     openFolder: function () {
       var _self = this;
       _self.type = '新建';
@@ -579,8 +581,8 @@ export default {
       _self.folderName = undefined;
     },
     /**
-         * 打开新建归档项弹窗
-         */
+     * 打开新建归档项弹窗
+     */
     openFolder1: function () {
       var _self = this;
       _self.type = '新建';
@@ -592,8 +594,8 @@ export default {
       _self.cleanProjectArchivesDto();
     },
     /**
-         * 打开编辑归档项弹窗2
-         */
+     * 打开编辑归档项弹窗2
+     */
     openFolder2: function () {
       var _self = this;
       _self.type = '新建';
@@ -604,8 +606,8 @@ export default {
       _self.$refs.modal2.show = true;
     },
     /**
-         * 打开修改文件夹弹窗
-         */
+     * 打开修改文件夹弹窗
+     */
     openFolder4: function () {
       var _self = this;
       _self.type = '修改';
@@ -617,18 +619,20 @@ export default {
       _self.loadProjectFolder();
     },
     /**
-         * 返回上一页
-         */
+     * 返回上一页
+     */
     back: function () {
       history.back();
     },
     /**
-         * 初始化文件夹数据
-         */
+     * 初始化文件夹数据
+     */
     initData: function () {
       var _self = this;
       $.ajax({
-        url: Common.getApiURL('ProjectArchiveFolderResource/queryByProjectArchiveFolderDtos'),
+        url: Common.getApiURL(
+          'ProjectArchiveFolderResource/queryByProjectArchiveFolderDtos',
+        ),
         type: 'get',
         dataType: 'json',
         contentType: 'application/json',
@@ -647,7 +651,8 @@ export default {
             onNodeSelected: function (event, data) {
               _self.folderId = data.id;
               _self.folderName = data.name;
-              _self.parentProjectArchiveFolderId = data.parentProjectArchiveFolderId;
+              _self.parentProjectArchiveFolderId =
+                data.parentProjectArchiveFolderId;
             },
             onNodeUnselected: function (event, data) {
               _self.folderId = undefined;
@@ -661,8 +666,8 @@ export default {
       });
     },
     /**
-         * 保存文件夹
-         */
+     * 保存文件夹
+     */
     saveProjectArchiveFolder: function () {
       var _self = this;
       _self.$refs.modal1.show = false;
@@ -672,7 +677,9 @@ export default {
         parentProjectArchiveFolderId: _self.folderId,
       };
       $.ajax({
-        url: Common.getApiURL('ProjectArchiveFolderResource/saveProjectArchiveFolder'),
+        url: Common.getApiURL(
+          'ProjectArchiveFolderResource/saveProjectArchiveFolder',
+        ),
         type: 'post',
         contentType: 'application/json',
         data: JSON.stringify(projectItemFolder),
@@ -690,8 +697,8 @@ export default {
       });
     },
     /**
-         * 修改文件夹
-         */
+     * 修改文件夹
+     */
     updateProjectArchiveFolder: function () {
       var _self = this;
       _self.$refs.modal4.show = false;
@@ -702,7 +709,9 @@ export default {
         parentProjectArchiveFolderId: _self.parentProjectArchiveFolderId,
       };
       $.ajax({
-        url: Common.getApiURL('ProjectArchiveFolderResource/saveProjectArchiveFolder'),
+        url: Common.getApiURL(
+          'ProjectArchiveFolderResource/saveProjectArchiveFolder',
+        ),
         type: 'post',
         contentType: 'application/json',
         data: JSON.stringify(projectItemFolder),
@@ -723,7 +732,9 @@ export default {
     queryByProjectArchiveDtos: function () {
       var _self = this;
       $.ajax({
-        url: Common.getApiURL('ProjectArchivesResource/queryByProjectArchiveDtos'),
+        url: Common.getApiURL(
+          'ProjectArchivesResource/queryByProjectArchiveDtos',
+        ),
         type: 'get',
         dataType: 'json',
         contentType: 'application/json',
@@ -742,8 +753,8 @@ export default {
       });
     },
     /**
-         * 保存归档项
-         */
+     * 保存归档项
+     */
     saveProjectArchives: function () {
       var _self = this;
       _self.$refs.modal2.show = false;
@@ -768,21 +779,20 @@ export default {
       });
     },
     /**
-         * 选择文件发生改变
-         * @param  {[type]} e [description]
-         * @return {[type]}   [description]
-         */
+     * 选择文件发生改变
+     * @param  {[type]} e [description]
+     * @return {[type]}   [description]
+     */
     onFileChanges: function (e) {
       var files = e.target.files || e.dataTransfer.files;
-      if (!files.length)
-        return;
+      if (!files.length) return;
       this.uploadFile(files[0]);
     },
 
     /**
-         * 上传文件
-         * @param  {File} selectedFile 选择的文件
-         */
+     * 上传文件
+     * @param  {File} selectedFile 选择的文件
+     */
     uploadFile: function (selectedFile) {
       var _self = this;
       if (selectedFile == undefined) {
@@ -803,36 +813,49 @@ export default {
           contentType: false,
           processData: false,
           success: function (data) {
-                    	_self.$refs.loading.hide();
+            _self.$refs.loading.hide();
             if (data != 'error') {
               Notify.success('提示', '文件上传成功!', 1000);
               var fileName = data.substring(data.indexOf(':') + 1);
               _self.$set(_self.projectArchivesDto, 'fileName', fileName);
-              _self.$set(_self.projectArchivesDto, 'fileSize', Math.round(selectedFile.size / 1024 * 100) / 100);
-              if(_self.projectArchivesDto.name == null || _self.projectArchivesDto.name == ''){
+              _self.$set(
+                _self.projectArchivesDto,
+                'fileSize',
+                Math.round((selectedFile.size / 1024) * 100) / 100,
+              );
+              if (
+                _self.projectArchivesDto.name == null ||
+                _self.projectArchivesDto.name == ''
+              ) {
                 _self.$set(_self.projectArchivesDto, 'name', fileName);
               }
-              if(_self.projectArchivesDto.planArchiveDate == null || _self.projectArchivesDto.planArchiveDate == ''){
-                _self.$set(_self.projectArchivesDto, 'planArchiveDate', moment().format('YYYY-MM-DD HH:mm:ss'));
+              if (
+                _self.projectArchivesDto.planArchiveDate == null ||
+                _self.projectArchivesDto.planArchiveDate == ''
+              ) {
+                _self.$set(
+                  _self.projectArchivesDto,
+                  'planArchiveDate',
+                  moment().format('YYYY-MM-DD HH:mm:ss'),
+                );
               }
 
-
               _self.saveProjectArchives();
             }
           },
           error: function (XMLHttpRequest, textStatus, errorThrown) {
-                    	_self.$refs.loading.hide();
+            _self.$refs.loading.hide();
             Common.processException(XMLHttpRequest, textStatus, errorThrown);
           },
         });
       } else {
-            	_self.$refs.loading.hide();
+        _self.$refs.loading.hide();
         Notify.error('提示', '上传的文件为空!');
       }
     },
     /**
-         * 清空数据
-         */
+     * 清空数据
+     */
     cleanData: function () {
       var _self = this;
       _self.cleanProjectArchivesDto();
@@ -840,8 +863,8 @@ export default {
       _self.projectArchivesId = undefined;
     },
     /**
-         * 清空归档项Dto
-         */
+     * 清空归档项Dto
+     */
     cleanProjectArchivesDto: function () {
       var _self = this;
       _self.projectArchivesDto = {
@@ -861,9 +884,9 @@ export default {
       };
     },
     /**
-         * 打开删除文件夹提示
-         * @author GuoZhiBo 20190929
-         */
+     * 打开删除文件夹提示
+     * @author GuoZhiBo 20190929
+     */
     openDeleteFolder: function () {
       var _self = this;
       if (_self.folderId == undefined) {
@@ -874,17 +897,17 @@ export default {
       _self.parentProjectArchiveFolderId = undefined;
     },
     /**
-         * 关闭删除文件夹提示
-         * @author GuoZhiBo 20190929
-         */
+     * 关闭删除文件夹提示
+     * @author GuoZhiBo 20190929
+     */
     cancelFolder: function () {
       var _self = this;
       _self.$refs.modal5.show = false;
     },
     /**
-         * 打开删除归档项提示
-         * @author GuoZhiBo 20190929
-         */
+     * 打开删除归档项提示
+     * @author GuoZhiBo 20190929
+     */
     openDeleteProject: function () {
       var _self = this;
       if (_self.projectArchivesId == undefined) {
@@ -894,22 +917,24 @@ export default {
       _self.$refs.modal6.show = true;
     },
     /**
-         * 关闭删除文件提示
-         * @author GuoZhiBo 20190929
-         */
+     * 关闭删除文件提示
+     * @author GuoZhiBo 20190929
+     */
     cancelProject: function () {
       var _self = this;
       _self.$refs.modal6.show = false;
     },
     /**
-         * 删除文件夹
-         * @author GuoZhiBo 20190927
-         */
+     * 删除文件夹
+     * @author GuoZhiBo 20190927
+     */
     deleteFolder: function () {
       var _self = this;
       _self.$refs.modal5.show = false;
       $.ajax({
-        url: Common.getApiURL('ProjectArchiveFolderResource/deleteProjectArchiveFolder'),
+        url: Common.getApiURL(
+          'ProjectArchiveFolderResource/deleteProjectArchiveFolder',
+        ),
         type: 'get',
         dataType: 'json',
         contentType: 'application/json',
@@ -929,9 +954,9 @@ export default {
       });
     },
     /**
-         * 删除归档项
-         * @author GuoZhiBo 20190927
-         */
+     * 删除归档项
+     * @author GuoZhiBo 20190927
+     */
     deleteProjectArchives: function () {
       var _self = this;
       $.ajax({
@@ -956,12 +981,14 @@ export default {
       });
     },
     /**
-         * 根据选中的文件夹id和param查询对应的归档项
-         */
+     * 根据选中的文件夹id和param查询对应的归档项
+     */
     queryByProjectArchiveDtosByParam: function () {
       var _self = this;
       $.ajax({
-        url: Common.getApiURL('ProjectArchivesResource/queryByProjectArchiveDtosByParam'),
+        url: Common.getApiURL(
+          'ProjectArchivesResource/queryByProjectArchiveDtosByParam',
+        ),
         type: 'get',
         dataType: 'json',
         contentType: 'application/json',
@@ -983,12 +1010,14 @@ export default {
       });
     },
     /**
-         * 根据选中的文件夹id和param查询对应的归档项
-         */
+     * 根据选中的文件夹id和param查询对应的归档项
+     */
     queryByProjectArchiveDtoAudit: function () {
       var _self = this;
       $.ajax({
-        url: Common.getApiURL('ProjectArchivesResource/queryByProjectArchiveDtoAudit'),
+        url: Common.getApiURL(
+          'ProjectArchivesResource/queryByProjectArchiveDtoAudit',
+        ),
         type: 'get',
         dataType: 'json',
         contentType: 'application/json',
@@ -1007,13 +1036,15 @@ export default {
       });
     },
     /**
-         * 项目任务自动生成文件夹
-         * @author GuoZhiBo 20190927
-         */
+     * 项目任务自动生成文件夹
+     * @author GuoZhiBo 20190927
+     */
     updateProjectArchiveFolderByTaskId: function () {
       var _self = this;
       $.ajax({
-        url: Common.getApiURL('ProjectArchiveFolderResource/updateProjectArchiveFolderByTaskId'),
+        url: Common.getApiURL(
+          'ProjectArchiveFolderResource/updateProjectArchiveFolderByTaskId',
+        ),
         type: 'get',
         dataType: 'json',
         contentType: 'application/json',
@@ -1033,61 +1064,67 @@ export default {
       });
     },
     /**
-         * 加载当前项目全部文件夹
-         */
+     * 加载当前项目全部文件夹
+     */
     loadProjectFolder: function () {
       var _self = this;
-      var $c_HospitalCode = $('#projectFolder').select2({
-        // 请求搜索框数据
-        //data: _self.data,
-        placeholder: '父文件夹',
-        minimumInputLength: 0,
-        quietMillis: 250,
-        allowClear: true,
-        language: 'zh-CN',
-        width: '100%',
-        // 请求搜索框数据
-        ajax: {
-          url: function (params) {
-            return Common.getApiURL('ProjectArchiveFolderResource/queryProjectArchiveFolderDto');
-          },
-          dataType: 'json',
-          type: 'get',
-          delay: 250,
+      var $c_HospitalCode = $('#projectFolder')
+        .select2({
+          // 请求搜索框数据
+          //data: _self.data,
+          placeholder: '父文件夹',
           minimumInputLength: 0,
-          transport: function (params, success, failure) {
-            params.beforeSend = Common.addTokenToRequest;
-            params.error = Common.processException;
-            var $request = $.ajax(params);
-            $request.then(success);
-            $request.fail(failure);
-            return $request;
-          },
-          data: function (params) {
-            return {
-              'name': params.term,
-              'projectId': _self.projectId,
-              'folderId': _self.folderId,
-            };
-          },
-          processResults: function (data, params) {
-            var more = (params * 10) <= data.length;
-            for (var i = 0; i < data.length; i++) {
-              data[i].text = data[i].name;
-              data[i].id = data[i].id;
-            }
-            return { results: data, more: more };
+          quietMillis: 250,
+          allowClear: true,
+          language: 'zh-CN',
+          width: '100%',
+          // 请求搜索框数据
+          ajax: {
+            url: function (params) {
+              return Common.getApiURL(
+                'ProjectArchiveFolderResource/queryProjectArchiveFolderDto',
+              );
+            },
+            dataType: 'json',
+            type: 'get',
+            delay: 250,
+            minimumInputLength: 0,
+            transport: function (params, success, failure) {
+              params.beforeSend = Common.addTokenToRequest;
+              params.error = Common.processException;
+              var $request = $.ajax(params);
+              $request.then(success);
+              $request.fail(failure);
+              return $request;
+            },
+            data: function (params) {
+              return {
+                name: params.term,
+                projectId: _self.projectId,
+                folderId: _self.folderId,
+              };
+            },
+            processResults: function (data, params) {
+              var more = params * 10 <= data.length;
+              for (var i = 0; i < data.length; i++) {
+                data[i].text = data[i].name;
+                // data[i].id = data[i].id;
+              }
+              return { results: data, more: more };
+            },
           },
-        },
-      }).on('change', function () {
-        _self.parentProjectArchiveFolderId = $(this).val();
-      });
+        })
+        .on('change', function () {
+          _self.parentProjectArchiveFolderId = $(this).val();
+        });
       $.ajax({
-        url: Common.getApiURL('ProjectArchiveFolderResource/queryProjectArchiveFolderDto'),
+        url: Common.getApiURL(
+          'ProjectArchiveFolderResource/queryProjectArchiveFolderDto',
+        ),
         data: {
-          'name': undefined,
-          'projectId': _self.projectId,
-          'folderId': _self.folderId,
+          name: undefined,
+          projectId: _self.projectId,
+          folderId: _self.folderId,
         },
         dataType: 'json',
         beforeSend: function (request) {
@@ -1104,95 +1141,94 @@ export default {
               $('#projectFolder').empty();
             }
           }
-          $c_HospitalCode.trigger('change');//使用这个方法显示到select2上.
+          $c_HospitalCode.trigger('change'); //使用这个方法显示到select2上.
         },
       });
     },
   },
-
 };
 </script>
 
 <style scoped>
 .flex-container {
-    display: flex;
-    /* 垂直*/
-    flex-direction: column;
-    width: 100%;
-    /*视口被均分为100单位的vh 占据整个窗口,扣掉顶部topNav的距离后,计算得到container的高度*/
-    height: calc(100vh - 80px);
+  display: flex;
+  /* 垂直*/
+  flex-direction: column;
+  width: 100%;
+  /*视口被均分为100单位的vh 占据整个窗口,扣掉顶部topNav的距离后,计算得到container的高度*/
+  height: calc(100vh - 80px);
 }
 
 .flex-content {
-    display: flex;
-    flex: 1;
-    height: calc(100vh - 80px);
+  display: flex;
+  flex: 1;
+  height: calc(100vh - 80px);
 }
 
 .flex-aside-left {
-    flex: 0 0 300px;
-    /* margin-right: 10px; */
-    border: 1px solid #e4e4e4;
-    background-color: white;
-    padding: 10px;
-    height: calc(100vh - 80px);
-    overflow-y: auto;
+  flex: 0 0 300px;
+  /* margin-right: 10px; */
+  border: 1px solid #e4e4e4;
+  background-color: white;
+  padding: 10px;
+  height: calc(100vh - 80px);
+  overflow-y: auto;
 }
 
 .flex-aside-right {
-    flex: 0 0 300px;
-    /* margin-left: 10px; */
-    border: 1px solid #e4e4e4;
-    background-color: white;
-    padding: 10px;
-    height: calc(100vh - 80px);
-    overflow-y: auto;
+  flex: 0 0 300px;
+  /* margin-left: 10px; */
+  border: 1px solid #e4e4e4;
+  background-color: white;
+  padding: 10px;
+  height: calc(100vh - 80px);
+  overflow-y: auto;
 }
 
 .flex-main {
-    overflow: auto;
-    flex: 1;
-    border-top: 1px solid #e4e4e4;
-    border-bottom: 1px solid #e4e4e4;
-    overflow-y: auto;
+  overflow: auto;
+  flex: 1;
+  border-top: 1px solid #e4e4e4;
+  border-bottom: 1px solid #e4e4e4;
+  overflow-y: auto;
 }
 
 .flex-main-serch {
-    padding: 10px;
-    background-color: white;
-    border-bottom: 1px solid #e4e4e4;
+  padding: 10px;
+  background-color: white;
+  border-bottom: 1px solid #e4e4e4;
 }
 
 tr:hover {
-    background-color: #eee;
+  background-color: #eee;
 }
 
 .file-input {
-    width: 0.1px;
-    height: 0.1px;
-    opacity: 0;
-    overflow: hidden;
-    position: absolute;
-    z-index: -1;
+  width: 0.1px;
+  height: 0.1px;
+  opacity: 0;
+  overflow: hidden;
+  position: absolute;
+  z-index: -1;
 }
 
 .m-row {
-    margin-top: 10px;
+  margin-top: 10px;
 }
 
 .flex-box {
-    display: flex;
-    flex-direction: row;
-    flex-wrap: nowrap;
-    justify-content: center;
-    margin: 5px 0;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  justify-content: center;
+  margin: 5px 0;
 }
 
 .flex-item {
-    flex: 1 1 auto;
+  flex: 1 1 auto;
 }
 
-.flex-item-1{
-    flex: 0 0 auto;
+.flex-item-1 {
+  flex: 0 0 auto;
 }
 </style>

+ 67 - 86
src/trace/ProjectList.vue

@@ -11,37 +11,19 @@
         <p
           v-if="projectList == null || projectList.length == 0"
           class="bg-danger"
-          style="padding: 15px; margin-top:15px;"
+          style="padding: 15px; margin-top: 15px"
         >
           您未参与任何项目~
         </p>
-        <div
-          class="row"
-          style="margin-top: 10px;"
-        >
-          <div
-            v-for="item in projectList"
-            :key="item.id"
-            class="col-md-4"
-          >
-            <div
-              class="panel panel-default"
-              @click="openLine(item)"
-            >
-              <div
-                class="panel-body"
-                style="height:70px;"
-              >
+        <div class="row" style="margin-top: 10px">
+          <div v-for="item in projectList" :key="item.id" class="col-md-4">
+            <div class="panel panel-default" @click="openLine(item)">
+              <div class="panel-body" style="height: 70px">
                 <div>
                   <div>{{ item.name }}</div>
                   <div>
                     <span>{{ item.no }}</span>
-                    <span
-                      v-if="item.admin"
-                      style="color:red"
-                    >
-                      参与中
-                    </span>
+                    <span v-if="item.admin" style="color: red"> 参与中 </span>
                   </div>
                 </div>
               </div>
@@ -51,10 +33,7 @@
 
         <div class="row">
           <div class="col-md-12">
-            <Pagination
-              :pagination="pagination"
-              :callback="getDatas"
-            />
+            <Pagination :pagination="pagination" :callback="getDatas" />
           </div>
         </div>
 
@@ -62,7 +41,7 @@
         <button
           type="button"
           class="btn btn-link"
-          style="color:green"
+          style="color: green"
           @click="isTheArchive"
         >
           已归档的项目
@@ -74,18 +53,21 @@
   </div>
 </template>
 
-<script> 
+<script>
 var Common = require('../common/Common.js');
 var Uuid = require('pc-component-v3').Uuid;
 
 import QueryWidget from '../widget/QueryWidget.vue';
 import TraceHeader from './TraceHeader.vue';
-var Pagination = require('pc-component-v3').default.VueBootstrapPagination;;
+var Pagination = require('pc-component-v3').default.VueBootstrapPagination;
 var Navbar = require('pc-component-v3').Navbar;
 
 export default {
   components: {
-    Pagination, QueryWidget, Navbar, TraceHeader,
+    Pagination,
+    QueryWidget,
+    Navbar,
+    TraceHeader,
   },
   data: function () {
     return {
@@ -106,18 +88,18 @@ export default {
       pagination: {
         total: 0,
         //per_page: Common.pageSize,    // required
-        per_page: 30,    // required
+        per_page: 30, // required
         current_page: 1, // required
-        last_page: 10,    // required
+        last_page: 10, // required
       },
       pagination2: {
         total: 0,
         //per_page: Common.pageSize,    // required
-        per_page: 30,    // required
+        per_page: 30, // required
         current_page: 1, // required
-        last_page: 10,    // required
+        last_page: 10, // required
         from: 1,
-        to: 10,           // required
+        to: 10, // required
       },
       traceState: undefined,
       traceStatus: undefined,
@@ -150,9 +132,9 @@ export default {
   },
   methods: {
     /**
-         * 查询数据
-         * @author GuoZhiBo 20180226
-         */
+     * 查询数据
+     * @author GuoZhiBo 20180226
+     */
     getDatas: function () {
       var _self = this;
 
@@ -161,11 +143,11 @@ export default {
         length: _self.pagination.per_page,
       };
       var val = _self.$refs.queryWidget.getSearchText();
-      if(val != undefined && val.length > 0){
+      if (val != undefined && val.length > 0) {
         _self.range = {
-	                start: 0,
-	                length: _self.pagination.per_page,
-	            };
+          start: 0,
+          length: _self.pagination.per_page,
+        };
       }
       var queryParam = {
         range: _self.range,
@@ -173,7 +155,9 @@ export default {
       };
 
       $.ajax({
-        url: Common.getApiURL('ProjectItemUserResource/queryProjectItemUserDto'),
+        url: Common.getApiURL(
+          'ProjectItemUserResource/queryProjectItemUserDto',
+        ),
         type: 'post',
         dataType: 'json',
         contentType: 'application/json',
@@ -184,7 +168,9 @@ export default {
         success: function (data) {
           _self.projectList = data.dataList;
           _self.pagination.total = data.totalSize;
-          _self.pagination.last_page = Math.ceil(data.totalSize / data.range.length);
+          _self.pagination.last_page = Math.ceil(
+            data.totalSize / data.range.length,
+          );
         },
         error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
@@ -193,88 +179,83 @@ export default {
     },
 
     /**
-         * 显示归档/未归档的项目
-         */
+     * 显示归档/未归档的项目
+     */
     isTheArchive: function () {
       this.$router.push('/trace/completeProjectList');
     },
     /**
-         * 打开明细
-         */
+     * 打开明细
+     */
     openLine: function (obj) {
       var uuid = Uuid.createUUID();
       var _self = this;
-      this.$router.push(
-        {
-          path: '/trace/notFinishedProjectTraces/' + obj.id,
-          query:
-                    {
-                      projectName: obj.name,
-                    },                
-        });
+      this.$router.push({
+        path: '/trace/notFinishedProjectTraces/' + obj.id,
+        query: {
+          projectName: obj.name,
+        },
+      });
     },
 
-
     open: function () {
       history.back();
     },
-
   },
 };
 </script>
 
 <style scoped>
 .mui-card {
-    margin: 0px;
-    margin-top: 1px;
+  margin: 0px;
+  margin-top: 1px;
 }
 .mui-card-footer:before,
 .mui-card-header:after {
-    background-color: #ffffff;
+  background-color: #ffffff;
 }
 .mui-card-content {
-    padding: 0px 10px;
+  padding: 0px 10px;
 }
 .mui-card-content p {
-    margin: 0px;
+  margin: 0px;
 }
 p {
-    font-size: 14px !important;
-    padding: 2px 0px;
-    color: #000000;
+  font-size: 14px !important;
+  padding: 2px 0px;
+  color: #000000;
 }
 .time {
-    /*color: #8f8f94;*/
-    font-weight: bold;
+  /*color: #8f8f94;*/
+  font-weight: bold;
 }
 .index {
-    font-size: 16px;
-    font-weight: bold;
+  font-size: 16px;
+  font-weight: bold;
 }
 .div-statis {
-    margin-bottom: 5px;
-    font-size: 0.8em;
-    text-align: center;
+  margin-bottom: 5px;
+  font-size: 0.8em;
+  text-align: center;
 }
 .divs {
-    margin-top: 2%;
-    margin-left: 39%;
+  margin-top: 2%;
+  margin-left: 39%;
 }
 .div {
-    word-wrap: break-word;
-    white-space: normal;
-    font-size: 20px;
+  word-wrap: break-word;
+  white-space: normal;
+  font-size: 20px;
 }
 .div1 {
-    padding-left: 10%;
-    color: blue;
+  padding-left: 10%;
+  color: blue;
 }
 .div2 {
-    color: cadetblue;
+  color: cadetblue;
 }
 .img {
-    height: 33px;
-    width: 38px;
+  height: 33px;
+  width: 38px;
 }
-
 </style>

+ 12 - 12
src/trace/ProjectManagement.vue

@@ -96,8 +96,8 @@ module.exports = {
             };
             events.push(event);
           }
-          for (var i = 0; i < projectTaskRelationDtos.length; i++) {
-            var event = {
+          for (let i = 0; i < projectTaskRelationDtos.length; i++) {
+            let event = {
               id: projectTaskRelationDtos[i].id,
               source: projectTaskRelationDtos[i].predecessorTaskId,
               target: projectTaskRelationDtos[i].taskId,
@@ -179,8 +179,8 @@ module.exports = {
       }
       var links = gantt.getLinks();
       var links2 = [];
-      for (var x = 0; x < links.length; x++) {
-        var event = {
+      for (let x = 0; x < links.length; x++) {
+        let event = {
           id: links[x].id,
           predecessorTaskId: links[x].source,
           taskId: links[x].target,
@@ -264,8 +264,8 @@ module.exports = {
       }
       var links = gantt.getLinks();
       var links2 = [];
-      for (var x = 0; x < links.length; x++) {
-        var event = {
+      for (let x = 0; x < links.length; x++) {
+        let event = {
           id: links[x].id,
           predecessorTaskId: links[x].source,
           taskId: links[x].target,
@@ -306,8 +306,8 @@ module.exports = {
         };
         events.push(event);
       }
-      for (var i = 0; i < projectTaskRelationDtos.length; i++) {
-        var event = {
+      for (let i = 0; i < projectTaskRelationDtos.length; i++) {
+        let event = {
           id: projectTaskRelationDtos[i].id,
           source: projectTaskRelationDtos[i].predecessorTaskId,
           target: projectTaskRelationDtos[i].taskId,
@@ -566,10 +566,10 @@ module.exports = {
   },
 
   beforeDestroy: function () {
-    if (window.ganttTimer != null) {
-      window.clearInterval(ganttTimer);
-      window.ganttTimer = null;
-    }
+    // if (window.ganttTimer != null) {
+    //   window.clearInterval(ganttTimer);
+    //   window.ganttTimer = null;
+    // }
   },
 };
 </script>

+ 1 - 1
src/trace/ProjectUserList.vue

@@ -194,7 +194,7 @@ export default {
               }
             }
           }
-          for (var index = 0; index < data.length; index++) {
+          for (let index = 0; index < data.length; index++) {
             _self.$set(_self.projectItemUsers, index, data[index]);
           }
         },

+ 92 - 96
src/trace/TraceAttachment.vue

@@ -8,33 +8,22 @@
         @change="onFileChanges"
       />
       <label for="attachment">
-        <a
-          role="button"
-          class="btn btn-primary btn-sm"
-          @click="clickButton"
-        >
+        <a role="button" class="btn btn-primary btn-sm" @click="clickButton">
           <i class="fa fa-upload" />
-          &nbsp;
-          上传附件
+          &nbsp; 上传附件
         </a>
       </label>
     </div>
 
     <div v-if="attachmentList != undefined && attachmentList.length > 0">
       <ul class="list-group">
-        <template v-for="attachment in attachmentList">
-          <li
-            :key="attachment.id"
-            class="list-group-item"
-          >
+        <template v-for="attachment in attachmentList" :key="attachment.id">
+          <li class="list-group-item">
             <span
               class="badge"
               @click="deleteByTraceAttachmentId(attachment.id)"
             >删除</span>
-            <span
-              class="badge"
-              @click="download(attachment)"
-            >下载</span>
+            <span class="badge" @click="download(attachment)">下载</span>
             {{ attachment.attachment }}
           </li>
         </template>
@@ -47,24 +36,25 @@
 <script>
 var Common = require('../common/Common.js');
 var Notify = require('pc-component-v3').Notify;
-var DownloadService =require('pc-component-v3').DownloadService;
+var DownloadService = require('pc-component-v3').DownloadService;
 var Loading = require('pc-component-v3').Loading;
 
 export default {
   components: {
-    Loading,DownloadService,
+    Loading,
+    DownloadService,
   },
   props: ['traceId'],
   data: function () {
     return {
       className: 'com.leanwo.prodog.model.trace.TraceAttachment',
       attachmentList: [],
-      traceConfigDto:{},
+      traceConfigDto: {},
     };
   },
 
   watch: {
-    'traceId': function (curVal, oldVal) {
+    traceId: function (curVal, oldVal) {
       if (curVal != undefined) {
         this.listTraceAttachmentByTraceId();
       }
@@ -78,35 +68,39 @@ export default {
     this.getTraceConfig();
   },
   methods: {
-
     /**
-         * 下载文件
-         * @param  {String} fileName 文件名
-         * @return {void}          
-         */
+     * 下载文件
+     * @param  {String} fileName 文件名
+     * @return {void}
+     */
     download: function (item) {
       var _self = this;
       DownloadService.fileDownload(_self.className, item.attachment);
     },
 
     /**
-         * 删除任务附件
-         */
+     * 删除任务附件
+     */
     deleteByTraceAttachmentId: function (traceAttachementId) {
       var _self = this;
       $.ajax({
-        url: Common.getApiURL('TraceAttachmentResource/deleteByTraceAttachmentId'),
+        url: Common.getApiURL(
+          'TraceAttachmentResource/deleteByTraceAttachmentId',
+        ),
         type: 'get',
         dataType: 'json',
         data: {
-          'id': traceAttachementId,
+          id: traceAttachementId,
         },
         beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },
         success: function (data) {
           if (data == false) {
-            Notify.error('提示', '您没有权限删除附件,只有任务发起人和附件上传人有权限删除附件!');
+            Notify.error(
+              '提示',
+              '您没有权限删除附件,只有任务发起人和附件上传人有权限删除附件!',
+            );
             _self.listTraceAttachmentByTraceId();
           } else {
             _self.listTraceAttachmentByTraceId();
@@ -116,89 +110,94 @@ export default {
     },
 
     /* 选择文件发生改变
-         * @param  {[type]} e [description]
-         * @return {[type]}   [description]
-         */
+     * @param  {[type]} e [description]
+     * @return {[type]}   [description]
+     */
     onFileChanges: function (e) {
       var files = e.target.files || e.dataTransfer.files;
-      if (!files.length)
-        return;
+      if (!files.length) return;
       this.uploadFile(files[0]);
     },
 
     /**
-         * 上传文件
-         * @param  {File} selectedFile 选择的文件
-         */
+     * 上传文件
+     * @param  {File} selectedFile 选择的文件
+     */
     uploadFile: function (selectedFile) {
       var _self = this;
       if (selectedFile == undefined) {
         return;
       }
       var size = undefined;
-      if(_self.traceConfigDto.traceAttachmentSize != undefined && _self.traceConfigDto.traceAttachmentSize != null){
-            	size = _self.traceConfigDto.traceAttachmentSize;
+      if (
+        _self.traceConfigDto.traceAttachmentSize != undefined &&
+        _self.traceConfigDto.traceAttachmentSize != null
+      ) {
+        size = _self.traceConfigDto.traceAttachmentSize;
       }
       //当系统没有配置附件大小时默认8m
-      if(size == undefined){
-            	size = 8;
+      if (size == undefined) {
+        size = 8;
       }
-      if ((selectedFile.size / 1024) <= (1024 * size)) {
-	            var formData = new FormData();
-	            formData.append('files', selectedFile);
-	            formData.append('className', _self.className);
-	            _self.$refs.loading.show();
-	            $.ajax({
-	                url: Common.getApiURL('file/classFileUpload'),
-	                type: 'post',
-	                beforeSend: function (request) {
-	                    Common.addTokenToRequest(request);
-	                },
-	                data: formData,
-	                contentType: false,
-	                processData: false,
-	                success: function (data) {
-	                    _self.$refs.loading.hide();
-	                    if (data != 'error') {
-	                        var fileName = data.substring(data.indexOf(':') + 1);
-	                        _self.uploadTraceAttachment(fileName);
-	                    }
-	                },
-	                error: function (XMLHttpRequest, textStatus, errorThrown) {
-	                    _self.$refs.loading.hide();
-	                    Common.processException(XMLHttpRequest, textStatus, errorThrown);
-	                },
-	            });
-	        } else {
-        Notify.error('提示', '文件大小不能超过'+size+'M,可在任务配置功能中配置!');
+      if (selectedFile.size / 1024 <= 1024 * size) {
+        var formData = new FormData();
+        formData.append('files', selectedFile);
+        formData.append('className', _self.className);
+        _self.$refs.loading.show();
+        $.ajax({
+          url: Common.getApiURL('file/classFileUpload'),
+          type: 'post',
+          beforeSend: function (request) {
+            Common.addTokenToRequest(request);
+          },
+          data: formData,
+          contentType: false,
+          processData: false,
+          success: function (data) {
+            _self.$refs.loading.hide();
+            if (data != 'error') {
+              var fileName = data.substring(data.indexOf(':') + 1);
+              _self.uploadTraceAttachment(fileName);
+            }
+          },
+          error: function (XMLHttpRequest, textStatus, errorThrown) {
+            _self.$refs.loading.hide();
+            Common.processException(XMLHttpRequest, textStatus, errorThrown);
+          },
+        });
+      } else {
+        Notify.error(
+          '提示',
+          '文件大小不能超过' + size + 'M,可在任务配置功能中配置!',
+        );
       }
     },
 
     /**
-		 * 获取任务管理配置
-		 */
-    getTraceConfig: function() {
+     * 获取任务管理配置
+     */
+    getTraceConfig: function () {
       var _self = this;
       $.ajax({
         url: Common.getApiURL('TraceConfigResource/queryTraceConfigDto'),
         type: 'get',
         dataType: 'json',
-        beforeSend: function(request) {
+        beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },
 
-        success: function(data) {
+        success: function (data) {
           _self.traceConfigDto = data;
         },
-        error: function(XMLHttpRequest, textStatus, errorThrown) {
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
         },
       });
     },
 
     /**
-         * 查询当前追踪单下所有的附件
-         */
+     * 查询当前追踪单下所有的附件
+     */
     listTraceAttachmentByTraceId: function () {
       var _self = this;
       $.ajax({
@@ -209,7 +208,7 @@ export default {
           Common.addTokenToRequest(request);
         },
         data: {
-          'traceId': _self.traceId,
+          traceId: _self.traceId,
         },
         success: function (data) {
           console.log(data);
@@ -218,11 +217,9 @@ export default {
       });
     },
 
-
-
     /**
-         * 上传附件
-         */
+     * 上传附件
+     */
     uploadTraceAttachment: function (fileName) {
       var _self = this;
       var traceAttachement = {
@@ -247,11 +244,10 @@ export default {
       });
     },
 
-        
     /**
-         * 点击上传按钮事件
-         * @return {[type]} [description]
-         */
+     * 点击上传按钮事件
+     * @return {[type]} [description]
+     */
     clickButton: function () {
       $(this.$refs.fileInput).click();
     },
@@ -261,19 +257,19 @@ export default {
 
 <style scoped>
 .badge {
-    cursor: pointer;
-    background-color: #428bca;
-    color: white;
+  cursor: pointer;
+  background-color: #428bca;
+  color: white;
 }
 </style>
 
 <style scoped>
 .file-input {
-    width: 0.1px;
-    height: 0.1px;
-    opacity: 0;
-    overflow: hidden;
-    position: absolute;
-    z-index: -1;
+  width: 0.1px;
+  height: 0.1px;
+  opacity: 0;
+  overflow: hidden;
+  position: absolute;
+  z-index: -1;
 }
 </style>

+ 73 - 62
src/trace/TraceComment.vue

@@ -6,15 +6,25 @@
 
 <template>
   <div>
-    <div v-for="items in traceComments" class="media">
-      <h4 class="media-heading">{{ items.createdName }}<a class="fa-pull-right" @click="edit(items)">编辑</a></h4>
-      <div class="media-body">    
+    <div v-for="items in traceComments" :key="items" class="media">
+      <h4 class="media-heading">
+        {{ items.createdName
+        }}<a class="fa-pull-right" @click="edit(items)">编辑</a>
+      </h4>
+      <div class="media-body">
         <div>
-          <div v-html="items.content" /><br />
+          <div v-html="items.content" />
+          <br />
           {{ items.created }}
         </div>
-        <div v-for="(item,index) in split(items.attachments)" v-if="items.attachments != '' && items.attachments != undefined" @click="download(item)">
-          <a>{{ item }}</a>
+        <div v-if="items.attachments != '' && items.attachments != undefined">
+          <div
+            v-for="item in split(items.attachments)"
+            :key="item"
+            @click="download(item)"
+          >
+            <a>{{ item }}</a>
+          </div>
         </div>
       </div>
     </div>
@@ -26,39 +36,39 @@ var Common = require('../common/Common.js');
 var DownloadService = require('pc-component-v3').DownloadService;
 export default {
   components: {
-    Common,DownloadService,
+    Common,
+    DownloadService,
   },
-  props: ['traceId','trace'],
+  props: ['traceId', 'trace'],
 
-  data: function() {
+  data: function () {
     return {
-            	traceComments: [],
-            	className: 'com.leanwo.prodog.trace.model.TraceComment',
-            	uuid:'',
+      traceComments: [],
+      className: 'com.leanwo.prodog.trace.model.TraceComment',
+      uuid: '',
     };
   },
-		
+
   watch: {
-    'traceId': function(curVal,oldVal){
-      if(curVal != undefined){
+    traceId: function (curVal, oldVal) {
+      if (curVal != undefined) {
         this.getTraceComment();
       }
     },
   },
-		
-  mounted: function(){
+
+  mounted: function () {
     this.uuid = this.$route.params.uuid;
-    if(this.traceId != undefined){
+    if (this.traceId != undefined) {
       this.getTraceComment();
     }
   },
   methods: {
-		
     /**
-			 * 根据追踪表Id获取评论
-			 * @author GuoZhiBo 20171201
-			 */
-    getTraceComment: function() {
+     * 根据追踪表Id获取评论
+     * @author GuoZhiBo 20171201
+     */
+    getTraceComment: function () {
       var _self = this;
       $.ajax({
         url: Common.getApiURL('TraceCommentResource/queryTraceComment'),
@@ -68,64 +78,66 @@ export default {
         data: {
           traceId: _self.traceId,
         },
-        beforeSend: function(request) {
+        beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },
-        success: function(data) {
+        success: function (data) {
           _self.traceComments = data;
         },
-        error: function(XMLHttpRequest, textStatus, errorThrown) {
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
         },
       });
     },
-			
-	        /**
-	         * 将字符串以”,“进行分割成字符串
-	         * @author GuoZhiBo 20171201
-	         */
-	        split: function(items) {
-	            if (items != null && items != '') {
-	                return items.split(',');
-	            } else {
-	                return null;
-	            }
-	
-	        },
-	        /**
-			 * 下载文件
-			 * @param  {String} fileName 文件名
-			 * @return {void}          
-			 */
-    download: function(fileName) {
+
+    /**
+     * 将字符串以”,“进行分割成字符串
+     * @author GuoZhiBo 20171201
+     */
+    split: function (items) {
+      if (items != null && items != '') {
+        return items.split(',');
+      } else {
+        return null;
+      }
+    },
+    /**
+     * 下载文件
+     * @param  {String} fileName 文件名
+     * @return {void}
+     */
+    download: function (fileName) {
       var _self = this;
       DownloadService.fileDownload(_self.className, fileName);
     },
     /**
-			 * 获取图片地址
-			 * @param  {String} item 图片名称
-			 * @return {String}      图片URL地址
-			 */
-    getImageSrc: function(item) {
+     * 获取图片地址
+     * @param  {String} item 图片名称
+     * @return {String}      图片URL地址
+     */
+    getImageSrc: function (item) {
       var _self = this;
-      if(item != undefined && item != null) {
-        return Common.getImageSrc('com.leanwo.prodog.trace.model.TraceComment', item);
+      if (item != undefined && item != null) {
+        return Common.getImageSrc(
+          'com.leanwo.prodog.trace.model.TraceComment',
+          item,
+        );
       } else {
         return '';
       }
     },
     /**
-			 * 获取图片地址
-			 */
-    getImageSrcName: function(imageName){
-      return Common.getImageSrc('com.leanwo.prodog.model.base.User',imageName);
+     * 获取图片地址
+     */
+    getImageSrcName: function (imageName) {
+      return Common.getImageSrc('com.leanwo.prodog.model.base.User', imageName);
     },
-			
+
     /**
-			 * 打开评论界面进行评论
-			 * @author GuoZhiBo 20171201
-			 */
-    edit: function(item) {
+     * 打开评论界面进行评论
+     * @author GuoZhiBo 20171201
+     */
+    edit: function (item) {
       this.$router.push('/trace/traceCommentEdit/' + item.id);
     },
   },
@@ -133,5 +145,4 @@ export default {
 </script>
 
 <style>
-
 </style>

+ 207 - 182
src/trace/TraceCommentCreate.vue

@@ -1,10 +1,7 @@
 <template>
   <div>
     <div>
-      <Navbar
-        title="创建评论"
-        :is-go-back="true"
-      />
+      <Navbar title="创建评论" :is-go-back="true" />
       <div>
         <div class="form-group">
           <label for="exampleInputEmail2">评论内容</label>
@@ -29,44 +26,26 @@
               @click="clickButton"
             >
               <i class="fa fa-upload" />
-              &nbsp;
-              上传附件
+              &nbsp; 上传附件
             </a>
           </label>
         </div>
 
-        <div style="margin-top: 10px;">
+        <div style="margin-top: 10px">
           <ul class="list-group">
-            <li
-              v-for="item,index in files"
-              class="list-group-item"
-            >
-              <span
-                class="badge"
-                @click="download(item)"
-              >下载</span>
-              <span
-                class="badge"
-                @click="removeFile(item)"
-              >删除</span>
+            <li v-for="item in files" :key="item" class="list-group-item">
+              <span class="badge" @click="download(item)">下载</span>
+              <span class="badge" @click="removeFile(item)">删除</span>
               {{ item }}
             </li>
           </ul>
         </div>
         <div>
-          <div style="margin-top: 10px;">
-            <button
-              type="text"
-              class="btn btn-default"
-              @click="photograph"
-            >
+          <div style="margin-top: 10px">
+            <button type="text" class="btn btn-default" @click="photograph">
               确认
             </button>
-            <button
-              type="text"
-              class="btn btn-default"
-              @click="back"
-            >
+            <button type="text" class="btn btn-default" @click="back">
               取消
             </button>
           </div>
@@ -87,7 +66,12 @@ var DownloadService = require('pc-component-v3').DownloadService;
 
 export default {
   components: {
-    Uuid, Loading, UpladFile, Notify, Common, Navbar,
+    Uuid,
+    Loading,
+    UpladFile,
+    Notify,
+    Common,
+    Navbar,
   },
   data: function () {
     return {
@@ -96,25 +80,49 @@ export default {
       images: [],
       className: 'com.leanwo.prodog.trace.model.TraceComment',
       files: [],
-      traceConfigDto:{},
+      traceConfigDto: {},
       summernoteInitSuccess: false, // summernote初始化成功
     };
   },
 
   mounted: function () {
-		 var _self = this;
+    var _self = this;
     $('.input-tan').focus(function () {
       document.activeElement.blur();
     });
     this.initData();
     this.getTraceConfig();
     $('#summernote').summernote({
-      toolbar:[
-        ['insert', ['link', 'picture', 'video', 'audio', 'hr', 'table', //插件
-          'fontname', 'fontsize', 'color', 'bold', 'italic', 'underline', 'strikethrough', 'clear',//字体样式
-          'style', 'ol', 'ul', 'paragraph', 'height',//段落样式
-          'fullscreen', 'codeview', 'undo', 'redo', 'help',//Misc
-        ]],
+      toolbar: [
+        [
+          'insert',
+          [
+            'link',
+            'picture',
+            'video',
+            'audio',
+            'hr',
+            'table', //插件
+            'fontname',
+            'fontsize',
+            'color',
+            'bold',
+            'italic',
+            'underline',
+            'strikethrough',
+            'clear', //字体样式
+            'style',
+            'ol',
+            'ul',
+            'paragraph',
+            'height', //段落样式
+            'fullscreen',
+            'codeview',
+            'undo',
+            'redo',
+            'help', //Misc
+          ],
+        ],
       ],
       height: 400,
       minHeight: 300,
@@ -128,45 +136,42 @@ export default {
       },
     });
     _self.summernoteInitSuccess = true;
-		
   },
-  unmounted: function(){
-	    if(this.summernoteInitSuccess == true){
-	        $('#summernote').summernote('destroy');
-	    }
+  unmounted: function () {
+    if (this.summernoteInitSuccess == true) {
+      $('#summernote').summernote('destroy');
+    }
   },
   methods: {
-    	
     /**
-         * 点击上传按钮事件
-         * @return {[type]} [description]
-         */
+     * 点击上传按钮事件
+     * @return {[type]} [description]
+     */
     clickButton: function () {
       $(this.$refs.fileInput).click();
     },
     /**
-         * 初始化数据
-         * @author GuoZhiBo 20171201
-         */
+     * 初始化数据
+     * @author GuoZhiBo 20171201
+     */
     initData: function () {
       var _self = this;
       this.traceId = Number(this.$route.params.traceId);
     },
     /**
-         * 监听文件改变事件
-         * @author GuoZhiBo 20171201
-         */
+     * 监听文件改变事件
+     * @author GuoZhiBo 20171201
+     */
     onFileChange(e) {
       var _self = this;
       var files = e.target.files || e.dataTransfer.files;
-      if (!files.length)
-        return;
+      if (!files.length) return;
       _self.uploadImage(files[0]);
     },
     /**
-         * 上传图片
-         * @author GuoZhiBo 20171201
-         */
+     * 上传图片
+     * @author GuoZhiBo 20171201
+     */
     uploadImage: function (selectedFile) {
       var _self = this;
       if (selectedFile == undefined) {
@@ -176,114 +181,124 @@ export default {
         Notify.error('提示', '请确保文件为图像类型!');
         return;
       }
-      UpladFile.photoCompress(selectedFile, {
-        quality: 0.2,
-      }, function (base64Codes) {
-        var bl = UpladFile.convertBase64UrlToBlob(base64Codes);
-        var rst = new FormData();
-        rst.append('images', bl, 'file_' + Date.parse(new Date()) + '.jpg');
-        rst.append('className', 'com.leanwo.prodog.trace.model.TraceComment');
-        _self.$refs.loading.show();
-        $.ajax({
-          url: Common.getApiURL('file/imageUpload'),
-          type: 'post',
-          beforeSend: function (request) {
-            Common.addTokenToRequest(request);
-          },
-          data: rst,
-          contentType: false,
-          processData: false,
-          success: function (data) {
-            _self.$refs.loading.hide();
-            if (data != 'error') {
-              var imageName = data.substring(data.indexOf(':') + 1);
-              _self.addImg(imageName);
-            }
-          },
-          error: function (XMLHttpRequest, textStatus, errorThrown) {
-            _self.$refs.loading.hide();
-            Common.processException(XMLHttpRequest, textStatus, errorThrown);
-          },
-        });
-        return rst.file;
-      });
+      UpladFile.photoCompress(
+        selectedFile,
+        {
+          quality: 0.2,
+        },
+        function (base64Codes) {
+          var bl = UpladFile.convertBase64UrlToBlob(base64Codes);
+          var rst = new FormData();
+          rst.append('images', bl, 'file_' + Date.parse(new Date()) + '.jpg');
+          rst.append('className', 'com.leanwo.prodog.trace.model.TraceComment');
+          _self.$refs.loading.show();
+          $.ajax({
+            url: Common.getApiURL('file/imageUpload'),
+            type: 'post',
+            beforeSend: function (request) {
+              Common.addTokenToRequest(request);
+            },
+            data: rst,
+            contentType: false,
+            processData: false,
+            success: function (data) {
+              _self.$refs.loading.hide();
+              if (data != 'error') {
+                var imageName = data.substring(data.indexOf(':') + 1);
+                _self.addImg(imageName);
+              }
+            },
+            error: function (XMLHttpRequest, textStatus, errorThrown) {
+              _self.$refs.loading.hide();
+              Common.processException(XMLHttpRequest, textStatus, errorThrown);
+            },
+          });
+          return rst.file;
+        },
+      );
     },
     /**
-         * 添加图片
-         * @author GuoZhiBo 20171201
-         */
+     * 添加图片
+     * @author GuoZhiBo 20171201
+     */
     addImg: function (imageName) {
       var _self = this;
       _self.images.push(imageName);
     },
     /**
-         * 获取图片地址
-         * @param  {String} item 图片名称
-         * @return {String}      图片URL地址
-         */
+     * 获取图片地址
+     * @param  {String} item 图片名称
+     * @return {String}      图片URL地址
+     */
     getImageSrc: function (item) {
       var _self = this;
       if (item != undefined && item != null) {
-        return Common.getResourceUrl('image', 'com.leanwo.prodog.trace.model.TraceComment', item);
+        return Common.getResourceUrl(
+          'image',
+          'com.leanwo.prodog.trace.model.TraceComment',
+          item,
+        );
       } else {
         return '';
       }
     },
     /**
-         * 获取图片路径供外部调用
-         * @return {Array} 图片地址
-         */
+     * 获取图片路径供外部调用
+     * @return {Array} 图片地址
+     */
     getImages: function () {
       return this.images;
     },
     /**
-         * 删除图片
-         *@author GuoZhiBo 20171201
-         */
+     * 删除图片
+     *@author GuoZhiBo 20171201
+     */
     deleteImg(index) {
       var _self = this;
       _self.images.splice(index, 1);
     },
     //----------文件------------
     /**
-         * 删除文件
-         * @param  {String} item 文件Name
-         */
+     * 删除文件
+     * @param  {String} item 文件Name
+     */
     removeFile: function (index) {
       var _self = this;
       _self.files.splice(index, 1);
     },
     /**
-         * 选择文件发生改变
-         * @param  {[type]} e [description]
-         * @return {[type]}   [description]
-         */
+     * 选择文件发生改变
+     * @param  {[type]} e [description]
+     * @return {[type]}   [description]
+     */
     onFileChanges: function (e) {
       var files = e.target.files || e.dataTransfer.files;
-      if (!files.length)
-        return;
+      if (!files.length) return;
       this.uploadFile(files[0]);
     },
 
     /**
-         * 上传文件
-         * @param  {File} selectedFile 选择的文件
-         */
+     * 上传文件
+     * @param  {File} selectedFile 选择的文件
+     */
     uploadFile: function (selectedFile) {
       var _self = this;
       if (selectedFile == undefined) {
         return;
       }
       var size = undefined;
-      if(_self.traceConfigDto.commentAttachmentSize != undefined && _self.traceConfigDto.commentAttachmentSize != null){
-            	size = _self.traceConfigDto.commentAttachmentSize;
+      if (
+        _self.traceConfigDto.commentAttachmentSize != undefined &&
+        _self.traceConfigDto.commentAttachmentSize != null
+      ) {
+        size = _self.traceConfigDto.commentAttachmentSize;
       }
       //当系统没有配置附件大小时默认8m
-      if(size == undefined){
-            	size = 8;
+      if (size == undefined) {
+        size = 8;
       }
       if (selectedFile.size != undefined && selectedFile.size != null) {
-        if ((selectedFile.size / 1024) <= (1024 * size)) {
+        if (selectedFile.size / 1024 <= 1024 * size) {
           var formData = new FormData();
           formData.append('files', selectedFile);
           formData.append('className', _self.className);
@@ -310,38 +325,41 @@ export default {
             },
           });
         } else {
-          Notify.error('提示', '文件大小不能超过'+size+'M,可在任务配置功能中配置!');
+          Notify.error(
+            '提示',
+            '文件大小不能超过' + size + 'M,可在任务配置功能中配置!',
+          );
         }
       } else {
         Notify.error('提示', '上传的文件为空!');
       }
     },
     /**
-		 * 获取任务管理配置
-		 */
-    getTraceConfig: function() {
+     * 获取任务管理配置
+     */
+    getTraceConfig: function () {
       var _self = this;
       $.ajax({
         url: Common.getApiURL('TraceConfigResource/queryTraceConfigDto'),
         type: 'get',
         dataType: 'json',
-        beforeSend: function(request) {
+        beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },
 
-        success: function(data) {
+        success: function (data) {
           _self.traceConfigDto = data;
         },
-        error: function(XMLHttpRequest, textStatus, errorThrown) {
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
         },
       });
     },
     /**
-         * 获取文件地址
-         * @param  {String} item 图片名称
-         * @return {String}      图片URL地址
-         */
+     * 获取文件地址
+     * @param  {String} item 图片名称
+     * @return {String}      图片URL地址
+     */
     getFileSrc: function (item) {
       var _self = this;
       if (item != undefined && item != null) {
@@ -352,57 +370,64 @@ export default {
     },
 
     /**
-         * 下载文件
-         * @param  {String} fileName 文件名
-         * @return {void}          
-         */
+     * 下载文件
+     * @param  {String} fileName 文件名
+     * @return {void}
+     */
     download: function (fileName) {
       var _self = this;
       DownloadService.fileDownload(_self.className, fileName);
     },
 
-
     //内容图片上传
     sendFile: function (file, editor, $editable) {
-		    var _self = this;
-		    UpladFile.photoCompress(file, {
-		        quality: 1,
-		    }, function (base64Codes) {
-		        var bl = UpladFile.convertBase64UrlToBlob(base64Codes);
-		        var rst = new FormData();
-		        rst.append('images', bl, 'file_' + Date.parse(new Date()) + '.jpg');
-		        rst.append('className', _self.className);
-		        $.ajax({
-		            url: Common.getApiURL('file/imageUpload'),
-		            type: 'post',
-		            data: rst,
-		            contentType: false,
-		            processData: false,
-		            beforeSend : function(request){
-            Common.addTokenToRequest(request);
-          },
-		            success: function (data) {
-		                if (data != 'error') {
-		                	var imageName = data.substring(data.indexOf(':') + 1);
-              $('#summernote').summernote('insertImage', Common.getResourceUrl('image', _self.className, imageName), 'image name');
-		                }
-		            },
-		            error: function () {
-		                Notify.error('提示', '上传失败!');
-		                return;
-		            },
-		        });
-		        return rst.file;
-		    });
+      var _self = this;
+      UpladFile.photoCompress(
+        file,
+        {
+          quality: 1,
+        },
+        function (base64Codes) {
+          var bl = UpladFile.convertBase64UrlToBlob(base64Codes);
+          var rst = new FormData();
+          rst.append('images', bl, 'file_' + Date.parse(new Date()) + '.jpg');
+          rst.append('className', _self.className);
+          $.ajax({
+            url: Common.getApiURL('file/imageUpload'),
+            type: 'post',
+            data: rst,
+            contentType: false,
+            processData: false,
+            beforeSend: function (request) {
+              Common.addTokenToRequest(request);
+            },
+            success: function (data) {
+              if (data != 'error') {
+                var imageName = data.substring(data.indexOf(':') + 1);
+                $('#summernote').summernote(
+                  'insertImage',
+                  Common.getResourceUrl('image', _self.className, imageName),
+                  'image name',
+                );
+              }
+            },
+            error: function () {
+              Notify.error('提示', '上传失败!');
+              return;
+            },
+          });
+          return rst.file;
+        },
+      );
     },
-		
+
     /**
-         * 保存评论表数据
-         * @author GuoZhiBo 20171201
-         */
+     * 保存评论表数据
+     * @author GuoZhiBo 20171201
+     */
     photograph: function () {
       var _self = this;
-      _self.content=$('#summernote').summernote('code');
+      _self.content = $('#summernote').summernote('code');
       if (_self.content != '' && _self.content != null) {
         var traceComment = {
           traceId: _self.traceId,
@@ -440,19 +465,19 @@ export default {
 </script>
 <style scoped>
 .mui-divs3 {
-    margin-top: 10px;
+  margin-top: 10px;
 }
 .file-input {
-    width: 0.1px;
-    height: 0.1px;
-    opacity: 0;
-    overflow: hidden;
-    position: absolute;
-    z-index: -1;
+  width: 0.1px;
+  height: 0.1px;
+  opacity: 0;
+  overflow: hidden;
+  position: absolute;
+  z-index: -1;
 }
 .badge {
-    cursor: pointer;
-    background-color: #428bca;
-    color: white;
+  cursor: pointer;
+  background-color: #428bca;
+  color: white;
 }
 </style>

+ 1 - 1
src/trace/TraceCommentEdit.vue

@@ -25,7 +25,7 @@
 
         <div style="margin-top: 10px;">
           <ul class="list-group">
-            <li v-for="item,index in files" class="list-group-item">
+            <li v-for="item in files" :key="item" class="list-group-item">
               <span class="badge" @click="download(item)">下载</span>
               <span class="badge" @click="removeFile(item)">删除</span>
               {{ item }}

+ 2 - 2
src/trace/TraceCreate.vue

@@ -37,7 +37,7 @@
           >
             <option value="" />
             <option
-              v-for="user in userList"
+              v-for="user in userList" :key="user"
               :value="user.userId"
             >
               {{ user.userName }}
@@ -53,7 +53,7 @@
             :disabled="'projectId != null'?'true':'false'"
           >
             <option
-              v-for="project in projectUserList"
+              v-for="project in projectUserList" :key="project"
               :value="project.projectItemId"
             >
               {{ project.projectItemName }}

+ 31 - 70
src/trace/TraceHeader.vue

@@ -17,70 +17,35 @@
         <a
           class="navbar-brand"
           href="javascript:void(0)"
-          style="padding-top: 6px;"
+          style="padding-top: 6px"
         >
-
-                   
           <span
             class="glyphicon glyphicon-circle-arrow-left m-image"
-            style="font-size: 36px; color: black;" @click="goBack"
+            style="font-size: 36px; color: black"
+            @click="goBack"
           />
-
         </a>
       </div>
 
-      <div
-        id="bs-example-navbar-collapse-1"
-        class="collapse navbar-collapse"
-      >
+      <div id="bs-example-navbar-collapse-1" class="collapse navbar-collapse">
         <ul class="nav navbar-nav">
-          <li
-            :class="{'active' : type == 'traceProject'}"
-            @click="openProject"
-          >
-            <a
-              class="nav-item-a"
-              href="javascript:void(0)"
-            >项目</a>
+          <li :class="{ active: type == 'traceProject' }" @click="openProject">
+            <a class="nav-item-a" href="javascript:void(0)">项目</a>
           </li>
-          <li
-            :class="{'active' : type == 'traceList'}"
-            @click="openSelf"
-          >
-            <a
-              class="nav-item-a"
-              href="javascript:void(0)"
-            >我自己</a>
+          <li :class="{ active: type == 'traceList' }" @click="openSelf">
+            <a class="nav-item-a" href="javascript:void(0)">我自己</a>
           </li>
-          <li
-            :class="{'active' : type == 'traceDynamic'}"
-            @click="openDynamic"
-          >
-            <a
-              class="nav-item-a"
-              href="javascript:void(0)"
-            >动态</a>
+          <li :class="{ active: type == 'traceDynamic' }" @click="openDynamic">
+            <a class="nav-item-a" href="javascript:void(0)">动态</a>
           </li>
-          <li
-            :class="{'active' : type == 'team'}"
-            @click="team"
-          >
-            <a
-              class="nav-item-a"
-              href="javascript:void(0)"
-            >团队</a>
+          <li :class="{ active: type == 'team' }" @click="team">
+            <a class="nav-item-a" href="javascript:void(0)">团队</a>
           </li>
           <li @click="goHome">
-            <a
-              class="nav-item-a"
-              href="javascript:void(0)"
-            >主页</a>
+            <a class="nav-item-a" href="javascript:void(0)">主页</a>
           </li>
           <li v-if="isShow" @click="traceSetting">
-            <a
-              class="nav-item-a"
-              href="javascript:void(0)"
-            >任务配置</a>
+            <a class="nav-item-a" href="javascript:void(0)">任务配置</a>
           </li>
         </ul>
       </div>
@@ -89,7 +54,6 @@
 </template>
 
 <script>
-
 var Uuid = require('pc-component-v3').Uuid;
 var Common = require('../common/Common.js');
 
@@ -98,41 +62,40 @@ export default {
 
   data: function () {
     return {
-      isShow:'false',
+      isShow: 'false',
     };
   },
   mounted: function () {
-       
     this.queryIsAdmin();
   },
 
   methods: {
     /**
-         * 打开项目界面
-         */
+     * 打开项目界面
+     */
     openProject() {
       var _self = this;
       this.$router.push('/trace/projectList');
     },
 
     /**
-         * 打开动态界面
-         */
+     * 打开动态界面
+     */
     openDynamic() {
       var _self = this;
       this.$router.push('/trace/traceDynamic');
     },
 
     /**
-         * 打开我自己界面
-         */
+     * 打开我自己界面
+     */
     openSelf() {
       this.$router.push('/trace/traceList/I_LAUNCH');
     },
 
     /**
-         * 打开团队界面
-         */
+     * 打开团队界面
+     */
     team() {
       this.$router.push('/trace/teamList');
     },
@@ -144,14 +107,14 @@ export default {
     goHome() {
       this.$router.push('/desktop/dashboard');
     },
-        
-    traceSetting(){
-        	this.$router.push('/trace/traceConfig');
+
+    traceSetting() {
+      this.$router.push('/trace/traceConfig');
     },
     /**
-         * 查询配置信息
-         * @return {[type]} [description]
-         */
+     * 查询配置信息
+     * @return {[type]} [description]
+     */
     queryIsAdmin: function () {
       var _self = this;
       $.ajax({
@@ -169,14 +132,12 @@ export default {
         },
       });
     },
-        
-        
   },
 };
 </script>
 <style scoped>
 .nav-item-a {
-    padding-top: 15px;
-    padding-bottom: 15px;
+  padding-top: 15px;
+  padding-bottom: 15px;
 }
 </style>

+ 29 - 34
src/trace/TraceLog.vue

@@ -6,22 +6,19 @@
 <template>
   <div>
     <div class="panel panel-default">
-      <div
-        class="panel-heading dashboard-header"
-        @click.self="collapse()"
-      >
+      <div class="panel-heading dashboard-header" @click.self="collapse()">
         &nbsp;&nbsp;动态信息
         <div class="pull-left">
           <span
             class="glyphicon"
-            :class="{'glyphicon-triangle-bottom' : !isCollapse, 'glyphicon glyphicon-triangle-top' : isCollapse}"
+            :class="{
+              'glyphicon-triangle-bottom': !isCollapse,
+              'glyphicon glyphicon-triangle-top': isCollapse,
+            }"
           />
         </div>
       </div>
-      <div
-        v-if="isCollapse == true" id="trace-content"
-        class="container-fluid"
-      >
+      <div v-if="isCollapse == true" id="trace-content" class="container-fluid">
         <div v-for="item in traceLogs" :key="item.id">
           <h5>
             {{ item.dateTime }} &nbsp;{{ item.operatorUserName }}
@@ -41,42 +38,41 @@ export default {
   },
   props: ['traceId'],
 
-  data: function() {
+  data: function () {
     return {
       traceLogs: [],
-      isCollapse:false,
+      isCollapse: false,
     };
   },
-		
+
   watch: {
-    'traceId': function(curVal,oldVal){
-      if(curVal != undefined && this.isCollapse == true){
+    traceId: function (curVal, oldVal) {
+      if (curVal != undefined && this.isCollapse == true) {
         this.getTraceLog();
       }
     },
   },
-		
-  mounted: function(){
-    if(this.traceId != undefined && this.isCollapse == true){
+
+  mounted: function () {
+    if (this.traceId != undefined && this.isCollapse == true) {
       this.getTraceLog();
     }
   },
   methods: {
-			
     /**
-	         * 控制展开闭合
-	         * @return {void} 
-	         */
-	        collapse: function () {
-	            var _self = this;
-	            _self.isCollapse = !_self.isCollapse;
-      _self.getTraceLog();	            
-	        },
+     * 控制展开闭合
+     * @return {void}
+     */
+    collapse: function () {
+      var _self = this;
+      _self.isCollapse = !_self.isCollapse;
+      _self.getTraceLog();
+    },
     /**
-			 * 根据追踪单Id获取追踪日志信息
-			 * @author GuoZhiBo 20171201
-			 */
-    getTraceLog: function() {
+     * 根据追踪单Id获取追踪日志信息
+     * @author GuoZhiBo 20171201
+     */
+    getTraceLog: function () {
       var _self = this;
       $.ajax({
         url: Common.getApiURL('TraceLogResource/listByTraceId'),
@@ -86,13 +82,13 @@ export default {
         data: {
           traceId: _self.traceId,
         },
-        beforeSend: function(request) {
+        beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },
-        success: function(data) {
+        success: function (data) {
           _self.traceLogs = data;
         },
-        error: function(XMLHttpRequest, textStatus, errorThrown) {
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
         },
       });
@@ -102,5 +98,4 @@ export default {
 </script>
 
 <style>
-
 </style>

+ 121 - 100
src/trace/Trace.vue → src/trace/TraceName.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <Navbar
-      :title="'任务详细信息' + ((trace == null) ? '' : '-' + trace.projectName)"
+      :title="'任务详细信息' + (trace == null ? '' : '-' + trace.projectName)"
       :is-go-back="true"
     />
     <div v-if="isflag">
@@ -23,44 +23,59 @@
             <span v-html="trace.summary" />
             <span
               class="label"
-              :class="{'label-danger' : trace.overdue == true, 'label-primary' : trace.overdue != true}"
+              :class="{
+                'label-danger': trace.overdue == true,
+                'label-primary': trace.overdue != true,
+              }"
             >
-              责任人:{{ trace.receiveUserName }},
-              时间节点:{{ formatDate(trace.planFinishedDate) }}
+              责任人:{{ trace.receiveUserName }}, 时间节点:{{
+                formatDate(trace.planFinishedDate)
+              }}
             </span>
             <span class="pull-right">
-                            &nbsp;
+              &nbsp;
               <button
                 type="button"
                 class="btn btn-link"
-                style="padding: 0px;"
+                style="padding: 0px"
                 @click="copyShaneUrl"
-              >复制链接</button>
+              >
+                复制链接
+              </button>
             </span>
             <span class="pull-right">
-                            &nbsp;
+              &nbsp;
               <button
                 type="button"
                 class="btn btn-link"
-                style="padding: 0px;"
+                style="padding: 0px"
                 @click="deleteTrace"
-              >删除</button>
+              >
+                删除
+              </button>
             </span>
             <span class="pull-right">
               <button
                 type="button"
                 class="btn btn-link"
-                style="padding: 0px;"
+                style="padding: 0px"
                 @click="edit"
-              >编辑</button>
+              >
+                编辑
+              </button>
             </span>
           </h3>
         </div>
       </div>
 
       <div id="v-html" v-html="trace.detail" />
-      <AudioField :class-name="className" :src-array="srcArray" :is-readonly="'true'" @delete-audio-src="" />
-			
+      <AudioField
+        :class-name="className"
+        :src-array="srcArray"
+        :is-readonly="'true'"
+        @delete-audio-src="undefined"
+      />
+
       <TraceTimeLine
         ref="traceTimeLine"
         :trace-id="traceId"
@@ -84,24 +99,17 @@
       <div>
         <button
           type="button"
-          style="width: 100%;margin-top: 5px;"
+          style="width: 100%; margin-top: 5px"
           class="btn btn-default"
           aria-label="Left Align"
           @click="openTraceComment"
         >
-          <span
-            class="glyphicon glyphicon-pencil"
-            aria-hidden="true"
-          />评论
+          <span class="glyphicon glyphicon-pencil" aria-hidden="true" />评论
         </button>
       </div>
 
-      <div style="margin-top:20px;">
-        <TraceLog
-          ref="traceLog"
-          :trace-id="traceId"
-          :trace="trace"
-        />
+      <div style="margin-top: 20px">
+        <TraceLog ref="traceLog" :trace-id="traceId" :trace="trace" />
       </div>
     </div>
     <Loading ref="loading" />
@@ -139,19 +147,19 @@ export default {
     this.formatDate = TraceCommon.formatDate;
 
     return {
-      'traceId': undefined,
-      'trace': {},
-      'finished': undefined,
+      traceId: undefined,
+      trace: {},
+      finished: undefined,
       count: 0,
       attachmentList: [],
       className: 'com.leanwo.prodog.Trace',
-      srcArray:[],
-      isflag : true,
+      srcArray: [],
+      isflag: true,
     };
   },
 
   computed: {
-    'finishedImageName': function () {
+    finishedImageName: function () {
       if (this.finished != true) {
         return '../../static/image/finished.png';
       } else {
@@ -161,24 +169,24 @@ export default {
   },
 
   mounted: function () {
-    	this.traceId = this.$route.params.traceId;
-    	this.judgePermission();
+    this.traceId = this.$route.params.traceId;
+    this.judgePermission();
   },
   methods: {
-    	/**
-    	 * 复制链接
-    	 * @author GuoZhiBo 20191024
-    	 */
-    	copyShaneUrl:function(){
-	       var input = document.createElement('input');     // 直接构建input
-	       var url = window.location.href;
-	       input.value = url;   // 设置内容
-	       document.body.appendChild(input);        // 添加临时实例
-	       input.select();      // 选择实例内容
-	       document.execCommand('Copy');     // 执行复制
-	       document.body.removeChild(input);  // 删除临时实例
-	        Notify.success('提示', '复制链接成功');
-	   },
+    /**
+     * 复制链接
+     * @author GuoZhiBo 20191024
+     */
+    copyShaneUrl: function () {
+      var input = document.createElement('input'); // 直接构建input
+      var url = window.location.href;
+      input.value = url; // 设置内容
+      document.body.appendChild(input); // 添加临时实例
+      input.select(); // 选择实例内容
+      document.execCommand('Copy'); // 执行复制
+      document.body.removeChild(input); // 删除临时实例
+      Notify.success('提示', '复制链接成功');
+    },
     back: function () {
       history.back();
     },
@@ -188,16 +196,16 @@ export default {
     },
 
     /**
-         * 初始化数据
-         * @author GuoZhiBo 20171201
-         */
+     * 初始化数据
+     * @author GuoZhiBo 20171201
+     */
     initData: function () {
       this.loadTraceById();
     },
 
     /**
-         * 根据追踪单Id查询追踪单的数据
-         */
+     * 根据追踪单Id查询追踪单的数据
+     */
     loadTraceById: function () {
       var _self = this;
       $.ajax({
@@ -215,39 +223,45 @@ export default {
             _self.traceId = data.id;
             _self.finished = data.finished;
             _self.trace = data;
-            if(data.audioSrcs != null){
-                        	_self.srcArray = JSON.parse(data.audioSrcs);
+            if (data.audioSrcs != null) {
+              _self.srcArray = JSON.parse(data.audioSrcs);
             }
           }
-                    
         },
         error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
         },
       });
     },
-    getUrl:function(item){
-        	var _self = this;
-        	var url = Common.getApiURL('file/fileDownload') + '?className=' + _self.className
-                					+ '&fileName=' + item;
+    getUrl: function (item) {
+      var _self = this;
+      var url =
+        Common.getApiURL('file/fileDownload') +
+        '?className=' +
+        _self.className +
+        '&fileName=' +
+        item;
       return url;
     },
     /**
-         * 修改追踪单的状态
-         * @author GuoZhiBo 20171201
-         */
+     * 修改追踪单的状态
+     * @author GuoZhiBo 20171201
+     */
     updateTracefinished: function () {
       var _self = this;
       if (_self.count == 0) {
         _self.$refs.loading.show();
-        TraceResource.updateTraceFinished(_self.trace.id).then(successData => {
-          _self.loadTraceById();
-          _self.$refs.loading.hide();
-          _self.$refs.traceLog.getTraceLog();
-        }, errorData => {
-          _self.$refs.loading.hide();
-          Common.processException(errorData);
-        });
+        TraceResource.updateTraceFinished(_self.trace.id).then(
+          successData => {
+            _self.loadTraceById();
+            _self.$refs.loading.hide();
+            _self.$refs.traceLog.getTraceLog();
+          },
+          errorData => {
+            _self.$refs.loading.hide();
+            Common.processException(errorData);
+          },
+        );
       } else {
         Notify.error('提示', '还有时间节点没有完成!');
       }
@@ -256,7 +270,9 @@ export default {
     getTimeLineNumber: function () {
       var _self = this;
       $.ajax({
-        url: Common.getApiURL('TraceTimeLineResource/queryTraceTimeLineNumberFalse'),
+        url: Common.getApiURL(
+          'TraceTimeLineResource/queryTraceTimeLineNumberFalse',
+        ),
         type: 'get',
         dataType: 'json',
         async: false,
@@ -272,56 +288,57 @@ export default {
         },
         error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
-
         },
       });
     },
 
     /**
-         * 打开评论界面进行评论
-         * @author GuoZhiBo 20171201
-         */
+     * 打开评论界面进行评论
+     * @author GuoZhiBo 20171201
+     */
     openTraceComment: function () {
       var _self = this;
       this.$router.push('/trace/traceCommentCreate/' + _self.trace.id);
     },
 
     /**
-         * 获取图片地址
-         * @param  {String} item 图片名称
-         * @return {String}      图片URL地址
-         */
+     * 获取图片地址
+     * @param  {String} item 图片名称
+     * @return {String}      图片URL地址
+     */
     getImageSrc: function (item) {
       var _self = this;
       if (item != undefined && item != null) {
-        return Common.getResourceUrl('image', 'com.leanwo.prodog.trace.model.TraceComment', item);
+        return Common.getResourceUrl(
+          'image',
+          'com.leanwo.prodog.trace.model.TraceComment',
+          item,
+        );
       } else {
         return '';
       }
     },
 
-
-
     /**
-         * 编辑
-         */
+     * 编辑
+     */
     edit: function () {
       var _self = this;
       _self.$router.push('/trace/traceUpdate/' + _self.traceId);
     },
 
     /**
-         * 删除
-         */
+     * 删除
+     */
     deleteTrace: function () {
       var _self = this;
 
       Notify.show({
         title: '删除确认',
         message:
-                    '您确定要删除任务' +
-                    _self.trace.summary +
-                    '吗?如果"是"的话,请点击"确定"按钮,否则点击"取消"按钮',
+          '您确定要删除任务' +
+          _self.trace.summary +
+          '吗?如果"是"的话,请点击"确定"按钮,否则点击"取消"按钮',
         buttons: [
           {
             label: '确定',
@@ -343,7 +360,11 @@ export default {
                   _self.back();
                 },
                 error: function (XMLHttpRequest, textStatus, errorThrown) {
-                  Common.processException(XMLHttpRequest, textStatus, errorThrown);
+                  Common.processException(
+                    XMLHttpRequest,
+                    textStatus,
+                    errorThrown,
+                  );
                   Notify.error('提示', '删除失败!');
                 },
               });
@@ -362,8 +383,8 @@ export default {
       this.$refs.traceLog.getTraceLog();
     },
     /**
-         * 根据追踪单Id查询追踪单的数据
-         */
+     * 根据追踪单Id查询追踪单的数据
+     */
     judgePermission: function () {
       var _self = this;
       $.ajax({
@@ -378,11 +399,11 @@ export default {
         },
         success: function (data) {
           _self.isflag = data;
-          if(_self.isflag){
-			    		_self.initData();
-			    	}else{
-			    		Notify.error('提示', '你没有访问权限!');
-			    	}
+          if (_self.isflag) {
+            _self.initData();
+          } else {
+            Notify.error('提示', '你没有访问权限!');
+          }
         },
         error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
@@ -394,11 +415,11 @@ export default {
 </script>
 <style scoped>
 .mui-img {
-    width: 80px;
+  width: 80px;
 }
 
 .mui-color {
-    background-color: #007aff;
-    color: white;
+  background-color: #007aff;
+  color: white;
 }
 </style>

+ 12 - 12
src/trace/TraceResource.js

@@ -78,24 +78,24 @@ module.exports = {
       });
     });
   },
-  getImg:function(){
-    	var _self = this;
-    	Object.defineProperty(Image.prototype, 'authsrc', {
-      writable : true,
-      enumerable : true,
-      configurable : true,
+  getImg: function () {
+    var _self = this;
+    Object.defineProperty(Image.prototype, 'authsrc', {
+      writable: true,
+      enumerable: true,
+      configurable: true,
     });
     window.onload = () => {
       var imgs = document.getElementsByTagName('img');
-      for(var i=0,len=imgs.length;i<len;i++){
-            	_self.requsetImg(imgs[i]);
-	        }
+      for (var i = 0, len = imgs.length; i < len; i++) {
+        _self.requsetImg(imgs[i]);
+      }
     };
   },
-  requsetImg:function(img){
+  requsetImg: function (img) {
     var url = img.getAttribute('authsrc');
-    if(url != undefined && url != null){
-        	var request = new XMLHttpRequest();
+    if (url != undefined && url != null) {
+      var request = new XMLHttpRequest();
       request.responseType = 'blob';
       request.open('get', url, true);
       Common.addTokenToRequest(request);

+ 77 - 85
src/trace/TraceTimeLine.vue

@@ -17,10 +17,10 @@
     >
       <div class="panel-body">
         <div
-          v-for="(item) in timeLines"
+          v-for="item in timeLines"
           :key="item.id"
           class="after-selection--columns"
-          style="margin-top: 5px; cursor: pointer;"
+          style="margin-top: 5px; cursor: pointer"
         >
           <span>
             <Checkbox
@@ -32,23 +32,20 @@
             />
           </span>
 
-          <span
-            class="big-icon trace-summary"
-            @click="editTraceTimeLine(item)"
-          >
+          <span class="big-icon trace-summary" @click="editTraceTimeLine(item)">
             {{ item.content == undefined ? "请填写" : item.content }}
           </span>
 
-          <span
-            class="trace-summary"
-            @click="editTraceTimeLine(item)"
-          >
+          <span class="trace-summary" @click="editTraceTimeLine(item)">
             <span
               class="label"
-              :class="{'label-danger' : item.overdue == true, 'label-primary' : item.overdue != true}"
+              :class="{
+                'label-danger': item.overdue == true,
+                'label-primary': item.overdue != true,
+              }"
             >
               {{ item.userName == undefined ? "" : item.userName }}
-                            &nbsp;
+              &nbsp;
               {{ formatDate(item.endDate) }}
             </span>
           </span>
@@ -59,15 +56,12 @@
     <button
       v-if="trace.finished != true"
       type="button"
-      style="width: 100%;"
+      style="width: 100%"
       class="btn btn-default"
       aria-label="Left Align"
       @click="createTraceTimeLine"
     >
-      <span
-        class="glyphicon glyphicon-plus"
-        aria-hidden="true"
-      />添加时间节点
+      <span class="glyphicon glyphicon-plus" aria-hidden="true" />添加时间节点
     </button>
     <Loading ref="loading" />
   </div>
@@ -83,48 +77,48 @@ import MyProgress from '../widget/MyProgress.vue';
 var Checkbox = require('pc-component-v3').Checkbox;
 
 export default {
-
   components: {
-    MyProgress, Checkbox, Loading,
+    MyProgress,
+    Checkbox,
+    Loading,
   },
   props: ['traceId', 'trace'],
 
   data: function () {
     return {
-      'uuid': Uuid.createUUID(),
-      'timeLines': [
+      uuid: Uuid.createUUID(),
+      timeLines: [
         {
-          'id': undefined,
-          'traceId': undefined,
-          'userId': undefined,
-          'userName': undefined,
-          'content': undefined,
-          'endDate': undefined,
+          id: undefined,
+          traceId: undefined,
+          userId: undefined,
+          userName: undefined,
+          content: undefined,
+          endDate: undefined,
         },
       ],
-      'count': 0,
-      'number': 0,
-      'progress': 0,
-      'timeLine': {
-        'traceId': undefined,
-        'userId': undefined,
-        'userName': undefined,
-        'content': undefined,
-        'endDate': undefined,
+      count: 0,
+      number: 0,
+      progress: 0,
+      timeLine: {
+        traceId: undefined,
+        userId: undefined,
+        userName: undefined,
+        content: undefined,
+        endDate: undefined,
       },
       formatDate: TraceCommon.formatDate,
     };
   },
 
   watch: {
-    'traceId': function (curVal, oldVal) {
+    traceId: function (curVal, oldVal) {
       if (curVal != undefined) {
-            	this.refresh();
+        this.refresh();
       }
     },
   },
 
-
   mounted: function () {
     if (this.traceId != undefined) {
       this.refresh();
@@ -132,11 +126,10 @@ export default {
     }
   },
   methods: {
-
     /**
-         * 根据追踪单Id查询追踪时间节点数据
-         * @author GuoZhiBo 20171201
-         */
+     * 根据追踪单Id查询追踪时间节点数据
+     * @author GuoZhiBo 20171201
+     */
     getTimeLine: function () {
       var _self = this;
       $.ajax({
@@ -160,11 +153,10 @@ export default {
       });
     },
 
-
     /**
-         * 根据追踪单ID查询时间节点总数量
-         * @author GuoZhiBo 20171201
-         */
+     * 根据追踪单ID查询时间节点总数量
+     * @author GuoZhiBo 20171201
+     */
     getTimeLineCount: function () {
       var _self = this;
       $.ajax({
@@ -188,11 +180,10 @@ export default {
       });
     },
 
-
     /**
-         * 根据追踪单Id查询时间节点的完成数量
-         * @author GuoZhiBo 20171201
-         */
+     * 根据追踪单Id查询时间节点的完成数量
+     * @author GuoZhiBo 20171201
+     */
     getTimeLineNumber: function () {
       var _self = this;
       $.ajax({
@@ -216,23 +207,22 @@ export default {
       });
     },
 
-
     /**
-         * 计算progress
-         * @author GuoZhiBo 20171201
-         */
+     * 计算progress
+     * @author GuoZhiBo 20171201
+     */
     progresss: function () {
       var _self = this;
       if (_self.number == 0 || _self.count == 0) {
         _self.progress = 0;
       } else {
-        _self.progress = ((_self.number / _self.count).toFixed(2)) * 100;
+        _self.progress = (_self.number / _self.count).toFixed(2) * 100;
       }
     },
 
     /**
-         * 添加空的时间节点
-         */
+     * 添加空的时间节点
+     */
     addEmtpyTraceTimeLine: function () {
       var _self = this;
       if (_self.timeLines == undefined) {
@@ -240,21 +230,21 @@ export default {
       }
       for (var i = _self.timeLines.length; i < 1; i++) {
         var emtpyTraceTimeLine = {
-          'id': undefined,
-          'traceId': _self.traceId,
-          'userId': undefined,
-          'userName': undefined,
-          'content': undefined,
-          'endDate': undefined,
+          id: undefined,
+          traceId: _self.traceId,
+          userId: undefined,
+          userName: undefined,
+          content: undefined,
+          endDate: undefined,
         };
         _self.timeLines.push(emtpyTraceTimeLine);
       }
     },
 
     /**
-         * 编辑时间节点
-         * @param {Object} traceTimeLine
-         */
+     * 编辑时间节点
+     * @param {Object} traceTimeLine
+     */
     editTraceTimeLine: function (traceTimeLine) {
       var _self = this;
       this.$router.push({
@@ -266,9 +256,9 @@ export default {
     },
 
     /**
-         * 创建时间节点
-         */
-    createTraceTimeLine: function(){
+     * 创建时间节点
+     */
+    createTraceTimeLine: function () {
       var _self = this;
       this.$router.push({
         path: '/trace/traceTimeLineCreate/' + this.trace.id,
@@ -279,15 +269,17 @@ export default {
     },
 
     /**
-         * 打开或关闭时间节点
-         * @param {Object} traceTimeLine
-         */
+     * 打开或关闭时间节点
+     * @param {Object} traceTimeLine
+     */
     openCloseTraceTimeLine: function (traceTimeLine) {
       var _self = this;
       if (_self.trace.finished != true) {
         _self.$refs.loading.show();
         $.ajax({
-          url: Common.getApiURL('TraceTimeLineResource/updateTraceTimeLineFinished'),
+          url: Common.getApiURL(
+            'TraceTimeLineResource/updateTraceTimeLineFinished',
+          ),
           type: 'post',
           contentType: 'application/json',
           data: JSON.stringify(traceTimeLine),
@@ -310,8 +302,8 @@ export default {
     },
 
     /**
-		 * 刷新界面
-		 */
+     * 刷新界面
+     */
     refresh: function () {
       this.getTimeLine();
       this.getTimeLineCount();
@@ -323,25 +315,25 @@ export default {
 
 <style scoped>
 .mui-checkbox-self {
-    left: 0px !important;
-    top: 0px !important;
+  left: 0px !important;
+  top: 0px !important;
 }
 .font-color {
-    color: red;
+  color: red;
 }
 
 .big-icon {
-    font-size: large;
+  font-size: large;
 }
 
 .trace-summary {
-    font-size: large;
-    margin-left: 5px;
-    margin-right: 5px;
+  font-size: large;
+  margin-left: 5px;
+  margin-right: 5px;
 }
 
 .trace-checkbox {
-    display: inline;
-    font-size: large;
+  display: inline;
+  font-size: large;
 }
 </style>

+ 1 - 1
src/trace/TraceTimeLineCreate.vue

@@ -171,7 +171,7 @@ export default {
       $('#userName').select2({
         // 请求搜索框数据
         //data: 
-        placeholder: '用户',
+        // placeholder: '用户',
         minimumInputLength: 0,
         placeholderOption: 'first',
         quietMillis: 250,

+ 90 - 95
src/trace/TraceTimeLineEdit.vue

@@ -14,17 +14,14 @@
 <template>
   <div>
     <div>
-      <Navbar
-        title="时间节点"
-        :is-go-back="true"
-      />
+      <Navbar title="时间节点" :is-go-back="true" />
       <div>
         <div class="form-group">
           <label for="exampleInputEmail2">添加检查项</label>
           <textarea
             id="hcqk"
             v-model="traceTimeLine.content"
-            style="width: 100%;"
+            style="width: 100%"
             class="form-control"
             rows="5"
           />
@@ -33,7 +30,7 @@
           <label for="exampleInputEmail2">负责人</label>
           <select
             id="userName"
-            style="width: 100%;height: 30px;"
+            style="width: 100%; height: 30px"
             class="form-control js-data-example-ajax"
           />
         </div>
@@ -43,11 +40,11 @@
           <DateWidget
             v-model="traceTimeLine.endDate"
             :date-value="traceTimeLine.endDate"
-            style="width: 100%;"
+            style="width: 100%"
             @on-value-change="finishAfterDateChanged"
           />
         </div>
-        <div style="margin-top: 10px;">
+        <div style="margin-top: 10px">
           <button
             type="text"
             class="btn btn-default"
@@ -55,18 +52,10 @@
           >
             确认
           </button>
-          <button
-            type="text"
-            class="btn btn-default"
-            @click="returnBack()"
-          >
+          <button type="text" class="btn btn-default" @click="returnBack()">
             取消
           </button>
-          <button
-            type="text"
-            class="btn btn-default"
-            @click="deleteById()"
-          >
+          <button type="text" class="btn btn-default" @click="deleteById()">
             删除
           </button>
         </div>
@@ -85,7 +74,6 @@ var Notify = require('pc-component-v3').Notify;
 var Common = require('../common/Common.js');
 
 export default {
-
   components: {
     Navbar,
     Uuid,
@@ -96,19 +84,18 @@ export default {
   },
   data: function () {
     return {
-      traceTimeLineId: '',			// 追踪单(输入参数)
-      projectId: '',		// 项目Id
+      traceTimeLineId: '', // 追踪单(输入参数)
+      projectId: '', // 项目Id
       traceTimeLine: {
-        'trackId': undefined,
-        'userId': undefined,
-        'userName': undefined,
-        'content': undefined,
-        'endDate': undefined,
-      },	// 追踪单时间节点(输入参数)
+        trackId: undefined,
+        userId: undefined,
+        userName: undefined,
+        content: undefined,
+        endDate: undefined,
+      }, // 追踪单时间节点(输入参数)
     };
   },
 
-
   mounted: function () {
     $('.input-tan').focus(function () {
       document.activeElement.blur();
@@ -118,8 +105,8 @@ export default {
 
   methods: {
     /**
-         * 初始化数据
-         */
+     * 初始化数据
+     */
     initData: function () {
       var _self = this;
       this.traceTimeLineId = Number(this.$route.params.traceTimeLineId);
@@ -128,8 +115,8 @@ export default {
     },
 
     /**
-		 * 加载时间节点Id
-		 */
+     * 加载时间节点Id
+     */
     loadTraceTimeLine: function () {
       var _self = this;
       $.ajax({
@@ -144,7 +131,7 @@ export default {
         },
         success: function (data) {
           _self.traceTimeLine = data;
-            		_self.loadSelectUserName();
+          _self.loadSelectUserName();
           _self.$refs.loading.hide();
         },
         error: function (XMLHttpRequest, textStatus, errorThrown) {
@@ -154,17 +141,22 @@ export default {
       });
     },
 
-
     /**@argument
-         * 保存当前时间节点数据
-         */
+     * 保存当前时间节点数据
+     */
     saveTraceTimeLine: function () {
       var _self = this;
       _self.traceTimeLine.traceId = _self.traceId;
       var content = _self.traceTimeLine.content;
       var dates = _self.traceTimeLine.endDate;
 
-      if (content != null && content != '' && dates != null && dates != undefined && dates != '') {
+      if (
+        content != null &&
+        content != '' &&
+        dates != null &&
+        dates != undefined &&
+        dates != ''
+      ) {
         _self.$refs.loading.show();
         $.ajax({
           url: Common.getApiURL('TraceTimeLineResource/saveTraceTimeLine'),
@@ -187,13 +179,11 @@ export default {
         _self.$refs.loading.hide();
         Notify.error('提示', '请将界面内容填写完整!');
       }
-
     },
 
-
     /**@argument
-         * 根据时间节点ID删除时间节点信息
-         */
+     * 根据时间节点ID删除时间节点信息
+     */
     deleteById: function () {
       var _self = this;
       _self.$refs.loading.show();
@@ -217,75 +207,80 @@ export default {
       });
     },
 
-
     /**@argument
-         * 返回上一界面
-         */
+     * 返回上一界面
+     */
     returnBack: function () {
       history.back();
     },
 
     /**@argument
-         * 时间改变触发事件
-         */
+     * 时间改变触发事件
+     */
     finishAfterDateChanged: function (value) {
       var _self = this;
       _self.traceTimeLine.endDate = value;
     },
     /**
-         * 加载用户
-         */
+     * 加载用户
+     */
     loadSelectUserName: function () {
       var _self = this;
-      $('#userName').select2({
-        // 请求搜索框数据
-        //data: 
-        placeholder: '用户',
-        minimumInputLength: 0,
-        placeholderOption: 'first',
-        quietMillis: 250,
-        allowClear: true,
-        language: 'zh-CN',
-        width: '100%',
-        placeholder: { id: _self.traceTimeLine.userId, text: _self.traceTimeLine.userName },
-        // 请求搜索框数据
-        ajax: {
-          url: function (params) {
-            return Common.getApiURL('ProjectItemUserResource/listByProjectItemId?projectItemId=' + _self.projectId);//通过项目Id查找有权操作的项目的用户
-          },
-          dataType: 'json',
-          type: 'get',
-          delay: 250,
-          minimumInputLength: 1,
-          transport: function (params, success, failure) {
-            params.beforeSend = Common.addTokenToRequest;
-            params.error = Common.processException;
-            var $request = $.ajax(params);
-            $request.then(success);
-            $request.fail(failure);
-            return $request;
+      $('#userName')
+        .select2({
+          // 请求搜索框数据
+          //data:
+          // placeholder: '用户',
+          minimumInputLength: 0,
+          placeholderOption: 'first',
+          quietMillis: 250,
+          allowClear: true,
+          language: 'zh-CN',
+          width: '100%',
+          placeholder: {
+            id: _self.traceTimeLine.userId,
+            text: _self.traceTimeLine.userName,
           },
-          data: function (params) {
-            return {
-
-            };
-          },
-          processResults: function (data, params) {
-            var more = (params * 10) <= data.length;
-            for (var i = 0; i < data.length; i++) {
-              data[i].id = data[i].userId;
-              data[i].text = data[i].userName;
-            }
-            return {
-              results: data,
-              more: more,
-            };
+          // 请求搜索框数据
+          ajax: {
+            url: function (params) {
+              return Common.getApiURL(
+                'ProjectItemUserResource/listByProjectItemId?projectItemId=' +
+                  _self.projectId,
+              ); //通过项目Id查找有权操作的项目的用户
+            },
+            dataType: 'json',
+            type: 'get',
+            delay: 250,
+            minimumInputLength: 1,
+            transport: function (params, success, failure) {
+              params.beforeSend = Common.addTokenToRequest;
+              params.error = Common.processException;
+              var $request = $.ajax(params);
+              $request.then(success);
+              $request.fail(failure);
+              return $request;
+            },
+            data: function (params) {
+              return {};
+            },
+            processResults: function (data, params) {
+              var more = params * 10 <= data.length;
+              for (var i = 0; i < data.length; i++) {
+                data[i].id = data[i].userId;
+                data[i].text = data[i].userName;
+              }
+              return {
+                results: data,
+                more: more,
+              };
+            },
           },
-        },
-      }).on('change', function () {
-        _self.traceTimeLine.userId = $(this).val();
-        _self.traceTimeLine.userName = $(this).text();
-      });
+        })
+        .on('change', function () {
+          _self.traceTimeLine.userId = $(this).val();
+          _self.traceTimeLine.userName = $(this).text();
+        });
     },
   },
 };

+ 107 - 111
src/widget/AudioField.vue

@@ -5,29 +5,23 @@
 -->
 <template>
   <div>
-    <div v-if="isReadonly == 'false'" style="margin-bottom: 10px;">
+    <div v-if="isReadonly == 'false'" style="margin-bottom: 10px">
       <button
         type="button"
         class="btn btn-info"
         @mousedown.prevent="mouseStart"
       >
-        <span
-          class="glyphicon glyphicon-volume-up"
-          aria-hidden="true"
-        />
+        <span class="glyphicon glyphicon-volume-up" aria-hidden="true" />
         {{ tiptext }}
       </button>
     </div>
     <template v-if="srcArray.length > 0">
       <div
-        v-for="(item,index) in srcArray"
+        v-for="(item, index) in srcArray"
         :key="index"
         style="margin-bottom: 10px; display: inline-flex; align-items: center"
       >
-        <AuthAudio
-          :audio-src="getUrl(item)"
-          :token="token"
-        />
+        <AuthAudio :audio-src="getUrl(item)" :token="token" />
         <button
           v-if="isReadonly == 'false'"
           type="button"
@@ -35,10 +29,7 @@
           style="flex: 1"
           @click="deleteAudioSrc(index)"
         >
-          <span
-            class="glyphicon glyphicon-remove"
-            aria-hidden="true"
-          /> 删除
+          <span class="glyphicon glyphicon-remove" aria-hidden="true" /> 删除
         </button>
 
         <div class="clearfix" />
@@ -75,25 +66,29 @@ export default {
       audioFileList: [], // 上传语音列表
       startTime: '', // 语音开始时间
       endTime: '', // 语音结束
-      flag:true,
+      flag: true,
     };
   },
-  unmounted: function(){
-    if(this.recorder) {  
-      this.recorder.stop(); 
-      this.clearTimer();  
-    }  
+  unmounted: function () {
+    if (this.recorder) {
+      this.recorder.stop();
+      this.clearTimer();
+    }
   },
   methods: {
     getUrl: function (item) {
       var _self = this;
-      var url = Common.getApiURL('file/audioDownload') + '?className=' + _self.className
-                + '&fileName=' + item;
+      var url =
+        Common.getApiURL('file/audioDownload') +
+        '?className=' +
+        _self.className +
+        '&fileName=' +
+        item;
       return url;
     },
     /**
-         * 清除定时器
-         */
+     * 清除定时器
+     */
     clearTimer: function () {
       if (this.interval) {
         this.num = 60;
@@ -101,52 +96,53 @@ export default {
       }
     },
     /**
-         * 长按说话
-         */
-    mouseStart: function() {
+     * 长按说话
+     */
+    mouseStart: function () {
       var _self = this;
-      this.clearTimer();    
-      this.startTime = new Date().getTime();   
-      recording.get(rec => {     // 当首次按下时,要获取浏览器的麦克风权限,所以这时要做一个判断处理
-        if(rec) {      
-          if(this.flag) {
+      this.clearTimer();
+      this.startTime = new Date().getTime();
+      recording.get(rec => {
+        // 当首次按下时,要获取浏览器的麦克风权限,所以这时要做一个判断处理
+        if (rec) {
+          if (this.flag) {
             this.recorder = rec;
-            this.interval = setInterval(() => {  
+            this.interval = setInterval(() => {
               this.mcounter = this.mcounter + 1;
-              this.tiptext = '录音中 ' + this.mcounter + 's';     
-              if(this.num <= 0) {        
-                rec.stop();         
-                this.num = 60;         
-                this.clearTimer();       
-              } else {        
-                this.num--;        
-                this.time = '松开结束(' + this.num + '秒)';        
-                rec.start();       
-              }       
-            }, 1000);  
-            this.flag = false;  
-          } else { 
-            this.flag = true;   
-            this.clearTimer();   
-            this.endTime = new Date().getTime();  
+              this.tiptext = '录音中 ' + this.mcounter + 's';
+              if (this.num <= 0) {
+                rec.stop();
+                this.num = 60;
+                this.clearTimer();
+              } else {
+                this.num--;
+                this.time = '松开结束(' + this.num + '秒)';
+                rec.start();
+              }
+            }, 1000);
+            this.flag = false;
+          } else {
+            this.flag = true;
+            this.clearTimer();
+            this.endTime = new Date().getTime();
             this.recorder.stop();
-            rec.stop();  
+            rec.stop();
             // 重置说话时间
             this.tiptext = '按住说话';
-            if(this.mcounter > 0){
+            if (this.mcounter > 0) {
               this.num = 60;
               // 获取语音二进制文件
-              let blob = this.recorder.getBlob();    
-              this.audioUpload(blob);   
+              let blob = this.recorder.getBlob();
+              this.audioUpload(blob);
               this.mcounter = 0;
-            }   
-          }    
-        }   
-      });  
+            }
+          }
+        }
+      });
     },
     /**
-         * 松开时上传语音
-         */
+     * 松开时上传语音
+     */
     mouseEnd: function () {
       var _self = this;
       this.clearTimer();
@@ -162,24 +158,24 @@ export default {
       }
     },
     /**
-         * 删除语音
-         * @param {Object} index
-         */
+     * 删除语音
+     * @param {Object} index
+     */
     deleteAudioSrc: function (index) {
       var _self = this;
       _self.$emit('deleteAudioSrc', index);
     },
     /**
-         * 长按
-         */
+     * 长按
+     */
     longTap: function () {
       var _self = this;
       _self.mouseStart();
       console.log('开始录音');
     },
     /**
-         * 移动
-         */
+     * 移动
+     */
     touchMove: function () {
       var _self = this;
       console.log('取消录音');
@@ -187,17 +183,17 @@ export default {
       _self.mouseEnd();
     },
     /**
-         * 结束
-         */
+     * 结束
+     */
     touchEnd: function () {
       var _self = this;
       console.log('结束录音');
       _self.mouseEnd();
     },
     /**
-         * 上传语音
-         * @param {Object} blob
-         */
+     * 上传语音
+     * @param {Object} blob
+     */
     audioUpload: function (blob) {
       var fileName;
       var _self = this;
@@ -248,58 +244,58 @@ export default {
 </script>
 <style scoped>
 .wrapper {
-    text-align: center;
+  text-align: center;
 }
 
 .mrecorder {
-    width: 40px;
-    height: 40px;
-    font-size: 40px;
+  width: 40px;
+  height: 40px;
+  font-size: 40px;
 }
 
 .anirecorder {
-    position: relative;
-    animation: mymove 5s infinite;
-    -webkit-animation: mymove 5s infinite;
-    animation-direction: alternate;
-    animation-timing-function: ease-in-out;
-    /*safari & chrome*/
-    -webkit-animation-direction: alternate;
-    -webkit-transition-timing-function: ease-in-out;
+  position: relative;
+  animation: mymove 5s infinite;
+  -webkit-animation: mymove 5s infinite;
+  animation-direction: alternate;
+  animation-timing-function: ease-in-out;
+  /*safari & chrome*/
+  -webkit-animation-direction: alternate;
+  -webkit-transition-timing-function: ease-in-out;
 }
 
 @keyframes mymove {
-    0% {
-        transform: scale(1);
-        /*开始为原始大小*/
-    }
-    25% {
-        transform: scale(1.1);
-        /*放大1.1倍*/
-    }
-    50% {
-        transform: scale(0.9);
-    }
-    75% {
-        transform: scale(1.1);
-    }
+  0% {
+    transform: scale(1);
+    /*开始为原始大小*/
+  }
+  25% {
+    transform: scale(1.1);
+    /*放大1.1倍*/
+  }
+  50% {
+    transform: scale(0.9);
+  }
+  75% {
+    transform: scale(1.1);
+  }
 }
 
 @-webkit-keyframes mymove
 	/*Safari and Chrome*/ {
-    0% {
-        transform: scale(1);
-        /*开始为原始大小*/
-    }
-    25% {
-        transform: scale(1.1);
-        /*放大1.1倍*/
-    }
-    50% {
-        transform: scale(0.9);
-    }
-    75% {
-        transform: scale(1.1);
-    }
+  0% {
+    transform: scale(1);
+    /*开始为原始大小*/
+  }
+  25% {
+    transform: scale(1.1);
+    /*放大1.1倍*/
+  }
+  50% {
+    transform: scale(0.9);
+  }
+  75% {
+    transform: scale(1.1);
+  }
 }
 </style>

+ 6 - 6
src/widget/GanttScale2.vue

@@ -34,7 +34,7 @@
               <div class="col-xs-8 col-sm-9 col-md-10 col-lg-11">
                 <select v-model="selected" class="form-control">
                   <option value="">选择一个模板</option>
-                  <option v-for="template in templates">{{ template }}</option>
+                  <option v-for="template in templates" :key="template">{{ template }}</option>
                 </select>
               </div>
             </div>
@@ -188,7 +188,7 @@ module.exports = {
         gantt.templates.date_scale = null;
         break;
       case 2:
-        var weekScaleTemplate = function(date) {
+        weekScaleTemplate = function(date) {
           var dateToStr = gantt.date.date_to_str('%M %d日');
           var startDate = gantt.date.week_start(new Date(date));
           var endDate = gantt.date.add(
@@ -344,8 +344,8 @@ module.exports = {
 								}); */
       var links = gantt.getLinks();
       var links2 = [];
-      for (var x = 0; x < links.length; x++) {
-        var event = {
+      for (let x = 0; x < links.length; x++) {
+        let event = {
           id: links[x].id,
           predecessorTaskId: links[x].source,
           taskId: links[x].target,
@@ -416,8 +416,8 @@ module.exports = {
             };
             events.push(event);
           }
-          for (var i = 0; i < projectTaskRelationDtos.length; i++) {
-            var event = {
+          for (let i = 0; i < projectTaskRelationDtos.length; i++) {
+            let event = {
               id: projectTaskRelationDtos[i].id,
               source: projectTaskRelationDtos[i].predecessorTaskId,
               target: projectTaskRelationDtos[i].taskId,

+ 23 - 17
src/widget/TreeSelect.vue

@@ -1,43 +1,49 @@
 <template>
   <div>
-    <treeselect v-model="value" :multiple="multiple" :options="options" placeholder="请选择时间节点" no-results-text="没有结果" />
+    <treeselect
+      v-model="value"
+      :multiple="multiple"
+      :options="options"
+      placeholder="请选择时间节点"
+      no-results-text="没有结果"
+    />
   </div>
 </template>
 
 <script>
 // import the component
-  	// import Treeselect from '@riophae/vue-treeselect'
+// import Treeselect from '@riophae/vue-treeselect'
 // import the styles
 // import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 export default {
-  components: { 
-    Treeselect, 
+  components: {
+    // Treeselect,
   },
-  props: ['multiple','options'],
-  data: function(){
+  props: ['multiple', 'options'],
+  data: function () {
     return {
-      'value': undefined,
+      value: undefined,
     };
   },
-		
+
   watch: {
-    'value' : function(curVal, oldVal){
+    value: function (curVal, oldVal) {
       this.$emit('valueChanged', curVal);
     },
   },
   methods: {
     /**
-			 * 获取选中的值
-			 */
-    getValue: function(){
+     * 获取选中的值
+     */
+    getValue: function () {
       return this.value;
     },
-			
+
     /**
-			 * 设置值
-			 * @param {Object} value
-			 */
-    setValue: function(value){
+     * 设置值
+     * @param {Object} value
+     */
+    setValue: function (value) {
       this.value = value;
     },
   },

+ 3 - 0
vue.config.js

@@ -0,0 +1,3 @@
+module.exports = {
+    lintOnSave: false
+}

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff