From f40baa32448083d55bae9b5a51724989ad8413d4 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期五, 08 十一月 2024 10:10:21 +0800
Subject: [PATCH] 优化需求

---
 company/src/components/business/OperaCompanyUserApplyWindow.vue |  263 +++++++++++++++++++++++++++++++++++++
 company/src/api/business/companyUserApply.js                    |   18 ++
 company/src/api/business/company.js                             |    5 
 company/src/api/system/user.js                                  |    5 
 company/src/views/business/companyUserApply.vue                 |   93 +++++++++++++
 5 files changed, 384 insertions(+), 0 deletions(-)

diff --git a/company/src/api/business/company.js b/company/src/api/business/company.js
index dba1e13..8547df0 100644
--- a/company/src/api/business/company.js
+++ b/company/src/api/business/company.js
@@ -55,3 +55,8 @@
 export function updateSolutions (data) {
     return request.post('/business/company/updateSolutions', data)
 }
+
+// 鏌ヨ褰撳墠浼佷笟杩涜闆嗗洟鐢宠鍙互鐢宠鐨勪紒涓�
+export function findAllCompanyList (data) {
+    return request.post('/business/company/findAllCompanyList', data)
+}
diff --git a/company/src/api/business/companyUserApply.js b/company/src/api/business/companyUserApply.js
new file mode 100644
index 0000000..0da4669
--- /dev/null
+++ b/company/src/api/business/companyUserApply.js
@@ -0,0 +1,18 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/companyUserApply/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/companyUserApply/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/companyUserApply/updateById', data)
+}
diff --git a/company/src/api/system/user.js b/company/src/api/system/user.js
index 6cbfe6b..e47475a 100644
--- a/company/src/api/system/user.js
+++ b/company/src/api/system/user.js
@@ -52,3 +52,8 @@
 export function updateHead (data) {
   return request.post('/system/user/updateHead', data)
 }
