From da1f13fac6dda0b4168d70bc9f7d68b03b1cc117 Mon Sep 17 00:00:00 2001
From: Tcsm <1377977403@qq.com>
Date: 星期二, 16 五月 2023 03:40:28 +0800
Subject: [PATCH] 1.修改了网站名以及在首页加上了备案号 2.各模块删除时不显示数据序号 3.各模块删除单条数据时不会再同时打开详情页 4.各模块新增重复数据可被检测并且提示不要输入重复数据 5.家根网页面更换了第三代的大图 6.收藏与荣誉模块显示和新增统一为“持有者”

---
 ruoyi-ui/src/api/collection/index.js             |    9 
 ruoyi-ui/src/views/collection/collectionInfo.vue |   10 
 ruoyi-ui/src/views/contacts/index.vue            |    4 
 ruoyi-ui/src/views/doctor/doctorInfo.vue         |    2 
 ruoyi-ui/src/views/contacts/contactsInfo.vue     |   92 ++++
 ruoyi-ui/src/views/collection/index.vue          |   97 ++++-
 ruoyi-ui/src/views/doctor/index.vue              |    6 
 ruoyi-ui/src/views/login.vue                     |    3 
 .env.staging                                     |    4 
 .env.development                                 |    4 
 ruoyi-ui/.env.production                         |    4 
 ruoyi-ui/src/views/genealogy/index.vue           |  705 +++++++++++++++++++++++++++++++++++++++++++
 ruoyi-ui/.env.development                        |    2 
 ruoyi-ui/src/assets/images/Group 445.png         |    0 
 package.json                                     |    2 
 .env.production                                  |    4 
 ruoyi-ui/src/views/homeRoot/index.vue            |    4 
 ruoyi-ui/src/router/index.js                     |    1 
 18 files changed, 885 insertions(+), 68 deletions(-)

diff --git a/.env.development b/.env.development
index d09a737..3fa36aa 100644
--- a/.env.development
+++ b/.env.development
@@ -1,10 +1,10 @@
 # 椤甸潰鏍囬
-VUE_APP_TITLE = 寮犳皬APP绠$悊绯荤粺
+VUE_APP_TITLE = 寮犳皬APP
 
 # 寮�鍙戠幆澧冮厤缃�
 ENV = 'development'
 
-# 寮犳皬APP绠$悊绯荤粺/寮�鍙戠幆澧�
+# 鏈兘閮�/寮�鍙戠幆澧�
 VUE_APP_BASE_API = '/dev-api'
 
 
diff --git a/.env.production b/.env.production
index 0ecf0f5..d7b982a 100644
--- a/.env.production
+++ b/.env.production
@@ -1,8 +1,8 @@
 # 椤甸潰鏍囬
-VUE_APP_TITLE = 寮犳皬APP绠$悊绯荤粺
+VUE_APP_TITLE = 鏈兘閮�
 
 # 鐢熶骇鐜閰嶇疆
 ENV = 'production'
 
-# 寮犳皬APP绠$悊绯荤粺/鐢熶骇鐜
+# 鏈兘閮�/鐢熶骇鐜
 VUE_APP_BASE_API = '/prod-api'
diff --git a/.env.staging b/.env.staging
index 2cdbf5d..075aa8f 100644
--- a/.env.staging
+++ b/.env.staging
@@ -1,10 +1,10 @@
 # 椤甸潰鏍囬
-VUE_APP_TITLE = 寮犳皬APP绠$悊绯荤粺
+VUE_APP_TITLE = 鏈兘閮�
 
 NODE_ENV = production
 
 # 娴嬭瘯鐜閰嶇疆
 ENV = 'staging'
 
-# 寮犳皬APP绠$悊绯荤粺/娴嬭瘯鐜
+# 鏈兘閮�/娴嬭瘯鐜
 VUE_APP_BASE_API = '/stage-api'
diff --git a/package.json b/package.json
index 5ed6fe3..cad6802 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "ruoyi",
   "version": "3.8.5",
-  "description": "寮犳皬APP绠$悊绯荤粺",
+  "description": "鏈兘閮�",
   "author": "鑻ヤ緷",
   "license": "MIT",
   "scripts": {
diff --git a/ruoyi-ui/.env.development b/ruoyi-ui/.env.development
index 8de5684..e6e246b 100644
--- a/ruoyi-ui/.env.development
+++ b/ruoyi-ui/.env.development
@@ -1,5 +1,5 @@
 # 椤甸潰鏍囬
-VUE_APP_TITLE =  寮犳皬APP绠$悊绯荤粺
+VUE_APP_TITLE =  鏈兘閮�
 
 # 寮�鍙戠幆澧冮厤缃�
 ENV = 'development'
diff --git a/ruoyi-ui/.env.production b/ruoyi-ui/.env.production
index 26d289a..7e3b422 100644
--- a/ruoyi-ui/.env.production
+++ b/ruoyi-ui/.env.production
@@ -1,5 +1,5 @@
 # 椤甸潰鏍囬
-VUE_APP_TITLE = 寮犳皬APP绠$悊绯荤粺
+VUE_APP_TITLE = 鏈兘閮�
 
 # 鐢熶骇鐜閰嶇疆
 ENV = 'production'
@@ -7,4 +7,4 @@
 # 鑻ヤ緷绠$悊绯荤粺/鐢熶骇鐜
 VUE_APP_BASE_API = '/prod-api'
 VUE_APP_BASE_TRUE_API = 'http://47.93.189.255:8080/'
-VUE_APP_BASE_OTHER_API = 'http://47.93.189.255:8083/'
\ No newline at end of file
+VUE_APP_BASE_OTHER_API = 'http://47.93.189.255:8083/'
diff --git a/ruoyi-ui/src/api/collection/index.js b/ruoyi-ui/src/api/collection/index.js
index 2a53a4e..5784693 100644
--- a/ruoyi-ui/src/api/collection/index.js
+++ b/ruoyi-ui/src/api/collection/index.js
@@ -62,3 +62,12 @@
     responseType: 'blob'
   })
 }
+//瀵煎叆妯℃澘
+export function downloadModel(data) {
+  return request({
+    url: '/zfCollection/model',
+    method: 'get',
+    params: data,
+    responseType: 'blob'
+  })
+}
diff --git a/ruoyi-ui/src/assets/images/Group 445.png b/ruoyi-ui/src/assets/images/Group 445.png
index db7268f..a63f78d 100644
--- a/ruoyi-ui/src/assets/images/Group 445.png
+++ b/ruoyi-ui/src/assets/images/Group 445.png
Binary files differ
diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js
index d70d2f4..c847145 100644
--- a/ruoyi-ui/src/router/index.js
+++ b/ruoyi-ui/src/router/index.js
@@ -230,6 +230,7 @@
       }
     ]
   },
