Browse Source

提交科研预算模块代码

ljb 10 months ago
parent
commit
df77e58c28

+ 39 - 0
src/api/projectManage/otherCost.js

@@ -0,0 +1,39 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/kd-scientific/ys-qtfy/page',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/kd-scientific/ys-qtfy/save',
+    method: 'post',
+    data: row
+  })
+}
+
+
+export const update = (row) => {
+  return request({
+    url: '/api/kd-scientific/ys-qtfy/update',
+    method: 'post',
+    data: row
+  })
+}
+
+
+export const remove = (data) => {
+  return request({
+    url: '/api/kd-scientific/ys-qtfy/remove',
+    method: 'post',
+    data
+  })
+}

+ 39 - 0
src/api/projectManage/outsourcingCost.js

@@ -0,0 +1,39 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/kd-scientific/ys-wtwbyjkffy/page',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/kd-scientific/ys-wtwbyjkffy/save',
+    method: 'post',
+    data: row
+  })
+}
+
+
+export const update = (row) => {
+  return request({
+    url: '/api/kd-scientific/ys-wtwbyjkffy/update',
+    method: 'post',
+    data: row
+  })
+}
+
+
+export const remove = (data) => {
+  return request({
+    url: '/api/kd-scientific/ys-wtwbyjkffy/remove',
+    method: 'post',
+    data
+  })
+}

+ 39 - 0
src/api/projectManage/wxzctxCost.js

@@ -0,0 +1,39 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/kd-scientific/ys-wxzctxfy/page',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/kd-scientific/ys-wxzctxfy/save',
+    method: 'post',
+    data: row
+  })
+}
+
+
+export const update = (row) => {
+  return request({
+    url: '/api/kd-scientific/ys-wxzctxfy/update',
+    method: 'post',
+    data: row
+  })
+}
+
+
+export const remove = (data) => {
+  return request({
+    url: '/api/kd-scientific/ys-wxzctxfy/remove',
+    method: 'post',
+    data
+  })
+}

+ 39 - 0
src/api/projectManage/zbCost.js

@@ -0,0 +1,39 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/kd-scientific/ys-zbtsysyfy/page',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/kd-scientific/ys-zbtsysyfy/save',
+    method: 'post',
+    data: row
+  })
+}
+
+
+export const update = (row) => {
+  return request({
+    url: '/api/kd-scientific/ys-zbtsysyfy/update',
+    method: 'post',
+    data: row
+  })
+}
+
+
+export const remove = (data) => {
+  return request({
+    url: '/api/kd-scientific/ys-zbtsysyfy/remove',
+    method: 'post',
+    data
+  })
+}

+ 39 - 0
src/api/projectManage/zjfyycqdtfyCost.js

@@ -0,0 +1,39 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/kd-scientific/ys-zjfyycqdtfy/page',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/kd-scientific/ys-zjfyycqdtfy/save',
+    method: 'post',
+    data: row
+  })
+}
+
+
+export const update = (row) => {
+  return request({
+    url: '/api/kd-scientific/ys-zjfyycqdtfy/update',
+    method: 'post',
+    data: row
+  })
+}
+
+
+export const remove = (data) => {
+  return request({
+    url: '/api/kd-scientific/ys-zjfyycqdtfy/remove',
+    method: 'post',
+    data
+  })
+}

+ 47 - 0
src/option/projectManage/otherCost.js

