From b4d6e0923d825f3a6cbb12c29b5a522d56362ff8 Mon Sep 17 00:00:00 2001
From: odc.xiaohui <xiaohui@Q1>
Date: 星期六, 18 三月 2023 13:04:17 +0800
Subject: [PATCH] 用户管理导入导出

---
 src/views/systemSetting/baseSetting/user/components/header/index.vue |   57 ++++++
 src/api/system/user.js                                               |   15 +
 src/views/systemSetting/platform/externalLinks.vue                   |  396 +++++++++++++++++++++++++++++++++++++++++++
 src/views/layout/components/Header/index.vue                         |   12 +
 src/router/index.js                                                  |    6 
 src/api/system/portal/externalLinks.js                               |   25 ++
 6 files changed, 502 insertions(+), 9 deletions(-)

diff --git a/src/api/system/portal/externalLinks.js b/src/api/system/portal/externalLinks.js
new file mode 100644
index 0000000..33723f0
--- /dev/null
+++ b/src/api/system/portal/externalLinks.js
@@ -0,0 +1,25 @@
+import http from "@/http";
+
+export function addexternalLinks(params) {
+    return http.post('/sccg/system/portal/externalLink/add', params);
+}
+
+export function deletexternalLinks(params) {
+    return http.delete('/sccg/system/portal/externalLink/delete', params);
+}
+
+export function exportTeamInfo(params) {
+    return http.downloadFile('/sccg/team_construction/export', params);
+}
+
+export function importTeamInfo(data) {
+    return http.uploadFile('/sccg/team_construction/import', data);
+}
+
+export function updateexternalLinks(params) {
+    return http.put('/sccg/system/portal/externalLink/update', params);
+}
+
+export function searchexternalLinks(params) {
+    return http.get('/sccg/system/portal/externalLink/search', params);
+}
diff --git a/src/api/system/user.js b/src/api/system/user.js
new file mode 100644
index 0000000..475cb9b
--- /dev/null
+++ b/src/api/system/user.js
@@ -0,0 +1,15 @@
+import http from "@/http";
+import {exportTeamInfo, importTeamInfo} from "@/api/system/portal/teamConstruction";
+
+export default {
+    getDepartmentList: () => {
+        return http.get('/sccg/sccg_region/getTree');
+    },
+    //瀵煎嚭
+}
+export function exportUser(params) {
+    return http.downloadFile('/sccg/admin/export', params);
+}
+export function importUser(params) {
+    return http.uploadFile('/sccg/admin/import', params);
+}
diff --git a/src/router/index.js b/src/router/index.js
index 7d0ab1a..2d7fc01 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -64,8 +64,8 @@
         component: () => import('@/views/systemSetting/platform/cockpitManage')
       },
           {
-              path: 'externalLinks',
-              name: '澶栭儴閾炬帴',
+              path: 'externalLinks',   //澶栭儴閾炬帴
+              name: 'externalLinks',
               component: () => import('@/views/systemSetting/platform/externalLinks')
           }
       ]
@@ -372,7 +372,7 @@
   },
       {
           path: 'runReport', // 杩愯鎶ュ憡
-          name: '杩愯鎶ュ憡',
+          name: 'runReport',
           component: () => import('@/views/intelligentPatrol/runReport'),
       },
   // 杩濇硶缁熻
diff --git a/src/views/layout/components/Header/index.vue b/src/views/layout/components/Header/index.vue
index 1068262..64d9514 100644
--- a/src/views/layout/components/Header/index.vue
+++ b/src/views/layout/components/Header/index.vue
@@ -159,6 +159,12 @@
           url: '',
           id: '4f',
         },
+        {
+          label: '澶栭儴閾炬帴',
+          checked: false,
+          url: '',
+          id: '5f',
+        },
       ],
       flag: {
         user: false,
@@ -314,6 +320,12 @@
       if (data.id === '3f') {
         this.$router.push({ path: "/home/operate/casepool/pool" })
       }
+      if (data.id === '4f') {
+        window.open('http://116.62.234.187:8120/#/Customer', '_blank');
+      }
+      if (data.id === '5f') {
+        this.$router.push({ path: "/home/system/platform/externalLinks" })
+      }
     }
   }
 };
diff --git a/src/views/systemSetting/baseSetting/user/components/header/index.vue b/src/views/systemSetting/baseSetting/user/components/header/index.vue
index ccde5e8..4a6129a 100644
--- a/src/views/systemSetting/baseSetting/user/components/header/index.vue
+++ b/src/views/systemSetting/baseSetting/user/components/header/index.vue
@@ -6,6 +6,18 @@
                 <el-input placeholder="璇疯緭鍏ュ唴瀹�" v-model="search"></el-input>
                 <div class="findBtn">
                     <el-button class="find-Btn" type="primary" @click="setSearch">鏌ヨ</el-button>
