From 58c2e3e1dd75513b90f878684e913d85db41cc41 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期五, 26 一月 2024 09:24:31 +0800
Subject: [PATCH] Mr.Shi

---
 company/src/components/business/OperaSolutionsDescWindow.vue |  117 ++++-
 company/src/views/business/solutions.vue                     |   43 +
 company/src/api/business/insurance.js                        |   10 
 company/src/api/business/solutions.js                        |   15 
 company/src/components/common/UploadAvatarImage.vue          |   15 
 company/src/api/business/company.js                          |    5 
 company/src/views/system/user.vue                            |  102 ++--
 company/.env                                                 |    4 
 company/src/components/business/OperaInsuranceDescWindow.vue |   47 +
 company/src/components/system/user/allocationEnterprises.vue |  119 +++++
 company/src/components/business/OperaInsuranceWindow.vue     |  105 ++++
 company/src/components/business/OperaSolutionsWindow.vue     |  237 ++++++++--
 company/src/components/system/user/OperaUserWindow.vue       |   97 ++--
 company/src/views/business/insurance.vue                     |   23 
 company/src/views/business/company.vue                       |    8 
 company/src/api/business/smsEmail.js                         |    6 
 company/src/api/business/companyPermission.js                |    6 
 company/src/components/business/OperaCompanyWindow.vue       |  241 +++++++++--
 company/public/file/typeWork.xlsx                            |    0 
 company/src/api/business/worktype.js                         |   11 
 company/.env.development                                     |    4 
 company/src/api/system/user.js                               |    5 
 22 files changed, 934 insertions(+), 286 deletions(-)

diff --git a/company/.env b/company/.env
index c028141..e6bec69 100644
--- a/company/.env
+++ b/company/.env
@@ -4,7 +4,7 @@
 VUE_APP_ROUTER_MODE = 'hash'
 
 # 椤圭洰涓婁笅鏂囪矾寰�
-VUE_APP_CONTEXT_PATH = './'
+VUE_APP_CONTEXT_PATH = '/'
 
 # 鎺ュ彛鍓嶇紑
-VUE_APP_API_PREFIX = '/'
+VUE_APP_API_PREFIX = '/api'
diff --git a/company/.env.development b/company/.env.development
index 622962f..e464a2e 100644
--- a/company/.env.development
+++ b/company/.env.development
@@ -1,6 +1,6 @@
 # 寮�鍙戠幆澧冮厤缃�
 NODE_ENV = 'development'
 
-VUE_APP_API = 'http://192.168.0.104:10023/'
+# VUE_APP_API = 'http://192.168.0.104:10023/'
 
-# VUE_APP_API = 'http://192.168.0.134:10023/'
+VUE_APP_API = 'http://192.168.0.134:10023/'
diff --git a/company/public/file/typeWork.xlsx b/company/public/file/typeWork.xlsx
new file mode 100644
index 0000000..6da7e14
--- /dev/null
+++ b/company/public/file/typeWork.xlsx
Binary files differ
diff --git a/company/src/api/business/company.js b/company/src/api/business/company.js
index 9935b74..455f28f 100644
--- a/company/src/api/business/company.js
+++ b/company/src/api/business/company.js
@@ -16,3 +16,8 @@
 export function updateById (data) {
     return request.post('/business/company/updateById', data)
 }
+
+// 鏌ヨ鍏ㄩ儴鏁版嵁(璐﹀彿鍒嗛厤浼佷笟浣跨敤)
+export function pageAll (data) {
+    return request.post('/business/company/pageAll', data)
+}
diff --git a/company/src/api/business/companyPermission.js b/company/src/api/business/companyPermission.js
new file mode 100644
index 0000000..6afbf1a
--- /dev/null
+++ b/company/src/api/business/companyPermission.js
@@ -0,0 +1,6 @@
+import request from '../../utils/request'
+
+// 璐﹀彿鍒嗛厤浼佷笟
+export function create (data) {
+    return request.post('/business/companyPermission/create', data)
+}
diff --git a/company/src/api/business/insurance.js b/company/src/api/business/insurance.js
index 82abeb0..2713c67 100644
--- a/company/src/api/business/insurance.js
+++ b/company/src/api/business/insurance.js
@@ -20,7 +20,17 @@
     return request.post('/business/insurance/create', data)
 }
 
+// 鏌ヨ鍏ㄩ儴
+export function all (data) {
+    return request.post('/business/insurance/list', data)
+}
+
 // 淇敼
 export function updateById (data) {
     return request.post('/business/insurance/updateById', data)
 }
+
+// 淇敼鐘舵��
+export function updateStatus (data) {
+    return request.post('/business/insurance/updateStatus', data)
+}
diff --git a/company/src/api/business/smsEmail.js b/company/src/api/business/smsEmail.js
new file mode 100644
index 0000000..f1e3564
--- /dev/null
+++ b/company/src/api/business/smsEmail.js
@@ -0,0 +1,6 @@
+import request from '../../utils/request'
+
+// 鍙戦�佺煭淇¢獙璇佺爜
+export function sendSms (data) {
+    return request.post('/business/smsEmail/sendSms', data)
+}
diff --git a/company/src/api/business/solutions.js b/company/src/api/business/solutions.js
index fdb0bc9..f97a25e 100644
--- a/company/src/api/business/solutions.js
+++ b/company/src/api/business/solutions.js
@@ -12,7 +12,22 @@
     return request.post('/business/solutions/create', data)
 }
 
+// 鏌ヨ鍏ㄩ儴淇濋櫓鏂规
+export function all (data) {
+    return request.post('/business/solutions/list', data)
+}
+
+// 绂佺敤鍚敤
+export function updateStatus (data) {
+    return request.post('/business/solutions/updateStatus', data)
+}
+
 // 淇敼
 export function updateById (data) {
     return request.post('/business/solutions/updateById', data)
 }
+
+// 鏍规嵁ID鏌ヨ
+export function solutionsId (id) {
+    return request.get(`/business/solutions/${id}`)
+}
diff --git a/company/src/api/business/worktype.js b/company/src/api/business/worktype.js
new file mode 100644
index 0000000..5d62464
--- /dev/null
+++ b/company/src/api/business/worktype.js
@@ -0,0 +1,11 @@
+import request from '../../utils/request'
+
+// 瀵煎叆妯℃澘
+export function importExcel (data) {
+    return request.post(`/business/worktype/importExcel`, data)
+}
+
+// 鏌ヨ鍏ㄩ儴宸ョ
+export function all (data) {
+    return request.post(`/business/worktype/list`, data)
+}
diff --git a/company/src/api/system/user.js b/company/src/api/system/user.js
index 4080420..6473428 100644
--- a/company/src/api/system/user.js
+++ b/company/src/api/system/user.js
@@ -42,3 +42,8 @@
 export function resetPwd (data) {
   return request.post('/system/user/resetPwd', data)
 }
+
+// 閲嶇疆瀵嗙爜
+export function updUserStatus (params) {
+  return request.get('/system/user/updUserStatus', {params})
+}
diff --git a/company/src/components/business/OperaCompanyWindow.vue b/company/src/components/business/OperaCompanyWindow.vue
index 8294080..0bfa100 100644
--- a/company/src/components/business/OperaCompanyWindow.vue
+++ b/company/src/components/business/OperaCompanyWindow.vue
@@ -13,17 +13,21 @@
             <el-form-item label="缁熶竴淇$敤浠g爜" prop="code">
                 <el-input v-model="form.code" placeholder="璇疯緭鍏�" v-trim/>
             </el-form-item>
+            <el-form-item label="娉曚汉濮撳悕" prop="legalName">
+                <el-input v-model="form.legalName" placeholder="璇疯緭鍏�" v-trim/>
+            </el-form-item>
             <el-form-item label="缁戝畾鎵嬫満鍙�" prop="phone">
                 <div style="width: 100%; display: flex; align-items: center;">
-                    <el-input v-model="form.phone" style="flex: 1;" placeholder="璇疯緭鍏�" v-trim/>
-                    <el-button type="primary" style="flex-shrink: 0; margin-left: 15px;">鍙戦�侀獙璇佺爜</el-button>
+                    <el-input v-model="form.phone" maxlength="11" type="number" style="flex: 1;" placeholder="璇疯緭鍏�" v-trim/>
+                    <el-button type="primary" style="flex-shrink: 0; margin-left: 15px;" @click="send" v-if="num === 0">鍙戦�侀獙璇佺爜</el-button>
+                    <el-button type="primary" style="flex-shrink: 0; margin-left: 15px;" v-else>{{num}}s</el-button>
                 </div>
             </el-form-item>
-            <el-form-item label="楠岃瘉鐮�" prop="code">
-                <el-input v-model="form.code" placeholder="璇疯緭鍏�" v-trim/>
+            <el-form-item label="楠岃瘉鐮�" prop="captche">
+                <el-input v-model="form.captche" placeholder="璇疯緭鍏�" v-trim/>
             </el-form-item>
-            <el-form-item label="鍏徃璐﹀彿" prop="taxAccount">
-                <el-input v-model="form.taxAccount" placeholder="璇疯緭鍏�" v-trim/>
+            <el-form-item label="鍏徃璐﹀彿" prop="username">
+                <el-input v-model="form.username" placeholder="璇疯緭鍏�" v-trim/>
             </el-form-item>
             <el-form-item label="璁よ瘉閭" prop="email">
                 <el-input v-model="form.email" placeholder="璇疯緭鍏�" v-trim/>
@@ -31,8 +35,8 @@
             <el-form-item label="绾崇◣浜鸿瘑鍒彿" prop="taxCode">
                 <el-input v-model="form.taxCode" placeholder="璇疯緭鍏�" v-trim/>
             </el-form-item>
-            <el-form-item label="閾惰璐﹀彿" prop="taxBank">
-                <el-input v-model="form.taxBank" placeholder="璇疯緭鍏�" v-trim/>
+            <el-form-item label="閾惰璐﹀彿" prop="taxAccount">
+                <el-input v-model="form.taxAccount" placeholder="璇疯緭鍏�" v-trim/>
             </el-form-item>
             <el-form-item label="寮�鎴疯" prop="taxBank">
                 <el-input v-model="form.taxBank" placeholder="璇疯緭鍏�" v-trim/>