@@ -0,0 +1,47 @@
+export default {
+  height: 'auto',
+  calcHeight: 30,
+  tip: false,
+  searchShow: true,
+  searchMenuSpan: 6,
+  border: true,
+  index: true,
+  viewBtn: true,
+  selection: true,
+  searchLabelWidth: 90,
+  labelWidth: 90,
+  menuWidth: 220,
+  dialogClickModal: false,
+  dialogWidth: 500,
+  dialogType: "drawer",
+  height: '600',
+  column: [
+    {
+      label: '费用内容',
+      prop: 'fyje',
+      type: 'input',
+      minWidth: 300,
+      span: 24,
+      showOverflowTooltip: true,
+      rules: [{
+        required: true,
+        message: '请输入费用内容',
+        trigger: 'change',
+      }]
+    },
+    {
+      label: '预算金额',
+      prop: 'ysje',
+      type: 'number',
+      width: 90,
+      span: 24,
+      align: 'center',
+      showOverflowTooltip: true,
+      rules: [{
+        required: true,
+        message: '请输入预算金额',
+        trigger: 'change',
+      }]
+    },
+  ],
+};

+ 59 - 0
src/option/projectManage/outsourcingCost.js

@@ -0,0 +1,59 @@
+export default {
+  height: 'auto',
+  calcHeight: 30,
+  tip: false,
+  searchShow: true,
+  searchMenuSpan: 6,
+  border: true,
+  index: true,
+  viewBtn: true,
+  selection: true,
+  searchLabelWidth: 90,
+  labelWidth: 90,
+  menuWidth: 220,
+  dialogClickModal: false,
+  dialogWidth: 500,
+  dialogType: "drawer",
+  height: '600',
+  column: [
+    {
+      label: '受托单位名称',
+      prop: 'stdwmc',
+      type: 'input',
+      minWidth: 200,
+      span: 24,
+      showOverflowTooltip: true,
+      rules: [{
+        required: true,
+        message: '请输入委托单位名称',
+        trigger: 'change',
+      }]
+    },
+    {
+      label: '工作内容',
+      prop: 'zznr',
+      type: 'textarea',
+      minWidth: 300,
+      span: 24,
+      showOverflowTooltip: true,
+      rules: [{
+        required: true,
+        message: '请输入工作内容',
+        trigger: 'change',
+      }]
+    },
+    {
+      label: '委外费用/元',
+      prop: 'wwfy',
+      type: 'number',
+      width: 90,
+      span: 24,
+      showOverflowTooltip: true,
+      rules: [{
+        required: true,
+        message: '请输入委外费用',
+        trigger: 'change',
+      }]
+    },
+  ],
+};

+ 80 - 0
src/option/projectManage/wxzctxCost.js

@@ -0,0 +1,80 @@
+export default {
+  height: 'auto',
+  calcHeight: 30,
+  tip: false,
+  searchShow: true,
+  searchMenuSpan: 6,
+  border: true,
+  index: true,
+  viewBtn: true,
+  selection: true,
+  searchLabelWidth: 90,
+  labelWidth: 160,
+  menuWidth: 220,
+  dialogClickModal: false,
+  dialogWidth: 500,
+  dialogType: "drawer",
+  height: '600',
+  column: [
+    {
+      label: '资产名称',
+      prop: 'zcmc',
+      type: 'select',
+      minWidth: 220,
+      span: 24,
+      dicUrl: '',
+      dicFormatter:(res)=>{
+        return res.data.records
+      },
+      dicQuery: {
+        current: 1,
+        size: 99999,
+        yearAndMonth: ''
+      },
+      props: {
+        label: 'zcmc',
+        value: 'id',
+      },
+      showOverflowTooltip: true,
+      rules: [{
+        required: true,
+        message: '请选择资产名称',
+        trigger: 'blur',
+      }]
+    },
+    {
+      label: '在项目的工作时长(月)',
+      prop: 'zzsc',
+      type: 'number',
+      width: 140,
+      span: 24,
+      align: 'center',
+      showOverflowTooltip: true,
+      rules: [{
+        required: true,
+        message: '请输入工作时长',
+        trigger: 'change',
+      }]
+    },
+    {
+      label: '月摊销额',
+      prop: 'ytxe',
+      type: 'number',
+      width: 90,
+      span: 24,
+      align: 'center',
+      showOverflowTooltip: true,
+      disabled: true,
+    },
+    {
+      label: '预算合计/元',
+      prop: 'hjfy',
+      type: 'number',
+      width: 90,
+      span: 24,
+      align: 'center',
+      showOverflowTooltip: true,
+      display: false,
+    },
+  ],
+};

