From 0da56b9186b6c63a587c36c2f3a1b30329281d28 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期一, 11 十一月 2024 09:07:49 +0800
Subject: [PATCH] 优化

---
 company/src/views/business/solutions.vue                               |   57 +++
 company/src/api/business/company.js                                    |    5 
 company/src/components/business/OperaCompanyUserApplyCarefulWindow.vue |  176 +++++++++++++
 company/src/views/business/contract.vue                                |   30 ++
 company/src/components/business/OperaCompanyUserApplyWindow.vue        |   34 -
 company/src/views/business/userManagement.vue                          |  141 ++++++++++
 company/src/api/business/companyUserApply.js                           |   20 +
 company/src/api/business/contract.js                                   |    4 
 company/src/components/business/authorizedEnterprise.vue               |   80 ++++++
 company/src/components/common/UploadFile.vue                           |   13 
 company/src/components/business/OperaCompanyDepartmentWindow.vue       |    2 
 company/src/components/business/operaCompanyUserApplyDescWindow.vue    |  165 ++++++++++++
 company/src/views/business/companyUserApply.vue                        |   19 +
 13 files changed, 696 insertions(+), 50 deletions(-)

diff --git a/company/src/api/business/company.js b/company/src/api/business/company.js
index 8547df0..090cd33 100644
--- a/company/src/api/business/company.js
+++ b/company/src/api/business/company.js
@@ -60,3 +60,8 @@
 export function findAllCompanyList (data) {
     return request.post('/business/company/findAllCompanyList', data)
 }
+
+// 鍙戣捣绛剧讲
+export function getSignLink (id) {
+    return request.get(`/business/companySolution/getSignLink?id=${id}`)
+}
diff --git a/company/src/api/business/companyUserApply.js b/company/src/api/business/companyUserApply.js
index 0da4669..c35a759 100644
--- a/company/src/api/business/companyUserApply.js
+++ b/company/src/api/business/companyUserApply.js
@@ -16,3 +16,23 @@
 export function updateById (data) {
   return request.post('/business/companyUserApply/updateById', data)
 }
