Procházet zdrojové kódy

Merge branch 'master' of http://172.16.100.139/new-business/drp-web

002390 před 2 roky
rodič
revize
fd0956bb43
29 změnil soubory, kde provedl 1990 přidání a 442 odebrání
  1. 8 0
      src/api/business/spd/bo/basic.js
  2. 18 0
      src/api/business/spd/bo/behaviorA.js
  3. 44 0
      src/api/business/spd/bo/education.js
  4. 44 0
      src/api/business/spd/bo/relationship.js
  5. 9 1
      src/api/requisition/basic.js
  6. binární
      src/assets/images/homePage.png
  7. 6 1
      src/components/PopDialog/dose.vue
  8. 6 1
      src/components/PopDialog/drug.vue
  9. 6 1
      src/components/PopDialog/fourClass.vue
  10. 236 0
      src/components/PopDialog/midPack.vue
  11. 5 0
      src/components/PopDialog/organization.vue
  12. 159 139
      src/views/business/spd/bo/basic/details.vue
  13. 21 8
      src/views/business/spd/bo/basic/index.vue
  14. 281 20
      src/views/business/spd/bo/behavior/behaviorList.vue
  15. 22 8
      src/views/business/spd/bo/contact/contactList.vue
  16. 301 0
      src/views/business/spd/bo/education/educationList.vue
  17. 38 7
      src/views/business/spd/bo/pojpsn/pojpsnList.vue
  18. 305 0
      src/views/business/spd/bo/relationship/relationshipList.vue
  19. 0 5
      src/views/business/spd/bo/task/taskList.vue
  20. 37 64
      src/views/login.vue
  21. 44 9
      src/views/material/changeApply/add.vue
  22. 6 2
      src/views/material/classify/index.vue
  23. 208 36
      src/views/material/requisition/add.vue
  24. 1 1
      src/views/material/specialAttr/index.vue
  25. 27 22
      src/views/system/table-template/add-dialog.vue
  26. 17 1
      src/views/system/table-template/auth-dialog.vue
  27. 41 24
      src/views/system/table-template/edit-dialog.vue
  28. 6 1
      src/views/system/table-template/index.vue
  29. 94 91
      src/views/system/table-template/search-table.vue

+ 8 - 0
src/api/business/spd/bo/basic.js

@@ -73,4 +73,12 @@ export function nextFlow(boId,boStage) {
     url: '/mk/bo/basic/flow?boId=' + boId + '&boStage=' + boStage,
     method: 'put'
   })
+}
+
+//提交
+export function submit(boId) {
+  return request({
+    url: '/mk/bo/basic/submit/' + boId,
+    method: 'get'
+  })
 }

+ 18 - 0
src/api/business/spd/bo/behaviorA.js

