Bläddra i källkod

Merge branch 'master' of https://prodog.leanwo.com:3000/client-2022/client-trace-v3

YangZhiJie 2 år sedan
förälder
incheckning
633656c29b

+ 2 - 1
package.json

@@ -1,7 +1,7 @@
 {
   "name": "client-trace-v3",
   "description": "client-trace-v3",
-  "version": "1.0.8",
+  "version": "1.0.14",
   "author": "yangzhijie <yangzhijie1488@163.com>",
   "scripts": {
     "dev": "webpack serve --config ./webpack.dev.js",
@@ -14,6 +14,7 @@
   ],
   "peerDependencies": {
     "ant-design-vue": "^3.2.15",
+    "gantt": "^3.1.1",
     "moment": "^2.29.4",
     "pc-component-v3": "^1.0.64",
     "v-tooltip": "^4.0.0-beta.17",

+ 1 - 0
public/index.html

@@ -27,6 +27,7 @@
   <script src="/static/bootstrap-treeview/bootstrap-treeview.js"></script>
   <script src="/static/summernote/dist/summernote.min.js"></script>
   <script src="/static/summernote/dist/lang/summernote-zh-CN.min.js"></script>
+	<script src="/static/dayjs/dayjs.min.js"></script>
 
   <script src="/static/dhtmlxgantt/dhtmlxgantt.js"></script>
   <script src="/static/dhtmlxgantt/locale/locale_cn.js"></script>

+ 6 - 1
src/App.vue

@@ -1,6 +1,6 @@
 <template>
   <div id="app">
-    <a-config-provider :locale="zhCN">
+    <a-config-provider :locale="locale">
       <router-view />
     </a-config-provider>
   </div>
@@ -15,6 +15,11 @@ import 'dayjs/locale/zh-cn';
 dayjs.locale('zh-cn');
 export default {
   name: 'App',
+  data:function(){
+    return {
+      locale:zhCN,
+    };
+  },
 };
 </script>
 

+ 65 - 89
src/trace/ProjectArchive.vue

@@ -255,7 +255,14 @@
         </template>
         <div class="form-group">
           <label for="projectFolder">上级文件名</label>
-          <select id="projectFolder" class="form-control" />
+          <a-select
+            v-model:value="project"
+            allow-clear
+            style="width: 100%; height: 30px"
+            :options="allProject"
+            @change="projectChange"
+          />
+          <!-- <select id="projectFolder" class="form-control" /> -->
         </div>
         <div class="form-group">
           <label>文件名</label>
@@ -392,6 +399,7 @@
 import Common from '../common/Common.js';
 import { Notify } from 'pc-component-v3';
 import UpladFile from '../widget/UpladFile.js';
+import { message } from 'ant-design-vue';
 
 export default {
   components: {
@@ -435,6 +443,8 @@ export default {
       modal4: false,
       modal5: false,
       modal6: false,
+      project: '',
+      allProject: [],
     };
   },
   watch: {
@@ -788,41 +798,43 @@ export default {
           success: function (data) {
             _self.loading = false;
             if (data.errorCode == 0) {
-              Notify.success('提示', '文件上传成功!', 1000);
-              var fileName = data.datas[0];
-              _self.projectArchivesDto.fileName = fileName;
-              _self.projectArchivesDto.fileSize =
-                Math.round((selectedFile.size / 1024) * 100) / 100;
-              // _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.projectArchivesDto.name = fileName;
-                // _self.$set(_self.projectArchivesDto, 'name', fileName);
-              }
-              if (
-                _self.projectArchivesDto.planArchiveDate == null ||
-                _self.projectArchivesDto.planArchiveDate == ''
-              ) {
-                // _self.projectArchivesDto.planArchiveDate = moment().format('YYYY-MM-DD HH:mm:ss');
-                _self.projectArchivesDto.planArchiveDate =
-                  _self.planArchiveDate + ' 00:00:00';
+              if (data.datas) {
+                Notify.success('提示', '文件上传成功!', 1000);
+                var fileName = data.datas[0];
+                _self.projectArchivesDto.fileName = fileName;
+                _self.projectArchivesDto.fileSize =
+                  Math.round((selectedFile.size / 1024) * 100) / 100;
+                // _self.$set(_self.projectArchivesDto, 'fileName', fileName);
                 // _self.$set(
                 //   _self.projectArchivesDto,
-                //   'planArchiveDate',
-                //   moment().format('YYYY-MM-DD HH:mm:ss'),
+                //   'fileSize',
+                //   Math.round((selectedFile.size / 1024) * 100) / 100,
                 // );
-              }
+                if (
+                  _self.projectArchivesDto.name == null ||
+                  _self.projectArchivesDto.name == ''
+                ) {
+                  _self.projectArchivesDto.name = fileName;
+                  // _self.$set(_self.projectArchivesDto, 'name', fileName);
+                }
+                if (
+                  _self.projectArchivesDto.planArchiveDate == null ||
+                  _self.projectArchivesDto.planArchiveDate == ''
+                ) {
+                  // _self.projectArchivesDto.planArchiveDate = moment().format('YYYY-MM-DD HH:mm:ss');
+                  _self.projectArchivesDto.planArchiveDate =
+                    _self.planArchiveDate + ' 00:00:00';
+                  // _self.$set(
+                  //   _self.projectArchivesDto,
+                  //   'planArchiveDate',
+                  //   moment().format('YYYY-MM-DD HH:mm:ss'),
+                  // );
+                }
 
-              _self.saveProjectArchives();
-            }else{
-              Notify.error('文件上传失败', data.errorMessage, 5000);
+                _self.saveProjectArchives();
+              } else {
+                message.error(data.errorMessage);
+              }
             }
           },
           error: function (XMLHttpRequest, textStatus, errorThrown) {
@@ -1045,85 +1057,49 @@ export default {
         },
       });
     },
+
+    // 修改选择上级文件名事件
+    projectChange: function (val) {
+      if (val !== undefined) {
+        this.parentProjectArchiveFolderId = val;
+      } else {
+        this.parentProjectArchiveFolderId = null;
+      }
+    },
     /**
      * 加载当前项目全部文件夹
      */
     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,
-            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();
-        });
       $.ajax({
         url: Common.getApiURL(
           'ProjectArchiveFolderResource/queryProjectArchiveFolderDto',
         ),
+        type: 'get',
+        dataType: 'json',
         data: {
           name: undefined,
           projectId: _self.projectId,
           folderId: _self.folderId,
         },
-        dataType: 'json',
         beforeSend: function (request) {
           Common.addTokenToRequest(request);
         },
         success: function (data) {
-          for (var d = 0; d < data.length; d++) {
-            var item = data[d];
+          data.forEach(item => {
+            item.value = item.id;
+            item.label = item.name;
             if (item.id == _self.parentProjectArchiveFolderId) {
-              var option = new Option(item.name, item.id, true, true);
-              $c_HospitalCode.append(option);
+              _self.project = item.label;
             }
             if (_self.parentProjectArchiveFolderId == undefined) {
-              $('#projectFolder').empty();
+              _self.project = '';
             }
-          }
-          $c_HospitalCode.trigger('change'); //使用这个方法显示到select2上.
+          });
+          _self.allProject = data;
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+          Common.processException(XMLHttpRequest, textStatus, errorThrown);
         },
       });
     },