+
+// 鏌ヨ褰撳墠浼佷笟涓嬫墍鏈夌敤鎴�
+export function findUserList (data) {
+  return request.post('/system/user/findUserList', data)
+}
diff --git a/company/src/components/business/OperaCompanyUserApplyWindow.vue b/company/src/components/business/OperaCompanyUserApplyWindow.vue
new file mode 100644
index 0000000..de7970a
--- /dev/null
+++ b/company/src/components/business/OperaCompanyUserApplyWindow.vue
@@ -0,0 +1,263 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="50%"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-form :model="form" ref="form" :rules="rules">
+            <el-form-item label="鎺堟潈璐﹀彿" prop="userId">
+                <el-select v-model="form.userId" filterable placeholder="璇烽�夋嫨">
+                    <el-option
+                        v-for="item in account"
+                        :key="item.id"
+                        :label="item.username"
+                        :value="item.id">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="鐢宠鎺堟潈浼佷笟" prop="companyIds">
+                <el-select
+                    v-model="form.companyIds"
+                    multiple
+                    filterable
+                    allow-create
+                    default-first-option
+                    placeholder="璇烽�夋嫨">
+                    <el-option
+                        v-for="item in company"
+                        :key="item.id"
+                        :label="item.name"
+                        :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"
+                    show-word-limit />
+            </el-form-item>
+            <el-form-item label="鎺堟潈涔�" prop="multifileList">
+                <UploadFile @remove="deleFile" :uploadData="{ folder: 'apply', fileType:'.pdf' }" :fileList="fileList" @uploadSuccess="editFanganFile" />
+            </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 { findUserList } from '@/api/system/user'
+  import { findAllCompanyList } from '@/api/business/company'
+  export default {
+    name: 'OperaCompanyUserApplyWindow',
+    extends: BaseOpera,
+    components: { GlobalWindow, UploadFile },
+    data () {
+      return {
+        // 琛ㄥ崟鏁版嵁
+        form: {
+          id: null,
+          userId: '',
+          content: '',
+          companyIds: [],
+          multifileList: null
+        },
+        // 楠岃瘉瑙勫垯
+        rules: {
+          multifileList: [
+            { required: true, message: '璇蜂笂浼犳巿鏉冧功' }
+          ],
+          companyIds: [
+            { required: true, message: '璇烽�夋嫨鎺堟潈浼佷笟' }
+          ],
+          userId: [
+            { required: true, message: '璇烽�夋嫨鎺堟潈璐﹀彿' }
+          ]
+        },
+        account: [],
+        fileList: [],
+        company: []
+      }
+    },
+    created () {
+      this.config({
+        api: '/business/companyUserApply',
+        'field.id': 'id'
+      })
+    },
+    methods: {
+      __confirmCreate () {
+        this.$refs.form.validate((valid) => {
+          if (!valid) {
+            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 => {
+            this.company.forEach(row => {
+              if (item === row.id) {
+                obj.companyNames.push(row.name)
+              }
+            })
+          })
+          obj.companyNames = obj.companyNames.join(',')
+          this.isWorking = true
+          this.api.create(obj)
+            .then(() => {
+              this.visible = false
+              this.$tip.apiSuccess('鏂板缓鎴愬姛')
+              this.$emit('success')
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking = false
+            })
+        })
+      },
+      // 纭淇敼
+      __confirmEdit () {
+        this.$refs.form.validate((valid) => {
+          if (!valid) {
+            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 => {
+            this.company.forEach(row => {
+              if (item === row.id) {
+                obj.companyNames.push(row.name)
+              }
+            })
+          })
+          obj.companyNames = obj.companyNames.join(',')
+          this.isWorking = true
+          this.api.updateById(obj)
+            .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.getAccount()
+        this.getFindAllCompanyList()
+        // 鏂板缓
+        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]
+          }
+        })
+      },
+      deleFile () {
+        this.form.multifileList = null
+      },
+      editFanganFile (data) {
+        this.form.multifileList = data
+      },
+      getAccount() {
+        findUserList({})
+          .then(res => {
+            console.log(res)
+            this.account = res
+          })
+      },
+      getFindAllCompanyList() {
+        findAllCompanyList({})
+          .then(res => {
+            console.log(res)
+            this.company = res
+          })
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+    .list {
+        width: 100%;
+        padding: 10px 16px;
+        box-sizing: border-box;
+        background: #F4F7FC;
+        border-radius: 2px;
+        border: 1px solid #DFE2E8;
+        margin-top: 10px;
+        .list_label {
+            font-weight: 400;
+            font-size: 13px;
+            color: #333333;
+        }
+        .list_box {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            flex-wrap: wrap;
+            .list_box_row {
+                padding: 0 10px;
+                box-sizing: border-box;
+                background: #FFFFFF;
+                border-radius: 2px;
+                display: flex;
+                align-items: center;
+                margin-right: 10px;
+                &:last-child {
+                    margin: 0 !important;
+                }
+                span {
+                    font-weight: 400;
+                    font-size: 12px;
+                    color: #3F4F69;
+                    margin-right: 12px;
+                }
+                i {
+                    color: #BFC3CB;
+                    cursor: pointer;
+                }
+            }
+        }
+    }
+</style>
diff --git a/company/src/views/business/companyUserApply.vue b/company/src/views/business/companyUserApply.vue
new file mode 100644
index 0000000..a1443b8
--- /dev/null
+++ b/company/src/views/business/companyUserApply.vue
@@ -0,0 +1,93 @@
+<template>
+    <TableLayout :permissions="['business:companyuserapply:query']">
+        <!-- 鎼滅储琛ㄥ崟 -->
+        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+            <el-form-item label="鐢宠鐘舵��" prop="status">
+                <el-select v-model="searchForm.status" @change="search" placeholder="璇烽�夋嫨">
+                    <el-option label="寰呭鏍�" :value="0"></el-option>
+                    <el-option label="瀹℃牳閫氳繃" :value="1"></el-option>
+                    <el-option label="瀹℃牳涓嶉�氳繃" :value="2"></el-option>
+                </el-select>
+            </el-form-item>
+            <section>
+                <el-button type="primary" @click="search">鎼滅储</el-button>
+                <el-button @click="reset">閲嶇疆</el-button>
+            </section>
+        </el-form>
+        <!-- 琛ㄦ牸鍜屽垎椤� -->
+        <template v-slot:table-wrap>
+            <ul class="toolbar" v-permissions="['business:companyuserapply:create']">
+                <li><el-button type="primary" @click="$refs.operaCompanyUserApplyWindow.open('鏂板缓鐢宠')" icon="el-icon-plus" v-permissions="['business:companyuserapply: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="realName" label="鐢宠浜�"></el-table-column>
+                <el-table-column prop="userName" label="鎺堟潈璐﹀彿"></el-table-column>
+                <el-table-column prop="content" label="鐢宠璇存槑"></el-table-column>
+                <el-table-column prop="createDate" label="鐢宠鏃堕棿"></el-table-column>
+                <el-table-column label="鐢宠鐘舵��">
+                    <template slot-scope="{row}">
+                        <span v-if="row.status === 0">寰呭鏍�</span>
+                        <span v-if="row.status === 1">瀹℃牳閫氳繃</span>
+                        <span v-if="row.status === 2">瀹℃牳涓嶉�氳繃</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                    label="鎿嶄綔"
+                    min-width="120"
+                    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>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <pagination
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
+            >
+            </pagination>
+        </template>
+        <!-- 鏂板缓/淇敼 -->
+        <OperaCompanyUserApplyWindow ref="operaCompanyUserApplyWindow" @success="handlePageChange"/>
+    </TableLayout>
+</template>
+
+<script>
+  import BaseTable from '@/components/base/BaseTable'
+  import TableLayout from '@/layouts/TableLayout'
+  import Pagination from '@/components/common/Pagination'
+  import OperaCompanyUserApplyWindow from '@/components/business/OperaCompanyUserApplyWindow'
+  export default {
+    name: 'CompanyUserApply',
+    extends: BaseTable,
+    components: { TableLayout, Pagination, OperaCompanyUserApplyWindow },
+    data () {
+      return {
+        // 鎼滅储
+        searchForm: {
+          status: ''
+        }
+      }
+    },
+    created () {
+      this.config({
+        module: '闆嗗洟鐢宠璁板綍琛�',
+        api: '/business/companyUserApply',
+        'field.id': 'id',
+        'field.main': 'id'
+      })
+      this.search()
+    }
+  }
+</script>

--
Gitblit v1.9.3