Browse Source

增加辅助核算和企业会计科目设置

ljb 10 months ago
parent
commit
7f57a5dc63

+ 40 - 0
src/api/basicResource/auxiliaryAccounting.js

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

+ 40 - 0
src/api/basicResource/compSubjectSetting.js

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

+ 34 - 0
src/option/basicResource/auxiliaryAccounting.js

@@ -0,0 +1,34 @@
+export default {
+  height: 'auto',
+  calcHeight: 30,
+  tip: false,
+  searchShow: true,
+  searchMenuSpan: 6,
+  border: true,
+  searchLabelWidth: 140,
+  labelWidth: 110,
+  menuWidth: 140,
+  menu: false,
+  dialogClickModal: false,
+  dialogWidth: 500,
+  dialogType: "drawer",
+  column: [
+    {
+      label: '研发项目编号',
+      prop: 'xmbh',
+      span: 24,
+      search: true,
+      minWidth: 140,
+      align: 'center',
+      showOverflowTooltip: true,
+    },
+    {
+      label: '研发项目名称',
+      prop: 'name',
+      span: 24,
+      minWidth: 200,
+      search: true,
+      showOverflowTooltip: true,
+    },
+  ],
+};

+ 92 - 0
src/option/basicResource/compSubjectSetting.js

@@ -0,0 +1,92 @@
+export default {
+  height: 'auto',
+  calcHeight: 30,
+  tip: false,
+  searchShow: true,
+  searchMenuSpan: 6,
+  border: true,
+  searchLabelWidth: 140,
+  labelWidth: 110,
+  menuWidth: 140,
+  dialogClickModal: false,
+  dialogWidth: 500,
+  dialogType: "drawer",
+  column: [
+    {
+      label: '科目代码',
+      prop: 'code',
+      type: 'input',
+      span: 24,
+      search: true,
+      width: 140,
+      align: 'center',
+      showOverflowTooltip: true,
+      rules: [
+        {
+          required: true,
+          message: '请输入科目代码',
+          trigger: 'blur',
+        },
+      ],
+    },
+    {
+      label: '科目名称',
+      prop: 'name',
+      type: 'input',
+      span: 24,
+      width: 160,
+      search: true,
+      showOverflowTooltip: true,
+      rules: [
+        {
+          required: true,
+          message: '请输入科目名称',
+          trigger: 'blur',
+        },
+      ],
+    },
+    {
+      label: "对应会计科目",
+      prop: "subjectId",
+      type: "tree",
+      dicData: [],
+      span: 24,
+      hide: true,
+      props: {
+        value: "id",
+        label: "name"
+      },
+      rules: [
+        {
+          required: true,
+          message: "请选择对应会计科目",
+          trigger: "click"
+        }
+      ]
+    },
+    {
+      label: '对应会计科目',
+      prop: 'dykjkm',
+      minWidth: 160,
+      search: true,
+      showOverflowTooltip: true,
+      display: false
+    },
+    {
+      label: '对应高新研发费用科目',
+      prop: 'dygxyffykm',
+      minWidth: 160,
+      search: true,
+      showOverflowTooltip: true,
+      display: false
+    },
+    {
+      label: '对应加计扣除研发费用科目',
+      prop: 'dyjjkcyffykm',
+      minWidth: 160,
+      search: true,
+      showOverflowTooltip: true,
+      display: false
+    },
+  ],
+};

+ 14 - 13
src/option/basicResource/technicianRoster.js