+ 47 - 0
src/option/projectManage/zbCost.js

@@ -0,0 +1,47 @@
+export default {
+  height: 'auto',
+  calcHeight: 30,
+  tip: false,
+  searchShow: true,
+  searchMenuSpan: 6,
+  border: true,
+  index: true,
+  viewBtn: true,
+  selection: true,
+  searchLabelWidth: 90,
+  labelWidth: 90,
+  menuWidth: 220,
+  dialogClickModal: false,
+  dialogWidth: 500,
+  dialogType: "drawer",
+  height: '600',
+  column: [
+    {
+      label: '费用内容',
+      prop: 'fyje',
+      type: 'input',
+      minWidth: 300,
+      span: 24,
+      showOverflowTooltip: true,
+      rules: [{
+        required: true,
+        message: '请输入费用内容',
+        trigger: 'change',
+      }]
+    },
+    {
+      label: '预算金额',
+      prop: 'ysje',
+      type: 'number',
+      width: 90,
+      span: 24,
+      align: 'center',
+      showOverflowTooltip: true,
+      rules: [{
+        required: true,
+        message: '请输入预算金额',
+        trigger: 'change',
+      }]
+    },
+  ],
+};

+ 107 - 0
src/option/projectManage/zjfyycqdtfyCost.js

@@ -0,0 +1,107 @@
+export default {
+  height: 'auto',
+  calcHeight: 30,
+  tip: false,
+  searchShow: true,
+  searchMenuSpan: 6,
+  border: true,
+  index: true,
+  viewBtn: true,
+  selection: true,
+  searchLabelWidth: 90,
+  labelWidth: 160,
+  menuWidth: 220,
+  dialogClickModal: false,
+  dialogWidth: 500,
+  dialogType: "drawer",
+  height: '600',
+  column: [
+    {
+      label: '资产名称',
+      prop: 'zcmc',
+      type: 'select',
+      minWidth: 140,
+      span: 24,
+      dicUrl: '',
+      dicFormatter:(res)=>{
+        return res.data.records
+      },
+      dicQuery: {
+        current: 1,
+        size: 99999,
+        yearAndMonth: ''
+      },
+      props: {
+        label: 'zcmc',
+        value: 'id',
+      },
+      showOverflowTooltip: true,
+      rules: [{
+        required: true,
+        message: '请选择资产名称',
+        trigger: 'blur',
+      }]
+    },
+    {
+      label: '在项目的工作时长(月)',
+      prop: 'zzsc',
+      type: 'number',
+      width: 140,
+      span: 24,
+      align: 'center',
+      showOverflowTooltip: true,
+      rules: [{
+        required: true,
+        message: '请输入工作时长',
+        trigger: 'change',
+      }]
+    },
+    {
+      label: '月折旧额',
+      prop: 'ytxe',
+      type: 'number',
+      width: 90,
+      span: 24,
+      align: 'center',
+      showOverflowTooltip: true,
+      disabled: true,
+    },
+    {
+      label: '预算合计/元',
+      prop: 'hjfy',
+      type: 'number',
+      width: 90,
+      span: 24,
+      align: 'center',
+      showOverflowTooltip: true,
+      display: false,
+    },
+    {
+      label: '长期待摊费用名称',
+      prop: 'cqdtfymc',
+      type: 'input',
+      width: 160,
+      span: 24,
+      showOverflowTooltip: true,
+      rules: [{
+        required: true,
+        message: '请输入长期待摊费用名称',
+        trigger: 'change',
+      }]
+    },
+    {
+      label: '长期待摊费用金额',
+      prop: 'cqdtfyysje',
+      type: 'number',
+      width: 120,
+      span: 24,
+      align: 'center',
+      showOverflowTooltip: true,
+      rules: [{
+        required: true,
+        message: '请输入长期待摊费用金额',
+        trigger: 'change',
+      }]
+    },
+  ],
+};

