Browse Source

bug修复

ljb 2 weeks ago
parent
commit
9913c40709

+ 1 - 1
src/printOption/yfCostManage/yfCostStatistics/projectAllocationList.js

@@ -55,7 +55,7 @@ export default {
     },
     {
       label: '研发费用合计(元)',
-      prop: 'amount',
+      prop: 'total',
       width: 120,
       align: 'center',
     },

+ 227 - 96
src/views/project-manage/components/implement-form.vue

@@ -1,43 +1,87 @@
 <template>
   <div>
     <div class="tool-btn">
-      <el-button v-if="implementId" size="small" type="primary" icon="el-icon-printer" v-print="printConfig" @click="isPrintPage = true">打印</el-button>
+      <el-button
+        v-if="implementId"
+        size="small"
+        type="primary"
+        icon="el-icon-printer"
+        v-print="printConfig"
+        @click="isPrintPage = true"
+        >打印</el-button
+      >
     </div>
     <div id="implementDoc" class="doc-page" v-loading="loading">
       <div :class="['doc-header', { printCls: isPrintPage }]">
-        <h3 class="page-title" style="height: 60px; line-height: 60px; margin: 0;">{{ teantData.tenantName }}</h3>
-        <h3 class="page-title" style="margin: 5px 0 16px;">研发项目阶段性报告</h3>
+        <h3
+          class="page-title"
+          style="height: 60px; line-height: 60px; margin: 0"
+        >
+          {{ teantData.tenantName }}
+        </h3>
+        <h3 class="page-title" style="margin: 5px 0 16px">
+          研发项目阶段性报告
+        </h3>
 
         <div class="project-basic-info">
           <div class="info-row">
-            <span v-if="!disabled">{{ `研发项目名称:${ selProject.xmmc || '' }` }}</span>
-            <span v-else>{{ `研发项目名称:${ formData.xmEntity ? formData.xmEntity.xmmc : '' }` }}</span>
+            <span v-if="!disabled">{{
+              `研发项目名称:${selProject.xmmc || ""}`
+            }}</span>
+            <span v-else>{{
+              `研发项目名称:${formData.xmEntity ? formData.xmEntity.xmmc : ""}`
+            }}</span>
           </div>
           <div class="info-row">
-            <span v-if="!disabled">{{ `项目负责人:${ selProject.xmfzrxm || '' }` }}</span>
-            <span v-else>{{ `项目负责人:${ formData.xmEntity ? formData.xmEntity.xmfzrxm : '' }` }}</span>
+            <span v-if="!disabled">{{
+              `项目负责人:${selProject.xmfzrxm || ""}`
+            }}</span>
+            <span v-else>{{
+              `项目负责人:${
+                formData.xmEntity ? formData.xmEntity.xmfzrxm : ""
+              }`
+            }}</span>
           </div>
           <div class="info-row">
-            <span v-if="!disabled">{{ `项目申请单位:${ selProject.xmsqdw || '' }` }}</span>
-            <span v-else>{{ `项目申请单位:${ formData.xmEntity ? formData.xmEntity.xmsqdw : '' }` }}</span>
+            <span v-if="!disabled">{{
+              `项目申请单位:${selProject.xmsqdw || ""}`
+            }}</span>
+            <span v-else>{{
+              `项目申请单位:${
+                formData.xmEntity ? formData.xmEntity.xmsqdw : ""
+              }`
+            }}</span>
+          </div>
+          <div class="info-row">
+            {{ `项目执行期:${getXmDateRange || ""}` }}
           </div>
-          <div class="info-row">{{ `项目执行期:${ getXmDateRange || '' }` }}</div>
           <div class="info-row">
             <span>填报时间:</span>
-            <span v-if="!disabled"><el-date-picker v-model="formData.fillDate" value-format="yyyy-MM-dd" @change="handleFillDateChange" :disabled="disabled" /></span>
+            <span v-if="!disabled"
+              ><el-date-picker
+                v-model="formData.fillDate"
+                value-format="yyyy-MM-dd"
+                @change="handleFillDateChange"
+                :disabled="disabled"
+                :picker-options="pickerOptionsOptions"
+            /></span>
             <span v-else>{{ formData.fillDate }}</span>
           </div>
         </div>
       </div>
 
       <!-- 打印强制分页 -->
