liuyanpeng 3 лет назад
Родитель
Сommit
70f590543e

+ 60 - 83
src/trace/CompleteProjectList.vue

@@ -9,38 +9,21 @@
           @value-changed="getDatas()"
         />
         <p
-          v-if="projectList == null || projectList.length == 0" class="bg-danger"                    
-          style="padding: 15px; margin-top:15px"
+          v-if="projectList == null || projectList.length == 0"
+          class="bg-danger"
+          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:green"
-                    >
-                      参与中
-                    </span>
+                    <span v-if="item.admin" style="color: green"> 参与中 </span>
                   </div>
                 </div>
               </div>
@@ -58,11 +41,7 @@
         </div>
 
         <hr />
-        <button
-          type="button"
-          class="btn btn-link"
-          @click="isTheArchive"
-        >
+        <button type="button" class="btn btn-link" @click="isTheArchive">
           进行中的项目
         </button>
       </div>
@@ -72,18 +51,17 @@
   </div>
 </template>
 
-<script> 
+<script>
 import Common from '../common/Common.js';
 
-
 import QueryWidget from '../widget/QueryWidget.vue';
 import TraceHeader from './TraceHeader.vue';
 import { Uuid } from 'pc-component-v3';
 
-
 export default {
   components: {
-    QueryWidget,  TraceHeader,
+    QueryWidget,
+    TraceHeader,
   },
   data: function () {
     return {
@@ -99,9 +77,9 @@ 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
       },
       traceState: undefined,
       traceStatus: undefined,
@@ -133,9 +111,9 @@ export default {
   },
   methods: {
     /**
-         * 查询数据
-         * @author ZhangTeng 20190220
-         */
+     * 查询数据
+     * @author ZhangTeng 20190220
+     */
     getDatas: function () {
       var _self = this;
 
@@ -150,7 +128,9 @@ export default {
       };
 
       $.ajax({
-        url: Common.getApiURL('ProjectItemUserResource/queryProjectItemUserDto2'),
+        url: Common.getApiURL(
+          'ProjectItemUserResource/queryProjectItemUserDto2',
+        ),
         type: 'post',
         dataType: 'json',
         contentType: 'application/json',
@@ -161,7 +141,10 @@ export default {
         success: function (data) {
           _self.projectList = data.dataList;
           _self.pagination.total = data.totalSize;
-          _self.pagination.last_page = ((data.totalSize % data.range.length) == 0) ? (data.totalSize / data.range.length) : (Math.floor(data.totalSize / data.range.length) + 1);
+          _self.pagination.last_page =
+            data.totalSize % data.range.length == 0
+              ? data.totalSize / data.range.length
+              : Math.floor(data.totalSize / data.range.length) + 1;
         },
         error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
@@ -170,89 +153,83 @@ export default {
     },
 
     /**
-         * 显示归档/未归档的项目
-         */
+     * 显示归档/未归档的项目
+     */
     isTheArchive: function () {
-      let routeData  = this.$router.push({path: '/trace/projectList'});
-      window.open(routeData.href, '_blank');
+      this.$router.push({ path: '/trace/projectList' });
     },
     /**
-         * 打开明细
-         */
+     * 打开明细
+     */
     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>

+ 3 - 3
src/trace/FinishedProjectTraces.vue

@@ -23,14 +23,14 @@
           @click="projectManagement(projectId)"
         >
           项目任务
-        </button>
+        </button>&nbsp;
         <button
           class="btn btn-link"
           style="padding: 0px;"
           @click="projectArchive(projectId)"
         >
           项目归档
-        </button>
+        </button>&nbsp;
         <button
           class="btn btn-link"
           style="padding: 0px;"
@@ -54,7 +54,7 @@
         style="margin-bottom: 10px;margin-top: 10px;"
       >
         <div class="panel-body">
-          <vuedraggable v-model="finishedTraces" item-key="id" class="wrapper" @change="end">
+          <vuedraggable v-model="finishedTraces" :disabled="true" item-key="id" class="wrapper" @change="end">
             <template #item="{element}">
               <div style="margin-top: 5px; cursor: pointer;">
                 <span>

+ 240 - 152
src/trace/NotFinishedProjectTraces.vue

@@ -1,10 +1,22 @@
 <template>
   <div>
     <Navbar :title="projectName" :is-go-back="true">
-      <button v-if="adminUserShow" type="button" class="btn btn-link" style="padding: 5px;" @click="goAdminPersonList()">
+      <button
+        v-if="adminUserShow"
+        type="button"
+        class="btn btn-link"
+        style="padding: 5px"
+        @click="goAdminPersonList()"
+      >
         编辑项目管理员({{ projectAdminUsers.length }})
       </button>
-      <button v-if="userShow" type="button" class="btn btn-link" style="padding: 5px;" @click="goPersonList()">
+      <button
+        v-if="userShow"
+        type="button"
+        class="btn btn-link"
+        style="padding: 5px"
+        @click="goPersonList()"
+      >
         编辑项目人员({{ projectUsers.length }})
       </button>
     </Navbar>
@@ -12,64 +24,138 @@
     <h4>
       未完成的任务({{ pagination.total }})
       <div class="pull-right">
-        <button v-if="timeShow" class="btn btn-link" style="padding: 0px;" @click="projectManagement(projectId)">项目任务</button>
-        <button class="btn btn-link" style="padding: 0px;" @click="projectArchive(projectId)">项目归档</button>
-        <button class="btn btn-link" style="padding: 0px;" @click="addTrace(projectId)">添加任务</button>
+        <button
+          v-if="timeShow"
+          class="btn btn-link"
+          style="padding: 0px"
+          @click="projectManagement(projectId)"
+        >
+          项目任务
+        </button>&nbsp;
+        <button
+          class="btn btn-link"
+          style="padding: 0px"
+          @click="projectArchive(projectId)"
+        >
+          项目归档
+        </button>&nbsp;
+        <button
+          class="btn btn-link"
+          style="padding: 0px"
+          @click="addTrace(projectId)"
+        >
+          添加任务
+        </button>
       </div>
     </h4>
     <div class="m-container">
       <div class="input-group">
-        <input v-model="content" autocomplete="off" type="text" class="form-control" placeholder="任务名称、任务内容" @blur="listNotFinishedTask" @keyup.enter="listNotFinishedTask" />
+        <input
+          v-model="content"
+          autocomplete="off"
+          type="text"
+          class="form-control"
+          placeholder="任务名称、任务内容"
+          @blur="listNotFinishedTask"
+          @keyup.enter="listNotFinishedTask"
+        />
         <span class="input-group-btn">
-          <button style="width:100%;background-color: #007aff;color: white;" type="button" class="btn btn-blue search-button" @click="listNotFinishedTask()">
+          <button
+            style="width: 100%; background-color: #007aff; color: white"
+            type="button"
+            class="btn btn-blue search-button"
+            @click="listNotFinishedTask()"
+          >
             查询
           </button>
         </span>
       </div>
     </div>
-    <div class="panel panel-default" style="margin-bottom: 10px;margin-top: 10px;">
+    <div
+      class="panel panel-default"
+      style="margin-bottom: 10px; margin-top: 10px"
+    >
       <div class="panel-body">
-        <vuedraggable v-model="noFinishedTraces" item-key="id" class="wrapper" :delay="500" :delay-on-touch-only="true" @change="end">
-          <template #item="{element}">
-            <div style="margin-top: 5px; cursor: pointer;">
+        <vuedraggable
+          v-model="noFinishedTraces"
+          item-key="id"
+          class="wrapper"
+          :disabled="true"
+          :delay="500"
+          :delay-on-touch-only="true"
+          @change="end"
+        >
+          <template #item="{ element }">
+            <div style="margin-top: 5px; cursor: pointer">
               <span>
                 <span>
                   <Checkbox
-                    :id="'trace-finish-' + element.id" v-model="element.finished" class-name="terms" class="trace-checkbox"
+                    :id="'trace-finish-' + element.id"
+                    v-model="element.finished"
+                    class-name="terms"
+                    class="trace-checkbox"
                     @input="updateTracefinished(element)"
                   />
                 </span>
                 <span @click="openLine(element)">
                   <!-- eslint-disable-next-line -->
-                    <span class="trace-summary" :class="{'font-color': element.timeLineCompletion==true}" v-html="element.summary" />
-                  <span class="glyphicon glyphicon-option-vertical trace-icon" aria-hidden="true" />
-                  <span class="label trace-user" :class="{'label-danger' : element.overdue == true, 'label-primary' : element.overdue != true}">
+                  <span class="trace-summary" :class="{ 'font-color': element.timeLineCompletion == true, }" v-html="element.summary" />
+                  <span
+                    class="glyphicon glyphicon-option-vertical trace-icon"
+                    aria-hidden="true"
+                  />
+                  <span
+                    class="label trace-user"
+                    :class="{
+                      'label-danger': element.overdue == true,
+                      'label-primary': element.overdue != true,
+                    }"
+                  >
                     <!-- eslint-disable-next-line -->
-                      <span v-html="element.receiveUserName" />&nbsp;
+                    <span v-html="element.receiveUserName" />&nbsp;
                     <span>{{ formatDate(element.planFinishedDate) }}</span>
                   </span>
                 </span>
               </span>
-              <a class="fa-pull-right" style="color: blue;" @click="edit(element)">编辑</a>
+              <a
+                class="fa-pull-right"
+                style="color: blue"
+                @click="edit(element)"
+              >编辑</a>
             </div>
           </template>
         </vuedraggable>
       </div>
     </div>
-    <div v-if="noFinishedTraces.length" class="row" style="margin-left:0px; margin-right: 0px;">
+    <div
+      v-if="noFinishedTraces.length"
+      class="row"
+      style="margin-left: 0px; margin-right: 0px"
+    >
       <div class="pull-left">
-        <span>第{{ (pagination.current_page-1)*pagination.per_page+1 }}-{{ pagination.current_page*pagination.per_page }}条,共计{{ pagination.total }}条,每页显示</span>
+        <span>第{{ (pagination.current_page - 1) * pagination.per_page + 1 }}-{{
+          pagination.current_page * pagination.per_page
+        }}条,共计{{ pagination.total }}条 ,每页显示</span>
         <PageSizeSelect @page-size-changed="gridSizeSelect" />
         <span>条</span>
       </div>
 
       <div class="pull-right">
-        <VueBootstrapPagination :pagination="pagination" :callback="listNotFinishedTask" @click="updateRouter" />
+        <VueBootstrapPagination
+          :pagination="pagination"
+          :callback="listNotFinishedTask"
+          @click="updateRouter"
+        />
       </div>
     </div>
     <hr />
 
-    <button type="button" class="btn btn-link" style="color:green" @click="openFinishedProjectTraces">
+    <button
+      type="button"
+      class="btn btn-link"
+      style="color: green"
+      @click="openFinishedProjectTraces"
+    >
       查看已完成的任务
     </button>
   </div>
@@ -77,22 +163,15 @@
 
 <script>
 import Common from '../common/Common.js';
-
 import TraceCommon from './TraceCommon.js';
 import TraceResource from './TraceResource.js';
-
-;
-
 import vuedraggable from 'vuedraggable';
 
 export default {
   components: {
-    
-    
     vuedraggable,
-    
   },
-  data: function() {
+  data: function () {
     return {
       finishedTraces: [], //已完成的任务
       projectUsers: [],
@@ -113,8 +192,16 @@ export default {
       content: undefined,
     };
   },
-
-  mounted: function() {
+  watch: {
+    // 监听路由是否变化
+    $route(to, from) {
+      if (to.query.currentPage != from.query.currentPage) {
+        this.pagination.current_page = to.query.currentPage;
+        this.listNotFinishedTask();
+      }
+    },
+  },
+  mounted: function () {
     var _self = this;
     this.projectId = _self.$route.params.projectId;
     this.projectName = _self.$route.query.projectName;
@@ -126,7 +213,7 @@ export default {
     this.personnelJurisdictionSet();
   },
   methods: {
-    gridSizeSelect: function(newPageSize) {
+    gridSizeSelect: function (newPageSize) {
       this.pagination.per_page = newPageSize;
       this.pagination.current_page = 1;
       // 刷新界面
@@ -140,29 +227,29 @@ export default {
         dataType: 'json',
         contentType: 'application/json',
         data: {
-          'id': evt.moved.element.id,
-          'projectId': _self.projectId,
-          'oldIndex': evt.moved.oldIndex,
-          'newIndex': evt.moved.newIndex,
-          'currentPage': _self.pagination.current_page,
-          'pageSize': _self.pagination.per_page,
-          'content': _self.content,
+          id: evt.moved.element.id,
+          projectId: _self.projectId,
+          oldIndex: evt.moved.oldIndex,
+          newIndex: evt.moved.newIndex,
+          currentPage: _self.pagination.current_page,
+          pageSize: _self.pagination.per_page,
+          content: _self.content,
         },
-        beforeSend: function(request) {
+        beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },
-        success: function(data) {
+        success: function (data) {
           _self.listNotFinishedTask();
         },
-        error: function(XMLHttpRequest, textStatus, errorThrown) {
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
         },
       });
     },
     /**
-			 * 编辑
-			 */
-    edit: function(trace) {
+     * 编辑
+     */
+    edit: function (trace) {
       var _self = this;
       this.$router.push('/trace/traceUpdate/' + trace.id);
     },
@@ -176,17 +263,13 @@ export default {
           pageSize: this.pagination.per_page,
         },
       });
-
-      console.log(this.$route);
-      // console.log(this.$router.query.currentPage);
-      // console.log(this.$router.query.pageSize);
       this.listNotFinishedTask();
     },
 
     /**
-			 * 打开已完成的项目任务
-			 */
-    openFinishedProjectTraces: function() {
+     * 打开已完成的项目任务
+     */
+    openFinishedProjectTraces: function () {
       var _self = this;
       this.$router.push({
         path: '/trace/finishedProjectTraces/' + _self.projectId,
@@ -196,10 +279,9 @@ export default {
           pageSize: 10,
         },
       });
-      
     },
 
-    listNotFinishedTask: function() {
+    listNotFinishedTask: function () {
       var _self = this;
       _self.noFinishedTraces.splice(0, _self.noFinishedTraces.length);
       $.ajax({
@@ -208,30 +290,32 @@ export default {
         dataType: 'json',
         contentType: 'application/json',
         data: {
-          'projectId': _self.projectId,
-          'currentPage': _self.pagination.current_page,
-          'pageSize': _self.pagination.per_page,
-          'content': _self.content,
+          projectId: _self.projectId,
+          currentPage: _self.pagination.current_page,
+          pageSize: _self.pagination.per_page,
+          content: _self.content,
         },
-        beforeSend: function(request) {
+        beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },
-        success: function(data) {
-          if(data == null) {
+        success: function (data) {
+          if (data == null) {
             return;
           }
           _self.pagination.total = data.totalSize;
-          _self.pagination.last_page = Math.ceil(_self.pagination.total / _self.pagination.per_page);
+          _self.pagination.last_page = Math.ceil(
+            _self.pagination.total / _self.pagination.per_page,
+          );
           _self.noFinishedTraces = data.traceDtos;
           console.log(_self.noFinishedTraces);
         },
-        error: function(XMLHttpRequest, textStatus, errorThrown) {
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
         },
       });
     },
     //查询登录用户权限
-    personnelJurisdictionSet: function() {
+    personnelJurisdictionSet: function () {
       var _self = this;
       $.ajax({
         url: Common.getApiURL('TraceResource/queryPersonnelJurisdiction'),
@@ -239,41 +323,41 @@ export default {
         dataType: 'json',
         contentType: 'application/json',
         data: {
-          'projectId': _self.projectId,
+          projectId: _self.projectId,
         },
-        beforeSend: function(request) {
+        beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },
-        success: function(data) {
-          if(data == null) {
+        success: function (data) {
+          if (data == null) {
             return;
           }
-          if(data.levelOfPerson == 1) {
+          if (data.levelOfPerson == 1) {
             _self.timeShow = true;
             return;
           }
-          if(data.levelOfPerson == 2) {
-            _self.timeShow = true,
-            _self.adminUserShow = false,
-            _self.userShow = true;
+          if (data.levelOfPerson == 2) {
+            (_self.timeShow = true),
+            (_self.adminUserShow = false),
+            (_self.userShow = true);
           }
-          if(data.levelOfPerson == 3) {
-            _self.timeShow = true,
-            _self.adminUserShow = true,
-            _self.userShow = true;
+          if (data.levelOfPerson == 3) {
+            (_self.timeShow = true),
+            (_self.adminUserShow = true),
+            (_self.userShow = true);
           }
         },
-        error: function(XMLHttpRequest, textStatus, errorThrown) {
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
         },
       });
     },
 
     /**
-			 * 初始化接收该项目的人数
-			 * @author ZhangTeng 20190212
-			 */
-    personNumber: function() {
+     * 初始化接收该项目的人数
+     * @author ZhangTeng 20190212
+     */
+    personNumber: function () {
       var _self = this;
       _self.projectUsers.splice(0, _self.projectUsers.length);
 
@@ -283,32 +367,32 @@ export default {
         dataType: 'json',
         contentType: 'application/json',
         data: {
-          'projectId': _self.projectId,
+          projectId: _self.projectId,
         },
-        beforeSend: function(request) {
+        beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },
-        success: function(data) {
-          if(data == null) {
+        success: function (data) {
+          if (data == null) {
             return;
           }
           console.log(data);
-          for(var index = 0; index < data.length; index++) {
+          for (var index = 0; index < data.length; index++) {
             _self.projectUsers[index] = data[index];
             // _self.$set(_self.projectUsers, index, data[index]);
           }
         },
-        error: function(XMLHttpRequest, textStatus, errorThrown) {
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
         },
       });
     },
 
     /**
-			 * 初始化接收该项目的管理员人数
-			 * @author TangWenXiang 20191009
-			 */
-    adminPersonNumber: function() {
+     * 初始化接收该项目的管理员人数
+     * @author TangWenXiang 20191009
+     */
+    adminPersonNumber: function () {
       var _self = this;
       _self.projectAdminUsers.splice(0, _self.projectUsers.length);
 
@@ -318,49 +402,49 @@ export default {
         dataType: 'json',
         contentType: 'application/json',
         data: {
-          'projectId': _self.projectId,
+          projectId: _self.projectId,
         },
-        beforeSend: function(request) {
+        beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },
-        success: function(data) {
-          if(data == null) {
+        success: function (data) {
+          if (data == null) {
             return;
           }
-          for(var index = 0; index < data.length; index++) {
+          for (var index = 0; index < data.length; index++) {
             _self.projectAdminUsers[index] = data[index];
             // _self.$set(_self.projectAdminUsers, index, data[index]);
           }
         },
-        error: function(XMLHttpRequest, textStatus, errorThrown) {
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
         },
       });
     },
     /**
-			 * 打开明细
-			 * @author ZhangTeng 20190131
-			 */
-    openLine: function(obj) {
+     * 打开明细
+     * @author ZhangTeng 20190131
+     */
+    openLine: function (obj) {
       this.$router.push({
         path: '/trace/trace/' + obj.id,
       });
     },
 
     /**
-			 * 添加任务
-			 * @author ZhangTeng 20190201
-			 */
-    addTrace: function(projectId) {
+     * 添加任务
+     * @author ZhangTeng 20190201
+     */
+    addTrace: function (projectId) {
       this.$router.push('/trace/traceCreate/' + projectId);
     },
 
     /**
-			 * 项目归档
-			 * @param {Object} projectId
-			 * @author GuoZhiBo 20190926
-			 */
-    projectArchive: function(projectId) {
+     * 项目归档
+     * @param {Object} projectId
+     * @author GuoZhiBo 20190926
+     */
+    projectArchive: function (projectId) {
       var _self = this;
       this.$router.push({
         path: '/trace/projectArchive/' + projectId,
@@ -370,11 +454,11 @@ export default {
       });
     },
     /**
-			 * 项目任务
-			 * @param {Object} projectId
-			 * @author GuoZhiBo 20190926
-			 */
-    projectManagement: function(projectId) {
+     * 项目任务
+     * @param {Object} projectId
+     * @author GuoZhiBo 20190926
+     */
+    projectManagement: function (projectId) {
       var _self = this;
       this.$router.push({
         path: '/trace/projectManagement/' + projectId,
@@ -384,10 +468,12 @@ export default {
       });
     },
     /**
-			 *  跳转到人员界面
-			 *  @author ZhangTeng 20190212
-			 */
-    goPersonList: function() {
+     *  跳转到人员界面
+     *  @author ZhangTeng 20190212
+     */
+    goPersonList: function () {
+      console.log(this.fullPath, '=====');
+
       var _self = this;
       this.$router.push({
         path: '/trace/projectUserList/' + _self.projectId,
@@ -398,10 +484,10 @@ export default {
     },
 
     /**
-			 *  跳转到项目管理人员界面
-			 *  @author ZhangTeng 20190212
-			 */
-    goAdminPersonList: function() {
+     *  跳转到项目管理人员界面
+     *  @author ZhangTeng 20190212
+     */
+    goAdminPersonList: function () {
       var _self = this;
       this.$router.push({
         path: '/trace/projectAdminUserList/' + _self.projectId,
@@ -412,39 +498,41 @@ export default {
     },
 
     /**
-			 * 修改追踪单的状态
-			 * @author YangZhiJie 20171201
-			 */
-    updateTracefinished: function(trace) {
+     * 修改追踪单的状态
+     * @author YangZhiJie 20171201
+     */
+    updateTracefinished: function (trace) {
       var _self = this;
-      TraceResource.updateTraceFinished(trace.id).then(successData => {
-        _self.listNotFinishedTask();
-      }, errorData => {
-        Common.processException(errorData);
-      });
+      TraceResource.updateTraceFinished(trace.id).then(
+        successData => {
+          _self.listNotFinishedTask();
+        },
+        errorData => {
+          Common.processException(errorData);
+        },
+      );
     },
-
   },
 };
 </script>
 
 <style scoped>
-	.trace-summary {
-		font-size: large;
-		margin-left: 5px;
-		margin-right: 5px;
-	}
-	
-	.trace-icon {
-		opacity: 0.5;
-	}
-	
-	.trace-user {
-		font-size: 100%;
-	}
-	
-	.trace-checkbox {
-		display: inline;
-		font-size: large;
-	}
+.trace-summary {
+  font-size: large;
+  margin-left: 5px;
+  margin-right: 5px;
+}
+
+.trace-icon {
+  opacity: 0.5;
+}
+
+.trace-user {
+  font-size: 100%;
+}
+
+.trace-checkbox {
+  display: inline;
+  font-size: large;
+}
 </style>

+ 71 - 104
src/trace/ProjectArchive.vue

@@ -6,10 +6,7 @@
           <!--文件夹管理-->
           <div class="flex-aside-left">
             <div>
-              <Navbar
-                :title="projectName"
-                :is-go-back="true"
-              />
+              <Navbar :title="projectName" :is-go-back="true" />
               <div class="flex-box">
                 <button
                   class="btn btn-default flex-item"
@@ -19,29 +16,25 @@
                 </button>
               </div>
               <div class="flex-box">
-                <button
-                  class="btn btn-default flex-item"
-                  @click="openFolder()"
-                >
+                <button class="btn btn-default flex-item" @click="openFolder()">
                   新建
                 </button>
                 <button
                   class="btn btn-default flex-item"
-                  style="margin-left: 5px" @click="openFolder4()"
+                  style="margin-left: 5px"
+                  @click="openFolder4()"
                 >
                   修改
                 </button>
                 <button
                   class="btn btn-default flex-item"
-                  style="margin-left: 5px" @click="openDeleteFolder()"
+                  style="margin-left: 5px"
+                  @click="openDeleteFolder()"
                 >
                   删除
                 </button>
               </div>
-              <div
-                id="tree"
-                style="margin-top: 10px;"
-              />
+              <div id="tree" style="margin-top: 10px" />
             </div>
           </div>
 
@@ -61,19 +54,22 @@
 
                     <button
                       class="btn btn-default flex-item-1"
-                      style="margin-left: 5px" @click="queryByProjectArchiveDtosByParam()"
+                      style="margin-left: 5px"
+                      @click="queryByProjectArchiveDtosByParam()"
                     >
                       查询
                     </button>
                     <button
                       class="btn btn-default flex-item-1"
-                      style="margin-left: 5px" @click="openFolder1()"
+                      style="margin-left: 5px"
+                      @click="openFolder1()"
                     >
                       新建归档项
                     </button>
                     <button
                       class="btn btn-danger flex-item-1"
-                      style="margin-left: 5px" @click="openDeleteProject()"
+                      style="margin-left: 5px"
+                      @click="openDeleteProject()"
                     >
                       删除归档项
                     </button>
@@ -81,42 +77,28 @@
                 </div>
               </div>
 
-              <table
-                class="table"
-                style="margin-top: 10px;"
-              >
+              <table class="table" style="margin-top: 10px">
                 <thead>
                   <tr>
                     <!--<th>
 									项目名称
 								</th>-->
-                    <th>
-                      归档项名称
-                    </th>
-                    <th>
-                      创建时间
-                    </th>
-                    <th>
-                      计划归档日期
-                    </th>
-                    <th>
-                      归档文件名
-                    </th>
+                    <th>归档项名称</th>
+                    <th>创建时间</th>
+                    <th>计划归档日期</th>
+                    <th>归档文件名</th>
                     <!--<th>
 									归档文件大小
 								</th>-->
-                    <th>
-                      归档人
-                    </th>
-                    <th>
-                      归档时间
-                    </th>
+                    <th>归档人</th>
+                    <th>归档时间</th>
                   </tr>
                 </thead>
                 <tbody>
                   <tr
-                    v-for="item in projectArchiveDtos" :key="item"
-                    :class="projectArchivesId == item.id ?'success':''"
+                    v-for="item in projectArchiveDtos"
+                    :key="item"
+                    :class="projectArchivesId == item.id ? 'success' : ''"
                     @click="trClick(item)"
                     @dblclick="openFolder2()"
                   >
@@ -152,31 +134,22 @@
           <!--归档项下载和历史记录-->
           <div class="flex-aside-right">
             <div>
-              <div
-                id="tabs-911500"
-                class="tabbable"
-              >
+              <div id="tabs-911500" class="tabbable">
                 <ul class="nav nav-tabs">
                   <li class="active">
-                    <a
-                      href="#panel1"
-                      data-toggle="tab"
-                    >详细信息</a>
+                    <a href="#panel1" data-toggle="tab">详细信息</a>
                   </li>
                   <li>
-                    <a
-                      href="#panel3"
-                      data-toggle="tab"
-                    >历史记录</a>
+                    <a href="#panel3" data-toggle="tab">历史记录</a>
                   </li>
                 </ul>
                 <div class="tab-content">
-                  <div
-                    id="panel1"
-                    class="tab-pane active"
-                  >
+                  <div id="panel1" class="tab-pane active">
                     <div
-                      v-if="projectArchivesDto.fileName != '' && projectArchivesDto.fileName != undefined"
+                      v-if="
+                        projectArchivesDto.fileName != '' &&
+                          projectArchivesDto.fileName != undefined
+                      "
                       class="row m-row"
                     >
                       <div class="col-sm-12">
@@ -205,13 +178,10 @@
                       </div>
                     </div>
                   </div>
-                  <div
-                    id="panel3"
-                    class="tab-pane"
-                  >
-                    <template v-for="(item) in projectArchiveAuditDtos">
+                  <div id="panel3" class="tab-pane">
+                    <template v-for="item in projectArchiveAuditDtos">
                       <div
-                        v-if="(item.fileName != '' && item.fileName != undefined)"
+                        v-if="item.fileName != '' && item.fileName != undefined"
                         :key="item.id"
                         class="row m-row"
                       >
@@ -260,7 +230,7 @@
         @cancel="cancel"
       >
         <template #header>
-          {{ type + '文件夹' }}
+          {{ type + "文件夹" }}
         </template>
         <label>文件名</label>
         <input
@@ -281,7 +251,7 @@
         @cancel="cancel2"
       >
         <template #header>
-          {{ type + '文件夹' }}
+          {{ type + "文件夹" }}
         </template>
         <div class="form-group">
           <label for="projectFolder">上级文件名</label>
@@ -309,9 +279,13 @@
         @cancel="cancelFolder"
       >
         <template #header>
-          {{ '删除文件夹' }}
+          {{ "删除文件夹" }}
         </template>
-        <h3>您确认要删除{{ folderName }}文件夹吗?如果是的话,请点击【确定】按钮,否则点击【取消】按钮。</h3>
+        <h3>
+          您确认要删除{{
+            folderName
+          }}文件夹吗?如果是的话,请点击【确定】按钮,否则点击【取消】按钮。
+        </h3>
       </Modal>
       <!-- 是否删除归档项 -->
       <Modal
@@ -323,11 +297,15 @@
         @cancel="cancelProject"
       >
         <template #header>
-          {{ '删除归档项' }}
+          {{ "删除归档项" }}
         </template>
-        <h3>您确认要删除{{ projectArchivesDto.name }}归档项吗?如果是的话,请点击【确定】按钮,否则点击【取消】按钮。</h3>
+        <h3>
+          您确认要删除{{
+            projectArchivesDto.name
+          }}归档项吗?如果是的话,请点击【确定】按钮,否则点击【取消】按钮。
+        </h3>
       </Modal>
-			
+
       <!--
         作者:GuoZhiBo
         时间:2019-10-14
@@ -342,30 +320,27 @@
         @cancel="cancel1"
       >
         <template #header>
-          {{ type + '归档项' }}
+          {{ type + "归档项" }}
         </template>
         <div class="form-group">
           <label for="exampleInputEmail2">归档项名称</label>
           <input
             v-model="projectArchivesDto.name"
             autocomplete="off"
-            style="width: 100%;"
+            style="width: 100%"
             class="form-control"
           />
         </div>
         <div class="form-group">
           <label for="exampleInputEmail2">计划归档日期</label>
-          <Date
-            v-model="projectArchivesDto.planArchiveDate"
-            style="width: 100%"
-          />
+          <Date v-model="planArchiveDate" style="width: 100%" />
         </div>
         <div class="form-group">
           <label for="exampleInputEmail2">文件名称</label>
           <input
             v-model="projectArchivesDto.fileName"
             autocomplete="off"
-            style="width: 100%;"
+            style="width: 100%"
             class="form-control"
             readonly="readonly"
           />
@@ -376,7 +351,7 @@
           <input
             v-model="projectArchivesDto.fileSize"
             autocomplete="off"
-            style="width: 100%;"
+            style="width: 100%"
             class="form-control"
             readonly="readonly"
           />
@@ -396,8 +371,7 @@
               @click="clickButton"
             >
               <i class="fa fa-upload" />
-              &nbsp;
-              上传附件
+              &nbsp; 上传附件
             </a>
           </label>
           <button
@@ -415,24 +389,13 @@
   </div>
 </template>
 <script type="text/javascript">
-
 import Common from '../common/Common.js';
 import { Notify } from 'pc-component-v3';
 import UpladFile from '../widget/UpladFile.js';
 
-
-
-
-
 export default {
   components: {
-    
-    
-    
     UpladFile,
-    
-    
-    
   },
   data: function () {
     return {
@@ -441,6 +404,7 @@ export default {
       projectArchiveFolderDtos: [], //文件夹dtos
       folderName: undefined, //文件夹名称
       tree: undefined,
+      planArchiveDate: '',
       projectArchiveDtos: [], //归档项Dto
       projectArchivesDto: {
         id: undefined,
@@ -466,11 +430,11 @@ export default {
       parentProjectArchiveFolderId: undefined, //上级文件夹Id
       data: undefined,
       loading: false,
-      modal1:false,
-      modal2:false,
-      modal4:false,
-      modal5:false,
-      modal6:false,
+      modal1: false,
+      modal2: false,
+      modal4: false,
+      modal5: false,
+      modal6: false,
     };
   },
   watch: {
@@ -558,7 +522,7 @@ export default {
     clickButton: function () {
       $(this.$refs.fileInput).click();
     },
-    
+
     /**
      * 新建文件夹取消
      */
@@ -807,7 +771,7 @@ export default {
       if (selectedFile == undefined) {
         return;
       }
-      _self.loading=true;
+      _self.loading = true;
       if (selectedFile.size != undefined && selectedFile.size != null) {
         var formData = new FormData();
         formData.append('files', selectedFile);
@@ -822,12 +786,13 @@ export default {
           contentType: false,
           processData: false,
           success: function (data) {
-            _self.loading=false;
+            _self.loading = false;
             if (data != 'error') {
               Notify.success('提示', '文件上传成功!', 1000);
               var fileName = data.substring(data.indexOf(':') + 1);
               _self.projectArchivesDto.fileName = fileName;
-              _self.projectArchivesDto.fileSize = Math.round((selectedFile.size / 1024) * 100) / 100;
+              _self.projectArchivesDto.fileSize =
+                Math.round((selectedFile.size / 1024) * 100) / 100;
               // _self.$set(_self.projectArchivesDto, 'fileName', fileName);
               // _self.$set(
               //   _self.projectArchivesDto,
@@ -845,7 +810,9 @@ export default {
                 _self.projectArchivesDto.planArchiveDate == null ||
                 _self.projectArchivesDto.planArchiveDate == ''
               ) {
-                _self.projectArchivesDto.planArchiveDate = moment().format('YYYY-MM-DD HH:mm:ss');
+                // _self.projectArchivesDto.planArchiveDate = moment().format('YYYY-MM-DD HH:mm:ss');
+                _self.projectArchivesDto.planArchiveDate =
+                  _self.planArchiveDate + ' 00:00:00';
                 // _self.$set(
                 //   _self.projectArchivesDto,
                 //   'planArchiveDate',
@@ -857,12 +824,12 @@ export default {
             }
           },
           error: function (XMLHttpRequest, textStatus, errorThrown) {
-            _self.loading=false;
+            _self.loading = false;
             Common.processException(XMLHttpRequest, textStatus, errorThrown);
           },
         });
       } else {
-        _self.loading=false;
+        _self.loading = false;
         Notify.error('提示', '上传的文件为空!');
       }
     },

+ 37 - 9
src/trace/ProjectList.vue

@@ -33,7 +33,11 @@
 
         <div class="row">
           <div class="col-md-12">
-            <VueBootstrapPagination :pagination="pagination" :callback="getDatas" />
+            <VueBootstrapPagination
+              :pagination="pagination"
+              :callback="getDatas"
+              @click="updateRouter"
+            />
           </div>
         </div>
 
@@ -54,19 +58,16 @@
 </template>
 
 <script>
-import Common from '../common/Common.js';
-
+// import Common from '../common/Common.js';
+import { Common } from 'pc-component-v3';
 
 import QueryWidget from '../widget/QueryWidget.vue';
 import TraceHeader from './TraceHeader.vue';
 
-
-
 export default {
   components: {
-    
     QueryWidget,
-    
+
     TraceHeader,
   },
   data: function () {
@@ -107,8 +108,26 @@ export default {
       //flag: false
     };
   },
+  watch: {
+    // 监听路由是否变化
+    $route(to, from) {
+      if (to.query.currentPage != from.query.currentPage) {
+        this.pagination.current_page = to.query.currentPage;
+        this.getDatas();
+      }
+    },
+  },
 
   mounted: function () {
+    const { currentPage, pageSize } = this.$route.query;
+    if (currentPage !== undefined && pageSize !== undefined) {
+      this.pagination.current_page = this.$route.query.currentPage;
+      this.pagination.per_page = this.$route.query.pageSize;
+    }
+    this.updateRouter();
+
+    // this.getDatas();
+    /**
     var uuid = this.$route.params.uuid;
     if (uuid != null && uuid != undefined) {
       var str = localStorage.getItem(uuid);
@@ -127,10 +146,19 @@ export default {
           this.traceUserStatus = object.traceUserStatus;
         }
       }
-    }
-    this.getDatas();
+    } */
   },
   methods: {
+    updateRouter: function () {
+      this.$router.push({
+        path: '/trace/projectList',
+        query: {
+          currentPage: this.pagination.current_page,
+          pageSize: this.pagination.per_page,
+        },
+      });
+      this.getDatas();
+    },
     /**
      * 查询数据
      * @author GuoZhiBo 20180226

+ 130 - 100
src/trace/TraceCreate.vue

@@ -1,11 +1,7 @@
 <template>
   <div>
     <div>
-      <Navbar
-        title="新建任务"
-        :is-go-back="true"
-      />
-
+      <Navbar title="新建任务" :is-go-back="true" />
       <div>
         <div class="form-group">
           <label for="exampleInputEmail1">标题</label>
@@ -31,16 +27,9 @@
         />
         <div class="form-group">
           <label for="trackUserId">责任人</label>
-          <select
-            id="trackUserId"
-            v-model="userSelected"
-            class="form-control"
-          >
+          <select id="trackUserId" v-model="userSelected" class="form-control">
             <option value="" />
-            <option
-              v-for="user in userList" :key="user"
-              :value="user.userId"
-            >
+            <option v-for="user in userList" :key="user" :value="user.userId">
               {{ user.userName }}
             </option>
           </select>
@@ -51,10 +40,11 @@
             id="projectName"
             v-model="projectId"
             class="form-control"
-            :disabled="'projectId != null'?'true':'false'"
+            :disabled="projectId != null ? true : false"
           >
             <option
-              v-for="project in projectUserList" :key="project"
+              v-for="project in projectUserList"
+              :key="project"
               :value="project.projectItemId"
             >
               {{ project.projectItemName }}
@@ -77,9 +67,8 @@
             style="width: 100%"
           />
         </div>
-
         <button
-          style="width:100%;background-color: #007aff;color: white"
+          style="width: 100%; background-color: #007aff; color: white"
           type="button"
           class="btn btn-blue search-button"
           @click="saveTrace()"
@@ -92,25 +81,18 @@
   </div>
 </template>
 <script type="text/javascript">
-
 import Common from '../common/Common.js';
 
 import UpladFile from '../widget/UpladFile.js';
 
-
-
 import { Notify } from 'pc-component-v3';
 import Treeselect from '../widget/TreeSelect.vue';
 import ATreeselect from '../widget/ATreeSelect.vue';
 import AudioField from '../widget/AudioField.vue';
 export default {
   components: {
-    
-    
-    
-    
     UpladFile,
-    
+
     Treeselect,
     ATreeselect,
     AudioField,
@@ -126,32 +108,56 @@ export default {
       isdisable: false, //日期框是否可编辑
       projectId: '', //项目Id
       summernoteInitSuccess: false, // summernote初始化成功
-      projectTaskDtos: [],//项目任务时间点
+      projectTaskDtos: [], //项目任务时间点
       srcArray: [],
       loading: false,
     };
   },
   watch: {
-    'projectId': function (curVal, oldVal) {
+    projectId: function (curVal, oldVal) {
       var _self = this;
       _self.$refs.treeSelect.setValue(undefined);
       _self.queryProjectTaskDtoByProjectId();
     },
   },
 
-
   mounted: function () {
     var _self = this;
     this.projectId = this.$route.params.projectId;
+    console.log(this.projectId, 'projectId');
     this.initProject();
     this.initData();
     $('#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
-        ]],
+        [
+          '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,
@@ -177,18 +183,18 @@ export default {
 
   methods: {
     /**
-         * 删除语音
-         * @param {Object} index
-         */
+     * 删除语音
+     * @param {Object} index
+     */
     deleteAudioSrc: function (index) {
       var _self = this;
       _self.srcArray.splice(index, 1);
       _self.traceDto.audioSrcs = JSON.stringify(_self.srcArray);
     },
     /**
-         * 录音停止之后
-         * @param {Object} param
-         */
+     * 录音停止之后
+     * @param {Object} param
+     */
     handelEndRecord: function (param) {
       var _self = this;
       if (param.fileName != undefined) {
@@ -201,16 +207,16 @@ export default {
     },
     saveTrace: function () {
       var _self = this;
-      _self.traceDto.receiveUserId = _self.userSelected;//接收人Id
+      _self.traceDto.receiveUserId = _self.userSelected; //接收人Id
       _self.traceDto.projectTaskId = _self.$refs.treeSelect.getValue();
       if (_self.planFinishedDate != undefined && _self.planFinishedDate != '') {
-        _self.traceDto.planFinishedDate = _self.planFinishedDate; //完成时间
+        _self.traceDto.planFinishedDate = _self.planFinishedDate + ' 00:00:00'; //完成时间
       }
-      _self.traceDto.projectId = _self.projectId;//项目Id
+      _self.traceDto.projectId = _self.projectId; //项目Id
 
       _self.traceDto.detail = $('#summernote').summernote('code');
       if (_self.traceDto.summary != '' && _self.traceDto.summary != undefined) {
-        _self.loading=true;
+        _self.loading = true;
         $.ajax({
           url: Common.getApiURL('TraceResource/saveTrace'),
           type: 'post',
@@ -221,70 +227,79 @@ export default {
           },
           success: function (data) {
             Notify.success('提示', '追踪成功!');
-            _self.loading=false;
+            _self.loading = false;
             _self.back();
           },
           error: function (XMLHttpRequest, textStatus, errorThrown) {
-            _self.loading=false;
+            _self.loading = false;
             Common.processException(XMLHttpRequest, textStatus, errorThrown);
           },
         });
       } else {
         Notify.error('提示', '标题不能为空!');
+        $('body').addClass('modal-open',{overflow:'auto'});
       }
     },
 
-    //图片上传  
+    //图片上传
     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;
-      });
+      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 ZhangTeng 20190213
-         */
+     * 初始化人员
+     * @author ZhangTeng 20190213
+     */
     initData: function () {
       var _self = this;
       _self.userList.splice(0, _self.userList.length);
       $.ajax({
-        url: Common.getApiURL('ProjectItemUserResource/listByProjectItemId'),
+        url: Common.getApiURL('ProjectItemUserResource/listByUserId'),
         type: 'get',
         dataType: 'json',
         contentType: 'application/json',
-        data: { 'projectItemId': _self.projectId },
         beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },
         success: function (data) {
+          console.log(data, '人员');
           if (data != null) {
             for (var index = 0; index < data.length; index++) {
               _self.userList[index] = data[index];
@@ -293,6 +308,7 @@ export default {
               //     _self.userSelected = data[index].userId;
               // }
             }
+            // _self.userList= _self.deWeight(_self.userList);
           }
         },
         error: function (XMLHttpRequest, textStatus, errorThrown) {
@@ -302,20 +318,22 @@ export default {
     },
 
     /**
-         * 初始化项目
-         * @author ZhangTeng 20190213
-         */
+     * 初始化项目
+     * @author ZhangTeng 20190213
+     */
     initProject: function () {
       var _self = this;
       _self.projectUserList.splice(0, _self.projectUserList.length);
       $.ajax({
-        url: Common.getApiURL('ProjectItemUserResource/listByUserId'), //查询所有的项目用户
+        url: Common.getApiURL('ProjectItemUserResource/listByProjectItemId'), //查询所有的项目用户
         type: 'get',
         contentType: 'application/json',
+        data: { projectItemId: _self.projectId },
         beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },
         success: function (data) {
+          console.log(data, '项目');
           if (data != null) {
             for (var index = 0; index < data.length; index++) {
               _self.projectUserList[index] = data[index];
@@ -328,16 +346,28 @@ export default {
         },
       });
     },
-
-
+    deWeight: function (arr) {
+      for (var i = 0; i < arr.length - 1; i++) {
+        for (var j = i + 1; j < arr.length; j++) {
+          if (arr[i].userId == arr[j].userId) {
+            arr.splice(j, 1);
+            //因为数组长度减小1,所以直接 j++ 会漏掉一个元素,所以要 j--
+            j--;
+          }
+        }
+      }
+      return arr;
+    },
     /**
-         * 根据项目id查询项目任务时间节点
-         * @author GuoZhiBo 20191010
-         */
+     * 根据项目id查询项目任务时间节点
+     * @author GuoZhiBo 20191010
+     */
     queryProjectTaskDtoByProjectId: function () {
       var _self = this;
       $.ajax({
-        url: Common.getApiURL('ProjectTaskResource/queryProjectTaskDtoByProjectId'),
+        url: Common.getApiURL(
+          'ProjectTaskResource/queryProjectTaskDtoByProjectId',
+        ),
         type: 'get',
         dataType: 'json',
         contentType: 'application/json',
@@ -348,8 +378,9 @@ export default {
           Common.addTokenToRequest(request);
         },
         success: function (data) {
+          console.log(data,'时间节点');
           _self.projectTaskDtos = _self.convertToTreedata(data);
-          console.log(_self.projectTaskDtos);
+          // console.log(_self.projectTaskDtos);
         },
         error: function (XMLHttpRequest, textStatus, errorThrown) {
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
@@ -357,16 +388,16 @@ export default {
       });
     },
 
-    convertToTreedata: function(data) {
-      console.log(data);
+    convertToTreedata: function (data) {
+      // console.log(data);
       var returnData = [];
-      for(var i = 0; i < data.length; i++){
+      for (var i = 0; i < data.length; i++) {
         var tempObj = {
-          title : data[i].label,
-          value : data[i].id,
-          key : data[i].id,
+          title: data[i].label,
+          value: data[i].id,
+          key: data[i].id,
         };
-        if('children' in data[i]){
+        if ('children' in data[i]) {
           tempObj.children = this.convertToTreedata(data[i].children);
         }
         //push到数据数组中
@@ -375,7 +406,6 @@ export default {
       return returnData;
     },
   },
-
 };
 </script>
 

+ 1 - 1
src/trace/TraceList.vue

@@ -25,7 +25,7 @@
 
     <div class="panel panel-default">
       <div class="panel-body">
-        <vuedraggable v-model="traceDtos" item-key="id" class="wrapper" @change="end">
+        <vuedraggable v-model="traceDtos" :disabled="true" item-key="id" class="wrapper" @change="end">
           <template #item="{element}">
             <div style="margin-top: 5px; cursor: pointer;">
               <span>