From 3dd3abbc68a1dd587021e205d3bebf4bff3eab46 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期一, 29 一月 2024 17:44:24 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 company/src/api/business/dispatchUnit.js                        |   20 
 company/src/components/enterprise/importEmployees.vue           |   48 +
 company/src/api/business/member.js                              |    5 
 platform/src/api/system/menu.js                                 |   11 
 company/src/components/enterprise/OperaDispatchUnitWindow.vue   |  321 ++++++++++
 company/src/components/enterprise/OperaInsuranceApplyWindow.vue |  172 +++++
 company/src/components/enterprise/addEmployee.vue               |  104 +++
 platform/src/components/business/OperaDispatchUnitWindow.vue    |    1 
 company/src/api/system/menu.js                                  |    2 
 company/src/components/enterprise/selectEmployees.vue           |   78 ++
 company/src/views/enterprise/dispatchUnit.vue                   |  116 +++
 company/src/api/business/duWorktype.js                          |    6 
 platform/vue.config.js                                          |   17 
 company/src/components/common/UploadAvatarVideo.vue             |  128 ++++
 /dev/null                                                       |  107 ---
 platform/src/api/business/solutions.js                          |    0 
 platform/.env                                                   |    4 
 platform/src/components/business/dispatchUnitDetails.vue        |    1 
 company/src/components/enterprise/dispatchUnitDetails.vue       |  280 ++++++++
 company/src/views/enterprise/insuranceApply.vue                 |  125 +++
 company/src/api/business/worktype.js                            |    5 
 company/src/components/enterprise/addJobType.vue                |  285 ++++++++
 platform/.env.development                                       |   16 
 company/.env.development                                        |   10 
 24 files changed, 1,710 insertions(+), 152 deletions(-)

diff --git a/company/.env.development b/company/.env.development
index 11666cc..73caf0c 100644
--- a/company/.env.development
+++ b/company/.env.development
@@ -5,4 +5,14 @@
 
 #VUE_APP_API = 'http://192.168.0.134:10023/'
 VUE_APP_API = 'http://localhost:10023/'
+# 浼佷笟绔�-浠佸悍
+VUE_APP_API = 'http://192.168.0.134:10025/'
+
+# 骞冲彴绔�-浠佸悍
+# VUE_APP_API = 'http://192.168.0.134:10023/'
+
+# VUE_APP_API = 'http://192.168.0.134:10023/'
+
+# VUE_APP_API = 'http://localhost:10023/'
+
 # VUE_APP_API = 'http://192.168.0.134:10023/'
diff --git a/company/src/api/business/dispatchUnit.js b/company/src/api/business/dispatchUnit.js
index af8149a..873ef6f 100644
--- a/company/src/api/business/dispatchUnit.js
+++ b/company/src/api/business/dispatchUnit.js
@@ -11,3 +11,23 @@
 export function create (data) {
     return request.post('/business/dispatchUnit/create', data)
 }
+
+// 淇敼
+export function updateById (data) {
+    return request.post('/business/dispatchUnit/updateById', data)
+}
+
+// 鏍规嵁ID鏌ヨ
+export function getById (id) {
+    return request.get(`/business/dispatchUnit/${id}`)
+}
+
+// 娣诲姞宸ョ
+export function createSolution (data) {
+    return request.post('/business/dispatchUnit/createSolution', data)
+}
+
+// 淇敼淇℃伅
+export function editDispatchUnit (data) {
+    return request.post('/business/dispatchUnit/editDispatchUnit', data)
+}
diff --git a/company/src/api/business/duWorktype.js b/company/src/api/business/duWorktype.js
new file mode 100644
index 0000000..ea873af
--- /dev/null
+++ b/company/src/api/business/duWorktype.js
@@ -0,0 +1,6 @@
+import request from '../../utils/request'
+
+// 鏍规嵁ID鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/duWorktype/delete/${id}`)
+}
diff --git a/company/src/api/business/member.js b/company/src/api/business/member.js
index b902304..f336652 100644
--- a/company/src/api/business/member.js
+++ b/company/src/api/business/member.js
@@ -11,3 +11,8 @@
 export function create (data) {
     return request.post('/business/member/create', data)
 }
+
+// 鏁版嵁鍒楄〃
+export function findListByDTO (data) {
+    return request.post('/business/member/findListByDTO', data)
+}
diff --git a/company/src/api/business/worktype.js b/company/src/api/business/worktype.js
index 5d62464..c6fbbfc 100644
--- a/company/src/api/business/worktype.js
+++ b/company/src/api/business/worktype.js
@@ -9,3 +9,8 @@
 export function all (data) {
     return request.post(`/business/worktype/list`, data)
 }
+
+// 鏍规嵁鏉′欢宸ョ鍒楄〃
+export function findListByDTO (data) {
+    return request.post('/business/worktype/findListByDTO', data)
+}
diff --git a/company/src/api/system/menu.js b/company/src/api/system/menu.js
index adad7ad..0bf9f48 100644
--- a/company/src/api/system/menu.js
+++ b/company/src/api/system/menu.js
@@ -41,7 +41,7 @@
 
 // 鏌ヨ鑿滃崟鏍�
 export function fetchMenuTree () {
-  return request.get('/system/menu/treeNodes?type=0')
+  return request.get('/system/menu/treeNodes?type=1')
 }
 
 // 鎺掑簭