+ 112 - 0
src/views/project-manage/components/other-cost.vue

@@ -0,0 +1,112 @@
+<template>
+  <div>
+    <avue-crud
+      ref="crud"
+      v-bind="bindVal"
+      v-on="onEvent"
+      v-model="form"
+      :page.sync="page"
+      :before-open="handleBeforeOpen"
+      :permission="permissionList"
+    >
+      <template slot="menuLeft">
+        <el-button
+          v-if="!isSelAnnual"
+          type="danger"
+          size="small"
+          icon="el-icon-delete"
+          plain
+          @click="handleDelete"
+        >
+          删 除
+        </el-button>
+        <el-button
+          v-if="!isSelAnnual"
+          type="success"
+          size="small"
+          plain
+          icon="el-icon-upload2"
+          @click="handleImport"
+        >
+          导入
+        </el-button>
+        <el-button
+          type="warning"
+          size="small"
+          plain
+          icon="el-icon-download"
+          @click="handleExport"
+        >
+          导出
+        </el-button>
+        <print-table-btn @click="printTable" />
+      </template>
+      
+    </avue-crud>
+
+    <upload-excel-dialog ref="uploadExcelDialog" :uploadAfter="uploadAfter"/>
+
+    <WideTablePrinter
+      ref="printWideTable"
+      :columns="wideTableColumns"
+      :data="data"
+      :print-title="printTitle"
+      :rows-per-page="30"
+      :default-landscape="true"
+    />
+  </div>
+</template>
+
+<script>
+import {exportBloByPost} from "@/api/common";
+import UploadExcelDialog from "@/components/upload-excel-dialog";
+import {getToken} from "@/util/auth";
+import {downloadXls} from "@/util/util";
+
+
+export default window.$crudCommon({
+  components: {
+    UploadExcelDialog,
+  },
+  data() {
+    return {
+      wideTableColumns: [],
+      printTitle: "",
+    };
+  },
+  created() {
+    this.option.height = window.innerHeight - 270;
+  },
+  methods: {
+    handleImport() {
+      this.$refs.uploadExcelDialog.open('/api/kd-scientific/ys-qtfy/import');
+    },
+    uploadAfter() {
+      this.page.currentPage = 1;
+      this.getList(this.page);
+    },
+    handleExport() {
+      exportBloByPost(`/api/kd-scientific/ys-qtfy/export?${this.website.tokenHeader}=${getToken()}`, this.params).then(res => {
+        downloadXls(res.data, `其他费用.xlsx`);
+      });
+    },
+    /**
+     * 打印表格
+     * @param isLandscape 是否横向打印
+     */
+    printTable(isLandscape) {
+      this.wideTableColumns = this.$refs.crud.columnOption;
+      this.printTitle = `其他费用`;
+      this.$nextTick(() => {
+        this.$refs.printWideTable.printTable(isLandscape);
+      })
+    },
+  },
+}, {
+  // 模块路径
+  name: 'projectManage/otherCost',
+  res: ({ data }) => {
+    return data;
+  },
+});
+</script>

+ 112 - 0
src/views/project-manage/components/outsourcing-cost.vue