@@ -46,34 +50,23 @@
             <el-form-item label="绾歌川鍙戠エ鎺ユ敹鍦板潃" prop="invoiceAddr">
                 <el-input v-model="form.invoiceAddr" placeholder="璇疯緭鍏�" v-trim/>
             </el-form-item>
-            <el-form-item label="钀ヤ笟鎵х収" prop="invoiceAddr">
-                <el-upload
-                    action="https://jsonplaceholder.typicode.com/posts/"
-                    list-type="picture-card"
-                    :on-remove="handleRemove">
-                    <i class="el-icon-plus"></i>
-                </el-upload>
+            <el-form-item label="钀ヤ笟鎵х収" prop="businessImg">
+                <UploadAvatarImage :uploadData="{ folder: 'company' }" :file="file" @uploadSuccess="result" />
             </el-form-item>
-            <el-form-item label="娉曚汉韬唤璇�" prop="invoiceAddr">
-                <el-upload
-                    action="https://jsonplaceholder.typicode.com/posts/"
-                    list-type="picture-card"
-                    :on-remove="handleRemove">
-                    <i class="el-icon-plus"></i>
-                </el-upload>
+            <el-form-item label="娉曚汉韬唤璇�" prop="idcardImgList">
+                <div style="width: 100%; display: flex; align-items: center;">
+                    <UploadAvatarImage :uploadData="{ folder: 'company' }" :file="file1" @uploadSuccess="result1" />
+                    <div style="width: 15px;height: 100%;"></div>
+                    <UploadAvatarImage :uploadData="{ folder: 'company' }" :file="file2" @uploadSuccess="result2" />
+                </div>
             </el-form-item>
-            <el-form-item label="鐢靛瓙绛剧珷" prop="invoiceAddr">
-                <el-upload
-                    action="https://jsonplaceholder.typicode.com/posts/"
-                    list-type="picture-card"
-                    :on-remove="handleRemove">
-                    <i class="el-icon-plus"></i>
-                </el-upload>
+            <el-form-item label="鐢靛瓙绛剧珷" prop="signImg">
+                <UploadAvatarImage :uploadData="{ folder: 'company' }" :file="file3" @uploadSuccess="result3" />
             </el-form-item>
         </el-form>
-        <el-button type="primary" style="margin-bottom: 15px;">娣诲姞</el-button>
+        <el-button type="primary" style="margin-bottom: 15px;" @click="add">娣诲姞</el-button>
         <el-table
-            :data="tableData"
+            :data="form.solutionList"
             border
             style="width: 100%">
             <el-table-column
@@ -88,12 +81,12 @@
                 align="center"
                 label="淇濋櫓鏂规">
                 <template slot-scope="{row}">
-                    <el-select v-model="row.info" placeholder="璇烽�夋嫨">
+                    <el-select v-model="row.solutionBaseId" placeholder="璇烽�夋嫨">
                         <el-option
-                            v-for="item in options"
-                            :key="item.value"
-                            :label="item.label"
-                            :value="item.value">
+                            v-for="item in programme"
+                            :key="item.id"
+                            :label="item.name"
+                            :value="item.id">
                         </el-option>
                     </el-select>
                 </template>
@@ -102,10 +95,8 @@
                 align="center"
                 label="鍔犲噺淇濆姛鑳�">
                 <template slot-scope="{row}">
-                    <el-checkbox-group v-model="row.type">
-                        <el-checkbox label="1">鍔犱繚</el-checkbox>
-                        <el-checkbox label="2">鍑忎繚</el-checkbox>
-                    </el-checkbox-group>
+                    <el-checkbox :true-label="1" :false-label="0" v-model="row.canAdd">鍔犱繚</el-checkbox>
+                    <el-checkbox :true-label="1" :false-label="0" v-model="row.canReduce">鍑忎繚</el-checkbox>
                 </template>
             </el-table-column>
             <el-table-column
@@ -113,7 +104,7 @@
                 align="center"
                 width="100">
                 <template slot-scope="scope">
-                    <el-button type="text" size="small" style="color: red;">鍒犻櫎</el-button>
+                    <el-button type="text" size="small" style="color: red;" @click="dele(scope.$index)">鍒犻櫎</el-button>
                 </template>
             </el-table-column>
         </el-table>
@@ -124,6 +115,8 @@
     import BaseOpera from '@/components/base/BaseOpera'
     import GlobalWindow from '@/components/common/GlobalWindow'
     import UploadAvatarImage from '@/components/common/UploadAvatarImage'
+    import { all } from '@/api/business/solutions'
+    import { sendSms } from '@/api/business/smsEmail'
     export default {
         name: 'OperaCompanyWindow',
         extends: BaseOpera,
@@ -135,23 +128,89 @@
                     id: null,
                     name: '',
                     code: '',
+                    legalName: '',
                     taxCode: '',
                     taxAccount: '',
+                    username: '',
                     taxBank: '',
                     taxAddr: '',
                     invoiceEmail: '',
                     invoiceAddr: '',
                     phone: '',
-                    email: ''
+                    email: '',
+                    captche: '',
+                    businessImg: {
+                        fileurl: '',
+                        name: ''
+                    },
+                    idcardImgList: [],
+                    signImg: {
+                        fileurl: '',
+                        name: ''
+                    },
+                    solutionList: [
+                        {
+                            solutionBaseId: '',
+                            canAdd: 0,
+                            canReduce: 0
+                        }
+                    ]
                 },
+                timer: null,
+                num: 0,
                 // 楠岃瘉瑙勫垯
                 rules: {
+                    name: [
+                        { required: true, message: '璇疯緭鍏ュ叕鍙稿悕绉�' }
+                    ],
+                    code: [
+                        { required: true, message: '璇疯緭鍏ョ粺涓�淇$敤浠g爜' }
+                    ],
+                    captche: [
+                        { required: true, message: '璇疯緭鍏ラ獙璇佺爜' }
+                    ],
+                    legalName: [
+                        { required: true, message: '璇疯緭鍏ユ硶浜哄鍚�' }
+                    ],
+                    phone: [
+                        { required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }
+                    ],
+                    taxAccount: [
+                        { required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }
+                    ],
+                    email: [
+                        { required: true, message: '璇疯緭鍏ヨ璇侀偖绠�' }
+                    ],
+                    businessImg: [
+                        { required: true, message: '璇蜂笂浼犺惀涓氭墽鐓�' }
+                    ],
+                    idcardImgList: [
+                        { required: true, message: '璇蜂笂浼犳硶浜鸿韩浠借瘉' }
+                    ],
+                    signImg: [
+                        { required: true, message: '璇蜂笂浼犵數瀛愮绔�' }
+                    ],
+                    username: [
+                        { required: true, message: '璇疯緭鍏ュ叕鍙歌处鍙�' }
+                    ]
                 },
-                options: [],
-                tableData: [{
-                    type: [],
-                    info: ''
-                }]
+                file: {
+                    imgurl: '',
+                    imgurlfull: ''
+                },
+                file1: {
+                    imgurl: '',
+                    imgurlfull: ''
+                },
+                file2: {
+                    imgurl: '',
+                    imgurlfull: ''
+                },
+                file3: {
+                    imgurl: '',
+                    imgurlfull: ''
+                },
+                programme: []
             }
         },
         created () {
@@ -160,9 +219,97 @@
                 'field.id': 'id'
             })
         },
+        watch: {
+            visible: {
+                handler(news) {
+                    if (news) {
+                        clearInterval(this.timer)
+                        this.num = 0
+                    }
+                }
+            }
+        },
         methods: {
+            send() {
+                if (!this.form.phone) {
+                    this.$message.warning('璇疯緭鍏ユ墜鏈哄彿')
+                    return
+                }
+                sendSms({ phone: this.form.phone })
+                    .then(res => {
+                        this.num = 60
+                        this.setTime()
+                    })
+            },
+            setTime() {
+                this.timer = setInterval(() => {
+                    this.num -= 1
+                    if (this.num === 0) {
+                        clearInterval(this.timer)
+                        this.num = 0
+                    }
+                }, 1000)
+            },
+            open (title, target) {
+                this.title = title
+                this.visible = true
+                this.getAll()
+                // 鏂板缓
+                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]
+                    }
+                })
+            },
+            // 鑾峰彇鍏ㄩ儴鏂规
+            getAll() {
+                all({})
+                    .then(res => {
+                        this.programme = res
+                    })
+            },
+            dele(index) {
+                if (this.form.solutionList.length === 1) {
+                    this.$message.warning('鑷冲皯淇濈暀涓�椤�')
+                    return
+                }
+                this.form.solutionList.splice(index, 1)
+            },
+            add() {
+                this.form.solutionList.push({
+                    solutionName: '',
+                    canAdd: '',
+                    canReduce: ''
+                })
+            },
             handleRemove(file, fileList) {
                 console.log(file, fileList);
+            },
+            // 鎺ユ敹钀ヤ笟鎵х収鏁版嵁
+            result(data) {
+                this.form.businessImg.fileurl = data.imgurl
+                this.form.businessImg.name = data.name
+            },
+            // 韬唤璇佺収鐗�1
+            result1(data) {
+                this.form.idcardImgList[0] = { fileurl: data.imgurl, name: data.name }
+            },
+            // 韬唤璇佺収鐗�2
+            result2(data) {
+                this.form.idcardImgList[1] = { fileurl: data.imgurl, name: data.name }
+            },
+            // 鐢靛瓙绛剧珷
+            result3(data) {
+                this.form.signImg.fileurl = data.imgurl
+                this.form.signImg.name = data.name
             }
         }
     }
diff --git a/company/src/components/business/OperaInsuranceDescWindow.vue b/company/src/components/business/OperaInsuranceDescWindow.vue
index 9c2176c..9d65468 100644
--- a/company/src/components/business/OperaInsuranceDescWindow.vue
+++ b/company/src/components/business/OperaInsuranceDescWindow.vue
@@ -4,12 +4,12 @@
         submitText="淇敼"
         :visible.sync="visible"
         :confirm-working="isWorking"