-      <div style="page-break-after: always;"></div>
+      <div style="page-break-after: always"></div>
 
-       <h3 class="page-title" style="margin: 5px 0 16px;">研发项目实施申请表</h3>
-      <table style="margin-top: 20px;">
+      <h3 class="page-title" style="margin: 5px 0 16px">研发项目实施申请表</h3>
+      <table style="margin-top: 20px">
         <tbody>
           <tr>
-            <td class="doc-label"><span v-if="!disabled" style="color: red; margin-right: 3px;">*</span>研发项目名称</td>
+            <td class="doc-label">
+              <span v-if="!disabled" style="color: red; margin-right: 3px"
+                >*</span
+              >研发项目名称
+            </td>
             <td class="doc-input">
               <project-select
                 v-if="!disabled"
@@ -47,12 +91,16 @@
                 @change="handleProjectChange"
                 :params="{ yearAndMonth: fillDateYearAndMonth }"
               ></project-select>
-              <span v-else>{{ formData.xmEntity ? formData.xmEntity.xmmc : '' }}</span>
+              <span v-else>{{
+                formData.xmEntity ? formData.xmEntity.xmmc : ""
+              }}</span>
             </td>
             <td class="doc-label">项目申请单位</td>
             <td class="doc-input">
               <span v-if="!disabled">{{ selProject.xmsqdw }}</span>
-              <span v-else>{{ formData.xmEntity ? formData.xmEntity.xmsqdw : '' }}</span>
+              <span v-else>{{
+                formData.xmEntity ? formData.xmEntity.xmsqdw : ""
+              }}</span>
             </td>
           </tr>
 
@@ -60,9 +108,15 @@
             <td class="doc-label">项目编号</td>
             <td class="doc-input">
               <span v-if="!disabled">{{ selProject.xmbh }}</span>
-              <span v-else>{{ formData.xmEntity ? formData.xmEntity.xmbh : '' }}</span>
+              <span v-else>{{
+                formData.xmEntity ? formData.xmEntity.xmbh : ""
+              }}</span>
+            </td>
+            <td class="doc-label">
+              <span v-if="!disabled" style="color: red; margin-right: 3px"
+                >*</span
+              >项目实施类型
             </td>
-            <td class="doc-label"><span v-if="!disabled" style="color: red; margin-right: 3px;">*</span>项目实施类型</td>
             <td class="doc-input">
               <avue-select
                 v-if="!disabled"
@@ -80,12 +134,16 @@
             <td class="doc-label">项目负责人</td>
             <td class="doc-input">
               <span v-if="!disabled">{{ selProject.xmfzrxm }}</span>
-              <span v-else>{{ formData.xmEntity ? formData.xmEntity.xmfzrxm : '' }}</span>
+              <span v-else>{{
+                formData.xmEntity ? formData.xmEntity.xmfzrxm : ""
+              }}</span>
             </td>
             <td class="doc-label">研究类型</td>
             <td class="doc-input">
               <span v-if="!disabled">{{ selProject.yjlx }}</span>
-              <span v-else>{{ formData.xmEntity ? formData.xmEntity.yjlx : '' }}</span>
+              <span v-else>{{
+                formData.xmEntity ? formData.xmEntity.yjlx : ""
+              }}</span>
             </td>
           </tr>
 
@@ -93,12 +151,16 @@
             <td class="doc-label">研发开始时间</td>
             <td class="doc-input">
               <span v-if="!disabled">{{ selProject.xmkssj }}</span>
-              <span v-else>{{ formData.xmEntity ? formData.xmEntity.xmkssj : '' }}</span>
+              <span v-else>{{
+                formData.xmEntity ? formData.xmEntity.xmkssj : ""
+              }}</span>
             </td>
             <td class="doc-label">研发结束时间</td>
             <td class="doc-input">
               <span v-if="!disabled">{{ selProject.xmjssj }}</span>