@@ -0,0 +1,112 @@
+<template>
+  <div>
+    <avue-crud
+      ref="crud"
+      v-bind="bindVal"
+      v-on="onEvent"
+      v-model="form"
+      :page.sync="page"
+      :before-open="handleBeforeOpen"
+      :permission="permissionList"
+    >
+      <template slot="menuLeft">
+        <el-button
+          v-if="!isSelAnnual"
+          type="danger"
+          size="small"
+          icon="el-icon-delete"
+          plain
+          @click="handleDelete"
+        >
+          删 除
+        </el-button>
+        <el-button
+          v-if="!isSelAnnual"
+          type="success"
+          size="small"
+          plain
+          icon="el-icon-upload2"
+          @click="handleImport"
+        >
+          导入
+        </el-button>
+        <el-button
+          type="warning"
+          size="small"
+          plain
+          icon="el-icon-download"
+          @click="handleExport"
+        >
+          导出
+        </el-button>
+        <print-table-btn @click="printTable" />
+      </template>
+      
+    </avue-crud>
+
+    <upload-excel-dialog ref="uploadExcelDialog" :uploadAfter="uploadAfter"/>
+
+    <WideTablePrinter
+      ref="printWideTable"
+      :columns="wideTableColumns"
+      :data="data"
+      :print-title="printTitle"
+      :rows-per-page="30"
+      :default-landscape="true"
+    />
+  </div>
+</template>
+
+<script>
+import {exportBloByPost} from "@/api/common";
+import UploadExcelDialog from "@/components/upload-excel-dialog";
+import {getToken} from "@/util/auth";
+import {downloadXls} from "@/util/util";
+
+
+export default window.$crudCommon({
+  components: {
+    UploadExcelDialog,
+  },
+  data() {
+    return {
+      wideTableColumns: [],
+      printTitle: "",
+    };
+  },
+  created() {
+    this.option.height = window.innerHeight - 270;
+  },
+  methods: {
+    handleImport() {
+      this.$refs.uploadExcelDialog.open('/api/kd-scientific/ys-wtwbyjkffy/import');
+    },
+    uploadAfter() {
+      this.page.currentPage = 1;
+      this.getList(this.page);
+    },
+    handleExport() {
+      exportBloByPost(`/api/kd-scientific/ys-wtwbyjkffy/export?${this.website.tokenHeader}=${getToken()}`, this.params).then(res => {
+        downloadXls(res.data, `委托外部研究开发费用.xlsx`);
+      });
+    },
+    /**
+     * 打印表格
+     * @param isLandscape 是否横向打印
+     */
+    printTable(isLandscape) {
+      this.wideTableColumns = this.$refs.crud.columnOption;
+      this.printTitle = `委托外部研究开发费用`;
+      this.$nextTick(() => {
+        this.$refs.printWideTable.printTable(isLandscape);
+      })
+    },
+  },
+}, {
+  // 模块路径
+  name: 'projectManage/outsourcingCost',
+  res: ({ data }) => {
+    return data;
+  },
+});
+</script>

+ 26 - 6
src/views/project-manage/components/project-budget.vue

@@ -7,27 +7,47 @@
     <el-tab-pane label="二、直接投入费用">
       <zztl-cost></zztl-cost>
     </el-tab-pane>
-    <el-tab-pane label="三、折旧费用与长期待摊费用">定时任务补偿</el-tab-pane>
-    <el-tab-pane label="四、无形资产摊销费用">定时任务补偿</el-tab-pane>
+    <el-tab-pane label="三、折旧费用与长期待摊费用">
+      <zjfyycqdtfy-cost></zjfyycqdtfy-cost>
+    </el-tab-pane>
+    <el-tab-pane label="四、无形资产摊销费用">
+      <wxzctx-cost></wxzctx-cost>
+    </el-tab-pane>
     <el-tab-pane label="五、设计费用">
       <design-cost></design-cost>
     </el-tab-pane>
-    <el-tab-pane label="六、装备调试费用与实验费用">定时任务补偿</el-tab-pane>
-    <el-tab-pane label="七、委托外部研究开发费">定时任务补偿</el-tab-pane>
-    <el-tab-pane label="八、其他费用">定时任务补偿</el-tab-pane>
+    <el-tab-pane label="六、装备调试费用与实验费用">
+      <zb-cost></zb-cost>
+    </el-tab-pane>
+    <el-tab-pane label="七、委托外部研究开发费">
+      <outsourcing-cost></outsourcing-cost>
+    </el-tab-pane>
+    <el-tab-pane label="八、其他费用">
+      <other-cost></other-cost>
+    </el-tab-pane>
   </el-tabs>
 </template>
 
 <script>
 import personCost from './person-cost.vue';
 import zztlCost from './zztl-cost.vue';
