Browse Source

提交科研仪器设备明细表页面

ljb 10 months ago
parent
commit
36175d2b10

+ 8 - 20
src/api/yfCostManage/basicDataSetting/kyDeviceList.js

@@ -2,7 +2,7 @@ import request from '@/router/axios';
 
 export const getList = (current, size, params) => {
   return request({
-    url: '/api/kd-scientific/asset/page',
+    url: '/api/kd-scientific/asset/keyanyiqishebeimingxibiao/page',
     method: 'get',
     params: {
       ...params,
@@ -12,30 +12,18 @@ export const getList = (current, size, params) => {
   })
 }
 
-export const add = (row) => {
+export const remove = data => {
   return request({
-    url: '/api/kd-scientific/asset/save',
+    url: '/api/kd-scientific/asset/keyanyiqishebeimingxibiao/remove',
     method: 'post',
-    data: row
+    data
   })
 }
 
-
-export const update = (row) => {
+export const fetchDeviceData = params => {
   return request({
-    url: '/api/kd-scientific/asset/update',
-    method: 'post',
-    data: row
-  })
-}
-
-
-export const remove = (ids) => {
-  return request({
-    url: '/api/kd-scientific/asset/remove',
-    method: 'post',
-    params: {
-      ids
-    }
+    url: '/api/kd-scientific/asset/xm/fetchData',
+    method: 'get',
+    params
   })
 }

+ 64 - 0
src/components/asset-select/index.vue

@@ -0,0 +1,64 @@
+<template>
+  <el-select
+    v-model="assetId"
+    filterable
+    placeholder="请选择 资产名称"
+    :loading="loading"
+    :disabled="disabled"
+    :multiple="multiple"
+    style="width: 100%;"
+    @change="handleChange"
+  >
+    <el-option
+      v-for="item in listData"
+      :key="item.id"
+      :label="item.zcmc"
+      :value="item.id">
+    </el-option>
+  </el-select>
+</template>
+
+<script>
+import { getList } from "@/api/basicResource/kyAssetList";
+
+export default {
+  name: 'ProjectSelect',
+  props: {
+    value: [String, Number],
+    // 搜索条件
+    params: Object,
+    disabled: {
+      type: Boolean,
+      default: false
+    },
+    // 是否多选
+    multiple: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      assetId: '',
+      loading: false,
+      listData: []
+    }
+  },
+  mounted() {
+    this.getAssetList();
+  },
+  methods: {
+    getAssetList() {
+      getList(1, 99999, this.params).then(({ data }) => {
+        if (data.success) {
+          this.listData = data.data.records;
+          this.assetId = this.value;
+        }
+      })
+    },
+    handleChange(val) {
+      this.$emit('input', val);
+    },
+  }
+}
+</script>

+ 3 - 10
src/option/basicResource/kyAssetList.js

@@ -1,3 +1,5 @@
+import { ZC_STATUS } from "@/config/dict";
+
 export default {
   height: 'auto',
   calcHeight: 30,
@@ -221,16 +223,7 @@ export default {
       //   label: 'dictValue',
       //   value: 'dictKey',
       // },
-      dicData: [{
-        label: '正常',
-        value: 0
-      }, {
-        label: '停用',
-        value: 1
-      }, {
-        label: '已足额折旧',
-        value: 2
-      }],
+      dicData: ZC_STATUS,
       search: true,
       span: 24,
       width: 70,

+ 73 - 94
src/option/yfCostManage/basicDataSetting/kyDeviceList.js

@@ -1,3 +1,5 @@
+import { ZC_STATUS } from "@/config/dict";
+
 export default {
   height: 'auto',
   calcHeight: 30,
@@ -6,47 +8,74 @@ export default {
   searchMenuSpan: 6,
   border: true,
   index: true,
-  viewBtn: true,
+  delBtn: false,
+  menu: false,
   selection: true,
-  searchLabelWidth: 140,
-  labelWidth: 140,
+  labelWidth: 120,
   menuWidth: 220,
   dialogClickModal: false,
   dialogWidth: 500,
   dialogType: "drawer",
   column: [
     {
-      label: '资产编码',
-      prop: 'zcbm',
+      label: '月份',
+      prop: 'yearAndMonth',
+      width: 65,
+      align: 'center',
+      showOverflowTooltip: true,
+      display: false
+    },
+    {
+      label: '研发项目编号',
+      prop: 'xmbh',
       type: 'input',
       span: 24,
-      search: true,
       width: 100,
       align: 'center',
       showOverflowTooltip: true,
-      rules: [
-        {
-          required: true,
-          message: '请输入资产编码',
-          trigger: 'blur',
-        },
-      ],
+      display: false,
+    },
+    {
+      label: '研发项目名称',
+      prop: 'xmId',
+      span: 24,
+      hide: true,
+      rules: [{
+        required: true,
+        message: '请选择资产名称',
+        trigger: 'blur'
+      }]
+    },
+    {
+      label: '研发项目名称',
+      prop: 'xmmc',
+      type: 'input',
+      span: 24,
+      search: true,
+      width: 120,
+      showOverflowTooltip: true,
+      display: false,
+    },
+    {
+      label: '资产名称',
+      prop: 'assetId',
+      span: 24,
+      hide: true,
+      rules: [{
+        required: true,
+        message: '请选择资产名称',
+        trigger: 'blur'
+      }]
     },
     {
       label: '资产名称',
       prop: 'zcmc',
       type: 'input',
       span: 24,
-      minWidth: 200,
+      minWidth: 140,
       search: true,
       showOverflowTooltip: true,
-      rules: [
-        {
-          required: true,
-          message: '请输入资产名称',
-          trigger: 'blur',
-        },
-      ],
+      display: false,
     },
     {
       label: '资产类别',
@@ -58,26 +87,20 @@ export default {
         value: 'dictKey',
       },
       span: 24,
-      width: 120,
+      width: 85,
       align: 'center',
       showOverflowTooltip: true,
-      search: true,
-      rules: [
-        {
-          required: true,
-          message: '请选择资产类别',
-          trigger: 'change',
-        },
-      ],
+      display: false,
     },
     {
       label: '功率',
       prop: 'gl',
       type: 'input',
       span: 24,
-      width: 90,
+      width: 70,
       align: 'center',
       showOverflowTooltip: true,
+      display: false,
     },
     {
       label: '用途',
@@ -90,83 +113,54 @@ export default {
       },
       search: true,
       span: 24,
-      width: 120,
+      width: 60,
       align: 'center',
       showOverflowTooltip: true,
-      rules: [
-        {
-          required: true,
-          message: '请选择用途',
-          trigger: 'blur',
-        },
-      ],
+      display: false,
     },
     {
-      label: '开始时间',
+      label: '折旧开始时间',
       prop: 'kssj',
       type: 'date',
       span: 24,
-      width: 120,
-      search: true,
+      width: 95,
       align: 'center',
       showOverflowTooltip: true,
-      rules: [
-        {
-          required: true,
-          message: '请选择开始时间',
-          trigger: 'blur',
-        },
-      ],
+      display: false,
     },
     {
       label: '使用寿命',
       prop: 'sysm',
       type: 'number',
       span: 24,
-      width: 90,
+      width: 70,
       search: true,
       align: 'center',
       showOverflowTooltip: true,
-      rules: [
-        {
-          required: true,
-          message: '请输入使用寿命',
-          trigger: 'blur',
-        },
-      ],
+      display: false,
     },
     {
       label: '已使用月数',
       prop: 'ysysm',
       type: 'number',
       span: 24,
-      width: 100,
+      width: 85,
       align: 'center',
       display: false,
+      search: true,
       showOverflowTooltip: true,
-      rules: [
-        {
-          required: true,
-          message: '请输入已使用月数',
-          trigger: 'blur',
-        },
-      ],
+      display: false,
     },
     {
       label: '资产原值(元)',
       prop: 'zcyz',
       type: 'number',
       span: 24,
-      width: 100,
+      width: 95,
       align: 'center',
+      search: true,
       showOverflowTooltip: true,
-      rules: [
-        {
-          required: true,
-          message: '请输入资产原值',
-          trigger: 'blur',
-        },
-      ],
+      display: false,
     },
     {
       label: '净残值(%)',
@@ -176,39 +170,24 @@ export default {
       width: 80,
       align: 'center',
       showOverflowTooltip: true,
-      rules: [
-        {
-          required: true,
-          message: '请输入净残值',
-          trigger: 'change',
-        },
-      ],
+      display: false,
     },
     {
-      label: '月折旧额/月摊销额(元)',
+      label: '月折旧额(每台/套)',
       prop: 'yzje',
       type: 'number',
       span: 24,
-      width: 140,
+      width: 120,
       align: 'center',
+      search: true,
       showOverflowTooltip: true,
-      rules: [
-        {
-          required: true,
-          message: '请输入月折旧额/月摊销额',
-          trigger: 'blur',
-        },
-      ],
+      display: false,
     },
     {
       label: '状态',
       prop: 'status',
       type: 'select',
-      dicUrl: '/api/kd-system/dict/dictionary?code=zczt',
-      props: {
-        label: 'dictValue',
-        value: 'dictKey',
-      },
+      dicData: ZC_STATUS,
       search: true,
       span: 24,
       width: 90,

+ 27 - 0
src/views/yf-cost-manage/basic-data-setting/atten-info.vue

@@ -20,6 +20,15 @@
           清除考勤数据
         </el-button>
         <el-button
+          type="success"
+          size="small"
+          plain
+          icon="el-icon-upload2"
+          @click="handleImport"
+        >
+          导入
+        </el-button>
+        <el-button
           type="warning"
           size="small"
           plain
@@ -49,6 +58,8 @@
       
     </avue-crud>
 
+    <upload-excel-dialog ref="uploadExcelDialog" :uploadAfter="uploadAfter"/>
+
     <WideTablePrinter
       ref="printWideTable"
       :columns="wideTableColumns"
@@ -63,6 +74,9 @@
 <script>
 import YearMonthSelect from "@/components/year-month-select";
 import UploadExcelDialog from "@/components/upload-excel-dialog";
+import {exportBlob} from "@/api/common";
+import {getToken} from "@/util/auth";
+import {downloadXls} from "@/util/util";
 import { deepClone, getMonthDatesWithMarkers } from "@/util/util";
 import moment from "moment";
 import ChineseHoliday from "@chnlib/chinese-holiday";
@@ -174,6 +188,19 @@ export default window.$crudCommon({
       newFormData.dailyAttendances = dailyAttendances;
       return newFormData;
     },
+    handleImport() {
+      let excelParams = { yearAndMonth: this.params.yearAndMonth };
+      this.$refs.uploadExcelDialog.open('/api/kd-scientific/attendance/import', excelParams);
+    },
+    uploadAfter() {
+      this.page.currentPage = 1;
+      this.getList(this.page);
+    },
+    handleExport() {
+      exportBlob(`/api/kd-scientific/attendance/export?${this.website.tokenHeader}=${getToken()}`, this.params).then(res => {
+        downloadXls(res.data, `考勤信息${this.params.yearAndMonth}.xlsx`);
+      });
+    },
     /**
      * 打印表格
      * @param isLandscape 是否横向打印

+ 96 - 7
src/views/yf-cost-manage/basic-data-setting/ky-device-list.vue

@@ -34,15 +34,62 @@
         >
           导出
         </el-button>
+        <el-button
+          type="primary"
+          size="small"
+          @click="handleReadyDevData"
+        >
+          直接引用
+        </el-button>
         <print-table-btn @click="printTable" />
         
         <div style="display: flex; align-items: center;">
-          <year-month-select v-model="params.yearAndMonth" :showAllYear="false"></year-month-select>
+          <year-month-select v-model="params.yearAndMonth"></year-month-select>
+        </div>
+      </template>
+
+      <template slot="sysmSearch">
+        <div style="display: flex; align-items: center;">
+          <span>使用寿命:</span>
+          <avue-input-number v-model="params.sysmMin" :min="0" style="width: 90px !important;"></avue-input-number>
+          <span style="width: 20px; text-align: center;">至</span>
+          <avue-input-number v-model="params.sysmMax" :min="0" style="width: 90px !important;"></avue-input-number>
         </div>
       </template>
 
-      <template slot="xmmcForm">
-        <project-select placeholder="请选择项目名称" v-model="form.xmId" @change="handleProjectChange"></project-select>
+      <template slot="zcyzSearch">
+        <div style="display: flex; align-items: center;">
+          <span>资产原值:</span>
+          <avue-input-number v-model="params.zcyzMin" :min="0" style="width: 90px !important;"></avue-input-number>
+          <span style="width: 20px; text-align: center;">至</span>
+          <avue-input-number v-model="params.zcyzMax" :min="0" style="width: 90px !important;"></avue-input-number>
+        </div>
+      </template>
+
+      <template slot="ysysmSearch">
+        <div style="display: flex; align-items: center;">
+          <span>已使用月数:</span>
+          <avue-input-number v-model="params.ysysmMin" :min="0" style="width: 90px !important;"></avue-input-number>
+          <span style="width: 20px; text-align: center;">至</span>
+          <avue-input-number v-model="params.ysysmMax" :min="0" style="width: 90px !important;"></avue-input-number>
+        </div>
+      </template>
+
+      <template slot="yzjeSearch">
+        <div style="display: flex; align-items: center;">
+          <span>月折旧额(每台/套):</span>
+          <avue-input-number v-model="params.yzjeMin" :min="0" style="width: 90px !important;"></avue-input-number>
+          <span style="width: 20px; text-align: center;">至</span>
+          <avue-input-number v-model="params.yzjeMax" :min="0" style="width: 90px !important;"></avue-input-number>
+        </div>
+      </template>
+
+      <template slot="xmIdForm">
+        <project-select v-model="form.xmId" multiple :params="{ yearAndMonth: params.yearAndMonth }"></project-select>
+      </template>
+
+      <template slot="assetIdForm">
+        <asset-select v-model="form.assetId" :params="{ yearAndMonth: params.yearAndMonth }"></asset-select>
       </template>
       
     </avue-crud>
@@ -61,9 +108,11 @@
 </template>
 
 <script>
+import { fetchDeviceData } from "@/api/yfCostManage/basicDataSetting/kyDeviceList"
 import YearMonthSelect from "@/components/year-month-select";
 import UploadExcelDialog from "@/components/upload-excel-dialog";
 import projectSelect from "@/components/project-select";
+import assetSelect from "@/components/asset-select";
 import moment from "moment";
 
 
@@ -71,6 +120,7 @@ export default window.$crudCommon({
   components: {
     YearMonthSelect,
     projectSelect,
+    assetSelect,
     UploadExcelDialog,
   },
   data() {
@@ -78,7 +128,7 @@ export default window.$crudCommon({
       params: {
         yearAndMonth: moment(new Date()).format('YYYYMM'),
       },
-      defaultColumns: [],
+      isSelAnnual: false,
 
       wideTableColumns: [],
       printTitle: "",
@@ -86,12 +136,26 @@ export default window.$crudCommon({
   },
   watch: {
     'params.yearAndMonth'(newVal) {
+      if (newVal.length > 4) {
+        // 是否勾选未全年
+        this.isSelAnnual = false;
+      } else {
+        this.isSelAnnual = true;
+      }
       this.page.currentPage = 1;
       this.getList(this.page);
     }
   },
+  computed: {
+    permissionList() {
+      return {
+        addBtn: !this.isSelAnnual,
+        editBtn: !this.isSelAnnual,
+        delBtn: !this.isSelAnnual,
+      };
+    },
+  },
   methods: {
-    loadData() {},
     handleImport() {
       let excelParams = { yearAndMonth: this.params.yearAndMonth };
       this.$refs.uploadExcelDialog.open('/api/kd-scientific/technician/import', excelParams);
@@ -102,7 +166,7 @@ export default window.$crudCommon({
     },
     handleExport() {
       exportBloByPost(`/api/kd-scientific/technician/export?${this.website.tokenHeader}=${getToken()}`, this.params).then(res => {
-        downloadXls(res.data, `项目直接投入费用表${this.params.yearAndMonth}.xlsx`);
+        downloadXls(res.data, `科研仪器设备明细表${this.params.yearAndMonth}.xlsx`);
       });
     },
     /**
@@ -111,16 +175,41 @@ export default window.$crudCommon({
      */
     printTable(isLandscape) {
       this.wideTableColumns = this.$refs.crud.columnOption;
-      this.printTitle = `项目直接投入费用表${this.params.yearAndMonth}`;
+      this.printTitle = `科研仪器设备明细表${this.params.yearAndMonth}`;
       this.$nextTick(() => {
         this.$refs.printWideTable.printTable(isLandscape);
       })
     },
+    handleReadyDevData() {
+      fetchDeviceData({ yearAndMonth: this.params.yearAndMonth}).then(res => {
+        let data = res.data;
+        if (data.success) {
+
+          this.$message.success('引用成功!');
+          this.page.currentPage = 1;
+          this.getList(this.page);
+        }
+      });
+    }
   },
 }, {
   // 模块路径
   name: 'yfCostManage/basicDataSetting/kyDeviceList',
   res: ({ data }) => {
+    data.records = data.records.map(item => {
+      item.zcmc = item.asset ? item.asset.zcmc : '';
+      item.zclb = item.asset ? item.asset.zclb : '';
+      item.gl = item.asset ? item.asset.gl : '';
+      item.yt = item.asset ? item.asset.yt : '';
+      item.kssj = item.asset ? item.asset.kssj : '';
+      item.sysm = item.asset ? item.asset.sysm : '';
+      item.ysysm = item.asset ? item.asset.ysysm : '';
+      item.zcyz = item.asset ? item.asset.zcyz : '';
+      item.jcz = item.asset ? item.asset.jcz : '';
+      item.yzje = item.asset ? item.asset.yzje : '';
+      item.status = item.status ? item.asset.status : '';
+      return item;
+    });
     return data;
   },
 });