1.修改了网站名以及在首页加上了备案号
2.各模块删除时不显示数据序号
3.各模块删除单条数据时不会再同时打开详情页
4.各模块新增重复数据可被检测并且提示不要输入重复数据
5.家根网页面更换了第三代的大图
6.收藏与荣誉模块显示和新增统一为“持有者”
18个文件已修改
953 ■■■■■ 已修改文件
.env.development 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.production 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.staging 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/.env.development 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/.env.production 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/api/collection/index.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/assets/images/Group 445.png 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/router/index.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/collection/collectionInfo.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/collection/index.vue 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/contacts/contactsInfo.vue 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/contacts/index.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/doctor/doctorInfo.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/doctor/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/genealogy/index.vue 705 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/homeRoot/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-ui/src/views/login.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.development
@@ -1,10 +1,10 @@
# 页面标题
VUE_APP_TITLE = 张氏APP管理系统
VUE_APP_TITLE = 张氏APP
# 开发环境配置
ENV = 'development'
# 张氏APP管理系统/开发环境
# 本都都/开发环境
VUE_APP_BASE_API = '/dev-api'
.env.production
@@ -1,8 +1,8 @@
# 页面标题
VUE_APP_TITLE = 张氏APP管理系统
VUE_APP_TITLE = 本都都
# 生产环境配置
ENV = 'production'
# 张氏APP管理系统/生产环境
# 本都都/生产环境
VUE_APP_BASE_API = '/prod-api'
.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'
package.json
@@ -1,7 +1,7 @@
{
  "name": "ruoyi",
  "version": "3.8.5",
  "description": "张氏APP管理系统",
  "description": "本都都",
  "author": "若依",
  "license": "MIT",
  "scripts": {
ruoyi-ui/.env.development
@@ -1,5 +1,5 @@
# 页面标题
VUE_APP_TITLE =  张氏APP管理系统
VUE_APP_TITLE =  本都都
# 开发环境配置
ENV = 'development'
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/'
VUE_APP_BASE_OTHER_API = 'http://47.93.189.255:8083/'
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'
  })
}
ruoyi-ui/src/assets/images/Group 445.png

ruoyi-ui/src/router/index.js
@@ -230,6 +230,7 @@
      }
    ]
  },
  //魅宠详情
  {
    path: '/familymodel/pet',
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,"")};
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;
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="请输入id" :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="请输入id" :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)
      })
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">
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)
      })
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();
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="请输入QQ" clearable :style="{width: '100%'}" >
          </el-input>
        </el-form-item>
        <el-form-item label="twitter" prop="twitter">
          <el-input v-model="formDat.twitter" placeholder="请输入twitter" 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: '请输入id',
        //   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框值时就改变this.myTableData的值
    // inputChange() { //循环每一项 只要content的值含有输入的searchVal值,就加进newList;反之,就无东西加进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>
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>
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" >粤ICP备2023050334号 </a>
    </div>
  </div>
</template>