-        @confirm="$refs.operaInsuranceWindow.open('缂栬緫淇濋櫓鍏徃')"
+        @confirm="$refs.operaInsuranceWindow.open('缂栬緫淇濋櫓鍏徃', form)"
     >
         <div class="box">
             <div class="box_name">
-                <span>淇濋櫓鍏徃锛氬钩瀹変繚闄�</span>
-                <span>鏄惁鍚敤锛氭槸</span>
+                <span>淇濋櫓鍏徃锛歿{form.name}}</span>
+                <span>鏄惁鍚敤锛歿{form.status == 0 ? '鍚敤' : '绂佺敤'}}</span>
             </div>
             <el-table
                 :data="tableData"
@@ -30,7 +30,7 @@
             </el-table>
         </div>
         <!-- 鏂板缓/淇敼 -->
-        <OperaInsuranceWindow ref="operaInsuranceWindow" @success="handlePageChange"/>
+        <OperaInsuranceWindow ref="operaInsuranceWindow" @success="success"/>
     </GlobalWindow>
 </template>
 
@@ -38,6 +38,7 @@
     import BaseOpera from '@/components/base/BaseOpera'
     import GlobalWindow from '@/components/common/GlobalWindow'
     import OperaInsuranceWindow from '@/components/business/OperaInsuranceWindow'
+    import { all } from '@/api/business/worktype'
     export default {
         name: 'OperaInsuranceDescWindow',
         extends: BaseOpera,
@@ -47,10 +48,8 @@
                 // 琛ㄥ崟鏁版嵁
                 form: {
                     id: null,
-                    name: ''
-                },
-                // 楠岃瘉瑙勫垯
-                rules: {
+                    name: '',
+                    status: ''
                 },
                 tableData: []
             }
@@ -60,6 +59,38 @@
                 api: '/business/insurance',
                 'field.id': 'id'
             })
+        },
+        methods: {
+            open (title, target) {
+                this.title = title
+                this.visible = true
+                // 鏂板缓
+                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]
+                    }
+                    all({ insuranceId: this.form.id })
+                        .then(res => {
+                            let arr = []
+                            res.forEach(item => {
+                                arr.push({ name: item.name })
+                            })
+                            this.tableData = arr
+                        })
+                })
+            },
+            success() {
+                this.$emit('success')
+                this.visible = false
+            }
         }
     }
 </script>
diff --git a/company/src/components/business/OperaInsuranceWindow.vue b/company/src/components/business/OperaInsuranceWindow.vue
index 96059c6..ed719f6 100644
--- a/company/src/components/business/OperaInsuranceWindow.vue
+++ b/company/src/components/business/OperaInsuranceWindow.vue
@@ -1,17 +1,21 @@
 <template>
     <GlobalWindow
-            :title="title"
-            :visible.sync="visible"
-            :confirm-working="isWorking"
-            @confirm="confirm"
+        :title="title"
+        :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-button type="primary" style="margin-bottom: 10px;">娣诲姞</el-button>
+            <div style="width: 100%; display: flex; align-items: center;margin-bottom: 10px;">
+                <el-button type="primary" @click="add">娣诲姞</el-button>
+                <el-button type="primary" @click="impor">瀵煎叆宸ョ</el-button>
+                <el-button type="text" @click="exprot">瀵煎叆妯$増xls</el-button>
+            </div>
             <el-table
-                :data="tableData"
+                :data="form.worktypeList"
                 border
                 style="width: 100%; margin-bottom: 20px;">
                 <el-table-column
@@ -34,17 +38,21 @@
                     align="center"
                     width="100">
                     <template slot-scope="scope">
-                        <el-button type="text" size="small" style="color: red;">鍒犻櫎</el-button>
+                        <el-button type="text" size="small" style="color: red;" @click="dele(scope.$index)">鍒犻櫎</el-button>
                     </template>
                 </el-table-column>
             </el-table>
         </el-form>
+        <!--    涓婁紶宸ョ    -->
+        <input type="file" @change="getFile" style="opacity: 0;" ref="upload" accept=".xlsx" />
     </GlobalWindow>
 </template>
 
 <script>
     import BaseOpera from '@/components/base/BaseOpera'
     import GlobalWindow from '@/components/common/GlobalWindow'
+    import { importExcel, all } from '@/api/business/worktype'
+
     export default {
         name: 'OperaInsuranceWindow',
         extends: BaseOpera,
@@ -54,12 +62,14 @@
                 // 琛ㄥ崟鏁版嵁
                 form: {
                     id: null,
-                    name: ''
+                    name: '',
+                    worktypeList: [
+                        { name: '' }
+                    ]
                 },
                 // 楠岃瘉瑙勫垯
                 rules: {
-                },
-                tableData: []
+                }
             }
         },
         created () {
@@ -67,6 +77,81 @@
                 api: '/business/insurance',
                 'field.id': 'id'
             })
+        },
+        methods: {
+            open (title, target) {
+                this.title = title
+                this.visible = true
+                // 鏂板缓
+                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]
+                    }
+                    all({ insuranceId: this.form.id })
+                        .then(res => {
+                            let arr = []
+                            res.forEach(item => {
+                                arr.push({ name: item.name })
+                            })
+                            this.form.worktypeList = arr
+                        })
+                })
+            },
+            // 瀵煎嚭妯℃澘
+            exprot() {
+                let a = document.createElement("a");
+                a.href = '/public/file/typeWork.xlsx';
+                a.download = '淇濋櫓鍏徃-宸ョ瀵煎叆妯$増.xlsx';
+                a.click();
+            },
+            // 瀵煎叆宸ョ妯℃澘
+            getFile(e) {
+                const formdate = new FormData()
+                formdate.append('file', e.target.files[0])
+                importExcel(formdate)
+                    .then(res => {
+                        res.forEach(item => {
+                            if (this.form.worktypeList.length === 0) {
+                                this.form.worktypeList.push({ name: item })
+                            } else {
+                                let next = true
+                                this.form.worktypeList.forEach(row => {
+                                    if (row.name === item) {
+                                        next = false
+                                    }
+                                })
+                                if (next) {
+                                    this.form.worktypeList.push({ name: item })
+                                }
+                            }
+                        })
+                    })
+                    .finally(() => {
+                        this.$refs.upload.value = null
+                    })
+            },
+            // 涓婁紶鏂囦欢
+            impor() {
+                this.$refs.upload.click()
+            },
+            add() {
+                this.form.worktypeList.push({ name: '' })
+            },
+            dele(index) {
+                if (this.form.worktypeList.length === 1) {
+                    this.$message.warning('鑷冲皯淇濈暀涓�椤瑰唴瀹�')
+                    return
+                }
+                this.form.worktypeList.splice(index, 1)
+            }
         }
     }
 </script>
diff --git a/company/src/components/business/OperaSolutionsDescWindow.vue b/company/src/components/business/OperaSolutionsDescWindow.vue
index 2537026..adb5dfd 100644
--- a/company/src/components/business/OperaSolutionsDescWindow.vue
+++ b/company/src/components/business/OperaSolutionsDescWindow.vue
@@ -5,25 +5,25 @@
         submitText="淇敼"
         :visible.sync="visible"
         :confirm-working="isWorking"
-        @confirm="$refs.operaSolutionsWindow.open('缂栬緫鏂规')"
+        @confirm="$refs.operaSolutionsWindow.open('缂栬緫鏂规', form)"
     >
         <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">骞冲畨淇濋櫓闆囦富璐d换闄〢鐗�</div>
+                    <div class="info_list_item_val">{{form.name}}</div>
                 </div>
                 <div class="info_list_item">
                     <div class="info_list_item_label">淇濋櫓鍏徃锛�</div>
-                    <div class="info_list_item_val">骞冲畨淇濋櫓</div>
+                    <div class="info_list_item_val">{{form.insuranceName}}</div>
                 </div>
                 <div class="info_list_item">
                     <div class="info_list_item_label">鎵夸繚鍏徃锛�</div>
-                    <div class="info_list_item_val">瀹夊窘骞冲畨淇濋櫓鏈夐檺鍏徃</div>
+                    <div class="info_list_item_val">{{form.companyName}}</div>
                 </div>
                 <div class="info_list_item">
                     <div class="info_list_item_label">鎶曚繚骞撮緞锛�</div>
-                    <div class="info_list_item_val">25鑷�65</div>
+                    <div class="info_list_item_val">{{form.minAge}}鑷硔{form.maxAge}}</div>
                 </div>
                 <div class="info_list_item">
                     <div class="info_list_item_label">鎶曚繚绫诲瀷锛�</div>
@@ -31,31 +31,39 @@
                 </div>
                 <div class="info_list_item">
                     <div class="info_list_item_label">淇濋櫓璐圭敤锛�</div>
-                    <div class="info_list_item_val">200鍏�/浜�/骞�</div>
+                    <div class="info_list_item_val">
+                        {{form.price}}鍏�/浜�/
+                        <span v-if="form.timeUnit === 0">澶�</span>
+                        <span v-if="form.timeUnit === 1">鍗婃湀</span>
+                        <span v-if="form.timeUnit === 2">鏈�</span>
+                        <span v-if="form.timeUnit === 3">骞�</span>
+                    </div>
                 </div>
                 <div class="info_list_item">
                     <div class="info_list_item_label">鎶曚繚鍛ㄦ湡锛�</div>
-                    <div class="info_list_item_val">1鏈�</div>
+                    <div class="info_list_item_val">
+                        {{form.insureCycle}}
+                        <span v-if="form.insureCycleUnit === 0">澶�</span>
+                        <span v-if="form.insureCycleUnit === 1">鍗婃湀</span>
+                        <span v-if="form.insureCycleUnit === 2">鏈�</span>
+                        <span v-if="form.insureCycleUnit === 3">骞�</span>
+                    </div>
                 </div>
                 <div class="info_list_item">
                     <div class="info_list_item_label">鐢熸晥鏃堕棿锛�</div>
-                    <div class="info_list_item_val">1鏃ュ悗鐢熸晥</div>
+                    <div class="info_list_item_val">{{form.validType === 0 ? '鏃ュ悗鐢熸晥' : '娆℃湀鐢熸晥'}}</div>
                 </div>
                 <div class="info_list_item">
                     <div class="info_list_item_label">鎶曚繚绫诲瀷锛�</div>