-              <span v-else>{{ formData.xmEntity ? formData.xmEntity.xmjssj : '' }}</span>
+              <span v-else>{{
+                formData.xmEntity ? formData.xmEntity.xmjssj : ""
+              }}</span>
             </td>
           </tr>
 
@@ -106,12 +168,16 @@
             <td class="doc-label">项目来源</td>
             <td class="doc-input">
               <span v-if="!disabled">{{ selProject.xmly }}</span>
-              <span v-else>{{ formData.xmEntity ? formData.xmEntity.xmly : '' }}</span>
+              <span v-else>{{
+                formData.xmEntity ? formData.xmEntity.xmly : ""
+              }}</span>
             </td>
             <td class="doc-label">项目开展形式</td>
             <td class="doc-input">
               <span v-if="!disabled">{{ selProject.xmkzxs }}</span>
-              <span v-else>{{ formData.xmEntity ? formData.xmEntity.xmkzxs : '' }}</span>
+              <span v-else>{{
+                formData.xmEntity ? formData.xmEntity.xmkzxs : ""
+              }}</span>
             </td>
           </tr>
 
@@ -119,48 +185,75 @@
             <td class="doc-label">预期成果形式</td>
             <td class="doc-input">
               <span v-if="!disabled">{{ selProject.yqcgxs }}</span>
-              <div v-else style="text-align: left; padding: 6px 12px;">
-                <div v-for="(item, index) of formData.yqcgxs" :key="index" style="line-height: 22px;">{{ item }}</div>
+              <div v-else style="text-align: left; padding: 6px 12px">
+                <div
+                  v-for="(item, index) of formData.yqcgxs"
+                  :key="index"
+                  style="line-height: 22px"
+                >
+                  {{ item }}
+                </div>
               </div>
             </td>
             <td class="doc-label">项目技术经济目标</td>
             <td class="doc-input">
               <span v-if="!disabled">{{ selProject.xmjsjjmb }}</span>
-              <div v-else style="text-align: left; padding: 6px 12px;">
-                <div v-for="(item, index) of formData.xmjsjjmb" :key="index" style="line-height: 22px;">{{ item }}</div>
+              <div v-else style="text-align: left; padding: 6px 12px">
+                <div
+                  v-for="(item, index) of formData.xmjsjjmb"
+                  :key="index"
+                  style="line-height: 22px"
+                >
+                  {{ item }}
+                </div>
               </div>
             </td>
           </tr>
-
         </tbody>
       </table>
 
-      <avue-form v-show="!isPrintPage" v-model="formData" :option="option" style="margin-top: 30px; padding: 0;">
+      <avue-form
+        v-show="!isPrintPage"
+        v-model="formData"
+        :option="option"
+        style="margin-top: 30px; padding: 0"
+      >
         <template slot="attachmentLabel">
           <label>附件信息:</label>
-          <div style="position: absolute; top: 0; left: 300px; z-index: 1;">
-            <file-download-btn templateKey="研发项目管理-阶段性报告"></file-download-btn>
+          <div style="position: absolute; top: 0; left: 300px; z-index: 1">
+            <file-download-btn
+              templateKey="研发项目管理-阶段性报告"
+            ></file-download-btn>
           </div>
         </template>
       </avue-form>
 
-      <div v-show="isPrintPage" class="file-list" style="margin-top: 30px;">
-        <div class="file-list-item" style="display: flex; margin-bottom: 18px;">
+      <div v-show="isPrintPage" class="file-list" style="margin-top: 30px">
+        <div class="file-list-item" style="display: flex; margin-bottom: 18px">
           <div class="name">附件信息:</div>
           <div class="file-wrap">
-            <div v-for="(item, idx) of formData.attachment" :key="idx">{{ item.label }}</div>
+            <div v-for="(item, idx) of formData.attachment" :key="idx">
+              {{ item.label }}
+            </div>
           </div>
         </div>
       </div>