+
   //榄呭疇璇︽儏
   {
     path: '/familymodel/pet',
diff --git a/ruoyi-ui/src/views/collection/collectionInfo.vue b/ruoyi-ui/src/views/collection/collectionInfo.vue
index db41a4d..bd2665f 100644
--- a/ruoyi-ui/src/views/collection/collectionInfo.vue
+++ b/ruoyi-ui/src/views/collection/collectionInfo.vue
@@ -29,8 +29,8 @@
         <el-input v-model="formData.source" placeholder="璇疯緭鍏ユ潵婧�" clearable :style="{width: '100%'}" :disabled="dsb">
         </el-input>
       </el-form-item>
-      <el-form-item label="鎷ユ湁鑰�" prop="寮犱笁">
-        <el-input v-model="formData.owner" placeholder="璇疯緭鍏ユ嫢鏈夎��" clearable :style="{width: '100%'}" :disabled="dsb">
+      <el-form-item label="鎸佹湁鑰�" prop="owner">
+        <el-input v-model="formData.owner" placeholder="璇疯緭鍏ユ寔鏈夎��" clearable :style="{width: '100%'}" :disabled="dsb">
         </el-input>
       </el-form-item>
       <el-form-item label="浠峰��" prop="price">
@@ -240,7 +240,7 @@
         }],
         owner: [{
           required: true,
-          message: '璇疯緭鍏ユ嫢鏈夎��',
+          message: '璇疯緭鍏ユ寔鏈夎��',
           trigger: 'blur'
         }],
         price: [{
@@ -353,6 +353,10 @@
     resetForm() {
       this.$refs['elForm'].resetFields()
     },
+    // //杩斿洖涓婁竴椤�
+    // goBack(){
+    //   this.$router.push("/familymodel/collection/index" );
+    // },
     handlePreview(file)
     {
       let formData = {'path':"/"+file.url.replace(process.env.VUE_APP_BASE_TRUE_API,"")};
diff --git a/ruoyi-ui/src/views/collection/index.vue b/ruoyi-ui/src/views/collection/index.vue
index 13760c7..fe7572f 100644
--- a/ruoyi-ui/src/views/collection/index.vue
+++ b/ruoyi-ui/src/views/collection/index.vue
@@ -74,6 +74,23 @@
         </el-input>
 
       </el-form-item>
+<!--      <el-form-item label="绫诲埆" prop="type">-->
+<!--        <el-select-->
+<!--          v-model="queryParams.type"-->
+<!--          placeholder="鎵�鏈夌被鍒�"-->
+<!--          clearable-->
+<!--          style="width: 240px"-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        >-->
+<!--          <el-option-->
+<!--            v-for="dict in typeOptions"-->
+<!--            :key="dict.value"-->
+<!--            :label="dict.label"-->
+<!--            :value="dict.value"-->
+
+<!--          />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
       <el-cntainer>
         <el-col :span="9" >
           <el-form-item>
@@ -85,10 +102,10 @@
           </el-form-item>
         </el-col>
       </el-cntainer>
-      <el-form-item label="鎷ユ湁鑰�" prop="owner" >
+      <el-form-item label="鎸佹湁鑰�" prop="owner" >
         <el-input
           v-model="queryParams.owner"
-          placeholder="璇疯緭鍏ユ嫢鏈夎��"
+          placeholder="璇疯緭鍏ユ寔鏈夎��"
           clearable
           style="width: 240px"
           @keyup.enter.native="handleQuery">
@@ -157,7 +174,7 @@
             plain
             icon="el-icon-download"
             size="mini"
-            @click="handleExport"
+            @click="handleExportModel"
             v-hasPermi="['family:note:export']"
           >瀵煎叆妯℃澘涓嬭浇</el-button>
         </el-col>
@@ -179,22 +196,25 @@
         <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
       </el-row>
     </div>
-    <el-table v-loading="loading" :data="collectionList" @selection-change="handleSelectionChange" @row-click="handleCheck" :row-class-name="tableRowClassName" style="background: #FFEFF2;  border-radius: 14px 14px 14px 14px;">
+    <el-table v-loading="loading" :data="collectionList" @selection-change="handleSelectionChange" :row-class-name="tableRowClassName" style="background: #FFEFF2;  border-radius: 14px 14px 14px 14px;">
       <el-table-column type="selection" width="25"  align="center" />
       <el-table-column  label="搴忓彿" sortable type="index" :index="(queryParams.pageNum-1)*queryParams.pageSize+1" width="60"/>
       <el-table-column label="鑾峰緱鏃堕棿" prop="happenTime" sortable width="100" align="center">
         <template slot-scope="scope">{{scope.row.happenTime? scope.row.happenTime: '鈥斺�斺�斺��'}}</template>
       </el-table-column>
-      <el-table-column label="绫诲埆" prop="type" sortable :show-overflow-tooltip="true" width="90" align="center">
-        <template slot-scope="scope">{{scope.row.type? scope.row.type: '鈥斺�斺�斺��'}}</template>
-      </el-table-column>
+      <el-form-item label="绫诲埆" prop="type">
+        <el-select v-model="formDat.type" placeholder="璇烽�夋嫨绫诲埆" clearable :style="{width: '100%'}"  >
+          <el-option v-for="(item, index) in typeOptions" :key="index" :label="item.label" :value="item.value"
+          ></el-option>
+        </el-select>
+      </el-form-item>
       <el-table-column label="鍚嶇О" prop="name" sortable :show-overflow-tooltip="true" width="90" align="center" >
         <template slot-scope="scope">{{scope.row.name? scope.row.name: '鈥斺�斺�斺��'}}</template>
       </el-table-column>
       <el-table-column label="鏉ユ簮" prop="source" sortable width="90" align="center" >
         <template slot-scope="scope">{{scope.row.source? scope.row.source: '鈥斺�斺�斺��'}}</template>
       </el-table-column>
-      <el-table-column label="鎷ユ湁鑰�" prop="owner" sortable width="110" align="center">
+      <el-table-column label="鎸佹湁鑰�" prop="owner" sortable width="110" align="center">
         <template slot-scope="scope">{{scope.row.owner? scope.row.owner: '鈥斺�斺�斺��'}}</template>
       </el-table-column>
       <el-table-column label="浠峰��" prop="price" sortable width="90" align="center">
@@ -211,7 +231,7 @@
             alt=""
             style="width: 35px; height: 35px;"
             fit="cover"
-            v-if="scope.row.url !== ','"
+            v-if="scope.row.url !== ',' "
           >
           <img
             class="el-upload-list__item-thumbnail"
@@ -287,8 +307,8 @@
           <el-input v-model="formDat.source" placeholder="璇疯緭鍏ユ潵婧�" clearable :style="{width: '100%'}" >
           </el-input>
         </el-form-item>
-        <el-form-item label="鎷ユ湁鑰�" prop="owner">
-          <el-input v-model="formDat.owner" placeholder="璇疯緭鍏ユ嫢鏈夎��" clearable :style="{width: '100%'}" >
+        <el-form-item label="鎸佹湁鑰�" prop="owner">
+          <el-input v-model="formDat.owner" placeholder="璇疯緭鍏ユ寔鏈夎��" clearable :style="{width: '100%'}" >
           </el-input>
         </el-form-item>
         <el-form-item label="浠锋牸" prop="price">
@@ -384,7 +404,7 @@
 
 
 //瀵煎叆鎺ュ彛鍑芥暟
-import {listCollection, getCollection, addCollection,updateCollection, delCollection,uploadPic} from "@/api/collection/index";
+import {listCollection, getCollection, addCollection,updateCollection, delCollection,uploadPic,downloadModel} from "@/api/collection/index";
 import {enload} from "@/api/doctor";
 import {Message} from "element-ui";
 
@@ -494,7 +514,7 @@
         }],
         owner: [{
           required: true,
-          message: '璇疯緭鍏ユ嫢鏈夎��',
+          message: '璇疯緭鍏ユ寔鏈夎��',
           trigger: 'blur'
         }],
         price: [{
@@ -514,12 +534,29 @@
           trigger: 'blur'
         }],
       },