+import zjfyycqdtfyCost from './zjfyycqdtfy-cost.vue';
+import wxzctxCost from './wxzctx-cost.vue';
 import designCost from './design-cost.vue';
+import zbCost from './zb-cost.vue';
+import outsourcingCost from './outsourcing-cost.vue';
+import otherCost from './other-cost.vue';
 
 export default {
   components: {
     personCost,
     zztlCost,
-    designCost
+    zjfyycqdtfyCost,
+    wxzctxCost,
+    designCost,
+    zbCost,
+    outsourcingCost,
+    otherCost
   },
 }
 </script>

+ 137 - 0
src/views/project-manage/components/wxzctx-cost.vue

@@ -0,0 +1,137 @@
+<template>
+  <div>
+    <avue-crud
+      ref="crud"
+      v-bind="bindVal"
+      v-on="onEvent"
+      v-model="form"
+      :page.sync="page"
+      :before-open="handleBeforeOpen"
+      :permission="permissionList"
+    >
+      <template slot="menuLeft">
+        <el-button
+          v-if="!isSelAnnual"
+          type="danger"
+          size="small"
+          icon="el-icon-delete"
+          plain
+          @click="handleDelete"
+        >
+          删 除
+        </el-button>
+        <el-button
+          v-if="!isSelAnnual"
+          type="success"
+          size="small"
+          plain
+          icon="el-icon-upload2"
+          @click="handleImport"
+        >
+          导入
+        </el-button>
+        <el-button
+          type="warning"
+          size="small"
+          plain
+          icon="el-icon-download"
+          @click="handleExport"
+        >
+          导出
+        </el-button>
+        <print-table-btn @click="printTable" />
+      </template>
+      
+    </avue-crud>
+
+    <upload-excel-dialog ref="uploadExcelDialog" :uploadAfter="uploadAfter"/>
+
+    <WideTablePrinter
+      ref="printWideTable"
+      :columns="wideTableColumns"
+      :data="data"
+      :print-title="printTitle"
+      :rows-per-page="30"
+      :default-landscape="true"
+    />
+  </div>
+</template>
+
+<script>
+import {exportBloByPost} from "@/api/common";
+import UploadExcelDialog from "@/components/upload-excel-dialog";
+import {getToken} from "@/util/auth";
+import {downloadXls} from "@/util/util";
+
+
+export default window.$crudCommon({
+  components: {
+    UploadExcelDialog,
+  },
+  data() {
+    return {
+      wideTableColumns: [],
+      printTitle: "",
+    };
+  },
+  created() {
+    this.option.height = window.innerHeight - 270;
+
+    let newOption = { ...this.option };
+    // 姓名下拉框,设置监听事件
+    newOption.column.forEach(item => {
+      if (item.prop == "zcmc") {
+        item.change = ({ item }) => {
+          if (!!item) {
+            this.form = {
+              ...this.form,
+              ytxe: item.zcyz,
+            };
+          }
+        }
+      }
+    });
+    this.option = { ...newOption };
+  },
+  methods: {
+    handleBeforeOpen(done) {
+      this.option.column.forEach(item => {
+        if (item.prop == "zcmc") {
+          item.dicUrl = '/api/kd-scientific/zc/page';
+          item.dicQuery.yearAndMonth = '202507';
+        }
+      });
+      done();
+    },
+    handleImport() {
+      this.$refs.uploadExcelDialog.open('/api/kd-scientific/ys-wxzctxfy/import');
+    },
+    uploadAfter() {
+      this.page.currentPage = 1;
+      this.getList(this.page);
+    },
+    handleExport() {
+      exportBloByPost(`/api/kd-scientific/ys-wxzctxfy/export?${this.website.tokenHeader}=${getToken()}`, this.params).then(res => {
+        downloadXls(res.data, `无形资产摊销费用.xlsx`);
+      });
+    },
+    /**
+     * 打印表格
+     * @param isLandscape 是否横向打印
+     */
+    printTable(isLandscape) {
+      this.wideTableColumns = this.$refs.crud.columnOption;
+      this.printTitle = `无形资产摊销费用`;
+      this.$nextTick(() => {
+        this.$refs.printWideTable.printTable(isLandscape);
+      })
+    },
+  },
+}, {
+  // 模块路径
+  name: 'projectManage/wxzctxCost',
+  res: ({ data }) => {
+    return data;
+  },
+});
+</script>