-                    <div class="info_list_item_val">鐩翠繚</div>
-                </div>
-                <div class="info_list_item">
-                    <div class="info_list_item_label">鍗曠嫭鎸囨淳宸ョ锛�</div>
-                    <div class="info_list_item_val">鍚�</div>
+                    <div class="info_list_item_val">{{form.type === 0 ? '鐩翠繚' : '濮旀墭鎶曚繚'}}</div>
                 </div>
                 <div class="info_list_item">
                     <div class="info_list_item_label">鎺ユ敹鏂囦欢閭锛�</div>
-                    <div class="info_list_item_val">111@163.com</div>
+                    <div class="info_list_item_val">{{form.email}}</div>
                 </div>
             </div>
             <el-table
-                :data="tableData"
+                :data="form.worktypeList"
                 border
                 style="width: 100%; margin-bottom: 20px;">
                 <el-table-column
@@ -67,15 +75,21 @@
                     </template>
                 </el-table-column>
                 <el-table-column
-                    prop="code"
+                    prop="worktypeName"
                     align="center"
                     label="鎵�灞炲伐绉�">
                 </el-table-column>
             </el-table>
-            <div class="info_fwb">瀵屾枃鏈唴瀹�</div>
+            <div class="info_agree">
+                <div class="info_agree_label">淇濋櫓澹版槑锛�</div>
+                <div class="info_agree_label">鐗瑰埆绾﹀畾锛�</div>
+                <div class="info_agree_val">
+                    {{form.specialAgreement}}
+                </div>
+            </div>
         </div>
         <!-- 淇敼 -->
-        <OperaSolutionsWindow ref="operaSolutionsWindow" @success="handlePageChange"/>
+        <OperaSolutionsWindow ref="operaSolutionsWindow" @success="callback"/>
     </GlobalWindow>
 </template>
 
@@ -83,6 +97,7 @@
     import BaseOpera from '@/components/base/BaseOpera'
     import GlobalWindow from '@/components/common/GlobalWindow'
     import OperaSolutionsWindow from '@/components/business/OperaSolutionsWindow'
+    import { solutionsId } from '@/api/business/solutions'
     export default {
         name: 'OperaSolutionsDescWindow',
         extends: BaseOpera,
@@ -93,24 +108,25 @@
                 form: {
                     id: null,
                     name: '',
+                    companyName: '',
                     insuranceId: '',
-                    validType: '',
-                    type: '',
+                    validType: 0,
+                    type: 0,
                     minAge: '',
                     maxAge: '',
                     price: '',
                     timeUnit: '',
+                    insureCycle: '',
                     insureCycleUnit: '',
-                    priceCycleUnit: '',
                     email: '',
                     specialAgreement: '',
                     specialInfo: '',
-                    ortherInfo: ''
-                },
-                // 楠岃瘉瑙勫垯
-                rules: {
-                },
-                tableData: []
+                    ortherInfo: '',
+                    insuranceName: '',
+                    signKeyword: '',
+                    worktypeList: [],
+                    worktypeIdList: []
+                }
             }
         },
         created () {
@@ -118,6 +134,35 @@
                 api: '/business/solutions',
                 'field.id': 'id'
             })
+        },
+        methods: {
+            open (title, target) {
+                this.title = title
+                this.visible = true
+                this.$nextTick(() => {
+                    for (const key in this.form) {
+                        this.form[key] = target[key]
+                    }
+                    this.getDetails()
+                })
+            },
+            getDetails() {
+                solutionsId(this.form.id)
+                    .then(res => {
+                        for (const key in this.form) {
+                            this.form[key] = res[key]
+                        }
+                        this.form.worktypeIdList = res.worktypeList.map(item => {
+                            return {
+                                worktypeId: item.worktypeId
+                            }
+                        })
+                    })
+            },
+            callback() {
+                this.$emit('success')
+                this.visible = false
+            }
         }
     }
 </script>
@@ -125,6 +170,24 @@
 <style lang="scss" scoped>
     .info {
         width: 100%;
+        .info_agree {
+            width: 100%;
+            display: flex;
+            flex-direction: column;
+            margin-top: 20px;
+            .info_agree_label {
+                font-size: 14px;
+                font-weight: 500;
+                color: #000000;
+                margin-top: 5px;
+            }
+            .info_agree_val {
+                font-size: 14px;
+                font-weight: 500;
+                color: #000000;
+                margin-top: 5px;
+            }
+        }
         .info_label {
             width: 100%;
             display: flex;
diff --git a/company/src/components/business/OperaSolutionsWindow.vue b/company/src/components/business/OperaSolutionsWindow.vue
index f251b02..fcdce95 100644
--- a/company/src/components/business/OperaSolutionsWindow.vue
+++ b/company/src/components/business/OperaSolutionsWindow.vue
@@ -1,44 +1,44 @@
 <template>
     <GlobalWindow
-            :title="title"
-            :visible.sync="visible"
-            :confirm-working="isWorking"
-            @confirm="confirm"
+        :title="title"
+        :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="淇濋櫓鍏徃" prop="insuranceId">
-                <el-select v-model="form.insuranceId" placeholder="璇烽�夋嫨">
+                <el-select v-model="form.insuranceId" @change="getAllWorktype1" placeholder="璇烽�夋嫨">
                     <el-option
-                        v-for="item in options"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value">
+                        v-for="item in company"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
                     </el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item label="鎵夸繚鍏徃" prop="name">
-                <el-input v-model="form.name" placeholder="璇疯緭鍏�" v-trim/>
+            <el-form-item label="鎵夸繚鍏徃" prop="companyName">
+                <el-input v-model="form.companyName" placeholder="璇疯緭鍏�" v-trim/>
             </el-form-item>
             <el-form-item label="鎶曚繚骞撮緞" prop="minAge">
                 <div style="display: flex; align-items: center;">
                     <el-select v-model="form.minAge" style="flex: 1;" placeholder="璇烽�夋嫨">
                         <el-option
-                            v-for="item in options"
-                            :key="item.value"
-                            :label="item.label"
-                            :value="item.value">
+                            v-for="item in 60"
+                            :key="item"
+                            :label="item"
+                            :value="item">
                         </el-option>
                     </el-select>
                     <span style="margin: 0 30px;">鑷�</span>
                     <el-select v-model="form.maxAge" style="flex: 1;" placeholder="璇烽�夋嫨">
                         <el-option
-                            v-for="item in options"
-                            :key="item.value"
-                            :label="item.label"
-                            :value="item.value">
+                            v-for="item in 60"
+                            :key="item"
+                            :label="item"
+                            :value="item">
                         </el-option>
                     </el-select>
                 </div>
@@ -46,34 +46,26 @@
             <el-form-item label="淇濋櫓璐圭敤" prop="price">
                 <div style="display: flex; align-items: center;">
                     <el-input v-model="form.price" style="flex: 1;" placeholder="璇疯緭鍏�" v-trim/>
-                    <span style="margin: 0 30px;">鑷�</span>
+                    <span style="margin: 0 30px;">鍏�/浜�</span>
                     <el-select v-model="form.timeUnit" style="flex: 1;" placeholder="璇烽�夋嫨">
-                        <el-option label="澶�" value="0"></el-option>
-                        <el-option label="鍗婃湀" value="1"></el-option>
-                        <el-option label="鏈�" value="2"></el-option>
-                        <el-option label="骞�" value="3"></el-option>
+                        <el-option label="澶�" :value="0"></el-option>
+                        <el-option label="鍗婃湀" :value="1"></el-option>
+                        <el-option label="鏈�" :value="2"></el-option>
+                        <el-option label="骞�" :value="3"></el-option>
                     </el-select>
                 </div>
             </el-form-item>
-            <el-form-item label="鎶曚繚鍛ㄦ湡" prop="insureCycleUnit">
+            <el-form-item label="鎶曚繚鍛ㄦ湡" prop="insureCycle">
                 <div style="display: flex; align-items: center;">
-                    <el-input v-model="form.insureCycleUnit" style="flex: 1;" placeholder="璇疯緭鍏�" v-trim/>
-                    <span style="margin: 0 30px;">鑷�</span>
-                    <el-select v-model="form.timeUnit" style="flex: 1;" placeholder="璇烽�夋嫨">
-                        <el-option label="澶�" value="0"></el-option>
-                        <el-option label="鍗婃湀" value="1"></el-option>
-                        <el-option label="鏈�" value="2"></el-option>
-                        <el-option label="骞�" value="3"></el-option>
+                    <el-input v-model="form.insureCycle" style="flex: 1;" placeholder="璇疯緭鍏�" v-trim/>
+                    <span style="margin: 0 30px;"></span>
+                    <el-select v-model="form.insureCycleUnit" style="flex: 1;" placeholder="璇烽�夋嫨">
+                        <el-option label="澶�" :value="0"></el-option>
+                        <el-option label="鍗婃湀" :value="1"></el-option>
+                        <el-option label="鏈�" :value="2"></el-option>
+                        <el-option label="骞�" :value="3"></el-option>
                     </el-select>
                 </div>
-            </el-form-item>
-            <el-form-item label="鏈�灏忚璐瑰懆鏈�" prop="priceCycleUnit">
-                <el-select v-model="form.priceCycleUnit" style="flex: 1;" placeholder="璇烽�夋嫨">
-                    <el-option label="澶�" value="0"></el-option>
-                    <el-option label="鍗婃湀" value="1"></el-option>
-                    <el-option label="鏈�" value="2"></el-option>
-                    <el-option label="骞�" value="3"></el-option>
-                </el-select>
             </el-form-item>
             <el-form-item label="鐢熸晥鏃堕棿" prop="validType">
                 <el-radio-group v-model="form.validType">
@@ -90,12 +82,12 @@
             <el-form-item label="鎺ユ敹鏂囦欢閭" prop="email">
                 <el-input v-model="form.email" placeholder="璇疯緭鍏�" v-trim/>
             </el-form-item>
-            <el-form-item label="鎶曚繚鍗曠绔犲叧閿瓧" prop="email">
-                <el-input v-model="form.email" placeholder="璇疯緭鍏�" v-trim/>
+            <el-form-item label="鎶曚繚鍗曠绔犲叧閿瓧" prop="signKeyword">
+                <el-input v-model="form.signKeyword" placeholder="澶氫釜鑻辨枃閫楀彿闅斿紑" v-trim/>
             </el-form-item>
-            <el-button type="primary">娣诲姞宸ョ</el-button>
+            <el-button type="primary" @click="add">娣诲姞宸ョ</el-button>
             <el-table
-                :data="tableData"
+                :data="form.worktypeIdList"
                 border
                 style="width: 100%; margin-bottom: 20px;">
                 <el-table-column
@@ -110,12 +102,12 @@
                     align="center"
                     label="鎵�灞炲伐绉�">
                     <template slot-scope="{row}">
-                        <el-select filterable v-model="row.info" placeholder="璇烽�夋嫨">
+                        <el-select filterable v-model="row.worktypeId" placeholder="璇烽�夋嫨">
                             <el-option
-                                v-for="item in options"
-                                :key="item.value"
-                                :label="item.label"
-                                :value="item.value">
+                                v-for="item in typeWork"
+                                :key="item.id"
+                                :label="item.name"
+                                :value="item.id">
                             </el-option>
                         </el-select>
                     </template>
@@ -125,7 +117,7 @@
                     align="center"
                     width="100">
                     <template slot-scope="scope">
-                        <el-button type="text" size="small" style="color: red;">鍒犻櫎</el-button>
+                        <el-button type="text" size="small" style="color: red;" @click="dele(scope.$index)">鍒犻櫎</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -145,6 +137,9 @@
 <script>
     import BaseOpera from '@/components/base/BaseOpera'
     import GlobalWindow from '@/components/common/GlobalWindow'
+    import { all } from '@/api/business/insurance'
+    import { all as allWorktype } from '@/api/business/worktype'
+    import { solutionsId } from '@/api/business/solutions'
     export default {
         name: 'OperaSolutionsWindow',
         extends: BaseOpera,
@@ -155,24 +150,55 @@
                 form: {
                     id: null,
                     name: '',
+                    companyName: '',
                     insuranceId: '',
-                    validType: '',
-                    type: '',
+                    validType: 0,
+                    type: 0,
                     minAge: '',
                     maxAge: '',
                     price: '',
                     timeUnit: '',
+                    insureCycle: '',
                     insureCycleUnit: '',
-                    priceCycleUnit: '',
                     email: '',
                     specialAgreement: '',
                     specialInfo: '',
-                    ortherInfo: ''
+                    ortherInfo: '',
+                    signKeyword: '',
+                    worktypeIdList: [{ worktypeId: '' }]
                 },
                 // 楠岃瘉瑙勫垯
                 rules: {
+                    name: [
+                        { required: true, message: '璇疯緭鍏ユ柟妗堝悕绉�' }
+                    ],
+                    insuranceId: [
+                        { required: true, message: '璇烽�夋嫨淇濋櫓鍏徃' }
+                    ],
+                    companyName: [
+                        { required: true, message: '璇疯緭鍏ユ壙淇濆叕鍙�' }
+                    ],
+                    minAge: [
+                        { required: true, message: '璇烽�夋嫨鎶曚繚骞撮緞' }
+                    ],
+                    price: [
+                        { required: true, message: '璇疯緭鍏ヤ繚闄╄垂鐢�' }
+                    ],
+                    insureCycle: [
+                        { required: true, message: '璇疯緭鍏ユ姇淇濆懆鏈�' }
+                    ],
+                    validType: [
+                        { required: true, message: '璇烽�夋嫨鐢熸晥鏃堕棿' }
+                    ],
+                    type: [
+                        { required: true, message: '璇烽�夋嫨鎶曚繚绫诲瀷' }
+                    ],
+                    signKeyword: [
+                        { required: true, message: '璇疯緭鍏ユ姇淇濆崟绛剧珷鍏抽敭瀛�' }
+                    ]
                 },
-                tableData: []
+                company: [],
+                typeWork: []
             }
         },
         created () {
@@ -180,6 +206,107 @@
                 api: '/business/solutions',
                 'field.id': 'id'
             })
