Эх сурвалжийг харах

Merge remote-tracking branch 'origin/dev' into dev

001295 1 жил өмнө
parent
commit
84bcb39dc0
29 өөрчлөгдсөн 3160 нэмэгдсэн , 2 устгасан
  1. 57 0
      src/api/business/spd/bo/gather.js
  2. 45 0
      src/api/business/spd/bo/power.js
  3. 44 0
      src/api/business/spd/bo/rival.js
  4. 44 0
      src/api/business/spd/sales/doc.js
  5. 16 0
      src/api/business/spd/sales/utils.js
  6. 10 0
      src/api/expend/customerExpend.js
  7. 18 0
      src/api/expend/expendMx.js
  8. 19 0
      src/api/purchase/supAtttachment.js
  9. 18 0
      src/components/popover-select/components/CUSTOMER_PARAM_DRP.js
  10. 18 0
      src/components/popover-select/components/MKRIVAL_PARAM.js
  11. 1 1
      src/views/business/spd/bo/contact/index.vue
  12. 453 0
      src/views/business/spd/bo/gather/index.vue
  13. 247 0
      src/views/business/spd/bo/power/index.vue
  14. 217 0
      src/views/business/spd/bo/rival/index.vue
  15. 592 0
      src/views/business/spd/sales/consumer/index.vue
  16. 38 0
      src/views/expend/customerExpend/che-hui/index.vue
  17. 184 0
      src/views/expend/customerExpend/columns.js
  18. 15 0
      src/views/expend/customerExpend/dicts.js
  19. 149 0
      src/views/expend/customerExpend/edit/columns.js
  20. 104 0
      src/views/expend/customerExpend/edit/index.vue
  21. 38 0
      src/views/expend/customerExpend/hdk-hgb/index.vue
  22. 167 0
      src/views/expend/customerExpend/index.vue
  23. 38 0
      src/views/expend/customerExpend/ti-jiao/index.vue
  24. 38 0
      src/views/expend/customerExpend/zxsdd/index.vue
  25. 230 0
      src/views/expend/expendMx.vue
  26. 226 0
      src/views/expend/expendMxDetail.vue
  27. 15 0
      src/views/purchase/SupAtttachment/columns.js
  28. 118 0
      src/views/purchase/SupAtttachment/index.vue
  29. 1 1
      src/views/purchase/purchase-order/add/column.js

+ 57 - 0
src/api/business/spd/bo/gather.js