-      typeOptions: [],
+      typeOptions: [
+        {
+          value: '閫夐」1',
+          label: '閭エ'
+        }, {
+          value: '閫夐」2',
+          label: '鏃ユ湰鍐涘垁'
+        }, {
+          value: '閫夐」3',
+          label: '鑼呭彴閰�'
+        }, {
+          value: '閫夐」4',
+          label: '绾㈡湪'
+        }, {
+          value: '閫夐」5',
+          label: '绾康鍝�'
+        }
+      ],
     };
   },
   created() {
     this.getList();
-    // this.getCateInfor()
+    this.getCateInfor()
     // for (let i = 0; i < this.contactList.length; i++) {
     //   this.formDat[i] = this.contactList[i];
     // }
@@ -555,16 +592,16 @@
       );
     },
     /** 鏌ヨ绫诲埆淇℃伅 */
-    // getCateInfor()
-    // {
-    //   let _this = this
-    //   getCategory().then(response=>{
-    //
-    //     response.data.itemValues.replace("{","").replace("}","").split(",").map(elem=>{
-    //       _this.typeOptions.push({"label":elem.split(":")[0], "value":elem.split(":")[0]})
-    //     })
-    //   })
-    // },
+    getCateInfor()
+    {
+      let _this = this
+      getCategory().then(response=>{
+
+        response.data.itemValues.replace("{","").replace("}","").split(",").map(elem=>{
+          _this.typeOptions.push({"label":elem.split(":")[0], "value":elem.split(":")[0]})
+        })
+      })
+    },
 
     handleRemove(file) {
       alert(323)
@@ -706,7 +743,7 @@
     /** 鍒犻櫎鎸夐挳鎿嶄綔 */
     handleDelete(row) {
       const Ids = row.id || this.ids;
-      this.$modal.confirm('鏄惁纭鍒犻櫎缂栧彿涓�"' + Ids + '"鐨勬暟鎹」锛�').then(function() {
+      this.$modal.confirm('鏄惁纭鍒犻櫎鏁版嵁椤癸紵').then(function() {
         return delCollection(Ids);
       }).then(() => {
         this.getList();
@@ -719,6 +756,14 @@
         ...this.queryParams
       }, `zfCollection_${new Date().getTime()}.xlsx`)
     },
+
+    /** 瀵煎叆妯℃澘涓嬭浇鎸夐挳鎿嶄綔 */
+    handleExportModel() {
+      this.downloadModel('zfCollection/model', {
+        ...this.queryParams
+      }, `zfCollection_model_${new Date().getTime()}.xlsx`)
+    },
+
     /** 瀵煎叆鎿嶄綔*/
     handleEnport(params){
       var file = params.file;
diff --git a/ruoyi-ui/src/views/contacts/contactsInfo.vue b/ruoyi-ui/src/views/contacts/contactsInfo.vue
index 8c5959b..4161649 100644
--- a/ruoyi-ui/src/views/contacts/contactsInfo.vue
+++ b/ruoyi-ui/src/views/contacts/contactsInfo.vue
@@ -2,17 +2,17 @@
   <div class="app-container">
     <div class="form-header mt">
       <h4 class="dt h4">閫氳褰曡缁嗕俊鎭� </h4>
-<!--      <el-button v-if="isShow" type="primary" class="pt"  icon="el-icon-edit" @click="handleEdit()" >缂栬緫</el-button>-->
-<!--      <br>-->
-<!--      <el-button type="primary" class="pt"   @click="handleExport"-->
-<!--                 v-hasPermi="['self:user:export']" >瀵煎嚭</el-button>-->
+      <!--      <el-button v-if="isShow" type="primary" class="pt"  icon="el-icon-edit" @click="handleEdit()" >缂栬緫</el-button>-->
+      <!--      <br>-->
+      <!--      <el-button type="primary" class="pt"   @click="handleExport"-->
+      <!--                 v-hasPermi="['self:user:export']" >瀵煎嚭</el-button>-->
     </div>
 
     <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="100px">
-<!--      <el-form-item label="id" prop="id">-->
-<!--        <el-input v-model="formData.id" placeholder="璇疯緭鍏d" :maxlength="11" show-word-limit :disabled="true"-->
-<!--                  clearable prefix-icon='el-icon-mobile' :style="{width: '100%'}"></el-input>-->
-<!--      </el-form-item>-->
+      <!--      <el-form-item label="id" prop="id">-->
+      <!--        <el-input v-model="formData.id" placeholder="璇疯緭鍏d" :maxlength="11" show-word-limit :disabled="true"-->
+      <!--                  clearable prefix-icon='el-icon-mobile' :style="{width: '100%'}"></el-input>-->
+      <!--      </el-form-item>-->
       <el-form-item label="鎴愬憳濮撳悕" prop="myName">
         <el-input v-model="formData.myName" placeholder="璇疯緭鍏ユ垚鍛樺鍚�" clearable :style="{width: '100%'}" :disabled="dsb">
         </el-input>
@@ -99,10 +99,61 @@
         </div>
       </el-upload>
 
+      <!--<h4 class="form-header">鍏朵粬闄勪欢 </h4>
+      <el-upload
+        action=""
+        :file-list="fileListOther"
+        class="upload-demo"
+        multiple
+        list-type="picture-card"
+        :on-preview="handleFileCardPreview"
+        :on-remove="handleRemove"
+        :http-request="requestUpload"
+        :show-file-list="true"
+      >
 
+        <i slot="default" class="el-icon-plus"></i>
+        <div slot="file" slot-scope="{file}">
+          <img
+            class="el-upload-list__item-thumbnail"
+            src="../../assets/401_images/401.gif"
+            alt=""
+            style="width: 147px; height: 147px"
+            fit="cover"
+          >
+          <span class="el-upload-list__item-actions">
+                <span
+                  v-if="isShow"
+                  class="el-upload-list__item-preview"
+                  @click="handleFileCardPreview(file)"
+                >
+                  <i class="el-icon-zoom-in"></i>
+                </span>
+                <span
+                  v-if="isShow"
+                  @click="handleRemove(file)"
+                  class="el-upload-list__item-delete"
+
+                >
+                  <i class="el-icon-download"></i>
+                </span>
+                <span
+                  v-if="isShow"
+                  class="el-upload-list__item-delete"
+                  @click="handleRemoveFile(file)"
+                >
+                  <i class="el-icon-delete"></i>
+                </span>
+              </span>
+
+
+        </div>
+
+
+      </el-upload>-->
 
       <el-form-item size="large">
-        <el-button  v-if="isShow" type="primary" @click="submitForm" :disabled="dsb">淇敼</el-button>
+        <el-button v-if="isShow" type="primary" @click="submitForm" :disabled="dsb">淇敼</el-button>
       </el-form-item>
     </el-form>
 
@@ -118,7 +169,6 @@
 import {blobValidate} from "@/utils/ruoyi";
 import errorCode from "@/utils/errorCode";
 import {Message} from "element-ui";
-
 export default {
   components: {},
   props: [],
@@ -126,7 +176,7 @@
     return {
       cdi:"閫氳褰曡缁嗕俊鎭�",
       udi:"閫氳褰曚俊鎭鎯�",
-      fot:[".jpg",".jif"],
+      fot:[".jpg",".jif","png"],
       fileList:[
       ],
       fileListOther:[
@@ -298,10 +348,24 @@
       })
     },
     handleRemoveFile(file) {
-      alert(23)
+      for(let i = 0; i < this.fileListOther.length; i++)
+      {
+        if(this.fileListOther[i].url==file.url)
+          this.$delete(this.fileListOther,i);
+      }
     },
     handleRemove(file) {
-      alert(323)
+      for(let i = 0; i < this.fileList.length; i++)
+      {
+        if(this.fileList[i].url==file.url)
+          this.$delete(this.fileList,i);
+      }
+    },
+    handleFileCardPreview(file){
+      this.dialogFileUrl = file.url;
+      const Base64 = require('js-base64').Base64
+      this.desurl = process.env.VUE_APP_BASE_OTHER_API+'onlinePreview?url='+encodeURIComponent(Base64.encode(this.dialogFileUrl));
+      myWindow=window.open(this.desurl,'','width=1200,height=800,top=150,left=300');
     },
     handlePictureCardPreview(file) {
       this.dialogImageUrl = file.url;
@@ -315,7 +379,7 @@
       download(formData).then(async (response) => {
         const isLogin = await blobValidate(response);
         let nt = new Date().getTime()
-        let filename = 'property_'+nt+'.'+suffix
+        let filename = 'doctor_'+nt+'.'+suffix
         const blob = new Blob([response])
         saveAs(blob, filename)
       })
diff --git a/ruoyi-ui/src/views/contacts/index.vue b/ruoyi-ui/src/views/contacts/index.vue
index 9bb9656..31d9577 100644
--- a/ruoyi-ui/src/views/contacts/index.vue
+++ b/ruoyi-ui/src/views/contacts/index.vue
@@ -144,7 +144,7 @@
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
   </div>
-    <el-table v-loading="loading" :data="contactList"  @selection-change="handleSelectionChange"  @row-click="handleCheck" :row-class-name="tableRowClassName" style="background: #FFEFF2;  border-radius: 14px 14px 14px 14px;">
+    <el-table v-loading="loading" :data="contactList"  @selection-change="handleSelectionChange"  :row-class-name="tableRowClassName" style="background: #FFEFF2;  border-radius: 14px 14px 14px 14px;">
       <el-table-column type="selection" width="25"  align="center" />
       <el-table-column  label="搴忓彿" sortable type="index" :index="(queryParams.pageNum-1)*queryParams.pageSize+1" width="80"/>
 
@@ -208,8 +208,6 @@
              >
            </template>
         </el-table-column>
-
-
 
 
       <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
diff --git a/ruoyi-ui/src/views/doctor/doctorInfo.vue b/ruoyi-ui/src/views/doctor/doctorInfo.vue
index ceeb783..cd456ff 100644
--- a/ruoyi-ui/src/views/doctor/doctorInfo.vue
+++ b/ruoyi-ui/src/views/doctor/doctorInfo.vue
@@ -380,7 +380,7 @@
       download(formData).then(async (response) => {
         const isLogin = await blobValidate(response);
         let nt = new Date().getTime()
-        let filename = 'property_'+nt+'.'+suffix
+        let filename = 'doctor_'+nt+'.'+suffix
         const blob = new Blob([response])
         saveAs(blob, filename)
       })
diff --git a/ruoyi-ui/src/views/doctor/index.vue b/ruoyi-ui/src/views/doctor/index.vue
index ca64741..14420ea 100644
--- a/ruoyi-ui/src/views/doctor/index.vue
+++ b/ruoyi-ui/src/views/doctor/index.vue
@@ -186,7 +186,7 @@
         <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
       </el-row>
     </div>
-    <el-table v-loading="loading" :data="doctorList" @selection-change="handleSelectionChange"  @row-click="handleCheck" :row-class-name="tableRowClassName" style="background: #FFEFF2;  border-radius: 14px 14px 14px 14px;">
+    <el-table v-loading="loading" :data="doctorList" @selection-change="handleSelectionChange"  :row-class-name="tableRowClassName" style="background: #FFEFF2;  border-radius: 14px 14px 14px 14px;">
       <el-table-column type="selection" width="25"  align="center" />
       <el-table-column  label="搴忓彿" sortable type="index" align="center" :index="(queryParams.pageNum-1)*queryParams.pageSize+1" width="60"/>
       <el-table-column label="绫诲瀷" prop="type" sortable width="80" align="center">
@@ -231,7 +231,7 @@
                  alt=""
                  style="width: 35px; height: 35px;"
                  fit="cover"
-                  v-if="scope.row.url === ','"
+                  v-if="scope.row.url ===',' "
                >
              </template>
           </el-table-column>
@@ -711,7 +711,7 @@
     /** 鍒犻櫎鎸夐挳鎿嶄綔 */
     handleDelete(row) {
       const Ids = row.id || this.ids;
-      this.$modal.confirm('鏄惁纭鍒犻櫎缂栧彿涓�"' + Ids + '"鐨勬暟鎹」锛�').then(function() {
+      this.$modal.confirm('鏄惁纭鍒犻櫎鏁版嵁椤癸紵').then(function() {
         return delDoctor(Ids);
       }).then(() => {
         this.getList();
diff --git a/ruoyi-ui/src/views/genealogy/index.vue b/ruoyi-ui/src/views/genealogy/index.vue
index 3b92278..46d08b4 100644
--- a/ruoyi-ui/src/views/genealogy/index.vue
+++ b/ruoyi-ui/src/views/genealogy/index.vue
@@ -1,15 +1,710 @@
 <template>
-  <div>
-    <h1>浣犲ソ</h1>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
+      <el-form-item label="" prop="phone wx qq twitter isAlways remark" >
+        <el-input
+          v-model:phone="queryParams.phone"
+          v-model:wx="queryParams.wx"
+          v-model:qq="queryParams.qq"
+          v-model:twitter="queryParams.twitter"
+          v-model:isAlways="queryParams.isAlways"
+          v-model:remark="queryParams.remark"
+          placeholder="鍦ㄢ�滃紶姘忎竴瑙堣〃鈥濅腑鎼滅储"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery">
+          <i slot="prefix" class="el-input__icon el-icon-search"></i>
+        </el-input>
+        <!--        v-model="queryParams.id"-->
+      </el-form-item>
+
+      <el-form-item label="韬唤" prop="nickName" style="padding-left:180px">
+        <el-input
+          v-model="queryParams.nickName"
+          placeholder="璇疯緭鍏ヨ韩浠�"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery">
+          <i slot="prefix" class="el-input__icon el-icon-search"></i>
+        </el-input>
+
+      </el-form-item>
+
+      <el-form-item label="濮撳悕" prop="nickName">
+        <el-input
+          v-model="queryParams.nickName"
+          placeholder="璇疯緭鍏ュ鍚�"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery">
+          <i slot="prefix" class="el-input__icon el-icon-search"></i>
+        </el-input>
+      </el-form-item>
+
+      <el-form-item label="鎬у埆" prop="sex">
+        <el-input
+          v-model="queryParams.sex"
+          placeholder="璇疯緭鍏ユ�у埆"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery">
+          <i slot="prefix" class="el-input__icon el-icon-search"></i>
+        </el-input>
+      </el-form-item>
+      <el-form-item label="鐢熸棩" prop="birth">
+        <el-input
+          v-model="queryParams.birth"
+          placeholder="璇疯緭鍏ョ敓鏃�"
+          clearable
+          style="width: 240px"
+          @keyup.enter.native="handleQuery"
+        >
+          <i slot="prefix" class="el-input__icon el-icon-search"></i>
+        </el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"
+                   style=" width: 65px; height: 32px;background: #FFDDE3;
+          border-radius: 6px 6px 6px 6px;opacity:1;">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery" style=" width: 65px; height: 32px;background: #FFDDE3;
+          border-radius: 6px 6px 6px 6px;opacity:1; " >閲嶇疆</el-button>
+
+      </el-form-item>
+    </el-form>
+    <div>
+      <div style="width: 149px;
+      height: 24px;
+      font-size: 18px;
+      font-family: Microsoft YaHei-Regular, Microsoft YaHei;
+      font-weight: 400;
+      color: #000000;
+      line-height: 21px;
+      ">寮犳皬涓�瑙堣〃</div>
+
+      <el-row :gutter="10" class="mb8">
+<!--        <el-col :span="1.5">-->
+<!--          <el-button-->
+<!--            type="primary"-->
+<!--            plain-->
+<!--            icon="el-icon-plus"-->
+<!--            size="mini"-->
+<!--            @click="handleAdd"-->
+<!--            v-hasPermi="['system:role:add']"-->
+<!--          >鏂板</el-button>-->
+<!--        </el-col>-->
+
+        <el-col :span="1.5">
+          <el-button
+            type="danger"
+            plain
+            icon="el-icon-delete"
+            size="mini"
+            :disabled="multiple"
+            @click="handleDelete"
+            v-hasPermi="['system:role:remove']"
+          >鍒犻櫎</el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="warning"
+            plain
+            icon="el-icon-download"
+            size="mini"
+            @click="handleExport"
+            v-hasPermi="['family:note:export']"
+          >瀵煎嚭</el-button>
+        </el-col>
+<!--        <el-col :span="1.5">-->
+<!--          <el-button-->
+<!--            type="warning"-->
+<!--            plain-->
+<!--            icon="el-icon-download"-->
+<!--            size="mini"-->
+<!--            @click="handleExport"-->
+<!--            v-hasPermi="['family:note:export']"-->
+<!--          >瀵煎叆妯℃澘涓嬭浇</el-button>-->
+<!--        </el-col>-->
+<!--        <el-col :span="1.2">-->
+
+<!--          <el-upload-->
+<!--            action=""-->
+<!--            class="upload-demo"-->
+<!--            :show-file-list="false"-->
+<!--            :http-request="handleEnport"-->
+<!--          >-->
+<!--            <el-button size="mini"   type="primary"-->
+<!--                       plain-->
+<!--                       icon="el-icon-plus" >瀵煎叆</el-button>-->
+<!--          </el-upload>-->
+<!--        </el-col>-->
+
+        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      </el-row>
+    </div>
+
+    <el-table v-loading="loading" :data="listRoot"  @selection-change="handleSelectionChange"  @row-click="handleCheck" :row-class-name="tableRowClassName" style="background: #FFEFF2;  border-radius: 14px 14px 14px 14px;">
+      <el-table-column type="selection" width="25"  align="center" />
+      <el-table-column  label="搴忓彿" sortable type="index" :index="(queryParams.pageNum-1)*queryParams.pageSize+1" width="80"/>
+
+      <el-table-column label="韬唤" prop="myName" sortable width="100" >
+<!--        <template slot-scope="scope">-->
+<!--          <div>-->
+<!--            <a href="javascript:;" @click="handleCheck(scope.row)">{{scope.row.myName}}</a>-->
+<!--          </div>-->
+<!--        </template>-->
+
+      </el-table-column>
+      <el-table-column label="濮撳悕" prop="nickName" sortable :show-overflow-tooltip="true" width="100" align="center"/>
+      <el-table-column label="鎬у埆" prop="sex" sortable width="100" align="center" >
+        <template slot-scope="scope">
+          <span v-if="scope.row.sex===1">鐢�</span>
+          <span v-if="scope.row.sex===0">濂�</span>
+          <span v-if="scope.row.sex== null">鈥斺��</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鍑虹敓鏃堕棿" prop="birth" sortable width="130" align="center" >
+        <template slot-scope="scope">{{scope.row.birth? scope.row.birth: '鈥斺�斺�斺��'}}</template>
+      </el-table-column>
+      <el-table-column label="鍏ㄧ敓鍛藉懆鏈�" prop="deadDay" sortable width="130" align="center" >
+        <template slot-scope="scope">{{scope.row.deadDay? scope.row.deadDay: '鈥斺�斺�斺��'}}</template>
+      </el-table-column>
+      <el-table-column label="鎵嬫満鍙风爜" prop="phoneNumber" sortable width="130" align="center" >
+        <template slot-scope="scope">{{scope.row.phoneNumber? scope.row.phoneNumber: '鈥斺�斺�斺��'}}</template>
+      </el-table-column>
+      <el-table-column label="鎵�鍦ㄥ崟浣�" prop="unit" sortable width="150" align="center" >
+        <template slot-scope="scope">{{scope.row.unit? scope.row.unit: '鈥斺�斺�斺��'}}</template>
+      </el-table-column>
+      <el-table-column label="閰嶅伓" prop="userId" sortable width="110" align="center" >
+        <template slot-scope="scope">{{scope.row.phoneNumber? scope.row.phoneNumber: '鈥斺�斺�斺��'}}</template>
+      </el-table-column>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope" v-if="scope.row.roleId !== 1">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:role:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:role:remove']"
+          >鍒犻櫎</el-button>
+
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-d-arrow-right"
+            @click="handleCheck(scope.row)">
+            鏌ョ湅璇︽儏</el-button>
+
+
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      style="background: #FEF7FC;"
+      @pagination="getList"
+    />
+
+
+  <!--  <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="elForm" :model="formDat" :rules="rules" size="medium" label-width="100px">
+
+        <el-form-item label="鎴愬憳濮撳悕" prop="myName">
+          <el-input v-model="formDat.myName" placeholder="璇疯緭鍏ユ垚鍛樺鍚�" clearable :style="{width: '100%'}" >
+          </el-input>
+        </el-form-item>
+
+        <el-form-item label="绉板懠" prop="nickName">
+          <el-input v-model="formDat.nickName" placeholder="璇疯緭鍏ョО鍛�" clearable :style="{width: '100%'}" ></el-input>
+        </el-form-item>
+        <el-form-item label="濮撳悕" prop="name">
+          <el-input v-model="formDat.name" placeholder="璇疯緭鍏ュ鍚�" clearable :style="{width: '100%'}" >
+          </el-input>
+        </el-form-item>
+        <el-form-item label="宸ヤ綔鍗曚綅" prop="work">
+          <el-input v-model="formDat.work" placeholder="璇疯緭鍏ュ伐浣滃崟浣�" clearable :style="{width: '100%'}" >
+          </el-input>
+        </el-form-item>
+        <el-form-item label="鎵嬫満" prop="phone">
+          <el-input v-model="formDat.phone" placeholder="璇疯緭鍏ユ墜鏈�" clearable :style="{width: '100%'}" >
+          </el-input>
+        </el-form-item>
+        <el-form-item label="寰俊" prop="wx">
+          <el-input v-model="formDat.wx" placeholder="璇疯緭鍏ュ井淇�" clearable :style="{width: '100%'}" >
+          </el-input>
+        </el-form-item>
+        <el-form-item label="QQ" prop="qq">
+          <el-input v-model="formDat.qq" placeholder="璇疯緭鍏Q" clearable :style="{width: '100%'}" >
+          </el-input>
+        </el-form-item>
+        <el-form-item label="twitter" prop="twitter">
+          <el-input v-model="formDat.twitter" placeholder="璇疯緭鍏witter" clearable :style="{width: '100%'}" >
+          </el-input>
+        </el-form-item>
+        <el-form-item label="鏄惁甯歌仈绯�" prop="isAlways">
+          <el-input v-model="formDat.isAlways" placeholder="鏄惁甯歌仈绯�" clearable :style="{width: '100%'}" >
+          </el-input>
+        </el-form-item>
+
+        <el-form-item label="澶囨敞锛堟槸鍚﹀瓨鍦ㄩ噾閽卞叧绯伙級" prop="remark">
+          <el-input v-model="formDat.remark" placeholder="璇疯緭鍏ュ娉�" clearable :style="{width: '100%'}" ></el-input>
+        </el-form-item>
+
+        <h4 class="form-header">鐢靛瓙鍚嶇墖 </h4>
+        <el-upload
+          action="#"
+          list-type="picture-card"
+          multiple
+          :http-request="requestUpload"
+          :file-list="fileList"
+        >
+          <i slot="default" class="el-icon-plus"></i>
+          <div slot="file" slot-scope="{file}">
+            <img
+              class="el-upload-list__item-thumbnail"
+              :src="file.url"
+              alt=""
+              style="width: 126px; height: 126px"
+              fit="cover"
+              :preview-src-list="[file.url]"
+            >
+            <span class="el-upload-list__item-actions">
+        <span
+          class="el-upload-list__item-preview"
+          @click="handlePictureCardPreview(file)"
+        >
+          <i class="el-icon-zoom-in"></i>
+        </span>
+
+        <span
+          v-if="!disabled"
+          class="el-upload-list__item-delete"
+          @click="handleRemove(file)"
+        >
+          <i class="el-icon-delete"></i>
+        </span>
+      </span>
+
+
+          </div>
+        </el-upload>
+        <h4 class="form-header">鍏朵粬闄勪欢 </h4>
+        <el-upload
+          action=""
+          :file-list="fileListOther"
+          class="upload-demo"
+          multiple
+
+          :on-remove="handleRemove"
+          :http-request="requestUpload"
+          :show-file-list="true"
+        >
+          <el-button type="primary">鐐瑰嚮涓婁紶</el-button>
+          <template #tip>
+            <div class="el-upload__tip">
+            </div>
+          </template>
+        </el-upload>
+
+      </el-form>
+      <h4 class="form-header"> </h4>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitDataScope">淇� 瀛�</el-button>
+        <el-button @click="cancelData">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>  -->
+
+    <el-dialog :title="title" :visible.sync="openDataScope" width="500px" append-to-body>
+
+    </el-dialog>
+
   </div>
 </template>
 
 <script>
+import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from "@/api/system/role";
+import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu";
+
+import { Notification, MessageBox, Message, Loading } from 'element-ui'
+
+//瀵煎叆鎺ュ彛鍑芥暟
+import {enload, uploadPic} from "@/api/contacts/index";
+import {getRoot} from "@/api/root/index";
 export default {
-  name: "index"
-}
+  name: "index",
+  dicts: ['sys_normal_disable'],
+  data() {
+    return {
+      // 閬僵灞�
+      disabled: false,
+
+      loading: true,
+      formData:[],
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 瀹惰氨琛ㄦ牸鏁版嵁
+      listRoot: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏄惁鏄剧ず寮瑰嚭灞傦紙鏁版嵁鏉冮檺锛�
+      openDataScope: false,
+      menuExpand: false,
+      menuNodeAll: false,
+      deptExpand: true,
+      deptNodeAll: false,
+      // 鏃ユ湡鑼冨洿
+      dateRange: [],
+      // 鏁版嵁鑼冨洿閫夐」
+      fot:[".jpg",".jif"],
+      fileList:[
+      ],
+      fileListOther:[
+
+      ],
+      dsb:true,
+      btn:false,
+      fit:['fill'],
+
+      formDat: {
+        //寮犳皬涓�瑙堣〃
+        userid:undefined,
+        nickName:undefined,
+        oldName:undefined,
+        sex:undefined,
+        nationality:undefined,
+        nation:undefined,
+        maritalStatus:undefined,
+        phoneNumber:undefined,
+        idNum:undefined,
+        locationAddress:undefined,
+        alwaysAddress:undefined,
+        locationPolice:undefined,
+        alwaysPolice:undefined,
+        outStatus:undefined,
+        idNo:undefined,
+        unit:undefined,
+        position:undefined,
+        politicalOutlook:undefined,
+        deadDay:undefined,
+        spouseId:undefined,
+        img:undefined,
+        fatherId:undefined,
+        momId:undefined,
+        birth:undefined,
+        familyId:undefined,
+        secondFamilyId:undefined,
+        childList:undefined,
+        url: undefined,
+
+      },
+      // 鑿滃崟鍒楄〃
+      menuOptions: [],
+      // 閮ㄩ棬鍒楄〃
+      deptOptions: [],
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        nickName:undefined,
+        sex:undefined,
+        birth:undefined,
+      },
+      // searchVal:"",
+
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        // id: [{
+        //   required: true,
+        //   message: '璇疯緭鍏d',
+        //   trigger: 'blur'
+        // }],
+
+        nickName: [{
+          required: true,
+          message: '璇疯緭鍏ュ鍚�',
+          trigger: 'blur'
+        }],
+        sex: [{
+          required: true,
+          message: '璇疯緭鍏ユ�у埆',
+          trigger: 'blur'
+        }],
+        bitrh: [{
+          // required: true,
+          message: '璇疯緭鍏ュ嚭鐢熸椂闂�',
+          trigger: 'blur'
+        }],
+        deadDay: [{
+          // required: true,
+          message: '璇疯緭鍏ュ叏鐢熷懡鍛ㄦ湡',
+          trigger: 'blur'
+        }],
+
+      },
+      typeOptions: [],
+    };
+  },
+  created() {
+    this.getList();
+    // this.getCateInfor()
+    // for (let i = 0; i < this.contactList.length; i++) {
+    //   this.formDat[i] = this.contactList[i];
+    // }
+  },
+  methods: {
+    // 鍙栨秷鎸夐挳
+    cancelData() {
+      this.open = false;
+      this.reset();
+    },
+
+    //闅旇鍙樿壊
+    tableRowClassName({ row, rowIndex }) {
+      if (rowIndex % 2 == 0) {
+        return "statistics-warning-row1";
+      } else {
+        return "statistics-warning-row";
+      }
+    },
+
+    /** 鏌ヨ閫氳褰曞垪琛� */
+    getList() {
+      this.loading = true;
+      // console.log(this.queryParams)
+      //  listProperty(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      getRoot(this.queryParams).then(response => {
+          //  alert(123)
+          //   console.log(response.data)
+          this.listRoot = response.data.data;
+          this.total = response.data.total;
+          this.loading = false;
+        }
+      );
+    },
+    /** 鏌ヨ绫诲埆淇℃伅 */
+    // getCateInfor()
+    // {
+    //   let _this = this
+    //   getCategory().then(response=>{
+    //
+    //     response.data.itemValues.replace("{","").replace("}","").split(",").map(elem=>{
+    //       _this.typeOptions.push({"label":elem.split(":")[0], "value":elem.split(":")[0]})
+    //     })
+    //   })
+    // },
+
+    handleRemove(file) {
+      alert(323)
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 鍙栨秷鎸夐挳锛堟暟鎹潈闄愶級
+    cancelDataScope() {
+      this.openDataScope = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      if (this.$refs.menu != undefined) {
+        this.$refs.menu.setCheckedKeys([]);
+      }
+      this.menuExpand = false,
+        this.menuNodeAll = false,
+        this.deptExpand = true,
+        this.deptNodeAll = false,
+        this.form = {
+          roleId: undefined,
+          roleName: undefined,
+          roleKey: undefined,
+          roleSort: 0,
+          status: "0",
+          menuIds: [],
+          deptIds: [],
+          menuCheckStrictly: true,
+          deptCheckStrictly: true,
+          remark: undefined
+        };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      console.log(this.ids)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    // //姣忔鏀瑰彉input妗嗗�兼椂灏辨敼鍙榯his.myTableData鐨勫��
+    // inputChange() { //寰幆姣忎竴椤� 鍙content鐨勫�煎惈鏈夎緭鍏ョ殑searchVal鍊硷紝灏卞姞杩沶ewList锛涘弽涔嬶紝灏辨棤涓滆タ鍔犺繘newList
+    //   let newlist = this.formDat.filter(
+    //     (item) => item.content.indexOf(this.searchVal) > -1
+    //   );
+    //   this.contactList = newlist;
+    // },
+
+
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞閫氳褰曡缁嗕俊鎭�";
+    },
+    /** 鏌ョ湅璇︾粏淇℃伅 */
+    handleCheck(row){
+      const id = row.id;
+      this.$router.push("/familymodel/Contact/contactsInfo/" + id);
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      const id = row.id;
+      let jd = true
+
+      this.$router.push({
+        path:"/familymodel/Contact/contactsInfo/" + id,
+        query:{
+          detail:jd
+        }
+      });
+    },
+
+
+    handlePictureCardPreview(file) {
+      this.dialogImageUrl = file.url;
+      this.dialogVisible = true;
+    },
+    /** 鎻愪氦鎸夐挳锛堟暟鎹潈闄愶級 */
+    // submitDataScope: function() {
+    //
+    //   let ul = this.fileList.map(function (elem){
+    //     return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"")
+    //   }).join(",")
+    //   let uls = this.fileListOther.map(function (elem){
+    //     return elem.url.replace(process.env.VUE_APP_BASE_TRUE_API,"")
+    //   }).join(",")
+    //   this.formDat.url = ul+","+uls
+    //   this.$refs["elForm"].validate(valid => {
+    //     if (valid) {
+    //
+    //       addContact(this.formDat).then(response => {
+    //         this.$modal.msgSuccess("鏂板鎴愬姛");
+    //         this.open = false;
+    //         this.getList();
+    //       });
+    //     }
+    //   });
+    // },
+    requestUpload(params)
+    {
+      var file = params.file;
+      var formData = new FormData();
+      formData.append('uploadFile', file);
+      let _this = this
+
+      uploadPic(formData).then(response => {
+        let pth = response.data.originalFilename.substr(response.data.originalFilename.length-4, response.data.originalFilename.length)
+
+        if(_this.fot.includes(pth) === true)
+        {
+          _this.fileList.push({name:response.data.fileName, "url":response.data.url})
+
+        }
+
+        else{
+          _this.fileListOther.push({name:response.data.fileName, url:response.data.url})
+
+        }
+      })
+
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const Ids = row.id || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎缂栧彿涓�"' + Ids + '"鐨勬暟鎹」锛�').then(function() {
+        return delContact(Ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('zfContact/export', {
+        ...this.queryParams
+      }, `zfContact_${new Date().getTime()}.xlsx`)
+    },
+    /** 瀵煎叆鎿嶄綔*/
+    // handleEnport(params){
+    //   var file = params.file;
+    //   var formData = new FormData();
+    //   formData.append('excelImport', file);
+    //   let _this = this
+    //   enload(formData).then(response => {
+    //     _this.getList();
+    //     Message({ message: "瀵煎叆鎴愬姛", type: 'warning' })
+    //
+    //   }).catch(err)
+    //   {
+    //     Message({ message: "瀵煎叆澶辫触", type: 'error' })
+    //   }
+    //
+    // }
+  }
+};
 </script>
 
-<style scoped>
+<style >
+.app-container{
+  background-color: #FEF7FC;
+}
+
+.el-table__row.statistics-warning-row {
+  background: #E0EEFE;
+
+}
+.el-table__row.statistics-warning-row1 {
+  background: #FFEFF2;
+
+}
+
 
 </style>
diff --git a/ruoyi-ui/src/views/homeRoot/index.vue b/ruoyi-ui/src/views/homeRoot/index.vue
index 8db644c..5ad025b 100644
--- a/ruoyi-ui/src/views/homeRoot/index.vue
+++ b/ruoyi-ui/src/views/homeRoot/index.vue
@@ -20,7 +20,7 @@
         <!-- 鑳屾櫙澶у浘-->
         <img v-if="imageSrc" :src="imageSrc" alt="" class="background"/>
         <!-- 鐢ㄦ埛澶村儚-->
-        <div v-model="rootList.url" >
+        <div  v-model="rootList.url">
           <el-avatar shape="circle" class="avater_1_1">
             <el-img :src="'http://47.93.189.255:8080'+ rootList.url"
             ></el-img>
@@ -85,7 +85,7 @@
             <el-img :src="'http://47.93.189.255:8080'+ rootList.url"
             ></el-img>
           </el-avatar>
-          <el-avatar shape="circle" class="avater_3_7" v-if="isShow_3">
+          <el-avatar shape="circle" class="avater_3_7" v-if="isShow_4">
             <el-img :src="'http://47.93.189.255:8080'+ rootList.url"
             ></el-img>
           </el-avatar>
diff --git a/ruoyi-ui/src/views/login.vue b/ruoyi-ui/src/views/login.vue
index cf92e40..6146359 100644
--- a/ruoyi-ui/src/views/login.vue
+++ b/ruoyi-ui/src/views/login.vue
@@ -1,7 +1,7 @@
 <template>
   <div class="login Group_132">
     <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" style="margin-left: 0px;margin-right: 180px;">
-      <h3 class="title" style="margin-top: 80px;margin-right: 108px;margin-bottom: 0;margin-left: 109px;">娆㈣繋鏉ュ埌寮犳皬APP</h3>
+      <h3 class="title" style="margin-top: 80px;margin-right: 108px;margin-bottom: 0;margin-left: 109px;">娆㈣繋鏉ュ埌鏈兘閮�</h3>
       <div class="second-box" style=" margin-top: 25px;
     margin-left: 140px;
     margin-right: 141px;
@@ -126,6 +126,7 @@
     <!--  搴曢儴  -->
     <div class="el-login-footer">
       <span>Copyright 漏 GDUT All Rights Reserved.</span>
+      <a href="https://beian.miit.gov.cn/" target="_blank" >绮CP澶�2023050334鍙� </a>
     </div>
   </div>
 </template>

--
Gitblit v1.9.1