-      <p v-if="!disabled" class="tip">注:可一次上传多个相关文件(文档、表格、图片等)。 支持格式:DOC, PDF, Excel, PNG, JPG, PPT 等。 请确保文件内容清晰有效。</p>
-
-      <div v-if="!disabled" class="btn-wrap" style="text-align: center; margin-top: 30px;">
-        <el-button type="primary" style="width: 160px;" @click="handleSaveBtn">保存</el-button>
+      <p v-if="!disabled" class="tip">
+        注:可一次上传多个相关文件(文档、表格、图片等)。 支持格式:DOC, PDF,
+        Excel, PNG, JPG, PPT 等。 请确保文件内容清晰有效。
+      </p>
+
+      <div
+        v-if="!disabled"
+        class="btn-wrap"
+        style="text-align: center; margin-top: 30px"
+      >
+        <el-button type="primary" style="width: 160px" @click="handleSaveBtn"
+          >保存</el-button
+        >
       </div>
     </div>
   </div>
-
-  
 </template>
 
 <script>
@@ -170,20 +263,25 @@ import { getDictionary } from "@/api/system/dictbiz";
 import { save, getDetail } from "@/api/projectManage/implement";
 import moment from "moment";
 import { mapGetters } from "vuex";
-import { getDetail as getTenantDetail } from '@/api/system/tenant';
+import { getDetail as getTenantDetail } from "@/api/system/tenant";
 import { downloadFileByUrl } from "@/util/util";
 
 export default {
   props: {
     implementId: [String, Number],
+    projectId: [String, Number],
+    projectData: {
+      type: Object,
+      default: () => {},
+    },
     disabled: {
       type: Boolean,
-      default: false
-    }
+      default: false,
+    },
   },
   components: {
     projectSelect,
-    fileDownloadBtn
+    fileDownloadBtn,
   },
   data() {
     return {
@@ -191,7 +289,7 @@ export default {
 
       loading: false,
 
-      currProjectId: '',
+      currProjectId: "",
       selProject: {},
 
       typeList: [],
@@ -200,28 +298,55 @@ export default {
 
       isPrintPage: false,
       printConfig: {
-        el: '#implementDoc', //被打印部分的id
+        el: "#implementDoc", //被打印部分的id
         closeCallback: () => {
           this.isPrintPage = false;
-        }
+        },
       },
     };
   },
   computed: {
     ...mapGetters(["userInfo"]),
+    pickerOptionsOptions() {
+      const startDate = this.selProject.xmkssj ? moment(this.selProject.xmkssj).toDate() : null;
+      const endDate = this.selProject.xmjssj ? moment(this.selProject.xmjssj).toDate() : null;
+      return {
+        disabledDate(time) {
+          if (startDate && time.getTime() < startDate.getTime()) {
+            return true;
+          }
+          if (endDate && time.getTime() > endDate.getTime()) {
+            return true;
+          }
+          return false;
+        },
+      };
+    },
     getXmDateRange() {
       if (this.disabled) {
-        let xmkssj = this.formData.xmEntity && this.formData.xmEntity.xmkssj ? moment(this.formData.xmEntity.xmkssj).format('yyyy年MM月DD日') : '';
-        let xmjssj = this.formData.xmEntity && this.formData.xmEntity.xmjssj ? moment(this.formData.xmEntity.xmjssj).format('yyyy年MM月DD日') : '';
+        let xmkssj =
+          this.formData.xmEntity && this.formData.xmEntity.xmkssj
+            ? moment(this.formData.xmEntity.xmkssj).format("yyyy年MM月DD日")
+            : "";
+        let xmjssj =
+          this.formData.xmEntity && this.formData.xmEntity.xmjssj
+            ? moment(this.formData.xmEntity.xmjssj).format("yyyy年MM月DD日")
+            : "";
         return `${xmkssj}至${xmjssj}`;
       } else {
-        let xmkssj = this.selProject.xmkssj ? moment(this.selProject.xmkssj).format('yyyy年MM月DD日') : '';
-        let xmjssj = this.selProject.xmjssj ? moment(this.selProject.xmjssj).format('yyyy年MM月DD日') : '';
+        let xmkssj = this.selProject.xmkssj
+          ? moment(this.selProject.xmkssj).format("yyyy年MM月DD日")
+          : "";
+        let xmjssj = this.selProject.xmjssj
+          ? moment(this.selProject.xmjssj).format("yyyy年MM月DD日")
+          : "";
         return `${xmkssj}至${xmjssj}`;
-      }      
+      }
     },
     fillDateYearAndMonth() {
-      return this.formData.fillDate ? moment(this.formData.fillDate).format('yyyyMM') : ''
+      return this.formData.fillDate
+        ? moment(this.formData.fillDate).format("yyyyMM")
+        : "";
     },
     option() {
       return {
@@ -237,10 +362,10 @@ export default {
             dataType: "object",
             propsHttp: {
               url: "link",
-              name: 'originalName',
+              name: "originalName",
               res: "data",
             },
-            action: '/api/kd-resource/oss/endpoint/put-file',
+            action: "/api/kd-resource/oss/endpoint/put-file",
             uploadPreview: (file, column, done) => {
               downloadFileByUrl(file.url, file.name);
               return;
@@ -248,25 +373,30 @@ export default {
             disabled: !this.currProjectId || this.disabled,
           },
         ],
-      }
+      };
     },
     getTypeName() {
-      let currObj = this.typeList.find(item => item.value == this.formData.type);
-      return currObj ? currObj.label : '';
-    }
+      let currObj = this.typeList.find(
+        (item) => item.value == this.formData.type
+      );
+      return currObj ? currObj.label : "";
+    },
   },
   watch: {
     detailData: {
       handler(newVal) {
         this.formData = newVal || {};
       },
-      immediate: true
-    }
+      immediate: true,
+    },
   },
   mounted() {
     this.getTenantDetailFunc(this.userInfo.tenant_id);
     if (this.implementId) {
       this.getImplementDetail();
+    } else {
+      this.currProjectId = this.projectId;
+      this.formData = { ...this.formData, fillDate: this.projectData.xmkssj };
     }
     this.getDictList("项目实施-阶段性报告-附件类型", "typeList");
   },