diff --git a/company/src/components/common/UploadAvatarVideo.vue b/company/src/components/common/UploadAvatarVideo.vue
new file mode 100644
index 0000000..5031b58
--- /dev/null
+++ b/company/src/components/common/UploadAvatarVideo.vue
@@ -0,0 +1,128 @@
+<template>
+  <div>
+    <el-upload
+      class="avatar-uploader"
+      accept=".mp4"
+      :style="customStyle"
+      :action="uploadImgUrl"
+      :data="uploadData"
+      :show-file-list="false"
+      :on-success="handleAvatarSuccess"
+      :on-error="uploadError"
+      :before-upload="beforeAvatarUpload">
+      <video v-if="file.videourlfull" :src="file.videourlfull" :style="customStyle" class="avatar" />
+      <div v-else :style="customStyle">
+        <i class="el-icon-plus avatar-uploader-icon"></i>
+        <div class="tips-style">{{ tipsLabel }}</div>
+      </div>
+    </el-upload>
+  </div>
+
+</template>
+
+<script>
+export default {
+  props: {
+    file: {
+      type: Object,
+      default: () => {}
+    },
+    tipsLabel: '',
+    customStyle: {
+      type: String,
+      default: 'width: 90px; height: 90px;'
+    },
+    uploadData: Object
+  },
+  data() {
+    return {
+      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload'
+    }
+  },
+
+  methods: {
+    // 涓婁紶鍥剧墖
+    handleAvatarSuccess(res, file) {
+      if (res.code == 200) {
+        let { data } = res
+        this.file.videourl = data.imgaddr;
+        this.file.videourlfull = data.url;
+        this.$message.success('涓婁紶鎴愬姛')
+        this.$emit('uploadSuccess', { imgurl: data.imgaddr, imgurlfull: data.url, name: data.originname })
+      } else {
+        this.$tip.apiFailed('涓婁紶澶辫触')
+      }
+      this.$emit('uploadEnd')
+    },
+    uploadError() {
+      this.$tip.apiFailed('涓婁紶澶辫触')
+      this.$emit('endUpload')
+    },
+    // // 鎷︽埅
+    beforeAvatarUpload(file) {
+      this.$emit('uploadBegin')
+      return true
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+$image-width: 100px;
+.avatar-uploader {
+  width: $image-width;
+  height: $image-width;
+}
+::v-deep .el-upload {
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  width: $image-width;
+  height: $image-width;
+  overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+  border-color: #409EFF;
+}
+.avatar-uploader-icon {
+  line-height: 90px;
+  font-size: 28px;
+  color: #8c939d;
+  width: $image-width;
+  height: $image-width;
+  text-align: center;
+}
+.avatar {
+  width: $image-width;
+  height: $image-width;
+  display: block;
+}
+.tips-style {
+  height: 13px;
+  font-size: 13px;
+  font-weight: 400;
+  color: #999999;
+  line-height: 13px;
+}
+</style>
+<style lang="scss" scoped>
+::v-deep .el-upload--picture-card{
+  width: 90px !important;
+  height: 90px !important;
+}
+::v-deep .el-upload-list__item {
+  width: 90px !important;
+  height: 90px !important;
+}
+.icon {
+  -webkit-transform: translate(-50%,-50%);
+  -ms-transform: translate(-50%,-50%);
+  transform: translate(0%, -85%);
+}
+::v-deep .el-upload-list__item {
+  width: 90px !important;
+  height: 90px !important;
+}
+</style>
+
diff --git a/company/src/components/enterprise/OperaDispatchUnitWindow.vue b/company/src/components/enterprise/OperaDispatchUnitWindow.vue
new file mode 100644
index 0000000..87892b7
--- /dev/null
+++ b/company/src/components/enterprise/OperaDispatchUnitWindow.vue
@@ -0,0 +1,321 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-form :model="form" ref="form" :rules="rules">
+            <el-form-item label="娲鹃仯鍗曚綅鍚嶇О" prop="name">
+                <el-input v-model="form.name" placeholder="璇疯緭鍏�" v-trim/>
+            </el-form-item>
+            <el-form-item label="娲鹃仯鍗曚綅淇$敤浠g爜" prop="code">
+                <el-input v-model="form.code" placeholder="璇疯緭鍏�" v-trim/>
+            </el-form-item>
+            <el-form-item label="娲鹃仯鍗曚綅鎻忚堪" prop="content">
+                <el-input v-model="form.content" placeholder="璇疯緭鍏�" v-trim/>
+            </el-form-item>
+        </el-form>
+        <div class="list" v-if="form.type !== 1">
+            <el-button type="primary" style="margin-bottom: 15px;" @click="add">娣诲姞鏂规</el-button>
+            <div class="list_item" v-for="(item, index) in form.saveDuSolutionDTOList" :key="index">
+                <div class="list_item_input">
+                    <div class="list_item_input_label"><span>*</span>淇濋櫓鏂规</div>
+                    <div class="list_item_input_val">
+                        <el-select v-model="item.solutionId" @change="changeTypeWork($event, index)" placeholder="璇烽�夋嫨">
+                            <el-option
+                                v-for="item in insuranceScheme"
+                                :key="item.id"
+                                :label="item.name"
+                                :value="item.id">
+                            </el-option>
+                        </el-select>
+                        <div style="display: flex; align-items: center;">
+                            <el-button type="primary" @click="addItem(index)">娣诲姞</el-button>
+                            <el-button type="danger" @click="deleItem(index)">鍒犻櫎</el-button>
+                        </div>
+                    </div>
+                </div>
+                <div class="list_item_table">
+                    <el-table
+                        :data="item.saveDuWorkTypeDTOList"
+                        border
+                        style="width: 100%">
+                        <el-table-column label="搴忓彿" width="80px">
+                            <template slot-scope="scope">
+                                <span>{{scope.$index + 1}}</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            prop="name"
+                            label="鎵�灞炲伐绉�">
+                            <template slot-scope="scope">
+                                <el-select v-model="scope.row.workTypeId" @change="changeGZ($event, index, scope.$index)" placeholder="璇烽�夋嫨">
+                                    <el-option
+                                        v-for="item in item.typeWork"
+                                        :key="item.id"
+                                        :label="item.name"
+                                        :value="item.id">
+                                    </el-option>
+                                </el-select>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            prop="address"
+                            label="鎿嶄綔瑙嗛锛堥潪蹇呭~锛�">
+                            <template slot-scope="scope">
+                                <div style="width: 100px; height: 100px;">
+                                    <UploadAvatarVideo :uploadData="{ folder: 'unit' }" :file="scope.row.file" @uploadSuccess="result($event, index, scope.$index)" />
+                                </div>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            label="鎿嶄綔"
+                            width="90"
+                            fixed="right">
+                            <template slot-scope="scope">
+                                <el-button type="text" @click="dele(index, scope.$index)">鍒犻櫎</el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                </div>
+            </div>
+        </div>
+    </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import UploadAvatarVideo from '@/components/common/UploadAvatarVideo'
+import { all } from '@/api/business/solutions'
+import { findListByDTO } from '@/api/business/worktype'
+import { editDispatchUnit } from '@/api/business/dispatchUnit'
+export default {
+  name: 'OperaDispatchUnitWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow, UploadAvatarVideo },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        name: '',
+        code: '',
+        content: '',
+        type: '',
+        saveDuSolutionDTOList: [
+          {
+            id: '',
+            saveDuWorkTypeDTOList: [
+              {
+                videoUrl: '',
+                workTypeId: '',
+                workTypeName: '',
+                file: {
+                  videourl: '',
+                  videourlfull: ''
+                }
+              }
+            ],
+            typeWork: [],
+            solutionId: '',
+            solutionName: ''
+          }
+        ]
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+        name: [
+          { required: true, message: '璇疯緭鍏ユ淳閬e崟浣嶅悕绉�' }
+        ],
+        code: [
+          { required: true, message: '璇疯緭鍏ユ淳閬e崟浣嶄俊鐢ㄤ唬鐮�' }
+        ],
+        content: [
+          { required: true, message: '璇疯緭鍏ユ淳閬e崟浣嶆弿杩�' }
+        ]
+      },
+      insuranceScheme: []
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/dispatchUnit',
+      'field.id': 'id'
+    })
+    all({})
+      .then(res => {
+        this.insuranceScheme = res
+      })
+  },
+  methods: {
+    open (title, target) {
+      this.title = title
+      this.visible = true
+      this.form.saveDuSolutionDTOList = [
+        {
+          id: '',
+          saveDuWorkTypeDTOList: [
+            {
+              videoUrl: '',
+              workTypeId: '',
+              workTypeName: '',
+              file: {
+                videourl: '',
+                videourlfull: ''
+              }
+            }
+          ],
+          typeWork: [],
+          solutionId: '',
+          solutionName: ''
+        }
+      ]
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+      })
+    },
+      // 纭淇敼
+      __confirmEdit () {
+          this.$refs.form.validate((valid) => {
+              if (!valid) {
+                  return
+              }
+              // 璋冪敤鏂板缓鎺ュ彛
+              this.isWorking = true
+              editDispatchUnit(this.form)
+                  .then(() => {
+                      this.visible = false
+                      this.$tip.apiSuccess('淇敼鎴愬姛')
+                      this.$emit('success')
+                  })
+                  .catch(e => {
+                      this.$tip.apiFailed(e)
+                  })
+                  .finally(() => {
+                      this.isWorking = false
+                  })
+          })
+      },
+    // 鍒囨崲宸ョ
+    changeGZ(a, b, c) {
+      let text = ''
+      this.form.saveDuSolutionDTOList[b].typeWork.forEach(item => {
+        if (item.id === a) {
+          text = item.name
+        }
+      })
+      this.form.saveDuSolutionDTOList[b].saveDuWorkTypeDTOList[c].workTypeName = text
+    },
+    // 鍒囨崲鏂规
+    changeTypeWork(id, index) {
+      findListByDTO({ queryType: 0, id })
+        .then(res => {
+          this.form.saveDuSolutionDTOList[index].typeWork = res
+        })
+      let text = ''
+      this.insuranceScheme.forEach(item => {
+        if (item.id === id) {
+          text = item.name
+        }
+      })
+      this.form.saveDuSolutionDTOList[index].solutionName = text
+    },
+    add() {
+      this.form.saveDuSolutionDTOList.unshift({
+          id: '',
+          saveDuWorkTypeDTOList: [
+              {
+                  videoUrl: '',
+                  workTypeId: '',
+                  workTypeName: '',
+                  file: {
+                      videourl: '',
+                      videourlfull: ''
+                  }
+              }
+          ],
+          typeWork: [],
+          solutionId: '',
+          solutionName: ''
+      })
+    },
+    addItem(index) {
+      this.form.saveDuSolutionDTOList[index].saveDuWorkTypeDTOList.push({
+        videoUrl: '',
+        workTypeId: '',
+        file: {
+          videourl: '',
+          videourlfull: ''
+        }
+      })
+    },
+    deleItem(index) {
+      if (this.form.saveDuSolutionDTOList.length === 1) {
+        this.$message.warning('鑷冲皯淇濈暀涓�椤瑰唴瀹�')
+        return
+      }
+      this.form.saveDuSolutionDTOList.splice(index, 1)
+    },
+    result(e, a, b) {
+      this.form.saveDuSolutionDTOList[a].saveDuWorkTypeDTOList[b].videoUrl = e.imgurl
+    },
+    dele(a, b) {
+      if (this.form.saveDuSolutionDTOList[a].saveDuWorkTypeDTOList.length === 1) {
+        this.$message.warning('鑷冲皯淇濈暀涓�椤瑰唴瀹�')
+        return
+      }
+      this.form.saveDuSolutionDTOList[a].saveDuWorkTypeDTOList.splice(b, 1)
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+    .list {
+        width: 100%;
+        margin-bottom: 20px;
+        .list_item {
+            width: 100%;
+            margin-bottom: 20px;
+            &:last-child {
+                margin: 0 !important;
+            }
+            .list_item_input {
+                width: 100%;
+                margin-bottom: 15px;
+                .list_item_input_label {
+                    margin-bottom: 10px;
+                    font-size: 14px;
+                    color: #606266;
+                    span {
+                        color: red;
+                        margin-right: 4px;
+                    }
+                }
+                .list_item_input_val {
+                    width: 100%;
+                    display: flex;
+                    align-items: center;
+                    justify-content: space-between;
+                }
+            }
+            .list_item_table {
+
+            }
+        }
+    }
+</style>
diff --git a/company/src/components/enterprise/OperaInsuranceApplyWindow.vue b/company/src/components/enterprise/OperaInsuranceApplyWindow.vue
new file mode 100644
index 0000000..5b6018b
--- /dev/null
+++ b/company/src/components/enterprise/OperaInsuranceApplyWindow.vue
@@ -0,0 +1,172 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :withFooter="false"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <div class="list">
+            <el-form :inline="true" :model="form" :rules="rules" class="demo-form-inline">
+                <el-form-item label="淇濋櫓鏂规" prop="solutionId">
+                    <el-select v-model="form.solutionId" placeholder="璇烽�夋嫨">
+                        <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+                        <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="鏈熸湜淇濋櫓鐢熸晥璧锋湡" prop="applyStartTime">
+                    <div style="display: flex; flex-direction: column;">
+                        <el-date-picker
+                                v-model="form.applyStartTime"
+                                type="date"
+                                placeholder="閫夋嫨鏃ユ湡">
+                        </el-date-picker>
+                        <span style="color: #F95601; font-size: 14px;">锛堟鏃ョ敓鏁堟姇淇濊浜�17:30鍓嶆彁浜わ紝瓒呮椂鎻愪氦浠ヤ繚闄╁崟涓哄噯锛�</span>
+                    </div>
+                </el-form-item>
+                <el-form-item label="淇濋櫓鐢熸晥姝㈡湡" prop="applyEndTime">
+                    <el-date-picker
+                        v-model="form.applyEndTime"
+                        type="date"
+                        placeholder="閫夋嫨鏃ユ湡">
+                    </el-date-picker>
+                </el-form-item>
+                <el-form-item label="鎶曚繚骞撮緞">
+                    <span>25鑷�65</span>
+                </el-form-item>
+                <el-form-item label="璐圭敤">
+                    <span>200鍏�/骞�/浜�</span>
+                </el-form-item>
+            </el-form>
+        </div>
+        <div class="btns">
+            <div class="btns_item">
+                <el-button type="primary" @click="$refs.selectEmployees.open('閫夊彇鍛樺伐')">閫夊彇鍛樺伐</el-button>
+                <el-button type="primary">瀵煎叆鍛樺伐</el-button>
+                <el-button type="primary" @click="$refs.addEmployee.open('娣诲姞鍛樺伐', tableData)">娣诲姞鍛樺伐</el-button>
+            </div>
+            <div class="btns_item">
+                <el-button type="primary">閫夊彇娲鹃仯鍗曚綅</el-button>
+            </div>
+        </div>
+        <el-table
+            :data="tableData"
+            border
+            style="width: 100%;margin-bottom: 15px;">
+            <el-table-column label="搴忓彿" width="80px">
+                <template slot-scope="scope">
+                    <span>{{scope.$index + 1}}</span>
+                </template>
+            </el-table-column>
+            <el-table-column
+                prop="name"
+                label="濮撳悕">
+            </el-table-column>
+            <el-table-column
+                prop="idcardNo"
+                label="韬唤璇佸彿">
+            </el-table-column>
+            <el-table-column
+                prop="address"
+                label="骞撮緞">
+            </el-table-column>
+            <el-table-column
+                prop="address"
+                label="娲鹃仯鍗曚綅">
+            </el-table-column>
+            <el-table-column
+                prop="address"
+                label="鎵�灞炲伐绉�">
+            </el-table-column>
+            <el-table-column
+                prop="address"
+                label="璐圭敤">
+            </el-table-column>
+            <el-table-column
+                prop="address"
+                label="鎿嶄綔">
+            </el-table-column>
+        </el-table>
+        <div class="submit">
+            <el-button type="primary">鎶曚繚鐢宠</el-button>
+        </div>
+        <div class="info">
+            瀵屾枃鏈�
+        </div>
+        <!--    閫夋嫨鍛樺伐    -->
+        <selectEmployees ref="selectEmployees" />
+        <!--    娣诲姞鍛樺伐    -->
+        <addEmployee ref="addEmployee" @result="getValue" />
+    </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import selectEmployees from '@/components/enterprise/selectEmployees'
+import addEmployee from '@/components/enterprise/addEmployee'
+export default {
+  name: 'OperaInsuranceApplyWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow, selectEmployees, addEmployee },
+  data () {
+    return {
+      form: {
+          id: null,
+          solutionId: '',
+          applyStartTime: '',
+          applyEndTime: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+          solutionId: [
+              { required: true, message: '璇烽�夋嫨淇濋櫓鏂规' }
+          ],
+          applyStartTime: [
+              { required: true, message: '璇烽�夋嫨鏈熸湜淇濋櫓鐢熸晥璧锋湡' }
+          ]
+      },
+      tableData: []
+    }
+  },
+  created () {
+      this.config({
+          api: '/business/insuranceApply',
+          'field.id': 'id'
+      })
+  },
+  methods: {
+      getValue(list) {
+          this.tableData.push(...list)
+      }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+    .list {
+        width: 100%;
+    }
+    .btns {
+        width: 100%;
+        margin-bottom: 15px;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .btns_item {
+            display: flex;
+            align-items: center;
+        }
+    }
+    .submit {
+        width: 100%;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        margin-bottom: 15px;
+    }
+    .info {
+        width: 100%;
+    }
+</style>
diff --git a/company/src/components/enterprise/addEmployee.vue b/company/src/components/enterprise/addEmployee.vue
new file mode 100644
index 0000000..075e407
--- /dev/null
+++ b/company/src/components/enterprise/addEmployee.vue
@@ -0,0 +1,104 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-form :inline="true" class="demo-form-inline">
+            <div v-for="(item, index) in list" :key="index">
+                <el-form-item label="濮撳悕" required>
+                    <el-input v-model="item.name" placeholder="璇疯緭鍏�"></el-input>
+                </el-form-item>
+                <el-form-item label="韬唤璇佸彿" required>
+                    <el-input v-model="item.idcardNo" maxlength="18" placeholder="璇疯緭鍏�"></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" v-if="index === 0" @click="add">娣诲姞</el-button>
+                    <el-button type="danger" v-else @click="dele(index)">鍒犻櫎</el-button>
+                </el-form-item>
+            </div>
+        </el-form>
+    </GlobalWindow>
+</template>
+
+<script>
+    import BaseOpera from '@/components/base/BaseOpera'
+    import GlobalWindow from '@/components/common/GlobalWindow'
+    export default {
+        name: 'addEmployee',
+        extends: BaseOpera,
+        components: { GlobalWindow },
+        data () {
+            return {
+                list: [
+                    {
+                        name: '',
+                        idcardNo: ''
+                    }
+                ],
+                arr: []
+            }
+        },
+        methods: {
+            open (title, arr) {
+                this.title = title
+                this.visible = true
+                this.list = [
+                    {
+                        name: '',
+                        idcardNo: ''
+                    }
+                ]
+                this.arr = arr
+            },
+            add() {
+                this.list.push({
+                    name: '',
+                    idCard: ''
+                })
+            },
+            dele(index) {
+                this.form.list.splice(index, 1)
+            },
+            hasDuplicates(arr) {
+                return arr.some((value, index) => arr.indexOf(value) !== index);
+            },
+            confirm() {
+                // 鍒ゆ柇鍒楄〃鍚︽槸鏈夌┖鍊�
+                for (let i = 0; this.list.length; i++) {
+                    if (!this.list[i].name || !this.list[i].idcardNo) {
+                        this.$message.warning('璇峰厛瀹屽杽淇℃伅鍚庡啀鎻愪氦')
+                        return
+                    }
+                }
+                // 鍒ゆ柇鏂板綍鍏ユ暟鎹韩浠借瘉鏄惁鏈夐噸澶�
+                let idcardList = this.list.map(item => item.idcardNo)
+                if (this.hasDuplicates(idcardList)) {
+                    this.$message.warning('韬唤璇佹湁閲嶅')
+                    return
+                }
+                // 鍒ゆ柇璇︽儏鍒楄〃鏁版嵁韬唤璇佹槸鍚︽湁閲嶅
+                let next = true
+                this.list.forEach(item => {
+                    this.arr.forEach(child => {
+                        if (item.idcardNo === child.idcardNo) {
+                            next = false
+                        }
+                    })
+                })
+                if (next) {
+                    this.$emit('result', this.list)
+                    this.visible = false
+                } else {
+                    this.$message.warning('韬唤璇佸彿涓嶈兘閲嶅锛�')
+                }
+            }
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/company/src/components/enterprise/addJobType.vue b/company/src/components/enterprise/addJobType.vue
new file mode 100644
index 0000000..7c422de
--- /dev/null
+++ b/company/src/components/enterprise/addJobType.vue
@@ -0,0 +1,285 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <div class="list">
+            <el-button type="primary" style="margin-bottom: 15px;" @click="add">娣诲姞鏂规</el-button>
+            <div class="list_item" v-for="(item, index) in form.saveDuSolutionDTOList" :key="index">
+                <div class="list_item_input">
+                    <div class="list_item_input_label"><span>*</span>淇濋櫓鏂规</div>
+                    <div class="list_item_input_val">
+                        <el-select v-model="item.solutionId" @change="changeTypeWork($event, index)" placeholder="璇烽�夋嫨">
+                            <el-option
+                                v-for="item in insuranceScheme"
+                                :key="item.id"
+                                :label="item.name"
+                                :value="item.id">
+                            </el-option>
+                        </el-select>
+                        <div style="display: flex; align-items: center;">
+                            <el-button type="primary" @click="addItem(index)">娣诲姞</el-button>
+                            <el-button type="danger" @click="deleItem(index)">鍒犻櫎</el-button>
+                        </div>
+                    </div>
+                </div>
+                <div class="list_item_table">
+                    <el-table
+                        :data="item.saveDuWorkTypeDTOList"
+                        border
+                        style="width: 100%">
+                        <el-table-column label="搴忓彿" width="80px">
+                            <template slot-scope="scope">
+                                <span>{{scope.$index + 1}}</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            prop="name"
+                            label="鎵�灞炲伐绉�">
+                            <template slot-scope="scope">
+                                <el-select v-model="scope.row.workTypeId" @change="changeGZ($event, index, scope.$index)" placeholder="璇烽�夋嫨">
+                                    <el-option
+                                        v-for="item in item.typeWork"
+                                        :key="item.id"
+                                        :label="item.name"
+                                        :value="item.id">
+                                    </el-option>
+                                </el-select>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            prop="address"
+                            label="鎿嶄綔瑙嗛锛堥潪蹇呭~锛�">
+                            <template slot-scope="scope">
+                                <div style="width: 100px; height: 100px;">
+                                    <UploadAvatarVideo :uploadData="{ folder: 'unit' }" :file="scope.row.file" @uploadSuccess="result($event, index, scope.$index)" />
+                                </div>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
+                            label="鎿嶄綔"
+                            width="90"
+                            fixed="right">
+                            <template slot-scope="scope">
+                                <el-button type="text" @click="dele(index, scope.$index)">鍒犻櫎</el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                </div>
+            </div>
+        </div>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import UploadAvatarVideo from '@/components/common/UploadAvatarVideo'
+  import { all } from '@/api/business/solutions'
+  import { findListByDTO } from '@/api/business/worktype'
+  import { createSolution } from '@/api/business/dispatchUnit'
+  export default {
+    name: 'addJobType',
+    extends: BaseOpera,
+    components: { GlobalWindow, UploadAvatarVideo },
+    data () {
+      return {
+        // 琛ㄥ崟鏁版嵁
+        form: {
+          id: null,
+          saveDuSolutionDTOList: [
+            {
+              id: '',
+              saveDuWorkTypeDTOList: [
+                {
+                  videoUrl: '',
+                  workTypeId: '',
+                  workTypeName: '',
+                  file: {
+                    videourl: '',
+                    videourlfull: ''
+                  }
+                }
+              ],
+              typeWork: [],
+              solutionId: '',
+              solutionName: ''
+            }
+          ]
+        },
+        insuranceScheme: []
+      }
+    },
+    created () {
+      this.config({
+        api: '/business/dispatchUnit',
+        'field.id': 'id'
+      })
+    },
+    methods: {
+        confirm() {
+            for (let i = 0; i < this.form.saveDuSolutionDTOList.length; i++) {
+                if (!this.form.saveDuSolutionDTOList[i].solutionId) {
+                    this.$message.warning(`绗�${i + 1}椤规柟妗堜笉鑳戒负绌猴紒`)
+                    return
+                }
+                for (let a = 0; a < this.form.saveDuSolutionDTOList[i].saveDuWorkTypeDTOList.length; a++) {
+                    if (!this.form.saveDuSolutionDTOList[i].saveDuWorkTypeDTOList[a].workTypeId) {
+                        this.$message.warning(`绗�${i + 1}椤规柟妗堝伐绉嶄笉鑳戒负绌猴紒`)
+                        return
+                    }
+                }
+            }
+            this.isWorking = true
+            createSolution(this.form)
+                .then(() => {
+                    this.visible = false
+                    this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+                    this.$emit('success')
+                })
+                .catch(e => {
+                    this.$tip.apiFailed(e)
+                })
+                .finally(() => {
+                    this.isWorking = false
+                })
+        },
+        deleItem(index) {
+            if (this.form.saveDuSolutionDTOList.length === 1) {
+                this.$message.warning('鑷冲皯淇濈暀涓�椤瑰唴瀹�')
+                return
+            }
+            this.form.saveDuSolutionDTOList.splice(index, 1)
+        },
+        open (title, target) {
+            this.title = title
+            this.visible = true
+            this.form.id = target.id
+            this.form.saveDuSolutionDTOList = [
+                {
+                    id: '',
+                    saveDuWorkTypeDTOList: [
+                        {
+                            videoUrl: '',
+                            workTypeId: '',
+                            workTypeName: '',
+                            file: {
+                                videourl: '',
+                                videourlfull: ''
+                            }
+                        }
+                    ],
+                    typeWork: [],
+                    solutionId: '',
+                    solutionName: ''
+                }
+            ]
+            all({})
+              .then(res => {
+                this.insuranceScheme = res
+              })
+        },
+        // 鍒囨崲宸ョ
+        changeGZ(a, b, c) {
+            let text = ''
+            this.form.saveDuSolutionDTOList[b].typeWork.forEach(item => {
+                if (item.id === a) {
+                    text = item.name
+                }
+            })
+            this.form.saveDuSolutionDTOList[b].saveDuWorkTypeDTOList[c].workTypeName = text
+        },
+        addItem(index) {
+            this.form.saveDuSolutionDTOList[index].saveDuWorkTypeDTOList.push({
+                videoUrl: '',
+                workTypeId: '',
+                file: {
+                    videourl: '',
+                    videourlfull: ''
+                }
+            })
+        },
+        result(e, a, b) {
+            this.form.saveDuSolutionDTOList[a].saveDuWorkTypeDTOList[b].videoUrl = e.imgurl
+        },
+        dele(a, b) {
+            if (this.form.saveDuSolutionDTOList[a].saveDuWorkTypeDTOList.length === 1) {
+                this.$message.warning('鑷冲皯淇濈暀涓�椤瑰唴瀹�')
+                return
+            }
+            this.form.saveDuSolutionDTOList[a].saveDuWorkTypeDTOList.splice(b, 1)
+        },
+        add() {
+            this.form.saveDuSolutionDTOList.unshift({
+                id: '',
+                saveDuWorkTypeDTOList: [
+                    {
+                        videoUrl: '',
+                        workTypeId: '',
+                        workTypeName: '',
+                        file: {
+                            videourl: '',
+                            videourlfull: ''
+                        }
+                    }
+                ],
+                typeWork: [],
+                solutionId: ''
+            })
+        },
+        // 鍒囨崲鏂规
+        changeTypeWork(id, index) {
+            console.log(index)
+            findListByDTO({ queryType: 0, id })
+                .then(res => {
+                    this.form.saveDuSolutionDTOList[index].typeWork = res
+                })
+            let text = ''
+            this.insuranceScheme.forEach(item => {
+                if (item.id === id) {
+                    text = item.name
+                }
+            })
+            this.form.saveDuSolutionDTOList[index].solutionName = text
+        },
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+    .list {
+        width: 100%;
+        margin-bottom: 20px;
+        .list_item {
+            width: 100%;
+            margin-bottom: 20px;
+            &:last-child {
+                margin: 0 !important;
+            }
+            .list_item_input {
+                width: 100%;
+                margin-bottom: 15px;
+                .list_item_input_label {
+                    margin-bottom: 10px;
+                    font-size: 14px;
+                    color: #606266;
+                    span {
+                        color: red;
+                        margin-right: 4px;
+                    }
+                }
+                .list_item_input_val {
+                    width: 100%;
+                    display: flex;
+                    align-items: center;
+                    justify-content: space-between;
+                }
+            }
+            .list_item_table {
+
+            }
+        }
+    }
+</style>
diff --git a/company/src/components/enterprise/dispatchUnitDetails.vue b/company/src/components/enterprise/dispatchUnitDetails.vue
new file mode 100644
index 0000000..33c07bd
--- /dev/null
+++ b/company/src/components/enterprise/dispatchUnitDetails.vue
@@ -0,0 +1,280 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <div class="info">
+            <div class="info_list">
+                <div class="info_list_item">
+                    <div class="info_list_item_label">娲鹃仯鍗曚綅锛�</div>
+                    <div class="info_list_item_val">{{form.name}}</div>
+                </div>
+                <div class="info_list_item">
+                    <div class="info_list_item_label">娲鹃仯鍗曚綅淇$敤浠g爜锛�</div>
+                    <div class="info_list_item_val">{{form.code}}</div>
+                </div>
+                <div class="info_list_item">
+                    <div class="info_list_item_label">娲鹃仯鍗曚綅鐘舵�侊細</div>
+                    <div class="info_list_item_val" v-if="form.unitStatus === 0">寰呭鏍�</div>
+                    <div class="info_list_item_val" style="color: green;" v-if="form.unitStatus === 1">瀹℃牳閫氳繃</div>
+                    <div class="info_list_item_val" style="color: red;" v-if="form.unitStatus === 2">瀹℃牳涓嶉�氳繃</div>
+                </div>
+                <div class="info_list_item">
+                    <div class="info_list_item_label">娲鹃仯鍗曚綅璇﹁堪锛�</div>
+                    <div class="info_list_item_val">{{form.content}}</div>
+                </div>
+            </div>
+            <div class="info_btns">
+                <el-button type="primary" @click="edit">淇敼娲鹃仯鍗曚綅</el-button>
+                <el-button type="primary" @click="$refs.addJobType.open('娣诲姞宸ョ', { id: form.id })">娣诲姞宸ョ</el-button>
+            </div>
+            <div class="info_table">
+                <div class="info_table_item" v-for="(item, index) in form.duSolutionList" :key="index">
+                    <div class="info_table_item_label">淇濋櫓鏂规锛歿{item.solutionName}}</div>
+                    <div class="info_table_item_content">
+                        <el-table
+                            :data="item.duWorktypeList"
+                            border
+                            style="width: 100%">
+                            <el-table-column label="搴忓彿" width="80px">
+                                <template slot-scope="scope">
+                                    <span>{{scope.$index + 1}}</span>
+                                </template>
+                            </el-table-column>
+                            <el-table-column
+                                prop="workTypeName"
+                                label="鎵�灞炲伐绉�">
+                            </el-table-column>
+                            <el-table-column
+                                prop="name"
+                                label="鎿嶄綔瑙嗛">
+                                <template slot-scope="{row}">
+                                    <video loop controls width="150px" height="150px" :src="row.videoUrlFull"></video>
+                                </template>
+                            </el-table-column>
+                            <el-table-column
+                                prop="checkDate"
+                                label="瀹℃牳閫氳繃鏃ユ湡">
+                            </el-table-column>
+                            <el-table-column
+                                label="鐘舵��">
+                                <template slot-scope="{row}">
+                                    <span v-if="row.status === 0">寰呭鏍�</span>
+                                    <span v-if="row.status === 1">瀹℃牳閫氳繃</span>
+                                    <span v-if="row.status === 2">瀹℃牳涓嶉�氳繃</span>
+                                </template>
+                            </el-table-column>
+                            <el-table-column
+                                label="鎿嶄綔">
+                                <template slot-scope="scope">
+                                    <el-button type="text" style="color: red;" v-if="scope.row.status === 2" @click="dele(scope.row.id, index, scope.$index)">鍒犻櫎</el-button>
+                                </template>
+                            </el-table-column>
+                        </el-table>
+                    </div>
+                </div>
+            </div>
+            <div class="info_status">
+                <div class="info_status_label">瀹℃牳娴佺▼</div>
+                <div class="info_status_list">
+                    <el-timeline :reverse="reverse">
+                        <el-timeline-item
+                            v-for="(activity, index) in form.duLogList"
+                            :key="index">
+                            <div style="display: flex; flex-direction: column;">
+                                <span style="font-size: 16px; font-weight: 400; color: black;">
+                                    {{activity.title}}
+                                    <span style="font-size: 16px; font-weight: 400; color: black; margin-left: 10px;" v-if="activity.objType === 5 || activity.objType === 6 || activity.objType === 1 || activity.objType === 2">
+                                        鎻愪氦鎰忚: -
+                                    </span>
+                                </span>
+                                <span style="margin-top: 5px; font-size: 12px; font-weight: 400; color: #999999;">
+                                    鎿嶄綔鍛�-{{activity.creatorName}}锛坽{activity.companyName}}锛墈{activity.createDate}}
+                                </span>
+                            </div>
+                        </el-timeline-item>
+                    </el-timeline>
+                </div>
+            </div>
+        </div>
+        <!--    娣诲姞鏂规    -->
+        <addJobType ref="addJobType" @success="callback" />
+        <!-- 缂栬緫 -->
+        <OperaDispatchUnitWindow ref="OperaDispatchUnitWindow" @success="callback" />
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import addJobType from '@/components/enterprise/addJobType'
+  import OperaDispatchUnitWindow from '@/components/enterprise/OperaDispatchUnitWindow'
+  import { getById } from '@/api/business/dispatchUnit'
+  import { deleteById } from '@/api/business/duWorktype'
+  export default {
+    name: 'dispatchUnitDetails',
+    extends: BaseOpera,
+    components: { GlobalWindow, addJobType, OperaDispatchUnitWindow },
+    data () {
+      return {
+        // 琛ㄥ崟鏁版嵁
+        form: {
+          id: null,
+          name: '',
+          code: '',
+          content: '',
+          unitStatus: '',
+          duLogList: [],
+          duSolutionList: [],
+          saveDuSolutionDTOList: [
+            {
+              id: '',
+              saveDuWorkTypeDTOList: [
+                {
+                  videoUrl: '',
+                  workTypeId: '',
+                  file: {
+                    videourl: '',
+                    videourlfull: ''
+                  }
+                }
+              ],
+              typeWork: [],
+              solutionId: ''
+            }
+          ]
+        },
+        tableData: [],
+        insuranceScheme: [],
+        reverse: true,
+        activities: []
+      }
+    },
+    created () {
+      this.config({
+        api: '/business/dispatchUnit',
+        'field.id': 'id'
+      })
+    },
+    methods: {
+        edit() {
+            this.$confirm('淇敼娲鹃仯鍗曚綅浼氬鑷磋娲鹃仯鍗曚綅涓嶅彲鐢紝濡傛偍闇�瑕佷慨鏀硅娲鹃仯鍗曚綅鐨勪娇鐢ㄤ繚闄╂柟妗堝強宸ョ璇风偣鍑烩�滄坊鍔犲伐绉嶁�濇寜閽��', '娓╅Θ鎻愰啋', {
+                confirmButtonText: '纭畾',
+                cancelButtonText: '鍙栨秷',
+                type: 'warning'
+            }).then(() => {
+                this.$refs.OperaDispatchUnitWindow.open('缂栬緫娲鹃仯鍗曚綅', {
+                    id: this.form.id,
+                    name: this.form.name,
+                    code: this.form.code,
+                    content: this.form.content,
+                    type: 1
+                })
+            }).catch(() => {
+
+            });
+        },
+      dele (id, b, c) {
+        this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ュ伐绉�, 鏄惁缁х画?', '鎻愮ず', {
+          confirmButtonText: '纭畾',
+          cancelButtonText: '鍙栨秷',
+          type: 'warning'
+        }).then(() => {
+          deleteById(id)
+            .then(res => {
+              this.$message.success('鍒犻櫎鎴愬姛')
+              this.getDetails()
+            })
+        }).catch(() => {
+
+        });
+      },
+      open (title, target) {
+        this.title = title
+        this.form.id = target.id
+        this.visible = true
+        this.getDetails()
+      },
+      async getDetails() {
+        let res = await getById(this.form.id)
+        for (const key in this.form) {
+          this.form[key] = res[key]
+        }
+      },
+      callback() {
+          this.visible = false
+          this.$emit('success')
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+    .info {
+        width: 100%;
+        .info_list {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            flex-wrap: wrap;
+            .info_list_item {
+                width: 33.3%;
+                display: flex;
+                align-items: center;
+                margin-bottom: 15px;
+                .info_list_item_label {
+                    flex-shrink: 0;
+                    width: 150px;
+                    font-size: 14px;
+                    color: black;
+                }
+                .info_list_item_val {
+                    flex: 1;
+                    font-size: 14px;
+                    color: black;
+                }
+            }
+        }
+        .info_btns {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            margin-bottom: 15px;
+        }
+        .info_table {
+            width: 100%;
+            display: flex;
+            flex-direction: column;
+            margin-bottom: 15px;
+            .info_table_item {
+                width: 100%;
+                display: flex;
+                flex-direction: column;
+                margin-bottom: 15px;
+                &:last-child {
+                    margin: 0 !important;
+                }
+                .info_table_item_label {
+                    font-size: 14px;
+                    color: black;
+                    margin-bottom: 10px;
+                }
+                .info_table_item_content {
+                    width: 100%;
+                }
+            }
+        }
+        .info_status {
+            width: 100%;
+            .info_status_label {
+                width: 100%;
+                font-size: 18px;
+                font-weight: bold;
+                margin-bottom: 15px;
+            }
+        }
+    }
+</style>
diff --git a/company/src/components/enterprise/importEmployees.vue b/company/src/components/enterprise/importEmployees.vue
new file mode 100644
index 0000000..ccba938
--- /dev/null
+++ b/company/src/components/enterprise/importEmployees.vue
@@ -0,0 +1,48 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-form class="demo-form-inline">
+            <el-form-item label="涓婁紶鍚嶅崟" required>
+                <el-button type="primary" @click="clickRef">鐐瑰嚮涓婁紶</el-button>
+                <el-button type="text">鍚嶅崟妯℃澘.EXCEL</el-button>
+            </el-form-item>
+        </el-form>
+        <input type="file" accept=".excel" ref="fileExcel" @change="result" />
+    </GlobalWindow>
+</template>
+
+<script>
+    import BaseOpera from '@/components/base/BaseOpera'
+    import GlobalWindow from '@/components/common/GlobalWindow'
+    export default {
+        name: 'importEmployees',
+        extends: BaseOpera,
+        components: { GlobalWindow },
+        data () {
+            return {
+                list: []
+            }
+        },
+        methods: {
+            open (title, arr) {
+                this.title = title
+                this.visible = true
+            },
+            clickRef () {
+                this.$refs.fileExcel.click()
+            },
+            result (e) {
+                console.log(e)
+            }
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/company/src/components/enterprise/selectEmployees.vue b/company/src/components/enterprise/selectEmployees.vue
new file mode 100644
index 0000000..c25116c
--- /dev/null
+++ b/company/src/components/enterprise/selectEmployees.vue
@@ -0,0 +1,78 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-input v-model="val" placeholder="鏌ヨ鍛樺伐濮撳悕" @keypress.enter.native="getList" style="margin-bottom: 15px;"></el-input>
+        <el-table
+            :data="list"
+            border
+            style="width: 100%">
+            <el-table-column label="搴忓彿" width="80px">
+                <template slot-scope="scope">
+                    <span>{{scope.$index + 1}}</span>
+                </template>
+            </el-table-column>
+            <el-table-column
+                prop="date"
+                label="濮撳悕">
+            </el-table-column>
+            <el-table-column
+                prop="name"
+                label="韬唤璇佸彿">
+            </el-table-column>
+            <el-table-column
+                prop="address"
+                label="娲鹃仯鍗曚綅">
+            </el-table-column>
+            <el-table-column
+                prop="address"
+                label="鎵�灞炲伐绉�">
+            </el-table-column>
+        </el-table>
+    </GlobalWindow>
+</template>
+
+<script>
+    import BaseOpera from '@/components/base/BaseOpera'
+    import GlobalWindow from '@/components/common/GlobalWindow'
+    import { findListByDTO } from '@/api/business/member'
+    export default {
+        name: 'selectEmployees',
+        extends: BaseOpera,
+        components: { GlobalWindow },
+        data () {
+            return {
+                val: '',
+                list: []
+            }
+        },
+        created () {
+            this.config({
+                api: '/business/dispatchUnit',
+                'field.id': 'id'
+            })
+        },
+        methods: {
+            open (title) {
+                this.title = title
+                this.visible = true
+                this.getList()
+            },
+            getList() {
+                findListByDTO({
+                    name: this.val
+                }).then(res => {
+                    this.list = []
+                })
+            }
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/company/src/views/enterprise/dispatchUnit.vue b/company/src/views/enterprise/dispatchUnit.vue
new file mode 100644
index 0000000..5d7a04b
--- /dev/null
+++ b/company/src/views/enterprise/dispatchUnit.vue
@@ -0,0 +1,116 @@
+<template>
+    <TableLayout :permissions="['business:dispatchunit:query']">
+        <!-- 鎼滅储琛ㄥ崟 -->
+        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+            <el-form-item label="娲鹃仯鍗曚綅" prop="name">
+                <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ョ敤宸ュ崟浣嶅悕绉�" @keypress.enter.native="search"></el-input>
+            </el-form-item>
+            <section>
+                <el-button type="primary" @click="search">鎼滅储</el-button>
+                <el-button @click="reset">閲嶇疆</el-button>
+            </section>
+        </el-form>
+        <!-- 琛ㄦ牸鍜屽垎椤� -->
+        <template v-slot:table-wrap>
+            <ul class="toolbar" v-permissions="['business:dispatchunit:create']">
+                <li><el-button type="primary" @click="$refs.operaDispatchUnitWindow.open('娣诲姞娲鹃仯鍗曚綅')" v-permissions="['business:dispatchunit:create']">鏂板娲鹃仯鍗曚綅</el-button></li>
+            </ul>
+            <el-table
+                v-loading="isWorking.search"
+                :data="tableData.list"
+                stripe
+            >
+                <el-table-column label="搴忓彿" width="80px">
+                    <template slot-scope="scope">
+                        <span>{{scope.$index + 1}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="name" label="娲鹃仯鍗曚綅"></el-table-column>
+                <el-table-column label="浼佷笟鐘舵��">
+                    <template slot-scope="{row}">
+                        <span v-if="row.unitStatus === 0">寰呭鏍�</span>
+                        <span v-if="row.unitStatus === 1" style="color: green;">瀹℃牳閫氳繃</span>
+                        <span v-if="row.unitStatus === 2" style="color: red;">瀹℃牳涓嶉�氳繃</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="createDate" label="娣诲姞鏃ユ湡"></el-table-column>
+                <el-table-column label="鏄惁鍋滅敤">
+                    <template slot-scope="{row}">
+                        <el-switch
+                            @change="changeStatus($event, row)"
+                            v-model="row.status"
+                            active-color="#13ce66"
+                            inactive-color="#ff4949"
+                            :active-value="1"
+                            :inactive-value="0">
+                        </el-switch>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                    v-if="containPermissions(['business:dispatchunit:update', 'business:dispatchunit:delete'])"
+                    label="鎿嶄綔"
+                    min-width="120"
+                    fixed="right"
+                >
+                    <template slot-scope="{row}">
+                        <el-button type="text" @click="$refs.dispatchUnitDetails.open('娲鹃仯鍗曚綅璇︽儏', row)" v-permissions="['business:dispatchunit:update']">鏌ョ湅璇︽儏</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <pagination
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
+            >
+            </pagination>
+        </template>
+        <!-- 鏂板缓/淇敼 -->
+        <OperaDispatchUnitWindow ref="operaDispatchUnitWindow" @success="handlePageChange"/>
+        <!-- 璇︽儏 -->
+        <dispatchUnitDetails ref="dispatchUnitDetails" @success="handlePageChange"/>
+    </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaDispatchUnitWindow from '@/components/enterprise/OperaDispatchUnitWindow'
+import dispatchUnitDetails from '@/components/enterprise/dispatchUnitDetails'
+import { updateById } from '@/api/business/dispatchUnit'
+export default {
+  name: 'DispatchUnit',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaDispatchUnitWindow, dispatchUnitDetails },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        name: '',
+        dataType: 0
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '娲鹃仯鍗曚綅淇℃伅琛�',
+      api: '/business/dispatchUnit',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  },
+  methods: {
+    // 淇敼鐘舵��
+    changeStatus(status, row) {
+      updateById({ status, id: row.id })
+        .then(res => {
+          this.search()
+        })
+        .catch(err => {
+          row.status = row.status === 0 ? 1 : 0
+        })
+    }
+  }
+}
+</script>
diff --git a/company/src/views/enterprise/insuranceApply.vue b/company/src/views/enterprise/insuranceApply.vue
new file mode 100644
index 0000000..8fd1d43
--- /dev/null
+++ b/company/src/views/enterprise/insuranceApply.vue
@@ -0,0 +1,125 @@
+<template>
+    <TableLayout :permissions="['business:insuranceapply:query']">
+        <!-- 鎼滅储琛ㄥ崟 -->
+        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+            <el-form-item label="鐘舵��" prop="status">
+                <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨" @keypress.enter.native="search">
+                    <el-option label="寰呭鎵�" value="0"></el-option>
+                    <el-option label="寰呯缃�" value="2"></el-option>
+                    <el-option label="宸茬缃�" value="3"></el-option>
+                    <el-option label="宸叉挙閿�" value="7"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="淇濋櫓鏂规" prop="baseSolutionId">
+                <el-select v-model="searchForm.baseSolutionId" placeholder="璇烽�夋嫨" @change="search">
+                    <el-option
+                        v-for="item in solutionList"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="鎻愪氦鏃ユ湡" prop="createDate">
+                <el-date-picker
+                    v-model="searchForm.createDate"
+                    @change="search"
+                    type="daterange"
+                    range-separator="鑷�"
+                    value-format="yyyy-MM-dd"
+                    start-placeholder="寮�濮嬫棩鏈�"
+                    end-placeholder="缁撴潫鏃ユ湡">
+                </el-date-picker>
+            </el-form-item>
+            <section>
+                <el-button type="primary" @click="search">鎼滅储</el-button>
+                <el-button @click="reset">閲嶇疆</el-button>
+            </section>
+        </el-form>
+        <!-- 琛ㄦ牸鍜屽垎椤� -->
+        <template v-slot:table-wrap>
+            <ul class="toolbar" v-permissions="['business:dispatchunit:create']">
+                <li><el-button type="primary" @click="$refs.OperaInsuranceApplyWindow.open('鎶曚繚鐢宠')">鎶曚繚鐢宠</el-button></li>
+            </ul>
+            <el-table
+                v-loading="isWorking.search"
+                :data="tableData.list"
+                stripe
+            >
+                <el-table-column label="搴忓彿" width="80px">
+                    <template slot-scope="scope">
+                        <span>{{scope.$index + 1}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="status" label="鐘舵��"></el-table-column>
+                <el-table-column prop="solutionsName" label="淇濋櫓鏂规"></el-table-column>
+                <el-table-column prop="insureNum" label="鎶曚繚浜烘暟"></el-table-column>
+                <el-table-column prop="serviceDays" label="鎶曚繚鏃堕暱锛堝ぉ锛�"></el-table-column>
+                <el-table-column prop="fee" label="鎬昏垂鐢紙鍏冿級"></el-table-column>
+                <el-table-column prop="createTimeS" label="鎻愪氦鏃ユ湡"></el-table-column>
+                <el-table-column prop="endTimeE" label="鎶曚繚鐢熸晥鏃ユ湡"></el-table-column>
+                <el-table-column prop="endTimeS" label="鎶曚繚澶辨晥鏃ユ湡"></el-table-column>
+                <el-table-column
+                    v-if="containPermissions(['business:insuranceapply:update', 'business:insuranceapply:delete'])"
+                    label="鎿嶄綔"
+                    min-width="120"
+                    fixed="right"
+                >
+                    <template slot-scope="{row}">
+                        <el-button type="text" @click="$refs.operaInsuranceApplyWindow.open('缂栬緫鎶曚繚鐢宠淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:insuranceapply:update']">鏌ョ湅璇︽儏</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <pagination
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
+            >
+            </pagination>
+        </template>
+        <!--    鏂板鎶曚繚    -->
+        <OperaInsuranceApplyWindow ref="OperaInsuranceApplyWindow" @sucess="handlePageChange" />
+    </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaInsuranceApplyWindow from '@/components/enterprise/OperaInsuranceApplyWindow'
+import { all as solutionAll} from '@/api/business/solutions'
+export default {
+    name: 'InsuranceApply',
+    extends: BaseTable,
+    components: { TableLayout, Pagination, OperaInsuranceApplyWindow },
+    data () {
+        return {
+            // 鎼滅储
+            searchForm: {
+                createTimeS: '',
+                createTimeE: '',
+                baseSolutionId: '',
+                status: '2'
+            },
+            solutionList:[]
+        }
+    },
+    created () {
+        this.config({
+            module: '鎶曚繚鐢宠淇℃伅琛�',
+            api: '/business/insuranceApply',
+            'field.id': 'id',
+            'field.main': 'id'
+        })
+        this.search()
+        this.loadSelectList()
+    },
+    methods:{
+        loadSelectList() {
+          solutionAll({ dataType:0 }).then(res => {
+              this.solutionList = res
+            })
+        }
+    }
+}
+</script>
diff --git a/platform/.env b/platform/.env
index ea008f1..bf0ce72 100644
--- a/platform/.env
+++ b/platform/.env
@@ -5,8 +5,8 @@
 
 # 椤圭洰涓婁笅鏂囪矾寰�
 # preselect_admin/
-VUE_APP_CONTEXT_PATH = './'
+VUE_APP_CONTEXT_PATH = '/'
 
 # 鎺ュ彛鍓嶇紑
 # VUE_APP_API_PREFIX = '/yunyibao_interface/'
-VUE_APP_API_PREFIX = '/interface'
+VUE_APP_API_PREFIX = '/api'
diff --git a/platform/.env.development b/platform/.env.development
index efa685a..afef89d 100644
--- a/platform/.env.development
+++ b/platform/.env.development
@@ -1,19 +1,5 @@
 # 寮�鍙戠幆澧冮厤缃�
 NODE_ENV = 'development'
 
-<<<<<<< HEAD
-VUE_APP_API = 'http://192.168.0.134:10025/'
-=======
-VUE_APP_CONTEXT_PATH = '/'
-VUE_APP_API_PREFIX = '/api'
-
 # 浠诲悍
-# VUE_APP_API = 'http://192.168.0.15:10017/'
-# 鐒︽澗
-#VUE_APP_API = 'http://192.168.0.36:10023'
-# 姹熻悕
-VUE_APP_API = 'http://192.168.0.154:10023'
-
-# #娴嬭瘯鏈嶅姟鍣�
-#VUE_APP_API = 'https://dmtest.ahapp.net/preselect_admin_interface'
->>>>>>> c6c95a49be6194989c124b8fd316fb5d434bd153
+VUE_APP_API = 'http://192.168.0.134:10025/'
diff --git a/platform/src/api/business/goods.js b/platform/src/api/business/goods.js
deleted file mode 100644
index 1ae02b3..0000000
--- a/platform/src/api/business/goods.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import request from '../../utils/request'
-
-// 鏌ヨ
-export function fetchList (data) {
-  return request.post('/business/baseGoods/page', data, {
-    trim: true
-  })
-}
-
-// 瀵煎嚭Excel
-export function exportExcel (data) {
-  return request.post('/business/baseGoods/exportExcel', data, {
-    trim: true,
-    download: true
-  })
-}
-
-// 瀵煎嚭妯℃澘
-export function exportDoc (params) {
-  return request.get('/business/baseGoods/export', params, {
-    trim: true,
-    download: true
-  })
-}
-
-// 鍒涘缓
-export function create (data) {
-  return request.post('/business/baseGoods/create', data)
-}
-
-// 淇敼
-export function updateById (data) {
-  return request.post('/business/baseGoods/update', data)
-}
-
-// 鍒犻櫎
-export function deleteById (id) {
-  return request.get(`/business/baseGoods/delete/${id}`)
-}
-
-// 鎵归噺鍒犻櫎
-export function deleteByIdInBatch (ids) {
-  return request.get('/business/baseGoods/delete/batch', {
-    params: {
-      ids
-    }
-  })
-}
-
-// 淇敼鐘舵��
-export function updateStatus (data) {
-  return request.post('/business/baseGoods/updateStatus', data)
-}
-/*export function updateStatusById (data) {
-  return request.post('/business/baseGoods/updateStatusById', data)
-}*/
-
-// 鍒楄〃 - 鍟嗗搧閫夋嫨
-export function findListForbaseGoodsId (goodsId) {
-  return request.get(`/business/category/findListForGoodsId?goodsId=${goodsId}`)
-}
-
-// 鏍规嵁ID鏌ヨ
-export function queryById (id) {
-  return request.get(`/business/baseGoods/${id}`)
-}
\ No newline at end of file
diff --git a/platform/src/api/business/solutions.js b/platform/src/api/business/solutions.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/platform/src/api/business/solutions.js
diff --git a/platform/src/api/system/menu.js b/platform/src/api/system/menu.js
index ad94c4b..3ba843e 100644
--- a/platform/src/api/system/menu.js
+++ b/platform/src/api/system/menu.js
@@ -1,6 +1,5 @@
 import request from '@/utils/request'
 
-<<<<<<< HEAD
 // 鏌ヨ----骞冲彴鑿滃崟
 export function fetchTree () {
   return request.post('/system/menu/treeList/0')
@@ -9,11 +8,6 @@
 // 鏌ヨ----浼佷笟鑿滃崟
 export function fetchTree1 () {
   return request.post('/system/menu/treeList/1')
-=======
-// 鏌ヨ
-export function fetchTree (data, type) {
-  return request.post(`/system/menu/treeList/${type}`, data)
->>>>>>> c6c95a49be6194989c124b8fd316fb5d434bd153
 }
 
 // 鏂板缓
@@ -46,13 +40,8 @@
 }
 
 // 鏌ヨ鑿滃崟鏍�
-<<<<<<< HEAD
 export function fetchMenuTree () {
   return request.get('/system/menu/treeNodes?type=1')
-=======
-export function fetchMenuTree (params) {
-  return request.get('/system/menu/treeNodes', { params })
->>>>>>> c6c95a49be6194989c124b8fd316fb5d434bd153
 }
 
 // 鎺掑簭
diff --git a/platform/src/components/business/OperaBaseDataWindow.vue b/platform/src/components/business/OperaBaseDataWindow.vue
deleted file mode 100644
index ff0a5d8..0000000
--- a/platform/src/components/business/OperaBaseDataWindow.vue
+++ /dev/null
@@ -1,246 +0,0 @@
-<template>
-  <GlobalWindow
-    :title="title"
-    :visible.sync="visible"
-    :confirm-working="isWorking"
-    @confirm="confirm"
-  >
-    <el-form :model="form" ref="form" :rules="rules">
-      <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator">
-        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" v-trim/>
-      </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
-        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
-        <el-input v-model="form.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" v-trim/>
-      </el-form-item>
-      <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
-        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
-        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" v-trim/>
-      </el-form-item>
-      <el-form-item label="鏍囬" prop="title">
-        <el-input v-model="form.title" placeholder="璇疯緭鍏ユ爣棰�" v-trim/>
-      </el-form-item>
-      <el-form-item label="鍟嗗搧鍚嶇О" prop="name">
-        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�" v-trim/>
-      </el-form-item>
-      <el-form-item label="浜笢sku" prop="sku">
-        <el-input v-model="form.sku" placeholder="璇疯緭鍏ヤ含涓渟ku" v-trim/>
-      </el-form-item>
-      <el-form-item label="鍝佺墝" prop="brand">
-        <el-input v-model="form.brand" placeholder="璇疯緭鍏ュ搧鐗�" v-trim/>
-      </el-form-item>
-      <el-form-item label="绫诲埆" prop="category">
-        <el-input v-model="form.category" placeholder="璇疯緭鍏ョ被鍒�" v-trim/>
-      </el-form-item>
-      <el-form-item label="澶栭摼鍦板潃" prop="url">
-        <el-input v-model="form.url" placeholder="璇疯緭鍏ュ閾惧湴鍧�" v-trim/>
-      </el-form-item>
-      <el-form-item label="鍒楄〃鍥�" prop="imgurl">
-        <el-input v-model="form.imgurl" placeholder="璇疯緭鍏ュ垪琛ㄥ浘" v-trim/>
-      </el-form-item>
-      <el-form-item label="澶у浘1" prop="bgImg">
-        <el-input v-model="form.bgImg" placeholder="璇疯緭鍏ュぇ鍥�1" v-trim/>
-      </el-form-item>
-      <el-form-item label="澶у浘2" prop="bgImg2">
-        <el-input v-model="form.bgImg2" placeholder="璇疯緭鍏ュぇ鍥�2" v-trim/>
-      </el-form-item>
-      <el-form-item label="澶у浘3" prop="bgImg3">
-        <el-input v-model="form.bgImg3" placeholder="璇疯緭鍏ュぇ鍥�3" v-trim/>
-      </el-form-item>
-      <el-form-item label="浠锋牸" prop="price">
-        <el-input v-model="form.price" placeholder="璇疯緭鍏ヤ环鏍�" v-trim/>
-      </el-form-item>
-      <el-form-item label="閲囪喘浠锋牸" prop="saleprice">
-        <el-input v-model="form.saleprice" placeholder="璇疯緭鍏ラ噰璐环鏍�" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��1" prop="attr1">
-        <el-input v-model="form.attr1" placeholder="璇疯緭鍏ュ睘鎬�1" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��2" prop="attr2">
-        <el-input v-model="form.attr2" placeholder="璇疯緭鍏ュ睘鎬�2" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��3" prop="attr3">
-        <el-input v-model="form.attr3" placeholder="璇疯緭鍏ュ睘鎬�3" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��4" prop="attr4">
-        <el-input v-model="form.attr4" placeholder="璇疯緭鍏ュ睘鎬�4" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��5" prop="attr5">
-        <el-input v-model="form.attr5" placeholder="璇疯緭鍏ュ睘鎬�5" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��6" prop="attr6">
-        <el-input v-model="form.attr6" placeholder="璇疯緭鍏ュ睘鎬�6" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��7" prop="attr7">
-        <el-input v-model="form.attr7" placeholder="璇疯緭鍏ュ睘鎬�7" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��8" prop="attr8">
-        <el-input v-model="form.attr8" placeholder="璇疯緭鍏ュ睘鎬�8" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��9" prop="attr9">
-        <el-input v-model="form.attr9" placeholder="璇疯緭鍏ュ睘鎬�9" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��10" prop="attr10">
-        <el-input v-model="form.attr10" placeholder="璇疯緭鍏ュ睘鎬�10" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��11" prop="attr11">
-        <el-input v-model="form.attr11" placeholder="璇疯緭鍏ュ睘鎬�11" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��12" prop="attr12">
-        <el-input v-model="form.attr12" placeholder="璇疯緭鍏ュ睘鎬�12" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��13" prop="attr13">
-        <el-input v-model="form.attr13" placeholder="璇疯緭鍏ュ睘鎬�13" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��14" prop="attr14">
-        <el-input v-model="form.attr14" placeholder="璇疯緭鍏ュ睘鎬�14" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��15" prop="attr15">
-        <el-input v-model="form.attr15" placeholder="璇疯緭鍏ュ睘鎬�15" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��16" prop="attr16">
-        <el-input v-model="form.attr16" placeholder="璇疯緭鍏ュ睘鎬�16" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��17" prop="attr17">
-        <el-input v-model="form.attr17" placeholder="璇疯緭鍏ュ睘鎬�17" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��18" prop="attr18">
-        <el-input v-model="form.attr18" placeholder="璇疯緭鍏ュ睘鎬�18" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��19" prop="attr19">
-        <el-input v-model="form.attr19" placeholder="璇疯緭鍏ュ睘鎬�19" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��20" prop="attr20">
-        <el-input v-model="form.attr20" placeholder="璇疯緭鍏ュ睘鎬�20" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��21" prop="attr21">
-        <el-input v-model="form.attr21" placeholder="璇疯緭鍏ュ睘鎬�21" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��22" prop="attr22">
-        <el-input v-model="form.attr22" placeholder="璇疯緭鍏ュ睘鎬�22" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��23" prop="attr23">
-        <el-input v-model="form.attr23" placeholder="璇疯緭鍏ュ睘鎬�23" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��24" prop="attr24">
-        <el-input v-model="form.attr24" placeholder="璇疯緭鍏ュ睘鎬�24" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��25" prop="attr25">
-        <el-input v-model="form.attr25" placeholder="璇疯緭鍏ュ睘鎬�25" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��26" prop="attr26">
-        <el-input v-model="form.attr26" placeholder="璇疯緭鍏ュ睘鎬�26" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��27" prop="attr27">
-        <el-input v-model="form.attr27" placeholder="璇疯緭鍏ュ睘鎬�27" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��28" prop="attr28">
-        <el-input v-model="form.attr28" placeholder="璇疯緭鍏ュ睘鎬�28" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��29" prop="attr29">
-        <el-input v-model="form.attr29" placeholder="璇疯緭鍏ュ睘鎬�29" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��30" prop="attr30">
-        <el-input v-model="form.attr30" placeholder="璇疯緭鍏ュ睘鎬�30" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��31" prop="attr31">
-        <el-input v-model="form.attr31" placeholder="璇疯緭鍏ュ睘鎬�31" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��32" prop="attr32">
-        <el-input v-model="form.attr32" placeholder="璇疯緭鍏ュ睘鎬�32" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��33" prop="attr33">
-        <el-input v-model="form.attr33" placeholder="璇疯緭鍏ュ睘鎬�33" v-trim/>
-      </el-form-item>
-      <el-form-item label="灞炴��34" prop="attr34">
-        <el-input v-model="form.attr34" placeholder="璇疯緭鍏ュ睘鎬�34" v-trim/>
-      </el-form-item>
-      <el-form-item label="澶勭悊鐘舵�� 0寰呭鐞� 1宸插鐞�" prop="status">
-        <el-input v-model="form.status" placeholder="璇疯緭鍏ュ鐞嗙姸鎬� 0寰呭鐞� 1宸插鐞�" v-trim/>
-      </el-form-item>
-    </el-form>
-  </GlobalWindow>
-</template>
-
-<script>
-import BaseOpera from '@/components/base/BaseOpera'
-import GlobalWindow from '@/components/common/GlobalWindow'
-export default {
-  name: 'OperaBaseDataWindow',
-  extends: BaseOpera,
-  components: { GlobalWindow },
-  data () {
-    return {
-      // 琛ㄥ崟鏁版嵁
-      form: {
-        id: null,
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        title: '',
-        name: '',
-        sku: '',
-        brand: '',
-        category: '',
-        url: '',
-        imgurl: '',
-        bgImg: '',
-        bgImg2: '',
-        bgImg3: '',
-        price: '',
-        saleprice: '',
-        attr1: '',
-        attr2: '',
-        attr3: '',
-        attr4: '',
-        attr5: '',
-        attr6: '',
-        attr7: '',
-        attr8: '',
-        attr9: '',
-        attr10: '',
-        attr11: '',
-        attr12: '',
-        attr13: '',
-        attr14: '',
-        attr15: '',
-        attr16: '',
-        attr17: '',
-        attr18: '',
-        attr19: '',
-        attr20: '',
-        attr21: '',
-        attr22: '',
-        attr23: '',
-        attr24: '',
-        attr25: '',
-        attr26: '',
-        attr27: '',
-        attr28: '',
-        attr29: '',
-        attr30: '',
-        attr31: '',
-        attr32: '',
-        attr33: '',
-        attr34: '',
-        status: ''
-      },
-      // 楠岃瘉瑙勫垯
-      rules: {
-      }
-    }
-  },
-  created () {
-    this.config({
-      api: '/business/baseData',
-      'field.id': 'id'
-    })
-  }
-}
-</script>
diff --git a/platform/src/components/business/OperaBrandWindow.vue b/platform/src/components/business/OperaBrandWindow.vue
deleted file mode 100644
index b5899ee..0000000
--- a/platform/src/components/business/OperaBrandWindow.vue
+++ /dev/null
@@ -1,100 +0,0 @@
-<template>
-  <GlobalAlertWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" width="600px" @confirm="confirm">
-    <el-form :model="form" ref="form" label-width="150px" label-suffix="锛�" :rules="rules">
-      <el-form-item label="鍝佺墝鍚嶇О" prop="name">
-        <el-input v-model="form.name" maxlength="20" placeholder="璇疯緭鍏ワ紝涓嶈秴杩�20涓瓧绗�" v-trim />
-      </el-form-item>
-      <el-form-item label="鍝佺墝鍥炬爣" prop="imgurl">
-        <UploadAvatarImage
-            :file="{ 'imgurlfull': form.imgfullurl, 'imgurl': form.imgurl }"
-            :uploadData="uploadData"
-            tipsLabel=""
-            @uploadSuccess="uploadReverseSuccess"
-            @uploadEnd="end"
-            @uploadBegin="begin"
-          />
-        鍙兘涓婁紶鍥剧墖鏍煎紡锛宲ng鏍煎紡锛屽缓璁昂瀵�200px*200px
-      </el-form-item>
-      <el-form-item label="鎺掑簭鐮�(鍗囧簭)" prop="sortnum">
-        <el-input v-model="form.sortnum" type="number" placeholder="璇疯緭鍏ユ帓搴忕爜锛屽崌搴忓睍绀�" v-trim />
-      </el-form-item>
-    </el-form>
-  </GlobalAlertWindow>
-</template>
-  
-<script>
-import BaseOpera from '@/components/base/BaseOpera'
-import UploadAvatarImage from '../common/UploadAvatarImage.vue'
-import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
-export default {
-  name: 'OperaBrandWindow',
-  extends: BaseOpera,
-  components: { GlobalAlertWindow, UploadAvatarImage },
-  data() {
-    return {
-      action: process.env.VUE_APP_API_PREFIX + '/public/uploadLocal',
-      // 琛ㄥ崟鏁版嵁
-      form: {
-        id: null,
-        name: '',
-        sortnum: '',
-        imgurl: '',
-        imgfullurl: '',
-        type: 1
-      },
-      uploadData: {
-        folder: 'brand_img',
-        type: 'image'
-      },
-      // 楠岃瘉瑙勫垯
-      rules: {
-        name: [
-          { required: true, message: '涓嶈兘涓虹┖', trigger: 'blur' }
-        ]
-      }
-    }
-  },
-  created() {
-    this.config({
-      api: '/business/brand',
-      'field.id': 'id'
-    })
-  },
-  methods: {
-    open (title, target) {
-      this.title = title
-      this.visible = true
-      // 鏂板缓
-      if (target == null) {
-        this.$nextTick(() => {
-          this.$refs.form.resetFields()
-          this.form.imgfullurl = ''
-          this.form[this.configData['field.id']] = null
-        })
-        return
-      }
-      // 缂栬緫
-      this.$nextTick(() => {
-        for (const key in this.form) {
-          this.form[key] = target[key]
-        }
-      })
-    },
-    begin() {
-      this.isUploading=true
-    },
-    end() {
-      this.isUploading=false
-    },
-    // 涓婁紶鍥剧墖
-    uploadReverseSuccess(file) {
-      this.form.imgurl = file.imgurl;
-      this.form.imgfullurl = file.imgurlfull;
-    },
-  }
-}
-</script>
-
-<style lang="scss">
-</style>
-  
\ No newline at end of file
diff --git a/platform/src/components/business/OperaCategoryWindow.vue b/platform/src/components/business/OperaCategoryWindow.vue
deleted file mode 100644
index e70b3a3..0000000
--- a/platform/src/components/business/OperaCategoryWindow.vue
+++ /dev/null
@@ -1,251 +0,0 @@
-<template>
-  <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm" width="900px">
-    <el-form :model="form" ref="form" label-width="120px" label-suffix="锛�" :rules="rules" v-loading="isUploading">
-      <el-form-item label="绫诲埆鍚嶇О" prop="name">
-        <el-input v-model="form.name" placeholder="璇疯緭鍏ョ被鍒悕绉帮紝涓嶈秴杩�6涓瓧" maxlength="6" v-trim />
-      </el-form-item>
-      <el-form-item label="鍥炬爣" prop="imgurl">
-        <UploadAvatarImage :file="{ 'imgurlfull': form.imgfullurl, 'imgurl': form.imgurl }"
-          :uploadData="{ folder: 'category_img' }" @uploadSuccess="uploadReverseSuccess" @uploadEnd="isUploading = false"
-          @uploadBegin="isUploading = true" />
-        鍙兘涓婁紶鍥剧墖鏍煎紡锛宲ng鏍煎紡锛屽缓璁昂瀵�120*120px
-      </el-form-item>
-      <el-form-item label="鍔犱环绯绘暟" prop="priceRate">
-        <!-- <el-input v-model="form.priceRate" placeholder="鍦ㄤ含涓滈噰璐环鍩虹涓婏紝骞冲彴鐨勫姞浠风郴鏁�" v-trim /> -->
-        <el-input-number v-model="form.priceRate" controls-position="right" :min="0.1" :step="0.1"></el-input-number>
-      </el-form-item>
-      <el-form-item label="鎺掑簭鐮�(鍗囧簭)" prop="sortnum">
-        <el-input v-model="form.sortnum" type="number" placeholder="璇疯緭鍏ユ帓搴忕爜锛屽崌搴忓睍绀�" v-trim />
-      </el-form-item>
-
-    </el-form>
-    <div class="param-table" >
-      <div class="title-contant">
-        <div class="title">鍙傛暟灞炴�ч厤缃�</div>
-        <div class="sub-title">閰嶇疆褰撳墠绫诲埆鐨勪骇鍝佸弬鏁板悕</div>
-      </div>
-      <el-table :data="form.baseCateParamList" stripe border >
-        <el-table-column prop="" label="鍙傛暟鍚�"  min-width="200px" align="center">
-          <template slot-scope="{row}">
-            <el-input v-model="row.name" placeholder="璇疯緭鍏ュ弬鏁板悕" v-trim />
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" width="100" align="center">
-          <template slot-scope="{row, $index}">
-            <el-button type="text" style="color: red"
-              @click="form.baseCateParamList.splice($index, 1)">鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <el-button style="color: #2E68EC; margin-top: 10px;" @click="addParam" icon="el-icon-plus">鏂板</el-button>
-    </div>
-  </GlobalWindow>
-</template>
-  
-<script>
-import BaseOpera from '@/components/base/BaseOpera'
-import GlobalWindow from '@/components/common/GlobalWindow'
-import UploadAvatarImage from '@/components/common/UploadAvatarImage.vue'
-import { create, updateById } from '@/api/business/category.js'
-export default {
-  name: 'OperaCategoryWindow',
-  extends: BaseOpera,
-  components: { GlobalWindow, UploadAvatarImage },
-  data() {
-    return {
-      action: process.env.VUE_APP_API_PREFIX + '/public/upload',
-      isUploading: false,
-      // 琛ㄥ崟鏁版嵁
-      form: {
-        id: null,
-        name: '',
-        imgurl: '',
-        imgfullurl: '',
-        priceRate: '1.2',
-        sortnum: '',
-
-        // attrFirst: '',
-        // attrFirst1: '',
-        baseCateParamList: [],
-        // attrSecond: '',
-        // attrSecond1: '',
-        // attrSecondList: [],
-
-        // parameter: '',
-        paramList: []
-
-      },
-      // 楠岃瘉瑙勫垯
-      rules: {
-        name: [
-          { required: true, message: '涓嶈兘涓虹┖', trigger: 'blur' }
-        ]
-      },
-      dialogVisible: false
-    }
-  },
-  created() {
-    this.config({
-      api: '/business/category',
-      'field.id': 'id'
-    })
-  },
-  methods: {
-    open(title, target) {
-      this.title = title
-      this.visible = true
-      // 鏂板缓
-      if (target == null) {
-        this.$nextTick(() => {
-          this.$refs.form.resetFields()
-          this.form.imgfullurl = ''
-          this.form.baseCateParamList = [{name:''}]
-          this.form.paramList = [{name:''}]
-          this.form[this.configData['field.id']] = null
-        })
-        return
-      }
-      // 缂栬緫
-      this.$nextTick(() => {
-        for (const key in this.form) {
-          this.form[key] = target[key]
-        }
-        this.form.baseCateParamList = this.form.baseCateParamList || []
-      })
-    },
-    addParam () {
-      this.form.baseCateParamList.push({ name: '' })
-    },
-    changeInput (type, index) {
-      if (type === 1) {
-        if (!this.form.budgetList[index].minamount) return
-        if (!/^[0-9]*[1-9][0-9]*$/.test(this.form.budgetList[index].minamount)) {
-          this.$message.warning({
-            type: 'warning',
-            message: '棰勭畻鍙兘杈撳叆姝f暣鏁�'
-          })
-          this.form.budgetList[index].minamount = ''
-        }
-      } else {
-        if (!this.form.budgetList[index].maxamount) return
-        if (!/^[0-9]*[1-9][0-9]*$/.test(this.form.budgetList[index].maxamount)) {
-          this.$message.warning({
-            type: 'warning',
-            message: '棰勭畻鍙兘杈撳叆姝f暣鏁�'
-          })
-          this.form.budgetList[index].maxamount = ''
-        }
-      }
-    },
-
-    confirm() {
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          this.isWorking = true
-          if (!this.form.id) {
-            create(this.form)
-              .then(() => {
-                this.visible = false
-                this.$tip.apiSuccess('鏂板缓鎴愬姛')
-                this.$emit('success')
-              })
-              .catch(e => {
-                this.$tip.apiFailed(e)
-              })
-              .finally(() => {
-                this.isWorking = false
-              })
-          } else {
-            updateById(this.form)
-              .then(() => {
-                this.visible = false
-                this.$tip.apiSuccess('缂栬緫鎴愬姛')
-                this.$emit('success')
-              })
-              .catch(e => {
-                this.$tip.apiFailed(e)
-              })
-              .finally(() => {
-                this.isWorking = false
-              })
-          }
-        } else {
-          return false;
-        }
-      });
-    },
-    close(index, type) {
-      if (type === 1) {
-        this.form.attrFirstList.splice(index, 1)
-      } else if (type === 2) {
-        this.form.attrSecondList.splice(index, 1)
-      } else if (type === 3) {
-        this.form.paramList.splice(index, 1)
-      }
-    },
-    confirmVal(type) {
-      if (type === 1) {
-        if (!this.form.attrFirst1) return
-        this.form.attrFirstList.push({ name: this.form.attrFirst1 })
-        this.form.attrFirst1 = ''
-      } else if (type === 2) {
-        if (!this.form.attrSecond1) return
-        this.form.attrSecondList.push({ name: this.form.attrSecond1 })
-        this.form.attrSecond1 = ''
-      } else if (type === 3) {
-        if (!this.form.parameter) return
-        this.form.paramList.push({ name: this.form.parameter })
-        this.form.parameter = ''
-      }
-    },
-    add() {
-      this.form.budgetList.push({ minamount: '', maxamount: '' })
-    },
-    begin() {
-      this.isUploading = true
-    },
-    end() {
-      this.isUploading = false
-    },
-    // 涓婁紶鍥剧墖
-    uploadReverseSuccess(file) {
-      this.form.imgurl = file.imgurl;
-      this.form.imgfullurl = file.imgurlfull;
-    },
-    dele(i) {
-      if (this.form.budgetList.length === 1) return
-      this.form.budgetList.splice(i, 1)
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.param-table {
-  //width: 70%;
-  margin-top: 40px;
-
-  .title-contant {
-    display: flex;
-    align-items: baseline;
-    margin-bottom: 10px;
-    .title {
-      font-weight: 600;
-      font-size: 20px;
-      margin-right: 15px;
-    }
-    .sub-title {
-      font-size: 14px;
-    }
-  }
-}
-::v-deep .el-form-item__content {
-  .el-input {
-    width: 300px;
-  }
-  .el-input-number {
-    text-align: left;
-    width: 300px;
-  }
-}
-</style>
\ No newline at end of file
diff --git a/platform/src/components/business/OperaCompanyUserWindow.vue b/platform/src/components/business/OperaCompanyUserWindow.vue
deleted file mode 100644
index 45942e7..0000000
--- a/platform/src/components/business/OperaCompanyUserWindow.vue
+++ /dev/null
@@ -1,120 +0,0 @@
-<template>
-  <GlobalAlertWindow
-    :title="title"
-    :visible.sync="visible"
-    :confirm-working="isWorking"
-    width="750px"
-    @confirm="confirm"
-  >
-    <el-form :model="form" ref="form" label-width="125px" :rules="rules">
-      <el-form-item label="浼佷笟鍏ㄧО" prop="name">
-        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ鎴蜂紒涓氬叏绉帮紝涓嶈秴杩�30瀛�" v-trim/>
-        浼佷笟鍚嶇О闇�涓庡伐鍟嗛儴闂ㄧ櫥璁颁俊鎭竴鑷�
-      </el-form-item>
-      <el-form-item label="瀹㈡埛绠�绉�" prop="shortName">
-        <el-input v-model="form.shortName" placeholder="璇疯緭鍏ヤ紒涓氱畝绉�" v-trim/>
-      </el-form-item>
-      <el-form-item label="缁熶竴淇$敤浠g爜" prop="creditCode">
-        <el-input v-model="form.creditCode" placeholder="璇疯緭鍏ョ粺涓�淇$敤浠g爜" v-trim/>
-        缁熶竴淇$敤浠g爜闇�涓庡伐鍟嗛儴闂ㄧ櫥璁颁俊鎭竴鑷�
-      </el-form-item>
-      <el-form-item label="鐧诲綍璐﹀彿" prop="managerUserName">
-        <el-input v-model="form.managerUserName" :disabled="!!this.form.id" placeholder="璇疯緭鍏ョ櫥褰曡处鍙�" v-trim/>
-      </el-form-item>
-      <el-form-item label="绯荤粺浣跨敤鏈夋晥鏈�" prop="oepnValidDate">
-        <el-date-picker v-model="form.oepnValidDate" value-format="yyyy-MM-dd" :disabled="!!this.form.id" placeholder="璇疯緭鍏ョ郴缁熶娇鐢ㄦ湁鏁堟湡"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="涓绘挱鏁伴噺闄愬埗" prop="userNum">
-        <el-input v-model="form.userNum" :disabled="!!this.form.id" placeholder="璇疯緭鍏ヤ富鎾暟閲忛檺鍒�" v-trim/>
-        
-      </el-form-item>
-      <el-form-item label="閿�鍞汉鍛�" prop="salesmanId">
-        <!-- <el-input v-model="form.salesmanId" placeholder="璇疯緭鍏ラ攢鍞汉鍛樼紪鐮�" v-trim/> -->
-        <el-select v-model="form.salesmanId" clearable placeholder="璇烽�夋嫨" filterable >
-          <el-option v-for="item in sales" :label="item.realname" :key="item.id" :value="item.id"></el-option>
-        </el-select>
-      </el-form-item>
-
-      <div class="more">
-        <div class="more-title">鏇村璁剧疆</div>
-        <el-form-item label="鑱旂郴浜�" prop="linkname">
-          <el-input v-model="form.linkname" placeholder="璇疯緭鍏ヨ仈绯讳汉" v-trim/>
-        </el-form-item>
-        <el-form-item label="鑱旂郴浜虹數璇�" prop="linkephone">
-          <el-input v-model="form.linkephone" placeholder="璇疯緭鍏ヨ仈绯讳汉鐢佃瘽" v-trim/>
-        </el-form-item>
-      </div>
-      
-      
-      
-    </el-form>
-  </GlobalAlertWindow>
-</template>
-
-<script>
-import BaseOpera from '@/components/base/BaseOpera'
-import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
-import { findAllList } from '@/api/system/user'
-export default {
-  name: 'OperaCompanyWindow',
-  extends: BaseOpera,
-  components: { GlobalAlertWindow },
-  data () {
-    return {
-      // 琛ㄥ崟鏁版嵁
-      form: {
-        id: null,
-        managerUserName: '',
-        name: '',
-        shortName: '',
-        remark: '',
-        managerId: '',
-        linkname: '',
-        linkephone: '',
-        creditCode: '',
-        userNum: 5,
-        oepnValidDate: '',
-        salesmanId: ''
-      },
-      sales: [],
-      // 楠岃瘉瑙勫垯
-      rules: {
-        name: [
-          { required: true, message: '璇疯緭鍏ュ鎴蜂紒涓氬叏绉�', tigger: 'blur'}
-        ],
-        managerUserName: [
-          { required: true, message: '璇疯緭鍏ョ櫥褰曡处鍙�', tigger: 'blur'}
-        ],
-        openUserNum: [
-          { pattern: /^[0-9]+$/, message: '鍙彲浠ヨ緭鍏ユ暟瀛�', trigger: 'change' }
-        ]
-      }
-    }
-  },
-  created () {
-    this.config({
-      api: '/business/companyUser',
-      'field.id': 'id'
-    })
-    findAllList({ type: 0 })
-      .then(res => {
-        this.sales = res
-      })
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.more {
-  margin-top: 40px;
-  margin-bottom: 10px;
-  .more-title {
-    font-weight: 600;
-    font-size: 18px;
-  }
-}
-::v-deep .el-input {
-  width: 300px;
-  margin-right: 10px;
-}
-</style>
diff --git a/platform/src/components/business/OperaCompanyValidDateWindow.vue b/platform/src/components/business/OperaCompanyValidDateWindow.vue
deleted file mode 100644
index cd1fa6f..0000000
--- a/platform/src/components/business/OperaCompanyValidDateWindow.vue
+++ /dev/null
@@ -1,163 +0,0 @@
-<template>
-  <GlobalAlertWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
-    <div class="tips-style">璋冩暣鏈夋晥鏈熷悗锛屽鎴风殑鏈夋晥鏈熶細鍙戠敓鏀瑰彉锛岃璋ㄦ厧鎿嶄綔</div>
-    <el-form :model="form" ref="form" label-width="100px" label-suffix="锛�" :rules="rules" inline>
-      <div class="short-line">
-        <el-form-item label="浼佷笟鍚嶇О" prop="name">
-          <el-input v-model="form.name" disabled v-trim />
-        </el-form-item>
-      </div>
-      <!-- <div class="item-line">
-        <el-form-item label="瀹㈡埛绫诲瀷"  prop="oepnType">
-          <el-radio-group v-model="form.oepnType" @change="typeChange">
-            <el-radio :label="1">姝e紡璐﹀彿</el-radio>
-            <el-radio :label="0">璇曠敤璐﹀彿</el-radio>
-          </el-radio-group>
-        </el-form-item>
-      </div> -->
-
-      <div class="item-line">
-        <el-form-item label="鏈夋晥鏈�" prop="oepnValidDate">
-          <!-- <el-date-picker v-model="form.oepnValidDate" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd hh:mm:ss"
-            placeholder="閫夋嫨鏃ユ湡"> -->
-          <el-date-picker type="date" v-model="form.oepnValidDate" value-format="yyyy-MM-dd" placeholder="閫夋嫨鏈夋晥鏃ユ湡">
-          </el-date-picker>
-          鏈夋晥鏈熷寘鍚�夋嫨鏃ユ湡
-        </el-form-item>
-      </div>
-      <div class="short-line">
-        <el-form-item label="涓绘挱鏁伴檺鍒�" prop="userNum">
-          <el-input v-model="form.userNum" placeholder="璇疯緭鍏ヤ富鎾暟" v-trim />
-          <span style="display:inline;font-size:10px;color:red">娉細涓�0涓嶉檺鍒朵汉鏁�</span>
-        </el-form-item>
-      </div>
-    </el-form>
-    <!-- <div slot="footer"></div> -->
-  </GlobalAlertWindow>
-</template>
-
-<script>
-import BaseOpera from '@/components/base/BaseOpera'
-import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
-import { update } from '@/api/business/company'
-// import { create } from '@/api/business/companyChange'
-export default {
-  name: 'OperaCompanyValidDateWindow',
-  extends: BaseOpera,
-  components: { GlobalAlertWindow },
-  data() {
-
-    return {
-      isUploading: false,
-      // 琛ㄥ崟鏁版嵁
-      form: {
-        id: null,
-        name: '',
-        oepnValidDate: '',
-        userNum: 0
-      },
-      types: [],
-      // 楠岃瘉瑙勫垯
-      rules: {
-        openUserNum: [
-          { pattern: /^[0-9]+$/, message: '鍙彲浠ヨ緭鍏ユ暟瀛�', trigger: 'change' }
-        ]
-      }
-    }
-  },
-  created() {
-    this.config({
-      api: '/business/company',
-      'field.id': 'id'
-    })
-  },
-  methods: {
-    open(title, target) {
-      this.title = title
-      this.visible = true
-      // 缂栬緫
-      this.$nextTick(() => {
-        this.$refs.form.clearValidate()
-        this.$refs.form.resetFields()
-        for (const key in this.form) {
-          this.form[key] = target[key]
-        }
-      })
-    },
-    typeChange() {
-      let tempDate = new Date();
-      tempDate.setDate(tempDate.getDate() + (this.form.oepnType ? 30 : 15))
-      this.form.oepnValidDate = `${tempDate.getFullYear()}-${tempDate.getMonth() + 1}-${tempDate.getDate()} 00:00:00`
-    },
-    confirm() {
-      this.$refs.form.validate((valid) => {
-        if (!valid) {
-          return
-        }
-        this.isWorking = true
-        update(this.form)
-          .then(() => {
-            this.visible = false
-            this.$refs.form.resetFields()
-            this.$tip.apiSuccess('淇敼鏈夋晥鏈熸垚鍔�')
-            this.$emit('success')
-          })
-          .catch(e => {
-            this.$tip.apiFailed(e)
-          })
-          .finally(() => {
-            this.isWorking = false
-          })
-      })
-    }
-  },
-}
-</script>
-
-<style lang="scss" scoped>
-.tips-style {
-  background-color: #f7f7f7;
-  height: 30px;
-  line-height: 30px;
-
-  a {
-    text-decoration: none
-  }
-
-  padding-left: 10px;
-  margin-bottom: 20px;
-}
-
-.item-line {
-  ::v-deep .el-form-item__content {
-    width: 480px;
-  }
-}
-
-.short-line {
-  ::v-deep .el-form-item__content {
-    width: 286px;
-  }
-}
-
-.pic-line {
-  ::v-deep .el-form-item__content {
-    width: 500px;
-  }
-}
-
-.address {
-  display: flex;
-
-  .line {
-    width: 10px;
-  }
-}
-
-.sub-title {
-  font-size: 20px;
-  font-weight: 600;
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-</style>
diff --git a/platform/src/components/business/OperaCompanyWindow.vue b/platform/src/components/business/OperaCompanyWindow.vue
deleted file mode 100644
index 0739250..0000000
--- a/platform/src/components/business/OperaCompanyWindow.vue
+++ /dev/null
@@ -1,150 +0,0 @@
-<template>
-  <GlobalAlertWindow
-    :title="title"
-    :visible.sync="visible"
-    :confirm-working="isWorking"
-    width="750px"
-    @confirm="confirm"
-  >
-    <el-form :model="form" ref="form" label-width="125px" :rules="rules">
-      <el-form-item label="浼佷笟鍏ㄧО" prop="name">
-        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ鎴蜂紒涓氬叏绉帮紝涓嶈秴杩�30瀛�" v-trim/>
-        浼佷笟鍚嶇О闇�涓庡伐鍟嗛儴闂ㄧ櫥璁颁俊鎭竴鑷�
-      </el-form-item>
-      <el-form-item label="瀹㈡埛绠�绉�" prop="shortName">
-        <el-input v-model="form.shortName" placeholder="璇疯緭鍏ュ鎴风畝绉�" v-trim/>
-      </el-form-item>
-      <el-form-item label="缁熶竴淇$敤浠g爜" prop="creditCode">
-        <el-input v-model="form.creditCode" placeholder="璇疯緭鍏ョ粺涓�淇$敤浠g爜" v-trim/>
-        缁熶竴淇$敤浠g爜闇�涓庡伐鍟嗛儴闂ㄧ櫥璁颁俊鎭竴鑷�
-      </el-form-item>
-      <el-form-item label="鐧诲綍璐﹀彿" prop="managerUserName">
-        <el-input v-model="form.managerUserName" :disabled="!!this.form.id" placeholder="璇疯緭鍏ョ櫥褰曡处鍙�" v-trim/>
-      </el-form-item>
-      <el-form-item label="绯荤粺浣跨敤鏈夋晥鏈�" prop="oepnValidDate">
-        <el-date-picker v-model="form.oepnValidDate" value-format="yyyy-MM-dd" :disabled="!!this.form.id" placeholder="璇疯緭鍏ョ郴缁熶娇鐢ㄦ湁鏁堟湡"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="涓绘挱鏁伴噺闄愬埗" prop="userNum">
-        <el-input v-model="form.userNum" :disabled="!!this.form.id" placeholder="璇疯緭鍏ヤ富鎾暟閲忛檺鍒�" v-trim/>
-        杈撳叆0琛ㄧず涓嶉檺鍒�
-      </el-form-item>
-      <el-form-item label="閿�鍞汉鍛�" prop="salesmanId">
-        <!-- <el-input v-model="form.salesmanId" placeholder="璇疯緭鍏ラ攢鍞汉鍛樼紪鐮�" v-trim/> -->
-        <el-select v-model="form.salesmanId" clearable placeholder="璇烽�夋嫨" filterable >
-          <el-option v-for="item in sales" :label="item.realname" :key="item.id" :value="item.id"></el-option>
-        </el-select>
-      </el-form-item>
-
-      <div class="more">
-        <div class="more-title">鏇村璁剧疆</div>
-        <el-form-item label="鑱旂郴浜�" prop="linkname">
-          <el-input v-model="form.linkname" placeholder="璇疯緭鍏ヨ仈绯讳汉" v-trim/>
-        </el-form-item>
-        <el-form-item label="鑱旂郴浜虹數璇�" prop="linkephone">
-          <el-input v-model="form.linkephone" placeholder="璇疯緭鍏ヨ仈绯讳汉鐢佃瘽" v-trim/>
-        </el-form-item>
-      </div>
-      
-      
-      
-    </el-form>
-  </GlobalAlertWindow>
-</template>
-
-<script>
-import BaseOpera from '@/components/base/BaseOpera'
-import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
-import { findAllList } from '@/api/system/user'
-import { loginNameRule, creditCode } from '@/utils/form'
-export default {
-  name: 'OperaCompanyWindow',
-  extends: BaseOpera,
-  components: { GlobalAlertWindow },
-  data () {
-    return {
-      // 琛ㄥ崟鏁版嵁
-      form: {
-        id: null,
-        managerUserName: '',
-        name: '',
-        shortName: '',
-        remark: '',
-        managerId: '',
-        linkname: '',
-        linkephone: '',
-        creditCode: '',
-        userNum: '5',
-        oepnValidDate: '',
-        salesmanId: ''
-      },
-      sales: [],
-      // 楠岃瘉瑙勫垯
-      rules: {
-        name: [
-          { required: true, message: '璇疯緭鍏ュ鎴蜂紒涓氬叏绉�', tigger: 'blur'}
-        ],
-        managerUserName: [
-          { required: true, validator: loginNameRule, message: '璇疯緭鍏ョ櫥褰曡处鍙�', tigger: 'blur'}
-        ],
-        creditCode: [
-          { validator: creditCode, trigger: 'blur' }
-        ],
-        openUserNum: [
-          { pattern: /^[0-9]+$/, message: '鍙彲浠ヨ緭鍏ユ暟瀛�', trigger: 'change' }
-        ]
-      }
-    }
-  },
-  created () {
-    this.config({
-      api: '/business/company',
-      'field.id': 'id'
-    })
-    findAllList({ type: 0 })
-      .then(res => {
-        this.sales = res
-      })
-  },
-  methods: {
-    open(title, target) {
-      this.title = title
-      this.visible = true
-      // 鏂板缓
-      if (target == null) {
-        this.$nextTick(() => {
-          this.$refs.form.resetFields()
-          let data = new Date(new Date().getTime() + 31536000000)
-          this.form.oepnValidDate = `${data.getFullYear()}-${data.getMonth() +1}-${data.getDate()}`
-          this.form[this.configData['field.id']] = null
-        })
-        return
-      }
-      // 缂栬緫
-      this.$nextTick(() => {
-        for (const key in this.form) {
-          this.form[key] = target[key]
-        }
-        this.form.multifileList.forEach(item => {
-          item.url = item.filefullurl
-        })
-      })
-    },
-  },
-}
-</script>
-
-<style lang="scss" scoped>
-.more {
-  margin-top: 40px;
-  
-  .more-title {
-    font-weight: 600;
-    font-size: 18px;
-    margin-bottom: 10px;
-  }
-}
-::v-deep .el-input {
-  width: 300px;
-  margin-right: 10px;
-}
-</style>
diff --git a/platform/src/components/business/OperaDispatchUnitWindow.vue b/platform/src/components/business/OperaDispatchUnitWindow.vue
index a9d80df..e786e09 100644
--- a/platform/src/components/business/OperaDispatchUnitWindow.vue
+++ b/platform/src/components/business/OperaDispatchUnitWindow.vue
@@ -1,6 +1,7 @@
 <template>
     <GlobalWindow
         :title="title"
+        width="100%"
         :visible.sync="visible"
         :confirm-working="isWorking"
         @confirm="confirm"
diff --git a/platform/src/components/business/OperaGoodsWindow.vue b/platform/src/components/business/OperaGoodsWindow.vue
deleted file mode 100644
index b4d0072..0000000
--- a/platform/src/components/business/OperaGoodsWindow.vue
+++ /dev/null
@@ -1,173 +0,0 @@
-<template>
-  <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm" width="800px"
-    v-loading="isUploading">
-    <el-form :model="form" ref="form" label-width="120px" :rules="rules">
-      <div style="font-size: 18px;font-weight: bold; margin-bottom: 10px;">鍩烘湰淇℃伅</div>
-      <el-form-item label="鍟嗗搧鍚嶇О" prop="name">
-        <el-input v-model="form.name" maxlength="50" placeholder="璇疯緭鍏ュ晢鍝佸悕绉帮紝涓嶈秴杩�50涓瓧" v-trim />
-      </el-form-item>
-      <el-form-item label="鍟嗗搧鍝佺墝" prop="brandId">
-        <el-select v-model="form.brandId" filterable placeholder="璇烽�夋嫨锛屽崟閫�">
-          <el-option v-for="item in brandList()" :key="item.id" :label="item.name" :value="item.id">
-          </el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="鍟嗗搧绫诲埆" prop="categoryId">
-        <el-select v-model="form.categoryId" filterable placeholder="璇烽�夋嫨锛屽崟閫�" @change="categorySelect">
-          <el-option v-for="item in categoryList()" :key="item.id" :label="item.name" :value="item.id">
-          </el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="鎸囧浠凤紙鍏冿級" prop="zdPrice">
-        <el-input v-model="form.zdPrice" @input="priceCHANEG(form.zdPrice, 1)" type="number" placeholder="寤鸿褰曞叆鏁存暟锛屽崟浣嶅厓"
-          v-trim />
-      </el-form-item>
-      <el-form-item label="鍏ユ墜浠凤紙鍏冿級" prop="price">
-        <el-input v-model="form.price" @input="priceCHANEG(form.price, 2)" type="number" placeholder="寤鸿褰曞叆鏁存暟锛屽崟浣嶅厓"
-          v-trim />
-      </el-form-item>
-      <el-form-item label="鍟嗗搧涓诲浘">
-        <UploadAvatarImage :file="{ 'imgurlfull': form.imgfullurl, 'imgurl': form.imgurl }" :uploadData="uploadData"
-          tipsLabel="" @uploadSuccess="uploadReverseSuccess" @uploadEnd="isUploading = false"
-          @uploadBegin="isUploading = true" />
-        鍙兘涓婁紶鍥剧墖鏍煎紡锛宲ng鏍煎紡锛屽缓璁昂瀵�140px*140px
-      </el-form-item>
-      <el-form-item label="鍟嗗搧鍥剧墖">
-        <UploadImage :fileList="form.multifileList" :uploadData="uploadData" @beginUpload="isUploading = true" @endUpload="isUploading = false" />
-        鍙兘涓婁紶鍥剧墖鏍煎紡锛宲ng鏍煎紡锛屽缓璁昂瀵�600*600px
-      </el-form-item>
-      <template v-if="form.baseGoodsParamList && form.baseGoodsParamList.length > 0">
-        <div style="font-size: 18px;font-weight: bold; margin-bottom: 10px;">鍙傛暟灞炴�у�奸厤缃� <span
-            style="font-size: 13px; font-weight: 500;">鎸夐渶閰嶇疆褰撳墠鍟嗗搧鐨勪骇鍝佸弬鏁板�硷紝鍗曚釜鍙傛暟鍊间笉瓒呰繃30涓瓧</span></div>
-        <el-form-item :label="item.name" v-for="(item, index) in form.baseGoodsParamList" :key="index">
-          <el-input v-model="item.val" maxlength="30" type="text" placeholder="璇疯緭鍏�" v-trim />
-        </el-form-item>
-      </template>
-    </el-form>
-  </GlobalWindow>
-</template>
-
-<script>
-import BaseOpera from '@/components/base/BaseOpera'
-import GlobalWindow from '@/components/common/GlobalWindow'
-import UploadAvatarImage from '@/components/common/UploadAvatarImage.vue'
-import UploadImage from '@/components/common/UploadImage.vue'
-import { baseCategory, brand } from '@/api/system/common.js'
-import { companyCreate, companyUpdateById } from '@/api/business/goods.js'
-export default {
-  name: 'OperaGoodsWindow',
-  extends: BaseOpera,
-  components: { GlobalWindow, UploadAvatarImage, UploadImage },
-  data() {
-    return {
-      action: process.env.VUE_APP_API_PREFIX + '/public/upload',
-      name1: '',
-      name2: '',
-      // 琛ㄥ崟鏁版嵁
-      isUploading: false,
-      form: {
-        id: null,
-        name: '',
-        categoryId: '',
-        brandId: '',
-        zdPrice: '',
-        price: '',
-        imgurl: '',
-        imgfullurl: '',
-        multifileList: [],
-        baseGoodsParamList: [],
-      },
-      uploadData: {
-        folder: 'goods_img'
-      },
-      // 楠岃瘉瑙勫垯
-      rules: {
-        name: [
-          { required: true, message: '涓嶈兘涓虹┖', trigger: 'blur' }
-        ],
-        categoryId: [
-          { required: true, message: '璇烽�夋嫨', trigger: 'change' }
-        ],
-        brandId: [
-          { required: true, message: '璇烽�夋嫨', trigger: 'change' }
-        ],
-        zdPrice: [
-          { required: true, message: '涓嶈兘涓虹┖', trigger: 'blur' }
-        ],
-        price: [
-          { required: true, message: '涓嶈兘涓虹┖', trigger: 'blur' }
-        ]
-      },
-      options: []
-    }
-  },
-  inject: ['categoryList', 'brandList'],
-  created() {
-    this.config({
-      api: '/business/goods',
-      'field.id': 'id'
-    })
-    // this.getbrand()
-    // this.getcategory()
-  },
-  methods: {
-    open(title, target) {
-      this.title = title
-      this.visible = true
-      // 鏂板缓
-      if (target == null) {
-        this.$nextTick(() => {
-          this.$refs.form.resetFields()
-          this.form.imgurl = ''
-          this.form.imgfullurl = ''
-          this.form.multifileList = []
-          this.form.baseGoodsParamList = []
-          this.form[this.configData['field.id']] = null
-        })
-        return
-      }
-      // 缂栬緫
-      this.$nextTick(() => {
-        for (const key in this.form) {
-          this.form[key] = target[key]
-        }
-        this.form.multifileList.forEach(item => {
-          item.url = item.filefullurl
-        })
-      })
-    },
-    priceCHANEG(val, type) {
-      if (!/^[1-9]+[0-9]*$/.test(val)) {
-        this.$message.warning('鍙兘杈撳叆姝f暣鏁�')
-        if (type === 1) {
-          this.form.zdPrice = ''
-        } else {
-          this.form.price = ''
-        }
-      }
-    },
-    categorySelect(v) {
-      this.categoryList().forEach(item => {
-        if (item.id === v) {
-          this.form.baseGoodsParamList = JSON.parse(JSON.stringify(item.baseCateParamList))
-          this.form.baseGoodsParamList.forEach(item => {
-            item.pramaId = item.id
-          })
-        }
-      })
-    },
-    uploadReverseSuccess(file) {
-      this.form.imgurl = file.imgurl;
-      this.form.imgfullurl = file.imgurlfull;
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-::v-deep .el-form-item__content {
-  .el-input {
-    width: 400px;
-  }
-}
-</style>
diff --git a/platform/src/components/business/dispatchUnitDetails.vue b/platform/src/components/business/dispatchUnitDetails.vue
index 3913223..a155634 100644
--- a/platform/src/components/business/dispatchUnitDetails.vue
+++ b/platform/src/components/business/dispatchUnitDetails.vue
@@ -1,6 +1,7 @@
 <template>
     <GlobalWindow
         :title="title"
+        width="100%"
         :visible.sync="visible"
         :confirm-working="isWorking"
         @confirm="confirm"
diff --git a/platform/src/components/business/selectProduct.vue b/platform/src/components/business/selectProduct.vue
deleted file mode 100644
index d3702aa..0000000
--- a/platform/src/components/business/selectProduct.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-    <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
-      <el-form :model="form" ref="form" :rules="rules">
-        <el-form-item label="鍟嗗搧绫诲埆" prop="categoryId">
-            <el-select v-model="form.categoryId" placeholder="璇烽�夋嫨">
-                <el-option
-                    v-for="item in categoryList"
-                    :key="item.id"
-                    :label="item.name"
-                    :value="item.id">
-                </el-option>
-            </el-select>
-        </el-form-item>
-        <el-form-item label="鍟嗗搧鑼冨洿" prop="type">
-            <el-radio-group v-model="form.type">
-                <el-radio :label="0">鍏ㄩ儴</el-radio>
-                <el-radio :label="1">閮ㄥ垎</el-radio>
-            </el-radio-group>
-        </el-form-item>
-        <el-form-item label="鍔犱环绯绘暟" prop="rate">
-          <el-input v-model="form.rate" placeholder="骞冲彴閲囪喘浠�*鍔犱环绯绘暟锛屼綔涓哄弬鑰冨嚭鎵嬩环锛屽缓璁緭鍏ュぇ浜�1鐨勬暟瀛�" v-trim />
-        </el-form-item>
-      </el-form>
-      <!-- 閫夋嫨骞冲彴鍟嗗搧 -->
-      <selectProductItem ref="selectProductItem" @result="result" />
-    </GlobalWindow>
-  </template>
-    
-  <script>
-  import BaseOpera from '@/components/base/BaseOpera'
-  import GlobalWindow from '@/components/common/GlobalWindow'
-  import selectProductItem from '@/components/business/selectProductItem'
-  import { baseCategoryList } from '@/api/business/category.js'
-  import { createPlat } from '@/api/business/goods'
-
-  export default {
-    name: 'OperaBrandWindow',
-    extends: BaseOpera,
-    components: { GlobalWindow, selectProductItem },
-    data() {
-      return {
-        categoryList: [],
-        // 琛ㄥ崟鏁版嵁
-        form: {
-          categoryId: '',
-          type: 0,
-          rate: ''
-        },
-        // 楠岃瘉瑙勫垯
-        rules: {
-            categoryId: [
-            { required: true, message: '鍟嗗搧绫诲埆涓嶈兘涓虹┖', trigger: 'blur' }
-          ],
-          type: [
-            { required: true, message: '鍟嗗搧鑼冨洿涓嶈兘涓虹┖', trigger: 'blur' }
-          ],
-          rate: [
-            { required: true, message: '鍔犱环绯绘暟涓嶈兘涓虹┖', trigger: 'blur' }
-          ]
-        }
-      }
-    },
-    created() {
-      this.config({
-        api: '/business/goods',
-        'field.id': 'id'
-      })
-    },
-    methods: {
-        result() {
-          // this.$emit('success')
-          this.$emit('result')
-          this.visible = false
-        },
-        confirm() {
-            this.$refs.form.validate((valid) => {
-                if (!valid) return
-                // 鏂板缓
-                if (this.form.type == 0) {
-                    this.isWorking = true
-                    createPlat({
-                        categoryId: this.form.categoryId,
-                        rate: this.form.rate,
-                        type: this.form.type
-                    }).then(res => {
-                        this.visible = false
-                        this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
-                        // this.$emit('success')
-                        this.$emit('result')
-                    })
-                    .catch(e => {
-                        this.$tip.apiFailed(e)
-                    })
-                    .finally(() => {
-                        this.isWorking = false
-                    })
-                } else {
-                    this.$refs.selectProductItem.open('閫夋嫨骞冲彴鍟嗗搧', this.form)
-                }
-            })
-        },
-        /**
-         * 鎵撳紑绐楀彛
-         * @title 绐楀彛鏍囬
-         * @target 缂栬緫鐨勫璞�
-         */
-        open (title, target) {
-            this.title = title
-            this.visible = true
-            // 鑾峰彇鍒嗙被鍒楄〃
-            baseCategoryList({ type: 1 })
-              .then(res => {
-                this.categoryList = res
-              })
-        }
-    }
-  }
-  </script>
-    
\ No newline at end of file
diff --git a/platform/src/components/business/selectProductItem.vue b/platform/src/components/business/selectProductItem.vue
deleted file mode 100644
index 50edba6..0000000
--- a/platform/src/components/business/selectProductItem.vue
+++ /dev/null
@@ -1,183 +0,0 @@
-<template>
-    <GlobalWindow :title="title" width="70%" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
-        <div class="head">
-            <el-form :inline="true" :model="form" class="demo-form-inline">
-                <el-form-item label="鍟嗗搧鍚嶇О" prop="name">
-                    <el-input v-model="form.name" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�"></el-input>
-                </el-form-item>
-                <el-form-item label="绫诲埆" prop="categoryId">
-                    <el-select v-model="form.categoryId" disabled placeholder="璇烽�夋嫨">
-                        <el-option
-                            v-for="item in categoryList"
-                            :key="item.id"
-                            :label="item.name"
-                            :value="item.id">
-                        </el-option>
-                    </el-select>
-                </el-form-item>
-                <el-form-item>
-                    <el-button type="primary" @click="getList">鏌ヨ</el-button>
-                </el-form-item>
-            </el-form>
-        </div>
-        <div class="tab">
-            <el-table
-            :data="tableData"
-            stripe
-            border
-            @selection-change="handleSelectionChange">
-                <el-table-column type="selection" width="55"></el-table-column>
-                <el-table-column prop="id" label="鍟嗗搧ID" min-width="100px"></el-table-column>
-                <el-table-column prop="name" label="鍟嗗搧鍚嶇О/鍨嬪彿" show-overflow-tooltip min-width="200px">
-                    <template slot-scope="{row}">
-                    <div style="display: flex; align-items: center;">
-                        <div style="width: 70px; height: 70px; flex-shrink: 0;">
-                        <el-image
-                            v-if="row.imgurl"
-                            style="width: 70px; height: 70px"
-                            :src="row.fullImgUrl"
-                            fit="cover"></el-image>
-                        </div>
-                        {{ row.name }}
-                    </div>
-                    </template>
-                </el-table-column>
-                <el-table-column prop="brandName" label="鍝佺墝" show-overflow-tooltip min-width="100px"></el-table-column>
-                <el-table-column prop="categoryName" label="绫诲埆" show-overflow-tooltip min-width="100px"></el-table-column>
-                <el-table-column prop="zdPrice" label="鎸囧浠凤紙鍏冿級" show-overflow-tooltip min-width="100px"></el-table-column>
-                <el-table-column prop="price" label="閲囪喘浠凤紙鍏冿級" show-overflow-tooltip min-width="100px"></el-table-column>
-                <el-table-column label="鍏ユ墜浠凤紙鍏冿級" show-overflow-tooltip min-width="100px">
-                    <template slot-scope="{row}">
-                        <el-input v-model="row.purchasePrice" placeholder="璇疯緭鍏�"></el-input>
-                    </template>
-                </el-table-column>
-            </el-table>
-            <el-pagination
-                @size-change="handleSizeChange"
-                @current-change="handleCurrentChange"
-                :current-page="page"
-                :page-sizes="[10, 20, 30]"
-                :page-size="pageSize"
-                layout="total, sizes, prev, pager, next, jumper"
-                :total="total">
-            </el-pagination>
-        </div>
-    </GlobalWindow>
-</template>
-    
-<script>
-import BaseOpera from '@/components/base/BaseOpera'
-import GlobalWindow from '@/components/common/GlobalWindow'
-import { baseCategoryList } from '@/api/business/category.js'
-import { pageT } from '@/api/business/goods'
-import { createPlat } from '@/api/business/goods'
-
-export default {
-    name: 'OperaBrandWindow',
-    extends: BaseOpera,
-    components: { GlobalWindow },
-    data() {
-        return {
-            // 琛ㄥ崟鏁版嵁
-            form: {
-                categoryId: '',
-                type: 0,
-                rate: '',
-                name: '',
-                goodsParamList: []
-            },
-            pageSize: 10,
-            page: 1,
-            total: 0,
-            tableData: [],
-            categoryList: []
-        }
-    },
-    created() {
-        this.config({
-            api: '/business/anchor',
-            'field.id': 'id'
-        })
-    },
-    methods: {
-        getList() {
-            pageT({
-                capacity: this.pageSize,
-                model: {
-                    categoryId: this.form.categoryId,
-                    name: this.form.name
-                },
-                page: this.page
-            }).then(res => {
-                res.records.forEach(item => {
-                    item.purchasePrice = item.price * this.form.rate
-                })
-                this.tableData = res.records
-                this.total = res.total
-            })
-        },
-        handleCurrentChange(e) {
-            this.page = e
-            this.getList()
-        },
-        handleSizeChange(e) {
-            this.pageSize = e
-            this.getList()
-        },
-        handleSelectionChange(e) {
-            let arr = []
-            e.forEach(item => {
-                arr.push({ goodsId: item.id, price: item.purchasePrice })
-            })
-            this.form.goodsParamList = arr
-            console.log(arr)
-        },
-        confirm() {
-            // 璋冪敤鏂板缓鎺ュ彛
-            this.isWorking = true
-            createPlat({
-                categoryId: this.form.categoryId,
-                goodsParamList: this.form.goodsParamList,
-                rate: this.form.rate,
-                type: this.form.type
-            }).then(res => {
-                this.visible = false
-                this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
-                // this.$emit('success')
-                this.$emit('result')
-            })
-            .catch(e => {
-                this.$tip.apiFailed(e)
-            })
-            .finally(() => {
-                this.isWorking = false
-            })
-        },
-        /**
-         * 鎵撳紑绐楀彛
-         * @title 绐楀彛鏍囬
-         * @target 缂栬緫鐨勫璞�
-         */
-        open(title, target) {
-            this.title = title
-            this.visible = true
-            this.form.categoryId = target.categoryId
-            this.form.rate = Number(target.rate)
-            this.form.type = target.type
-            // 鑾峰彇鍒嗙被鍒楄〃
-            baseCategoryList({})
-                .then(res => {
-                    this.categoryList = res
-                })
-            this.getList()
-        }
-    }
-}
-</script>
-
-<style lang="scss" scoped>
-    .head {
-        width: 100%;
-
-    }
-</style>
\ No newline at end of file
diff --git a/platform/src/views/business/anchor.vue b/platform/src/views/business/anchor.vue
deleted file mode 100644
index bddb751..0000000
--- a/platform/src/views/business/anchor.vue
+++ /dev/null
@@ -1,108 +0,0 @@
-<template>
-  <TableLayout :permissions="['business:companyUser:query']">
-    <!-- 鎼滅储琛ㄥ崟 -->
-    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="浼佷笟鍚嶇О" prop="companyName">
-        <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ヤ紒涓氬悕绉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <!-- <el-form-item label="浼佷笟绠�绉�" prop="shortName">
-        <el-input v-model="searchForm.shortName" placeholder="璇疯緭鍏ヤ紒涓氱畝绉�" @keypress.enter.native="search"></el-input>
-      </el-form-item> -->
-      <el-form-item label="璐﹀彿淇℃伅" prop="keyWords">
-        <el-input v-model="searchForm.keyWords" placeholder="璇疯緭鍏ョ櫥褰曡处鍙�/濮撳悕" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鐘舵��" prop="status">
-        <el-select v-model="searchForm.status" clearable placeholder="璇烽�夋嫨" @change="search">
-          <el-option label="鍚敤" :value="0"></el-option>
-          <el-option label="绂佺敤" :value="1"></el-option>
-        </el-select>
-      </el-form-item>
-      <section>
-        <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button @click="reset">閲嶇疆</el-button>
-      </section>
-    </el-form>
-    <!-- 琛ㄦ牸鍜屽垎椤� -->
-    <template v-slot:table-wrap>
-      <el-table v-loading="isWorking.search" :data="tableData.list" border stripe
-        @selection-change="handleSelectionChange">
-        <!-- <el-table-column type="selection" width="55" align="center"></el-table-column> -->
-        <el-table-column prop="companyName" label="浼佷笟鍚嶇О" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="username" label="鐧诲綍璐﹀彿" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="realname" label="濮撳悕" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="mobile" label="鎵嬫満鍙�" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="status" label="鐘舵��" min-width="100px" align="center">
-          <template slot-scope="{row}">
-            <!-- 0鍚敤 1绂佺敤 -->
-            <el-switch :disabled="!containPermissions(['business:companyUser:update'])" v-model="row.status"
-              :inactive-value="1" :active-value="0" @change="changeStatus(row)">
-            </el-switch>
-          </template>
-
-        </el-table-column>
-        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="140px" align="center"></el-table-column>
-      </el-table>
-      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
-      </pagination>
-    </template>
-
-  </TableLayout>
-</template>
-
-<script>
-import BaseTable from '@/components/base/BaseTable'
-import TableLayout from '@/layouts/TableLayout'
-import Pagination from '@/components/common/Pagination'
-import { updateById } from '@/api/system/user'
-export default {
-  name: 'Company',
-  extends: BaseTable,
-  components: { TableLayout, Pagination },
-  data() {
-    return {
-      oepnValidDate: [],
-      // 鎼滅储
-      searchForm: {
-        companyName: '',
-        keyWords: '',
-        status: '',
-        type: 2
-      }
-    }
-  },
-  created() {
-    this.config({
-      module: '绯荤粺-浼佷笟淇℃伅琛�',
-      api: '/business/companyUser',
-      'field.id': 'id',
-      'field.main': 'id'
-    })
-    this.search()
-  },
-  methods: {
-    selectOepnValidDate(v) {
-      [this.searchForm.oepnValidDateStart, this.searchForm.oepnValidDateEnd] = v
-    },
-    reset() {
-      // this.reset()
-      this.$refs.searchForm.resetFields()
-      this.searchForm.oepnValidDateStart = ''
-      this.searchForm.oepnValidDateEnd = ''
-      this.oepnValidDate = []
-      this.search()
-    },
-    changeStatus(row) {
-      updateById(row)
-        .then(() => {
-          this.$tip.apiSuccess('鏇存柊鎴愬姛')
-        })
-        .catch(err => {
-          this.$tip.apiFailed(err)
-        })
-        .finally(() => {
-          this.handlePageChange()
-        })
-    }
-  },
-}
-</script>
diff --git a/platform/src/views/business/baseData.vue b/platform/src/views/business/baseData.vue
deleted file mode 100644
index 9d9d3e8..0000000
--- a/platform/src/views/business/baseData.vue
+++ /dev/null
@@ -1,152 +0,0 @@
-<template>
-  <TableLayout :permissions="['business:basedata:query']">
-    <!-- 鎼滅储琛ㄥ崟 -->
-    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="80px" inline>
-      <el-form-item label="鍟嗗搧鍚嶇О" prop="name">
-        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="浜笢sku" prop="sku">
-        <el-input v-model="searchForm.sku" placeholder="璇疯緭鍏ヤ含涓渟ku" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鍝佺墝" prop="brand">
-        <el-input v-model="searchForm.brand" placeholder="璇疯緭鍏ュ搧鐗�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="绫诲埆" prop="category">
-        <el-input v-model="searchForm.category" placeholder="璇疯緭鍏ョ被鍒�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鐘舵��" prop="status">
-        <el-select v-model="searchForm.status" clearable placeholder="璇烽�夋嫨">
-          <el-option v-for="item in statusList" :key="item.id" :label="item.name" :value="item.id">
-          </el-option>
-        </el-select>
-        <!-- <el-input v-model="searchForm.status" placeholder="璇疯緭鍏ョ姸鎬� 0鍚敤 1绂佺敤" @keypress.enter.native="search"></el-input> -->
-      </el-form-item>
-      <section>
-        <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button @click="reset">閲嶇疆</el-button>
-      </section>
-    </el-form>
-    <!-- 琛ㄦ牸鍜屽垎椤� -->
-    <template v-slot:table-wrap>
-      <ul class="toolbar" v-permissions="['business:basedata:create', 'business:basedata:delete']">
-        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete"
-            v-permissions="['business:basedata:delete']">鎵归噺鍒犻櫎</el-button></li>
-      </ul>
-      <el-table v-loading="isWorking.search" :data="tableData.list" border stripe @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="id" label="涓婚敭" min-width="100px"></el-table-column>
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="name" label="鍟嗗搧涓诲浘" min-width="80px">
-          <template slot-scope="{row}">
-              <div style="display: flex; align-items: center;">
-                <div style="width: 70px; height: 70px; flex-shrink: 0;">
-                  <el-image v-if="row.imgurl" style="width: 70px; height: 70px" :src="row.imgurl"
-                    :preview-src-list="[row.imgurl]" fit="cover"></el-image>
-                </div>
-              </div>
-          </template>
-        </el-table-column>
-        <el-table-column prop="name" label="鍟嗗搧鍚嶇О" min-width="150px">
-          <template slot-scope="{row}">
-            <a :href="`${row.url}`" target="_blank">{{ row.name }}</a>
-          </template>
-        </el-table-column>
-        <!--        <el-table-column prop="title" label="鏍囬" min-width="100px"></el-table-column>-->
-        <el-table-column prop="sku" label="浜笢sku" min-width="100px"></el-table-column>
-        <el-table-column prop="brand" label="鍝佺墝" min-width="120px"></el-table-column>
-        <el-table-column prop="category" label="绫诲埆" min-width="100px"></el-table-column>
-        <el-table-column prop="price" label="浠锋牸锛堝厓锛�" min-width="100px"></el-table-column>
-        <el-table-column prop="saleprice" label="閲囪喘浠锋牸锛堝厓锛�" min-width="100px"></el-table-column>
-        <el-table-column prop="haveStock" label="搴撳瓨鎯呭喌" min-width="100px"></el-table-column>
-        <el-table-column prop="bgImgs" label="澶у浘" min-width="80px">
-          <template slot-scope="{row}">
-            <el-button type="text" @click="showImage(row.bgImgs)">鏌ョ湅澶у浘</el-button>
-            <!-- <div style="display: flex; align-items: center;">
-              <div style="width: 70px; height: 70px; flex-shrink: 0;">
-                <el-image v-if="row.bgImgs" style="width: 70px; height: 70px" :src="row.bgImgs"
-                  :preview-src-list="row.bgImgs" fit="cover"></el-image>
-              </div>
-            </div> -->
-          </template>
-        </el-table-column>
-        <el-table-column prop="status" label="澶勭悊鐘舵��" min-width="100px">
-          <template slot-scope="{row}">
-            {{ row.status == 1 ? "宸插鐞�" : "鏈鐞�" }}
-          </template>
-        </el-table-column>
-        <el-table-column v-if="containPermissions(['business:basedata:update', 'business:basedata:delete'])" label="鎿嶄綔"
-          min-width="80" fixed="right">
-          <template slot-scope="{row}">
-            <!--
-            <el-button type="text" @click="$refs.operaBaseDataWindow.open('缂栬緫鍟嗗搧婧愭暟鎹俊鎭〃', row)" icon="el-icon-edit" v-permissions="['business:basedata:update']">缂栬緫</el-button>
--->
-            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete"
-              v-permissions="['business:basedata:delete']">鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
-      </pagination>
-    </template>
-    <!-- 鏂板缓/淇敼 -->
-    <OperaBaseDataWindow ref="operaBaseDataWindow" @success="handlePageChange" />
-    <el-image-viewer 
-      v-if="showViewer" 
-      :on-close="closeViewer"
-      :initialIndex="0"
-      :url-list="srcList"
-      :z-index="3000"
-    />
-  </TableLayout>
-</template>
-
-<script>
-import BaseTable from '@/components/base/BaseTable'
-import TableLayout from '@/layouts/TableLayout'
-import Pagination from '@/components/common/Pagination'
-import OperaBaseDataWindow from '@/components/business/OperaBaseDataWindow'
-import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
-export default {
-  name: 'BaseData',
-  extends: BaseTable,
-  components: { TableLayout, Pagination, OperaBaseDataWindow, ElImageViewer },
-  data() {
-    return {
-      showViewer: false,
-      srcList: [],
-      // 鎼滅储
-      searchForm: {
-        name: '',
-        sku: '',
-        brand: '',
-        category: '',
-        status: null
-      },
-      statusList: [
-        { name: '鏈鐞�', id: 0 },
-        { name: '宸插鐞�', id: 1 }
-      ]
-    }
-  },
-  created() {
-    this.config({
-      module: '鍟嗗搧婧愭暟鎹俊鎭〃',
-      api: '/business/baseData',
-      'field.id': 'id',
-      'field.main': 'id'
-    })
-    this.search()
-  },
-  methods: {
-    showImage(imgs) {
-      this.srcList = []
-      this.srcList = imgs
-      this.showViewer = true
-    },
-    closeViewer() {
-      this.showViewer = false
-    }
-    
-  },
-}
-</script>
diff --git a/platform/src/views/business/brand.vue b/platform/src/views/business/brand.vue
deleted file mode 100644
index 5392956..0000000
--- a/platform/src/views/business/brand.vue
+++ /dev/null
@@ -1,93 +0,0 @@
-<template>
-  <TableLayout :permissions="['business:brand:query']">
-    <!-- 鎼滅储琛ㄥ崟 -->
-    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="鍝佺墝鍚嶇О" prop="name">
-        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ搧鐗屽悕绉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <section>
-        <el-button type="primary" @click="search">鎼滅储</el-button>
-        <!-- <el-button type="primary" :loading="isWorking.export" v-permissions="['business:brand:exportExcel']" @click="exportExcel">瀵煎嚭</el-button> -->
-        <el-button @click="reset">閲嶇疆</el-button>
-      </section>
-    </el-form>
-    <!-- 琛ㄦ牸鍜屽垎椤� -->
-    <template v-slot:table-wrap>
-      <ul class="toolbar" v-permissions="['business:brand:create']">
-        <li><el-button type="primary" @click="$refs.operaBrandWindow.open('鏂板缓鍝佺墝')" icon="el-icon-plus"
-            v-permissions="['business:brand:create']">鏂板缓</el-button></li>
-      </ul>
-      <el-table v-loading="isWorking.search" :data="tableData.list" stripe border :header-cell-style="rowStyle"
-        :cell-style="rowStyle">
-        <el-table-column prop="name" label="鍝佺墝鍚嶇О" min-width="100px"></el-table-column>
-        <el-table-column prop="imgfullurl" label="鍝佺墝鍥炬爣" min-width="100px">
-          <template slot-scope="{row}">
-            <el-image v-if="row.imgfullurl" style="width: 70px; height: 70px" :src="row.imgfullurl"
-              :preview-src-list="[row.imgfullurl]" fit="cover"></el-image>
-          </template>
-        </el-table-column>
-        <el-table-column prop="sortnum" label="鎺掑簭鐮�(鍗囧簭)" min-width="100px"></el-table-column>
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column v-if="containPermissions(['business:brand:update', 'business:brand:delete'])" label="鎿嶄綔"
-          min-width="120" fixed="right">
-          <template slot-scope="{row}">
-            <el-button type="text" @click="edit(row)" icon="el-icon-edit"
-              v-permissions="['business:brand:update']">缂栬緫</el-button>
-            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete"
-              v-permissions="['business:brand:delete']">鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
-      </pagination>
-    </template>
-    <!-- 鏂板缓/淇敼 -->
-    <OperaBrandWindow ref="operaBrandWindow" @success="handlePageChange" />
-  </TableLayout>
-</template>
-  
-<script>
-import BaseTable from '@/components/base/BaseTable'
-import TableLayout from '@/layouts/TableLayout'
-import Pagination from '@/components/common/Pagination'
-import OperaBrandWindow from '@/components/business/OperaBrandWindow'
-export default {
-  name: 'Brand',
-  extends: BaseTable,
-  components: { TableLayout, Pagination, OperaBrandWindow },
-  data() {
-    return {
-      // 鎼滅储
-      searchForm: {
-        name: '',
-        type: 1
-      }
-    }
-  },
-  created() {
-    this.config({
-      module: '鍝佺墝',
-      api: '/business/brand',
-      'field.id': 'id',
-      'field.main': 'name'
-    })
-    this.search()
-  },
-  methods: {
-    rowStyle() {
-      return "text-align:center";
-    },
-    edit(row) {
-      let obj = {
-        id: row.id,
-        name: row.name,
-        sortnum: row.sortnum,
-        imgurl: row.imgurl,
-        imgfullurl: row.imgfullurl
-      }
-      this.$refs.operaBrandWindow.open('缂栬緫鍝佺墝', obj)
-    }
-  }
-}
-</script>
-  
\ No newline at end of file
diff --git a/platform/src/views/business/category.vue b/platform/src/views/business/category.vue
deleted file mode 100644
index f937c4c..0000000
--- a/platform/src/views/business/category.vue
+++ /dev/null
@@ -1,120 +0,0 @@
-<template>
-  <TableLayout :permissions="['business:category:query']">
-    <!-- 鎼滅储琛ㄥ崟 -->
-    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="绫诲埆鍚嶇О" prop="name">
-        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ョ被鍒悕绉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <section>
-        <el-button type="primary" @click="search">鎼滅储</el-button>
-        <!-- <el-button type="primary" :loading="isWorking.export" v-permissions="['business:category:exportExcel']" @click="exportExcel">瀵煎嚭</el-button> -->
-        <el-button @click="reset">閲嶇疆</el-button>
-      </section>
-    </el-form>
-    <!-- 琛ㄦ牸鍜屽垎椤� -->
-    <template v-slot:table-wrap>
-      <ul class="toolbar" v-permissions="['business:category:create']">
-        <li><el-button type="primary" @click="$refs.operaCategoryWindow.open('鏂板缓绫诲埆')" icon="el-icon-plus"
-            v-permissions="['business:category:create']">鏂板缓</el-button></li>
-      </ul>
-      <el-table v-loading="isWorking.search" :data="tableData.list" stripe border :header-cell-style="rowStyle"
-        :cell-style="rowStyle">
-        <el-table-column prop="imgurl" label="鍥炬爣" min-width="100px">
-          <template slot-scope="{row}">
-            <el-image v-if="row.imgurl" style="width: 70px; height: 70px" :src="row.imgfullurl"
-              :preview-src-list="[row.imgfullurl]" fit="cover"></el-image>
-          </template>
-        </el-table-column>
-        <el-table-column prop="name" label="绫诲埆鍚嶇О" min-width="100px"></el-table-column>
-        <el-table-column prop="priceRate" label="鍔犱环绯绘暟" min-width="100px"></el-table-column>
-        <el-table-column prop="sortnum" label="鎺掑簭鐮�(鍗囧簭)" min-width="100px"></el-table-column>
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column v-if="containPermissions(['business:category:update'])" prop="status" label="鐘舵��" min-width="100px">
-          <template slot-scope="{row}">
-            <el-switch v-model="row.status" @change="changeStatus(row)" :active-value="0" :inactive-value="1">
-            </el-switch>
-          </template>
-        </el-table-column>
-        <el-table-column v-if="containPermissions(['business:category:update', 'business:category:delete'])" label="鎿嶄綔"
-          min-width="120" fixed="right">
-          <template slot-scope="{row}">
-            <el-button type="text" @click="edit(row.id)" v-permissions="['business:category:update']">缂栬緫</el-button>
-            <el-button type="text" @click="deleteById(row)" v-permissions="['business:category:delete']">鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
-      </pagination>
-    </template>
-    <!-- 鏂板缓/淇敼 -->
-    <OperaCategoryWindow ref="operaCategoryWindow" @success="handlePageChange" />
-  </TableLayout>
-</template>
-  
-<script>
-import BaseTable from '@/components/base/BaseTable'
-import TableLayout from '@/layouts/TableLayout'
-import Pagination from '@/components/common/Pagination'
-import OperaCategoryWindow from '@/components/business/OperaCategoryWindow'
-import { queryById, updateDisableById } from '@/api/business/category.js'
-export default {
-  name: 'Category',
-  extends: BaseTable,
-  components: { TableLayout, Pagination, OperaCategoryWindow },
-  data() {
-    return {
-      // 鎼滅储
-      searchForm: {
-        name: ''
-      }
-    }
-  },
-  created() {
-    this.config({
-      module: '绫诲埆',
-      api: '/business/category',
-      'field.id': 'id',
-      'field.main': 'name'
-    })
-    this.search()
-  },
-  methods: {
-    rowStyle() {
-      return "text-align:center";
-    },
-    changeStatus(item) {
-      updateDisableById({
-        id: item.id,
-        status: item.status
-      }).then(res => {
-        this.$tip.apiSuccess('鏇存柊鎴愬姛')
-      }).catch (err => {
-          this.$message.error(err)
-        })
-        .finally(() => {
-        this.handlePageChange()
-      })
-    },
-    edit(id) {
-      queryById(id)
-        .then(res => {
-          let obj = {
-            id,
-            name: res.name,
-            attrFirst: res.attrFirst,
-            attrFirstList: res.attrFirstList,
-            attrSecond: res.attrSecond,
-            attrSecondList: res.attrSecondList,
-            sortnum: res.sortnum,
-            paramList: res.paramList,
-            imgurl: res.imgurl,
-            budgetList: res.budgetList,
-            fileList: res.imgurl ? [{ url: res.prefixUrl + res.imgurl }] : []
-          }
-          this.$refs.operaCategoryWindow.open('缂栬緫绫诲埆', res)
-        })
-    }
-  }
-}
-</script>
-  
\ No newline at end of file
diff --git a/platform/src/views/business/company.vue b/platform/src/views/business/company.vue
deleted file mode 100644
index 8db04cd..0000000
--- a/platform/src/views/business/company.vue
+++ /dev/null
@@ -1,153 +0,0 @@
-<template>
-  <TableLayout :permissions="['business:company:query']">
-    <!-- 鎼滅储琛ㄥ崟 -->
-    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="浼佷笟鍚嶇О" prop="name">
-        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ヤ紒涓氬悕绉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <!-- <el-form-item label="浼佷笟绠�绉�" prop="shortName">
-        <el-input v-model="searchForm.shortName" placeholder="璇疯緭鍏ヤ紒涓氱畝绉�" @keypress.enter.native="search"></el-input>
-      </el-form-item> -->
-      <el-form-item label="鐧诲綍璐﹀彿" prop="managerUserName">
-        <el-input v-model="searchForm.managerUserName" placeholder="璇疯緭鍏ョ櫥褰曡处鍙�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鏈夋晥鏈�" prop="oepnValidDate">
-        <el-date-picker type="daterange" v-model="oepnValidDate" value-format="yyyy-MM-dd" start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡" @change="selectOepnValidDate" />
-      </el-form-item>
-      <el-form-item label="鐘舵��" prop="status">
-        <el-select v-model="searchForm.status" clearable placeholder="璇烽�夋嫨" @change="search">
-          <el-option label="鍚敤" :value="0"></el-option>
-          <el-option label="绂佺敤" :value="1"></el-option>
-        </el-select>
-      </el-form-item>
-      <section>
-        <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button @click="reset">閲嶇疆</el-button>
-      </section>
-    </el-form>
-    <!-- 琛ㄦ牸鍜屽垎椤� -->
-    <template v-slot:table-wrap>
-      <ul class="toolbar" v-permissions="['business:company:create']">
-        <li><el-button type="primary" @click="$refs.operaCompanyWindow.open('鏂板缓绯荤粺-浼佷笟淇℃伅琛�')"
-            v-permissions="['business:company:create']">鏂板缓</el-button></li>
-      </ul>
-      <el-table v-loading="isWorking.search" :data="tableData.list" border stripe
-        @selection-change="handleSelectionChange">
-        <!-- <el-table-column type="selection" width="55" align="center"></el-table-column> -->
-        <el-table-column prop="id" label="浼佷笟缂栧彿" fixed="left" min-width="80px" align="center"></el-table-column>
-        <el-table-column prop="name" label="浼佷笟鍚嶇О" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="managerUserName" label="鐧诲綍璐﹀彿" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="linkname" label="鑱旂郴浜�" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="linkephone" label="鑱旂郴浜虹數璇�" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="oepnValidDate" label="鏈夋晥鏈�" min-width="140px" align="center"></el-table-column>
-        <el-table-column prop="userNum" label="涓绘挱璐﹀彿闄愬埗" min-width="100px" align="center">
-          <template slot-scope="{row}">
-            {{ row.userNum || '涓嶉檺' }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="anchorUserNum" label="涓绘挱鏁�" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="empUserNum" label="鍛樺伐鏁�" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="goodsNum" label="鍟嗗搧鏁�" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="salesmanRealName" label="閿�鍞汉鍛�" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="status" label="鐘舵��" min-width="100px" align="center">
-          <template slot-scope="{row}">
-            <!-- 0鍚敤 1绂佺敤 -->
-            <el-switch :disabled="!containPermissions(['business:company:update'])" v-model="row.status"
-              :inactive-value="1" :active-value="0" @change="changeStatus(row)">
-            </el-switch>
-          </template>
-
-        </el-table-column>
-        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="140px" align="center"></el-table-column>
-        <el-table-column v-if="containPermissions(['business:company:update', 'business:company:delete'])" label="鎿嶄綔"
-          min-width="160" align="center" fixed="right">
-          <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaCompanyWindow.open('缂栬緫浼佷笟', row)"
-              v-permissions="['business:company:update']">缂栬緫</el-button>
-            <el-button type="text" @click="$refs.operaCompanyValidDateWindow.open('璋冩暣鏈夋晥鏈�', row)"
-              v-permissions="['business:company:update']">璋冩暣鏈夋晥鏈�</el-button>
-            <el-button type="text" @click="deleteById(row)" style="color: red;" v-permissions="['business:company:delete']">鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
-      </pagination>
-    </template>
-    <!-- 鏂板缓/淇敼 -->
-    <OperaCompanyWindow ref="operaCompanyWindow" @success="handlePageChange" />
-    <OperaCompanyValidDateWindow ref="operaCompanyValidDateWindow" @success="handlePageChange" />
-  </TableLayout>
-</template>
-
-<script>
-import BaseTable from '@/components/base/BaseTable'
-import TableLayout from '@/layouts/TableLayout'
-import Pagination from '@/components/common/Pagination'
-import OperaCompanyWindow from '@/components/business/OperaCompanyWindow'
-import OperaCompanyValidDateWindow from '@/components/business/OperaCompanyValidDateWindow'
-import { updateById } from '@/api/business/company'
-export default {
-  name: 'Company',
-  extends: BaseTable,
-  components: { TableLayout, Pagination, OperaCompanyWindow, OperaCompanyValidDateWindow },
-  data() {
-    return {
-      oepnValidDate: [],
-      // 鎼滅储
-      searchForm: {
-        oepnValidDateStart: '',
-        oepnValidDateEnd: '',
-        managerUserName: '',
-        updateTime: '',
-        name: '',
-        shortName: '',
-        remark: '',
-        managerId: '',
-        linkname: '',
-        linkephone: '',
-        creditCode: '',
-        userNum: '',
-        oepnValidDate: '',
-        oepnType: '',
-        salesmanId: '',
-        status: ''
-      }
-    }
-  },
-  created() {
-    this.config({
-      module: '绯荤粺-浼佷笟淇℃伅琛�',
-      api: '/business/company',
-      'field.id': 'id',
-      'field.main': 'id'
-    })
-    this.search()
-  },
-  methods: {
-    selectOepnValidDate(v) {
-      [this.searchForm.oepnValidDateStart, this.searchForm.oepnValidDateEnd] = v
-    },
-    reset() {
-      // this.reset()
-      this.$refs.searchForm.resetFields()
-      this.searchForm.oepnValidDateStart = ''
-      this.searchForm.oepnValidDateEnd = ''
-      this.oepnValidDate = []
-      this.search()
-    },
-    changeStatus(row) {
-      updateById(row)
-        .then(() => {
-          this.$tip.apiSuccess('鏇存柊鎴愬姛')
-        })
-        .catch(err => {
-          this.$tip.apiFailed(err)
-        })
-        .finally(() => {
-          this.handlePageChange()
-        })
-    }
-  },
-}
-</script>
diff --git a/platform/src/views/business/companyUser.vue b/platform/src/views/business/companyUser.vue
deleted file mode 100644
index a0b541d..0000000
--- a/platform/src/views/business/companyUser.vue
+++ /dev/null
@@ -1,115 +0,0 @@
-<template>
-  <TableLayout :permissions="['business:companyUser:query']">
-    <!-- 鎼滅储琛ㄥ崟 -->
-    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="浼佷笟鍚嶇О" prop="companyName">
-        <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ヤ紒涓氬悕绉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <!-- <el-form-item label="浼佷笟绠�绉�" prop="shortName">
-        <el-input v-model="searchForm.shortName" placeholder="璇疯緭鍏ヤ紒涓氱畝绉�" @keypress.enter.native="search"></el-input>
-      </el-form-item> -->
-      <el-form-item label="璐﹀彿淇℃伅" prop="keyWords">
-        <el-input v-model="searchForm.keyWords" placeholder="璇疯緭鍏ョ櫥褰曡处鍙�/濮撳悕" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鐘舵��" prop="status">
-        <el-select v-model="searchForm.status" clearable placeholder="璇烽�夋嫨" @change="search">
-          <el-option label="鍚敤" :value="0"></el-option>
-          <el-option label="绂佺敤" :value="1"></el-option>
-        </el-select>
-      </el-form-item>
-      <section>
-        <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button @click="reset">閲嶇疆</el-button>
-      </section>
-    </el-form>
-    <!-- 琛ㄦ牸鍜屽垎椤� -->
-    <template v-slot:table-wrap>
-      <el-table v-loading="isWorking.search" :data="tableData.list" border stripe
-        @selection-change="handleSelectionChange">
-        <!-- <el-table-column type="selection" width="55" align="center"></el-table-column> -->
-        <el-table-column prop="companyName" label="浼佷笟鍚嶇О" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="username" label="鐧诲綍璐﹀彿" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="realname" label="濮撳悕" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="mobile" label="鎵嬫満鍙�" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="roleName" label="瑙掕壊" min-width="100px" align="center">
-          <template slot-scope="{row}">
-            <ul>
-              <li v-for="role in row.roles" :key="role.id">{{role.name}}</li>
-            </ul>
-          </template>
-        </el-table-column>
-        <el-table-column prop="status" label="鐘舵��" min-width="100px" align="center">
-          <template slot-scope="{row}">
-            <!-- 0鍚敤 1绂佺敤 -->
-            <el-switch :disabled="!containPermissions(['business:companyUser:update'])" v-model="row.status"
-              :inactive-value="1" :active-value="0" @change="changeStatus(row)">
-            </el-switch>
-          </template>
-
-        </el-table-column>
-        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="140px" align="center"></el-table-column>
-      </el-table>
-      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
-      </pagination>
-    </template>
-
-  </TableLayout>
-</template>
-
-<script>
-import BaseTable from '@/components/base/BaseTable'
-import TableLayout from '@/layouts/TableLayout'
-import Pagination from '@/components/common/Pagination'
-import { updateById } from '@/api/system/user'
-export default {
-  name: 'Company',
-  extends: BaseTable,
-  components: { TableLayout, Pagination },
-  data() {
-    return {
-      oepnValidDate: [],
-      // 鎼滅储
-      searchForm: {
-        companyName: '',
-        keyWords: '',
-        status: '',
-        type: 1
-      }
-    }
-  },
-  created() {
-    this.config({
-      module: '绯荤粺-浼佷笟淇℃伅琛�',
-      api: '/business/companyUser',
-      'field.id': 'id',
-      'field.main': 'id'
-    })
-    this.search()
-  },
-  methods: {
-    selectOepnValidDate(v) {
-      [this.searchForm.oepnValidDateStart, this.searchForm.oepnValidDateEnd] = v
-    },
-    reset() {
-      // this.reset()
-      this.$refs.searchForm.resetFields()
-      this.searchForm.oepnValidDateStart = ''
-      this.searchForm.oepnValidDateEnd = ''
-      this.oepnValidDate = []
-      this.search()
-    },
-    changeStatus(row) {
-      updateById(row)
-        .then(() => {
-          this.$tip.apiSuccess('鏇存柊鎴愬姛')
-        })
-        .catch(err => {
-          this.$tip.apiFailed(err)
-        })
-        .finally(() => {
-          this.handlePageChange()
-        })
-    }
-  },
-}
-</script>
diff --git a/platform/src/views/business/fileRecord.vue b/platform/src/views/business/fileRecord.vue
deleted file mode 100644
index f2160c6..0000000
--- a/platform/src/views/business/fileRecord.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-  <TableLayout :permissions="['business:filerecord:query']">
-    <!-- 鎼滅储琛ㄥ崟 -->
-    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      
-      <!-- <el-form-item label="鏂囦欢鍚�" prop="name">
-        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ユ枃浠跺悕" @keypress.enter.native="search"></el-input>
-      </el-form-item> -->
-      
-      <el-form-item label="鏂囦欢澶瑰悕绉�" prop="folder">
-        <el-input v-model="searchForm.folder" placeholder="璇疯緭鍏ユ枃浠跺す鍚嶇О" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-     
-      <el-form-item label="OSS鏂囦欢key" prop="keyval">
-        <el-input v-model="searchForm.keyval" placeholder="璇疯緭鍏SS鏂囦欢key" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鐘舵��" prop="status">
-        <el-select v-model="searchForm.status" clearable placeholder="璇烽�夋嫨鐘舵��">
-          <el-option v-for="item in statusList" :key="item.id" :label="item.name" :value="item.id">
-          </el-option>
-        </el-select>
-      </el-form-item> 
-      <section>
-        <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button @click="reset">閲嶇疆</el-button>
-      </section>
-    </el-form>
-    <!-- 琛ㄦ牸鍜屽垎椤� -->
-    <template v-slot:table-wrap>
-      <el-table
-        v-loading="isWorking.search"
-        :data="tableData.list"
-        border
-        stripe
-      >
-       <el-table-column type="index" :index="newIndex" label="搴忓彿" width="80px" align="center"></el-table-column>
-       <el-table-column prop="name" label="鏂囦欢" width="100px" align="center">
-        <template slot-scope="{row}">
-          <el-image v-if="row.url" style="width: 70px; height: 70px" :src="row.url"
-                  :preview-src-list="[row.url]" fit="cover"></el-image>
-        </template>
-       </el-table-column>
-        <el-table-column prop="folder" label="鏂囦欢澶瑰悕绉�" width="140px" align="center"></el-table-column>
-        <el-table-column prop="keyval" label="OSS鏂囦欢key" min-width="120px" align="center"></el-table-column>
-        <el-table-column prop="status" label="鐘舵��" width="100px" align="center">
-          <template slot-scope="{row}">
-            <!--  0鏈笂浼� 1宸蹭笂浼� 2涓婁紶澶辫触 -->
-            {{ row.status == 0 ? '鏈笂浼�' : row.status == 1 ? '宸蹭笂浼�' : '涓婁紶澶辫触' }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" width="150px" align="center"></el-table-column>
-        <el-table-column prop="editDate" label="鏇存柊鏃堕棿" width="150px" align="center"></el-table-column>
-<!--      
-        <el-table-column prop="editor" label="鏇存柊浜虹紪鐮�" min-width="100px"></el-table-column>
-        <el-table-column prop="isdeleted" label="鏄惁鍒犻櫎0鍚� 1鏄�" min-width="100px"></el-table-column>
-        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
-        <el-table-column prop="objId" label="鍏宠仈瀵硅薄缂栫爜" min-width="100px"></el-table-column>
-        <el-table-column prop="type" label="绫诲瀷0鍥剧墖 1瑙嗛 2鍏朵粬" min-width="100px"></el-table-column> -->
-      </el-table>
-      <pagination
-        @size-change="handleSizeChange"
-        @current-change="handlePageChange"
-        :pagination="tableData.pagination"
-      >
-      </pagination>
-    </template>
-  </TableLayout>
-</template>
-
-<script>
-import BaseTable from '@/components/base/BaseTable'
-import TableLayout from '@/layouts/TableLayout'
-import Pagination from '@/components/common/Pagination'
-export default {
-  name: 'FileRecord',
-  extends: BaseTable,
-  components: { TableLayout, Pagination },
-  data () {
-    return {
-      // 鎼滅储
-      searchForm: {
-        id: '',
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        name: '',
-        info: '',
-        objId: '',
-        type: '',
-        folder: '',
-        status: '',
-        keyval: ''
-      },
-      statusList: [
-        // 0鏈笂浼� 1宸蹭笂浼� 2涓婁紶澶辫触
-        { name: '鏈笂浼�', id: 0 },
-        { name: '宸蹭笂浼�', id: 1 },
-        { name: '涓婁紶澶辫触', id: 2 }
-      ]
-    }
-  },
-  created () {
-    this.config({
-      module: '闄勪欢涓婁紶杩涘害琛�',
-      api: '/business/fileRecord',
-      'field.id': 'id',
-      'field.main': 'id'
-    })
-    this.search()
-  },
-  methods: {
-    newIndex(index) {
-      return (this.tableData.pagination.pageIndex - 1) * 10 + index + 1
-    }
-  },
-}
-</script>
diff --git a/platform/src/views/business/goods.vue b/platform/src/views/business/goods.vue
deleted file mode 100644
index dcc2e33..0000000
--- a/platform/src/views/business/goods.vue
+++ /dev/null
@@ -1,227 +0,0 @@
-
-<template>
-  <TableLayout :permissions="['business:basegoods:query']">
-    <!-- 鎼滅储琛ㄥ崟 -->
-    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="鍟嗗搧鍚嶇О" prop="name">
-        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鍟嗗搧ID" prop="id">
-        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ュ晢鍝両D" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="绫诲埆" prop="categoryId">
-        <el-select v-model="searchForm.categoryId" clearable placeholder="璇烽�夋嫨">
-          <el-option v-for="item in categoryList" :key="item.id" :label="item.name" :value="item.id">
-          </el-option>
-        </el-select>
-        <!-- <el-input v-model="searchForm.categoryId" placeholder="璇疯緭鍏ユ墍灞炲搧绫荤紪鐮�" @keypress.enter.native="search"></el-input> -->
-      </el-form-item>
-      <el-form-item label="鍝佺墝" prop="brandId">
-        <el-select v-model="searchForm.brandId" clearable placeholder="璇烽�夋嫨">
-          <el-option v-for="item in brandList" :key="item.id" :label="item.name" :value="item.id">
-          </el-option>
-        </el-select>
-        <!-- <el-input v-model="searchForm.brandId" placeholder="璇疯緭鍏ユ墍灞炲搧鐗岀紪鐮�" @keypress.enter.native="search"></el-input> -->
-      </el-form-item>
-      <el-form-item label="鐘舵��" prop="status">
-        <el-select v-model="searchForm.status" clearable placeholder="璇烽�夋嫨">
-          <el-option v-for="item in statusList" :key="item.id" :label="item.name" :value="item.id">
-          </el-option>
-        </el-select>
-        <!-- <el-input v-model="searchForm.status" placeholder="璇疯緭鍏ョ姸鎬� 0鍚敤 1绂佺敤" @keypress.enter.native="search"></el-input> -->
-      </el-form-item>
-      <section>
-        <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button @click="reset">閲嶇疆</el-button>
-      </section>
-    </el-form>
-    <!-- 琛ㄦ牸鍜屽垎椤� -->
-    <template v-slot:table-wrap>
-      <ul class="toolbar" v-permissions="['business:basegoods:create', 'business:basegoods:delete']">
-        <li v-permissions="['business:basegoods:create']">
-          <el-button type="primary" @click="$refs.operaGoodsWindow.open('鏂板缓鍟嗗搧')" icon="el-icon-plus">鏂板缓</el-button>
-        </li>
-        <!-- <el-button type="primary" :loading="isWorking.export"
-          @click="$refs.selectProduct.open('閫夋嫨骞冲彴鍟嗗搧')">閫夋嫨骞冲彴鍟嗗搧</el-button> -->
-        <li v-permissions="['business:basegoods:exportExcel', 'business:goods:delete']">
-          <ImportButton text="瀵煎叆" template-name="goods_import_modle.xlsx"
-            template-path="/template/goods_import_modle.xlsx" action="/business/baseGoods/importExcel"
-            @success="search" />
-        </li>
-        <li>
-          <el-button type="primary" :loading="isWorking.export" @click="bulkOperation(0)">鎵归噺涓婃灦</el-button>
-        </li>
-        <li>
-          <el-button type="primary" :loading="isWorking.export" @click="bulkOperation(1)">鎵归噺涓嬫灦</el-button>
-        </li>
-        <li v-permissions="['business:goods:delete']">
-          <el-button type="danger" @click="deleteByIdInBatch">鎵归噺鍒犻櫎</el-button>
-        </li>
-      </ul>
-      <el-table v-loading="isWorking.search" :data="tableData.list" stripe border :header-cell-style="rowStyle"
-        :cell-style="rowStyle" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="id" label="鍟嗗搧ID" min-width="100px"></el-table-column>
-        <el-table-column prop="name" label="鍟嗗搧鍚嶇О/鍨嬪彿" min-width="200px">
-          <template slot-scope="{row}">
-            <div style="display: flex; align-items: center;">
-              <div style="width: 70px; height: 70px; flex-shrink: 0;">
-                <el-image v-if="row.imgurl" style="width: 70px; height: 70px" :src="row.fullImgUrl"
-                  :preview-src-list="[row.fullImgUrl]" fit="cover"></el-image>
-              </div>
-              <span style="margin-left: 15px">{{ row.name }}</span>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column prop="brandName" label="鍝佺墝" min-width="100px"></el-table-column>
-        <el-table-column prop="categoryName" label="绫诲埆" min-width="100px"></el-table-column>
-        <el-table-column prop="zdPrice" label="鎸囧浠凤紙鍏冿級" min-width="100px"></el-table-column>
-        <el-table-column prop="jdPrice" label="閲囪喘浠�(鍏�)" min-width="100px"></el-table-column>
-        <el-table-column prop="price" label="閿�鍞环(鍏�)" min-width="100px"></el-table-column>
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="status" v-if="containPermissions(['business:basegoods:update'])" label="鐘舵��" min-width="100px">
-          <template slot-scope="{row}">
-            <el-switch v-model="row.status" @change="changeStatus(row)" active-color="#13ce66" inactive-color="#ff4949"
-              :active-value="0" :inactive-value="1">
-            </el-switch>
-          </template>
-        </el-table-column>
-        <el-table-column v-if="containPermissions(['business:basegoods:update', 'business:basegoods:delete'])" label="鎿嶄綔"
-          min-width="120" fixed="right">
-          <template slot-scope="{row}">
-            <el-button type="text" @click="edit(row.id)" icon="el-icon-edit"
-              v-permissions="['business:basegoods:update']">缂栬緫</el-button>
-            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete"
-              v-permissions="['business:basegoods:delete']">鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
-      </pagination>
-    </template>
-    <!-- 鏂板缓/淇敼 -->
-    <OperaGoodsWindow ref="operaGoodsWindow" @success="handlePageChange" />
-    <!-- 閫夋嫨骞冲彴鍟嗗搧 -->
-    <selectProduct ref="selectProduct" @success="handlePageChange" @result="search" />
-  </TableLayout>
-</template>
-
-<script>
-import BaseTable from '@/components/base/BaseTable'
-import TableLayout from '@/layouts/TableLayout'
-import Pagination from '@/components/common/Pagination'
-import OperaGoodsWindow from '@/components/business/OperaGoodsWindow'
-import selectProduct from '@/components/business/selectProduct'
-import ImportButton from '@/components/common/ImportButton'
-import { brand, baseCategory } from '@/api/system/common.js'
-import { updateStatus, queryById, exportDoc } from '@/api/business/goods.js'
-export default {
-  name: 'Goods',
-  extends: BaseTable,
-  components: { TableLayout, Pagination, OperaGoodsWindow, selectProduct, ImportButton },
-  data() {
-    return {
-      // 鎼滅储
-      searchForm: {
-        id: '',
-        name: '',
-        status: '',
-        categoryId: '',
-        brandId: ''
-      },
-      ids: '',
-      idList: [],
-      categoryList: [],
-      brandList: [],
-      statusList: [
-        { name: '鍚敤', id: 0 },
-        { name: '绂佺敤', id: 1 }
-      ]
-    }
-  },
-  provide() {
-    return {
-      brandList: () => this.brandList,
-      categoryList: () => this.categoryList
-    }
-  },
-  created() {
-    this.config({
-      module: '鍟嗗搧',
-      api: '/business/goods',
-      'field.id': 'id',
-      'field.main': 'name'
-    })
-    this.search()
-    this.getbrand()
-    this.getcategory()
-  },
-  methods: {
-    // handleSelectionChange(e) {
-    //   let arr = e.map(item => item.id)
-    //   this.ids = arr.join(',')
-    //   this.idList = arr;
-    // },
-    // 鎵归噺涓婁笅鏋�
-    bulkOperation(type) {
-      if (this.tableData.selectedRows.length === 0) {
-        this.$tip.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�')
-        return
-      }
-      let idList = this.tableData.selectedRows.map(item => item.id)
-      updateStatus({
-        idList,
-        status: type
-      }).then(res => {
-        this.$tip.apiSuccess('鎿嶄綔鎴愬姛');
-        // this.$message.success({ message:res.message })
-        this.handlePageChange()
-      })
-    },
-    downloadFile() {
-      exportDoc({})
-        .then(response => {
-          this.download(response)
-        })
-        .catch(e => {
-          this.$tip.apiFailed(e)
-        })
-    },
-    rowStyle() {
-      return "text-align:center";
-    },
-    edit(id) {
-      queryById(id)
-        .then(res => {
-          this.$refs.operaGoodsWindow.open('缂栬緫鍟嗗搧', res)
-        })
-    },
-    changeStatus(item) {
-      updateStatus({
-        idList: [item.id],
-        status: item.status
-      }).then(res => {
-        this.$tip.apiSuccess('鏇存柊鎴愬姛')
-      })
-        .catch (err => {
-          this.$message.error(err)
-        } )
-      .finally(() => {
-        this.handlePageChange()
-      })
-    },
-    getbrand() {
-      brand({ type: 1 })
-        .then(res => {
-          this.brandList = res
-        })
-    },
-    getcategory() {
-      baseCategory({})
-        .then(res => {
-          this.categoryList = res
-        })
-    }
-  }
-}
-</script>
diff --git a/platform/src/views/business/role.vue b/platform/src/views/business/role.vue
deleted file mode 100644
index 9adc347..0000000
--- a/platform/src/views/business/role.vue
+++ /dev/null
@@ -1,107 +0,0 @@
-<template>
-  <TableLayout :permissions="['system:role:query']">
-    <!-- 鎼滅储琛ㄥ崟 -->
-    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="瑙掕壊缂栫爜" prop="code">
-        <el-input v-model="searchForm.code" v-trim placeholder="璇疯緭鍏ヨ鑹茬紪鐮�" @keypress.enter.native="search"/>
-      </el-form-item>
-      <el-form-item label="瑙掕壊鍚嶇О" prop="name">
-        <el-input v-model="searchForm.name" v-trim placeholder="璇疯緭鍏ヨ鑹插悕绉�" @keypress.enter.native="search"/>
-      </el-form-item>
-      <section>
-        <el-button type="primary" icon="el-icon-search" @click="search">鎼滅储</el-button>
-        <el-button @click="reset">閲嶇疆</el-button>
-      </section>
-    </el-form>
-    <!-- 琛ㄦ牸鍜屽垎椤� -->
-    <template v-slot:table-wrap>
-      <ul class="toolbar" v-permissions="['system:role:create', 'system:role:delete']">
-        <li v-permissions="['system:role:create']"><el-button type="primary" @click="$refs.operaRoleWindow.open('鏂板缓瑙掕壊', null, 1)" icon="el-icon-plus">鏂板缓</el-button></li>
-        <li v-permissions="['system:role:delete']"><el-button @click="deleteByIdInBatch" icon="el-icon-delete">鍒犻櫎</el-button></li>
-      </ul>
-      <el-table
-        v-loading="isWorking.search"
-        :data="tableData.list"
-        :default-sort = "{prop: 'createTime', order: 'descending'}"
-        stripe
-        border
-        @selection-change="handleSelectionChange"
-        @sort-change="handleSortChange"
-      >
-        <el-table-column type="selection" fixed="left" width="55"></el-table-column>
-        <el-table-column prop="code" label="瑙掕壊缂栫爜" fixed="left" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="name" label="瑙掕壊鍚嶇О" fixed="left" min-width="100px"  align="center"></el-table-column>
-        <el-table-column prop="remark" label="瑙掕壊澶囨敞" min-width="120px"  align="center"></el-table-column>
-        <el-table-column prop="createUser" label="鍒涘缓浜�" min-width="100px"  align="center">
-          <template slot-scope="{row}">{{row.createUserInfo == null ? '' : row.createUserInfo.username}}</template>
-        </el-table-column>
-        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="140px"  align="center"></el-table-column>
-        <el-table-column prop="updateUser" label="鏇存柊浜�" min-width="100px"  align="center">
-          <template slot-scope="{row}">{{row.updateUserInfo == null ? '' : row.updateUserInfo.username}}</template>
-        </el-table-column>
-        <el-table-column prop="updateTime" label="鏇存柊鏃堕棿" min-width="140px"  align="center"></el-table-column>
-        <el-table-column
-          v-if="containPermissions(['system:role:update', 'system:role:createRolePermission', 'system:role:createRoleMenu', 'system:role:delete'])"
-          label="鎿嶄綔"
-          min-width="270"
-          align="center"
-          fixed="right"
-        >
-          <template v-if="isAdmin || (row.code !== adminCode && userInfo.roles.findIndex(code => code === row.code) === -1)" slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaRoleWindow.open('缂栬緫瑙掕壊', row, 1)" icon="el-icon-edit" v-permissions="['system:role:update']">缂栬緫</el-button>
-            <el-button type="text" @click="$refs.permissionConfigWindow.open(row,1)" v-permissions="['system:role:createRolePermission']">閰嶇疆鏉冮檺</el-button>
-            <el-button type="text" @click="$refs.menuConfigWindow.open(row, 1)" icon="el-icon-menu" v-permissions="['system:role:createRoleMenu']">鎺堟潈鑿滃崟</el-button>
-            <el-button v-if="!row.fixed" type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['system:role:delete']">鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        @size-change="handleSizeChange"
-        @current-change="handlePageChange"
-        :pagination="tableData.pagination"
-      ></pagination>
-    </template>
-    <!-- 鏂板缓/淇敼 -->
-    <OperaRoleWindow ref="operaRoleWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
-    <!-- 閰嶇疆鏉冮檺 -->
-    <PermissionConfigWindow ref="permissionConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
-    <!-- 鎺堟潈鑿滃崟 -->
-    <MenuConfigWindow ref="menuConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
-  </TableLayout>
-</template>
-
-<script>
-import Pagination from '@/components/common/Pagination'
-import TableLayout from '@/layouts/TableLayout'
-import BaseTable from '@/components/base/BaseTable'
-import OperaRoleWindow from '@/components/system/role/OperaRoleWindow'
-import PermissionConfigWindow from '@/components/system/role/PermissionConfigWindow'
-import MenuConfigWindow from '@/components/system/role/MenuConfigWindow'
-export default {
-  name: 'SystemRole',
-  extends: BaseTable,
-  components: { MenuConfigWindow, PermissionConfigWindow, OperaRoleWindow, TableLayout, Pagination },
-  data () {
-    return {
-      // 鎼滅储
-      searchForm: {
-        code: '',
-        name: '',
-        remark: '',
-        type: 1
-      }
-    }
-  },
-  created () {
-    this.config({
-      module: '瑙掕壊',
-      api: '/system/role',
-      sorts: [{
-        property: 'role.CREATE_TIME',
-        direction: 'DESC'
-      }]
-    })
-    this.search()
-  }
-}
-</script>
diff --git a/platform/vue.config.js b/platform/vue.config.js
index 6b5f23a..12edf6e 100644
--- a/platform/vue.config.js
+++ b/platform/vue.config.js
@@ -1,24 +1,9 @@
-
-const outputDir = process.env.VUE_APP_CONTEXT_PATH.substring(1, process.env.VUE_APP_CONTEXT_PATH.length)
-// const proxyMiddleware = require('http-proxy-middleware');
 module.exports = {
   publicPath: './',
-  outputDir: outputDir || 'web',
+  outputDir: 'web',
   assetsDir: 'static',
   lintOnSave: false,
   devServer: {
-    // before(app) {
-    //   app.use(
-    //     [process.env.VUE_APP_API_PREFIX],
-    //     proxyMiddleware({
-    //       target: process.env.VUE_APP_API,
-    //       changeOrigin: true,
-    //       pathRewrite: {
-    //         [`^${[process.env.VUE_APP_API_PREFIX]}`]: ''
-    //       }
-    //     })
-    //   );
-    // },
     host: '0.0.0.0',
     port: 10086,
     proxy: {

--
Gitblit v1.9.3