@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 新增动作附件
+export function addBehaviorA(data) {
+  return request({
+    url: '/mk/bo/behaviorA',
+    method: 'post',
+    data: data
+  })
+}
+
+// 删除岗位
+export function delBehaviorA(behaviorAid) {
+  return request({
+    url: '/mk/bo/behaviorA/' + behaviorAid,
+    method: 'delete'
+  })
+}

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

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询联系人学历信息列表
+export function listEducation(query) {
+  return request({
+    url: '/mk/bo/education/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询联系人学历信息详细
+export function getEducation(id) {
+  return request({
+    url: '/mk/bo/education/' + id,
+    method: 'get'
+  })
+}
+
+// 新增联系人学历信息
+export function addEducation(data) {
+  return request({
+    url: '/mk/bo/education',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改联系人学历信息
+export function updateEducation(data) {
+  return request({
+    url: '/mk/bo/education',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除联系人学历信息
+export function delEducation(id) {
+  return request({
+    url: '/mk/bo/education/' + id,
+    method: 'delete'
+  })
+}

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

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询联系人社会关系列表
+export function listRelationship(query) {
+  return request({
+    url: '/mk/bo/relationship/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询联系人社会关系详细
+export function getRelationship(id) {
+  return request({
+    url: '/mk/bo/relationship/' + id,
+    method: 'get'
+  })
+}
+
+// 新增联系人社会关系
+export function addRelationship(data) {
+  return request({
+    url: '/mk/bo/relationship',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改联系人社会关系
+export function updateRelationship(data) {
+  return request({
+    url: '/mk/bo/relationship',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除联系人社会关系
+export function delRelationship(id) {
+  return request({
+    url: '/mk/bo/relationship/' + id,
+    method: 'delete'
+  })
+}

+ 9 - 1
src/api/requisition/basic.js

@@ -96,11 +96,19 @@ export function getOrgs(data) {
     params: data
   })
 }
-// 参照-药品类别(子表)
+// 参照-药品类别(子表)-树形
 export function getDrug(data) {
   return request({
     url: `/system/archival/queryMedcineItemDrug`,
     method: 'post',
     data: data
   })
+}
+// 参照-中包装单位
+export function getMidPack(data) {
+  return request({
+    url: `/system/archival/queryMediumPackage?pageSize=${data.pageSize}&pageNum=${data.pageNo}`,
+    method: 'post',
+    data: data
+  })
 }

binární
src/assets/images/homePage.png


+ 6 - 1
src/components/PopDialog/dose.vue

@@ -74,6 +74,11 @@ export default {
     };
   },
   props: {},
+  watch: {
+      filterText(val) {
+        this.$refs.tree.filter(val);
+      }
+  },
   methods: {
     init() {
       this.visible = true;
@@ -105,7 +110,7 @@ export default {
       console.log('value', value)
       console.log('data', data)
         if (!value) return true;
-        return data.label.indexOf(value) !== -1;
+        return data.name.indexOf(value) !== -1;
     },
     doSubmit() {
       if(this.isLast == false) {

+ 6 - 1
src/components/PopDialog/drug.vue

@@ -74,6 +74,11 @@ export default {
     };
   },
   props: {},
+  watch: {
+      filterText(val) {
+        this.$refs.tree.filter(val);
+      }
+  },
   methods: {
     init() {
       this.visible = true;
@@ -100,7 +105,7 @@ export default {
       console.log('value', value)
       console.log('data', data)
         if (!value) return true;
-        return data.label.indexOf(value) !== -1;
+        return data.name.indexOf(value) !== -1;
     },
     doSubmit() {
       console.log('子组件选择的数据',this.choosePoint)

+ 6 - 1
src/components/PopDialog/fourClass.vue

@@ -74,6 +74,11 @@ export default {
     };
   },
   props: {},
+  watch: {
+      filterText(val) {
+        this.$refs.tree.filter(val);
+      }
+  },
   methods: {
     init() {
       this.visible = true;
@@ -105,7 +110,7 @@ export default {
       console.log('value', value)
       console.log('data', data)
         if (!value) return true;
-        return data.label.indexOf(value) !== -1;
+        return data.materialType.indexOf(value) !== -1;
     },
     doSubmit() {
       if(this.isLast == false) {

+ 236 - 0
src/components/PopDialog/midPack.vue

@@ -0,0 +1,236 @@
+<template>
+  <div>
+    <el-dialog
+      title="中包装单位选择"
+      width="1000px"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+      v-dialogDrag
+      class="userDialog"
+      :visible.sync="visible"
+    >
+      <el-container style="height: 500px">
+        <el-container>
+          <el-header style="text-align: left; font-size: 12px; height: 30px">
+            <el-form
+              size="small"
+              :inline="true"
+              ref="searchForm"
+              :model="searchForm"
+              @keyup.enter.native="refreshList()"
+              @submit.native.prevent
+            >
+            <el-form-item prop="param" label="名称/编号" >
+                <el-input
+                  size="small"
+                  v-model="searchForm.param"
+                  placeholder="输入名称/编号查询"
+                  clearable
+                ></el-input>
+              </el-form-item>
+              <el-form-item>
+                <el-button
+                  type="primary"
+                  @click="refreshList()"
+                  size="small"
+                  icon="el-icon-search"
+                  >查询</el-button
+                >
+                <el-button
+                  @click="resetSearch()"
+                  size="small"
+                  icon="el-icon-refresh-right"
+                >重置</el-button>
+              </el-form-item>
+            </el-form>
+          </el-header>
+          <el-main>
+            <el-table
+              :data="dataList"
+              v-loading="loading"
+              size="small"
+              border
+              ref="contractTable"
+              @select="handleSelectionChange"
+              @row-click="rowSelect"
+              height="calc(100% - 40px)"
+              style="width: 100%"
+            >
+              <el-table-column
+                type="selection"
+                header-align="center"
+                align="center"
+                width="50"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="code"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="90"
+                label="code"
+              >
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="90"
+                label="名称"
+              >
+              </el-table-column>
+            </el-table>
+            <el-pagination
+              @size-change="sizeChangeHandle"
+              @current-change="currentChangeHandle"
+              :current-page="searchForm.pageNo"
+              :page-sizes="[5, 10, 15, 20]"
+              :page-size="searchForm.pageSize"
+              :total="total"
+              layout="total, sizes, prev, pager, next, jumper"
+            >
+            </el-pagination>
+          </el-main>
+        </el-container>
+      </el-container>
+      <span slot="footer" class="dialog-footer">
+        <el-button
+          size="small"
+          @click="visible = false"
+          icon="el-icon-circle-close"
+          >关闭</el-button
+        >
+        <el-button
+          size="small"
+          type="primary"
+          icon="el-icon-circle-check"
+          @click="doSubmit()"
+          >确定</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getMidPack } from '@/api/requisition/basic'
+export default {
+  data() {
+    return {
+      searchForm: {
+        param: '',
+        pageNo: 1,
+        pageSize: 10,
+      },
+      dataListAllSelections: [], // 所有选中的数据包含跨页数据
+      idKey: "id", // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+      dataList: [],
+      total: 0,
+      orders: [],
+      loading: false,
+      visible: false,
+    };
+  },
+  props: {
+    selectData: {
+      type: Array,
+      default: () => {
+        return [];
+      },
+    },
+    // 是否启用单选
+    single: {
+      type: Boolean,
+      default: false
+    }
+  },
+  methods: {
+    init() {
+      this.visible = true;
+      this.$nextTick(() => {
+        this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData));
+        this.resetSearch();
+      });
+    },
+    // 获取数据列表
+    refreshList() {
+      this.loading = true;
+      getMidPack(this.searchForm).then(({ data }) => {
+        console.log('data',data)
+        this.dataList = data.tableBody;
+        this.total = data.total
+        this.loading = false;
+        this.$nextTick(() => {
+          this.setSelectRow();
+        });
+      });
+    },
+    // 每页数
+    sizeChangeHandle(val) {
+      this.searchForm.pageSize = val;
+      this.refreshList();
+    },
+    // 当前页
+    currentChangeHandle(val) {
+      this.searchForm.pageNo = val;
+      this.refreshList();
+    },
+    // 排序
+    resetSearch() {
+      this.$refs['searchForm'].resetFields();
+      this.searchForm.pageNo = 1;
+      this.refreshList();
+    },
+    // 表格选中数据
+    rowSelect(row, column, event) {
+      this.$refs.contractTable.clearSelection();
+      this.$refs.contractTable.toggleRowSelection(row);
+      this.dataListAllSelections = this.single ? [row] : selection
+    },
+    // 选中数据
+    handleSelectionChange(selection, row) {
+      if (this.single && selection.length > 1) {
+        this.$refs.contractTable.clearSelection();
+        this.$refs.contractTable.toggleRowSelection(row);
+      }
+      this.dataListAllSelections = this.single ? [row] : selection
+    },
+    // 设置选中的方法
+    setSelectRow() {
+      this.$refs.contractTable.clearSelection();
+      if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+        return;
+      }
+      for (let i = 0; i < this.dataList.length; i++) {
+        if (this.dataListAllSelections.some(item => item[this.idKey] == this.dataList[i][this.idKey])) {
+          // 设置选中,记住table组件需要使用ref="table"
+          this.$refs.contractTable.toggleRowSelection(this.dataList[i], true);
+        }
+      }
+    },
+    doSubmit() {
+      this.visible = false;
+      console.log('选择的数据?',this.dataListAllSelections)
+      this.$emit("doSubmit", this.dataListAllSelections);
+    },
+  },
+};
+</script>
+<style lang="scss">
+.userDialog {
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination {
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 5 - 0
src/components/PopDialog/organization.vue

@@ -74,6 +74,11 @@ export default {
     };
   },
   props: {},
+  watch: {
+      filterText(val) {
+        this.$refs.tree.filter(val);
+      }
+  },
   methods: {
     init(val) {
       this.visible = true;

+ 159 - 139
src/views/business/spd/bo/basic/details.vue

@@ -11,7 +11,7 @@
           <el-input
             v-model="form.basic.boName"
             placeholder="商机名称"
-            size="medium" 
+            size="medium"
             :disabled = "true"
           />
         </el-col>
@@ -19,7 +19,7 @@
           <el-select
             v-model="form.basic.boState"
             placeholder="商机状态"
-            size="medium" 
+            size="medium"
             :disabled = "true"
           >
             <el-option
@@ -34,7 +34,7 @@
           <el-select
             v-model="form.basic.winningState"
             placeholder="赢丢单状态"
-            size="medium" 
+            size="medium"
             :disabled = "true"
           >
             <el-option
@@ -67,86 +67,51 @@
       <el-tab-pane label="基本信息" name="first">
         项目流程
         <el-steps :active="form.basic.boStage" finish-status="success">
-          <el-step title="审核" @click.native="viewingProcedure(0)"></el-step>
-          <el-step title="立项" @click.native="viewingProcedure(1)"></el-step>
-          <el-step title="考察" @click.native="viewingProcedure(2)"></el-step>
+          <el-step title="商机审核" @click.native="viewingProcedure(0)"></el-step>
+          <el-step title="项目立项" @click.native="viewingProcedure(1)"></el-step>
+          <el-step title="售前提案/邀请考察" @click.native="viewingProcedure(2)"></el-step>
           <el-step title="开院务会" @click.native="viewingProcedure(3)"></el-step>
           <el-step title="院内立项" @click.native="viewingProcedure(4)"></el-step>
-          <el-step title="调研" @click.native="viewingProcedure(5)"></el-step>
+          <el-step title="进场调研" @click.native="viewingProcedure(5)"></el-step>
           <el-step title="解决方案" @click.native="viewingProcedure(6)"></el-step>
-          <el-step title="签合同" @click.native="viewingProcedure(7)"></el-step>
+          <el-step title="投标与签合同" @click.native="viewingProcedure(7)"></el-step>
           <el-step title="进场实施" @click.native="viewingProcedure(8)"></el-step>
           <el-step title="落地方案" @click.native="viewingProcedure(9)"></el-step>
           <el-step title="实施交付" @click.native="viewingProcedure(10)"></el-step>
           <el-step title="上线仪式" @click.native="viewingProcedure(11)"></el-step>
         </el-steps>
         <!-- 流程按钮组 -->
-        <div style="text-align: right">
-          <el-button
+        <div style="text-align: center">
+          <!-- <el-button
             type="primary"
             style="margin-top: 12px"
-            v-hasPermi="['mk:bo:basic:identify']"
             @click="next"
-            v-if="form.basic.boStage == 0"
+            v-show="form.basic.boStage == 0"
           >
             审核
-          </el-button>
-          <!-- <el-button style="margin-top: 12px;" @click="before" v-if="form.basic.boStage > 1">上一步</el-button> -->
+          </el-button> -->
           <el-button
             style="margin-top: 12px"
-            v-hasPermi="['mk:bo:basic:next']"
             @click="next"
-            v-if="
+            v-show="
               !(
-                form.basic.boStage == 0 ||
+                form.basic.boStage < 1 ||
                 form.basic.boFlow.projectApproval == 0
               ) &&
               !isUpdate &&
               this.form.basic.boStage < 12
             "
-            >下一阶段</el-button
-          >
+            >变更为下一阶段</el-button>
+            <!-- <el-button style="margin-top: 12px;" @click="before" v-if="form.basic.boStage > 1">上一步</el-button> -->
         </div>
-        <!-- 编辑按钮组 -->
-        <el-row type="flex" class="row-bg" justify="end">
-          <el-col :span="24">
-            <dev>流程信息</dev>
-          </el-col>
-          <el-col :span="2" v-show="!isUpdate">
-            <div class="grid-content bg-purple">
-              <el-button
-                v-hasPermi="['mk:bo:basic:detail:edit']"
-                @click="modifyButton"
-                >修改</el-button
-              >
-            </div>
-          </el-col>
-          <el-col :span="2" v-show="isUpdate">
-            <div class="grid-content bg-purple-light">
-              <el-button
-                v-hasPermi="['mk:bo:basic:detail:edit']"
-                @click="cancelButton"
-                >取消</el-button
-              >
-            </div>
-          </el-col>
-          <el-col :span="2" v-show="isUpdate">
-            <div class="grid-content bg-purple">
-              <el-button
-                v-hasPermi="['mk:bo:basic:detail:edit']"
-                @click="saveButton"
-                >保存</el-button
-              >
-            </div>
-          </el-col>
-        </el-row>
         <!-- 次多页签 -->
+        <el-divider content-position="left" style="font-size: 30px">该阶段任务</el-divider>
         <el-tabs v-model="secondTabs" @tab-click="secondTabsSwitch">
           <!-- 阶段动作1 -->
           <el-tab-pane
             label="阶段动作"
             name="jd1"
-            style="height: 150px; overflow-y: scroll"
+            style="height: 200px; overflow-y: scroll"
             v-if="this.secondTabsName.jd1"
           >
             <el-form
@@ -179,7 +144,7 @@
                     <el-input
                       v-model="form.basic.hosDiscreetValue"
                       placeholder="医院耗材预估额"
-                      :disabled="true"
+                      readonly
                     />
                   </el-form-item>
                 </el-col>
@@ -190,7 +155,7 @@
           <el-tab-pane
             label="阶段动作"
             name="jd2"
-            style="height: 150px; overflow-y: scroll"
+            style="height: 200px; overflow-y: scroll"
             v-if="this.secondTabsName.jd2"
           >
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
@@ -214,7 +179,7 @@
                   <el-input
                     v-model="form.basic.boFlow.businessCouncilAccessoryName"
                     placeholder="请上传商机审议会"
-                    :disabled="true"
+                    readonly
                   />
                 </el-col>
                 <el-col
@@ -227,7 +192,6 @@
                     icon="el-icon-upload2"
                     size="mini"
                     @click="uploadAccessory(`business_council_accessory`)"
-                    v-hasPermi="['system:user:import']"
                     >上传</el-button
                   >
                 </el-col>
@@ -246,7 +210,6 @@
                         form.basic.boFlow.businessCouncilAccessoryName
                       )
                     "
-                    v-hasPermi="['system:user:export']"
                     >下载</el-button
                   >
                 </el-col>
@@ -259,7 +222,6 @@
                     type="text"
                     icon="el-icon-delete"
                     @click="deleteAccessory(`business_council_accessory`, 1)"
-                    v-hasPermi="['system:basic:remove']"
                     >删除</el-button
                   >
                 </el-col>
@@ -269,7 +231,7 @@
                   <el-input
                     v-model="form.basic.boFlow.projectProposalAccessoryName"
                     placeholder="请上传立项书"
-                    :disabled="true"
+                    readonly
                   />
                 </el-col>
                 <el-col
@@ -282,7 +244,6 @@
                     icon="el-icon-upload2"
                     size="mini"
                     @click="uploadAccessory(`project_proposal_accessory`)"
-                    v-hasPermi="['system:user:import']"
                     >上传</el-button
                   >
                 </el-col>
@@ -301,7 +262,6 @@
                         form.basic.boFlow.projectProposalAccessoryName
                       )
                     "
-                    v-hasPermi="['system:user:export']"
                     >下载</el-button
                   >
                 </el-col>
@@ -314,7 +274,6 @@
                     type="text"
                     icon="el-icon-delete"
                     @click="deleteAccessory(`project_proposal_accessory`, 1)"
-                    v-hasPermi="['system:basic:remove']"
                     >删除</el-button
                   >
                 </el-col>
@@ -336,21 +295,29 @@
           <el-tab-pane
             label="立项模板"
             name="lx"
-            style="height: 150px; overflow-y: scroll"
+            style="height: 200px; overflow-y: scroll"
             v-if="this.secondTabsName.lx"
           >
-            <el-row>
-              <el-button @click="pojproDownload">标准立项书</el-button>
-            </el-row>
-            <el-row>
-              <el-button @click="pojproDownload">商机审会决议书</el-button>
-            </el-row>
+            <el-table
+              :data="tableData"
+              style="width: 100%">
+              <el-table-column
+                prop="type"
+                label="文件类型"
+                width="180">
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                label="文件名称"
+                width="180">
+              </el-table-column>
+            </el-table>
           </el-tab-pane>
           <!-- 项目人员组成 -->
           <el-tab-pane
             label="项目人员组成"
             name="xmry"
-            style="height: 150px; overflow-y: scroll"
+            style="height: 200px; overflow-y: scroll"
             v-if="this.secondTabsName.xmry"
           >
             <PojpsnList
@@ -363,10 +330,10 @@
           <el-tab-pane
             label="方案模板"
             name="fa"
-            style="height: 150px; overflow-y: scroll"
+            style="height: 200px; overflow-y: scroll"
             v-if="this.secondTabsName.fa"
           >
-            <el-row>
+            <!-- <el-row>
               <el-button @click="pojproDownload">售前提案文件模板</el-button>
             </el-row>
             <el-row>
@@ -380,13 +347,27 @@
             </el-row>
             <el-row>
               <el-button @click="pojproDownload">其他文件</el-button>
-            </el-row>
+            </el-row> -->
+            <el-table
+              :data="tableData1"
+              style="width: 100%">
+              <el-table-column
+                prop="type"
+                label="文件类型"
+                width="180">
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                label="文件名称"
+                width="250">
+              </el-table-column>
+            </el-table>
           </el-tab-pane>
           <!-- 售前提案 -->
           <el-tab-pane
             label="售前提案"
             name="sq"
-            style="height: 150px; overflow-y: scroll"
+            style="height: 200px; overflow-y: scroll"
             v-if="this.secondTabsName.sq"
           >
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
@@ -395,7 +376,7 @@
                   <el-input
                     v-model="form.basic.boFlow.preSaleProposalAccessoryName"
                     placeholder="请上传售前提案文件"
-                    :disabled="true"
+                    readonly
                   />
                 </el-col>
                 <el-col
@@ -408,7 +389,6 @@
                     icon="el-icon-upload2"
                     size="mini"
                     @click="uploadAccessory(`pre_sale_proposal_accessory`)"
-                    v-hasPermi="['system:user:import']"
                     >上传</el-button
                   >
                 </el-col>
@@ -427,7 +407,6 @@
                         form.basic.boFlow.preSaleProposalAccessoryName
                       )
                     "
-                    v-hasPermi="['system:user:export']"
                     >下载</el-button
                   >
                 </el-col>
@@ -440,7 +419,6 @@
                     type="text"
                     icon="el-icon-delete"
                     @click="deleteAccessory(`pre_sale_proposal_accessory`, 1)"
-                    v-hasPermi="['system:basic:remove']"
                     >删除</el-button
                   >
                 </el-col>
@@ -451,7 +429,7 @@
           <el-tab-pane
             label="邀请考察"
             name="kc"
-            style="height: 150px; overflow-y: scroll"
+            style="height: 200px; overflow-y: scroll"
             v-if="this.secondTabsName.kc"
           >
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
@@ -484,7 +462,7 @@
                   <el-input
                     v-model="form.basic.boFlow.investigationReportAccessoryName"
                     placeholder="请上传考察报告"
-                    :disabled="true"
+                    readonly
                   />
                 </el-col>
                 <el-col
@@ -497,7 +475,6 @@
                     icon="el-icon-upload2"
                     size="mini"
                     @click="uploadAccessory(`investigation_report_accessory`)"
-                    v-hasPermi="['system:user:import']"
                     >上传</el-button
                   >
                 </el-col>
@@ -516,7 +493,6 @@
                         form.basic.boFlow.investigationReportAccessoryName
                       )
                     "
-                    v-hasPermi="['system:user:export']"
                     >下载</el-button
                   >
                 </el-col>
@@ -531,7 +507,6 @@
                     @click="
                       deleteAccessory(`investigation_report_accessory`, 1)
                     "
-                    v-hasPermi="['system:basic:remove']"
                     >删除</el-button
                   >
                 </el-col>
@@ -542,7 +517,7 @@
           <el-tab-pane
             label="开院务会"
             name="kh"
-            style="height: 150px; overflow-y: scroll"
+            style="height: 200px; overflow-y: scroll"
             v-if="this.secondTabsName.kh"
           >
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
@@ -565,7 +540,7 @@
           <el-tab-pane
             label="院内立项"
             name="yn"
-            style="height: 150px; overflow-y: scroll"
+            style="height: 200px; overflow-y: scroll"
             v-if="this.secondTabsName.yn"
           >
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
@@ -603,7 +578,7 @@
           <el-tab-pane
             label="进场调研"
             name="jc"
-            style="height: 150px; overflow-y: scroll"
+            style="height: 200px; overflow-y: scroll"
             v-if="this.secondTabsName.jc"
           >
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
@@ -625,7 +600,7 @@
                   <el-input
                     v-model="form.basic.boFlow.investigateReportAccessoryName"
                     placeholder="请上传调研报告"
-                    :disabled="true"
+                    readonly
                   />
                 </el-col>
                 <el-col
@@ -637,8 +612,7 @@
                     plain
                     icon="el-icon-upload2"
                     size="mini"
-                    @click="uploadAccessory(`investigation_report_accessory`)"
-                    v-hasPermi="['system:user:import']"
+                    @click="uploadAccessory(`investigate_report_accessory`)"
                     >上传</el-button
                   >
                 </el-col>
@@ -657,7 +631,6 @@
                         form.basic.boFlow.investigateReportAccessoryName
                       )
                     "
-                    v-hasPermi="['system:user:export']"
                     >下载</el-button
                   >
                 </el-col>
@@ -670,9 +643,8 @@
                     type="text"
                     icon="el-icon-delete"
                     @click="
-                      deleteAccessory(`investigation_report_accessory`, 1)
+                      deleteAccessory(`investigate_report_accessory`, 1)
                     "
-                    v-hasPermi="['system:basic:remove']"
                     >删除</el-button
                   >
                 </el-col>
@@ -683,7 +655,7 @@
           <el-tab-pane
             label="挂网投标"
             name="gw"
-            style="height: 150px; overflow-y: scroll"
+            style="height: 200px; overflow-y: scroll"
             v-if="this.secondTabsName.gw"
           >
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
@@ -705,7 +677,7 @@
                   <el-input
                     v-model="form.basic.boFlow.biddingDocumentsAccessoryName"
                     placeholder="请上传投标书"
-                    :disabled="true"
+                    readonly
                   />
                 </el-col>
                 <el-col
@@ -718,7 +690,6 @@
                     icon="el-icon-upload2"
                     size="mini"
                     @click="uploadAccessory(`bidding_documents_accessory`)"
-                    v-hasPermi="['system:user:import']"
                     >上传</el-button
                   >
                 </el-col>
@@ -737,7 +708,6 @@
                         form.basic.boFlow.biddingDocumentsAccessoryName
                       )
                     "
-                    v-hasPermi="['system:user:export']"
                     >下载</el-button
                   >
                 </el-col>
@@ -750,24 +720,12 @@
                     type="text"
                     icon="el-icon-delete"
                     @click="deleteAccessory(`bidding_documents_accessory`, 1)"
-                    v-hasPermi="['system:basic:remove']"
                     >删除</el-button
                   >
                 </el-col>
               </el-row>
               <el-row>
                 <el-col :span="5">
-                  <el-form-item label="我方优势" prop="researchTime">
-                    <el-input
-                      v-model="form.ourAdvantage"
-                      placeholder="我方优势"
-                      :disabled="!isUpdate"
-                    />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-              <el-row>
-                <el-col :span="5">
                   投标是否通过
                   <el-radio
                     v-model="form.basic.boFlow.biddingDocumentsPass"
@@ -783,12 +741,32 @@
                   >
                 </el-col>
               </el-row>
+              <el-row>
+                <el-col :span="5">
+                  <el-form-item label="我方优势" prop="researchTime" v-show="this.form.basic.boFlow.biddingDocumentsPass == '1'">
+                    <el-input
+                      v-model="form.ourAdvantage"
+                      placeholder="我方优势"
+                      :disabled="!isUpdate"
+                    />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="5">
+                  <el-form-item label="我方劣势" prop="researchTime" v-show="this.form.basic.boFlow.biddingDocumentsPass == '0'">
+                    <el-input
+                      v-model="form.ourAdvantage"
+                      placeholder="我方劣势"
+                      :disabled="!isUpdate"
+                    />
+                  </el-form-item>
+                </el-col>
+              </el-row>
               <el-row v-if="form.basic.boFlow.biddingDocumentsPass == 1">
                 <el-col :span="1.5">
                   <el-input
                     v-model="form.basic.boFlow.letterAcceptanceAccessoryName"
                     placeholder="请上传中标通知书"
-                    :disabled="true"
+                    readonly
                   />
                 </el-col>
                 <el-col
@@ -801,7 +779,6 @@
                     icon="el-icon-upload2"
                     size="mini"
                     @click="uploadAccessory(`letter_acceptance_accessory`)"
-                    v-hasPermi="['system:user:import']"
                     >上传</el-button
                   >
                 </el-col>
@@ -820,7 +797,6 @@
                         form.basic.boFlow.letterAcceptanceAccessoryName
                       )
                     "
-                    v-hasPermi="['system:user:export']"
                     >下载</el-button
                   >
                 </el-col>
@@ -833,7 +809,6 @@
                     type="text"
                     icon="el-icon-delete"
                     @click="deleteAccessory(`letter_acceptance_accessory`, 1)"
-                    v-hasPermi="['system:basic:remove']"
                     >删除</el-button
                   >
                 </el-col>
@@ -844,7 +819,7 @@
           <el-tab-pane
             label="合同签订"
             name="ht"
-            style="height: 150px; overflow-y: scroll"
+            style="height: 200px; overflow-y: scroll"
             v-if="this.secondTabsName.ht"
           >
             <el-form ref="form" :model="form.basic.boFlow" :rules="rules">
@@ -866,7 +841,7 @@
                   <el-input
                     v-model="form.basic.boFlow.contractDocumentAccessoryName"
                     placeholder="请上传合同文件"
-                    :disabled="true"
+                    readonly
                   />
                 </el-col>
                 <el-col
@@ -879,7 +854,6 @@
                     icon="el-icon-upload2"
                     size="mini"
                     @click="uploadAccessory(`contract_document_accessory`)"
-                    v-hasPermi="['system:user:import']"
                     >上传</el-button
                   >
                 </el-col>
@@ -898,7 +872,6 @@
                         form.basic.boFlow.contractDocumentAccessoryName
                       )
                     "
-                    v-hasPermi="['system:user:export']"
                     >下载</el-button
                   >
                 </el-col>
@@ -911,7 +884,6 @@
                     type="text"
                     icon="el-icon-delete"
                     @click="deleteAccessory(`contract_document_accessory`, 1)"
-                    v-hasPermi="['system:basic:remove']"
                     >删除</el-button
                   >
                 </el-col>
@@ -922,7 +894,7 @@
           <el-tab-pane
             label="跟进记录"
             name="gj"
-            style="height: 150px; overflow-y: scroll"
+            style="height: 200px; overflow-y: scroll"
             v-if="this.secondTabsName.gj"
           >
             <BehaviorList
@@ -932,6 +904,33 @@
             />
           </el-tab-pane>
         </el-tabs>
+        <!-- 编辑按钮组 -->
+        <el-row type="flex" class="row-bg" justify="end">
+          <el-col :span="2" v-show="!isUpdate">
+            <div class="grid-content bg-purple">
+              <el-button
+                @click="modifyButton"
+                >修改</el-button
+              >
+            </div>
+          </el-col>
+          <el-col :span="2" v-show="isUpdate">
+            <div class="grid-content bg-purple-light">
+              <el-button
+                @click="cancelButton"
+                >取消</el-button
+              >
+            </div>
+          </el-col>
+          <el-col :span="2" v-show="isUpdate">
+            <div class="grid-content bg-purple">
+              <el-button
+                @click="saveButton"
+                >保存</el-button
+              >
+            </div>
+          </el-col>
+        </el-row>
         <!-- 基本信息 -->
         <el-divider content-position="left">基本信息</el-divider>
         <el-form ref="form" :model="form.basic" label-width="80px">
@@ -941,7 +940,7 @@
                 <el-select
                   v-model="form.basic.boSource"
                   placeholder="商机来源"
-                  :disabled="true"
+                  readonly
                 >
                   <el-option
                     v-for="dict in dict.type.mk_bo_source"
@@ -957,7 +956,7 @@
                 <el-select
                   v-model="form.basic.boType"
                   placeholder="商机类型"
-                  :disabled="true"
+                  readonly
                 >
                   <el-option
                     v-for="dict in dict.type.mk_bo_type"
@@ -973,7 +972,7 @@
                 <el-input
                   v-model="form.basic.customerName"
                   placeholder="请输入客户名称"
-                  :disabled="true"
+                  readonly
                 />
               </el-form-item>
             </el-col>
@@ -984,7 +983,7 @@
                 <el-select
                   v-model="form.basic.totalHosRevenue"
                   placeholder="请输入医院营收总额"
-                  :disabled="true"
+                  readonly
                 >
                   <el-option
                     v-for="dict in dict.type.mk_bo_total_revenue"
@@ -997,11 +996,19 @@
               </el-form-item>
             </el-col>
             <el-col :span="8">
-              <el-form-item label="医院耗材预估值" prop="hosDiscreetValue">
+              <!-- label="医院耗材预估值" -->
+              <el-form-item  prop="hosDiscreetValue">
+
+                <template slot="label">
+                  <el-tooltip class="item" effect="dark" content="Top Left 提示文字" placement="top-start">
+                    <span>医院耗材预估值</span>
+                  </el-tooltip>
+                </template>
+
                 <el-input
                   v-model="form.basic.hosDiscreetValue"
                   placeholder="请输入医院耗材预估值"
-                  :disabled="true"
+                  readonly
                 />
               </el-form-item>
             </el-col>
@@ -1010,7 +1017,7 @@
                 <el-input
                   v-model="form.basic.winningRate"
                   placeholder="赢单率"
-                  :disabled="true"
+                  readonly
                 />
               </el-form-item>
             </el-col>
@@ -1020,7 +1027,7 @@
               <el-input
                 v-model="form.basic.boContent"
                 placeholder="商机内容"
-                :disabled="true"
+                readonly
               />
             </el-form-item>
           </el-row>
@@ -1040,11 +1047,11 @@
               </el-form-item>
             </el-col>
             <el-col :span="8">
-              <el-form-item label="销售区域" prop="marketingArea">
+              <el-form-item label="销售区域" prop="marketingAreaName">
                 <el-input
                   size="small"
                   readonly
-                  v-model="form.basic.marketingArea"
+                  v-model="form.basic.marketingAreaName"
                   placeholder=""
                 />
               </el-form-item>
@@ -1120,7 +1127,6 @@
               icon="el-icon-upload2"
               size="mini"
               @click="uploadAccessory(`list`)"
-              v-hasPermi="['system:user:import']"
               >上传</el-button
             >
           </el-col>
@@ -1147,7 +1153,6 @@
                     type="text"
                     icon="el-icon-delete"
                     @click="deleteAccessory('list', scope.row)"
-                    v-hasPermi="['system:basic:remove']"
                     >删除</el-button
                   >
                 </el-col>
@@ -1158,7 +1163,6 @@
                     icon="el-icon-download"
                     size="mini"
                     @click="exportAccessory(scope.row.url, scope.row.fileName)"
-                    v-hasPermi="['system:user:export']"
                     >下载</el-button
                   >
                 </el-col>
@@ -1276,6 +1280,27 @@ export default {
       },
       //当前查看的阶段是第几阶段,默认给个0吧。
       showStage: 0,
+      //模板表格
+      tableData: [{
+                    type: '标准立项书模板',
+                    name: '说明:请联系部门商务',
+                  }, {
+                    type: '商机审会决议书',
+                    name: '说明:请联系部门商务',
+                  },],
+      tableData1: [{
+                    type: '项目评估模板',
+                    name: '说明: 请联系部门商务',
+                  }, {
+                    type: '售前模板',
+                    name: '说明: 请联系事业发展部门商务',
+                  },{
+                    type: '售前调研模板',
+                    name: 'xXxx医院SPD项目 售前调研表 下载',
+                  },{
+                    type: '投标参数模板',
+                    name: '说明: 请联系事业发展商务',
+                  },],
     };
   },
   //监听属性
@@ -1392,20 +1417,15 @@ export default {
         } else {
           boStage = this.form.basic.boStage + 1;
         }
-        this.$modal.confirm('确定要进入下一阶段吗!').then(function() {
+        this.$modal.confirm('确定要变更为下一阶段吗!').then(function() {
           return nextFlow(boId, boStage);
         }).then(() => {
           getBasic(this.$route.params.id).then((response) => {
             this.form.basic = response.data;
+            this.showStage = this.form.basic.boStage;
           });
           this.$modal.msgSuccess("流程扭转成功");
         }).catch(() => {});
-        // nextFlow(boId, boStage).then((res) => {
-        //   this.$modal.msgSuccess("流程扭转成功");
-        //   getBasic(this.$route.params.id).then((response) => {
-        //     this.form.basic = response.data;
-        //   });
-        // });
       }
     },
     //页签全部收起

+ 21 - 8
src/views/business/spd/bo/basic/index.vue

@@ -80,7 +80,6 @@
           icon="el-icon-plus"
           size="mini"
           @click="handleAdd"
-          v-hasPermi="['mk:bo:basic:add']"
         >新增</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -91,7 +90,6 @@
           size="mini"
           :disabled="single"
           @click="handleUpdate"
-          v-hasPermi="['mk:bo:basic:edit']"
         >修改</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -102,7 +100,6 @@
           size="mini"
           :disabled="multiple"
           @click="handleDelete"
-          v-hasPermi="['mk:bo:basic:remove']"
         >删除</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@@ -145,23 +142,26 @@
           <el-button
             size="mini"
             type="text"
-            icon="el-icon-edit"
+            icon="el-icon-top"
+            @click="submitOa(scope.row)"
+          >提交</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-view"
             @click="enterDetails(scope.row)"
-            v-hasPermi="['mk:bo:basic:detail']"
           >进入详情</el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
-            v-hasPermi="['mk:bo:basic:edit']"
           >修改</el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
-            v-hasPermi="['mk:bo:basic:remove']"
           >删除</el-button>
         </template>
       </el-table-column>
@@ -178,6 +178,7 @@
     <!-- 添加或修改商机基础信息对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-divider content-position="left" style="font-size: 30px">基本信息</el-divider>
         <el-row>
           <el-col :span="8">
             <el-form-item label="商机名称" prop="boName">
@@ -257,6 +258,7 @@
             </el-form-item>
           </el-col>
         </el-row>
+        <el-divider content-position="left" style="font-size: 30px">其它信息</el-divider>
         <el-row>
           <el-col :span="6">
             <el-form-item label="销售区域" prop="marketingAreaName">
@@ -327,7 +329,7 @@
 </template>
 
 <script>
-import { listBasic, getBasic, addBasic, updateBasic, delBasic } from "@/api/business/spd/bo/basic";
+import { listBasic, getBasic, addBasic, updateBasic, delBasic ,submit} from "@/api/business/spd/bo/basic";
 import CustomerRef from '@/views/business/spd/bo/refer/customer/index.vue';
 import SaleaeaRef from '@/views/business/spd/bo/refer/saleaea/index.vue';
 import OrgRef from '@/views/business/spd/bo/refer/org/index.vue';
@@ -590,6 +592,17 @@ export default {
         ...this.queryParams
       }, `basic_${new Date().getTime()}.xlsx`)
     },
+    //  提交至OA进行审批
+    submitOa(row){
+      const id = row.id;
+      console.log('id',id);
+      this.$modal.confirm('确认提交【' + row.boName + '】吗?').then(function() {
+        return submit(id);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("提交成功");
+      }).catch(() => {});
+    },
     // 触发客户参照列表
     refereCustomer() {
       this.$refs.customerSelect.init()

+ 281 - 20
src/views/business/spd/bo/behavior/behaviorList.vue

@@ -8,7 +8,6 @@
           icon="el-icon-plus"
           size="mini"
           @click="handleAdd"
-          v-hasPermi="['system:behavior:add']"
         >新增</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -19,7 +18,6 @@
           size="mini"
           :disabled="single"
           @click="handleUpdate"
-          v-hasPermi="['system:behavior:edit']"
         >修改</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -30,7 +28,6 @@
           size="mini"
           :disabled="multiple"
           @click="handleDelete"
-          v-hasPermi="['system:behavior:remove']"
         >删除</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@@ -84,14 +81,12 @@
             type="text"
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
-            v-hasPermi="['system:behavior:edit']"
           >修改</el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
-            v-hasPermi="['system:behavior:remove']"
           >删除</el-button>
         </template>
       </el-table-column>
@@ -108,6 +103,7 @@
     <!-- 添加或修改行动对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-divider content-position="left">基本信息</el-divider>
         <el-row>
           <el-col :span="8">
             <el-form-item label="任务" prop="taskId" v-if="!(this.source == 'BoDetails')">
@@ -220,30 +216,110 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-form-item label="洽谈内容" prop="content">
+        <el-divider content-position="left">跟进记录</el-divider>
+        <el-form-item label="跟进记录" prop="content" >
           <el-input
             type="textarea"
             :rows="2"
-            placeholder="请输入洽谈内容"
             autosize
             v-model="form.content">
           </el-input>
         </el-form-item>
+        <!-- <el-divider content-position="left">照片信息</el-divider>
+          <el-row :gutter="10" class="mb8">
+            <el-col :span="1.5">
+              <el-button
+                type="info"
+                plain
+                icon="el-icon-upload2"
+                size="mini"
+                @click="handleImport(`P`)"
+                >上传</el-button
+              >
+            </el-col>
+          </el-row>
+          <el-image
+            style="width: 100px; height: 100px"
+            :src="url"
+            :preview-src-list="srcList">
+          </el-image>
+        <el-divider content-position="left">附件</el-divider>
+          <el-row :gutter="10" class="mb8">
+            <el-col :span="1.5">
+              <el-button
+                type="info"
+                plain
+                icon="el-icon-upload2"
+                size="mini"
+                @click="handleImport(`A`)"
+                >上传</el-button
+              >
+            </el-col>
+          </el-row>
+          <el-table v-loading="loading" :data="form.accessory">
+            <el-table-column type="selection" width="55" align="center" />
+            <el-table-column
+              type="index"
+              label="序号"
+              width="55"
+              align="center"
+            />
+            <el-table-column label="名称" align="center" prop="fileName" />
+            <el-table-column
+              label="操作"
+              align="center"
+              class-name="small-padding fixed-width"
+            >
+              <template slot-scope="scope">
+                <el-row>
+                  <el-col :span="1.5">
+                    <el-button
+                      size="mini"
+                      type="text"
+                      icon="el-icon-delete"
+                      @click="deleteBehaviorA('list', scope.row)"
+                      >删除</el-button
+                    >
+                  </el-col>
+                  <el-col :span="1.5">
+                    <el-button
+                      type="warning"
+                      plain
+                      icon="el-icon-download"
+                      size="mini"
+                      @click="exportAccessory(scope.row.url, scope.row.Name)"
+                      >下载</el-button
+                    >
+                  </el-col>
+                </el-row>
+              </template>
+            </el-table-column>
+          </el-table> -->
         <div class="md-auditInfo">
           <el-divider content-position="left">其它信息</el-divider>
           <el-form :inline="true" label-position="right" :model="form">
-            <el-form-item label="创建人">
-              <el-input v-model="form.createBy" size="small" readonly placeholder="创建人"></el-input>
-            </el-form-item>
-            <el-form-item label="创建时间">
-              <el-input v-model="form.createTime" size="small" readonly placeholder="创建时间"></el-input>
-            </el-form-item>
-            <el-form-item label="修改人">
-              <el-input v-model="form.updateBy" size="small" readonly placeholder="修改人"></el-input>
-            </el-form-item>
-            <el-form-item label="修改时间">
-              <el-input v-model="form.updateTime" size="small" readonly placeholder="修改时间"></el-input>
-            </el-form-item>
+            <el-row>
+              <el-col :span="6">
+                <el-form-item label="创建人">
+                  <el-input v-model="form.createBy" size="small" readonly></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="创建时间">
+                  <el-input v-model="form.createTime" size="small" readonly></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="修改人">
+                  <el-input v-model="form.updateBy" size="small" readonly></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="6">
+                <el-form-item label="修改时间">
+                  <el-input v-model="form.updateTime" size="small" readonly></el-input>
+                </el-form-item>
+              </el-col>
+            </el-row>
           </el-form>
         </div>
       </el-form>
@@ -252,6 +328,33 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+    <!-- 上传对话框 -->
+    <el-dialog
+      :title="upload.title"
+      :visible.sync="upload.open"
+      width="400px"
+      append-to-body
+    >
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls,.doc,docx"
+        :headers="upload.headers"
+        :action="1"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
     <!-- 联系人参照 -->
     <ContactRef
       ref="contactSelect"
@@ -270,8 +373,11 @@
 
 <script>
 import { listBehavior, getBehavior, delBehavior, addBehavior, updateBehavior } from "@/api/business/spd/bo/behavior";
+import {delBehaviorA} from "@/api/business/spd/bo/behaviorA";
 import ContactRef from '@/views/business/spd/bo/refer/contact/index.vue';
 import SaleaeaRef from '@/views/business/spd/bo/refer/saleaea/index.vue';
+import axios from "axios";
+import { getToken } from "@/utils/auth";
 
 export default {
   name: "BehaviorList",
@@ -342,7 +448,29 @@ export default {
         result: [
           { required: true, message: "拜访效果不能为空", trigger: "blur" }
         ],
-      }
+      },
+      // 上传参数
+      upload: {
+        // 是否显示弹出层
+        open: false,
+        // 弹出层标题
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 上传类型
+        type: "",
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/mk/bo/behaviorA",
+      },
+      url: [
+        'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg',
+      ],
+      srcList: [
+        'https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg',
+        'https://fuss10.elemecdn.com/1/8e/aeffeb4de74e2fde4bd74fc7b4486jpeg.jpeg'
+      ],
     };
   },
   created() {
@@ -504,6 +632,81 @@ export default {
         ...this.queryParams
       }, `behavior_${new Date().getTime()}.xlsx`)
     },
+    /** 上传按钮操作 */
+    handleImport(type) {
+      this.upload.open = true;
+      this.upload.type = type;
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(
+        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+          response.msg +
+          "</div>",
+        "上传结果",
+        { dangerouslyUseHTMLString: true }
+      );
+    },
+    //下载附件
+    exportBehaviorA(urlId, fileName) {
+      let resUrl =
+        "https://test-sy.derom.com/document-center/fastdfs/download?id=" +
+        urlId;
+      axios
+        .create({
+          timeout: 3000,
+          responseType: "blob", // 响应类型, 将响应数据转换为二进制数据
+          headers: {},
+        })
+        .get(resUrl)
+        .then((res) => {
+          console.log(res);
+          // 地址转换
+          let url = window.URL.createObjectURL(res.data);
+          const a = document.createElement("a");
+          a.setAttribute("href", url);
+          a.setAttribute("download", fileName);
+          document.body.append(a);
+          a.click();
+          document.body.removeChild(a);
+        });
+    },
+    //删除附件
+    deleteBehaviorA(row) {
+      this.$modal
+        .confirm("是否确认删除?")
+        .then(function () {})
+        .then(() => {
+          delBehaviorA(row.id).then((res) => {
+            if (res.code == 200) {
+              if (this.upload.flag == "list") {
+                listAccessory(this.form.basic.id).then((response) => {
+                  this.form.accessory = response.rows;
+                });
+              } else {
+                getBasic(this.$route.params.id).then((response) => {
+                  this.form.basic = response.data;
+                });
+              }
+              this.$modal.msgSuccess("删除成功");
+            } else {
+              this.$modal.msgSuccess("删除失败");
+            }
+          });
+        })
+        .catch(() => {});
+    },
     // 触发联系人参照列表
     refereContact() {
       this.$refs.contactSelect.init()
@@ -526,3 +729,61 @@ export default {
   }
 };
 </script>
+
+
+
+<style scoped>
+.md-content >>> .el-form-item {
+  margin-bottom: 10px;
+}
+
+.md-content >>> .el-tabs--border-card > .el-tabs__content {
+  padding-bottom: 8px;
+}
+
+.md-content .md-auditInfo >>> .el-form-item {
+  margin-bottom: 0px;
+}
+
+.md-main >>> .el-form-item,
+.md-vice >>> .el-form-item {
+  width: 100%;
+  box-sizing: border-box;
+}
+
+.md-main >>> .el-form-item__label,
+.md-vice >>> .el-form-item__label {
+  width: 40%;
+}
+
+.md-main >>> .el-form-item__content,
+.md-md-vice >>> .el-form-item__content {
+  width: 60%;
+}
+
+.md-content >>> .el-form-item__label {
+  font-weight: normal;
+  /* text-align: left;
+  width: 28%; */
+  white-space: nowrap;
+  /* IE6 需要定义宽度 */
+  overflow: hidden;
+
+  -o-text-overflow: ellipsis;
+  /* Opera */
+  text-overflow: ellipsis;
+  /* IE, Safari (WebKit) */
+  /* -moz-binding: url('ellipsis.xml#ellipsis'); */
+  /* Firefox */
+}
+
+.md-main >>> .material-table {
+  height: 100%;
+}
+
+.md-vice >>> .material-table {
+  height: 140px;
+  overflow-y: auto;
+  overflow-x: auto;
+}
+</style>

+ 22 - 8
src/views/business/spd/bo/contact/contactList.vue

@@ -8,7 +8,6 @@
           icon="el-icon-plus"
           size="mini"
           @click="handleAdd"
-          v-hasPermi="['system:contact:add']"
         >新增</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -19,7 +18,6 @@
           size="mini"
           :disabled="single"
           @click="handleUpdate"
-          v-hasPermi="['system:contact:edit']"
         >修改</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -30,7 +28,6 @@
           size="mini"
           :disabled="multiple"
           @click="handleDelete"
-          v-hasPermi="['system:contact:remove']"
         >删除</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -40,7 +37,6 @@
           icon="el-icon-download"
           size="mini"
           @click="handleExport"
-          v-hasPermi="['system:contact:export']"
         >导出</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@@ -113,14 +109,12 @@
             type="text"
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
-            v-hasPermi="['system:contact:edit']"
           >修改</el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
-            v-hasPermi="['system:contact:remove']"
           >删除</el-button>
         </template>
       </el-table-column>
@@ -352,6 +346,14 @@
           <el-col :span="8">
           </el-col>
         </el-row>
+        <el-tabs v-model="activeName" @tab-click="handleClick" v-if="this.operatingState != 'Insert'">
+          <el-tab-pane label="学历信息" name="first">
+            <EducationList  :key="timer" :source="'ContactList'" :supForm="this.form" />
+          </el-tab-pane>
+          <el-tab-pane label="社会关系" name="second">
+            <RelationshipList :key="timer" :source="'ContactList'" :supForm="this.form" />
+          </el-tab-pane>
+        </el-tabs>
         <div class="md-auditInfo">
           <el-divider content-position="left">其它信息</el-divider>
           <el-form :inline="true" label-position="right" :model="form">
@@ -387,12 +389,14 @@
 <script>
 import { listContact, getContact, delContact, addContact, updateContact } from "@/api/business/spd/bo/contact";
 import CustomerRef from '@/views/business/spd/bo/refer/customer/index.vue';
+import EducationList from '../education/educationList.vue';
+import RelationshipList from '../relationship/relationshipList.vue';
 
 export default {
   name: "contactList",
   props:["source","bo"],
   dicts: ['sys_user_sex','mk_bo_contact_state','mk_bo_section','mk_bo_position','mk_bo_job_title','mk_bo_power','mk_bo_support','mk_bo_field_expertise','sys_yes_no','mk_bo_contact_type'],
-  components: {CustomerRef},
+  components: {CustomerRef,EducationList,RelationshipList},
   data() {
     return {
       // 遮罩层
@@ -465,7 +469,13 @@ export default {
             trigger: "blur"
           }
         ],
-      }
+      },
+      //重新加载子组件参数
+      timer: '',
+      //当前操作状态
+      operatingState: '',
+      //
+      activeName: 'first',
     };
   },
   created() {
@@ -550,23 +560,27 @@ export default {
     },
     /** 新增按钮操作 */
     handleAdd() {
+      this.operatingState = "Insert";
       this.reset();
       if(this.source == 'BoDetails'){
         this.form.boId = this.bo.id;
         this.form.customer = this.bo.customer;
         this.form.customerName = this.bo.customerName;
       }
+      this.form.state = '1';
       this.open = true;
       this.title = "添加联系人管理";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
+      this.operatingState = "Update";
       this.reset();
       const id = row.id || this.ids
       getContact(id).then(response => {
         this.form = response.data;
         this.open = true;
         this.title = "修改联系人管理";
+        this.timer = new Date().getTime();
       });
     },
     /** 提交按钮 */

+ 301 - 0
src/views/business/spd/bo/education/educationList.vue

@@ -0,0 +1,301 @@
+<template>
+  <div class="app-container">
+    <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>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="educationList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="入学日期" align="center" prop="enrollDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.enrollDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="毕业日期" align="center" prop="graduationDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.graduationDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="学校名称" align="center" prop="school" />
+      <el-table-column label="专业名称" align="center" prop="majorName" />
+      <el-table-column label="学历" align="center" prop="education" >
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mk_bo_education" :value="scope.row.education"/>
+        </template>
+      </el-table-column>
+      <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="联系人ID" prop="contactId">
+          <el-input v-model="form.contactId" placeholder="请输入联系人ID" />
+        </el-form-item> -->
+        <el-form-item label="入学日期" prop="enrollDate">
+          <el-date-picker clearable
+            v-model="form.enrollDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择入学日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="毕业日期" prop="graduationDate">
+          <el-date-picker clearable
+            v-model="form.graduationDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择毕业日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="学校名称" prop="school">
+          <el-input v-model="form.school" placeholder="请输入学校名称" />
+        </el-form-item>
+        <el-form-item label="专业名称" prop="majorName">
+          <el-input v-model="form.majorName" placeholder="请输入专业名称" />
+        </el-form-item>
+        <el-form-item label="学历" prop="education">
+          <el-select v-model="form.education" placeholder="请输入学历">
+            <el-option
+              v-for="dict in dict.type.mk_bo_education"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </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 { listEducation, getEducation, delEducation, addEducation, updateEducation }  from "@/api/business/spd/bo/education";
+
+export default {
+  name: "EducationList",
+  props:["source","supForm"],
+  dicts: ['mk_bo_education'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 联系人学历信息表格数据
+      educationList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        contactId: null,
+        createDate: null,
+        graduationDate: null,
+        enrollDate: null,
+        majorName: null,
+        education: null,
+        school: null,
+        code: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        enrollDate: [
+          { required: true, message: "入学日期不能为空", trigger: "blur" }
+        ],
+        graduationDate: [
+          { required: true, message: "毕业日期不能为空", trigger: "blur" }
+        ],
+        school: [
+          { required: true, message: "学校名称不能为空", trigger: "blur" }
+        ],
+        education: [
+          { required: true, message: "学历不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    if(this.source == 'ContactList'){
+      this.queryParams.contactId = this.supForm.id;
+    }
+    this.getList();
+  },
+  methods: {
+    /** 查询联系人学历信息列表 */
+    getList() {
+      this.loading = true;
+      listEducation(this.queryParams).then(response => {
+        this.educationList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        contactId: null,
+        delFlag: null,
+        updateTime: null,
+        updateBy: null,
+        createDate: null,
+        createBy: null,
+        graduationDate: null,
+        enrollDate: null,
+        majorName: null,
+        education: null,
+        school: null,
+        code: null,
+        id: 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.operatingState = "Insert";
+      this.reset();
+      if(this.source == 'ContactList'){
+        this.form.contactId = this.supForm.id;
+      }
+      this.open = true;
+      this.title = "添加联系人学历信息";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getEducation(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) {
+            updateEducation(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addEducation(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 delEducation(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/education/export', {
+        ...this.queryParams
+      }, `education_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 38 - 7
src/views/business/spd/bo/pojpsn/pojpsnList.vue

@@ -8,7 +8,6 @@
           icon="el-icon-plus"
           size="mini"
           @click="handleAdd"
-          v-hasPermi="['system:pojpsn:add']"
         >新增</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -19,7 +18,6 @@
           size="mini"
           :disabled="single"
           @click="handleUpdate"
-          v-hasPermi="['system:pojpsn:edit']"
         >修改</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -30,7 +28,6 @@
           size="mini"
           :disabled="multiple"
           @click="handleDelete"
-          v-hasPermi="['system:pojpsn:remove']"
         >删除</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@@ -58,19 +55,17 @@
             type="text"
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
-            v-hasPermi="['system:pojpsn:edit']"
           >修改</el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
-            v-hasPermi="['system:pojpsn:remove']"
           >删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    
+
     <pagination
       v-show="total>0"
       :total="total"
@@ -109,6 +104,14 @@
               :value="dict.value"
             ></el-option>
           </el-select>
+          <!-- <el-select v-model="form.jobs" multiple placeholder="请选择职责">
+            <el-option
+              v-for="item in options"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value">
+            </el-option>
+          </el-select> -->
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -178,6 +181,24 @@ export default {
           { required: true, message: "职责不能为空", trigger: "blur" }
         ],
       },
+      //
+      jobs : [],
+      options: [{
+          value: '0',
+          label: '上传商机审会议'
+        }, {
+          value: '1',
+          label: '售前提案'
+        }, {
+          value: '2',
+          label: '调研报告'
+        }, {
+          value: '3',
+          label: '考察报告'
+        }, {
+          value: '4',
+          label: '投标书'
+        },],
     };
   },
   created() {
@@ -189,6 +210,16 @@ export default {
     }
     this.getList();
   },
+  watch: {
+    //阶段
+    "jobs": {
+      handler(newName, oldName) {
+        this.form.job = newName.toString();
+        console.log(value1,value2);
+      },
+      immediate: true,
+    },
+  },
   methods: {
     /** 查询项目成员列表 */
     getList() {
@@ -308,4 +339,4 @@ export default {
     }
   }
 };
-</script>
+</script>

+ 305 - 0
src/views/business/spd/bo/relationship/relationshipList.vue

@@ -0,0 +1,305 @@
+<template>
+  <div class="app-container">
+    <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>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="relationshipList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="关系类型" align="center" prop="relationship" >
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.mk_bo_relationship" :value="scope.row.relationship"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="姓名" align="center" prop="name" />
+      <el-table-column label="电话" align="center" prop="telephone" />
+      <el-table-column label="出生日期" align="center" prop="enrollDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.enrollDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="就读学校" align="center" prop="school" />
+      <el-table-column label="工作单位" align="center" prop="company" />
+      <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="联系人ID" prop="contactId">
+          <el-input v-model="form.contactId" placeholder="请输入联系人ID" />
+        </el-form-item> -->
+        <el-form-item label="关系类型" prop="relationship">
+          <el-select v-model="form.relationship" placeholder="请输入关系类型">
+            <el-option
+              v-for="dict in dict.type.mk_bo_relationship"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="姓名" prop="name">
+          <el-input v-model="form.name" placeholder="请输入姓名" />
+        </el-form-item>
+        <el-form-item label="电话" prop="telephone">
+          <el-input v-model="form.telephone" placeholder="请输入电话" />
+        </el-form-item>
+        <el-form-item label="出生日期" prop="enrollDate">
+          <el-date-picker clearable
+            v-model="form.enrollDate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择出生日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="就读学校" prop="school">
+          <el-input v-model="form.school" placeholder="请输入就读学校" />
+        </el-form-item>
+        <el-form-item label="工作单位" prop="company">
+          <el-input v-model="form.company" 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 { listRelationship, getRelationship, delRelationship, addRelationship, updateRelationship } from "@/api/business/spd/bo/relationship";
+
+export default {
+  name: "RelationshipList",
+  props:["source","supForm"],
+  dicts: ['mk_bo_relationship'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 联系人社会关系表格数据
+      relationshipList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        contactId: null,
+        company: null,
+        school: null,
+        enrollDate: null,
+        telephone: null,
+        name: null,
+        relationship: null,
+        code: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        relationship: [
+          { required: true, message: "关系类型不能为空", trigger: "blur" }
+        ],
+        name: [
+          { required: true, message: "姓名不能为空", trigger: "blur" }
+        ],
+        telephone: [
+          { required: true, message: "电话不能为空", trigger: "blur" },
+          {
+            validator: function(rule, value, callback) {
+              if (/^1[34578]\d{9}$/.test(value) == false) {
+                callback(new Error("手机号格式错误"));
+              } else {
+                callback();
+              }
+            },
+            trigger: "blur"
+          }
+        ],
+      }
+    };
+  },
+  created() {
+    if(this.source == 'ContactList'){
+      this.queryParams.contactId = this.supForm.id;
+    }
+    this.getList();
+  },
+  methods: {
+    /** 查询联系人社会关系列表 */
+    getList() {
+      this.loading = true;
+      listRelationship(this.queryParams).then(response => {
+        this.relationshipList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        contactId: null,
+        delFlag: null,
+        updateTime: null,
+        updateBy: null,
+        createTime: null,
+        createBy: null,
+        company: null,
+        school: null,
+        enrollDate: null,
+        telephone: null,
+        name: null,
+        relationship: null,
+        code: null,
+        id: 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.operatingState = "Insert";
+      this.reset();
+      if(this.source == 'ContactList'){
+        console.log('this.form.contactId',this.form.contactId);
+        this.form.contactId = this.supForm.id;
+      }
+      this.open = true;
+      this.title = "添加联系人社会关系";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getRelationship(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) {
+            updateRelationship(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addRelationship(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 delRelationship(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/relationship/export', {
+        ...this.queryParams
+      }, `relationship_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 0 - 5
src/views/business/spd/bo/task/taskList.vue

@@ -8,7 +8,6 @@
           icon="el-icon-plus"
           size="mini"
           @click="handleAdd"
-          v-hasPermi="['drp-business:task:add']"
         >新增</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -19,7 +18,6 @@
           size="mini"
           :disabled="single"
           @click="handleUpdate"
-          v-hasPermi="['drp-business:task:edit']"
         >修改</el-button>
       </el-col>
       <el-col :span="1.5">
@@ -30,7 +28,6 @@
           size="mini"
           :disabled="multiple"
           @click="handleDelete"
-          v-hasPermi="['drp-business:task:remove']"
         >删除</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@@ -75,14 +72,12 @@
             type="text"
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
-            v-hasPermi="['drp-business:task:edit']"
           >修改</el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
-            v-hasPermi="['drp-business:task:remove']"
           >删除</el-button>
         </template>
       </el-table-column>

+ 37 - 64
src/views/login.vue

@@ -9,11 +9,7 @@
           auto-complete="off"
           placeholder="账号"
         >
-          <svg-icon
-            slot="prefix"
-            icon-class="user"
-            class="el-input__icon input-icon"
-          />
+          <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
         </el-input>
       </el-form-item>
       <el-form-item prop="password">
@@ -24,11 +20,7 @@
           placeholder="密码"
           @keyup.enter.native="handleLogin"
         >
-          <svg-icon
-            slot="prefix"
-            icon-class="password"
-            class="el-input__icon input-icon"
-          />
+          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
         </el-input>
       </el-form-item>
       <el-form-item prop="code" v-if="captchaEnabled">
@@ -39,36 +31,26 @@
           style="width: 63%"
           @keyup.enter.native="handleLogin"
         >
-          <svg-icon
-            slot="prefix"
-            icon-class="validCode"
-            class="el-input__icon input-icon"
-          />
+          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
         </el-input>
         <div class="login-code">
-          <img :src="codeUrl" @click="getCode" class="login-code-img" />
+          <img :src="codeUrl" @click="getCode" class="login-code-img"/>
         </div>
       </el-form-item>
-      <el-checkbox
-        v-model="loginForm.rememberMe"
-        style="margin: 0px 0px 25px 0px"
-        >记住密码</el-checkbox
-      >
-      <el-form-item style="width: 100%">
+      <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
+      <el-form-item style="width:100%;">
         <el-button
           :loading="loading"
           size="medium"
           type="primary"
-          style="width: 100%"
+          style="width:100%;"
           @click.native.prevent="handleLogin"
         >
           <span v-if="!loading">登 录</span>
           <span v-else>登 录 中...</span>
         </el-button>
-        <div style="float: right" v-if="register">
-          <router-link class="link-type" :to="'/register'"
-            >立即注册</router-link
-          >
+        <div style="float: right;" v-if="register">
+          <router-link class="link-type" :to="'/register'">立即注册</router-link>
         </div>
       </el-form-item>
     </el-form>
@@ -82,7 +64,7 @@
 <script>
 import { getCodeImg } from "@/api/login";
 import Cookies from "js-cookie";
-import { encrypt, decrypt } from "@/utils/jsencrypt";
+import { encrypt, decrypt } from '@/utils/jsencrypt'
 
 export default {
   name: "Login",
@@ -94,32 +76,32 @@ export default {
         password: "drp0330",
         rememberMe: false,
         code: "",
-        uuid: "",
+        uuid: ""
       },
       loginRules: {
         username: [
-          { required: true, trigger: "blur", message: "请输入您的账号" },
+          { required: true, trigger: "blur", message: "请输入您的账号" }
         ],
         password: [
-          { required: true, trigger: "blur", message: "请输入您的密码" },
+          { required: true, trigger: "blur", message: "请输入您的密码" }
         ],
-        code: [{ required: true, trigger: "change", message: "请输入验证码" }],
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
       },
       loading: false,
       // 验证码开关
       captchaEnabled: true,
       // 注册开关
       register: false,
-      redirect: undefined,
+      redirect: undefined
     };
   },
   watch: {
     $route: {
-      handler: function (route) {
+      handler: function(route) {
         this.redirect = route.query && route.query.redirect;
       },
-      immediate: true,
-    },
+      immediate: true
+    }
   },
   created() {
     this.getCode();
@@ -127,9 +109,8 @@ export default {
   },
   methods: {
     getCode() {
-      getCodeImg().then((res) => {
-        this.captchaEnabled =
-          res.captchaEnabled === undefined ? true : res.captchaEnabled;
+      getCodeImg().then(res => {
+        this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled;
         if (this.captchaEnabled) {
           this.codeUrl = "data:image/gif;base64," + res.img;
           this.loginForm.uuid = res.uuid;
@@ -139,46 +120,38 @@ export default {
     getCookie() {
       const username = Cookies.get("username");
       const password = Cookies.get("password");
-      const rememberMe = Cookies.get("rememberMe");
+      const rememberMe = Cookies.get('rememberMe')
       this.loginForm = {
         username: username === undefined ? this.loginForm.username : username,
-        password:
-          password === undefined ? this.loginForm.password : decrypt(password),
-        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
+        password: password === undefined ? this.loginForm.password : decrypt(password),
+        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
       };
     },
     handleLogin() {
-      this.$refs.loginForm.validate((valid) => {
+      this.$refs.loginForm.validate(valid => {
         if (valid) {
           this.loading = true;
           if (this.loginForm.rememberMe) {
             Cookies.set("username", this.loginForm.username, { expires: 30 });
-            Cookies.set("password", encrypt(this.loginForm.password), {
-              expires: 30,
-            });
-            Cookies.set("rememberMe", this.loginForm.rememberMe, {
-              expires: 30,
-            });
+            Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
+            Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
           } else {
             Cookies.remove("username");
             Cookies.remove("password");
-            Cookies.remove("rememberMe");
+            Cookies.remove('rememberMe');
           }
-          this.$store
-            .dispatch("Login", this.loginForm)
-            .then(() => {
-              this.$router.push({ path: this.redirect || "/" }).catch(() => {});
-            })
-            .catch(() => {
-              this.loading = false;
-              if (this.captchaEnabled) {
-                this.getCode();
-              }
-            });
+          this.$store.dispatch("Login", this.loginForm).then(() => {
+            this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
+          }).catch(() => {
+            this.loading = false;
+            if (this.captchaEnabled) {
+              this.getCode();
+            }
+          });
         }
       });
-    },
-  },
+    }
+  }
 };
 </script>
 

+ 44 - 9
src/views/material/changeApply/add.vue

@@ -10,7 +10,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="8">
-              <el-form-item label="申请组织" prop="orgId">
+              <el-form-item label="所属组织" prop="orgId">
                 <el-input disabled v-model="basicForm.orgId"></el-input>
               </el-form-item>
             </el-col>
@@ -48,24 +48,26 @@
             </el-col>
             <el-col :span="8">
               <el-form-item label="一级分类" prop="oneClass">
-                <el-input :disabled="disable" v-model="basicForm.oneClass"></el-input>
+                <el-input readonly :disabled="disable" v-model="basicForm.oneClass"></el-input>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row :gutter="20">
             <el-col :span="8">
               <el-form-item label="二级分类" prop="twoClass">
-                <el-input :disabled="disable" v-model="basicForm.twoClass"></el-input>
+                <el-input readonly :disabled="disable" v-model="basicForm.twoClass"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="8">
               <el-form-item label="三级分类" prop="threeClass">
-                <el-input :disabled="disable" v-model="basicForm.threeClass"></el-input>
+                <el-input readonly :disabled="disable" v-model="basicForm.threeClass"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="8">
               <el-form-item label="四级分类" prop="fourClass">
-                <el-input :disabled="disable" v-model="basicForm.fourClass"></el-input>
+                <el-input readonly :disabled="disable" v-model="basicForm.fourClass">
+                  <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="chooseFourClass"></el-button>
+                </el-input>
               </el-form-item>
             </el-col>
           </el-row>
@@ -363,6 +365,13 @@
       :selectData="selectData2"
       :single="true"
     />
+
+    <fourClass
+      ref="fourClass"
+      @doSubmit="acceptFourClass"
+      :selectData="selectData3"
+      :single="true"
+    />
   </div>
 </template>
 
@@ -372,12 +381,17 @@ import factory from '@/components/PopDialog/productFactory.vue'
 import { addChangeList, getMaterialDetails, getChangeDetails, editChangeList } from '@/api/changeApply/basic'
 // 生产厂商/代理人调用用于回显
 import { getProductFactory } from '@/api/changeApply/basic'
+// 四级分类
+import fourClass from '@/components/PopDialog/fourClass.vue'
+// 调用物料分类详情接口用于数据回显
+import { getDetail } from '@/api/classify/basic';
 export default {
   name: 'applyAdd',
   dicts: ['sys_storage_condition', 'sys_conditions_carriage', 'sys_medicine', 'medical_instruments', 'curing_type'],
   components: {
     popDialog,
-    factory
+    factory,
+    fourClass
   },
   props: ['pageStu', 'row', 'disable'],
   model: {
@@ -391,7 +405,7 @@ export default {
       isControl: true,
       basicForm: {
         code: '',
-        orgId: '德荣医疗科技股份有限公司',
+        orgId: '德荣集团',
         // 物料id
         materialId:'',
         materialCode: '',
@@ -443,7 +457,7 @@ export default {
         oneClass: [{required: true, message: '请填写一级分类', trigger: 'blur'}],
         twoClass: [{required: true, message: '请填写二级分类', trigger: 'blur'}],
         threeClass: [{required: true, message: '请填写三级分类', trigger: 'blur'}],
-        fourClass: [{required: true, message: '请填写四级分类', trigger: 'blur'}],
+        fourClass: [{required: true, message: '请选择四级分类', trigger: 'blur'}],
         specification: [{required: true, message: '请填写规格', trigger: 'blur'}],
         model: [{required: true, message: '请填写型号', trigger: 'blur'}],
         factory: [{required: true, message: '请选择生产厂家/代理人', trigger: 'blur'}],
@@ -467,7 +481,8 @@ export default {
       // 弹窗
       name: '',
       selectData: [],
-      selectData2: []
+      selectData2: [],
+      selectData3: []
     }
   },
   // watch: {
@@ -709,6 +724,26 @@ export default {
       this.$refs.factoryOrman.blur()
       this.$refs.factory.init()
     },
+    // 选择四级分类
+    acceptFourClass(selections) {
+      console.log('收到的四级分类',selections)
+      this.getTreeDetails(selections.id)
+    },
+    // 四级分类显示列表
+    chooseFourClass() {
+      this.$refs.fourClass.init()
+    },
+    // 选择四级分类后需要根据id再次查询一下123级分类
+    getTreeDetails(id) {
+      getDetail(id).then(res => {
+        if (res.code === 200) {
+          this.basicForm.oneClass = res.data.oneClass
+          this.basicForm.twoClass = res.data.twoClass
+          this.basicForm.threeClass = res.data.threeClass
+          this.basicForm.fourClass = res.data.fourClass
+        }
+      })
+    },
   }
 }
 </script>

+ 6 - 2
src/views/material/classify/index.vue

@@ -42,7 +42,6 @@
             @node-click="clickTree"
             highlight-current
             :default-expanded-keys="defaultExpanded"
-            :default-checked-keys="[2]"
             :filter-node-method="filterNode"
             ref="tree"
           >
@@ -219,6 +218,11 @@ export default {
       defaultExpanded: [],
     };
   },
+  watch: {
+    filterText(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
   created() {
     this.getTreeData();
     //
@@ -254,7 +258,7 @@ export default {
     },
     filterNode(value, data) {
       if (!value) return true;
-      return data.label.indexOf(value) !== -1;
+      return data.materialType.indexOf(value) !== -1;
     },
     clickTree(data, node) {
       console.log("data", data, node);

+ 208 - 36
src/views/material/requisition/add.vue

@@ -11,8 +11,8 @@
               </el-form-item>
             </el-col>
             <el-col :span="8">
-              <el-form-item label="申请组织" prop="orgId">
-                <el-input disabled v-model="basicForm.orgId"></el-input>
+              <el-form-item label="申请组织" prop="orgName">
+                <el-input disabled v-model="basicForm.orgName"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="8">
@@ -159,6 +159,36 @@
           </el-row>
           <el-row :gutter="20">
             <el-col :span="8">
+              <el-form-item label="厂家物料编码" prop="manufacturersMaterialCode">
+                <el-input type="number" min="0" :disabled="disable" v-model="basicForm.manufacturersMaterialCode"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="ABC分类" prop="classifyAbc">
+                <el-select
+                    v-model="basicForm.classifyAbc"
+                    placeholder="ABC分类"
+                    clearable
+                    :disabled="disable"
+                  >
+                    <el-option
+                      v-for="item in dict.type.abc_type"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                </el-select>
+                <!-- <el-input :disabled="disable" v-model="basicForm.classifyAbc"></el-input> -->
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="安全库存" prop="safeStock">
+                <el-input type="number" min="0" :disabled="disable" v-model="basicForm.safeStock"></el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
               <el-form-item label="B2C物料" prop="isB2c">
                 <el-select
                     v-model="basicForm.isB2c"
@@ -198,6 +228,7 @@
                     v-model="basicForm.isInventoryStatus"
                     placeholder="批号及库存状态管理"
                     clearable
+                    @change="stockControl"
                     :disabled="disable"
                   >
                     <el-option
@@ -217,7 +248,8 @@
                     v-model="basicForm.expiryDateManagerment"
                     placeholder="效期管理"
                     clearable
-                    :disabled="disable"
+                    @change="expCt"
+                    :disabled="disable || isStock"
                   >
                     <el-option
                       v-for="item in options"
@@ -246,19 +278,19 @@
               </el-form-item>
             </el-col>
             <el-col :span="8">
-              <el-form-item label="有效期" prop="usefulLife">
-                <el-input type="number" min="0" :disabled="disable" v-model="basicForm.usefulLife"></el-input>
+              <el-form-item label="有效期" prop="usefulLife" :rules="{required: !isExp, message: '请填写有效期', trigger: 'blur'}">
+                <el-input type="number" min="0" :disabled="disable || isExp" v-model="basicForm.usefulLife"></el-input>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row :gutter="20">
             <el-col :span="8">
-              <el-form-item label="效期单位" prop="expiryUnitId">
+              <el-form-item label="效期单位" prop="expiryUnitId" :rules="{required: !isExp, message: '请选择效期单位', trigger: 'change'}">
                 <el-select
                     v-model="basicForm.expiryUnitId"
-                    placeholder="效期单位"
+                    placeholder="请选择"
                     clearable
-                    :disabled="disable"
+                    :disabled="disable || isExp"
                   >
                     <el-option
                       v-for="item in dict.type.period_unit"
@@ -270,12 +302,12 @@
               </el-form-item>
             </el-col>
             <el-col :span="8">
-              <el-form-item label="有效期至单位" prop="usefulLifeUnitId">
+              <el-form-item label="有效期至单位" prop="usefulLifeUnitId" :rules="{required: !isExp, message: '请选择有效期至单位', trigger: 'change'}">
                 <el-select
                     v-model="basicForm.usefulLifeUnitId"
-                    placeholder="有效期至单位"
+                    placeholder="请选择"
                     clearable
-                    :disabled="disable"
+                    :disabled="disable || isExp"
                   >
                     <el-option
                       v-for="item in dict.type.expiry_date"
@@ -287,8 +319,8 @@
               </el-form-item>
             </el-col>
             <el-col :span="8">
-              <el-form-item label="近效期预警天数" prop="recentWarningPeriod">
-                <el-input type="number" min="0" :disabled="disable" v-model="basicForm.recentWarningPeriod"></el-input>
+              <el-form-item label="近效期预警天数" prop="recentWarningPeriod" :rules="{required: !isExp, message: '请填写近效期预警天数', trigger: 'blur'}">
+                <el-input type="number" min="0" :disabled="disable || isExp" v-model="basicForm.recentWarningPeriod"></el-input>
               </el-form-item>
             </el-col>
           </el-row>
@@ -424,7 +456,7 @@
               </el-form-item>
             </el-col>
             <el-col :span="8">
-              <el-form-item label="业务线" prop="businessLine">
+              <el-form-item label="业务线" prop="businessLine" :rules="{required: isOneClass, message: '骨科、介入、检验、普耗、设备类物料产线必须输入对应的业务线', trigger: 'blur'}">
                 <el-select
                     ref="lines"
                     v-model="basicForm.businessLine"
@@ -446,7 +478,8 @@
           <el-row :gutter="20">
             <el-col :span="8">
               <el-form-item label="物料申请人" prop="proposerId">
-                <el-input :disabled="disable" v-model="basicForm.proposerId"></el-input>
+                <el-input disabled v-model="basicForm.createName || this.$store.state.user.nickName"></el-input>
+                <el-input v-show="false" v-model="basicForm.proposerId"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="8">
@@ -542,6 +575,31 @@
           </el-row>
           <el-row :gutter="20">
             <el-col :span="8">
+              <el-form-item label="税类编码" prop="rateCode">
+                <el-input :disabled="disable" v-model="basicForm.rateCode"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="中包装单位" prop="mediumPackageUnitId">
+                <el-select
+                    ref="midpacks"
+                    v-model="basicForm.mediumPackageUnitId"
+                    placeholder="请选择"
+                    clearable
+                    :disabled="disable"
+                    @focus="chooseMidpack"
+                  >
+                    <el-option
+                      v-for="item in midPackOptions"
+                      :key="item.id"
+                      :label="item.name"
+                      :value="item.id"
+                    />
+                </el-select>
+                <!-- <el-input :disabled="disable" v-model="basicForm.mediumPackageUnitId"></el-input> -->
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
               <el-form-item label="备注" prop="remark">
                 <el-input disabled v-model="basicForm.remark"></el-input>
               </el-form-item>
@@ -650,12 +708,16 @@
             </el-col>
           </el-row>
         </el-form>
+
+      </el-tab-pane>
+
+      <el-tab-pane label="维护物料类别" name="third">
+        <!-- <el-row style="margin-bottom: 12px;">
+        <span>物料类别</span>
+        </el-row> -->
         <el-row style="margin-bottom: 12px;">
-          <span>物料类别</span>
-        </el-row>
-        <el-row style="margin-bottom: 12px;">
-          <el-button :disabled="disable || isControl" type="primary" size="small" plain @click="addLine">新增</el-button>
-          <el-button :disabled="disable || isControl" type="primary" size="small" plain @click="handleDelete">删除</el-button>
+          <el-button :disabled="disable" type="primary" size="small" plain @click="addLine">新增</el-button>
+          <el-button :disabled="disable" type="primary" size="small" plain @click="handleDelete">删除</el-button>
           <!-- <el-button :disabled="disable || isControl" type="primary" size="small" plain @click="testsave">暂存</el-button> -->
         </el-row>
         <el-row>
@@ -666,19 +728,19 @@
             @selection-change="handleSelectionChange"
             >
               <el-table-column type="selection" width="55" />
-              <el-table-column label="物料类别ID" align="center" prop="sort">
+              <el-table-column label="ID" align="center" prop="sort">
                 <template slot-scope="scope">
                   <el-input readonly v-model="scope.row.drugId">
                     <!-- <el-button :disabled="disable" slot="append" icon="el-icon-more" @click="chooseDrug"></el-button> -->
                   </el-input>
                 </template>
               </el-table-column>
-              <el-table-column label="物料类别code" align="center" prop="medicineCode">
+              <el-table-column label="药品类别编码" align="center" prop="medicineCode">
                 <template slot-scope="scope">
                   <el-input readonly v-model="scope.row.drugCode"></el-input>
                 </template>
               </el-table-column>
-              <el-table-column label="物料类别名称" align="center" prop="medicineName">
+              <el-table-column label="药品类别名称" align="center" prop="medicineName">
                 <template slot-scope="scope">
                   <el-input readonly v-model="scope.row.drugName"></el-input>
                 </template>
@@ -846,6 +908,12 @@
       :single="true"
     />
 
+    <midpack
+      ref="midpack"
+      @doSubmit="acceptMidpack"
+      :selectData="selectData13"
+      :single="true"
+    />
   </div>
 </template>
 
@@ -864,17 +932,19 @@ import depart from '@/components/PopDialog/organization.vue'
 // 药品类别子别
 import drug from '@/components/PopDialog/drug.vue'
 
+import midpack from '@/components/PopDialog/midPack.vue'
+
 import { addReq, getReqDetail, editReq } from '@/api/requisition/basic'
 // 调用物料分类详情接口用于数据回显
 import { getDetail } from '@/api/classify/basic';
 // 生产厂商/代理人调用用于回显
 import { getProductFactory } from '@/api/changeApply/basic'
 // 计量单位,产地调用用于回显
-import { getUnit, getPlace, getTax, getStaff, getLine, getDose, getOrgs} from '@/api/requisition/basic'
+import { getUnit, getPlace, getTax, getStaff, getLine, getDose, getOrgs, getMidPack} from '@/api/requisition/basic'
 
 export default {
   name: 'requisition_add',
-  dicts: ['sys_storage_condition', 'sys_conditions_carriage', 'sys_medicine', 'medical_instruments', 'curing_type', 'period_unit', 'expiry_date'],
+  dicts: ['sys_storage_condition', 'sys_conditions_carriage', 'sys_medicine', 'medical_instruments', 'curing_type', 'period_unit', 'expiry_date', 'abc_type'],
   components: {
     factory,
     fourClass,
@@ -886,7 +956,8 @@ export default {
     dose,
     orgs,
     depart,
-    drug
+    drug,
+    midpack
   },
   props: ['pageStu', 'row', 'disable'],
   model: {
@@ -905,9 +976,13 @@ export default {
       doseOptions: [],
       organizationsOptions: [],
       departOptions: [],
+      midPackOptions: [],
       tabValue: 'first',
       isControl: true,
       orgControl: true,
+      isStock: false,
+      isExp: false,
+      isOneClass: false,
       basicForm: {
         billCode: '',
         orgId: '',
@@ -929,6 +1004,9 @@ export default {
         registrant: '',
         originPlace: '',
         manufacturersMaterialName: '',
+        manufacturersMaterialCode: '',
+        classifyAbc: '',
+        rateCode: '',
         isB2c: '2',
         assembly: '2',
         isInventoryStatus: '0',
@@ -967,6 +1045,8 @@ export default {
         // 新增业务部门
         businessDepartment: '',
         isEnable: '',
+        safeStock: '',
+        mediumPackageUnitId: '',
         remark: '',
         // 物料申请单-单据信息
         applyBillInfo: {
@@ -1012,6 +1092,8 @@ export default {
         puPersonnelId: [{ required: true, message: '请选择采购员', trigger: 'change' }],
         minBatchQty: [{required: true, message: '请输入最小批量', trigger: 'blur'}],
         packExplain: [{required: true, message: '请输入包装说明', trigger: 'blur'}],
+        purchasingOrganization: [{ required: true, message: '请选择默认采购组织', trigger: 'change' }],
+        businessDepartment: [{ required: true, message: '请选择业务部门', trigger: 'change' }],
       },
       basicForm2: {
         // 是否药品
@@ -1046,7 +1128,8 @@ export default {
       selectData9: [],
       selectData10: [],
       selectData11: [],
-      selectData12: []
+      selectData12: [],
+      selectData13: []
     }
   },
   // watch: {
@@ -1080,7 +1163,14 @@ export default {
       // alert('详情页面:')
       console.log('页面状态',this.pageStu)
       console.log('数据', this.row)
+      console.log('取VUEX里面的数据:', this.$store.state.user.name)
       this.getDetails(this.row)
+      // 控制效期单位后面的是否可填写
+      if (this.row.expiryDateManagerment == '0') {
+        this.isExp = false
+      } else {
+        this.isExp = true
+      }
       // 生产厂家代理人用于回显
       if (this.row.manufacturerId) {
         this.getFactoryDetails(this.row.manufacturerId)
@@ -1105,11 +1195,21 @@ export default {
       if (this.row.businessLine) {
         this.getLineDetails(this.row.businessLine)
       }
+      // 中包装单位回显
+      if (this.row.mediumPackageUnitId) {
+        this.getMidPackDetails(this.row.mediumPackageUnitId)
+      }
     } else if (this.pageStu == 'edit') {
       // alert('修改页面')
       console.log('页面状态',this.pageStu)
       console.log('数据', this.row)
       this.getDetails(this.row)
+      // 控制效期单位后面的是否可填写
+      if (this.row.expiryDateManagerment == '0') {
+        this.isExp = false
+      } else {
+        this.isExp = true
+      }
       // 控制业务部门是否能够填写
       if (this.row.purchasingOrganization) {
         this.orgControl = false
@@ -1146,6 +1246,10 @@ export default {
       if (this.row.businessLine) {
         this.getLineDetails(this.row.businessLine)
       }
+      // 中包装单位回显
+      if (this.row.mediumPackageUnitId) {
+        this.getMidPackDetails(this.row.mediumPackageUnitId)
+      }
     } else if(this.pageStu == 'add') {
       // alert('新增页面')
       console.log('页面状态',this.pageStu)
@@ -1156,6 +1260,30 @@ export default {
       console.log(tab, event);
       console.log('页面状态',this.pageStu)
     },
+    // 批号及库存状态管理控制效期管理
+    stockControl(val) {
+      if (val == 0) {
+        this.isStock = false
+      } else {
+        // 联动效期管理
+        this.basicForm.expiryDateManagerment = '2'
+        this.expCt(val)
+        this.isStock = true
+      }
+    },
+    // 选择效期管理控制后面字段是否可填写
+    expCt(val) {
+      console.log('效期管理值:', val)
+      if (val == 0) {
+        this.isExp = false
+      } else {
+        this.basicForm.usefulLife = ''
+        this.basicForm.expiryUnitId = ''
+        this.basicForm.usefulLifeUnitId = ''
+        this.basicForm.recentWarningPeriod = ''
+        this.isExp = true
+      }
+    },
     // 选择采购组织时控制业务部门
     controlOrg(val) {
       this.basicForm.businessDepartment = ''
@@ -1186,6 +1314,12 @@ export default {
           this.basicForm.oneClass = res.data.oneClass
           this.basicForm.twoClass = res.data.twoClass
           this.basicForm.threeClass = res.data.threeClass
+          const classjudge = res.data.oneClass
+          if(classjudge == '介入耗材5' || classjudge == '骨科耗材2' || classjudge == '普通耗材3' || classjudge == '医用设备1' || classjudge == '体外诊断4') {
+            this.isOneClass = true
+          } else {
+            this.isOneClass = false
+          }
         }
       })
     },
@@ -1268,6 +1402,14 @@ export default {
         }
       })
     },
+    // 中包装单位回显
+    getMidPackDetails(id) {
+      getMidPack({id: id}).then(res => {
+        if (res.code === 200) {
+          this.midPackOptions = res.data.tableBody
+        }
+      })
+    },
     // 如果是详情进入,则调用详情接口
     getDetails(row) {
       getReqDetail(row.id).then(res => {
@@ -1306,6 +1448,9 @@ export default {
     },
     save() {
       if(this.pageStu == 'edit') {
+        if(!this.basicForm.proposerId) {
+          this.basicForm.proposerId = this.$store.state.user.name
+        }
         let sparams = {...this.basicForm, ...{status: 0}}
         sparams.sysMaterialMedcineApply = this.basicForm2
         sparams.sysMaterialMedcineItemApply = this.sysMaterialMedcineItemApply
@@ -1325,6 +1470,9 @@ export default {
         })
       } else {
         // alert('保存传status:0')
+        if(!this.basicForm.proposerId) {
+          this.basicForm.proposerId = this.$store.state.user.name
+        }
         let sparams = {...this.basicForm, ...{status: 0}}
         sparams.sysMaterialMedcineApply = this.basicForm2
         sparams.sysMaterialMedcineItemApply = this.sysMaterialMedcineItemApply
@@ -1346,21 +1494,32 @@ export default {
     },
     submit() {
       // alert('提交传status:1')
+      if(!this.basicForm.proposerId) {
+          this.basicForm.proposerId = this.$store.state.user.name
+      }
       let sparams = {...this.basicForm, ...{status: 1}}
       sparams.sysMaterialMedcineApply = this.basicForm2
       sparams.sysMaterialMedcineItemApply = this.sysMaterialMedcineItemApply
       console.log('提交参数', sparams)
       this.$refs['basic'].validate((valid) => {
         if(valid) {
-          editReq(sparams).then(res => {
-            if(res.code === 200) {
-              this.$message({
-                message: res.msg,
-                type: 'success'
-              });
-              this.back()
-            }
-          })
+          // 提交时候要维护物料类别
+          if (this.sysMaterialMedcineItemApply.length !== 0) {
+            editReq(sparams).then(res => {
+              if(res.code === 200) {
+                this.$message({
+                  message: res.msg,
+                  type: 'success'
+                });
+                this.back()
+              }
+            })
+          } else {
+            this.$message({
+              message: '请维护物料类别后再提交',
+              type: 'warning'
+            }); 
+          }
         }
       })
     },
@@ -1540,6 +1699,19 @@ export default {
     chooseDrug () {
       this.$refs.drug.init()
     },
+    // 选择中包装单位
+    acceptMidpack (selections) {
+      console.log('接收到的中包装单位', selections)
+      this.midPackOptions = selections
+      console.log('绑定的数组',this.midPackOptions)
+      this.basicForm.mediumPackageUnitId = selections[0].id
+      this.getMidPackDetails(selections[0].id)
+    },
+    // 中包装单位显示列表
+    chooseMidpack () {
+      this.$refs.midpacks.blur()
+      this.$refs.midpack.init()
+    }
   }
 }
 </script>

+ 1 - 1
src/views/material/specialAttr/index.vue

@@ -348,7 +348,7 @@ export default {
     },
     filterNode(value, data) {
         if (!value) return true;
-        return data.label.indexOf(value) !== -1;
+        return data.materialType.indexOf(value) !== -1;
     },
     // 获取选中条目
     handleSelectionChange(val) { 

+ 27 - 22
src/views/system/table-template/add-dialog.vue

@@ -112,16 +112,14 @@ export default {
       });
     },
     //
-    onMoveRow(direction, index1) {
-      let index2 = 0;
+    onMoveRow(index1, index2) {
       let swapArr = (arr, index1, index2) => {
         arr[index1] = arr.splice(index2, 1, arr[index1])[0];
         return arr;
       };
-      index2 = direction === "top" ? index1 - 1 : index1 + 1;
       this.form.sysTemplateItemList = swapArr(
         this.form.sysTemplateItemList,
-        index1,
+        index1 - 1,
         index2
       );
     },
@@ -137,9 +135,10 @@ export default {
       this.loading = true;
       this.form.id = "";
       this.form.sysTemplateItemList = this.form.sysTemplateItemList.map(
-        (item) => ({
+        (item, index) => ({
           ...item,
           id: "",
+          sort: String(index),
           isEdit: item.isEdit === true ? "1" : "0",
           isShow: item.isShow === true ? "1" : "0",
           isRequired: item.isRequired === true ? "1" : "0",
@@ -167,8 +166,9 @@ export default {
 
 <template>
   <el-dialog
+    fullscreen
     destroy-on-close
-    title="编辑"
+    title="复制"
     width="75%"
     :visible.sync="dialogFormVisible"
   >
@@ -185,6 +185,7 @@ export default {
             <el-select
               v-if="column.type === 'select'"
               v-model="form[column.prop]"
+              style="width: 100%"
             >
               <el-option label="启用" value="0"></el-option>
               <el-option label="停用" value="2"></el-option>
@@ -202,7 +203,7 @@ export default {
               >
               </el-button>
             </template>
-            <el-table :data="form.sysTemplateItemList">
+            <el-table height="450" :data="form.sysTemplateItemList">
               <el-table-column type="index" width="50"> </el-table-column>
               <el-table-column prop="code" label="字段编码" width="200">
                 <template slot-scope="scope">
@@ -259,22 +260,26 @@ export default {
               </el-table-column>
               <el-table-column fixed="right" label="操作" width="150">
                 <template slot-scope="scope">
-                  <el-button
-                    :disabled="scope.$index === 0"
-                    @click.native.prevent="onMoveRow('top', scope.$index)"
-                    icon="el-icon-top"
-                    circle
+                  <el-popover
+                    placement="left"
+                    width="200"
+                    trigger="click"
+                    style="margin-right: 8px"
                   >
-                  </el-button>
-                  <el-button
-                    :disabled="
-                      scope.$index === form.sysTemplateItemList.length - 1
-                    "
-                    @click.native.prevent="onMoveRow('bottom', scope.$index)"
-                    icon="el-icon-bottom"
-                    circle
-                  >
-                  </el-button>
+                    <el-input-number
+                      v-model="scope.row.sort"
+                      controls-position="right"
+                      @change="onMoveRow($event, scope.$index)"
+                      :min="1"
+                      :max="form.sysTemplateItemList.length"
+                    ></el-input-number>
+                    <el-button
+                      slot="reference"
+                      icon="el-icon-watermelon"
+                      circle
+                    >
+                    </el-button>
+                  </el-popover>
                   <el-button
                     @click.native.prevent="onRemoveRow(scope.row)"
                     icon="el-icon-remove"

+ 17 - 1
src/views/system/table-template/auth-dialog.vue

@@ -16,6 +16,7 @@ export default {
     //
     fetchItem(prop) {
       let { id } = prop;
+      this.form.id = id;
       this.loading = true;
       this.dialogFormVisible = true;
       listRole({ id })
@@ -39,7 +40,22 @@ export default {
         });
     },
     //
-    onSubmit() {},
+    onSubmit() {
+      auth({ templateId: this.form.id, roleIdList: this.authRoleList })
+        .then((res) => {
+          let { code } = res;
+          if (code == 200) {
+            this.dialogFormVisible = false;
+            this.$message.success("授权成功");
+            this.$parent.$children
+              .find((el) => el.$vnode.tag.indexOf("SearchTable") > -1)
+              .fetchList();
+          }
+        })
+        .finally(() => {
+          this.loading = false;
+        });
+    },
   },
   created() {},
 };

+ 41 - 24
src/views/system/table-template/edit-dialog.vue

@@ -112,16 +112,14 @@ export default {
       });
     },
     //
-    onMoveRow(direction, index1) {
-      let index2 = 0;
+    onMoveRow(index1, index2) {
       let swapArr = (arr, index1, index2) => {
         arr[index1] = arr.splice(index2, 1, arr[index1])[0];
         return arr;
       };
-      index2 = direction === "top" ? index1 - 1 : index1 + 1;
       this.form.sysTemplateItemList = swapArr(
         this.form.sysTemplateItemList,
-        index1,
+        index1 - 1,
         index2
       );
     },
@@ -136,9 +134,10 @@ export default {
     onSubmit() {
       this.loading = true;
       this.form.sysTemplateItemList = this.form.sysTemplateItemList.map(
-        (item) => ({
+        (item, index) => ({
           ...item,
           id: "",
+          sort: String(index),
           isEdit: item.isEdit === true ? "1" : "0",
           isShow: item.isShow === true ? "1" : "0",
           isRequired: item.isRequired === true ? "1" : "0",
@@ -166,8 +165,9 @@ export default {
 
 <template>
   <el-dialog
+    fullscreen
     destroy-on-close
-    title="更新"
+    title="编辑"
     width="75%"
     :visible.sync="dialogFormVisible"
   >
@@ -184,6 +184,7 @@ export default {
             <el-select
               v-if="column.type === 'select'"
               v-model="form[column.prop]"
+              style="width: 100%"
             >
               <el-option label="启用" value="0"></el-option>
               <el-option label="停用" value="2"></el-option>
@@ -195,13 +196,13 @@ export default {
             <template #label>
               <span style="margin-right: 12px">模板配置</span>
               <el-button
-                @click.native.prevent="onAdd"
+                @click.native.prevent="onAddRow"
                 icon="el-icon-plus"
                 circle
               >
               </el-button>
             </template>
-            <el-table :data="form.sysTemplateItemList">
+            <el-table height="450" :data="form.sysTemplateItemList">
               <el-table-column type="index" width="50"> </el-table-column>
               <el-table-column prop="code" label="字段编码" width="200">
                 <template slot-scope="scope">
@@ -258,22 +259,26 @@ export default {
               </el-table-column>
               <el-table-column fixed="right" label="操作" width="150">
                 <template slot-scope="scope">
-                  <el-button
-                    :disabled="scope.$index === 0"
-                    @click.native.prevent="onMoveRow('top', scope.$index)"
-                    icon="el-icon-top"
-                    circle
-                  >
-                  </el-button>
-                  <el-button
-                    :disabled="
-                      scope.$index === form.sysTemplateItemList.length - 1
-                    "
-                    @click.native.prevent="onMoveRow('bottom', scope.$index)"
-                    icon="el-icon-bottom"
-                    circle
+                  <el-popover
+                    placement="left"
+                    width="200"
+                    trigger="click"
+                    style="margin-right: 8px"
                   >
-                  </el-button>
+                    <el-input-number
+                      v-model="scope.row.sort"
+                      controls-position="right"
+                      @change="onMoveRow($event, scope.$index)"
+                      :min="1"
+                      :max="form.sysTemplateItemList.length"
+                    ></el-input-number>
+                    <el-button
+                      slot="reference"
+                      icon="el-icon-watermelon"
+                      circle
+                    >
+                    </el-button>
+                  </el-popover>
                   <el-button
                     @click.native.prevent="onRemoveRow(scope.row)"
                     icon="el-icon-remove"
@@ -298,4 +303,16 @@ export default {
   </el-dialog>
 </template>
 
-<style scoped></style>
+<style>
+.el-dialog.is-fullscreen {
+  height: 100vh;
+  display: flex;
+  flex-direction: column;
+  overflow: hidden;
+}
+
+.el-dialog.is-fullscreen .el-dialog__body {
+  flex: 1;
+  overflow-y: auto;
+}
+</style>

+ 6 - 1
src/views/system/table-template/index.vue

@@ -36,7 +36,12 @@ export default {
   --padding: var(--size);
 }
 .container {
-  width: calc(100% - calc(var(--size)));
+  width: 100%;
+  height: calc(100vh - 50px);
   margin-right: var(--padding);
 }
+.hasTagsView .container {
+  height: calc(100vh - 84px);
+  overflow: hidden;
+}
 </style>

+ 94 - 91
src/views/system/table-template/search-table.vue

@@ -9,9 +9,6 @@ export default {
         { label: "停用", value: "2" },
       ],
     };
-    const formatter = function (row, { property }, cellValue, index) {
-      return dict[property].find((item) => item.value === row[property]).label;
-    };
     const columns = [
       {
         type: "text",
@@ -42,7 +39,7 @@ export default {
         prop: "status",
         label: "启用状态",
         showOverflowTooltip: true,
-        formatter: formatter,
+        formatter: true,
       },
       {
         type: "text",
@@ -73,6 +70,7 @@ export default {
         readonly: true,
       },
     ];
+    const initDict = () => dict;
     const initColumns = () => columns;
     const initOptions = () =>
       initColumns().map((item) => ({ label: item.label, value: item.prop }));
@@ -83,80 +81,94 @@ export default {
     };
     return {
       loading: false,
+      dict: initDict(),
+      columns: initColumns(),
       form: initForm(),
       options: initOptions(),
-      columns: initColumns(),
       tableData: [],
-      selectionTableData: [],
+      currentData: {},
       page: { pageNum: 1, pageSize: 25 },
       total: 0,
     };
   },
   methods: {
     //
+    formatter({ row, column: { property } }) {
+      return this.dict[property].find((item) => item.value === row[property])
+        .label;
+    },
+    // 请求
     fetchList() {
       this.loading = true;
       list(this.from, this.page)
         .then((res) => {
           let { code, total, rows } = res;
           if (code === 200) {
-            this.tableData = rows;
             this.total = total;
-            this.$message.success("success");
+            this.tableData = rows;
+            this.currentData = rows[0];
+            this.$message.success("查询成功");
           }
         })
         .finally(() => {
           this.loading = false;
         });
     },
-    //
-    onSearch() {
+    // 搜索
+    handleSearch() {
       this.pageNum = 1;
       this.fetchList();
     },
-    //
-    onReset() {
+    // 重置
+    handleReset() {
       this.pageNum = 1;
       this.pageSize = 25;
       this.fetchList();
     },
-    //
-    onSizeChnage() {
+    // 个数
+    handleSize() {
       this.pageNum = 1;
       this.fetchList();
     },
-    //
-    onCurrentChange() {
+    // 页数
+    handleCurrent() {
       this.fetchList();
     },
-    //
-    onCopy(prop) {
+    // 高亮
+    handleRowClass({ row }) {
+      if (row.id === this.currentData.id) return "current-row";
+    },
+    // 选择
+    handleCurrentRowSelect(row) {
+      this.currentData = row;
+    },
+    // 复制
+    handleCopy(prop) {
       this.$parent.$children
         .find((el) => el.$vnode.tag.indexOf("AddDialog") > -1)
         .fetchItem(prop);
     },
-    //
-    onEdit(prop) {
+    // 编辑
+    handleEdit(prop) {
       this.$parent.$children
         .find((el) => el.$vnode.tag.indexOf("EditDialog") > -1)
         .fetchItem(prop);
     },
-    //
-    onAuth(prop) {
+    // 授权
+    handleAuth(prop) {
       this.$parent.$children
         .find((el) => el.$vnode.tag.indexOf("AuthDialog") > -1)
         .fetchItem(prop);
     },
-    //
-    onDelete(prop) {
-      let { id } = prop;
+    // 删除
+    handleDelete(prop) {
       this.loading = true;
-      remove(id)
+      remove(prop.id)
         .then((res) => {
           let { code } = res;
           if (code === 200) {
-            this.$message.success("删除成功");
             this.fetchList();
+            this.$message.success("删除成功");
           }
         })
         .finally(() => {
@@ -165,57 +177,66 @@ export default {
     },
   },
   created() {
-    this.onSearch();
+    this.handleSearch();
   },
 };
 </script>
 
 <template>
-  <el-container class="table-template-table">
+  <el-container class="table-template">
     <el-header>
-      <div class="table-header-top">
-        <span>查询条件</span>
-        <div>
-          <el-select v-model="form.select" size="small" placeholder="请选择">
-            <el-option
-              v-for="item in options"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
-          </el-select>
-          <el-input
-            v-model="form.input"
-            size="small"
-            placeholder="请输入内容"
-            :readonly="loading"
-          >
-            <template #suffix>
-              <i v-show="loading" class="el-input__icon el-icon-loading"></i>
-              <i v-show="!loading" class="el-input__icon el-icon-search"></i>
-            </template>
-          </el-input>
-          <el-button size="small" @click="onSearch">搜索</el-button>
-          <el-button size="small" @click="onReset">重置</el-button>
-        </div>
-      </div>
-      <!-- <div class="table-header-bottom">
+      <div>
+        <el-button @click.native.prevent="handleCopy(currentData)" size="small">
+          复制
+        </el-button>
+        <el-button @click.native.prevent="handleEdit(currentData)" size="small">
+          修改
+        </el-button>
+        <el-button @click.native.prevent="handleAuth(currentData)" size="small">
+          授权
+        </el-button>
         <el-button
+          @click.native.prevent="handleDelete(currentData)"
+          size="small"
+        >
+          删除
+        </el-button>
+      </div>
+      <div>
+        <el-select v-model="form.select" size="small" placeholder="请选择">
+          <el-option
+            v-for="item in options"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+        <el-input
+          v-model="form.input"
           size="small"
-          :disabled="selectionTableData.length !== 1"
-          @click="onCopy(selectionTableData[0])"
-          >复制</el-button
+          placeholder="请输入内容"
+          :readonly="loading"
         >
-      </div> -->
+          <template #suffix>
+            <i v-show="loading" class="el-input__icon el-icon-loading"></i>
+            <i v-show="!loading" class="el-input__icon el-icon-search"></i>
+          </template>
+        </el-input>
+        <el-button size="small" @click="handleSearch">搜索</el-button>
+        <el-button size="small" @click="handleReset">重置</el-button>
+      </div>
     </el-header>
     <el-main>
       <el-table
         v-loading="loading"
-        stripe
         highlight-current-row
+        height="100%"
         :data="tableData"
+        @row-click="handleCurrentRowSelect"
+        :row-class-name="handleRowClass"
       >
+        <el-table-column type="index" width="50"> </el-table-column>
         <el-table-column
           width="200"
           v-for="column in columns"
@@ -223,31 +244,18 @@ export default {
           :prop="column.prop"
           :label="column.label"
           :show-overflow-tooltip="column.showOverflowTooltip"
-          :formatter="column.formatter"
         >
-        </el-table-column>
-        <el-table-column fixed="right" label="操作" width="300">
           <template slot-scope="scope">
-            <el-button @click.native.prevent="onCopy(scope.row)" size="small">
-              复制
-            </el-button>
-            <el-button @click.native.prevent="onEdit(scope.row)" size="small">
-              修改
-            </el-button>
-            <el-button @click.native.prevent="onAuth(scope.row)" size="small">
-              授权
-            </el-button>
-            <el-button @click.native.prevent="onDelete(scope.row)" size="small">
-              删除
-            </el-button>
+            <span v-if="column.formatter">{{ formatter(scope) }}</span>
+            <span v-else>{{ scope.row[column.prop] }}</span>
           </template>
         </el-table-column>
       </el-table>
     </el-main>
     <el-footer>
       <el-pagination
-        @size-change="onSizeChnage"
-        @current-change="onCurrentChange"
+        @size-change="handleSize"
+        @current-change="handleCurrent"
         :current-page="page.pageNum"
         :page-sizes="[25, 50, 100]"
         :page-size="page.pageSize"
@@ -260,34 +268,29 @@ export default {
 </template>
 
 <style scoped>
-.table-template-table .el-header {
-  height: fit-content !important;
-  padding-top: var(--padding);
-  padding-bottom: var(--padding);
+.table-template .el-header {
   border-bottom: 1px solid #dcdfe6;
-}
-.table-template-table .table-header-top {
-  margin-bottom: var(--margin);
   display: flex;
   justify-content: space-between;
   align-items: center;
 }
-.table-template-table .table-header-top .el-select {
+
+.table-template .el-header .el-select {
   width: 150px;
   margin-right: var(--margin);
 }
-.table-template-table .table-header-top .el-input {
+.table-template .el-header .el-input {
   width: 250px;
   margin-right: var(--margin);
 }
-.table-template-table .el-main {
+.table-template .el-main {
   padding: 0;
 }
-.table-template-table .el-main .el-table {
+.table-template .el-main .el-table {
   width: 100%;
   height: 100%;
 }
-.table-template-table .el-footer {
+.table-template .el-footer {
   display: flex;
   justify-content: end;
   align-items: center;