@@ -21,7 +21,7 @@ export default {
       type: 'input',
       type: 'input',
       span: 12,
       span: 12,
       search: true,
       search: true,
-      width: 100,
+      width: 80,
       align: 'center',
       align: 'center',
       showOverflowTooltip: true,
       showOverflowTooltip: true,
       rules: [
       rules: [
@@ -37,7 +37,7 @@ export default {
       prop: 'number',
       prop: 'number',
       type: 'input',
       type: 'input',
       span: 12,
       span: 12,
-      width: 160,
+      width: 90,
       align: 'center',
       align: 'center',
       search: true,
       search: true,
       showOverflowTooltip: true,
       showOverflowTooltip: true,
@@ -55,7 +55,7 @@ export default {
       type: 'input',
       type: 'input',
       span: 12,
       span: 12,
       search: true,
       search: true,
-      width: 160,
+      width: 150,
       align: 'center',
       align: 'center',
       showOverflowTooltip: true,
       showOverflowTooltip: true,
       // rules: [
       // rules: [
@@ -109,7 +109,7 @@ export default {
       prop: 'ethnic',
       prop: 'ethnic',
       type: 'input',
       type: 'input',
       span: 12,
       span: 12,
-      width: 120,
+      width: 80,
       align: 'center',
       align: 'center',
       showOverflowTooltip: true,
       showOverflowTooltip: true,
       rules: [
       rules: [
@@ -125,7 +125,7 @@ export default {
       prop: 'secondaryUnit',
       prop: 'secondaryUnit',
       type: 'input',
       type: 'input',
       span: 12,
       span: 12,
-      width: 140,
+      width: 100,
       search: true,
       search: true,
       align: 'center',
       align: 'center',
       showOverflowTooltip: true,
       showOverflowTooltip: true,
@@ -142,7 +142,7 @@ export default {
       prop: 'department',
       prop: 'department',
       type: 'input',
       type: 'input',
       span: 12,
       span: 12,
-      width: 140,
+      width: 120,
       search: true,
       search: true,
       align: 'center',
       align: 'center',
       showOverflowTooltip: true,
       showOverflowTooltip: true,
@@ -214,9 +214,10 @@ export default {
       label: '入职时间',
       label: '入职时间',
       prop: 'hireDate',
       prop: 'hireDate',
       type: 'datetime',
       type: 'datetime',
+      format: 'yyyy-MM-dd',
       valueFormat: 'yyyy-MM-dd HH:mm:ss',
       valueFormat: 'yyyy-MM-dd HH:mm:ss',
       span: 12,
       span: 12,
-      width: 140,
+      width: 90,
       align: 'center',
       align: 'center',
       search: true,
       search: true,
       showOverflowTooltip: true,
       showOverflowTooltip: true,
@@ -255,7 +256,7 @@ export default {
       prop: 'degree',
       prop: 'degree',
       type: 'select',
       type: 'select',
       span: 12,
       span: 12,
-      width: 90,
+      width: 70,
       align: 'center',
       align: 'center',
       search: true,
       search: true,
       dicUrl: '/api/kd-system/dict-biz/dictionary?code=xuewei',
       dicUrl: '/api/kd-system/dict-biz/dictionary?code=xuewei',
@@ -277,7 +278,7 @@ export default {
       prop: 'schoolName',
       prop: 'schoolName',
       type: 'input',
       type: 'input',
       span: 12,
       span: 12,
-      width: 160,
+      width: 130,
       align: 'center',
       align: 'center',
       showOverflowTooltip: true,
       showOverflowTooltip: true,
       rules: [
       rules: [
@@ -293,7 +294,7 @@ export default {
       prop: 'major',
       prop: 'major',
       type: 'input',
       type: 'input',
       span: 12,
       span: 12,
-      width: 140,
+      width: 120,
       align: 'center',
       align: 'center',
       showOverflowTooltip: true,
       showOverflowTooltip: true,
       rules: [
       rules: [
@@ -309,7 +310,7 @@ export default {
       prop: 'rank',
       prop: 'rank',
       type: 'select',
       type: 'select',
       span: 12,
       span: 12,
-      width: 120,
+      width: 100,
       align: 'center',
       align: 'center',
       search: true,
       search: true,
       dicUrl: '/api/kd-system/dict-biz/dictionary?code=zhicheng',
       dicUrl: '/api/kd-system/dict-biz/dictionary?code=zhicheng',
@@ -355,7 +356,7 @@ export default {
       prop: 'situation',
       prop: 'situation',
       type: 'select',
       type: 'select',
       span: 12,
       span: 12,
-      width: 100,
+      width: 80,
       align: 'center',
       align: 'center',
       search: true,
       search: true,
       dicUrl: '/api/kd-system/dict-biz/dictionary?code=canyanqingkuang',
       dicUrl: '/api/kd-system/dict-biz/dictionary?code=canyanqingkuang',
@@ -377,7 +378,7 @@ export default {
       prop: 'personnelType',
       prop: 'personnelType',
       type: 'select',
       type: 'select',
       span: 12,
       span: 12,
-      width: 100,
+      width: 80,
       align: 'center',
       align: 'center',
       search: true,
       search: true,
       dicUrl: '/api/kd-system/dict-biz/dictionary?code=renyuanleixing',
       dicUrl: '/api/kd-system/dict-biz/dictionary?code=renyuanleixing',

+ 97 - 0
src/views/basic-resource/basic-database/auxiliary-accounting.vue

@@ -0,0 +1,97 @@
+<template>
+  <basic-container>
+    <avue-crud
+      v-bind="bindVal"
+      v-on="onEvent"
+      v-model="form"
+      :page.sync="page"
+      :before-open="handleBeforeOpen"
+      :permission="permissionList"
+    >
+      <template slot="menuLeft">
+        <el-button
+          type="warning"
+          size="small"
+          plain
+          icon="el-icon-download"
+          @click="handleExport"
+        >
+          导出
+        </el-button>
+        <print-table-btn @click="printTable" />
+        
+        <div style="display: flex; align-items: center;">
+          <year-month-select v-model="params.yearAndMonth" :showMonth="false"></year-month-select>
+        </div>
+      </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"
+    />
+  </basic-container>
+</template>
+
+<script>
+import {exportBlob} from "@/api/common";
+import YearMonthSelect from "@/components/year-month-select";
+import moment from "moment";
+import {getToken} from "@/util/auth";
+import {downloadXls} from "@/util/util";
+
+
+export default window.$crudCommon({
+  components: {
+    YearMonthSelect,
+  },
+  data() {
+    return {
+      params: {
+        yearAndMonth: moment(new Date()).format('YYYY'),
+      },
+
+      wideTableColumns: [],
+      printTitle: "",
+    };
+  },
+  watch: {
+    'params.yearAndMonth'(newVal) {
+      this.page.currentPage = 1;
+      this.getList(this.page);
+    }
+  },
+  methods: {
+    loadData() {},
+    handleExport() {
+      exportBlob(`/api/kd-scientific/technician/export?${this.website.tokenHeader}=${getToken()}`, this.params).then(res => {
+        downloadXls(res.data, `${this.params.yearAndMonth}辅助核算.xlsx`);
+      });
+    },
+    /**
+     * 打印表格
+     * @param isLandscape 是否横向打印
+     */
+    printTable(isLandscape) {
+      this.wideTableColumns = this.$refs.crud.columnOption;
+      this.printTitle = `${this.params.yearAndMonth}辅助核算`;
+      this.$nextTick(() => {
+        this.$refs.printWideTable.printTable(isLandscape);
+      })
+    },
+  },
+}, {
+  // 模块路径
+  name: 'basicResource/auxiliaryAccounting',
+  res: ({ data }) => {
+    return data;
+  },
+});
+</script>

+ 136 - 0
src/views/basic-resource/basic-database/comp-subject-setting.vue

@@ -0,0 +1,136 @@
+<template>
+  <basic-container>
+    <avue-crud
+      v-bind="bindVal"
+      v-on="onEvent"
+      v-model="form"
+      :page.sync="page"
+    >
+      <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"
+    />
+  </basic-container>
+</template>
+
+<script>
+import { getList as getSubjectTreeList } from "@/api/basicResource/subjectSetting";
+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: "",
+    };
+  },
+  mounted() {
+    this.getMenuData();
+  },
+  methods: {
+    loadData() {},
+    loopData(data, level) {
+      level++;
+      return data.map(item => {
+        item.level = level;
+        item.disabled = level === 4 ? false : true;
+
+        if (item.children && item.children.length) {
+          this.loopData(item.children, level);
+        }
+        
+        return item;
+      });
+    },
+    getMenuData() {
+      getSubjectTreeList().then(res => {
+        this.loading = false;
+        if (res.data.code == 200) {
+
+          const column = this.findObject(this.option.column, "subjectId");
+          column.dicData = this.loopData(JSON.parse(JSON.stringify(res.data.data)), 0);
+        }
+      })
+    },
+    handleImport() {
+      let excelParams = { yearAndMonth: this.params.yearAndMonth };
+      this.$refs.uploadExcelDialog.open('/api/kd-scientific/technician/import', excelParams);
+    },
+    uploadAfter() {
+      this.page.currentPage = 1;
+      this.getList(this.page);
+    },
+    handleExport() {
+      exportBloByPost(`/api/kd-scientific/technician/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: 'basicResource/compSubjectSetting',
+  res: ({ data }) => {
+    return data;
+  },
+});
+</script>

+ 89 - 27
src/views/basic-resource/basic-database/subject-setting.vue

@@ -4,7 +4,10 @@
       v-model="form"
       v-model="form"
       :option="option"
       :option="option"
       :data="data"
       :data="data"
+      :table-loading="loading"
       ref="crud"
       ref="crud"
+      @search-change="searchChange"
+      @search-reset="searchReset"
       @row-save="rowSave"
       @row-save="rowSave"
       @row-update="rowUpdate"
       @row-update="rowUpdate"
       @row-del="rowDel"
       @row-del="rowDel"
@@ -13,7 +16,7 @@
         <i :class="scope.row.icon" style="font-size: 24px"></i>
         <i :class="scope.row.icon" style="font-size: 24px"></i>
       </template>
       </template>
       <template slot="menu" slot-scope="{ row, size, type }">
       <template slot="menu" slot-scope="{ row, size, type }">
-        <el-button :size="size" :type="type" @click="handleAdd(row)">
+        <el-button v-if="row.level !== 4" :size="size" :type="type" @click="handleAdd(row)">
           新增子级
           新增子级
         </el-button>
         </el-button>
       </template>
       </template>
@@ -26,6 +29,7 @@ import { getList } from "@/api/basicResource/subjectSetting";
 export default {
 export default {
   data() {
   data() {
     return {
     return {
+      loading: false,
       parentId: undefined,
       parentId: undefined,
       form: {},
       form: {},
       data: [],
       data: [],
@@ -35,10 +39,11 @@ export default {
         tip: false,
         tip: false,
         searchShow: true,
         searchShow: true,
         searchMenuSpan: 6,
         searchMenuSpan: 6,
+        index: true,
         border: true,
         border: true,
         searchLabelWidth: 140,
         searchLabelWidth: 140,
         labelWidth: 140,
         labelWidth: 140,
-        menuWidth: 290,
+        menuWidth: 220,
         dialogClickModal: false,
         dialogClickModal: false,
         dialogWidth: 500,
         dialogWidth: 500,
         dialogType: "drawer",
         dialogType: "drawer",
@@ -48,6 +53,26 @@ export default {
         tree: true,
         tree: true,
         column: [
         column: [
           {
           {
+            label: "上级科目",
+            prop: "parentId",
+            type: "tree",
+            dicData: [],
+            span: 24,
+            hide: true,
+            addDisabled: false,
+            props: {
+              value: "id",
+              label: "name"
+            },
+            rules: [
+              {
+                required: false,
+                message: "请选择上级菜单",
+                trigger: "click"
+              }
+            ]
+          },
+          {
             label: "科目名称",
             label: "科目名称",
             prop: "name",
             prop: "name",
             type: "input",
             type: "input",
@@ -83,7 +108,7 @@ export default {
           {
           {
             label: "会计科目",
             label: "会计科目",
             prop: "accSubject",
             prop: "accSubject",
-            type: "input",
+            type: "textarea",
             span: 24,
             span: 24,
             minWidth: 160,
             minWidth: 160,
             showOverflowTooltip: true,
             showOverflowTooltip: true,
@@ -91,7 +116,7 @@ export default {
           {
           {
             label: "高新研发费用科目",
             label: "高新研发费用科目",
             prop: "rdSubject",
             prop: "rdSubject",
-            type: "input",
+            type: "textarea",
             span: 24,
             span: 24,
             minWidth: 160,
             minWidth: 160,
             showOverflowTooltip: true,
             showOverflowTooltip: true,
@@ -99,50 +124,83 @@ export default {
           {
           {
             label: "加计扣除研发费用科目",
             label: "加计扣除研发费用科目",
             prop: "adSubject",
             prop: "adSubject",
-            type: "input",
+            type: "textarea",
             span: 24,
             span: 24,
             minWidth: 160,
             minWidth: 160,
             showOverflowTooltip: true,
             showOverflowTooltip: true,
           },
           },
+          {
+            label: "辅助核算",
+            prop: "fzhs",
+            span: 24,
+            width: 100,
+            display: false,
+            showOverflowTooltip: true,
+          },
         ],
         ],
       },
       },
     };
     };
   },
   },
   mounted() {
   mounted() {
     this.loadData();
     this.loadData();
+    this.getMenuData();
   },
   },
   methods: {
   methods: {
-    loadData() {
+    loopData(data, level, maxLevel) {
+      level++;
+      return data.map(item => {
+        item.level = level;
+        item.disabled = level === 4 ? true : false;
+        item.hasChildren = item.children && item.children.length ? false : true;
+
+        if (maxLevel) {
+          if (level >= maxLevel) {
+            delete item.children;
+          } else {
+            this.loopData(item.children || [], level, maxLevel);
+          }
+        } else {
+          this.loopData(item.children || [], level);
+        }
+        return item;
+      });
+    },
+    getMenuData() {
       getList().then(res => {
       getList().then(res => {
-        console.log(res)
+        this.loading = false;
         if (res.data.code == 200) {
         if (res.data.code == 200) {
-          const loopData = data => {
-            return data.map(item => {
-              item.hasChildren = item.children && item.children.length ? false : true;
-              if (item.children && item.children.length) {
-                loopData(item.children);
-              }
-              return item;
-            });
-          }
-          this.data = loopData(res.data.data);
-          console.log(this.data)
-          // this.data = res.data.data.map(item => {
-          //   item.children = item.children || [];
-          //   delete item.hasChildren;
-          //   return item;
-          // });
-          // console.log(this.data)
+
+          const column = this.findObject(this.option.column, "parentId");
+          column.dicData = this.loopData(JSON.parse(JSON.stringify(res.data.data)), 0, 3);
         }
         }
       })
       })
     },
     },
+    loadData(params) {
+      this.loading = true;
+      getList(params).then(res => {
+        this.loading = false;
+        if (res.data.code == 200) {
+
+          this.data = this.loopData(res.data.data, 0);
+        }
+      })
+    },
+    searchReset() {
+      this.query = {};
+      this.parentId = 0;
+      this.loadData();
+    },
+    searchChange(params, done) {
+      this.query = params;
+      this.parentId = '';
+      this.loadData(params);
+      done();
+    },
     rowDel(row, index, done) {
     rowDel(row, index, done) {
       done(row);
       done(row);
     },
     },
     rowSave(row, done) {
     rowSave(row, done) {
-      row.parentId = this.parentId;
-      row.id = new Date().getTime();
-      this.parentId = undefined;
+      this.parentId = row.parentId;
       done(row);
       done(row);
     },
     },
     rowUpdate(row, index, done) {
     rowUpdate(row, index, done) {
@@ -150,6 +208,10 @@ export default {
     },
     },
     handleAdd(row) {
     handleAdd(row) {
       this.parentId = row.id;
       this.parentId = row.id;
+      const column = this.findObject(this.option.column, "parentId");
+      column.value = row.id;
+      this.form.parentId = row.id;
+      column.addDisabled = true;
       this.$refs.crud.rowAdd();
       this.$refs.crud.rowAdd();
     },
     },
   },
   },