浏览代码

手术库

zdl 1 年之前
父节点
当前提交
32b4fce188

+ 29 - 0
src/api/excel.js

@@ -38,3 +38,32 @@ export function illnessImport(data) {
     data: data
   })
 }
+
+// 手术库模板导出
+export function surgeryTemplateExport(data) {
+  return request_blob({
+    url: `/surgery/templateExport`,
+    method: 'post',
+    responseType: 'blob',
+    data: data
+  })
+}
+
+// 手术库导出
+export function surgeryExport(data) {
+  return request_blob({
+    url: `/surgery/surgeryExport`,
+    method: 'post',
+    responseType: 'blob',
+    data: data
+  })
+}
+
+// 手术库导入
+export function surgeryImport(data) {
+  return request_blob({
+    url: `/surgery/surgeryImport`,
+    method: 'post',
+    data: data
+  })
+}

+ 45 - 0
src/api/knowledge.js

@@ -44,3 +44,48 @@ export function illnessDelete(data) {
     data: data
   })
 }
+
+// 手术库列表
+export function surgeryList(data) {
+  return request({
+    url: '/surgery/surgeryList',
+    method: 'post',
+    data: data
+  })
+}
+
+// 手术库-新增
+export function surgeryAdd(data) {
+  return request({
+    url: '/surgery/surgeryAdd',
+    method: 'post',
+    data: data
+  })
+}
+
+// 手术库-详情
+export function surgeryInfo(data) {
+  return request({
+    url: '/surgery/surgeryInfo',
+    method: 'post',
+    data: data
+  })
+}
+
+// 手术库-编辑
+export function surgeryUpdate(data) {
+  return request({
+    url: '/surgery/surgerySave',
+    method: 'post',
+    data: data
+  })
+}
+
+// 手术库-删除
+export function surgeryDelete(data) {
+  return request({
+    url: '/surgery/surgeryDelete',
+    method: 'post',
+    data: data
+  })
+}

+ 2 - 1
src/router/index.js

@@ -73,7 +73,8 @@ export const constantRoutes = [
   {
     path: '/',
     component: Layout,
-    redirect: '/rule/basic/index'
+    // redirect: '/rule/basic/index'
+    redirect: '/knowledge/surgery/index'
   },
   {
     path: '/profile',

+ 1 - 11
src/views/knowledge/illness/components/SearchBox.vue

@@ -25,8 +25,6 @@
             <el-checkbox label="JJ">检验</el-checkbox>
             <el-checkbox label="BFZ">并发症</el-checkbox>
             <el-checkbox label="CKWX">参考文献</el-checkbox>
-            <el-checkbox label="SSMC">手术名称</el-checkbox>
-            <el-checkbox label="SSBM">手术编码</el-checkbox>
             <el-checkbox label="created_at">创建时间</el-checkbox>
             <el-checkbox label="updated_at">更新时间</el-checkbox>
           </el-checkbox-group>
@@ -81,12 +79,6 @@
           <el-form-item label="">
             <el-input v-model="data.CKWX" placeholder="参考文献" />
           </el-form-item>
-          <el-form-item label="">
-            <el-input v-model="data.SSMC" placeholder="手术名称" />
-          </el-form-item>
-          <el-form-item label="">
-            <el-input v-model="data.SSBM" placeholder="手术编码" />
-          </el-form-item>
           <el-form-item label="">
             <el-date-picker
               v-model="data.createStartTime"
@@ -156,9 +148,7 @@ export default {
           createStartTime: '',
           createEndTime: '',
           updateStartTime: '',
-          updateEndTime: '',
-          SSMC: '',
-          SSBM: ''
+          updateEndTime: ''
         }
       }
     },

+ 0 - 14
src/views/knowledge/illness/components/TableBox.vue

@@ -118,20 +118,6 @@
         width="200"
         show-overflow-tooltip
       />
-      <el-table-column
-        v-if="codes.includes('SSMC')"
-        prop="SSMC"
-        label="手术名称"
-        width="200"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        v-if="codes.includes('SSBM')"
-        prop="SSBM"
-        label="手术编码"
-        width="200"
-        show-overflow-tooltip
-      />
       <el-table-column
         v-if="codes.includes('created_at')"
         prop="created_at"