+ 112 - 0
src/views/project-manage/components/zb-cost.vue

@@ -0,0 +1,112 @@
+<template>
+  <div>
+    <avue-crud
+      ref="crud"
+      v-bind="bindVal"
+      v-on="onEvent"
+      v-model="form"
+      :page.sync="page"
+      :before-open="handleBeforeOpen"
+      :permission="permissionList"
+    >
+      <template slot="menuLeft">
+        <el-button
+          v-if="!isSelAnnual"
+          type="danger"
+          size="small"
+          icon="el-icon-delete"
+          plain
+          @click="handleDelete"
+        >
+          删 除
+        </el-button>
+        <el-button
+          v-if="!isSelAnnual"
+          type="success"
+          size="small"
+          plain
+          icon="el-icon-upload2"
+          @click="handleImport"
+        >
+          导入
+        </el-button>
+        <el-button
+          type="warning"
+          size="small"
+          plain
+          icon="el-icon-download"
+          @click="handleExport"
+        >
+          导出
+        </el-button>
+        <print-table-btn @click="printTable" />
+      </template>
+      
+    </avue-crud>
+
+    <upload-excel-dialog ref="uploadExcelDialog" :uploadAfter="uploadAfter"/>
+
+    <WideTablePrinter
+      ref="printWideTable"
+      :columns="wideTableColumns"
+      :data="data"
+      :print-title="printTitle"
+      :rows-per-page="30"
+      :default-landscape="true"
+    />
+  </div>
+</template>
+
+<script>
+import {exportBloByPost} from "@/api/common";
+import UploadExcelDialog from "@/components/upload-excel-dialog";
+import {getToken} from "@/util/auth";
+import {downloadXls} from "@/util/util";
+
+
+export default window.$crudCommon({
+  components: {
+    UploadExcelDialog,
+  },
+  data() {
+    return {
+      wideTableColumns: [],
+      printTitle: "",
+    };
+  },
+  created() {
+    this.option.height = window.innerHeight - 270;
+  },
+  methods: {
+    handleImport() {
+      this.$refs.uploadExcelDialog.open('/api/kd-scientific/ys-zbtsysyfy/import');
+    },
+    uploadAfter() {
+      this.page.currentPage = 1;
+      this.getList(this.page);
+    },
+    handleExport() {
+      exportBloByPost(`/api/kd-scientific/ys-zbtsysyfy/export?${this.website.tokenHeader}=${getToken()}`, this.params).then(res => {
+        downloadXls(res.data, `装备调试费用与试验费用.xlsx`);
+      });
+    },
+    /**
+     * 打印表格
+     * @param isLandscape 是否横向打印
+     */
+    printTable(isLandscape) {
+      this.wideTableColumns = this.$refs.crud.columnOption;
+      this.printTitle = `装备调试费用与试验费用`;
+      this.$nextTick(() => {
+        this.$refs.printWideTable.printTable(isLandscape);
+      })
+    },
+  },
+}, {
+  // 模块路径
+  name: 'projectManage/zbCost',
+  res: ({ data }) => {
+    return data;
+  },
+});
+</script>