+ 7 - 4
src/trace/TraceAttachment.vue

@@ -39,6 +39,7 @@ import Common from '../common/Common.js';
 
 import { DownloadService } from 'pc-component-v3';
 import { Notify } from 'pc-component-v3';
+import { message } from 'ant-design-vue';
 
 export default {
   components: {
@@ -164,10 +165,12 @@ export default {
           success: function (data) {
             _self.loading=false;
             if (data.errorCode == 0) {
-              var fileName = data.datas[0];
-              _self.uploadTraceAttachment(fileName);
-            }else{
-              Notify.error('文件上传失败', data.errorMessage, 5000);
+              if (data.datas) {
+                var fileName = data.datas[0];
+                _self.uploadTraceAttachment(fileName);
+              }
+            } else {
+              message.error(data.errorMessage);
             }
           },
           error: function (XMLHttpRequest, textStatus, errorThrown) {

+ 7 - 2
src/trace/TraceComment.vue

@@ -7,7 +7,7 @@
 <template>
   <div>
     <div v-for="items in traceComments" :key="items" class="media">
-      <h4 class="media-heading">
+      <h4 class="media-heading headDiv">
         {{ items.createdName
         }}<a class="fa-pull-right" @click="edit(items)">编辑</a>
       </h4>
@@ -155,5 +155,10 @@ export default {
 };
 </script>
 
-<style>
+<style scoped>
+.headDiv{
+  display: flex;
+  justify-content: space-between;
+  font-size: 14px;
+}
 </style>

+ 25 - 15
src/trace/TraceCommentCreate.vue

@@ -64,6 +64,7 @@ import UpladFile from '../widget/UpladFile.js';
 import Common from '../common/Common.js';
 import { Notify } from 'pc-component-v3';
 import { DownloadService } from 'pc-component-v3';
+import { message } from 'ant-design-vue';
 
 export default {
   components: {
@@ -205,9 +206,13 @@ export default {
             processData: false,
             success: function (data) {
               _self.loading=false;
-              if (data != 'error') {
-                var imageName = data.substring(data.indexOf(':') + 1);
-                _self.addImg(imageName);
+              if (data.errorCode == 0) {
+                if (data.datas) {
+                  var imageName = data.datas[0];
+                  _self.addImg(imageName);
+                }
+              } else {
+                message.error(data.errorMessage);
               }
             },
             error: function (XMLHttpRequest, textStatus, errorThrown) {
@@ -316,12 +321,13 @@ export default {
             processData: false,
             success: function (data) {
               _self.loading=false;
-
               if (data.errorCode == 0) {
-                var fileName = data.datas[0];
-                _self.files.push(fileName);
-              }else{
-                Notify.error('文件上传失败', data.errorMessage, 5000);
+                if (data.datas) {
+                  var fileName = data.datas[0];
+                  _self.files.push(fileName);
+                }
+              } else {
+                message.error(data.errorMessage);
               }
 
             },
@@ -408,13 +414,17 @@ export default {
               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',
-                );
+              if (data.errorCode == 0) {
+                if (data.datas) {
+                  var imageName = data.datas[0];
+                  $('#summernote').summernote(
+                    'insertImage',
+                    Common.getResourceUrl('image', _self.className, imageName),
+                    'image name',
+                  );
+                }
+              } else {
+                message.error(data.errorMessage);
               }
             },
             error: function () {

+ 12 - 7
src/trace/TraceCommentEdit.vue

@@ -52,6 +52,7 @@ import UpladFile from '../widget/UpladFile.js';
 import Common from '../common/Common.js';
 import { Notify } from 'pc-component-v3';
 import { DownloadService } from 'pc-component-v3';
+import { message } from 'ant-design-vue';
 
 export default {
   components: {
@@ -206,10 +207,10 @@ export default {
             success: function(data) {
               _self.loading=false;
               if (data.errorCode == 0) {
-                var fileName = data.datas[0];
-                _self.files.push(fileName);
-              }else{
-                Notify.error('文件上传失败', data.errorMessage, 5000);
+                if(data.datas){
+                  var fileName = data.datas[0];
+                  _self.files.push(fileName);
+                }
               }
             },
             error: function(XMLHttpRequest, textStatus, errorThrown) {
@@ -268,9 +269,13 @@ export default {
             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');
+            if (data.errorCode == 0) {
+              if (data.datas) {
+                var imageName = data.datas[0];
+                $('#summernote').summernote('insertImage', Common.getResourceUrl('image', _self.className, imageName), 'image name');
+              }
+            } else {
+              message.error(data.errorMessage);
             }
           },
           error: function() {

+ 6 - 3
src/trace/TraceCreate.vue

@@ -65,7 +65,7 @@
         </div>
         <div class="form-group">
           <label>完成时间</label><br />
-          <a-locale-provider :locale="locale">
+          <a-config-provider :locale="locale">
             <a-date-picker
               v-model:value="planFinishedDate"
               style="width: 100%"
@@ -74,7 +74,7 @@
               :show-now="false"
               placeholder="请选择完成日期"
             />
-          </a-locale-provider>
+          </a-config-provider>
         </div>
         <button
           style="width: 100%; background-color: #007aff; color: white"
@@ -93,12 +93,15 @@
 import Common from '../common/Common.js';
 
 import UpladFile from '../widget/UpladFile.js';
-import zhCN from 'ant-design-vue/lib/locale-provider/zh_CN';
 import { Notify } from 'pc-component-v3';
 import Treeselect from '../widget/TreeSelect.vue';
 import ATreeselect from '../widget/ATreeSelect.vue';
 import AudioField from '../widget/AudioField.vue';
 import { message } from 'ant-design-vue';
+import zhCN from 'ant-design-vue/es/locale/zh_CN';
+import dayjs from 'dayjs';
+import 'dayjs/locale/zh-cn';
+dayjs.locale('zh-cn');
 export default {
   components: {
     UpladFile,

+ 114 - 105
src/trace/TraceTimeLineCreate.vue

@@ -7,38 +7,49 @@
 <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"
           />
         </div>
         <div class="form-group">
           <label for="exampleInputEmail2">负责人</label>
-          <select
+          <a-select
+            v-model:value="user"
+            style="width: 100%; height: 30px"
+            :options="allUsers"
+            @change="getUser"
+          />
+          <!-- <select
             id="userName"
-            style="width: 100%;height: 30px;"
+            style="width: 100%; height: 30px"
             class="form-control js-data-example-ajax"
-          />
+          /> -->
         </div>
 
         <div class="form-group">
           <label for="exampleInputEmail2">截止时间</label>
-          <Date
-            v-model="traceTimeLine.endDate"
-            style="width: 100%;"
-          />
+          <a-config-provider :locale="locale">
+            <a-date-picker
+              v-model:value="planFinishedDate"
+              style="width: 100%"
+              show-time
+              format="YYYY-MM-DD HH:mm:ss"
+              :show-now="false"
+              placeholder="请选择日期"
+            />
+          </a-config-provider>
+
+          <!-- <Date v-model="traceTimeLine.endDate" style="width: 100%" /> -->
         </div>
-        <div style="margin-top: 10px;">
+        <div style="margin-top: 10px">
           <button
             type="text"
             class="btn btn-default"
@@ -46,11 +57,7 @@
           >
             确认
           </button>
-          <button
-            type="text"
-            class="btn btn-default"
-            @click="returnBack()"
-          >
+          <button type="text" class="btn btn-default" @click="returnBack()">
             取消
           </button>
         </div>
@@ -61,39 +68,33 @@
 </template>
 
 <script>
-
-
-
-
 import { Notify } from 'pc-component-v3';
 import Common from '../common/Common.js';
-
+import zhCN from 'ant-design-vue/es/locale/zh_CN';
+import dayjs from 'dayjs';
+import 'dayjs/locale/zh-cn';
+dayjs.locale('zh-cn');
 export default {
-
-  components: {
-    
-    
-    
-    
-    
-    
-  },
+  components: {},
   data: function () {
     return {
-      traceId: '',			// 追踪单(输入参数)
-      projectId: '',		// 项目Id
+      traceId: '', // 追踪单(输入参数)
+      projectId: '', // 项目Id
       traceTimeLine: {
-        'trackId': undefined,
-        'userId': undefined,
-        'userName': undefined,
-        'content': undefined,
-        'endDate': undefined,
-      },	// 追踪单时间节点(输入参数)
+        trackId: undefined,
+        userId: undefined,
+        userName: undefined,
+        content: undefined,
+        endDate: undefined,
+      }, // 追踪单时间节点(输入参数)
       loading: false,
+      user:'',
+      allUsers: [],
+      locale: zhCN,
+      planFinishedDate: '',
     };
   },
 
-
   mounted: function () {
     $('.input-tan').focus(function () {
       document.activeElement.blur();
@@ -103,8 +104,8 @@ export default {
 
   methods: {
     /**
-         * 初始化数据
-         */
+     * 初始化数据
+     */
     initData: function () {
       var _self = this;
       this.traceId = Number(this.$route.params.traceId);
@@ -112,18 +113,23 @@ export default {
       this.loadSelectUserName();
     },
 
-
     /**@argument
-         * 保存当前时间节点数据
-         */
+     * 保存当前时间节点数据
+     */
     saveTraceTimeLine: function () {
       var _self = this;
       _self.traceTimeLine.traceId = _self.traceId;
       var content = _self.traceTimeLine.content;
+      _self.traceTimeLine.endDate = _self.dateConvert(_self.planFinishedDate);
       var dates = _self.traceTimeLine.endDate;
-
-      if (content != null && content != '' && dates != null && dates != undefined && dates != '') {
-        _self.loading=true;
+      if (
+        content != null &&
+        content != '' &&
+        _self.planFinishedDate != null &&
+        _self.planFinishedDate != undefined &&
+        _self.planFinishedDate != ''
+      ) {
+        _self.loading = true;
         $.ajax({
           url: Common.getApiURL('TraceTimeLineResource/saveTraceTimeLine'),
           type: 'post',
@@ -133,84 +139,87 @@ export default {
           },
           data: JSON.stringify(_self.traceTimeLine),
           success: function (data) {
-            _self.loading=false;
+            _self.loading = false;
             _self.returnBack();
           },
           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('提示', '请将界面内容填写完整!');
       }
     },
 
-
     /**@argument
-         * 返回上一界面
-         */
+     * 返回上一界面
+     */
     returnBack: function () {
       history.back();
     },
 
-    
     /**
-         * 加载用户
-         */
+     * 加载用户
+     */
     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;
-          },
-          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: Common.getApiURL(
+          'ProjectItemUserResource/listByProjectItemId?projectItemId=' +
+            _self.projectId,
+        ),
+        type: 'get',
+        dataType: 'json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          data.forEach(item => {
+            item.value = item.userId;
+            item.label = item.userName;
+          });
+          _self.allUsers = data;
+        },
+        error: function (errorData) {
+          Common.processException(errorData);
         },
-      }).on('change', function () {
-        _self.traceTimeLine.userId = $(this).val();
-        _self.traceTimeLine.userName = $(this).text();
       });
     },
+
+    // 获取负责人信息
+    getUser: function (_, val) {
+      this.traceTimeLine.userId = val.userId;
+      this.traceTimeLine.userName = val.userName;
+    },
+    // 日期处理函数
+    plusZero: function (n) {
+      return n >= 10 ? n : '0' + n;
+    },
+
+    dateConvert: function (dateStr) {
+      const date = new Date(dateStr);
+      const year = date.getFullYear();
+      const month = date.getMonth() + 1;
+      const day = date.getDate();
+      const hour = date.getHours();
+      const minute = date.getMinutes();
+      const second = date.getSeconds();
+      return (
+        year +
+        '-' +
+        this.plusZero(month) +
+        '-' +
+        this.plusZero(day) +
+        ' ' +
+        this.plusZero(hour) +
+        ':' +
+        this.plusZero(minute) +
+        ':' +
+        this.plusZero(second)
+      );
+    },
   },
 };
 </script>

+ 93 - 85
src/trace/TraceTimeLineEdit.vue

@@ -28,19 +28,27 @@
         </div>
         <div class="form-group">
           <label for="exampleInputEmail2">负责人</label>
-          <select
-            id="userName"
+          <a-select
+            v-model:value="traceTimeLine.userName"
             style="width: 100%; height: 30px"
-            class="form-control js-data-example-ajax"
+            :options="allUsers"
+            @change="getUser"
           />
         </div>
 
         <div class="form-group">
           <label for="exampleInputEmail2">截止时间</label>
-          <Date
-            v-model="traceTimeLine.endDate"
-            style="width: 100%"
-          />
+          <a-config-provider :locale="locale">
+            <a-date-picker
+              v-model:value="planFinishedDate"
+              style="width: 100%"
+              show-time
+              format="YYYY-MM-DD HH:mm:ss"
+              :show-now="false"
+              placeholder="请选择日期"
+            />
+          </a-config-provider>
+          <!-- <Date v-model="traceTimeLine.endDate" style="width: 100%" /> -->
         </div>
         <div style="margin-top: 10px">
           <button
@@ -64,22 +72,19 @@
 </template>
 
 <script>
-
-
-
-
 import { Notify } from 'pc-component-v3';
 import Common from '../common/Common.js';
-
+import zhCN from 'ant-design-vue/es/locale/zh_CN';
+import dayjs from 'dayjs';
+import 'dayjs/locale/zh-cn';
+import weekday from 'dayjs/plugin/weekday';
+import localeData from 'dayjs/plugin/localeData';
+ 
+dayjs.extend(weekday);
+dayjs.extend(localeData);
+dayjs.locale('zh-cn');
 export default {
-  components: {
-    
-    
-    
-    
-    
-    
-  },
+  components: {},
   data: function () {
     return {
       traceTimeLineId: '', // 追踪单(输入参数)
@@ -92,6 +97,9 @@ export default {
         endDate: undefined,
       }, // 追踪单时间节点(输入参数)
       loading: false,
+      allUsers: [],
+      locale: zhCN,
+      planFinishedDate: '',
     };
   },
 
@@ -112,7 +120,11 @@ export default {
       this.projectId = Number(this.$route.query.projectId);
       this.loadTraceTimeLine();
     },
-
+    // 获取负责人信息
+    getUser: function (_, val) {
+      this.traceTimeLine.userId = val.userId;
+      this.traceTimeLine.userName = val.userName;
+    },
     /**
      * 加载时间节点Id
      */
@@ -130,11 +142,14 @@ export default {
         },
         success: function (data) {
           _self.traceTimeLine = data;
+          if(data.endDate !== '' && data.endDate){
+            _self.planFinishedDate = dayjs(data.endDate,'YYYY-MM-DD HH:mm:ss');
+          }
           _self.loadSelectUserName();
-          _self.loading=false;
+          _self.loading = false;
         },
         error: function (XMLHttpRequest, textStatus, errorThrown) {
-          _self.loading=false;
+          _self.loading = false;
           Common.processException(XMLHttpRequest, textStatus, errorThrown);
         },
       });
@@ -147,8 +162,8 @@ export default {
       var _self = this;
       _self.traceTimeLine.traceId = _self.traceId;
       var content = _self.traceTimeLine.content;
+      _self.traceTimeLine.endDate = _self.dateConvert(_self.planFinishedDate);
       var dates = _self.traceTimeLine.endDate;
-
       if (
         content != null &&
         content != '' &&
@@ -156,7 +171,7 @@ export default {
         dates != undefined &&
         dates != ''
       ) {
-        _self.loading=true;
+        _self.loading = true;
         $.ajax({
           url: Common.getApiURL('TraceTimeLineResource/saveTraceTimeLine'),
           type: 'post',
@@ -166,16 +181,16 @@ export default {
           },
           data: JSON.stringify(_self.traceTimeLine),
           success: function (data) {
-            _self.loading=false;
+            _self.loading = false;
             _self.returnBack();
           },
           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('提示', '请将界面内容填写完整!');
       }
     },
@@ -185,7 +200,7 @@ export default {
      */
     deleteById: function () {
       var _self = this;
-      _self.loading=true;
+      _self.loading = true;
       $.ajax({
         url: Common.getApiURL('TraceTimeLineResource/deleteById'),
         type: 'get',
@@ -196,11 +211,11 @@ export default {
           Common.addTokenToRequest(request);
         },
         success: function (data) {
-          _self.loading=false;
+          _self.loading = false;
           _self.returnBack();
         },
         error: function (xmlHttpRequest, textStatus, errorThrown) {
-          _self.loading=false;
+          _self.loading = false;
           Common.processException(xmlHttpRequest, textStatus, errorThrown);
         },
       });
@@ -218,61 +233,54 @@ export default {
      */
     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=' +
+      $.ajax({
+        url: 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();
-        });
+        ),
+        type: 'get',
+        dataType: 'json',
+        beforeSend: function (request) {
+          Common.addTokenToRequest(request);
+        },
+        success: function (data) {
+          data.forEach(item => {
+            item.value = item.userId;
+            item.label = item.userName;
+          });
+          _self.allUsers = data;
+        },
+        error: function (errorData) {
+          Common.processException(errorData);
+        },
+      });
+    },
+    // 日期处理函数
+    plusZero: function (n) {
+      return n >= 10 ? n : '0' + n;
+    },
+
+    dateConvert: function (dateStr) {
+      const date = new Date(dateStr);
+      const year = date.getFullYear();
+      const month = date.getMonth() + 1;
+      const day = date.getDate();
+      const hour = date.getHours();
+      const minute = date.getMinutes();
+      const second = date.getSeconds();
+      return (
+        year +
+        '-' +
+        this.plusZero(month) +
+        '-' +
+        this.plusZero(day) +
+        ' ' +
+        this.plusZero(hour) +
+        ':' +
+        this.plusZero(minute) +
+        ':' +
+        this.plusZero(second)
+      );
     },
   },
 };

+ 36 - 5
src/trace/TraceUpdate.vue

@@ -45,7 +45,7 @@
         />
         <div class="form-group">
           <label for="projectName">时间节点</label>
-          <Treeselect
+          <ATreeselect
             ref="treeSelect"
             :multiple="false"
             :options="projectTaskDtos"
@@ -71,7 +71,7 @@
 
         <div class="form-group">
           <label>完成时间</label>
-          <a-locale-provider :locale="locale">
+          <a-config-provider :locale="locale">
             <a-date-picker
               v-model:value="planFinishedDate"
               style="width: 100%"
@@ -80,7 +80,7 @@
               :show-now="false"
               placeholder="请选择完成日期"
             />
-          </a-locale-provider>
+          </a-config-provider>
           <!-- <Date
             v-model="traceDto.planFinishedDate"
             style="width: 100%"
@@ -102,7 +102,6 @@
 </template>
 <script>
 import TraceResource from './TraceResource.js';
-import zhCN from 'ant-design-vue/lib/locale-provider/zh_CN';
 import Common from '../common/Common.js';
 import UpladFile from '../widget/UpladFile.js';
 import TraceCommon from './TraceCommon.js';
@@ -110,13 +109,25 @@ import TraceCommon from './TraceCommon.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';
 import { message } from 'ant-design-vue';
+import zhCN from 'ant-design-vue/es/locale/zh_CN';
+import dayjs from 'dayjs';
+import 'dayjs/locale/zh-cn';
+import weekday from 'dayjs/plugin/weekday';
+import localeData from 'dayjs/plugin/localeData';
+ 
+dayjs.extend(weekday);
+dayjs.extend(localeData);
+dayjs.locale('zh-cn');
+
 export default {
   components: {
     UpladFile,
 
     Treeselect,
+    ATreeselect,
     AudioField,
   },
   data: function () {
@@ -362,6 +373,9 @@ export default {
         TraceResource.uniqueByTraceId(_self.traceId).then(
           successData => {
             _self.traceDto = successData;
+            if(successData.planFinishedDate){
+              _self.planFinishedDate = dayjs(successData.planFinishedDate,'YYYY-MM-DD HH:mm:ss');
+            }
             if (
               successData != undefined &&
               successData.audioSrcs != undefined
@@ -443,7 +457,7 @@ export default {
           Common.addTokenToRequest(request);
         },
         success: function (data) {
-          _self.projectTaskDtos = data;
+          _self.projectTaskDtos = _self.convertToTreedata(data);
           console.log(_self.projectTaskDtos);
         },
         error: function (XMLHttpRequest, textStatus, errorThrown) {
@@ -451,6 +465,23 @@ export default {
         },
       });
     },
+    convertToTreedata: function (data) {
+      // console.log(data);
+      var returnData = [];
+      for (var i = 0; i < data.length; i++) {
+        var tempObj = {
+          title: data[i].label,
+          value: data[i].id,
+          key: data[i].id,
+        };
+        if ('children' in data[i] && data[i].children !== null) {
+          tempObj.children = this.convertToTreedata(data[i].children);
+        }
+        //push到数据数组中
+        returnData.push(tempObj);
+      }
+      return returnData;
+    },
     // 日期处理函数
     plusZero: function (n) {
       return n >= 10 ? n : '0' + n;

+ 1 - 1
src/widget/AuthAudio.vue

@@ -45,7 +45,7 @@ export default {
       let request = new XMLHttpRequest();
       request.responseType = 'blob';
       request.open('get', _self.audioSrc, true);
-      request.setRequestHeader('token', (_self.token == null) ? localStorage.getItem('token') : _self.token);
+      request.setRequestHeader('token', (_self.token == null) ? localStorage.getItem('#token') : _self.token);
       request.onload = function (e) {
         if (this.status == 200) {
           _self.src = URL.createObjectURL(this.response);