+                  <el-upload
+                      class="department-margin-left10"
+                      action=""
+                      ref="uploadFile"
+                      :http-request="importTable"
+                      :show-file-list="false"
+                      :auto-upload="true"
+                      :limit="1"
+                  >
+                    <el-button type="primary">瀵煎叆</el-button>
+                  </el-upload>
+                  <el-button class="department-margin-left10" type="primary" @click="exportTable()">瀵煎嚭</el-button>
                 </div>
             </div>
             <div class="addUser">
@@ -21,6 +33,9 @@
 </template>
 <script>
 import createUser from "../createUser";
+import {exportTeamInfoDepartment, importTeamInfoDepartment} from "@/api/system/department";
+import {downloadFile} from "@/utils/helper";
+import {exportUser, importUser} from "@/api/system/user";
 export default {
     components: {
         createUser,
@@ -32,7 +47,44 @@
         }
     },
     methods: {
-        setSearch() {
+      // 瀵煎嚭
+      exportTable() {
+        // const status = this.searchStatus === 2 ? null : this.searchStatus;
+        exportUser({
+          // current: this.currentPage,
+          // size: this.pageSize,
+          // departName: this.searchDepartment,
+          // status,
+        })
+            .then((res) => {
+              console.log(res)
+              downloadFile(res);
+              this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" });
+            })
+            .catch((err) => {
+              this.$message({ type: "error", message: err });
+            });
+      },
+
+      // 瀵煎叆
+      importTable(file) {
+        const formData = new FormData();
+        formData.append("file", file.file);
+        console.log(formData)
+        console.log(file)
+        importUser(formData)
+            .then(() => {
+              this.$message({ type: "success", message: "鎿嶄綔鎴愬姛" });
+              this.setSearch();
+              this.$refs.uploadFile.clearFiles();
+            })
+            .catch((err) => {
+              this.$message({ type: "error", message: err });
+              this.$refs.uploadFile.clearFiles();
+            });
+      },
+
+      setSearch() {
             this.$emit('getSearch', { text: this.search })
         },
         sendDialog(flag) {
@@ -53,6 +105,9 @@
 }
 </script>
 <style lang="scss" scoped>
+.department-margin-left10{
+  margin-left: 10px;
+}
 header {
     // background-color: #09152f;
     //border: 1px solid #fff;
diff --git a/src/views/systemSetting/platform/externalLinks.vue b/src/views/systemSetting/platform/externalLinks.vue
index 3a25c55..4f6e6d0 100644
--- a/src/views/systemSetting/platform/externalLinks.vue
+++ b/src/views/systemSetting/platform/externalLinks.vue
@@ -1,13 +1,399 @@
 <template>
-<div>澶栭儴閾炬帴</div>
+  <div class="mainContent">
+    <!-- <div class="aside">
+      <department-aside />
+    </div> -->
+    <div class="grid-content">
+      <header>
+<!--        <div class="headerContent">-->
+<!--          <div class="search">-->
+<!--            <span>绛涢�夋潯浠�:</span>-->
+<!--            <el-input v-model="context" placeholder="璇疯緭鍏ュ唴瀹�"></el-input>-->
+<!--            <div class="findBtn">-->
+<!--              <el-button type="primary" @click="getList()">鏌ヨ</el-button>-->
+<!--            </div>-->
+<!--          </div>-->
+<!--        </div>-->
+        <div class="main-title">
+          <el-button
+              class="el-icon-plus button-addition"
+              type="primary"
+              @click="handleAdd()"
+          >娣诲姞</el-button
+          >
+        </div>
+      </header>
+      <!-- 鏁版嵁灞曠ず -->
+      <el-table
+          border
+          stripe
+          ref="multipleTable"
+          :header-cell-style="{
+          background: '#F5F5F5',
+          'font-weight': '650',
+          'line-height': '45px',
+        }"
+          :data="tableData"
+          style="width: 100%"
+          :row-class-name="tableRowClassName"
+          @selection-change="tableChange"
+      >
+        <el-table-column type="selection" min-width="5"> </el-table-column>
+
+        <el-table-column prop="name" label="澶栭儴閾炬帴鍚嶇О" min-width="10">
+        </el-table-column>
+        <el-table-column prop="url" label="url鍦板潃" min-width="8">
+        </el-table-column>
+        <el-table-column prop="operation" label="鎿嶄綔" min-width="5">
+          <template slot-scope="scope">
+            <div class="operation">
+              <span @click="handleEdit(scope.row)">缂栬緫</span>
+              <span class="line">|</span>
+              <span @click="handleDelete(scope.row)">鍒犻櫎</span>
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <el-dialog
+          :visible.sync="dialogUpdate"
+          width="45%"
+          v-if="dialogUpdate"
+          :title="linkTitle"
+          :before-close="handleClose"
+      >
+        <div>
+          <el-form :model="linkForm" :rules="linkRule" ref="linkForm" label-width="100px" class="demo-ruleForm">
+            <el-form-item label="閾炬帴鍚嶇О" prop="name">
+              <el-input v-model="linkForm.name"></el-input>
+            </el-form-item>
+            <el-form-item label="閾炬帴鍦板潃" prop="url">
+              <el-input v-model="linkForm.url"></el-input>
+            </el-form-item>
+            <el-form-item>
+              <el-button type="primary" @click="submitForm('linkForm')">鎻愪氦</el-button>
+              <el-button @click="resetForm('linkForm')">閲嶇疆</el-button>
+            </el-form-item>
+          </el-form>
+        </div>
+<!--        <MyView :info="handheldGrid" @closeDialog="handleCallBack"></MyView>-->
+      </el-dialog>
+
+      <!-- tools -->
+<!--      <div class="tools">-->
+<!--        <div class="funs"></div>-->
+<!--        <div class="pagination">-->
+<!--          <el-pagination-->
+<!--              background-->
+<!--              :current-page="currentPage"-->
+<!--              layout="prev, pager, next"-->
+<!--              :total="totalNum"-->
+<!--              :page-size="pageSize"-->
+<!--              @current-change="changeCurrentPage"-->
+<!--              @prev-click="handlePrev"-->
+<!--              @next-click="handleNext"-->
+<!--          >-->
+<!--          </el-pagination>-->
+<!--        </div>-->
+<!--      </div>-->
+    </div>
+  </div>
 </template>
-
 <script>
+import helper from "@/utils/mydate";
+import { createNamespacedHelpers } from "vuex";
+import departmentAside from "@/views/operate/fivepack/threepack/components/aside";
+import {
+  addexternalLinks,
+  deletexternalLinks,
+  searchexternalLinks,
+  updateexternalLinks
+} from "@/api/system/portal/externalLinks";
+// import MyView from "../components/dialogForm.vue";
+const { mapActions } = createNamespacedHelpers("orgGrid");
 export default {
-  name: "externalLinks"
-}
+  components: { departmentAside },
+  data() {
+    return {
+      linkTitle:'娣诲姞澶栭儴閾炬帴',
+      linkForm:{},
+      tableData: [],
+      context: "",
+      dialogUpdate: false,
+      dialogView: false,
+      updateFlag: false,
+      userInfo: "",
+      totalNum: 0,
+      pageSize: 10,
+      currentPage: 1,
+      renderFlag: false,
+      flag: {
+        role: false,
+        password: false,
+        depart: false,
+      },
+      all: false,
+      unsame: false,
+      myIdx: 0,
+      preMyIdx: 0,
+      tempList: [],
+      handheldGrid: {},
+        linkRule: {
+          name: [
+            { required: true, message: '璇疯緭鍏ュ悕绉�', trigger: 'blur' },
+
+          ],
+          url: [
+            { required: true, message: '璇疯緭鍏ラ摼鎺�', trigger: 'blur' },
+
+          ],
+        },
+
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    ...mapActions(["getOrgGridList", "deleteOrgGrid"]),
+    submitForm(formName) {
+      this.$refs[formName].validate(async (valid) => {
+        if (valid) {
+          if (this.linkTitle == '娣诲姞澶栭儴閾炬帴') {
+            await addexternalLinks(this.linkForm).then(res => {
+              this.dialogUpdate = false
+              this.getList()
+              console.log(res)
+            })
+          } else {
+            await updateexternalLinks(this.linkForm).then(res => {
+              this.dialogUpdate = false
+              this.getList()
+              console.log(res)
+            })
+          }
+
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    resetForm(formName) {
+      this.linkForm = {
+        name:'',
+        url:''
+      }
+      this.$refs[formName].resetFields();
+    },
+    tableChange(list) {
+      this.tempList = [];
+      list.forEach((item) => {
+        this.tempList.push(item.id);
+      });
+      this.all = list.length === this.tableData.length;
+    },
+    changeTime({ createTime }) {
+      return helper(createTime);
+    },
+    disSame(list) {
+      list.forEach((row) => {
+        this.$refs.multipleTable.toggleRowSelection(row);
+      });
+    },
+    handleCallBack({ flag }) {
+      this.dialogUpdate = false;
+      this.getList();
+    },
+    handleClose(done) {
+      if (this.updateFlag) {
+        this.$confirm("纭鍏抽棴锛�")
+            .then((_) => {
+              this.dialogUpdate = false;
+              this.updateFlag = false;
+              done();
+            })
+            .catch((_) => {});
+      } else {
+        done();
+      }
+    },
+    // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠�
+    changeCurrentPage(page) {
+      this.currentPage = page;
+      this.getList();
+    },
+    // 涓婁竴椤电偣鍑讳簨浠�
+    handlePrev(page) {
+      this.currentPage = page;
+      this.getList();
+    },
+    // 涓嬩竴椤电偣鍑讳簨浠�
+    handleNext(page) {
+      this.currentPage = page;
+      this.getList();
+    },
+    // 鑾峰彇鍒楄〃
+    getList() {
+      const that = this;
+      const { currentPage, pageSize, context } = this;
+      searchexternalLinks({
+
+      }).then((res) => {
+        console.log(res)
+        // that.totalNum = res.total;
+        that.tableData =res;
+        this.renderFlag = true;
+      });
+    },
+    handleAdd() {
+      this.linkForm={
+        name:'',
+        url:''
+      }
+     this.linkTitle = '娣诲姞澶栭儴閾炬帴'
+      this.dialogUpdate = true;
+    },
+    handleEdit(row) {
+      this.linkTitle = '淇敼澶栭儴閾炬帴'
+      this.linkForm = row;
+      this.dialogUpdate = true;
+    },
+    handleDelete(row) {
+      this.$confirm("纭鍒犻櫎锛�").then((_) => {
+        deletexternalLinks({id:row.id}).then((res) => {
+          this.$message({
+            type: "success",
+            message: "鍒犻櫎鎴愬姛锛�",
+          });
+          this.getList();
+        });
+      });
+    },
+    // 璁剧疆琛ㄦ牸鏂戦┈绾�
+    tableRowClassName({ row, rowIndex }) {
+      if ((rowIndex + 1) % 2 === 0) {
+        return "warning-row";
+      } else {
+        return "success-row";
+      }
+    },
+  },
+};
 </script>
+<style lang="scss" scoped>
+.mainContent {
+  display: flex;
+  justify-content: flex-start;
+  flex-wrap: nowrap;
 
-<style scoped>
+  .grid-content {
+    margin-left: 10px;
+    flex: 1;
+    .tools {
+      display: flex;
+      justify-content: space-between;
+      flex-wrap: nowrap;
 
+      .pagination {
+        margin-top: 55px;
+      }
+
+      .el-pagination {
+        // &::v-deep li,
+        // &::v-deep .btn-prev,
+        // &::v-deep .btn-next {
+        //   background-color: #071f39;
+        //   color: #4b9bb7;
+        // }
+
+        // &::v-deep .active {
+        //   background-color: #409eff;
+        //   color: #fff;
+        // }
+      }
+    }
+  }
+}
+
+header {
+  // background-color: white;
+  display: flex;
+  .headerContent {
+    padding: 10px 0;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .search {
+      display: flex;
+      justify-content: flex-start;
+      line-height: 2;
+
+      span {
+        flex: 1;
+      }
+
+      .el-input {
+        flex: 2;
+        color: #1d3f57;
+      }
+      .el-select {
+        flex: 1;
+      }
+      .el-date-editor {
+        flex: 1;
+      }
+    }
+
+    .findBtn {
+      line-height: 100px;
+      margin-left: 15px;
+      display: flex;
+      align-items: center;
+      margin-top: -2px;
+
+      .el-button {
+        padding: 12px 25px;
+        //border-radius: 20px;
+      }
+    }
+    ::v-deep .el-form {
+      display: flex;
+      flex-wrap: wrap;
+      justify-content: space-between;
+
+      .el-form-item {
+        width: 30%;
+      }
+
+      .el-form-item__label {
+        color: #4b9bb7;
+      }
+    }
+  }
+}
+
+.operation {
+  display: flex;
+  color: var(--operation-color);
+  .line {
+    padding: 0 5px;
+  }
+
+  span:hover {
+    cursor: pointer;
+  }
+}
+
+.main-title {
+  line-height: 20px;
+  padding: 10px 20px;
+  margin-left: auto;
+  //border-radius: 20px;
+  .el-button {
+    padding: 12px 25px;
+    //border-radius: 20px;
+  }
+}
 </style>

--
Gitblit v1.8.0