+ 137 - 0
src/views/project-manage/components/zjfyycqdtfy-cost.vue

@@ -0,0 +1,137 @@
+<template>
+  <div>
+    <avue-crud
+      ref="crud"
+      v-bind="bindVal"
+      v-on="onEvent"
+      v-model="form"
+      :page.sync="page"
+      :before-open="handleBeforeOpen"
+      :permission="permissionList"
+    >
+      <template slot="menuLeft">
+        <el-button
+          v-if="!isSelAnnual"
+          type="danger"
+          size="small"
+          icon="el-icon-delete"
+          plain
+          @click="handleDelete"
+        >
+          删 除
+        </el-button>
+        <el-button
+          v-if="!isSelAnnual"
+          type="success"
+          size="small"
+          plain
+          icon="el-icon-upload2"
+          @click="handleImport"
+        >
+          导入
+        </el-button>
+        <el-button
+          type="warning"
+          size="small"
+          plain
+          icon="el-icon-download"
+          @click="handleExport"
+        >
+          导出
+        </el-button>
+        <print-table-btn @click="printTable" />
+      </template>
+      
+    </avue-crud>
+
+    <upload-excel-dialog ref="uploadExcelDialog" :uploadAfter="uploadAfter"/>
+
+    <WideTablePrinter
+      ref="printWideTable"
+      :columns="wideTableColumns"
+      :data="data"
+      :print-title="printTitle"
+      :rows-per-page="30"
+      :default-landscape="true"
+    />
+  </div>
+</template>
+
+<script>
+import {exportBloByPost} from "@/api/common";
+import UploadExcelDialog from "@/components/upload-excel-dialog";
+import {getToken} from "@/util/auth";
+import {downloadXls} from "@/util/util";
+
+
+export default window.$crudCommon({
+  components: {
+    UploadExcelDialog,
+  },
+  data() {
+    return {
+      wideTableColumns: [],
+      printTitle: "",
+    };
+  },
+  created() {
+    this.option.height = window.innerHeight - 270;
+
+    let newOption = { ...this.option };
+    // 姓名下拉框,设置监听事件
+    newOption.column.forEach(item => {
+      if (item.prop == "zcmc") {
+        item.change = ({ item }) => {
+          if (!!item) {
+            this.form = {
+              ...this.form,
+              ytxe: item.zcyz,
+            };
+          }
+        }
+      }
+    });
+    this.option = { ...newOption };
+  },
+  methods: {
+    handleBeforeOpen(done) {
+      this.option.column.forEach(item => {
+        if (item.prop == "zcmc") {
+          item.dicUrl = '/api/kd-scientific/zc/page';
+          item.dicQuery.yearAndMonth = '202507';
+        }
+      });
+      done();
+    },
+    handleImport() {
+      this.$refs.uploadExcelDialog.open('/api/kd-scientific/ys-zjfyycqdtfy/import');
+    },
+    uploadAfter() {
+      this.page.currentPage = 1;
+      this.getList(this.page);
+    },
+    handleExport() {
+      exportBloByPost(`/api/kd-scientific/ys-zjfyycqdtfy/export?${this.website.tokenHeader}=${getToken()}`, this.params).then(res => {
+        downloadXls(res.data, `折旧费用与长期待摊费用.xlsx`);
+      });
+    },
+    /**
+     * 打印表格
+     * @param isLandscape 是否横向打印
+     */
+    printTable(isLandscape) {
+      this.wideTableColumns = this.$refs.crud.columnOption;
+      this.printTitle = `折旧费用与长期待摊费用`;
+      this.$nextTick(() => {
+        this.$refs.printWideTable.printTable(isLandscape);
+      })
+    },
+  },
+}, {
+  // 模块路径
+  name: 'projectManage/zjfyycqdtfyCost',
+  res: ({ data }) => {
+    return data;
+  },
+});
+</script>