+        },
+        methods: {
+            // 鍒囨崲鍏徃
+            getAllWorktype1() {
+                this.form.worktypeIdList = [{ worktypeId: '' }]
+                this.getAllWorktype()
+            },
+            // 纭鏂板缓/淇敼
+            confirm () {
+                let data = JSON.parse(JSON.stringify(this.form))
+                data.worktypeIdList = data.worktypeIdList.map(item => item.worktypeId)
+                this.$refs.form.validate((valid) => {
+                    if (!valid) {
+                        return
+                    }
+                    // 璋冪敤鏂板缓鎺ュ彛
+                    this.isWorking = true
+                    if (data.id == null || data.id === '') {
+                        this.api.create(data)
+                            .then(() => {
+                                this.visible = false
+                                this.$tip.apiSuccess('鏂板缓鎴愬姛')
+                                this.$emit('success')
+                            })
+                            .catch(e => {
+                                this.$tip.apiFailed(e)
+                            })
+                            .finally(() => {
+                                this.isWorking = false
+                            })
+                    } else {
+                        this.api.updateById(data)
+                            .then(() => {
+                                this.visible = false
+                                this.$tip.apiSuccess('淇敼鎴愬姛')
+                                this.$emit('success')
+                            })
+                            .catch(e => {
+                                this.$tip.apiFailed(e)
+                            })
+                            .finally(() => {
+                                this.isWorking = false
+                            })
+                    }
+                })
+            },
+            open (title, target) {
+                this.title = title
+                this.visible = true
+                this.form.worktypeIdList = [{ worktypeId: '' }]
+                this.allCompany()
+                // 鏂板缓
+                if (target == null) {
+                    this.$nextTick(() => {
+                        this.$refs.form.resetFields()
+                        this.form[this.configData['field.id']] = null
+                    })
+                    return
+                }
+                // 缂栬緫
+                this.$nextTick(() => {
+                    solutionsId(target.id)
+                        .then(res => {
+                            for (const key in this.form) {
+                                this.form[key] = res[key]
+                            }
+                            this.form.worktypeIdList = res.worktypeList.map(item => {
+                                return {
+                                    worktypeId: item.worktypeId
+                                }
+                            })
+                            this.getAllWorktype()
+                        })
+                })
+            },
+            // 鏌ヨ淇濋櫓鍏徃涓嬪叏閮ㄥ伐绉�
+            getAllWorktype() {
+                allWorktype({
+                    insuranceId: this.form.insuranceId
+                }).then(res => {
+                    this.typeWork = res
+                })
+            },
+            // 鏌ヨ鍏ㄩ儴淇濋櫓鍏徃
+            allCompany() {
+                all({ dataType: 2 })
+                    .then(res => {
+                        console.log(res)
+                        this.company = res
+                    })
+            },
+            add() {
+                this.form.worktypeIdList.push({ worktypeId: '' })
+            },
+            dele(index) {
+                if (this.form.worktypeIdList.length === 1) {
+                    this.$message.warning('鑷冲皯瑕佷繚鐣欎竴椤�')
+                    return
+                }
+                this.form.worktypeIdList.splice(index, 1)
+            }
         }
     }
 </script>
diff --git a/company/src/components/common/UploadAvatarImage.vue b/company/src/components/common/UploadAvatarImage.vue
index c19e154..ac31f3c 100644
--- a/company/src/components/common/UploadAvatarImage.vue
+++ b/company/src/components/common/UploadAvatarImage.vue
@@ -15,7 +15,7 @@
       </div>
     </el-upload>
   </div>
-  
+
 </template>
 
 <script>
@@ -34,16 +34,10 @@
   },
   data() {
     return {
-      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload',
-      // uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/uploadPicture',
-      // uploadData: {
-      //   folder: 'upload',
-      //   type: 'image'
-      // },
-      imgurlfull: ''
+      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload'
     }
   },