+ 7 - 21
src/views/knowledge/illness/index.vue

@@ -68,9 +68,7 @@ export default {
         createStartTime: '',
         createEndTime: '',
         updateStartTime: '',
-        updateEndTime: '',
-        SSMC: '',
-        SSBM: ''
+        updateEndTime: ''
       },
       tableData: [],
       tableShowCode: [
@@ -89,9 +87,7 @@ export default {
         'BFZ',
         'CKWX',
         'created_at',
-        'updated_at',
-        'SSMC',
-        'SSBM'
+        'updated_at'
       ],
       paginationData: {
         total: 0,
@@ -105,7 +101,7 @@ export default {
     }
   },
   created() {
-    const codes = localStorage.getItem('illness_talbe_codes').split(',')
+    const codes = localStorage.getItem('illness_talbe_codes') ? localStorage.getItem('illness_talbe_codes').split(',') : []
     if (codes.length) {
       this.$set(this, 'tableShowCode', codes)
     }
@@ -137,9 +133,7 @@ export default {
         createStartTime,
         createEndTime,
         updateStartTime,
-        updateEndTime,
-        SSMC,
-        SSBM
+        updateEndTime
       } = this.searchData
       const { page, page_size } = this.paginationData
       const params = {
@@ -157,8 +151,6 @@ export default {
         JJ,
         BFZ,
         CKWX,
-        SSMC,
-        SSBM,
         page,
         page_size
       }
@@ -219,9 +211,7 @@ export default {
         createStartTime: '',
         createEndTime: '',
         updateStartTime: '',
-        updateEndTime: '',
-        SSMC: '',
-        SSBM: ''
+        updateEndTime: ''
       }
     },
     // 导出
@@ -244,9 +234,7 @@ export default {
         createStartTime,
         createEndTime,
         updateStartTime,
-        updateEndTime,
-        SSMC,
-        SSBM
+        updateEndTime
       } = this.searchData
       const params = {
         FLAG,
@@ -262,9 +250,7 @@ export default {
         JC,
         JJ,
         BFZ,
-        CKWX,
-        SSMC,
-        SSBM
+        CKWX
       }
       params.createStartTime = createStartTime
         ? dateFormat(createStartTime, 'YYYYMMDD')

+ 162 - 0
src/views/knowledge/surgery/components/CreateDaialog.vue

@@ -0,0 +1,162 @@
+<template>
+  <div>
+    <el-dialog
+      :title="titleStr"
+      :visible.sync="data.bSwitch"
+      width="600px"
+      top="5vh"
+    >
+      <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="120px" class="demo-ruleForm">
+        <el-form-item label="科室名称">
+          <el-select v-model="ruleForm.KSMC" filterable clearable placeholder="请选择" style="width: 100%;">
+            <el-option v-for="item of deportments" :key="item.id" :label="item.name" :value="item.name" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="手术名称" prop="SSMC">
+          <el-input v-model="ruleForm.SSMC" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="手术别名" prop="BM">
+          <el-input v-model="ruleForm.BM" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="手术编码">
+          <el-input v-model="ruleForm.SSBM" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="并发症">
+          <el-input v-model="ruleForm.BFZ" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="检查">
+          <el-input v-model="ruleForm.JC" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="检验">
+          <el-input v-model="ruleForm.JJ" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="参考文献">
+          <el-input v-model="ruleForm.CKWX" placeholder="请输入" />
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="data.bSwitch = false">取 消</el-button>
+        <el-button type="primary" @click="onSubmit">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getDeportmentList } from '@/api/admin'
+import { surgeryAdd, surgeryInfo, surgeryUpdate } from '@/api/knowledge'
+export default {
+  props: {
+    data: {
+      type: Object,
+      default() {
+        return {
+          bSwitch: false,
+          id: ''
+        }
+      }
+    }
+  },
+  data() {
+    return {
+      ruleForm: {
+        KSMC: '',
+        SSMC: '',
+        BM: '',
+        SSBM: '',
+        BFZ: '',
+        JC: '',
+        JJ: '',
+        CKWX: ''
+      },
+      rules: {
+        SSMC: [
+          { required: true, message: '请输入', trigger: 'blur' }
+        ],
+        BM: [
+          { required: true, message: '请输入', trigger: 'blur' }
+        ]
+      },
+      deportments: []
+    }
+  },
+  computed: {
+    titleStr() {
+      return this.data.id ? '编辑' : '新增'
+    }
+  },
+  created() {
+    if (this.data.id) {
+      this.getInfo()
+    }
+    this.getDeportmentList()
+  },
+  methods: {
+    // 详情
+    getInfo() {
+      surgeryInfo({ id: this.data.id }).then(res => {
+        const { p } = res
+        this.ruleForm = p.data
+      }).catch(error => {
+        console.log(error)
+      })
+    },
+    // 部门
+    getDeportmentList() {
+      getDeportmentList().then(res => {
+        const { p } = res
+        if (Object.keys(p.list).length) {
+          for (const key in p.list) {
+            this.deportments.push({
+              id: key,
+              name: p.list[key]
+            })
+          }
+        }
+      }).catch(error => {
+        console.log(error)
+      })
+    },
+    // 提交
+    onSubmit() {
+      this.$refs['ruleForm'].validate((valid) => {
+        if (valid) {
+          if (this.data.id) {
+            this.editSubmit()
+          } else {
+            this.createSubmit()
+          }
+        } else {
+          return false
+        }
+      })
+    },
+    createSubmit() {
+      surgeryAdd(this.ruleForm).then(res => {
+        const { m } = res
+        this.$message.success(m || '成功')
+        this.data.bSwitch = false
+        this.$emit('refresh')
+      }).catch(error => {
+        console.log(error)
+      })
+    },
+    editSubmit() {
+      surgeryUpdate(this.ruleForm).then(res => {
+        const { m } = res
+        this.$message.success(m || '成功')
+        this.data.bSwitch = false
+        this.$emit('refresh')
+      }).catch(error => {
+        console.log(error)
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.demo-ruleForm {
+  width: 85%;
+}
+</style>

+ 229 - 0
src/views/knowledge/surgery/components/SearchBox.vue

@@ -0,0 +1,229 @@
+<template>
+  <div class="app-container">
+    <div class="btn-box">
+      <el-button type="primary" icon="el-icon-s-data" style="float: left;" @click="show = !show">筛选</el-button>
+      <div style="float: right;">
+        <el-button type="primary" icon="el-icon-plus" style="margin-right: 10px;" @click="$emit('create')">新增</el-button>
+        <el-popover
+          placement="bottom-end"
+          title=""
+          trigger="click"
+          popper-class="table_code_popper"
+        >
+          <el-checkbox-group v-model="showCodes" @change="handleChange">
+            <el-checkbox label="FLAG">序号</el-checkbox>
+            <el-checkbox label="KSMC">科室</el-checkbox>
+            <el-checkbox label="SSMC">手术名称</el-checkbox>
+            <el-checkbox label="BM">手术别名</el-checkbox>
+            <el-checkbox label="SSBM">手术编码</el-checkbox>
+            <el-checkbox label="BFZ">并发症</el-checkbox>
+            <el-checkbox label="JC">检查</el-checkbox>
+            <el-checkbox label="JJ">检验</el-checkbox>
+            <el-checkbox label="CKWX">参考文献</el-checkbox>
+            <el-checkbox label="created_at">创建时间</el-checkbox>
+            <el-checkbox label="updated_at">更新时间</el-checkbox>
+          </el-checkbox-group>
+          <el-button slot="reference" icon="el-icon-setting">设置</el-button>
+        </el-popover>
+      </div>
+    </div>
+    <el-collapse-transition>
+      <div v-if="show" style="margin-bottom: 16px;">
+        <el-form :inline="true" :model="data" class="demo-form-inline">
+          <el-form-item label="">
+            <el-input v-model="data.FLAG" placeholder="序号" />
+          </el-form-item>
+          <el-form-item label="">
+            <el-select v-model="data.KSMC" filterable clearable placeholder="科室">
+              <el-option v-for="item of deportments" :key="item.id" :label="item.name" :value="item.name" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="">
+            <el-input v-model="data.SSMC" placeholder="手术名称" />
+          </el-form-item>
+          <el-form-item label="">
+            <el-input v-model="data.BM" placeholder="手术别名" />
+          </el-form-item>
+          <el-form-item label="">
+            <el-input v-model="data.SSBM" placeholder="手术编码" />
+          </el-form-item>
+          <el-form-item label="">
+            <el-input v-model="data.BFZ" placeholder="并发症" />
+          </el-form-item>
+          <el-form-item label="">
+            <el-input v-model="data.JC" placeholder="检查" />
+          </el-form-item>
+          <el-form-item label="">
+            <el-input v-model="data.JJ" placeholder="检验" />
+          </el-form-item>
+          <el-form-item label="">
+            <el-input v-model="data.CKWX" placeholder="参考文献" />
+          </el-form-item>
+          <el-form-item label="">
+            <el-date-picker
+              v-model="data.createStartTime"
+              type="date"
+              :picker-options="pickerOptions1"
+              placeholder="创建时间-开始"
+            />
+          </el-form-item>
+          <el-form-item label="">
+            <el-date-picker
+              v-model="data.createEndTime"
+              type="date"
+              :picker-options="pickerOptions2"
+              placeholder="创建时间-结束"
+            />
+          </el-form-item>
+          <el-form-item label="">
+            <el-date-picker
+              v-model="data.updateStartTime"
+              type="date"
+              :picker-options="pickerOptions3"
+              placeholder="更新时间-开始"
+            />
+          </el-form-item>
+          <el-form-item label="">
+            <el-date-picker
+              v-model="data.updateEndTime"
+              type="date"
+              :picker-options="pickerOptions4"
+              placeholder="更新时间-结束"
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" @click="onSubmit">搜索</el-button>
+          </el-form-item>
+          <el-form-item>
+            <el-button icon="el-icon-refresh" @click="onReset">重置</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+    </el-collapse-transition>
+  </div>
+</template>
+
+<script>
+import { getDeportmentList } from '@/api/admin'
+export default {
+  props: {
+    data: {
+      type: Object,
+      default() {
+        return {
+          FLAG: '',
+          KSMC: '',
+          BM: '',
+          SSBM: '',
+          SSMC: '',
+          JC: '',
+          JJ: '',
+          BFZ: '',
+          CKWX: '',
+          createStartTime: '',
+          createEndTime: '',
+          updateStartTime: '',
+          updateEndTime: ''
+        }
+      }
+    },
+    codes: {
+      type: Array,
+      default() {
+        return []
+      }
+    }
+  },
+  data() {
+    return {
+      pickerOptions1: {
+        disabledDate: (time) => {
+          if (this.data.createEndTime) {
+            return time.getTime() > new Date(this.data.createEndTime).getTime()
+          } else {
+            return time.getTime() > Date.now()
+          }
+        }
+      },
+      pickerOptions2: {
+        disabledDate: (time) => {
+          if (this.data.createStartTime) {
+            return time.getTime() < new Date(this.data.createStartTime).getTime()
+          } else {
+            return time.getTime() > Date.now()
+          }
+        }
+      },
+      pickerOptions3: {
+        disabledDate: (time) => {
+          if (this.data.updateEndTime) {
+            return time.getTime() > new Date(this.data.updateEndTime).getTime()
+          } else {
+            return time.getTime() > Date.now()
+          }
+        }
+      },
+      pickerOptions4: {
+        disabledDate: (time) => {
+          if (this.data.updateStartTime) {
+            return time.getTime() < new Date(this.data.updateStartTime).getTime()
+          } else {
+            return time.getTime() > Date.now()
+          }
+        }
+      },
+      deportments: [],
+      show: false,
+      showCodes: []
+    }
+  },
+  created() {
+    this.getDeportmentList()
+    this.showCodes = JSON.parse(JSON.stringify(this.codes))
+  },
+  methods: {
+    // 展示字段发生变化
+    handleChange(val) {
+      this.$emit('codesChange', val)
+    },
+    // 重置
+    onReset() {
+      this.$emit('reset')
+    },
+    // 提交
+    onSubmit() {
+      this.$emit('search')
+    },
+    getDeportmentList() {
+      getDeportmentList().then(res => {
+        const { p } = res
+        if (Object.keys(p.list).length) {
+          for (const key in p.list) {
+            this.deportments.push({
+              id: key,
+              name: p.list[key]
+            })
+          }
+        }
+      }).catch(error => {
+        console.log(error)
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.btn-box {
+  overflow: hidden;
+  margin-bottom: 15px;
+}
+</style>
+<style lang="scss">
+.table_code_popper {
+  .el-checkbox {
+    display: block;
+    line-height: 26px;
+  }
+}
+</style>

+ 209 - 0
src/views/knowledge/surgery/components/TableBox.vue

@@ -0,0 +1,209 @@
+<template>
+  <div class="app-container">
+    <div class="btn-box">
+      <el-upload
+        class="upload-btn"
+        :multiple="false"
+        :limit="1"
+        :show-file-list="false"
+        action="#"
+        :before-upload="beforeUpload"
+      >
+        <el-button type="primary" size="small" icon="el-icon-upload">导入</el-button>
+      </el-upload>
+      <el-button type="primary" icon="el-icon-download" @click="onExport">导出</el-button>
+      <el-button type="primary" plain icon="el-icon-download" @click="onTemplateExport">模板导出</el-button>
+    </div>
+    <el-table
+      v-loading="loading"
+      :data="data"
+      style="width: 100%"
+    >
+      <el-table-column
+        v-if="codes.includes('FLAG')"
+        prop="FLAG"
+        label="序号"
+        width="200"
+        show-overflow-tooltip
+        fixed="left"
+      />
+      <el-table-column
+        v-if="codes.includes('KSMC')"
+        prop="KSMC"
+        label="科室"
+        width="200"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        v-if="codes.includes('SSMC')"
+        prop="SSMC"
+        label="手术名称"
+        width="200"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        v-if="codes.includes('BM')"
+        prop="BM"
+        label="手术别名"
+        width="200"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        v-if="codes.includes('SSBM')"
+        prop="SSBM"
+        label="手术编码"
+        width="200"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        v-if="codes.includes('BFZ')"
+        prop="BFZ"
+        label="并发症"
+        width="200"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        v-if="codes.includes('JC')"
+        prop="JC"
+        label="检查"
+        width="200"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        v-if="codes.includes('JJ')"
+        prop="JJ"
+        label="检验"
+        width="200"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        v-if="codes.includes('CKWX')"
+        prop="CKWX"
+        label="参考文献"
+        width="200"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        v-if="codes.includes('created_at')"
+        prop="created_at"
+        label="创建时间"
+        width="200"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        v-if="codes.includes('updated_at')"
+        prop="updated_at"
+        label="更新时间"
+        width="200"
+      />
+      <el-table-column
+        prop=""
+        label="操作"
+        width="200"
+        fixed="right"
+      >
+        <template slot-scope="scope">
+          <el-button type="text" @click="onEdit(scope.row)">编辑</el-button>
+          <el-button type="text" @click="onDelConfirm(scope.row)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+import { surgeryDelete } from '@/api/knowledge'
+import { surgeryTemplateExport, surgeryExport } from '@/api/excel'
+
+export default {
+  props: {
+    data: {
+      type: Array,
+      default() {
+        return []
+      }
+    },
+    loading: {
+      type: Boolean,
+      default() {
+        return false
+      }
+    },
+    codes: {
+      type: Array,
+      default() {
+        return []
+      }
+    }
+  },
+  computed: {
+    actionUrl() {
+      return `${process.env.VUE_APP_BASE_API}/disease/diseaseImport`
+    }
+  },
+  methods: {
+    beforeUpload(file) {
+      console.log(file, '导入')
+      surgeryExport({ file }).then(res => {
+        if (res.data.c === 0) {
+          this.$emit('refresh')
+          this.$message.success('成功')
+        }
+      })
+    },
+    // 删除
+    onDelConfirm(row) {
+      this.$confirm(`是否删除【${row.SSMC}】信息?`, '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        surgeryDelete({ id: row.id }).then(res => {
+          const { m } = res
+          this.$message.success(m || '成功')
+          this.$emit('refresh')
+        })
+      })
+    },
+    // 编辑
+    onEdit(row) {
+      this.$emit('edit', row)
+    },
+    // 模板导出
+    onTemplateExport() {
+      surgeryTemplateExport().then(res => {
+        const content = res.data // 后台返回二进制数据
+        const blob = new Blob([content])
+        const fileName = `手术库模板.xlsx`
+        if ('download' in document.createElement('a')) { // 非IE下载
+          const elink = document.createElement('a')
+          elink.download = fileName
+          elink.style.display = 'none'
+          elink.href = URL.createObjectURL(blob)
+          document.body.appendChild(elink)
+          elink.click()
+          URL.revokeObjectURL(elink.href) // 释放URL 对象
+          document.body.removeChild(elink)
+        } else { // IE10+下载
+          navigator.msSaveBlob(blob, fileName)
+        }
+      })
+    },
+    // 模板导出
+    onExport() {
+      this.$emit('export')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.btn-box {
+  text-align: right;
+  margin-bottom: 15px;
+}
+.upload-btn {
+  display: inline-block;
+  margin-right: 10px;
+}
+</style>

+ 258 - 3
src/views/knowledge/surgery/index.vue

@@ -1,15 +1,270 @@
 <template>
   <div>
-    22222
+    <SearchBoxVue
+      :data="searchData"
+      :codes="tableShowCode"
+      @search="handleSearch"
+      @reset="handleReset"
+      @codesChange="handleCodesChange"
+      @create="handleCreate"
+    />
+    <TableBoxVue
+      :loading="loading"
+      :data="tableData"
+      :codes="tableShowCode"
+      style="margin-top: -40px"
+      @export="handleExport"
+      @edit="handleEdit"
+      @refresh="handleRefresh"
+    />
+    <pagination
+      :auto-scroll="false"
+      :total="paginationData.total"
+      :page="paginationData.page"
+      :limit="paginationData.page_size"
+      @pagination="handlePagination"
+    />
+    <!-- 新建、编辑 -->
+    <CreateDaialogVue
+      v-if="createData.bSwitch"
+      :data="createData"
+      @refresh="handleRefresh"
+    />
   </div>
 </template>
 
 <script>
-export default {
+import SearchBoxVue from './components/SearchBox.vue'
+import TableBoxVue from './components/TableBox.vue'
+import { surgeryImport } from '@/api/excel'
+import { surgeryList } from '@/api/knowledge'
+import CreateDaialogVue from './components/CreateDaialog.vue'
+import { dateFormat } from '@/filters/index'
 
+export default {
+  components: {
+    SearchBoxVue,
+    TableBoxVue,
+    CreateDaialogVue
+  },
+  data() {
+    return {
+      loading: false,
+      searchData: {
+        FLAG: '',
+        KSMC: '',
+        BM: '',
+        SSBM: '',
+        SSMC: '',
+        JC: '',
+        JJ: '',
+        BFZ: '',
+        CKWX: '',
+        createStartTime: '',
+        createEndTime: '',
+        updateStartTime: '',
+        updateEndTime: ''
+      },
+      tableData: [],
+      tableShowCode: [
+        'FLAG',
+        'KSMC',
+        'SSMC',
+        'BM',
+        'SSBM',
+        'BFZ',
+        'JC',
+        'JJ',
+        'CKWX',
+        'created_at',
+        'updated_at'
+      ],
+      paginationData: {
+        total: 0,
+        page: 1,
+        page_size: 10
+      },
+      createData: {
+        bSwitch: false,
+        id: ''
+      }
+    }
+  },
+  created() {
+    const codes = localStorage.getItem('surgery_talbe_codes') ? localStorage.getItem('surgery_talbe_codes').split(',') : []
+    if (codes.length) {
+      this.$set(this, 'tableShowCode', codes)
+    }
+    this.getList()
+  },
+  methods: {
+    // 展示字段变化
+    handleCodesChange(val) {
+      localStorage.setItem('surgery_talbe_codes', val)
+      this.$set(this, 'tableShowCode', val)
+    },
+    // 获取列表数据
+    getList() {
+      const {
+        FLAG,
+        KSMC,
+        BM,
+        SSBM,
+        SSMC,
+        JC,
+        JJ,
+        BFZ,
+        CKWX,
+        createStartTime,
+        createEndTime,
+        updateStartTime,
+        updateEndTime
+      } = this.searchData
+      const { page, page_size } = this.paginationData
+      const params = {
+        FLAG,
+        KSMC,
+        BM,
+        SSBM,
+        SSMC,
+        JC,
+        JJ,
+        BFZ,
+        CKWX,
+        page,
+        page_size
+      }
+      params.createStartTime = createStartTime
+        ? dateFormat(createStartTime, 'YYYYMMDD')
+        : ''
+      params.createEndTime = createEndTime
+        ? dateFormat(createEndTime, 'YYYYMMDD')
+        : ''
+      params.updateStartTime = updateStartTime
+        ? dateFormat(updateStartTime, 'YYYYMMDD')
+        : ''
+      params.updateEndTime = updateEndTime
+        ? dateFormat(updateEndTime, 'YYYYMMDD')
+        : ''
+      this.loading = true
+      surgeryList(params)
+        .then((res) => {
+          const { p } = res
+          this.paginationData.total = p.count
+          this.tableData = p.list
+        })
+        .catch((error) => {
+          console.log(error)
+        })
+        .finally(() => {
+          this.loading = false
+        })
+    },
+    // 分页
+    handlePagination(param) {
+      this.paginationData.page = param.page
+      this.paginationData.limit = param.limit
+      this.getList()
+    },
+    // 搜索
+    handleSearch() {
+      this.paginationData.page = 1
+      this.getList()
+    },
+    // 重置
+    handleReset() {
+      this.searchData = {
+        FLAG: '',
+        KSMC: '',
+        BM: '',
+        SSBM: '',
+        SSMC: '',
+        JC: '',
+        JJ: '',
+        BFZ: '',
+        CKWX: '',
+        createStartTime: '',
+        createEndTime: '',
+        updateStartTime: '',
+        updateEndTime: ''
+      }
+    },
+    // 导出
+    handleExport() {
+      const {
+        FLAG,
+        KSMC,
+        BM,
+        SSBM,
+        SSMC,
+        JC,
+        JJ,
+        BFZ,
+        CKWX,
+        createStartTime,
+        createEndTime,
+        updateStartTime,
+        updateEndTime
+      } = this.searchData
+      const params = {
+        FLAG,
+        KSMC,
+        BM,
+        SSBM,
+        SSMC,
+        JC,
+        JJ,
+        BFZ,
+        CKWX
+      }
+      params.createStartTime = createStartTime
+        ? dateFormat(createStartTime, 'YYYYMMDD')
+        : ''
+      params.createEndTime = createEndTime
+        ? dateFormat(createEndTime, 'YYYYMMDD')
+        : ''
+      params.updateStartTime = updateStartTime
+        ? dateFormat(updateStartTime, 'YYYYMMDD')
+        : ''
+      params.updateEndTime = updateEndTime
+        ? dateFormat(updateEndTime, 'YYYYMMDD')
+        : ''
+      surgeryImport(params).then((res) => {
+        const content = res.data // 后台返回二进制数据
+        const blob = new Blob([content])
+        const fileName = `手术库.csv`
+        if ('download' in document.createElement('a')) {
+          // 非IE下载
+          const elink = document.createElement('a')
+          elink.download = fileName
+          elink.style.display = 'none'
+          elink.href = URL.createObjectURL(blob)
+          document.body.appendChild(elink)
+          elink.click()
+          URL.revokeObjectURL(elink.href) // 释放URL 对象
+          document.body.removeChild(elink)
+        } else {
+          // IE10+下载
+          navigator.msSaveBlob(blob, fileName)
+        }
+      })
+    },
+    // 新增
+    handleCreate() {
+      this.createData.id = ''
+      this.createData.bSwitch = true
+    },
+    handleEdit(row) {
+      this.createData.id = row.id
+      this.createData.bSwitch = true
+    },
+    // 刷新
+    handleRefresh() {
+      this.getList()
+    }
+  }
 }
 </script>
 
 <style lang="scss" scoped>
-
 </style>