@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+// 查询竞争产品信息收集列表
+export function listGather(query) {
+  return request({
+    url: '/mk/bo/gathercg/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询竞争产品信息收集详细
+export function getGather(id) {
+  return request({
+    url: '/mk/bo/gathercg/' + id,
+    method: 'get'
+  })
+}
+
+// 新增竞争产品信息收集
+export function addGather(data) {
+  return request({
+    url: '/mk/bo/gathercg',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改竞争产品信息收集
+export function updateGather(data) {
+  return request({
+    url: '/mk/bo/gathercg',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除竞争产品信息收集
+export function delGather(ids) {
+  return request({
+    url: '/mk/bo/gathercg/delete',
+    method: 'post',
+    data: ids
+  })
+}
+
+// 导入明细
+export function upload(data) {
+  return request({
+    url: `/mk/bo/gathercg/upload`,
+    method: 'post',
+    data: data,
+    headers: {
+      'Content-Type': 'multipart/form-data'
+    }
+  })
+}

+ 45 - 0
src/api/business/spd/bo/power.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+
+// 查询医院竞争对手用户查看权限列表
+export function listPower(query) {
+  return request({
+    url: '/mk/bo/power/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询医院竞争对手用户查看权限详细
+export function getPower(id) {
+  return request({
+    url: '/mk/bo/power/' + id,
+    method: 'get'
+  })
+}
+
+// 新增医院竞争对手用户查看权限
+export function addPower(data) {
+  return request({
+    url: '/mk/bo/power',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改医院竞争对手用户查看权限
+export function updatePower(data) {
+  return request({
+    url: '/mk/bo/power',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除医院竞争对手用户查看权限
+export function delPower(ids) {
+  return request({
+    url: '/mk/bo/power/delete',
+    method: 'post',
+    data: ids
+  })
+}

+ 44 - 0
src/api/business/spd/bo/rival.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询竞争对手列表
+export function listRival(query) {
+  return request({
+    url: '/mk/bo/rival/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询竞争对手详细
+export function getRival(id) {
+  return request({
+    url: '/mk/bo/rival/' + id,
+    method: 'get'
+  })
+}
+
+// 新增竞争对手
+export function addRival(data) {
+  return request({
+    url: '/mk/bo/rival',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改竞争对手
+export function updateRival(data) {
+  return request({
+    url: '/mk/bo/rival',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除竞争对手
+export function delRival(id) {
+  return request({
+    url: '/mk/bo/rival/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/business/spd/sales/doc.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询【消耗单明细主表】列表
+export function listDoc(query) {
+  return request({
+    url: '/pu/doc/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询【消耗单明细主表】详细
+export function getDoc(id) {
+  return request({
+    url: '/pu/doc/' + id,
+    method: 'get'
+  })
+}
+
+// 新增【消耗单明细主表】
+export function addDoc(data) {
+  return request({
+    url: '/pu/doc',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改【消耗单明细主表】
+export function updateDoc(data) {
+  return request({
+    url: '/pu/doc',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除【消耗单明细主表】
+export function delDoc(id) {
+  return request({
+    url: '/pu/doc/' + id,
+    method: 'delete'
+  })
+}

+ 16 - 0
src/api/business/spd/sales/utils.js

@@ -0,0 +1,16 @@
+export function getCurrentTime(format) {
+  const date = new Date();
+
+  const year = date.getFullYear(); // 年份
+  const month = (date.getMonth() + 1).toString().padStart(2, '0'); // 月份(注意需要加1)
+  const day = date.getDate().toString().padStart(2, '0'); // 天数
+  const hours = date.getHours().toString().padStart(2, '0'); // 小时数
+  const minutes = date.getMinutes().toString().padStart(2, '0'); // 分钟数
+  const seconds = date.getSeconds().toString().padStart(2, '0'); // 秒数
+
+  if (format === 'yyyy-MM-dd HH:mm:ss') {
+    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; // 返回格式为YYYY-MM-DD HH:mm:ss的时间字符串
+  } else if (format === 'yyyy-MM-dd') {
+    return `${year}-${month}-${day}`; // 返回格式为YYYY-MM-DD的时间字符串
+  }
+}

+ 10 - 0
src/api/expend/customerExpend.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+// 消耗单明细列表
+export function queryList(data) {
+  return request({
+    url: `/pu/ccd/list`,
+    method: 'post',
+    data: data
+  })
+}

+ 18 - 0
src/api/expend/expendMx.js

@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 消耗单明细列表
+export function mxList(data) {
+  return request({
+    url: `/pu/doc/list`,
+    method: 'post',
+    data: data
+  })
+}
+// 消耗单明细下拉数据
+export function pullMx(data) {
+  return request({
+    url: `/pu/doc/addToSpdConsumerDocAndItem`,
+    method: 'post',
+    data: data
+  })
+}

+ 19 - 0
src/api/purchase/supAtttachment.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 查询文件列表
+export function referFile(params) {
+  return request({
+    url: `/refer/file/${params.code}`,
+    method: 'get',
+    params,
+  })
+}
+
+// 下载
+export function download(data) {
+  return request({
+    url: `/download`,
+    method: 'post',
+    data: data,
+  })
+}

+ 18 - 0
src/components/popover-select/components/CUSTOMER_PARAM_DRP.js

@@ -0,0 +1,18 @@
+// Drp平台客户管理
+export default [{
+    item: {
+      key: "code",
+      title: "编码",
+      width: "auto"
+    },
+    attr: {},
+  },
+  {
+    item: {
+      key: "name",
+      title: "名称",
+      width: "auto"
+    },
+    attr: {},
+  },
+];

+ 18 - 0
src/components/popover-select/components/MKRIVAL_PARAM.js

@@ -0,0 +1,18 @@
+// 供应商参照
+export default [{
+    item: {
+      key: "code",
+      title: "编码",
+      width: "auto"
+    },
+    attr: {},
+  },
+  {
+    item: {
+      key: "name",
+      title: "名称",
+      width: "auto"
+    },
+    attr: {},
+  },
+];

+ 1 - 1
src/views/business/spd/bo/contact/index.vue

@@ -132,7 +132,7 @@
         <el-row>
           <el-col :span="8">
             <el-form-item label="所属客户" prop="customerName">
-              <dr-popover-select v-model="form.customerName" title="客户" type="CUSTOMER_PARAM_ZT" :dataMapping="{
+              <dr-popover-select v-model="form.customerName" title="客户" type="CUSTOMER_PARAM_DRP" :dataMapping="{
                   customer: 'id',
                   customerName: 'name',
                 }" :source.sync="form">

+ 453 - 0
src/views/business/spd/bo/gather/index.vue

@@ -0,0 +1,453 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
+      <el-row :gutter="10" justify="space-between">
+        <el-col :span="5">
+          <el-form-item label="所属客户" prop="customerName">
+            <el-popover-select-v2 v-model="queryParams.customerName" title="客户" valueKey="name"
+              referName="CUSTOMER_PARAM_ZT" :dataMapping="{ customer: 'id', customerName: 'name'}"
+              :source.sync="queryParams" placeholder="请输入所属客户" @keyup.enter.native="handleQuery" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="5">
+          <el-form-item label="产线" prop="productionLineName">
+            <el-popover-tree-select v-model="queryParams.productionLineName" valueKey='name' title="产线"
+              referName="PRODUCTLINE" :dataMapping="{ customCode: 'id', custom: 'name'}" :source.sync="queryParams"
+              placeholder="请输入产线" @keyup.enter.native="handleQuery" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="5">
+          <el-form-item label="供应商" prop="rivalName" label-width="120px">
+            <el-popover-select-v2 v-model="queryParams.rivalName" title="供应商" valueKey="name" referName="MKRIVAL_PARAM"
+              :dataMapping="{ rival: 'id', rivalName: 'name'}" :source.sync="queryParams" placeholder="请输入供应商"
+              @keyup.enter.native="handleQuery" />
+          </el-form-item>
+        </el-col>
+        <el-row :gutter="10" class="mb8" style="float: right">
+          <el-col :span="1.5">
+            <el-form-item>
+              <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+              <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-row>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8" style="float: right">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="el-icon-download" size="mini" @click="handleDownload">模板下载</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-upload ref="upload" action="" :http-request="handleUpload">
+          <el-button size="mini" type="primary">导入</el-button>
+        </el-upload>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate">修改
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="gatherList" @selection-change="handleSelectionChange" v-horizontal-scroll>
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="序号" type="index" width="50" align="center" fixed />
+      <el-table-column label="所属客户" align="center" prop="customerName" width="220" />
+      <el-table-column label="产线" align="center" prop="productionLineName" width="150" />
+      <el-table-column label="供应商" align="center" prop="rivalName" width="220" />
+      <el-table-column label="供应商体量(万)" align="center" prop="rivalBulk" width="130" />
+      <el-table-column label="品牌" align="center" prop="brand" width="100" />
+      <el-table-column label="品牌份额(万)" align="center" prop="brandPortion" width="120" />
+      <el-table-column label="合作期限(起)" align="center" prop="cooperationStart" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.cooperationStart, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="合作期限(止)" align="center" prop="cooperationEnd" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.cooperationEnd, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="科室关键人" align="center" prop="sectionKeyPsnname" width="90" />
+      <el-table-column label="科室关键人联系电话" align="center" prop="sectionKeyPsnphone" width="120" />
+      <el-table-column label="院级关键人" align="center" prop="hospitalKeyPsnname" width="90" />
+      <el-table-column label="院级关键人联系电话" align="center" prop="hospitalKeyPsnphone" width="120" />
+      <el-table-column label="供应商关键人" align="center" prop="rivalKeyPsnname" width="90" />
+      <el-table-column label="供应商关键人联系电话" align="center" prop="rivalKeyPsnphone" width="120" />
+      <el-table-column label="开发思路" align="center" prop="idea" min-width="220" show-overflow-tooltip />
+      <el-table-column label="机会点/困难点所需资源" align="center" prop="chance" min-width="220" show-overflow-tooltip />
+      <el-table-column label="备注" align="center" prop="remark" min-width="220" show-overflow-tooltip />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180px" fixed="right">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-search" @click="handleSee(scope.row)">查看</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+      @pagination="getList" />
+
+    <!-- 添加或修改竞争产品信息收集对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px" :disabled="pageState == 'see'">
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="所属客户" prop="customerName">
+              <el-popover-select-v2 v-model="form.customerName" title="客户" valueKey="name" referName="CUSTOMER_PARAM_ZT"
+                :dataMapping="{ customer: 'id', customerName: 'name'}" :source.sync="form" placeholder="请输入所属客户" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="产线" prop="productionLineName">
+              <el-popover-tree-select v-model="form.productionLineName" valueKey='name' title="产线"
+                referName="PRODUCTLINE" :dataMapping="{ customCode: 'id', custom: 'name'}" :source.sync="form"
+                placeholder="请输入产线" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="供应商" prop="rivalName" label-width="100px">
+              <el-popover-select-v2 v-model="form.rivalName" title="供应商" valueKey="name" referName="MKRIVAL_PARAM"
+                :dataMapping="{ rival: 'id', rivalName: 'name'}" :source.sync="form" placeholder="请输入供应商" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="供应商体量(万)" prop="rivalBulk" label-width="130px">
+              <el-input-number v-model="form.rivalBulk" :precision="2" :step="1"></el-input-number>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="品牌" prop="brand">
+              <el-input v-model="form.brand" placeholder="请输入品牌" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="品牌份额(万)" prop="brandPortion" label-width="120px">
+              <el-input-number v-model="form.brandPortion" :precision="2" :step="1"></el-input-number>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="合作期限" prop="cooperationStart">
+              <el-date-picker clearable v-model="form.cooperationStart" type="date" value-format="yyyy-MM-dd"
+                placeholder="请选择合作期限">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="合作期限" prop="cooperationEnd">
+              <el-date-picker clearable v-model="form.cooperationEnd" type="date" value-format="yyyy-MM-dd"
+                placeholder="请选择合作期限">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="科室关键人" prop="sectionKeyPsnname" label-width="110px">
+              <el-input v-model="form.sectionKeyPsnname" placeholder="请输入科室关键人姓名" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="科室关键人联系电话" prop="sectionKeyPsnphone" label-width="140px">
+              <el-input v-model="form.sectionKeyPsnphone" placeholder="请输入科室关键人联系电话" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="院级关键人" prop="hospitalKeyPsnname" label-width="110px">
+              <el-input v-model="form.hospitalKeyPsnname" placeholder="请输入院级关键人姓名" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="院级关键人联系电话" prop="hospitalKeyPsnphone" label-width="140px">
+              <el-input v-model="form.hospitalKeyPsnphone" placeholder="请输入院级关键人联系电话" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="供应商关键人" prop="rivalKeyPsnname" label-width="140px">
+              <el-input v-model="form.rivalKeyPsnname" placeholder="请输入供应商关键人姓名" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="供应商关键人联系电话" prop="rivalKeyPsnphone" label-width="170px">
+              <el-input v-model="form.rivalKeyPsnphone" placeholder="请输入供应商关键人联系电话" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item label="开发思路" prop="idea">
+          <el-input v-model="form.idea" placeholder="请输入开发思路" type="textarea" />
+        </el-form-item>
+        <el-form-item label="机会点/困难点所需资源" prop="chance" label-width="160px">
+          <el-input v-model="form.chance" placeholder="请输入机会点/困难点所需资源" type="textarea" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" type="textarea" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm" :disabled="pageState == 'see'">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {
+    listGather,
+    getGather,
+    delGather,
+    addGather,
+    updateGather,
+    upload
+  } from "@/api/business/spd/bo/gather";
+  import {
+    getToken
+  } from "@/utils/auth";
+
+  export default {
+    name: "Gather",
+    components: {
+      ElPopoverSelectV2: () =>
+        import("@/components/popover-select-v2"),
+      ElPopoverTreeSelect: () =>
+        import("@/components/popover-tree-select/index.vue"),
+    },
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 总条数
+        total: 0,
+        // 竞争产品信息收集表格数据
+        gatherList: [],
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          customer: null,
+          customerName: null,
+          productionLine: null,
+          productionLineName: null,
+          rival: null,
+          rivalName: null,
+          rivalBulk: null,
+          brand: null,
+          brandPortion: null,
+          cooperationStart: null,
+          cooperationEnd: null,
+          sectionKeyPsnname: null,
+          sectionKeyPsnphone: null,
+          hospitalKeyPsnname: null,
+          hospitalKeyPsnphone: null,
+          rivalKeyPsnname: null,
+          rivalKeyPsnphone: null,
+          idea: null,
+          chance: null,
+          tenantId: null,
+          revision: null,
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {},
+        // 页面状态
+        pageState: null,
+      };
+    },
+    created() {
+      this.getList();
+    },
+    methods: {
+      /** 查询竞争产品信息收集列表 */
+      getList() {
+        this.loading = true;
+        listGather(this.queryParams).then(response => {
+          this.gatherList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: null,
+          customer: null,
+          customerName: null,
+          productionLine: null,
+          productionLineName: null,
+          rival: null,
+          rivalName: null,
+          rivalBulk: null,
+          brand: null,
+          brandPortion: null,
+          cooperationStart: null,
+          cooperationEnd: null,
+          sectionKeyPsnname: null,
+          sectionKeyPsnphone: null,
+          hospitalKeyPsnname: null,
+          hospitalKeyPsnphone: null,
+          rivalKeyPsnname: null,
+          rivalKeyPsnphone: null,
+          idea: null,
+          chance: null,
+          remark: null,
+          tenantId: null,
+          revision: null,
+          createBy: null,
+          createTime: null,
+          updateBy: null,
+          updateTime: null,
+          delFlag: null
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length !== 1
+        this.multiple = !selection.length
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加竞争产品信息收集";
+        this.pageState = 'insert';
+      },
+      /** 模板下载按钮操作 */
+      handleDownload() {
+        this.download('mk/bo/gathercg/download', {}, `竞争对手信息收集导入模板_${new Date().getTime()}.xlsx`)
+      },
+      /** 导入按钮操作 */
+      handleUpload(file) {
+        this.loading = true;
+        let formData = new FormData()
+        formData.append('file', file.file)
+        upload(formData).then((res) => {
+          console.log('res', res);
+          if (res.code == '200') {
+            this.resetQuery();
+            if (res.msg.indexOf('导入失败') >= 0) {
+            this.$message({
+              duration: 5000,
+              message: res.msg
+            });
+            } else {
+            this.$message.success(res.msg);
+            }
+          } else {
+            this.$message.error(res.msg);
+          }
+          this.loading = false;
+        }).catch((e) => {
+          this.$message.error(e.message)
+        }).finally((e) => {
+          this.$refs['upload'].clearFiles();
+          this.loading = false;
+        })
+      },
+      /** 查看按钮操作 */
+      handleSee(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getGather(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "查看竞争产品信息收集";
+          this.pageState = 'see';
+        });
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getGather(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改竞争产品信息收集";
+          this.pageState = 'update';
+        });
+      },
+      /** 提交按钮 */
+      submitForm() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != null) {
+              updateGather(this.form).then(response => {
+                this.$modal.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addGather(this.form).then(response => {
+                this.$modal.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        if (row.id != undefined) {
+          this.ids.push(row.id);
+        }
+        const ids = this.ids;
+        this.$modal.confirm('是否确认删除?').then(function () {
+          return delGather(ids);
+        }).then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        }).catch(() => {});
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('mk/bo/gathercg/export', {
+          ...this.queryParams
+        }, `gather_${new Date().getTime()}.xlsx`)
+      },
+    }
+  };
+
+</script>

+ 247 - 0
src/views/business/spd/bo/power/index.vue

@@ -0,0 +1,247 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="编码" prop="code">
+        <el-input v-model="queryParams.code" placeholder="请输入编码" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="人员" prop="person">
+        <el-input v-model="queryParams.person" placeholder="请输入人员" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="人员姓名" prop="personName">
+        <el-input v-model="queryParams.personName" placeholder="请输入人员姓名" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="联系方式" prop="contactInformation">
+        <el-input v-model="queryParams.contactInformation" placeholder="请输入联系方式" clearable
+          @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="描述" prop="description">
+        <el-input v-model="queryParams.description" placeholder="请输入描述" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="powerList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="编码" align="center" prop="code" />
+      <el-table-column label="人员" align="center" prop="person" />
+      <el-table-column label="人员姓名" align="center" prop="personName" />
+      <el-table-column label="联系方式" align="center" prop="contactInformation" />
+      <el-table-column label="描述" align="center" prop="description" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+      @pagination="getList" />
+
+    <!-- 添加或修改医院竞争对手用户查看权限对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="编码" prop="code">
+          <el-input v-model="form.code" placeholder="请输入编码" />
+        </el-form-item>
+        <el-form-item label="人员" prop="person">
+          <el-input v-model="form.person" placeholder="请输入人员" />
+        </el-form-item>
+        <el-form-item label="人员姓名" prop="personName">
+          <el-input v-model="form.personName" placeholder="请输入人员姓名" />
+        </el-form-item>
+        <el-form-item label="联系方式" prop="contactInformation">
+          <el-input v-model="form.contactInformation" placeholder="请输入联系方式" />
+        </el-form-item>
+        <el-form-item label="描述" prop="description">
+          <el-input type="textarea" autosize v-model="form.description" placeholder="请输入描述" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {
+    listPower,
+    getPower,
+    delPower,
+    addPower,
+    updatePower
+  } from "@/api/business/spd/bo/power";
+
+  export default {
+    name: "Power",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 医院竞争对手用户查看权限表格数据
+        powerList: [],
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          code: null,
+          person: null,
+          personName: null,
+          contactInformation: null,
+          description: null,
+          tenantId: null,
+          revision: null,
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {}
+      };
+    },
+    created() {
+      this.getList();
+    },
+    methods: {
+      /** 查询医院竞争对手用户查看权限列表 */
+      getList() {
+        this.loading = true;
+        listPower(this.queryParams).then(response => {
+          this.powerList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: null,
+          code: null,
+          person: null,
+          personName: null,
+          contactInformation: null,
+          description: null,
+          tenantId: null,
+          revision: null,
+          createBy: null,
+          createTime: null,
+          updateBy: null,
+          updateTime: null,
+          delFlag: null
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length !== 1
+        this.multiple = !selection.length
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加医院竞争对手用户查看权限";
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getPower(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改医院竞争对手用户查看权限";
+        });
+      },
+      /** 提交按钮 */
+      submitForm() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != null) {
+              updatePower(this.form).then(response => {
+                this.$modal.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addPower(this.form).then(response => {
+                this.$modal.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        if (row.id != undefined) {
+          this.ids.push(row.id);
+        }
+        const ids = this.ids;
+        this.$modal.confirm('是否确认删除?').then(function () {
+          return delPower(ids);
+        }).then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        }).catch(() => {});
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('bo/power/export', {
+          ...this.queryParams
+        }, `power_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+
+</script>

+ 217 - 0
src/views/business/spd/bo/rival/index.vue

@@ -0,0 +1,217 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="编码" prop="code">
+        <el-input v-model="queryParams.code" placeholder="请输入编码" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="名称" prop="name">
+        <el-input v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="rivalList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="序号" type="index" width="50" align="center" fixed />
+      <el-table-column label="编码" align="center" prop="code" />
+      <el-table-column label="名称" align="center" prop="name" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+      @pagination="getList" />
+
+    <!-- 添加或修改竞争对手对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="66%" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="编码" prop="code">
+          <el-input v-model="form.code" placeholder="系统自动生成" disabled />
+        </el-form-item>
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入名称" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {
+    listRival,
+    getRival,
+    delRival,
+    addRival,
+    updateRival
+  } from "@/api/business/spd/bo/rival";
+
+  export default {
+    name: "Rival",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 竞争对手表格数据
+        rivalList: [],
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          code: null,
+          name: null,
+          tenantId: null,
+          revision: null,
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {}
+      };
+    },
+    created() {
+      this.getList();
+    },
+    methods: {
+      /** 查询竞争对手列表 */
+      getList() {
+        this.loading = true;
+        listRival(this.queryParams).then(response => {
+          this.rivalList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: null,
+          code: null,
+          name: null,
+          tenantId: null,
+          revision: null,
+          createBy: null,
+          createTime: null,
+          updateBy: null,
+          updateTime: null,
+          delFlag: null
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length !== 1
+        this.multiple = !selection.length
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加竞争对手";
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getRival(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改竞争对手";
+        });
+      },
+      /** 提交按钮 */
+      submitForm() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != null) {
+              updateRival(this.form).then(response => {
+                this.$modal.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addRival(this.form).then(response => {
+                this.$modal.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$modal.confirm('是否确认删除竞争对手编号为"' + ids + '"的数据项?').then(function () {
+          return delRival(ids);
+        }).then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        }).catch(() => {});
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('bo/rival/export', {
+          ...this.queryParams
+        }, `rival_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+
+</script>

+ 592 - 0
src/views/business/spd/sales/consumer/index.vue

@@ -0,0 +1,592 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="编码" prop="code">
+            <el-input
+              v-model="queryParams.code"
+              placeholder="请输入编码"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="结算开始日期" prop="startDate">
+            <el-date-picker clearable
+                            v-model="queryParams.startDate"
+                            type="date"
+                            value-format="yyyy-MM-dd"
+                            placeholder="请选择结算开始日期">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="结算截止日期" prop="endDate">
+            <el-date-picker clearable
+                            v-model="queryParams.endDate"
+                            type="date"
+                            value-format="yyyy-MM-dd"
+                            placeholder="请选择结算截止日期">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="结算单号" prop="settleNo">
+            <el-input
+              v-model="queryParams.settleNo"
+              placeholder="请输入结算单号"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :offset="21">
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['pu:doc:add']"
+        >新增
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['pu:doc:edit']"
+        >修改
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['pu:doc:remove']"
+        >删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['pu:doc:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="docList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="编码" align="center" prop="code" :width="tableAttr.width"/>
+      <el-table-column label="服务费" align="center" prop="serviceFee" :width="tableAttr.width"/>
+      <el-table-column label="医院编码" align="center" prop="custCode" :width="tableAttr.width"/>
+      <el-table-column label="医院名称" align="center" prop="custName" :width="tableAttr.width"/>
+      <el-table-column label="供应商编码" align="center" prop="supplierCode" :width="tableAttr.width"/>
+      <el-table-column label="供应商名称" align="center" prop="supplierName" :width="tableAttr.width"/>
+      <el-table-column label="结算单号" align="center" prop="settleNo" :width="tableAttr.width"/>
+      <el-table-column label="结算开始日期" align="center" prop="startDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.startDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="结算截止日期" align="center" prop="endDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.endDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="合计金额" align="center" prop="totalAmount" :width="tableAttr.width"/>
+      <el-table-column label="备注" align="center" prop="remark" :width="tableAttr.width"/>
+      <el-table-column label="是否汇总" align="center" prop="isSum" :width="tableAttr.width"/>
+      <el-table-column label="审批人" align="center" prop="approver" :width="tableAttr.width"/>
+      <el-table-column label="单据状态" align="center" prop="verifyState" :width="tableAttr.width"/>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['pu:doc:edit']"
+          >修改
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['pu:doc:remove']"
+          >删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改或查看【消耗单明细主表】对话框 -->
+    <el-drawer :title="title" :visible.sync="open" direction="rtl" size="100%">
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-row :gutter="20">
+          <el-col span="6">
+            <el-form-item label="编码" prop="code">
+              <el-input v-model="form.code" placeholder="编码后台自动生成" disabled :size="tableAttr.attrSize.mini"/>
+            </el-form-item>
+          </el-col>
+          <el-col span="6">
+            <el-form-item label="服务费合计" prop="serviceFee">
+              <el-input-number
+                v-model="form.serviceFee" placeholder="自动汇总服务费" :precision="tableAttr.decimal" :step="0.1" :min="0" :size="tableAttr.attrSize.medium" disabled>
+              </el-input-number>
+            </el-form-item>
+          </el-col>
+          <el-col span="6">
+            <el-form-item label="医院编码" prop="custCode">
+              <el-input v-model="form.custCode" placeholder="请输入医院编码" :disabled="tableAttr.isShow" :size="tableAttr.attrSize.mini"/>
+            </el-form-item>
+          </el-col>
+          <el-col span="6">
+            <el-form-item label="医院名称" prop="custName">
+              <el-input v-model="form.custName" placeholder="请输入医院名称" :disabled="tableAttr.isShow" :size="tableAttr.attrSize.mini"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col span="6">
+            <el-form-item label="供应商编码" prop="supplierCode">
+              <el-input v-model="form.supplierCode" placeholder="请输入供应商编码" :disabled="tableAttr.isShow" :size="tableAttr.attrSize.mini"/>
+            </el-form-item>
+          </el-col>
+          <el-col span="6">
+            <el-form-item label="供应商名称" prop="supplierName">
+              <el-input v-model="form.supplierName" placeholder="请输入供应商名称" :disabled="tableAttr.isShow" :size="tableAttr.attrSize.mini"/>
+            </el-form-item>
+          </el-col>
+          <el-col span="6">
+            <el-form-item label="结算单号" prop="settleNo">
+              <el-input v-model="form.settleNo" placeholder="请输入结算单号" :disabled="tableAttr.isShow" :size="tableAttr.attrSize.mini"/>
+            </el-form-item>
+          </el-col>
+          <el-col span="6">
+            <el-form-item label="结算开始日期" prop="startDate">
+              <el-date-picker clearable
+                              v-model="form.startDate"
+                              type="date"
+                              value-format="yyyy-MM-dd"
+                              placeholder="请选择结算开始日期" :disabled="tableAttr.isShow" :size="tableAttr.attrSize.mini">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col span="6">
+            <el-form-item label="结算截止日期" prop="endDate">
+              <el-date-picker clearable
+                              v-model="form.endDate"
+                              type="date"
+                              value-format="yyyy-MM-dd"
+                              placeholder="请选择结算截止日期" :disabled="tableAttr.isShow" :size="tableAttr.attrSize.mini">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col span="6">
+            <el-form-item label="合计金额" prop="totalAmount">
+              <el-input-number
+                v-model="form.totalAmount" placeholder="自动汇总小计" :precision="tableAttr.decimal" :step="0.1" :min="0" :size="tableAttr.attrSize.medium" disabled>
+              </el-input-number>
+            </el-form-item>
+          </el-col>
+          <el-col span="6">
+            <el-form-item label="备注" prop="remark">
+              <el-input v-model="form.remark" placeholder="请输入备注" :disabled="tableAttr.isShow" :size="tableAttr.attrSize.mini"/>
+            </el-form-item>
+          </el-col>
+          <el-col span="6">
+            <el-form-item label="单据状态" prop="verifyState">
+              <el-select v-model="form.verifyState" disabled :size="tableAttr.attrSize.mini">
+                <el-option v-for="dict in dict.type.sys_status" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div>
+        <el-row :gutter="10" class="mb8" style="display: flex; justify-content: flex-end;">
+          <el-col :span="1.5">
+            <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="addRow">增行</el-button>
+          </el-col>
+        </el-row>
+        <el-tabs type="border-card" style="width: 99%; margin: 0 auto;">
+          <el-tab-pane label="消耗单明细">
+            <el-table :data="docItemList" @selection-change="handleSelectionChange" :max-height="tableAttr.maxHeight">
+              <el-table-column type="selection" width="55" align="center"/>
+              <el-table-column label="医保编码" align="center" prop="healthCode" :width="tableAttr.subWidth">
+                <template slot-scope="scope">
+                  <el-input v-model="docItemList[scope.$index].healthCode" placeholder="请输入医保编码" :size="tableAttr.attrSize.mini"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="物料编码" align="center" prop="itemCode" :width="tableAttr.subWidth">
+                <template slot-scope="scope">
+                  <el-input v-model="docItemList[scope.$index].itemCode" placeholder="请输入物料编码" :size="tableAttr.attrSize.mini"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="物料名称" align="center" prop="itemName" :width="tableAttr.subWidth">
+                <template slot-scope="scope">
+                  <el-input v-model="docItemList[scope.$index].itemName" placeholder="请输入物料名称" :size="tableAttr.attrSize.mini"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="规格型号" align="center" prop="itemSpec" :width="tableAttr.subWidth">
+                <template slot-scope="scope">
+                  <el-input v-model="docItemList[scope.$index].itemSpec" placeholder="请输入规格型号" :size="tableAttr.attrSize.mini"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="厂家" align="center" prop="manufactor" :width="tableAttr.subWidth">
+                <template slot-scope="scope">
+                  <el-input v-model="docItemList[scope.$index].manufactor" placeholder="请输入厂家" :size="tableAttr.attrSize.mini"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="单位" align="center" prop="itemUom" :width="tableAttr.subWidth">
+                <template slot-scope="scope">
+                  <el-input v-model="docItemList[scope.$index].itemUom" placeholder="请输入单位" :size="tableAttr.attrSize.mini"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="是否带量" align="center" prop="isWhether" :width="tableAttr.subWidth">
+                <template slot-scope="scope">
+                  <el-select v-model="docItemList[scope.$index].isWhether" :size="tableAttr.attrSize.mini">
+                    <el-option v-for="dict in dict.type.sys_yes_no" :key="dict.value" :label="dict.label"
+                               :value="dict.value"></el-option>
+                  </el-select>
+                </template>
+              </el-table-column>
+              <el-table-column label="服务费率%" align="center" prop="ratio" :width="tableAttr.subWidth">
+                <template slot-scope="scope">
+                  <el-input-number
+                    v-model="docItemList[scope.$index].ratio" :precision="tableAttr.decimal" :step="1" :min="0" :size="tableAttr.attrSize.mini"
+                    @change="calculateServiceFee(scope.$index, docItemList[scope.$index].ratio, docItemList[scope.$index].amount)">
+                  </el-input-number>
+                </template>
+              </el-table-column>
+              <el-table-column label="数量" align="center" prop="qty" :width="tableAttr.subWidth">
+                <template slot-scope="scope">
+                  <el-input-number v-model="docItemList[scope.$index].qty" :step="1" :min="0" :size="tableAttr.attrSize.mini"></el-input-number>
+                </template>
+              </el-table-column>
+              <el-table-column label="单价" align="center" prop="price" :width="tableAttr.subWidth">
+                <template slot-scope="scope">
+                  <el-input-number
+                    v-model="docItemList[scope.$index].price" :precision="tableAttr.decimal" :step="0.1" :min="0" :size="tableAttr.attrSize.mini">
+                  </el-input-number>
+                </template>
+              </el-table-column>
+              <el-table-column label="小计" align="center" prop="amount" :width="tableAttr.subWidth">
+                <template slot-scope="scope">
+                  <el-input-number
+                    v-model="docItemList[scope.$index].amount" :precision="tableAttr.decimal" :step="0.1" :min="0" :size="tableAttr.attrSize.mini" disabled>
+                  </el-input-number>
+                </template>
+              </el-table-column>
+              <el-table-column label="备注" align="center" prop="detailRemark" :width="tableAttr.subWidth">
+                <template slot-scope="scope">
+                  <el-input v-model="docItemList[scope.$index].detailRemark" placeholder="请输入备注" :size="tableAttr.attrSize.mini"></el-input>
+                </template>
+              </el-table-column>
+              <el-table-column label="服务费" align="center" prop="serviceFee" :width="tableAttr.subWidth">
+                <template slot-scope="scope">
+                  <el-input-number
+                    v-model="docItemList[scope.$index].serviceFee" :precision="tableAttr.decimal"
+                    :step="0.1" :min="0" :size="tableAttr.attrSize.mini" disabled
+                  >
+                  </el-input-number>
+                </template>
+              </el-table-column>
+              <el-table-column label="操作" align="center" class-name="small-padding fixed-width" :width="tableAttr.width" fixed="right">
+                <template slot-scope="scope">
+                  <el-button
+                    size="mini"
+                    type="text"
+                    icon="el-icon-edit"
+                  >复制
+                  </el-button>
+                  <el-button
+                    @click.native.prevent="deleteRow(scope.$index, docItemList)"
+                    type="text"
+                    size="small">
+                    删行
+                  </el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-tab-pane>
+        </el-tabs>
+        <div slot="footer" class="dialog-footer" style="margin-left: 90%; margin-top: 1%">
+          <el-button type="primary" @click="submitForm" size="mini">确 定</el-button>
+          <el-button @click="cancel" size="mini">返 回</el-button>
+        </div>
+      </div>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import {listDoc, getDoc, delDoc, addDoc, updateDoc} from "@/api/business/spd/sales/doc";
+import * as util from "@/api/business/spd/sales/utils"
+
+export default {
+  dicts: ["sys_status", "sys_yes_no"],
+  name: "Doc",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 【消耗单明细主表】表格数据
+      docList: [],
+      docItemList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        code: null,
+        dr: null,
+        supplierName: null,
+        supplierCode: null,
+        startDate: null,
+        custCode: null,
+        endDate: null,
+        totalAmount: null,
+        settleNo: null,
+        serviceFee: null,
+        isSum: null,
+        approver: null,
+        verifyState: null,
+        custName: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {},
+      tableAttr: {
+        width: 100,
+        subWidth: 150,
+        isShow: false,
+        decimal: 2,
+        attrSize: {
+          medium: 'medium',
+          large: 'large',
+          small: 'small',
+          mini: 'mini'
+        },
+        maxHeight: 250
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询【消耗单明细主表】列表 */
+    getList() {
+      this.loading = true;
+      listDoc(this.queryParams).then(response => {
+        this.docList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        code: null,
+        dr: null,
+        supplierName: null,
+        supplierCode: null,
+        startDate: null,
+        custCode: null,
+        endDate: null,
+        remark: null,
+        totalAmount: null,
+        settleNo: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        serviceFee: null,
+        isSum: null,
+        approver: null,
+        verifyState: null,
+        custName: null,
+        docItemList: []
+      };
+      this.docItemList = []
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.form.verifyState = '0'
+      this.open = true;
+      this.title = "添加【消耗单明细主表】";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getDoc(id).then(response => {
+        this.form = response.data;
+        this.docItemList = JSON.parse(JSON.stringify(response.data.itemList))
+        this.open = true;
+        this.title = "修改【消耗单明细主表】";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            this.form.docItemList = JSON.parse(JSON.stringify(this.docItemList))
+            console.log('form', this.form);
+            updateDoc(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+              console.log('response', response);
+            });
+          } else {
+            addDoc(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除【请填写功能名称】编号为"' + ids + '"的数据项?').then(function () {
+        return delDoc(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('pu/doc/export', {
+        ...this.queryParams
+      }, `doc_${new Date().getTime()}.xlsx`)
+    },
+    // 子表删行
+    deleteRow(index, rows) {
+      rows.splice(index, 1);
+    },
+    // 子表增行
+    addRow() {
+      let docItem = {
+        healthCode: '',
+        itemCode: '',
+        itemName: '',
+        itemSpec: '',
+        manufactor: '',
+        itemUom: '',
+        isWhether: '',
+        ratio: 0,
+        qty: 0,
+        price: 0,
+        amount: 0,
+        detailRemark: '',
+        serviceFee: null,
+        createBy: this.$store.state.user.name,
+        createTime: util.getCurrentTime('yyyy-MM-dd HH:mm:ss'),
+        updateBy: this.$store.state.user.name,
+        dr: 0,
+        parent: (this.form.id === null || this.form.id === undefined) ? this.form.id : null
+      }
+      this.docItemList.push(docItem)
+    },
+    // 计算子表服务费
+    calculateServiceFee(index, ratio, amount) {
+      this.docItemList[index].serviceFee = (ratio/100) * amount
+      let docItemList = this.docItemList;
+      let amountSum = 0
+      let serviceFeeSum = 0
+      for (const element of docItemList) {
+        amountSum += element.amount > 0 ? element.amount : 0
+        serviceFeeSum += element.serviceFee > 0 ? element.serviceFee : 0
+      }
+      this.form.totalAmount = amountSum
+      this.form.serviceFee = serviceFeeSum
+    }
+  }
+};
+</script>

+ 38 - 0
src/views/expend/customerExpend/che-hui/index.vue

@@ -0,0 +1,38 @@
+<script>
+export default {
+  name: "OpenOrClose",
+  props: {
+    selectData: {
+      type: Array,
+      default: () => [],
+    },
+  },
+  data() {
+    return {
+      title: "撤回",
+    };
+  },
+  computed: {
+    disabled: {
+      get() {
+        const { selectData } = this;
+        if (selectData.length < 1) {
+          return true;
+        }
+        return false;
+      },
+      set() {},
+    },
+  },
+  methods: {
+    useClick() {},
+  },
+  created() {},
+};
+</script>
+
+<template>
+  <el-button @click="useClick" :disabled="disabled" v-bind="$attrs">{{
+    title
+  }}</el-button>
+</template>

+ 184 - 0
src/views/expend/customerExpend/columns.js

@@ -0,0 +1,184 @@
+export default function useColumns() {
+  const SearchColumns = [
+    {
+      item: { key: "ccdProjectName", title: "项目名称" },
+      attr: {
+        is: "el-input",
+        clearable: true,
+      }
+    },
+    {
+      item: { key: "ccdSupplier", title: "供应商" },
+      attr: {
+        is: "el-input",
+        clearable: true,
+      }
+    },
+    {
+      item: { key: "ccdSpdProject", title: "SPD项目" },
+      attr: {
+        is: "el-input",
+        clearable: true,
+      }
+    },
+    {
+      item: { key: "ccdSaleOrg_name", title: "销售组织" },
+      attr: {
+        is: "el-popover-select-v2",
+        referName: "ORG_PARAM",
+        valueKey: "name",
+        dataMapping: {
+          ccdSaleOrg: "id",
+          ccdSaleOrg_name: "name",
+        },
+        clearable: true,
+      }
+    },
+    {
+      item: { key: "ccdMaterialCode", title: "物料编码" },
+      attr: {
+        is: "el-input",
+        clearable: true,
+      }
+    },
+    {
+      item: { key: "ccdIsTicket", title: "是否开票" },
+      attr: {
+        is: "el-select",
+        dictName: "sys_yes_no",
+        clearable: true,
+      }
+    },
+    {
+      item: { key: "ccdSaleOrderNo", title: "销售订单号" },
+      attr: {
+        is: "el-input",
+        clearable: true,
+      }
+    },
+    {
+      item: { key: "verifyState", title: "单据状态" },
+      attr: {
+        is: "el-select",
+        dictName: "sys_status",
+        clearable: true,
+      }
+    },
+    {
+      item: { key: "code", title: "编码" },
+      attr: {
+        is: "el-input",
+        clearable: true,
+      }
+    },
+  ];
+  const TableColumns = [
+    {
+      item: { key: "code", title: "单据号" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdProjectName", title: "项目名称" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdSupplier", title: "供应商" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdCalculateSupplier", title: "结算供应商" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdStartDate", title: "结算开始日期" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdEndDate", title: "结算截止日期" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdSpdProject", title: "SPD项目" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdProfileCenter", title: "利润中心" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdSaleOrg_name", title: "销售组织" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdSaleMonth", title: "销售月份" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdPriceSum", title: "价税合计" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdServiceFee", title: "服务费" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdMaterialCode", title: "物料编码" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdNum", title: "数量" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdIsToSaleOrder", title: "是否转销售订单" },
+      attr: {
+        is: "el-dict-tag",
+        dictName: "sys_yes_no",
+      }
+    },
+    {
+      item: { key: "ccdSaleOrderNo", title: "销售订单号" },
+      attr: {}
+    },
+    {
+      item: { key: "ccdIsReturnMoney", title: "是否回款" },
+      attr: {
+        is: "el-dict-tag",
+        dictName: "sys_return_money",
+      }
+    },
+    {
+      item: { key: "ccdIsTicket", title: "是否开票" },
+      attr: {
+        is: "el-dict-tag",
+        dictName: "sys_yes_no",
+      }
+    },
+    {
+      item: { key: "verifyState", title: "单据状态" },
+      attr: {
+        is: "el-dict-tag",
+        dictName: "sys_status",
+        clearable: true,
+      }
+    },
+    {
+      item: { key: "ccdIsOpenStatus", title: "单据打开状态" },
+      attr: {
+        is: "el-dict-tag",
+        dictName: "sys_open_status",
+        clearable: true,
+      }
+    },
+  ].map(({ item, attr }) => ({
+    attr,
+    item: {
+      ...item,
+      sortabled: true,
+      fixedabled: true,
+      filterabled: true,
+      hiddenabled: true,
+    },
+  }));
+  return { SearchColumns, TableColumns }
+}

+ 15 - 0
src/views/expend/customerExpend/dicts.js

@@ -0,0 +1,15 @@
+
+import { initDicts } from "@/utils/init.js";
+const modules = require.context("./", true, /columns.js$/);
+const columns = [];
+modules.keys().forEach((fileName) => {
+  const data = modules(fileName).default();
+  for (const key in data) {
+    if (key === "TabColumns") {
+      columns.push(...data[key].map((item) => item.TableColumns).flat());
+    } else {
+      columns.push(...data[key]);
+    }
+  }
+});
+export const dicts = initDicts(columns);

+ 149 - 0
src/views/expend/customerExpend/edit/columns.js

@@ -0,0 +1,149 @@
+export default function useColumns() {
+  const FearchColumns = [
+    {
+      item: { key: "code", title: "编码" },
+      attr: {
+        is: "el-input",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "ccdProjectName", title: "项目名称" },
+      attr: {
+        is: "el-input",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "ccdStartDate", title: "结算开始日期" },
+      attr: {
+        is: "el-date-picker",
+        type: "date",
+        valueFormat: "yyyy-MM-dd",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "ccdEndDate", title: "结算截止日期" },
+      attr: {
+        is: "el-date-picker",
+        type: "date",
+        valueFormat: "yyyy-MM-dd",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "ccdSpdProject", title: "SPD项目" },
+      attr: {
+        is: "el-input",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "ccdProfileCenter", title: "利润中心" },
+      attr: {
+        is: "el-input",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "ccdCalculateSupplier", title: "结算供应商" },
+      attr: {
+        is: "el-input",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "ccdSupplier", title: "供应商" },
+      attr: {
+        is: "el-input",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "ccdSaleOrg_name", title: "销售组织" },
+      attr: {
+        is: "el-popover-select-v2",
+        referName: "ORG_PARAM",
+        valueKey: "name",
+        dataMapping: {
+          ccdSaleOrg: "id",
+          ccdSaleOrg_name: "name",
+        },
+        // ccdSaleOrg_name
+      }
+    },
+    {
+      item: { key: "ccdSaleMonth", title: "销售月份" },
+      attr: {
+        is: "el-input",
+      }
+    },
+    {
+      item: { key: "ccdSaleOrderNo", title: "销售订单号" },
+      attr: {
+        is: "el-input",
+      }
+    },
+    {
+      item: { key: "ccdPriceSum", title: "价税合计" },
+      attr: {
+        is: "el-input",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "ccdServiceFee", title: "服务费" },
+      attr: {
+        is: "el-input",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "ccdIsToSaleOrder", title: "是否转销售订单" },
+      attr: {
+        is: "el-select",
+        dictName: "sys_yes_no",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "ccdIsReturnMoney", title: "是否回款" },
+      attr: {
+        is: "el-select",
+        dictName: "sys_return_money",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "ccdIsTicket", title: "是否开票" },
+      attr: {
+        is: "el-select",
+        dictName: "sys_yes_no",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "ccdIsOpenStatus", title: "单据打开状态" },
+      attr: {
+        is: "el-select",
+        dictName: "sys_open_status",
+        disabled: true,
+      }
+    },
+    {
+      item: { key: "verifyState", title: "单据状态" },
+      attr: {
+        is: "el-select",
+        dictName: "sys_status",
+        disabled: true,
+      }
+    },
+
+  ].map(({ item, attr }) => ({
+    attr,
+    item: { ...item, hidden: true, span: item.span || 6 },
+  }));
+
+  return { FearchColumns }
+}

+ 104 - 0
src/views/expend/customerExpend/edit/index.vue

@@ -0,0 +1,104 @@
+<script>
+import useColumns from "./columns";
+export default {
+  name: "customerExpendAdd",
+  props: {
+    dict: {
+      type: Object,
+    },
+  },
+  components: {
+    ElSuperForm: () => import("@/components/super-form/index.vue"),
+  },
+  data() {
+    const { FearchColumns } = useColumns();
+    const page = this.$init.page();
+    const params = this.$init.params(FearchColumns);
+    const rules = this.$init.rules(FearchColumns);
+    return {
+      page,
+      rules,
+      params,
+      FearchColumns,
+      size: "mini",
+      width: "100%",
+      visible: false,
+      loading: false,
+      opType: "edit",
+    };
+  },
+  computed: {
+    title: {
+      get() {
+        let { opType } = this;
+        if (opType === "edit") {
+          return "编辑";
+        } else {
+          return "查看";
+        }
+      },
+      set() {},
+    },
+  },
+  methods: {
+    setVisible(prop, type) {
+      this.visible = prop;
+      this.opType = type;
+    },
+    // 查询
+    fetchItem(prop) {
+      console.log(prop, "prop");
+    },
+    //
+    onHide() {
+      const { FearchColumns } = useColumns();
+      this.visible = false;
+      this.params = this.$init.params(FearchColumns);
+      this.$emit("success");
+    },
+    useSubmit() {},
+  },
+  created() {},
+};
+</script>
+
+<template>
+  <el-drawer
+    :show-close="false"
+    :size="width"
+    :title="title"
+    :visible.sync="visible"
+    append-to-body
+    destroy-on-close
+    @close="onHide"
+  >
+    <template slot="title">
+      <span>{{ title }}</span>
+      <el-button
+        v-if="opType !== 'see'"
+        type="primary"
+        :size="$attrs.size"
+        :loading="loading"
+        @click="useSubmit('customerExpendAdd')"
+      >
+        确 认
+      </el-button>
+      <el-button :size="$attrs.size" :loading="loading" @click="onHide">
+        取 消
+      </el-button>
+    </template>
+    <el-super-form
+      v-model="params"
+      :dict="dict"
+      :rules="rules"
+      :size="$attrs.size"
+      :columns="FearchColumns"
+      :disabled="opType === 'see'"
+      ref="customerExpendAdd"
+      label-width="auto"
+      label-position="right"
+      style="padding: 18px"
+    >
+    </el-super-form>
+  </el-drawer>
+</template>

+ 38 - 0
src/views/expend/customerExpend/hdk-hgb/index.vue

@@ -0,0 +1,38 @@
+<script>
+export default {
+  name: "OpenOrClose",
+  props: {
+    selectData: {
+      type: Array,
+      default: () => [],
+    },
+  },
+  data() {
+    return {
+      title: "行打开/关闭",
+    };
+  },
+  computed: {
+    disabled: {
+      get() {
+        const { selectData } = this;
+        if (selectData.length < 1) {
+          return true;
+        }
+        return false;
+      },
+      set() {},
+    },
+  },
+  methods: {
+    useClick() {},
+  },
+  created() {},
+};
+</script>
+
+<template>
+  <el-button @click="useClick" :disabled="disabled" v-bind="$attrs">{{
+    title
+  }}</el-button>
+</template>

+ 167 - 0
src/views/expend/customerExpend/index.vue

@@ -0,0 +1,167 @@
+<script>
+import { dicts } from "./dicts";
+import useColumns from "./columns";
+import { queryList } from "@/api/expend/customerExpend";
+export default {
+  name: "customerExpend",
+  dicts: dicts,
+  components: {
+    ElSuperUxTable: () => import("@/components/super-ux-table/index.vue"),
+    ElSuperSearch: () => import("@/components/super-search/index.vue"),
+    zxsddButton: () => import("./zxsdd/index.vue"),
+    hgbHdkButton: () => import("./hdk-hgb/index.vue"),
+    chButton: () => import("./che-hui/index.vue"),
+    tjButton: () => import("./ti-jiao/index.vue"),
+    editDrawer: () => import("./edit/index.vue"),
+  },
+  data() {
+    const { TableColumns, SearchColumns } = useColumns();
+    const page = this.$init.page();
+    const params = this.$init.params(SearchColumns);
+    return {
+      page,
+      params,
+      TableColumns,
+      SearchColumns,
+      size: "mini",
+      tableData: [],
+      selectData: [],
+      loading: false,
+    };
+  },
+  methods: {
+    // 查询
+    async useQuery(params, page) {
+      try {
+        this.loading = true;
+        let { code, rows, total } = await queryList({ ...params, ...page });
+        if (code == 200) {
+          this.tableData = rows;
+          this.page.total = total;
+        }
+      } catch (error) {
+      } finally {
+        this.loading = false;
+      }
+    },
+    // 查看
+    useSee(row) {
+      let { setVisible, fetchItem } = this.$refs.customerEdit;
+      setVisible(true, "see");
+      fetchItem(row);
+    },
+    // 编辑
+    useEdit(row) {
+      let { setVisible, fetchItem } = this.$refs.customerEdit;
+      setVisible(true, "edit");
+      fetchItem(row);
+    },
+    // 重置
+    useReset() {
+      this.page = this.$init.page();
+      this.params = this.$init.params(this.SearchColumns);
+    },
+    // 选 择
+    useSelect(prop) {
+      this.selectData = prop;
+    },
+  },
+  created() {
+    this.useQuery(this.params, this.page);
+  },
+};
+</script>
+
+<template>
+  <el-card
+    v-loading="loading"
+    :body-style="{
+      height: '100%',
+      padding: 0,
+      display: 'flex',
+      'flex-direction': 'column',
+    }"
+  >
+    <el-super-search
+      v-model="params"
+      :size="size"
+      :dict="dict"
+      :columns="SearchColumns"
+      @reset="useReset"
+      @submit="useQuery(params, page)"
+    ></el-super-search>
+    <el-row class="my-4" style="text-align: right">
+      <el-button-group>
+        <tj-button
+          :dict="dict"
+          :size="size"
+          type="primary"
+          :select-data="selectData"
+          @success="useQuery(params, page)"
+        ></tj-button>
+        <ch-button
+          :dict="dict"
+          :size="size"
+          :select-data="selectData"
+          @success="useQuery(params, page)"
+        ></ch-button>
+      </el-button-group>
+      <el-button-group>
+        <zxsdd-button
+          :dict="dict"
+          :size="size"
+          :select-data="selectData"
+          @success="useQuery(params, page)"
+        ></zxsdd-button>
+        <hgb-hdk-button
+          :dict="dict"
+          :size="size"
+          :select-data="selectData"
+          @success="useQuery(params, page)"
+        ></hgb-hdk-button>
+      </el-button-group>
+    </el-row>
+    <edit-drawer
+      ref="customerEdit"
+      :dict="dict"
+      :size="size"
+      @submit="useQuery(params, page)"
+    ></edit-drawer>
+    <el-super-ux-table
+      v-model="tableData"
+      :size="size"
+      :dict="dict"
+      :page="page"
+      :columns="TableColumns"
+      index
+      checkbox
+      pagination
+      convenitentOperation
+      storage-key="CustomerExpendSuperTable"
+      @row-dblclick="useSee"
+      @row-select="useSelect"
+      @pagination="useQuery(params, page)"
+    >
+      <ux-table-column fixed="right" title="操作" align="center" width="100">
+        <template slot-scope="scope">
+          <el-button type="text" :size="size" @click="useEdit(scope.row)"
+            >编辑</el-button
+          >
+        </template>
+      </ux-table-column>
+    </el-super-ux-table>
+  </el-card>
+</template>
+<style scoped lang="scss">
+.el-card {
+  width: calc(100% - 32px);
+  height: calc(100vh - 32px);
+  margin: 16px;
+  padding: 16px;
+  border-radius: 8px;
+}
+
+.el-button-group + .el-button-group {
+  margin: 0 0 0 8px;
+}
+</style>

+ 38 - 0
src/views/expend/customerExpend/ti-jiao/index.vue

@@ -0,0 +1,38 @@
+<script>
+export default {
+  name: "OpenOrClose",
+  props: {
+    selectData: {
+      type: Array,
+      default: () => [],
+    },
+  },
+  data() {
+    return {
+      title: "提交",
+    };
+  },
+  computed: {
+    disabled: {
+      get() {
+        const { selectData } = this;
+        if (selectData.length < 1) {
+          return true;
+        }
+        return false;
+      },
+      set() {},
+    },
+  },
+  methods: {
+    useClick() {},
+  },
+  created() {},
+};
+</script>
+
+<template>
+  <el-button @click="useClick" :disabled="disabled" v-bind="$attrs">{{
+    title
+  }}</el-button>
+</template>

+ 38 - 0
src/views/expend/customerExpend/zxsdd/index.vue

@@ -0,0 +1,38 @@
+<script>
+export default {
+  name: "ResaleOrder",
+  props: {
+    selectData: {
+      type: Array,
+      default: () => [],
+    },
+  },
+  data() {
+    return {
+      title: "转销售订单",
+    };
+  },
+  computed: {
+    disabled: {
+      get() {
+        const { selectData } = this;
+        if (selectData.length < 1) {
+          return true;
+        }
+        return false;
+      },
+      set() {},
+    },
+  },
+  methods: {
+    useClick() {},
+  },
+  created() {},
+};
+</script>
+
+<template>
+  <el-button @click="useClick" :disabled="disabled" v-bind="$attrs">{{
+    title
+  }}</el-button>
+</template>

+ 230 - 0
src/views/expend/expendMx.vue

@@ -0,0 +1,230 @@
+<template>
+  <div id="expendMx">
+    <div v-if="isList">
+      <el-card
+        v-loading="loading"
+        style="position: relative;"
+      >
+      <el-form class="search_area" label-width="auto">
+        <el-row :gutter="10">
+          <el-col :span="1.5">
+            <el-form-item label="通用名称">
+                <el-input
+                  v-model.trim="params.commonName"
+                  size="mini"
+                  clearable
+                  style="width: 200px"
+                />
+              </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="注册名">
+                <el-input
+                  v-model.trim="params.registrationName"
+                  size="mini"
+                  clearable
+                  style="width: 200px"
+                />
+              </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="厂家名称">
+                <el-input
+                  v-model.trim="params.factoryName"
+                  size="mini"
+                  clearable
+                  style="width: 200px"
+                />
+              </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="型号">
+                <el-input
+                  v-model.trim="params.model"
+                  size="mini"
+                  clearable
+                  style="width: 200px"
+                />
+              </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label-width="80px">
+              <el-button type="primary" size="mini" icon="el-icon-search" @click="searchList">搜 索</el-button>
+              <el-button size="mini" plain icon="el-icon-refresh" @click="resetList">重 置</el-button>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+
+      <div class="btn_grooup">
+        <el-button type="primary" size="mini" @click="submits">提交</el-button>
+        <el-button type="primary" size="mini" @click="pulldata">下拉数据</el-button>
+        <el-button type="primary" size="mini" @click="huizong">汇总</el-button>
+      </div>
+
+      <el-super-ux-table
+        id="data-table"
+        v-model="tableData"
+        index
+        checkbox
+        :size="size"
+        :dict="dict"
+        :page="pageInfo"
+        :height=500
+        :columns="TableColumns"
+        pagination
+        convenitentOperation
+        storage-key="expendMxList"
+        @row-dblclick="useSee"
+        @row-select="useSelect"
+        @selection-change="handleSelectionChange"
+        @row-click="rowSelect"
+        @pagination="useQuery(params, pageInfo)"
+        ref="tables"
+      >
+        <ux-table-column
+          fixed="right"
+          title="操作"
+          align="center"
+          width="100"
+          >
+          <template slot-scope="scope">
+            <!-- <el-button type="text" size="mini" v-if="scope.row.status == '1' && scope.row.flowId" @click="reback(scope.row)">收回</el-button> -->
+            <el-button type="text" size="mini" @click="check(scope.row)">查看</el-button>
+            <el-button type="text" size="mini" @click="edit(scope.row)">编辑</el-button>
+          </template>
+        </ux-table-column>
+      </el-super-ux-table>
+
+      </el-card>
+    </div>
+
+    <Add v-model="isList" v-if="!isList" :pageStu="page" :disable="disable" :row="rowDetail" @refresh="searchList"/>
+  </div>
+</template>
+
+<script>
+import { mxList, pullMx } from '@/api/expend/expendMx.js'
+export default {
+  dicts: ['sys_equipment_type'],
+  components: {
+    Add: () => import("./expendMxDetail.vue"),
+    ElSuperUxTable: () => import("@/components/super-ux-table/index.vue"),
+  },
+  data() {
+    return {
+      // 页面配置
+      isList: true,
+      // 页面状态
+      page: '',
+      disable: false,
+      rowDetail: {},
+      size: "mini",
+      loading: false,
+      params: {
+        commonName: '',
+        registrationName: '',
+        deviceCategory: '',
+        departmentCode: '',
+        factoryName: '',
+        model: '',
+        referencePrice: '',
+        parameters: '',
+        isDeleteFile: '',
+        isProjectOrFactoryEmpower: '',
+        remark: ''
+      },
+      pageInfo: {
+        pageNum: 1,
+        pageSize: 20,
+        total: 0
+      },
+      tableData: [],
+      selectData: [],
+      // SearchColumns: SearchColumns,
+      TableColumns: [
+        { item: { key: "serviceFee", title: "服务费合计" }, attr: {} },
+        { item: { key: "custCode", title: "医院编码" }, attr: {} },
+        { item: { key: "supplierCode", title: "供应商编码" }, attr: {} },
+        { item: { key: "supplierName", title: "供应商名称" }, attr: {} },
+        { item: { key: "isSum", title: "是否汇总" }, attr: {} },
+        { item: { key: "settleNo", title: "结算单号"}, attr: {} },
+        { item: { key: "startDate", title: "结算开始日期" }, attr: {} },
+        { item: { key: "endDate", title: "结算截止日期" }, attr: {} },
+        { item: { key: "totalAmount", title: "合计金额" }, attr: {} },
+        // { item: { key: "isProjectOrFactoryEmpower", title: "是否项目/厂家年度授权" }, attr: {is: "el-dict-tag", dictName: "sys_equipment_type"} },
+        // { item: { key: "parameters", title: "参数" }, attr: {} },
+        { item: { key: "remark", title: "备注"}, attr: {} },
+        { item: { key: "code", title: "编码"}, attr: {} },
+        { item: { key: "verifyState", title: "单据状态"}, attr: {} },
+      ].map(({ item, attr }) => ({
+      attr,
+      item: {
+        ...item,
+        sortabled: true,
+        fixedabled: true,
+        filterabled: true,
+        hiddenabled: true,
+      },
+      })),
+      ids: []
+    }
+  },
+  created() {
+    this.useQuery(this.params, this.pageInfo)
+  },
+  methods: {
+    searchList() {},
+    resetList() {},
+    useSee() {},
+    useSelect() {},
+    handleSelectionChange(selection) {
+      console.log('选中', selection)
+      this.ids = selection.map(item => item.id)
+      console.log('选中数组', this.ids)
+    },
+    rowSelect(row) {
+      this.$refs.tables.toggleRowSelection([{row: row}]);
+    },
+    async useQuery(prop, page) {
+      let params = {...prop, ...page}
+      await mxList(params).then(res => {
+        if( res.code === 200 ) {
+          this.tableData = res.rows
+          this.pageInfo.total = res.total
+        }
+      })
+    },
+    submits() {
+      this.isList = false
+      this.page = 'add'
+      this.disable = false
+    },
+    pulldata() {
+      pullMx().then(res => {
+        
+      })
+    },
+    huizong() {},
+    check() {},
+    edit() {},
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+#expendMx {
+  padding: 12px;
+  box-sizing: border-box;
+  overflow-y: scroll;
+}
+.btn_grooup {
+  margin-bottom: 10px;
+  display: flex;
+  justify-content: flex-end;
+}
+</style>

+ 226 - 0
src/views/expend/expendMxDetail.vue

@@ -0,0 +1,226 @@
+<template>
+  <div id="editExpendMx">
+    <el-card style="position: relative;">
+      <span>基本信息</span>
+      <el-form :model="basicForm" :rules="basicRules" ref="basic" label-width="auto" :show-message="false">
+        <el-row :gutter="10">
+
+          <el-col :span="1.5">
+            <el-form-item label="编码" prop="code">
+              <el-input style="width: 200px" clearable disabled size="mini" v-model="basicForm.code">
+              </el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="服务费合计" prop="serviceFee">
+              <el-input style="width: 200px" clearable disabled size="mini" v-model="basicForm.serviceFee">
+              </el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="医院编码" prop="custCode">
+              <el-input style="width: 200px" clearable :disabled="sonDisable" size="mini" v-model="basicForm.custCode">
+              </el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="医院名称" prop="custName">
+              <el-input style="width: 200px" clearable :disabled="sonDisable" size="mini" v-model="basicForm.custName">
+              </el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="供应商编码" prop="supplierCode">
+              <el-input style="width: 200px" clearable :disabled="sonDisable" size="mini" v-model="basicForm.supplierCode">
+              </el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="供应商名称" prop="supplierName">
+              <el-input style="width: 200px" clearable :disabled="sonDisable" size="mini" v-model="basicForm.supplierName">
+              </el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="结算单号" prop="settleNo">
+              <el-input style="width: 200px" clearable :disabled="sonDisable" size="mini" v-model="basicForm.settleNo">
+              </el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="结算开始日期" prop="startDate">
+              <el-date-picker
+                v-model="basicForm.startDate"
+                :disabled="sonDisable"
+                clearable
+                type="date"
+                value-format="yyyy-MM-dd"
+                size="mini"
+                style="width: 200px"
+              >
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="结算截止日期" prop="endDate">
+              <el-date-picker
+                v-model="basicForm.endDate"
+                :disabled="sonDisable"
+                clearable
+                type="date"
+                value-format="yyyy-MM-dd"
+                size="mini"
+                style="width: 200px"
+              >
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="合计金额" prop="totalAmount">
+              <el-input style="width: 200px" clearable disabled size="mini" v-model="basicForm.totalAmount">
+              </el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="1.5">
+            <el-form-item label="备注" prop="remark">
+              <el-input style="width: 200px" clearable :disabled="sonDisable" size="mini" v-model="basicForm.remark">
+              </el-input>
+            </el-form-item>
+          </el-col>
+
+        </el-row>
+      </el-form>
+
+      <div class="btn_group">
+        <el-button type="primary" size="mini"  @click="editPage" v-if="sonPageStu == 'check'">编辑</el-button>
+        <el-button type="primary" size="mini"  @click="save" v-if="sonPageStu == 'add' || sonPageStu == 'edit'">保存</el-button>
+        <el-button size="mini" plain @click="back">返回</el-button>
+      </div>
+
+      <div class="btn_grooup">
+        <span>明细信息</span>
+        <div>
+          <el-button type="primary" size="mini" @click="addLine" v-if="!sonDisable">增行</el-button>
+          <el-button type="primary" size="mini" @click="delLines" v-if="!sonDisable">删行</el-button>
+        </div>
+      </div>
+
+      <ux-grid
+        :data="basicForm.sysMaterialDeviceOriginItemList"
+        border
+        :cell-style="{ borderColor: '#c0c0c0' }"
+        :header-cell-style="{ borderColor: '#c0c0c0' }"
+        class="exporttable"
+        height="410"
+        max-height="410"
+        style="font-size: 12px;"
+        @selection-change="handleSelectionChange"
+        ref="table"
+        show-header-overflow="tooltip"
+        show-overflow="tooltip"
+        keep-source
+        beautifyTable
+        :checkbox-config="{highlight: true, trigger: 'row'}"
+        :edit-config="{trigger: 'click', mode: 'row'}">
+      >
+        <ux-table-column resizable type="checkbox" width="50px" fixed="left"/>
+        <ux-table-column resizable title="医保编码" field="healthCode" align="center"/>
+        <ux-table-column resizable title="物料编码" field="itemCode" align="center"/>
+        <ux-table-column resizable title="物料名称" field="itemName" align="center"/>
+        <ux-table-column resizable title="规格型号" field="itemSpec" align="center"/>
+        <ux-table-column resizable title="厂家" field="manufactor" align="center"/>
+        <ux-table-column resizable title="单位" field="itemUom" align="center"/>
+        <ux-table-column resizable title="是否带量" field="isWhether" align="center"/>
+        <ux-table-column resizable title="服务费率" field="ratio" align="center" edit-render>
+          <template v-slot:edit="scope">
+            <el-input clearable :disabled="sonDisable" size="mini" v-model="scope.row.ratio"/>
+          </template>
+        </ux-table-column>
+        <ux-table-column resizable title="数量" field="qty" align="center"/>
+        <ux-table-column resizable title="单价" field="price" align="center"/>
+        <ux-table-column resizable title="小计" field="amount" align="center"/>
+        <ux-table-column resizable title="备注" field="detailRemark" align="center"/>
+        <ux-table-column resizable title="服务费" field="serviceFee" align="center"/>
+        <ux-table-column resizable title="是否汇总" field="isSum" align="center"/>
+      </ux-grid>
+    </el-card>
+  </div>
+</template>
+
+<script>
+export default {
+  props: ['pageStu','row', 'disable'],
+  model: {
+    prop: 'isList',
+    event: 'jugislist'
+  },
+  data() {
+    return {
+      // 不能直接改变props传来的值
+      sonPageStu: this.pageStu,
+      sonDisable: this.disable,
+      basicForm: {
+        id: '',
+        code: '',
+        serviceFee: '',
+        custCode: '',
+        custName: '',
+        supplierCode: '',
+        supplierName: '',
+        settleNo: '',
+        startDate: '',
+        endDate: '',
+        totalAmount: '',
+        remark: '',
+      },
+      basicRules: {},
+      ids:[],
+    }
+  },
+  methods: {
+    editPage() {},
+    save() {},
+    back() {
+      this.$emit('jugislist', true)
+      this.$emit('refresh')
+    },
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item =>{
+        return item.id
+      })
+      console.log('选中数组', this.ids)
+    },
+    addLine() {
+
+    },
+    delLines() {
+
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.btn_group {
+  display: flex;
+  justify-content: space-between;
+  position: absolute;
+  top: 10px;right: 20px;
+
+}
+.btn_grooup {
+  margin-bottom: 10px;
+  display: flex;
+  justify-content: space-between;
+}
+</style>

+ 15 - 0
src/views/purchase/SupAtttachment/columns.js

@@ -0,0 +1,15 @@
+export default function useColumns() {
+  // const SearchColumns = [];
+  const TableColumns = [
+    {
+      item: { key: "name", title: "名称", width: "auto" },
+      attr: {},
+    },
+    // {
+    //   item: { key: "", title: "" },
+    //   attr: {},
+    // },
+
+  ];
+  return { TableColumns };
+}

+ 118 - 0
src/views/purchase/SupAtttachment/index.vue

@@ -0,0 +1,118 @@
+<!-- 供应商附件管理 -->
+<script>
+import { referFile, download } from "@/api/purchase/supAtttachment";
+import useColumns from "./columns";
+export default {
+  name: "SupAtttachment",
+  components: {
+    ElSuperUxTable: () => import("@/components/super-ux-table/index.vue"),
+  },
+  data() {
+    const page = this.$init.page();
+    const { TableColumns } = useColumns();
+    return {
+      page,
+      size: "mini",
+      TableColumns,
+      loading: false,
+      tableData: [],
+    };
+  },
+  methods: {
+    async getList(params) {
+      try {
+        this.loading = true;
+        let { code, msg, rows, total } = await referFile(params);
+        if (code == 200) {
+          this.tableData = rows;
+          this.page.total = total;
+        }
+      } catch (error) {
+        console.log(error);
+      } finally {
+        this.loading = false;
+      }
+    },
+    // 下载
+    async useDownload(row) {
+      try {
+        this.$modal.loading("请稍候...");
+        let formData = new FormData();
+        formData.append("url", row.url);
+        await download(formData).then(async (res) => {
+          // var buffer = new ArrayBuffer(res);
+          // var blob = new Blob([buffer], { type: "image/jpeg" });
+          var blob = new Blob([res], {
+            type: "image/jpeg",
+          });
+          const link = document.createElement("a");
+          link.href = URL.createObjectURL(blob);
+          link.download = row.name; // 这里填保存成的文件名
+          link.click();
+          URL.revokeObjectURL(link.href);
+        });
+      } catch (error) {
+      } finally {
+        this.$modal.closeLoading();
+      }
+    },
+    useDbclick(row) {
+      window.open(row.url);
+      // var oA = document.createElement("a"); //创建a标签
+      // oA.href = row.url; //添加 href 属性
+      // oA.target = "_blank"; //添加 target 属性
+      // oA.click(); //模拟点击
+    },
+  },
+  async created() {
+    let { code } = this.$route.query;
+    await this.getList({ ...this.page, code });
+  },
+};
+</script>
+
+<template>
+  <el-card
+    v-loading="loading"
+    :body-style="{
+      height: '100%',
+      padding: 0,
+      display: 'flex',
+      'flex-direction': 'column',
+    }"
+  >
+    <el-super-ux-table
+      v-model="tableData"
+      :size="size"
+      :page="page"
+      :columns="TableColumns"
+      index
+      pagination
+      storage-key="SupAtttachmentSuperTable"
+      @row-dblclick="useDbclick"
+      @pagination="getList(page)"
+    >
+      <ux-table-column fixed="right" title="操作" align="center" width="100">
+        <template slot-scope="scope">
+          <el-button type="text" @click="useDbclick(scope.row)" :size="size"
+            >下载</el-button
+          >
+        </template>
+      </ux-table-column>
+    </el-super-ux-table>
+  </el-card>
+</template>
+
+<style scoped lang="scss">
+.el-card {
+  width: calc(100% - 32px);
+  height: calc(100vh - 32px);
+  margin: 16px;
+  padding: 16px;
+  border-radius: 8px;
+}
+
+.el-button-group + .el-button-group {
+  margin: 0 0 0 8px;
+}
+</style>

+ 1 - 1
src/views/purchase/purchase-order/add/column.js

@@ -428,7 +428,7 @@ const PurchaseTabColumns = [
           materialManufacturersCode: 'manufacturersMaterialCode',
           specification: 'specification',
           model: 'model',
-          isMedcine: 'isMedicine',
+          isMedcine: 'isMedicineYN',
           manufacturer: 'manufacturerId',
           manufacturerName: 'manufacturerIdName',
           unit: 'unitId',