-  
+
   methods: {
     // 涓婁紶鍥剧墖
     handleAvatarSuccess(res, file) {
@@ -51,9 +45,8 @@
         let { data } = res
         this.file.imgurl = data.imgaddr;
         this.file.imgurlfull = data.url;
-        console.log(this.file);
         this.$message.success('涓婁紶鎴愬姛')
-        this.$emit('uploadSuccess', { imgurl: data.imgaddr, imgurlfull: data.url })
+        this.$emit('uploadSuccess', { imgurl: data.imgaddr, imgurlfull: data.url, name: data.originname })
       } else {
         this.$message.error('涓婁紶澶辫触')
       }
diff --git a/company/src/components/system/user/OperaUserWindow.vue b/company/src/components/system/user/OperaUserWindow.vue
index 240a739..a64d417 100644
--- a/company/src/components/system/user/OperaUserWindow.vue
+++ b/company/src/components/system/user/OperaUserWindow.vue
@@ -7,44 +7,24 @@
     @confirm="confirm"
   >
     <el-form :model="form" ref="form" :rules="rules">
-      <el-form-item label="鐢ㄦ埛鍚�" prop="username" required>
-        <el-input v-model="form.username" placeholder="璇疯緭鍏ョ敤鎴峰悕" v-trim maxlength="50"/>
+      <el-form-item label="璐﹀彿" prop="username" required>
+        <el-input v-model="form.username" placeholder="璇疯緭鍏�" v-trim maxlength="50"/>
       </el-form-item>
-      <el-form-item label="濮撳悕" prop="realname" required>
-        <el-input v-model="form.realname" placeholder="璇疯緭鍏ュ鍚�" v-trim maxlength="50"/>
+      <el-form-item label="鍚嶇О" prop="realname" required>
+        <el-input v-model="form.realname" placeholder="璇疯緭鍏�" v-trim maxlength="50"/>
       </el-form-item>
-      <el-form-item label="鎬у埆" prop="sex" required>
-        <el-radio-group v-model="form.sex">
-          <el-radio label="1">鐢�</el-radio>
-          <el-radio label="0">濂�</el-radio>
-        </el-radio-group>
+      <el-form-item label="鑱旂郴鏂瑰紡" prop="mobile">
+        <el-input v-model="form.mobile" placeholder="璇疯緭鍏�" v-trim maxlength="11"/>
       </el-form-item>
-      <el-form-item label="澶村儚" prop="avatar" required>
-        <el-radio-group v-model="form.avatar" class="form-item-avatar">
-          <el-radio label="https://dmtest.ahapp.net/preselectfile/man.png" border><img src="https://dmtest.ahapp.net/preselectfile/man.png" alt=""></el-radio>
-          <el-radio label="https://dmtest.ahapp.net/preselectfile/woman.png" border><img src="https://dmtest.ahapp.net/preselectfile/woman.png" alt=""></el-radio>
-        </el-radio-group>
+      <el-form-item label="楠岃瘉鐮�" prop="captcha">
+        <div style="width: 100%; display: flex; align-items: center;">
+          <el-input v-model="form.captcha" maxlength="11" type="number" style="flex: 1;" placeholder="璇疯緭鍏�" v-trim/>
+          <el-button type="primary" style="flex-shrink: 0; margin-left: 15px;" @click="send" v-if="num === 0">鍙戦�侀獙璇佺爜</el-button>
+          <el-button type="primary" style="flex-shrink: 0; margin-left: 15px;" v-else>{{num}}s</el-button>
+        </div>
       </el-form-item>
-      <el-form-item v-if="form.id == null" label="鍒濆瀵嗙爜" prop="password" required>
-        <el-input v-model="form.password" type="password" placeholder="璇疯緭鍏ュ垵濮嬪瘑鐮�" maxlength="30" show-password/>
-      </el-form-item>
-            <el-form-item label="鎵�灞為儴闂�" prop="departmentId" required>
-        <DepartmentSelect v-model="form.departmentId" placeholder="璇烽�夋嫨鐢ㄦ埛鎵�灞為儴闂�" :inline="false" clearable/>
-      </el-form-item>
-      <el-form-item label="宀椾綅" prop="positionId">
-        <PositionSelect v-model="form.positionIds" placeholder="璇烽�夋嫨鐢ㄦ埛鎵�鍦ㄥ矖浣�" :inline="false" :multiple="true" clearable/>
-      </el-form-item>
-      <el-form-item label="宸ュ彿" prop="empNo">
-        <el-input v-model="form.empNo" placeholder="璇疯緭鍏ュ伐鍙�" v-trim maxlength="50"/>
-      </el-form-item>
-      <el-form-item label="鎵嬫満鍙风爜" prop="mobile">
-        <el-input v-model="form.mobile" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" v-trim maxlength="11"/>
-      </el-form-item>
-      <el-form-item label="閭" prop="email">
-        <el-input v-model="form.email" placeholder="璇疯緭鍏ラ偖绠�" v-trim maxlength="200"/>
-      </el-form-item>
-      <el-form-item label="鐢熸棩" prop="birthday">
-        <el-date-picker v-model="form.birthday" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨鐢ㄦ埛鐢熸棩"/>
+      <el-form-item label="鎶勯�佹枃浠堕偖绠�" prop="email">
+        <el-input v-model="form.email" placeholder="璇疯緭鍏�" v-trim />
       </el-form-item>
     </el-form>
   </GlobalWindow>
@@ -56,6 +36,7 @@
 import DepartmentSelect from '@/components/common/DepartmentSelect'
 import PositionSelect from '@/components/common/PositionSelect'
 import { checkMobile, checkEmail } from '@/utils/form'
+import { sendSms } from '@/api/business/smsEmail'
 
 export default {
   name: 'OperaUserWindow',
@@ -68,16 +49,12 @@
         id: null,
         username: '', // 鐢ㄦ埛鍚�
         realname: '', // 濮撳悕
-        empNo: '', // 宸ュ彿
-        departmentId: null, //  鎵�灞為儴闂↖D
-        positionIds: [], //  鎵�灞炲矖浣岻D闆�
-        avatar: '/avatar/man.png', // 澶村儚
-        password: '', // 瀵嗙爜
         mobile: '', // 鎵嬫満鍙风爜
-        email: '', // 閭
-        sex: '1', // 鎬у埆
-        birthday: '' // 鐢熸棩
+        email: '',
+        captcha: ''
       },
+      num: 0,
+      timer: null,
       // 楠岃瘉瑙勫垯
       rules: {
         username: [
@@ -86,28 +63,36 @@
         realname: [
           { required: true, message: '璇疯緭鍏ュ鍚�' }
         ],
-        password: [
-          { required: true, message: '璇疯緭鍏ュ瘑鐮�' }
-        ],
-        departmentId: [
-          { required: true, message: '璇烽�夋嫨閮ㄩ棬' }
-        ],
-        avatar: [
-          { required: true, message: '璇烽�夋嫨鐢ㄦ埛澶村儚' }
-        ],
-        sex: [
-          { required: true, message: '璇烽�夋嫨鐢ㄦ埛鎬у埆' }
-        ],
         mobile: [
           { required: true, validator: checkMobile }
         ],
         email: [
-          { validator: checkEmail }
+          { required: true, message: '璇疯緭鍏ラ偖绠�' }
         ]
       }
     }
   },
   methods: {
+    send() {
+      if (!this.form.mobile) {
+        this.$message.warning('璇疯緭鍏ユ墜鏈哄彿')
+        return
+      }
+      sendSms({ phone: this.form.mobile })
+        .then(res => {
+          this.num = 60
+          this.setTime()
+        })
+    },
+    setTime() {
+      this.timer = setInterval(() => {
+        this.num -= 1
+        if (this.num === 0) {
+          clearInterval(this.timer)
+          this.num = 0
+        }
+      }, 1000)
+    },
     /**
      * @title 绐楀彛鏍囬
      * @target 缂栬緫鐨勭敤鎴峰璞�
@@ -115,6 +100,8 @@
     open (title, target) {
       this.title = title
       this.visible = true
+      clearInterval(this.timer)
+      this.num = 0
       // 鏂板缓
       if (target == null) {
         this.$nextTick(() => {
diff --git a/company/src/components/system/user/allocationEnterprises.vue b/company/src/components/system/user/allocationEnterprises.vue
new file mode 100644
index 0000000..082c892
--- /dev/null
+++ b/company/src/components/system/user/allocationEnterprises.vue
@@ -0,0 +1,119 @@
+<template>
+    <GlobalWindow
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        width="582px"
+        title="閰嶇疆鐢ㄦ埛瑙掕壊"
+        @confirm="confirm"
+    >
+        <p class="tip" v-if="user != null">涓虹敤鎴� <em>{{user.realname}}</em> 鍒嗛厤浼佷笟</p>
+        <el-transfer
+            v-if="company"
+            v-model="selectedIds"
+            :titles="['鏈垎閰嶄紒涓�', '宸插垎閰嶄紒涓�']"
+            :props="{
+                key: 'id',
+                label: 'name'
+            }"
+            :data="company">
+        </el-transfer>
+    </GlobalWindow>
+</template>
+
+<script>
+    import BasePage from '@/components/base/BasePage'
+    import GlobalWindow from '@/components/common/GlobalWindow'
+    import { pageAll } from '@/api/business/company'
+    import { create } from '@/api/business/companyPermission'
+    export default {
+        name: 'allocationEnterprises',
+        extends: BasePage,
+        components: { GlobalWindow },
+        data () {
+            return {
+                visible: false,
+                isWorking: false,
+                // 鐢ㄦ埛
+                user: null,
+                // 浼佷笟鍒楄〃
+                company: null,
+                // 宸查�変腑鐨勮鑹睮D
+                selectedIds: []
+            }
+        },
+        methods: {
+            open (title, target) {
+                this.selectedIds = []
+                this.visible = true
+                this.title = title
+                this.user = target
+                pageAll({ userId: target.id })
+                    .then(res => {
+                        this.company = res.map(r => {
+                            return {
+                                name: r.name,
+                                id: r.id
+                            }
+                        })
+                        res.forEach(item => {
+                            if (item.hasPerimission === 1) {
+                                this.selectedIds.push(item.id)
+                            }
+                        })
+                    })
+            },
+            // 纭閫夋嫨瑙掕壊
+            confirm () {
+                if (this.isWorking) {
+                    return
+                }
+                this.isWorking = true
+                create({
+                    userId: this.user.id,
+                    companyIdList: this.selectedIds
+                })
+                    .then(() => {
+                        this.$tip.apiSuccess('瑙掕壊閰嶇疆鎴愬姛锛岀敤鎴烽噸鏂扮櫥褰曞悗鐢熸晥')
+                        this.visible = false
+                        this.$emit('success')
+                    })
+                    .catch(e => {
+                        this.$tip.apiFailed(e)
+                    })
+                    .finally(() => {
+                        this.isWorking = false
+                    })
+            },
+            // 鍏抽棴
+            close () {
+                this.$emit('update:visible', false)
+            }
+        }
+    }
+</script>
+
+<style scoped lang="scss">
+    @import "@/assets/style/variables.scss";
+    // 瑙掕壊閰嶇疆
+    .global-window {
+        .tip {
+            em {
+                font-style: normal;
+                color: $primary-color;
+                font-weight: bold;
+            }
+        }
+        .tip-warn {
+            margin: 4px 0 12px 0;
+            font-size: 12px;
+            color: #999;
+            i {
+                color: orange;
+                margin-right: 4px;
+                font-size: 14px;
+                position: relative;
+                top: 1px;
+            }
+        }
+    }
+</style>
diff --git a/company/src/views/business/company.vue b/company/src/views/business/company.vue
index f68566c..c725529 100644
--- a/company/src/views/business/company.vue
+++ b/company/src/views/business/company.vue
@@ -19,8 +19,8 @@
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
             <ul class="toolbar" v-permissions="['business:company:create']">
-                <li><el-button type="primary" @click="$refs.operaCompanyWindow.open('鏂板缓浼佷笟淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:company:create']">鏂板缓浼佷笟</el-button></li>
-                <li><el-button type="primary" @click="$refs.OperaCompanyDescWindow.open('璇︽儏')" icon="el-icon-plus" v-permissions="['business:company:create']">璇︽儏</el-button></li>
+                <li><el-button type="primary" @click="$refs.operaCompanyWindow.open('鏂板缓浼佷笟淇℃伅琛�')" v-permissions="['business:company:create']">鏂板缓浼佷笟</el-button></li>
+                <li><el-button type="primary" @click="$refs.OperaCompanyDescWindow.open('璇︽儏')" v-permissions="['business:company:create']">璇︽儏</el-button></li>
             </ul>
             <el-table
                 v-loading="isWorking.search"
@@ -63,9 +63,9 @@
             </pagination>
         </template>
         <!-- 鏂板缓/淇敼 -->
-        <OperaCompanyWindow ref="operaCompanyWindow" @success="handlePageChange"/>
+        <OperaCompanyWindow ref="operaCompanyWindow" @success="handlePageChange" />
         <!-- 璇︽儏 -->
-        <OperaCompanyDescWindow ref="OperaCompanyDescWindow" @success="handlePageChange"/>
+        <OperaCompanyDescWindow ref="OperaCompanyDescWindow" @success="handlePageChange" />
     </TableLayout>
 </template>
 
diff --git a/company/src/views/business/insurance.vue b/company/src/views/business/insurance.vue
index 6cf0c6a..fd66933 100644
--- a/company/src/views/business/insurance.vue
+++ b/company/src/views/business/insurance.vue
@@ -7,15 +7,14 @@
             </el-form-item>
             <section>
                 <el-button type="primary" @click="search">鎼滅储</el-button>
-                <el-button type="primary" :loading="isWorking.export" v-permissions="['business:insurance:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+<!--                <el-button type="primary" :loading="isWorking.export" v-permissions="['business:insurance:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>-->
                 <el-button @click="reset">閲嶇疆</el-button>
-                <el-button @click="$refs.OperaInsuranceDescWindow.open('淇濋櫓鍏徃璇︽儏')">璇︽儏</el-button>
             </section>
         </el-form>
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
             <ul class="toolbar" v-permissions="['business:insurance:create']">
-                <li><el-button type="primary" @click="$refs.operaInsuranceWindow.open('鏂板淇濋櫓鍏徃')" icon="el-icon-plus" v-permissions="['business:insurance:create']">鏂板缓</el-button></li>
+                <li><el-button type="primary" @click="$refs.operaInsuranceWindow.open('鏂板淇濋櫓鍏徃')" v-permissions="['business:insurance:create']">鏂板淇濋櫓鍏徃</el-button></li>
             </ul>
             <el-table
                 v-loading="isWorking.search"
@@ -31,6 +30,7 @@
                 <el-table-column label="鍚敤鐘舵��" min-width="100px">
                     <template slot-scope="{row}">
                         <el-switch
+                            @change="changeStatus($event, row)"
                             v-model="row.status"
                             active-color="#13ce66"
                             inactive-color="#ff4949"
@@ -46,8 +46,8 @@
                     fixed="right"
                 >
                     <template slot-scope="{row}">
-                        <el-button type="text" @click="$refs.operaInsuranceWindow.open('缂栬緫淇濋櫓鍏徃淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:insurance:update']">鏌ョ湅璇︽儏</el-button>
-                        <el-button type="text" @click="$refs.operaInsuranceWindow.open('缂栬緫淇濋櫓鍏徃淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:insurance:update']">淇敼</el-button>
+                        <el-button type="text" @click="$refs.OperaInsuranceDescWindow.open('淇濋櫓鍏徃璇︽儏', row)" icon="el-icon-edit" v-permissions="['business:insurance:update']">鏌ョ湅璇︽儏</el-button>
+                        <el-button type="text" @click="$refs.operaInsuranceWindow.open('淇敼淇濋櫓鍏徃', row)" icon="el-icon-edit" v-permissions="['business:insurance:update']">淇敼</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -71,6 +71,7 @@
     import Pagination from '@/components/common/Pagination'
     import OperaInsuranceWindow from '@/components/business/OperaInsuranceWindow'
     import OperaInsuranceDescWindow from '@/components/business/OperaInsuranceDescWindow'
+    import { updateStatus } from '@/api/business/insurance'
     export default {
         name: 'Insurance',
         extends: BaseTable,
@@ -91,6 +92,18 @@
                 'field.main': 'id'
             })
             this.search()
+        },
+        methods: {
+            // 淇敼鐘舵��
+            changeStatus(status, row) {
+                updateStatus({ id: row.id, status })
+                    .then(res => {
+                        this.search()
+                    })
+                    .catch(err => {
+                        row.status = row.status === 0 ? 1 : 0
+                    })
+            }
         }
     }
 </script>
diff --git a/company/src/views/business/solutions.vue b/company/src/views/business/solutions.vue
index 3b1c2b0..a35ea9e 100644
--- a/company/src/views/business/solutions.vue
+++ b/company/src/views/business/solutions.vue
@@ -19,16 +19,25 @@
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
             <ul class="toolbar" v-permissions="['business:solutions:create']">
-                <li><el-button type="primary" @click="$refs.operaSolutionsWindow.open('鏂板缓淇濋櫓鏂规')" icon="el-icon-plus" v-permissions="['business:solutions:create']">鏂板缓</el-button></li>
+                <li><el-button type="primary" @click="$refs.operaSolutionsWindow.open('鏂板缓淇濋櫓鏂规')" v-permissions="['business:solutions: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="淇濋櫓鏂规" min-width="100px"></el-table-column>
-                <el-table-column prop="insuranceId" label="淇濋櫓鍏徃" min-width="100px"></el-table-column>
-                <el-table-column prop="insuranceId" label="鎶曚繚骞撮緞" min-width="100px"></el-table-column>
+                <el-table-column prop="insuranceName" label="淇濋櫓鍏徃" min-width="100px"></el-table-column>
+                <el-table-column label="鎶曚繚骞撮緞" min-width="100px">
+                    <template slot-scope="{row}">
+                        <span>{{row.minAge}}鑷硔{row.maxAge}}宀�</span>
+                    </template>
+                </el-table-column>
                 <el-table-column label="鎶曚繚鐢熸晥鏃ユ湡" min-width="100px">
                     <template slot-scope="{row}">
                         <span v-if="row.validType === 0">鏃ュ悗鐢熸晥</span>
@@ -37,12 +46,17 @@
                 </el-table-column>
                 <el-table-column label="淇濋櫓璐圭敤" min-width="100px">
                     <template slot-scope="{row}">
-                        <span>{{row.price}}鍏�/浜�/鏈�</span>
+                        <span>{{row.price}}鍏�/浜�/</span>
+                        <span v-if="row.timeUnit === 0">澶�</span>
+                        <span v-if="row.timeUnit === 1">鍗婃湀</span>
+                        <span v-if="row.timeUnit === 2">鏈�</span>
+                        <span v-if="row.timeUnit === 3">骞�</span>
                     </template>
                 </el-table-column>
                 <el-table-column prop="status" label="鍚敤鐘舵��" min-width="100px">
                     <template slot-scope="{row}">
                         <el-switch
+                            @change="changeStatus($event, row)"
                             v-model="row.status"
                             active-color="#13ce66"
                             inactive-color="#ff4949"
@@ -51,10 +65,6 @@
                         </el-switch>
                     </template>
                 </el-table-column>
-
-                <el-table-column prop="minAge" label="鏈�浣庡勾榫�" min-width="100px"></el-table-column>
-                <el-table-column prop="maxAge" label="鏈�楂樺勾榫�" min-width="100px"></el-table-column>
-
                 <el-table-column
                     v-if="containPermissions(['business:solutions:update', 'business:solutions:delete'])"
                     label="鎿嶄綔"
@@ -62,8 +72,8 @@
                     fixed="right"
                 >
                     <template slot-scope="{row}">
-                        <el-button type="text" @click="$refs.operaSolutionsWindow.open('鏂规璇︽儏', row)" icon="el-icon-edit" v-permissions="['business:solutions:update']">鏌ョ湅璇︽儏</el-button>
-                        <el-button type="text" @click="$refs.operaSolutionsWindow.open('缂栬緫淇濋櫓鏂规', row)" icon="el-icon-edit" v-permissions="['business:solutions:update']">淇敼</el-button>
+                        <el-button type="text" @click="$refs.OperaSolutionsDescWindow.open('鏂规璇︽儏', { id: row.id })" icon="el-icon-edit" v-permissions="['business:solutions:update']">鏌ョ湅璇︽儏</el-button>
+                        <el-button type="text" @click="$refs.operaSolutionsWindow.open('缂栬緫淇濋櫓鏂规', { id: row.id })" icon="el-icon-edit" v-permissions="['business:solutions:update']">淇敼</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -87,6 +97,7 @@
     import Pagination from '@/components/common/Pagination'
     import OperaSolutionsWindow from '@/components/business/OperaSolutionsWindow'
     import OperaSolutionsDescWindow from '@/components/business/OperaSolutionsDescWindow'
+    import { updateStatus } from '@/api/business/solutions'
     export default {
         name: 'Solutions',
         extends: BaseTable,
@@ -108,6 +119,18 @@
                 'field.main': 'id'
             })
             this.search()
+        },
+        methods: {
+            // 淇敼鐘舵��
+            changeStatus(status, row) {
+                updateStatus({ id: row.id, status })
+                    .then(res => {
+                        this.search()
+                    })
+                    .catch(err => {
+                        row.status = row.status === 0 ? 1 : 0
+                    })
+            }
         }
     }
 </script>
diff --git a/company/src/views/system/user.vue b/company/src/views/system/user.vue
index 5e4d7f5..6ebbe61 100644
--- a/company/src/views/system/user.vue
+++ b/company/src/views/system/user.vue
@@ -2,21 +2,21 @@
   <TableLayout :permissions="['system:user:query']">
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="80px" inline>
-      <el-form-item label="鐢ㄦ埛鍚�" prop="username">
-        <el-input v-model="searchForm.username" v-trim placeholder="璇疯緭鍏ョ敤鎴峰悕" @keypress.enter.native="search"/>
-      </el-form-item>
+<!--      <el-form-item label="鐢ㄦ埛鍚�" prop="username">-->
+<!--        <el-input v-model="searchForm.username" v-trim placeholder="璇疯緭鍏ョ敤鎴峰悕" @keypress.enter.native="search"/>-->
+<!--      </el-form-item>-->
       <el-form-item label="濮撳悕" prop="realname">
-        <el-input v-model="searchForm.realname" v-trim placeholder="璇疯緭鍏ュ鍚�" @keypress.enter.native="search"/>
+        <el-input v-model="searchForm.realname" v-trim placeholder="璇疯緭鍏�" @keypress.enter.native="search"/>
       </el-form-item>
-      <el-form-item label="鎵嬫満鍙风爜" prop="mobile">
-        <el-input v-model="searchForm.mobile" v-trim placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" @keypress.enter.native="search"/>
-      </el-form-item>
-            <el-form-item label="鎵�灞為儴闂�" prop="rootDeptId">
-        <DepartmentSelect v-model="searchForm.rootDeptId" placeholder="璇烽�夋嫨鎵�灞為儴闂�" clearable/>
-      </el-form-item>
-      <el-form-item label="宀椾綅" prop="positionId">
-        <PositionSelect v-model="searchForm.positionId" placeholder="璇烽�夋嫨宀椾綅" clearable/>
-      </el-form-item>
+<!--      <el-form-item label="鎵嬫満鍙风爜" prop="mobile">-->
+<!--        <el-input v-model="searchForm.mobile" v-trim placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" @keypress.enter.native="search"/>-->
+<!--      </el-form-item>-->
+<!--            <el-form-item label="鎵�灞為儴闂�" prop="rootDeptId">-->
+<!--        <DepartmentSelect v-model="searchForm.rootDeptId" placeholder="璇烽�夋嫨鎵�灞為儴闂�" clearable/>-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="宀椾綅" prop="positionId">-->
+<!--        <PositionSelect v-model="searchForm.positionId" placeholder="璇烽�夋嫨宀椾綅" clearable/>-->
+<!--      </el-form-item>-->
       <section>
         <el-button type="primary" icon="el-icon-search" @click="search">鎼滅储</el-button>
         <el-button @click="reset">閲嶇疆</el-button>
@@ -25,44 +25,25 @@
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['system:user:create', 'system:user:delete']">
-        <li v-permissions="['system:user:create']"><el-button icon="el-icon-plus" type="primary" @click="$refs.operaUserWindow.open('鏂板缓鐢ㄦ埛')">鏂板缓</el-button></li>
-        <li v-permissions="['system:user:delete']"><el-button icon="el-icon-delete" @click="deleteByIdInBatch">鍒犻櫎</el-button></li>
+        <li v-permissions="['system:user:create']"><el-button type="primary" @click="$refs.operaUserWindow.open('鏂板璐﹀彿')">鏂板璐﹀彿</el-button></li>
+<!--        <li v-permissions="['system:user:delete']"><el-button icon="el-icon-delete" @click="deleteByIdInBatch">鍒犻櫎</el-button></li>-->
       </ul>
+<!--      @selection-change="handleSelectionChange"-->
       <el-table
         v-loading="isWorking.search"
         :data="tableData.list"
         :default-sort = "{prop: 'createTime', order: 'descending'}"
         stripe
-        @selection-change="handleSelectionChange"
         @sort-change="handleSortChange"
       >
-        <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="avatar" label="澶村儚" width="80px" class-name="table-column-avatar" fixed="left">
-          <template slot-scope="{row}">
-            <img :src="row.avatar == null ? '/static/avatar/man.png' : row.avatar">
+        <el-table-column label="搴忓彿" width="80px">
+          <template slot-scope="scope">
+            <span>{{scope.$index + 1}}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="realname" label="濮撳悕" min-width="100px" fixed="left"></el-table-column>
-        <el-table-column prop="username" label="鐢ㄦ埛鍚�" min-width="120px"></el-table-column>
-        <el-table-column prop="empNo" label="宸ュ彿" sortable="custom" sort-by="EMP_NO" min-width="80px"></el-table-column>
-        <el-table-column prop="department" label="閮ㄩ棬" min-width="120px">
-          <template slot-scope="{row}">{{row.department == null ? '' : row.department.name}}</template>
-        </el-table-column>
-        <el-table-column prop="position" label="宀椾綅" min-width="160px" class-name="table-column-strings">
-          <template slot-scope="{row}">
-            <ul>
-              <li v-for="position in row.positions" :key="position.id">{{position.name}}</li>
-            </ul>
-          </template>
-        </el-table-column>
-        <el-table-column prop="sex" label="鎬у埆" sortable="custom" sort-by="SEX" min-width="80px">
-          <template slot-scope="{row}">
-            {{row.sex | sex}}
-          </template>
-        </el-table-column>
-        <el-table-column prop="mobile" label="鎵嬫満鍙风爜" min-width="100px"></el-table-column>
-        <el-table-column prop="email" label="閭" min-width="180px"></el-table-column>
-        <el-table-column prop="birthday" label="鐢熸棩" sortable="custom" sort-by="BIRTHDAY" min-width="100px"></el-table-column>
+        <el-table-column prop="username" label="璐﹀彿" min-width="120px"></el-table-column>
+        <el-table-column prop="realname" label="濮撳悕" min-width="100px"></el-table-column>
+        <el-table-column prop="mobile" label="鑱旂郴鏂瑰紡" min-width="100px"></el-table-column>
         <el-table-column prop="roles" label="瑙掕壊" min-width="160px" class-name="table-column-strings">
           <template slot-scope="{row}">
             <ul>
@@ -70,14 +51,18 @@
             </ul>
           </template>
         </el-table-column>
-        <el-table-column prop="createUser" label="鍒涘缓浜�" min-width="100px">
-          <template slot-scope="{row}">{{row.createUserInfo == null ? '' : row.createUserInfo.username}}</template>
+        <el-table-column label="鍚敤鐘舵��" min-width="100px">
+          <template slot-scope="{row}">
+            <el-switch
+              @change="changeStatus($event, row)"
+              v-model="row.status"
+              active-color="#13ce66"
+              inactive-color="#ff4949"
+              :active-value="0"
+              :inactive-value="1">
+            </el-switch>
+          </template>
         </el-table-column>
-        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" sortable="custom" sort-by="CREATE_TIME" min-width="140px"></el-table-column>
-        <el-table-column prop="updateUser" label="鏇存柊浜�" min-width="100px">
-          <template slot-scope="{row}">{{row.updateUserInfo == null ? '' : row.updateUserInfo.username}}</template>
-        </el-table-column>
-        <el-table-column prop="updateTime" label="鏇存柊鏃堕棿" sortable="custom" sort-by="UPDATE_TIME" min-width="140px"></el-table-column>
         <el-table-column
           v-if="containPermissions(['system:user:update', 'system:user:createUserRole', 'system:user:resetPwd', 'system:user:delete'])"
           label="鎿嶄綔"
@@ -86,9 +71,10 @@
         >
           <template v-if="isAdmin || (row.id !== userInfo.id && row.roles.findIndex(r => r.code === adminCode) === -1)" slot-scope="{row}">
             <el-button type="text" icon="el-icon-edit" @click="$refs.operaUserWindow.open('缂栬緫鐢ㄦ埛', row)" v-permissions="['system:user:update']">缂栬緫</el-button>
+            <el-button type="text" @click="$refs.allocationEnterprises.open('鍒嗛厤浼佷笟', row)">鍒嗛厤浼佷笟</el-button>
             <el-button type="text" icon="el-icon-s-custom" @click="$refs.roleConfigWindow.open(row)" v-permissions="['system:user:createUserRole']">閰嶇疆瑙掕壊</el-button>
             <el-button type="text" @click="$refs.resetPwdWindow.open(row)" v-permissions="['system:user:resetPwd']">閲嶇疆瀵嗙爜</el-button>
-            <el-button v-if="!row.fixed" type="text" icon="el-icon-delete" @click="deleteById(row)" v-permissions="['system:user:delete']">鍒犻櫎</el-button>
+<!--            <el-button v-if="!row.fixed" type="text" icon="el-icon-delete" @click="deleteById(row)" v-permissions="['system:user:delete']">鍒犻櫎</el-button>-->
           </template>
         </el-table-column>
       </el-table>
@@ -104,6 +90,8 @@
     <RoleConfigWindow ref="roleConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
     <!-- 閲嶇疆瀵嗙爜 -->
     <ResetPwdWindow ref="resetPwdWindow"/>
+    <!--  鍒嗛厤浼佷笟  -->
+    <allocationEnterprises ref="allocationEnterprises" @success="handlePageChange(tableData.pagination.pageIndex)"/>
   </TableLayout>
 </template>
 
@@ -112,15 +100,17 @@
 import TableLayout from '@/layouts/TableLayout'
 import BaseTable from '@/components/base/BaseTable'
 import OperaUserWindow from '@/components/system/user/OperaUserWindow'
+import allocationEnterprises from '@/components/system/user/allocationEnterprises'
 import RoleConfigWindow from '@/components/system/user/RoleConfigWindow'
 import ResetPwdWindow from '@/components/system/user/ResetPwdWindow'
 import DepartmentSelect from '@/components/common/DepartmentSelect'
 import PositionSelect from '@/components/common/PositionSelect'
+import { updUserStatus } from '@/api/system/user'
 
 export default {
   name: 'SystemUser',
   extends: BaseTable,
-  components: { PositionSelect, DepartmentSelect, ResetPwdWindow, RoleConfigWindow, OperaUserWindow, TableLayout, Pagination },
+  components: { allocationEnterprises, PositionSelect, DepartmentSelect, ResetPwdWindow, RoleConfigWindow, OperaUserWindow, TableLayout, Pagination },
   data () {
     return {
       // 鎼滅储
@@ -144,6 +134,18 @@
       }]
     })
     this.search()
+  },
+  methods: {
+    changeStatus(status, row) {
+      updUserStatus({
+        id: row.id,
+        status
+      }).then(res => {
+        this.search()
+      }).catch(err => {
+        row.status = row.status === 0 ? 1 : 0
+      })
+    }
   }
 }
 </script>

--
Gitblit v1.9.3