+
+// 鏍规嵁ID鏌ヨ
+export function getById (id) {
+  return request.get(`business/companyUserApply/${id}`)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/companyUserApply/delete/${id}`)
+}
+
+// 瀹℃壒
+export function audit (data) {
+  return request.post('/business/companyUserApply/audit', data)
+}
+
+// 鍒嗛〉鏌ヨ
+export function page (data) {
+  return request.post('/business/companyUserApply/page', data)
+}
diff --git a/company/src/api/business/contract.js b/company/src/api/business/contract.js
index 99222df..2107d0b 100644
--- a/company/src/api/business/contract.js
+++ b/company/src/api/business/contract.js
@@ -28,8 +28,8 @@
 }
 
 // 鍚堝悓鍙栨秷
-export function cancel (data) {
-  return request.post('/business/contract/cancel', data)
+export function cancel (id) {
+  return request.get(`/business/contract/cancel?id=${id}`)
 }
 
 // 鍙戣捣绛剧讲
diff --git a/company/src/components/business/OperaCompanyDepartmentWindow.vue b/company/src/components/business/OperaCompanyDepartmentWindow.vue
index 4cd780c..ae1d5d8 100644
--- a/company/src/components/business/OperaCompanyDepartmentWindow.vue
+++ b/company/src/components/business/OperaCompanyDepartmentWindow.vue
@@ -5,7 +5,7 @@
         :confirm-working="isWorking"
         @confirm="confirm"
     >
-        <el-form :model="form" ref="form" :rules="rules">{{form.type}}
+        <el-form :model="form" ref="form" :rules="rules">
             <el-form-item label="涓婄骇缁勭粐" prop="parentId">
                 <el-cascader
                     :options="organization"
diff --git a/company/src/components/business/OperaCompanyUserApplyCarefulWindow.vue b/company/src/components/business/OperaCompanyUserApplyCarefulWindow.vue
new file mode 100644
index 0000000..878a2c0
--- /dev/null
+++ b/company/src/components/business/OperaCompanyUserApplyCarefulWindow.vue
@@ -0,0 +1,176 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <div class="info" v-if="info">
+            <div class="info_list">
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鐢宠鎺堟潈璐﹀彿锛�</div>
+                    <div class="info_list_item_val">{{info.userName}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鎺堟潈绠$悊浼佷笟锛�</div>
+                    <div class="info_list_item_val">{{info.companyNames}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鐢宠璇存槑锛�</div>
+                    <div class="info_list_item_val">{{info.content}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鐢宠闄勪欢锛�</div>
+                    <div class="info_list_item_val">
+                        <div class="info_list_item_val_cul">
+                            <u v-for="(item, index) in info.multifileList" :key="index" @click="openFile(item.fileurlFull)">{{item.name}}</u>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <el-form :model="form" ref="form" :rules="rules">
+            <el-form-item label="鏄惁閫氳繃" prop="status">
+                <el-radio-group v-model="form.status">
+                    <el-radio :label="1">瀹℃牳閫氳繃</el-radio>
+                    <el-radio :label="2">瀹℃牳涓嶉�氳繃</el-radio>
+                </el-radio-group>
+            </el-form-item>
+            <el-form-item label="椹冲洖鐞嗙敱" prop="checkInfo" :rules="form.status === 2 ? { required: true, message: '椹冲洖鐞嗙敱涓嶈兘涓虹┖', trigger: 'blur' } : { required: false } ">
+                <el-input
+                    type="textarea"
+                    placeholder="璇疯緭鍏ラ┏鍥炵悊鐢�"
+                    v-model="form.checkInfo"
+                    maxlength="300"
+                    show-word-limit />
+            </el-form-item>
+        </el-form>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import UploadFile from '@/components/common/UploadFile'
+  import { audit, getById } from '@/api/business/companyUserApply'
+  export default {
+    name: 'OperaCompanyUserApplyCarefulWindow',
+    extends: BaseOpera,
+    components: { GlobalWindow, UploadFile },
+    data () {
+      return {
+        // 琛ㄥ崟鏁版嵁
+        form: {
+          id: null,
+          status: 1,
+          checkInfo: ''
+        },
+        info: null,
+        // 楠岃瘉瑙勫垯
+        rules: {}
+      }
+    },
+    methods: {
+      open (title, id) {
+        this.title = title
+        this.form.checkInfo = ''
+        this.form.status = 1
+        this.form.id = id
+        getById(id)
+          .then(res => {
+            this.info = res
+            this.visible = true
+          })
+      },
+      openFile(url) {
+        window.open(url)
+      },
+      confirm() {
+        this.$refs.form.validate((valid) => {
+          if (!valid) {
+            return
+          }
+          // 璋冪敤鏂板缓鎺ュ彛
+          this.isWorking = true
+          audit(this.form)
+            .then(() => {
+              this.visible = false
+              this.$tip.apiSuccess('瀹℃牳鎴愬姛')
+              this.$emit('success')
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking = false
+            })
+        })
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+    .info {
+        width: 100%;
+        .info_label {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            margin-bottom: 20px;
+            span {
+                font-size: 18px;
+                font-weight: 600;
+                color: #000000;
+            }
+        }
+        .info_list {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            flex-wrap: wrap;
+            .info_list_item {
+                width: 50%;
+                display: flex;
+                align-items: start;
+                margin-bottom: 20px;
+                .info_list_item_label {
+                    font-size: 15px;
+                    flex-shrink: 0;
+                }
+                .info_list_item_val {
+                    flex: 1;
+                    display: flex;
+                    align-items: center;
+                    font-size: 15px;
+                    .info_list_item_val_cul {
+                        display: flex;
+                        flex-direction: column;
+                        u {
+                            font-size: 15px;
+                            color: #2E68EC;
+                            cursor: pointer;
+                            margin-top: 5px;
+                            &:first-child {
+                                margin: 0;
+                            }
+                        }
+                    }
+                    .image {
+                        width: 100px;
+                        height: 100px;
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        overflow: hidden;
+                        img {
+                            width: 100%;
+                        }
+                    }
+                }
+            }
+        }
+    }
+</style>
diff --git a/company/src/components/business/OperaCompanyUserApplyWindow.vue b/company/src/components/business/OperaCompanyUserApplyWindow.vue
index de7970a..43a0002 100644
--- a/company/src/components/business/OperaCompanyUserApplyWindow.vue
+++ b/company/src/components/business/OperaCompanyUserApplyWindow.vue
@@ -32,33 +32,17 @@
                         :value="item.id">
                     </el-option>
                 </el-select>
-<!--                <div style="display: flex; align-items: center;">-->
-<!--                    <el-input v-model="form.content" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>-->
-<!--                </div>-->
-<!--                <div class="list">-->
-<!--                    <div class="list_label">宸查�変紒涓氾細</div>-->
-<!--                    <div class="list_box">-->
-<!--                        <div class="list_box_row">-->
-<!--                            <span>XXX鏈夐檺璐d换鍏徃</span>-->
-<!--                            <i class="el-icon-error"></i>-->
-<!--                        </div>-->
-<!--                        <div class="list_box_row">-->
-<!--                            <span>XXX鏈夐檺璐d换鍏徃</span>-->
-<!--                            <i class="el-icon-error"></i>-->
-<!--                        </div>-->
-<!--                    </div>-->
-<!--                </div>-->
             </el-form-item>
             <el-form-item label="鐢宠璇存槑" prop="content">
                 <el-input
                     type="textarea"
                     placeholder="璇疯緭鍏ョ敵璇疯鏄�"
                     v-model="form.content"
-                    maxlength="30"
+                    maxlength="300"
                     show-word-limit />
             </el-form-item>
             <el-form-item label="鎺堟潈涔�" prop="multifileList">
-                <UploadFile @remove="deleFile" :uploadData="{ folder: 'apply', fileType:'.pdf' }" :fileList="fileList" @uploadSuccess="editFanganFile" />
+                <UploadFile @remove="deleFile" :limit="99" :uploadData="{ folder: 'apply', fileType:'.pdf' }" :fileList="fileList" @uploadSuccess="editFanganFile" />
             </el-form-item>
         </el-form>
     </GlobalWindow>
@@ -82,7 +66,7 @@
           userId: '',
           content: '',
           companyIds: [],
-          multifileList: null
+          multifileList: []
         },
         // 楠岃瘉瑙勫垯
         rules: {
@@ -114,7 +98,6 @@
             return
           }
           let obj = JSON.parse(JSON.stringify(this.form))
-          obj.multifileList = [obj.multifileList]
           obj.companyIds = obj.companyIds.join(',')
           obj.companyNames = []
           this.form.companyIds.forEach(item => {
@@ -147,7 +130,6 @@
             return
           }
           let obj = JSON.parse(JSON.stringify(this.form))
-          obj.multifileList = [obj.multifileList]
           obj.companyIds = obj.companyIds.join(',')
           obj.companyNames = []
           this.form.companyIds.forEach(item => {
@@ -193,11 +175,15 @@
           }
         })
       },
-      deleFile () {
-        this.form.multifileList = null
+      deleFile (imgaddr) {
+        this.form.multifileList.forEach((item, index) => {
+          if (item.imgaddr === imgaddr) {
+            this.form.multifileList.splice(index, 1)
+          }
+        })
       },
       editFanganFile (data) {
-        this.form.multifileList = data
+        this.form.multifileList.push(data)
       },
       getAccount() {
         findUserList({})
diff --git a/company/src/components/business/authorizedEnterprise.vue b/company/src/components/business/authorizedEnterprise.vue
new file mode 100644
index 0000000..d75ab9e
--- /dev/null
+++ b/company/src/components/business/authorizedEnterprise.vue
@@ -0,0 +1,80 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :withFooter="false"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-table
+            :data="tableData"
+            border
+            style="width: 100%">
+            <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-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>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import { page } from '@/api/business/companyUserApply'
+  export default {
+    name: 'authorizedEnterprise',
+    extends: BaseOpera,
+    components: { GlobalWindow },
+    data () {
+      return {
+        model: {},
+        tableData: []
+      }
+    },
+    methods: {
+      open (title, target) {
+        this.title = title
+        this.visible = true
+      },
+      getList() {
+        page({
+          capacity: 10,
+          page: 1,
+          model: {
+            userId: ''
+          }
+        })
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/company/src/components/business/operaCompanyUserApplyDescWindow.vue b/company/src/components/business/operaCompanyUserApplyDescWindow.vue
new file mode 100644
index 0000000..0d0e735
--- /dev/null
+++ b/company/src/components/business/operaCompanyUserApplyDescWindow.vue
@@ -0,0 +1,165 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :withFooter="false"
+        :visible.sync="visible"
+    >
+        <div class="info">
+            <div class="info_label">
+                <span>鐢宠璁板綍璇︽儏</span>
+            </div>
+            <div class="info_list">
+                <div class="info_list_item">
+                    <div class="info_list_item_label">鐢宠浜猴細</div>
+                    <div class="info_list_item_val">{{form.realName}}</div>
+                </div>
+                <div class="info_list_item">
+                    <div class="info_list_item_label">鐢宠鏃堕棿锛�</div>
+                    <div class="info_list_item_val">{{form.createDate}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鎺堟潈璐﹀彿锛�</div>
+                    <div class="info_list_item_val">{{form.userName}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鎺堟潈绠$悊浼佷笟锛�</div>
+                    <div class="info_list_item_val">{{form.companyNames}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鐢宠璇存槑锛�</div>
+                    <div class="info_list_item_val">{{form.content}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鐢宠闄勪欢锛�</div>
+                    <div class="info_list_item_val">
+                        <div class="info_list_item_val_cul">
+                            <u v-for="(item, index) in form.multifileList" :key="index" @click="openFile(item.fileurlFull)">{{item.name}}</u>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="info">
+            <div class="info_label">
+                <span>瀹℃壒鎯呭喌</span>
+            </div>
+            <div class="info_list">
+                <div class="info_list_item">
+                    <div class="info_list_item_label">瀹℃壒缁撴灉锛�</div>
+                    <div class="info_list_item_val">
+                        <template v-if="form.status === 0">寰呭鏍�</template>
+                        <template v-if="form.status === 1">瀹℃牳閫氳繃</template>
+                        <template v-if="form.status === 2">瀹℃牳涓嶉�氳繃</template>
+                    </div>
+                </div>
+                <div class="info_list_item">
+                    <div class="info_list_item_label">瀹℃牳鏃堕棿锛�</div>
+                    <div class="info_list_item_val">{{form.checkDate}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">瀹℃牳璇存槑锛�</div>
+                    <div class="info_list_item_val">{{form.checkInfo}}</div>
+                </div>
+            </div>
+        </div>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import { getById } from '@/api/business/companyUserApply'
+  import { mapState } from 'vuex'
+  export default {
+    name: 'operaCompanyUserApplyDescWindow',
+    extends: BaseOpera,
+    components: { GlobalWindow },
+    data () {
+      return {
+        form: {}
+      }
+    },
+    computed: {
+      ...mapState(['userInfo'])
+    },
+    methods: {
+      open (title, id) {
+        this.title = title
+        getById(id)
+          .then(res => {
+            console.log(res)
+            this.form = res
+            this.visible = true
+          })
+      },
+      openFile(url) {
+        window.open(url)
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+    .info {
+        width: 100%;
+        .info_label {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            margin-bottom: 20px;
+            span {
+                font-size: 18px;
+                font-weight: 600;
+                color: #000000;
+            }
+        }
+        .info_list {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            flex-wrap: wrap;
+            .info_list_item {
+                width: 50%;
+                display: flex;
+                align-items: start;
+                margin-bottom: 20px;
+                .info_list_item_label {
+                    font-size: 15px;
+                    flex-shrink: 0;
+                }
+                .info_list_item_val {
+                    flex: 1;
+                    display: flex;
+                    align-items: center;
+                    font-size: 15px;
+                    .info_list_item_val_cul {
+                        display: flex;
+                        flex-direction: column;
+                        u {
+                            font-size: 15px;
+                            color: #2E68EC;
+                            cursor: pointer;
+                            margin-top: 5px;
+                            &:first-child {
+                                margin: 0;
+                            }
+                        }
+                    }
+                    .image {
+                        width: 100px;
+                        height: 100px;
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        overflow: hidden;
+                        img {
+                            width: 100%;
+                        }
+                    }
+                }
+            }
+        }
+    }
+</style>
diff --git a/company/src/components/common/UploadFile.vue b/company/src/components/common/UploadFile.vue
index 8624fa0..4bb6bfb 100644
--- a/company/src/components/common/UploadFile.vue
+++ b/company/src/components/common/UploadFile.vue
@@ -5,7 +5,7 @@
       class="upload-demo"
       :accept="uploadData.fileType"
       :action="uploadImgUrl"
-      :limit="1"
+      :limit="limit"
       :before-remove="removes"
       :on-exceed="handleExceed"
       :on-success="handleFileSuccess"
@@ -42,7 +42,11 @@
       type: String,
       default: 'width: 190px; height: 190px;'
     },
-    uploadData: Object
+    uploadData: Object,
+    limit: {
+      type: Number,
+      default: () => 1
+    }
   },
   data() {
     return {
@@ -70,9 +74,10 @@
     }
   },
   methods: {
-    removes() {
+    removes(e) {
       this.uploaded=false
-      this.$emit('remove')
+      console.log(e.imgaddr)
+      this.$emit('remove', e.imgaddr)
     },
     // 涓婁紶鍥剧墖
     handleExceed(){
diff --git a/company/src/views/business/companyUserApply.vue b/company/src/views/business/companyUserApply.vue
index a1443b8..9993b73 100644
--- a/company/src/views/business/companyUserApply.vue
+++ b/company/src/views/business/companyUserApply.vue
@@ -16,7 +16,7 @@
         </el-form>
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
-            <ul class="toolbar" v-permissions="['business:companyuserapply:create']">
+            <ul class="toolbar" v-permissions="['business:companyuserapply:create']" v-if="userInfo.type === 1">
                 <li><el-button type="primary" @click="$refs.operaCompanyUserApplyWindow.open('鏂板缓鐢宠')" icon="el-icon-plus" v-permissions="['business:companyuserapply:create']">鏂板缓</el-button></li>
             </ul>
             <el-table
@@ -46,8 +46,9 @@
                     fixed="right"
                 >
                     <template slot-scope="{row}">
-                        <el-button type="text" @click="$refs.operaCompanyUserApplyWindow.open('鐢宠璁板綍璇︽儏', row)" icon="el-icon-view">鏌ョ湅</el-button>
-                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:companyuserapply:delete']">鍒犻櫎</el-button>
+                        <el-button type="text" @click="$refs.operaCompanyUserApplyDescWindow.open('鐢宠璁板綍璇︽儏', row.id)" icon="el-icon-view">鏌ョ湅</el-button>
+                        <el-button type="text" v-if="userInfo.type === 0 && row.status === 0" @click="$refs.operaCompanyUserApplyCarefulWindow.open('闆嗗洟鐢宠璁板綍瀹℃牳', row.id)">瀹℃牳</el-button>
+                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-if="userInfo.type === 1" v-permissions="['business:companyuserapply:delete']">鍒犻櫎</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -60,6 +61,10 @@
         </template>
         <!-- 鏂板缓/淇敼 -->
         <OperaCompanyUserApplyWindow ref="operaCompanyUserApplyWindow" @success="handlePageChange"/>
+        <!--    鏌ョ湅    -->
+        <operaCompanyUserApplyDescWindow ref="operaCompanyUserApplyDescWindow" />
+        <!--    瀹℃牳    -->
+        <OperaCompanyUserApplyCarefulWindow ref="operaCompanyUserApplyCarefulWindow" @success="handlePageChange"/>
     </TableLayout>
 </template>
 
@@ -67,11 +72,17 @@
   import BaseTable from '@/components/base/BaseTable'
   import TableLayout from '@/layouts/TableLayout'
   import Pagination from '@/components/common/Pagination'
+  import OperaCompanyUserApplyCarefulWindow from '@/components/business/OperaCompanyUserApplyCarefulWindow'
   import OperaCompanyUserApplyWindow from '@/components/business/OperaCompanyUserApplyWindow'
+  import operaCompanyUserApplyDescWindow from '@/components/business/operaCompanyUserApplyDescWindow'
+  import { mapState } from 'vuex'
   export default {
     name: 'CompanyUserApply',
     extends: BaseTable,
-    components: { TableLayout, Pagination, OperaCompanyUserApplyWindow },
+    components: { TableLayout, Pagination, OperaCompanyUserApplyWindow, operaCompanyUserApplyDescWindow, OperaCompanyUserApplyCarefulWindow },
+    computed: {
+      ...mapState(['userInfo'])
+    },
     data () {
       return {
         // 鎼滅储
diff --git a/company/src/views/business/contract.vue b/company/src/views/business/contract.vue
index 9cd8362..a424fe5 100644
--- a/company/src/views/business/contract.vue
+++ b/company/src/views/business/contract.vue
@@ -29,7 +29,7 @@
         </el-form>
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
-            <ul class="toolbar" v-permissions="['business:contract:create']">
+            <ul class="toolbar" v-permissions="['business:contract:create']" v-if="userInfo.type === 0">
                 <li><el-button type="primary" @click="$refs.operaContractWindow.open('鏂板缓鍚堝悓淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:contract:create']">鏂板缓</el-button></li>
             </ul>
             <el-table
@@ -50,7 +50,11 @@
                         <template v-else-if="row.signType === 2">鍟嗘埛-浼佷笟</template>
                     </template>
                 </el-table-column>
-                <el-table-column prop="companyName" label="瀵规柟鍚嶇О" min-width="100px"></el-table-column>
+                <el-table-column prop="companyName" label="瀵规柟鍚嶇О" min-width="100px">
+                    <template slot-scope="{row}">
+                        {{ row.partyCompanyName }} / {{ row.companyName }}
+                    </template>
+                </el-table-column>
                 <el-table-column label="鍚堝悓寮�濮嬫椂闂�" min-width="100px">
                     <template slot-scope="{row}">
                         {{ row.startTime }} - {{ row.endTime }}
@@ -74,7 +78,21 @@
                 >
                     <template slot-scope="{row}">
                         <el-button type="text" @click="$refs.operaContractDescWindow.open('鍚堝悓璇︽儏', row.id)" icon="el-icon-view">鏌ョ湅璇︽儏</el-button>
-                        <el-button type="text" @click="sign(row)" icon="el-icon-document-checked" v-if="row.status !== 1 && row.status !== 4 && row.status !== 3">绛剧讲</el-button>
+                        <template v-if="userInfo.type === 0">
+                            <template v-if="(row.signType === 0 && row.status === 0) || (row.signType === 1 && row.status === 0)">
+                                <el-button type="text" @click="sign(row)" icon="el-icon-document-checked">绛剧讲</el-button>
+                            </template>
+                        </template>
+                        <template v-if="userInfo.type === 1">
+                            <template v-if="(row.signType === 1 && row.status === 1) || (row.signType === 2 && row.status === 1)">
+                                <el-button type="text" @click="sign(row)" icon="el-icon-document-checked">绛剧讲</el-button>
+                            </template>
+                        </template>
+                        <template v-if="userInfo.type === 2">
+                            <template v-if="(row.signType === 0 && row.status === 1) || (row.signType === 2 && row.status === 0)">
+                                <el-button type="text" @click="sign(row)" icon="el-icon-document-checked">绛剧讲</el-button>
+                            </template>
+                        </template>
                         <el-button type="text" icon="el-icon-document-remove" v-if="row.status === 0" @click="cancelHT(row.id)">鍙栨秷</el-button>
                         <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:contract:delete']" v-if="row.status === 4">鍒犻櫎</el-button>
                     </template>
@@ -101,10 +119,14 @@
   import OperaContractWindow from '@/components/business/OperaContractWindow'
   import OperaContractDescWindow from '@/components/business/OperaContractDescWindow'
   import { cancel, getSignLink } from '@/api/business/contract'
+  import { mapState } from 'vuex'
   export default {
     name: 'Contract',
     extends: BaseTable,
     components: { TableLayout, Pagination, OperaContractWindow, OperaContractDescWindow },
+    computed: {
+      ...mapState(['userInfo'])
+    },
     data () {
       return {
         // 鎼滅储
@@ -139,7 +161,7 @@
           cancelButtonText: '鍙栨秷',
           type: 'warning'
         }).then(() => {
-          cancel({ id }).then(res => {
+          cancel(id).then(res => {
             this.search()
           })
         }).catch(() => {
diff --git a/company/src/views/business/solutions.vue b/company/src/views/business/solutions.vue
index c65c11e..c7caba8 100644
--- a/company/src/views/business/solutions.vue
+++ b/company/src/views/business/solutions.vue
@@ -5,6 +5,12 @@
             <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="signStatus">
+                <el-select v-model="searchForm.signStatus" placeholder="璇烽�夋嫨">
+                    <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>
@@ -27,8 +33,9 @@
                         <span>{{scope.$index + 1}}</span>
                     </template>
                 </el-table-column>
-                <el-table-column prop="name" label="瀛愭柟妗堝悕绉�" min-width="150px"></el-table-column>
-                <el-table-column prop="solutionBaseName" label="涓绘柟妗�" min-width="100px"></el-table-column>
+                <el-table-column prop="name" label="瀛愭柟妗堝悕绉�" min-width="150px" v-if="userInfo.type === 0"></el-table-column>
+                <el-table-column prop="name" label="鏂规鍚嶇О" min-width="150px" v-if="userInfo.type === 1"></el-table-column>
+                <el-table-column prop="solutionBaseName" label="涓绘柟妗�" min-width="100px" v-if="userInfo.type === 0"></el-table-column>
                 <el-table-column label="鎶曚繚绫诲瀷" min-width="120px" align="center">
                     <template slot-scope="{row}">
                         <span v-if="row.type === 0">鐩翠繚</span>
@@ -46,7 +53,7 @@
                         <span v-if="row.timeUnit === 5">骞�</span>
                     </template>
                 </el-table-column>
-                <el-table-column prop="retrial" label="闇�瑕佸瀹�">
+                <el-table-column prop="retrial" label="闇�瑕佸瀹�" v-if="userInfo.type === 0">
                     <template slot-scope="{row}">
                         <span v-if="row.retrial === 0">涓嶉渶瑕�</span>
                         <span v-if="row.retrial === 1">闇�瑕�</span>
@@ -56,25 +63,42 @@
                 <el-table-column prop="status" label="鍚敤鐘舵��" min-width="100px" v-if="userInfo.type !== 1">
                     <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">
+                            @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="signDate" label="绛剧讲鏃堕棿" min-width="100px"></el-table-column>
+                <el-table-column prop="signUserName" label="绛剧讲浜�" min-width="100px"></el-table-column>
+                <el-table-column label="绛剧讲鐘舵��" min-width="100px">
+                    <template slot-scope="{row}">
+                        <span v-if="row.signStatus === 0">寰呯绔�</span>
+                        <span v-else-if="!row.signStatus">寰呯绔�</span>
+                        <span v-else-if="row.signStatus === 1">宸茬绔�</span>
+                    </template>
+                </el-table-column>
+
                 <el-table-column
                     v-if="containPermissions(['business:solutions:update', 'business:solutions:delete'])"
                     label="鎿嶄綔"
-                    min-width="150"
+                    min-width="230"
                     fixed="right"
                 >
                     <template slot-scope="{row}">
                         <el-button type="text" @click="$refs.OperaSolutionsDescWindow.open('瀛愭柟妗堣鎯�', { id: row.id })" icon="el-icon-edit" v-permissions="['business:solutions:update']">鏌ョ湅璇︽儏</el-button>
                         <template v-if="userInfo.type !== 1">
                             <el-button type="text" @click="$refs.operaSolutionsWindow.open('缂栬緫瀛愭柟妗�', { id: row.id })" icon="el-icon-edit" v-permissions="['business:solutions:update']">淇敼</el-button>
+                        </template>
+                        <template v-if="userInfo.type === 1 && (!row.signStatus || row.signStatus === 0)">
+                            <el-button type="text" icon="el-icon-tickets" @click="sign(row.companySolutionId)">绛剧讲</el-button>
+                        </template>
+                        <template v-if="userInfo.type === 1 && row.signStatus === 1">
+                            <el-button type="text" icon="el-icon-tickets" @click="seeFleSignUrl(row.fileSignUrl)">鏌ョ湅鏂规纭涔�</el-button>
                         </template>
                     </template>
                 </el-table-column>
@@ -99,6 +123,7 @@
   import OperaSolutionsWindow from '@/components/business/OperaSolutionsWindow'
   import OperaSolutionsDescWindow from '@/components/business/OperaSolutionsDescWindow'
   import { updateStatus } from '@/api/business/solutions'
+  import { getSignLink } from '@/api/business/company'
   import { mapState } from 'vuex'
   export default {
     name: 'Solutions',
@@ -110,7 +135,8 @@
         searchForm: {
           name: '',
           status: '',
-          type: ''
+          type: '',
+          signStatus: ''
         }
       }
     },
@@ -132,6 +158,15 @@
       this.search()
     },
     methods: {
+      seeFleSignUrl(url) {
+        window.open(url)
+      },
+      sign(id) {
+        getSignLink(id)
+          .then(res => {
+            window.open(res)
+          })
+      },
       // 淇敼鐘舵��
       changeStatus (status, row) {
         updateStatus({ id: row.id, status })
diff --git a/company/src/views/business/userManagement.vue b/company/src/views/business/userManagement.vue
new file mode 100644
index 0000000..a33803b
--- /dev/null
+++ b/company/src/views/business/userManagement.vue
@@ -0,0 +1,141 @@
+<template>
+    <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="realname">
+                <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="companyName">
+                <el-input v-model="searchForm.companyName" 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>
+            <el-table
+                v-loading="isWorking.search"
+                :data="tableData.list"
+                :default-sort = "{prop: 'createTime', order: 'descending'}"
+                stripe
+                @sort-change="handleSortChange"
+            >
+                <el-table-column label="搴忓彿" width="80px">
+                    <template slot-scope="scope">
+                        <span>{{scope.$index + 1}}</span>
+                    </template>
+                </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="companyDepartmentPathName" label="褰掑睘鍏徃" min-width="100px"></el-table-column>
+                <el-table-column label="鎺堟潈浼佷笟" min-width="100px">
+                    <template slot-scope="{row}">
+                        <span>{{row.authNum}}瀹�</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="roles" label="瑙掕壊" min-width="160px" class-name="table-column-strings">
+                    <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 label="鍚敤鐘舵��" min-width="100px">
+                    <template slot-scope="{row}">
+                        <el-switch
+                            v-if="!row.fixed"
+                            @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
+                    label="鎿嶄綔"
+                    width="100"
+                    fixed="right"
+                >
+                    <template slot-scope="{row}">
+                        <el-button type="text" @click="$refs.authorizedEnterprise.open('鎺堟潈浼佷笟璁板綍', row.id)">鎺堟潈浼佷笟</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <pagination
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
+            ></pagination>
+        </template>
+        <authorizedEnterprise ref="authorizedEnterprise" />
+    </TableLayout>
+</template>
+
+<script>
+  import Pagination from '@/components/common/Pagination'
+  import TableLayout from '@/layouts/TableLayout'
+  import BaseTable from '@/components/base/BaseTable'
+  import { updUserStatus } from '@/api/system/user'
+  import authorizedEnterprise from '@/components/business/authorizedEnterprise'
+  export default {
+    name: 'userManagement',
+    extends: BaseTable,
+    components: { TableLayout, Pagination, authorizedEnterprise },
+    data () {
+      return {
+        // 鎼滅储
+        searchForm: {
+          username: '',
+          realname: '',
+          mobile: '',
+          companyName: ''
+        }
+      }
+    },
+    created () {
+      this.config({
+        module: '鐢ㄦ埛',
+        api: '/system/user',
+        'field.main': 'realname',
+        sorts: [{
+          property: 'CREATE_TIME',
+          direction: 'DESC'
+        }]
+      })
+      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>
+
+<style scoped lang="scss">
+    @import "@/assets/style/variables.scss";
+    // 鍒楄〃澶村儚澶勭悊
+    .table-column-avatar {
+        img {
+            width: 48px;
+        }
+    }
+</style>

--
Gitblit v1.9.3