@@ -282,10 +412,10 @@ export default {
     handleFillDateChange(e) {
       this.loading = true;
       this.$refs.proSelect.getProjectList((list) => {
-        let _flag = list.some(item => item.id === this.currProjectId);
+        let _flag = list.some((item) => item.id === this.currProjectId);
         this.loading = false;
         if (!_flag) {
-          this.currProjectId = '';
+          this.currProjectId = "";
           this.selProject = {};
         }
       });
@@ -299,41 +429,43 @@ export default {
     },
     getImplementDetail() {
       this.loading = true;
-      getDetail(this.implementId).then(({ data }) => {
-        this.loading = false;
-        if (data.code == 200) {
-          this.formData = {
-            ...data.data,
-            attachment: JSON.parse(data.data.attachment)
-          };
-          console.log(this.formData)
-
-          if (this.formData.xmEntity && this.formData.xmEntity.yqcgxs) {
-            this.formData.yqcgxs = this.formData.xmEntity.yqcgxs.split(',');
-          }
-          if (this.formData.xmEntity && this.formData.xmEntity.xmjsjjmb) {
-            this.formData.xmjsjjmb = this.formData.xmEntity.xmjsjjmb.split(',');
+      getDetail(this.implementId)
+        .then(({ data }) => {
+          this.loading = false;
+          if (data.code == 200) {
+            this.formData = {
+              ...data.data,
+              attachment: JSON.parse(data.data.attachment),
+            };
+            console.log(this.formData);
+
+            if (this.formData.xmEntity && this.formData.xmEntity.yqcgxs) {
+              this.formData.yqcgxs = this.formData.xmEntity.yqcgxs.split(",");
+            }
+            if (this.formData.xmEntity && this.formData.xmEntity.xmjsjjmb) {
+              this.formData.xmjsjjmb =
+                this.formData.xmEntity.xmjsjjmb.split(",");
+            }
+
+            console.log(this.formData);
+            this.currProjectId = data.data.xmId;
           }
-
-          console.log(this.formData)
-          this.currProjectId = data.data.xmId;
-        }
-        
-      }).catch(() => {
-        this.loading = false;
-      });
+        })
+        .catch(() => {
+          this.loading = false;
+        });
     },
     handleProjectChange(data) {
       this.selProject = data;
     },
     validForm() {
-      let errorText = '';
+      let errorText = "";
       if (!this.formData.fillDate) {
-        errorText = '请选择填报时间';
+        errorText = "请选择填报时间";
       } else if (!this.currProjectId) {
-        errorText = '请选择填报的项目';
+        errorText = "请选择填报的项目";
       } else if (!this.formData.type) {
-        errorText = '请选择项目实施类型'
+        errorText = "请选择项目实施类型";
       }
 
       return errorText;
@@ -341,7 +473,7 @@ export default {
     handleSaveBtn() {
       let errorText = this.validForm();
       if (errorText) {
-        this.$message.error(errorText+'!');
+        this.$message.error(errorText + "!");
         return;
       }
 
@@ -357,11 +489,11 @@ export default {
     saveData(params) {
       save(params).then(({ data }) => {
         if (data.code == 200) {
-          this.$message.success(params.id ? '修改成功' : '保存成功!');
+          this.$message.success(params.id ? "修改成功" : "保存成功!");
           this.$emit("success");
         }
       });
-    }
+    },
   },
 };
 </script>
@@ -402,7 +534,6 @@ export default {
   }
 }
 
-
 .doc-page {
   width: 760px;
   margin: 30px auto;
@@ -440,4 +571,4 @@ tr td {
   margin-top: 0;
   font-size: 12px;
 }
-</style>
+</style>

+ 2 - 0
src/views/project-manage/implement.vue

@@ -66,6 +66,8 @@
       
       <implement-form
         :implementId="currId"
+        :projectId="params.xmId"
+        :projectData="selProject"
         :disabled="isFormReadonly"
         @success="handleImplementSucc"
       >

+ 15 - 14
src/views/yf-cost-manage/yf-cost-statistics/person-cost-statistics/project-allocation-list.vue

@@ -114,6 +114,7 @@ export default window.$crudCommon({
     printTable(isLandscape) {
       this.wideTableColumns = this.printOption.column;
       this.wideTableData = [...this.$refs.crud.list];
+      console.log(this.$refs.crud)
       if (this.wideTableData.length) {
         this.wideTableData.push(this.$refs.crud.sumsList);
       }
@@ -135,22 +136,22 @@ export default window.$crudCommon({
   res: ({ data }) => {
     data.records = data.records.map(item => {
       // 社保合计
-      let socSecTotal = new Decimal(item.pensionInsurance || 0)
-      .add(new Decimal(item.medicalInsurance || 0))
-      .add(new Decimal(item.unemploymentInsurance || 0))
-      .add(new Decimal(item.injuryInsurance || 0))
-      .add(new Decimal(item.maternityInsurance || 0));
-      item.socSecTotal = socSecTotal.toFixed(2);
+      // let socSecTotal = new Decimal(item.pensionInsurance || 0)
+      // .add(new Decimal(item.medicalInsurance || 0))
+      // .add(new Decimal(item.unemploymentInsurance || 0))
+      // .add(new Decimal(item.injuryInsurance || 0))
+      // .add(new Decimal(item.maternityInsurance || 0));
+      // item.socSecTotal = socSecTotal.toFixed(2);
 
       // 合计
-      let amount = new Decimal(item.averageMonthlySalary || 0)
-      .add(new Decimal(item.totalInsurance || 0))
-      .add(new Decimal(item.providentFund || 0))
-      .add(new Decimal(item.bonus || 0))
-      .add(new Decimal(item.benefit || 0))
-      .add(new Decimal(item.pensionInsuranceBc || 0))
-      .add(new Decimal(item.medicalInsuranceBc || 0));
-      item.amount = amount.toFixed(2);
+      // let amount = new Decimal(item.averageMonthlySalary || 0)
+      // .add(new Decimal(item.totalInsurance || 0))
+      // .add(new Decimal(item.providentFund || 0))
+      // .add(new Decimal(item.bonus || 0))
+      // .add(new Decimal(item.benefit || 0))
+      // .add(new Decimal(item.pensionInsuranceBc || 0))
+      // .add(new Decimal(item.medicalInsuranceBc || 0));
+      // item.amount = amount.toFixed(2);
 
       return item;
     })