From d7f140b91b514c9ed36361552c2c627730f086d0 Mon Sep 17 00:00:00 2001
From: linwenling <3256558519@qq.com>
Date: 星期日, 02 四月 2023 13:50:47 +0800
Subject: [PATCH] 4.2

---
 ruoyi-ui/bin/新建文本文档.txt                        |    0 
 ruoyi-ui/src/store/modules/permission.js       |    1 
 ruoyi-ui/src/utils/ruoyi.js                    |    1 
 ruoyi-ui/src/App.vue                           |    3 
 ruoyi-ui/src/views/bignote/index.vue           |  516 ++++++++++++++
 ruoyi-ui/src/views/system/role/index.vue       |  349 +++++++++
 ruoyi-ui/target/npmlist.json                   |    1 
 ruoyi-ui/vue.config.js                         |   30 
 ruoyi-ui/src/views/bignote/familyeventInfo.vue |  363 ++++++++++
 ruoyi-ui/src/views/system/user/index.vue       |  324 +++++++++
 ruoyi-ui/src/views/tmp.vue                     |   12 
 ruoyi-ui/src/store/modules/settings.js         |    2 
 ruoyi-ui/src/utils/request.js                  |   12 
 ruoyi-ui/.env.production                       |    2 
 ruoyi-ui/.env.staging                          |    2 
 ruoyi-ui/package.json                          |    3 
 ruoyi-ui/src/api/bignote/index.js              |   76 ++
 ruoyi-ui/src/views/note/propertyInfo.vue       |  362 ++++++++++
 ruoyi-ui/.env.development                      |    4 
 ruoyi-ui/src/api/login.js                      |   15 
 ruoyi-ui/src/router/index.js                   |   37 +
 21 files changed, 2,082 insertions(+), 33 deletions(-)

diff --git a/ruoyi-ui/.env.development b/ruoyi-ui/.env.development
index 73916eb..47d11c2 100644
--- a/ruoyi-ui/.env.development
+++ b/ruoyi-ui/.env.development
@@ -1,5 +1,5 @@
 # 椤甸潰鏍囬
-VUE_APP_TITLE = 寮犳皬APP
+VUE_APP_TITLE = 鑻ヤ緷绠$悊绯荤粺
 
 # 寮�鍙戠幆澧冮厤缃�
 ENV = 'development'
@@ -7,5 +7,7 @@
 # 鑻ヤ緷绠$悊绯荤粺/寮�鍙戠幆澧�
 VUE_APP_BASE_API = '/dev-api'
 
+
+VUE_APP_BASE_TRUE_API = 'http://47.93.189.255:8080/'
 # 璺敱鎳掑姞杞�
 VUE_CLI_BABEL_TRANSPILE_MODULES = true
diff --git a/ruoyi-ui/.env.production b/ruoyi-ui/.env.production
index c67c673..b4893b0 100644
--- a/ruoyi-ui/.env.production
+++ b/ruoyi-ui/.env.production
@@ -1,5 +1,5 @@
 # 椤甸潰鏍囬
-VUE_APP_TITLE = 寮犳皬APP
+VUE_APP_TITLE = 鑻ヤ緷绠$悊绯荤粺
 
 # 鐢熶骇鐜閰嶇疆
 ENV = 'production'
diff --git a/ruoyi-ui/.env.staging b/ruoyi-ui/.env.staging
index 8bbead1..361859f 100644
--- a/ruoyi-ui/.env.staging
+++ b/ruoyi-ui/.env.staging
@@ -1,5 +1,5 @@
 # 椤甸潰鏍囬
-VUE_APP_TITLE = 寮犳皬APP
+VUE_APP_TITLE = 鑻ヤ緷绠$悊绯荤粺
 
 NODE_ENV = production
 
diff --git "a/ruoyi-ui/bin/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt" "b/ruoyi-ui/bin/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt"
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ "b/ruoyi-ui/bin/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt"
diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json
index 26b9eea..d3fbe25 100644
--- a/ruoyi-ui/package.json
+++ b/ruoyi-ui/package.json
@@ -1,7 +1,7 @@
 {
   "name": "ruoyi",
   "version": "3.8.5",
-  "description": "寮犳皬APP",
+  "description": "鑻ヤ緷绠$悊绯荤粺",
   "author": "鑻ヤ緷",
   "license": "MIT",
   "scripts": {
@@ -49,7 +49,6 @@
     "js-cookie": "3.0.1",
     "jsencrypt": "3.0.0-rc.1",
     "nprogress": "0.2.0",
-    "postcss-px2rem": "^0.3.0",
     "quill": "1.3.7",
     "screenfull": "5.0.2",
     "sortablejs": "1.10.2",
diff --git a/ruoyi-ui/src/App.vue b/ruoyi-ui/src/App.vue
index 29de49f..dfa62fe 100644
--- a/ruoyi-ui/src/App.vue
+++ b/ruoyi-ui/src/App.vue
@@ -1,6 +1,9 @@
 <template>
   <div id="app">
     <router-view />
+
+
+
     <theme-picker />
   </div>
 </template>
diff --git a/ruoyi-ui/src/api/bignote/index.js b/ruoyi-ui/src/api/bignote/index.js
new file mode 100644
index 0000000..5bad6ab
--- /dev/null
+++ b/ruoyi-ui/src/api/bignote/index.js
@@ -0,0 +1,76 @@
+import request from '@/utils/request'
+
+// Familyevent 
+
+// 鏌ヨ鎵�鏈夊搴ぇ浜嬶紝鍒嗛〉鏌ヨ
+export function listFamilyevent(query) {
+  return request({
+    url: '/family/zfEvent/all',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏍规嵁id鏌ヨ鎵�鏈夊搴祫浜ц缁嗕俊鎭�
+export function getFamilyeventInfo(id) {
+  return request({
+    url: '/family/zfEvent/{id}' + id,
+    method: 'get',
+
+  })
+}
+
+//澧炲姞璧勪骇淇℃伅
+export function addFamilyevent(data)
+{
+  return request({
+    url: '/family/zfEvent',
+    method: 'post',
+    data: data
+  })
+}
+
+// 鍒犻櫎璧勪骇淇℃伅
+export function delFamilyevent(Ids) {
+  return request({
+    url: '/family/zfEvent/' + Ids,
+    method: 'delete'
+  })
+}
+//淇敼瀹跺ぇ浜嬭
+export function updateFamilyevent(data) {
+  return request({
+    url: '/family/zfEvent',
+    method: 'put',
+    data: data
+  })
+}
+//涓婁紶鏂囦欢
+export function uploadPic(data) {
+  return request({
+    url: '/common/upload',
+    method: 'post',
+    data: data
+  })
+}
+//涓嬭浇鏂囦欢
+export function download(data) {
+  return request({
+    url: '/common/downLoadFile',
+    method: 'get',
+    params: data,
+    responseType: 'blob'
+  })
+}
+
+// //鎷垮埌绫诲埆
+// export function getCategory()
+// {
+//   return request({
+//     url: '/zDict/byId',
+//     method: 'get',
+//     params: {'id':22}
+//   })
+// }
+
+
diff --git a/ruoyi-ui/src/api/login.js b/ruoyi-ui/src/api/login.js
index 649f59c..06c8b1b 100644
--- a/ruoyi-ui/src/api/login.js
+++ b/ruoyi-ui/src/api/login.js
@@ -8,6 +8,8 @@
     code,
     uuid
   }
+
+
   return request({
     url: '/login',
     headers: {
@@ -48,6 +50,19 @@
 
 // 鑾峰彇楠岃瘉鐮�
 export function getCodeImg() {
+  console.log("-----")
+  return request({
+    url: '/captchaImage',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    timeout: 20000
+  })
+}
+
+// 鑾峰彇楠岃瘉鐮�
+export function getCodeImg() {
   return request({
     url: '/captchaImage',
     headers: {
diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js
index 3281ddb..1f34a9d 100644
--- a/ruoyi-ui/src/router/index.js
+++ b/ruoyi-ui/src/router/index.js
@@ -57,6 +57,11 @@
     hidden: true
   },
   {
+    path: '/tmps',
+    component: () => import('@/views/tmp'),
+    hidden: true
+  },
+  {
     path: '/401',
     component: () => import('@/views/error/401'),
     hidden: true
@@ -72,9 +77,9 @@
         name: 'Index',
         meta: { title: '棣栭〉', icon: 'dashboard', affix: true }
       }
+
     ]
   },
-
   {
     path: '/user',
     component: Layout,
@@ -107,6 +112,36 @@
       }
     ]
   },
+    {
+    path: '/family/note1',
+    component: Layout,
+    permissions: ['family:note:list'],
+
+    hidden: true,
+    children: [
+      {
+        path: 'propertyInfo/:id(\\d+)',
+        component: () => import('@/views/note/propertyInfo'),
+        name: 'propertyInfo',
+        meta: { title: '鏌ヨ璇︽儏'}
+      }
+    ]
+  },
+//瀹跺ぇ浜嬭鐨勮鎯�
+  {
+    path: '/family1/bignote',
+    component: Layout,
+    // permissions: [],
+    hidden: true,
+    children: [
+      {
+        path: 'familyeventInfo/:id(\\d+)',
+        component: () => import('@/views/bignote/familyeventInfo'),
+        name: 'familyeventInfo',
+        meta: { title: '鏌ヨ璇︽儏'}
+      }
+    ]
+  },
   {
     path: '/system/role-auth',
     component: Layout,
diff --git a/ruoyi-ui/src/store/modules/permission.js b/ruoyi-ui/src/store/modules/permission.js
index 2287665..ca5e858 100644
--- a/ruoyi-ui/src/store/modules/permission.js
+++ b/ruoyi-ui/src/store/modules/permission.js
@@ -123,6 +123,7 @@
 
 export const loadView = (view) => {
   if (process.env.NODE_ENV === 'development') {
+
     return (resolve) => require([`@/views/${view}`], resolve)
   } else {
     // 浣跨敤 import 瀹炵幇鐢熶骇鐜鐨勮矾鐢辨噿鍔犺浇
diff --git a/ruoyi-ui/src/store/modules/settings.js b/ruoyi-ui/src/store/modules/settings.js
index 8bff7b7..2455a1e 100644
--- a/ruoyi-ui/src/store/modules/settings.js
+++ b/ruoyi-ui/src/store/modules/settings.js
@@ -4,7 +4,7 @@
 
 const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || ''
 const state = {
-  title: '寮犳皬APP',
+  title: '',
   theme: storageSetting.theme || '#409EFF',
   sideTheme: storageSetting.sideTheme || sideTheme,
   showSettings: showSettings,
diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js
index ad9923c..ad0bf7b 100644
--- a/ruoyi-ui/src/utils/request.js
+++ b/ruoyi-ui/src/utils/request.js
@@ -17,7 +17,7 @@
   // axios涓姹傞厤缃湁baseURL閫夐」锛岃〃绀鸿姹俇RL鍏叡閮ㄥ垎
   baseURL: process.env.VUE_APP_BASE_API,
   // 瓒呮椂
-  timeout: 10000
+  timeout: 1000000
 })
 
 // request鎷︽埅鍣�
@@ -32,9 +32,16 @@
   // get璇锋眰鏄犲皠params鍙傛暟
   if (config.method === 'get' && config.params) {
     let url = config.url + '?' + tansParams(config.params);
+
+
     url = url.slice(0, -1);
     config.params = {};
     config.url = url;
+    if(config.responseType!=undefined)
+    {
+      config.responseType='blob'
+    }
+    config.headers['Content-Type']= 'application/json'
   }
   if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
     const requestObj = {
@@ -62,6 +69,7 @@
   return config
 }, error => {
     console.log(error)
+
     Promise.reject(error)
 })
 
@@ -69,6 +77,8 @@
 service.interceptors.response.use(res => {
     // 鏈缃姸鎬佺爜鍒欓粯璁ゆ垚鍔熺姸鎬�
     const code = res.data.code || 200;
+
+
     // 鑾峰彇閿欒淇℃伅
     const msg = errorCode[code] || res.data.msg || errorCode['default']
     // 浜岃繘鍒舵暟鎹垯鐩存帴杩斿洖
diff --git a/ruoyi-ui/src/utils/ruoyi.js b/ruoyi-ui/src/utils/ruoyi.js
index 243c4c7..6b9a0f2 100644
--- a/ruoyi-ui/src/utils/ruoyi.js
+++ b/ruoyi-ui/src/utils/ruoyi.js
@@ -232,6 +232,7 @@
   try {
     const text = await data.text();
     JSON.parse(text);
+    alert(text)
     return false;
   } catch (error) {
     return true;
diff --git a/ruoyi-ui/src/views/bignote/familyeventInfo.vue b/ruoyi-ui/src/views/bignote/familyeventInfo.vue
new file mode 100644
index 0000000..2bcb7ed
--- /dev/null
+++ b/ruoyi-ui/src/views/bignote/familyeventInfo.vue
@@ -0,0 +1,363 @@
+<template>
+    <div class="app-container">
+      <div class="form-header mt">
+        <h4 class="dt h4">瀹跺涵澶т簨璁拌鎯� </h4>
+        <el-button type="primary" class="pt"  icon="el-icon-edit" @click="handleEdit()" :disabled="btn">缂栬緫</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="绫诲埆" prop="type">
+          <el-select v-model="formData.type" placeholder="璇烽�夋嫨绫诲埆" clearable :style="{width: '100%'}" :disabled="dsb" >
+            <el-option v-for="(item, index) in typeOptions" :key="index" :label="item.label" :value="item.value"
+                       :disabled="item.disabled"></el-option>
+          </el-select>
+        </el-form-item> -->
+        <el-form-item label="鏍囬" prop="title">
+          <el-input v-model="formData.title" placeholder="璇疯緭鍏ユ爣棰�" clearable :style="{width: '100%'}" :disabled="dsb"></el-input>
+        </el-form-item>
+        <!-- <el-form-item label="瀛樺偍鍦板潃" prop="location">
+          <el-input v-model="formData.location" placeholder="璇疯緭鍏ュ瓨鍌ㄥ湴鍧�" clearable :style="{width: '100%'}" :disabled="dsb">
+          </el-input>
+        </el-form-item> -->
+        <el-form-item label="浜虹墿" prop="people">
+          <el-input v-model="formData.holder" placeholder="璇疯緭鍏ヤ汉鐗�" clearable :style="{width: '100%'}" :disabled="dsb">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="鍦扮偣" prop="address">
+          <el-input v-model="formData.address" placeholder="璇疯緭鍏ュ湴鐐�" clearable :style="{width: '100%'}" :disabled="dsb">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="澶囨敞" prop="remark">
+          <el-input v-model="formData.remark" placeholder="璇疯緭鍏ュ娉�" clearable :style="{width: '100%'}" :disabled="dsb"></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: 147px; height: 147px"
+              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="handleDownload(file.url)"
+          >
+            <i class="el-icon-download"></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-preview="handlePreview"
+  
+          :on-remove="handleRemove"
+          :http-request="requestUpload"
+          :show-file-list="true"
+        >
+          <el-button type="primary">Click to upload</el-button>
+          <template #tip>
+            <div class="el-upload__tip">
+            </div>
+          </template>
+  
+  
+        </el-upload>
+  
+        <el-form-item size="large">
+          <el-button type="primary" @click="submitForm" :disabled="dsb">淇敼</el-button>
+        </el-form-item>
+      </el-form>
+  
+      <el-dialog  :visible.sync="dialogVisible">
+        <img w-full :src="dialogImageUrl" alt="Preview Image" />
+      </el-dialog>
+    </div>
+  </template>
+  <script>
+  import {getFamilyeventInfo, updateFamilyevent, uploadPic, download} from "@/api/bignote/index";
+  import {addRole, updateRole} from "@/api/system/role";
+  import {blobValidate} from "@/utils/ruoyi";
+  import errorCode from "@/utils/errorCode";
+  import {Message} from "element-ui";
+  
+  export default {
+    components: {},
+    props: [],
+    data() {
+      return {
+        cdi:"瀹跺涵澶т簨璁颁俊鎭�",
+        udi:"瀹跺涵澶т簨璁颁慨鏀�",
+        fot:[".jpg",".jif"],
+        fileList:[
+        ],
+        fileListOther:[
+  
+        ],
+        dsb:true,
+        btn:false,
+        formData: {
+          id: undefined,
+          // type: undefined,
+          title: undefined,
+          // location: undefined,
+          people: undefined,
+          address: undefined,
+          remark: undefined,
+          url: undefined,
+        },
+        dialogImageUrl: '',
+        dialogVisible: false,
+        disabled: false,
+        rules: {
+          id: [{
+            required: true,
+            message: '璇疯緭鍏d',
+            trigger: 'blur'
+          }],
+          // type: [{
+          //   required: true,
+          //   message: '璇烽�夋嫨绫诲埆',
+          //   trigger: 'change'
+          // }],
+          title: [{
+            required: true,
+            message: '璇疯緭鍏ュぇ浜嬫爣棰�',
+            trigger: 'blur'
+          }],
+          // location: [{
+          //   required: true,
+          //   message: '璇疯緭鍏ュ瓨鍌ㄥ湴鍧�',
+          //   trigger: 'blur'
+          // }],
+          people: [{
+            required: true,
+            message: '璇疯緭鍏ヤ汉鐗�',
+            trigger: 'blur'
+          }],
+          address: [{
+            required: true,
+            message: '璇疯緭鍏ュ湴鐐�',
+            trigger: 'blur'
+          }],
+          remark: [{
+            required: true,
+            message: '璇疯緭鍏ュ娉�',
+            trigger: 'blur'
+          }],
+  
+        },
+        typeOptions: [],
+      }
+    },
+    computed: {},
+    watch: {},
+    created() {
+      const id = this.$route.params && this.$route.params.id;
+      let jd;
+      if(this.$route.query.detail!=undefined)
+      {
+        jd =  this.$route.query.detail
+        this.btn= jd
+        this.dsb = !jd
+        document.title = "淇敼瀹跺ぇ浜嬭璇︾粏淇℃伅";
+        this.$route.meta.title = "淇敼瀹跺ぇ浜嬭璇︾粏淇℃伅";//鍒楄〃鐨勫悕绉�
+      }
+      else{
+        document.title = "鏌ョ湅瀹跺ぇ浜嬭璇︾粏淇℃伅";
+        this.$route.meta.title = "鏌ョ湅瀹跺ぇ浜嬭璇︾粏淇℃伅";//鍒楄〃鐨勫悕绉�
+      }
+  
+      let _this = this
+      if (id) {
+        this.loading = true;
+        getFamilyeventInfo(id).then((response) => {
+          this.formData = response.data;
+          let paths = response.data.url.split(",");
+          for(let i = 0; i < paths.length; i++)
+          {
+            if(paths[i]!="") {
+  
+              let pth = paths[i].substr(paths[i].length - 4, paths[i].length)
+  
+              if (_this.fot.includes(pth) === true)
+                _this.fileList.push({name:paths[i],url: process.env.VUE_APP_BASE_TRUE_API+paths[i]})
+              else {
+                // alert(paths[i])
+                let nms = paths[i].split("\/")
+                let nm = nms[nms.length - 1]
+                _this.fileListOther.push({name:nm, url: process.env.VUE_APP_BASE_TRUE_API+paths[i]})
+              }
+            }
+          }
+          this.loading = false;
+        });
+        // this.getCateInfor()
+  
+      }
+    },
+    mounted() {},
+    methods: {
+      /** 鏌ヨ绫诲埆淇℃伅 */
+      // 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]})
+      //     })
+      //   })
+      // },
+      submitForm() {
+        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.formData.url = ul+","+uls
+  
+        this.$refs['elForm'].validate(valid => {
+  
+  
+          if (valid) {
+            if (this.formData.id != undefined) {
+              updateFamilyevent(this.formData).then(response => {
+                this.$modal.msgSuccess("淇敼鎴愬姛");
+                // this.open = false;
+                this.btn=false
+              });
+            } else {
+              this.$modal.msgSuccess("淇敼澶辫触");
+  
+            }
+          }
+        })
+      },
+      resetForm() {
+        this.$refs['elForm'].resetFields()
+      },
+      handlePreview(file)
+      {
+        let formData = {'path':"/"+file.url.replace(process.env.VUE_APP_BASE_TRUE_API,"")};
+        let lens = formData.path.split(".")
+        let suffix = lens[lens.length-1]
+        download(formData).then(async (response) => {
+          const isLogin = await blobValidate(response);
+          let nt = new Date().getTime()
+          let filename = 'familyevent_'+nt+'.'+suffix
+          const blob = new Blob([response])
+          saveAs(blob, filename)
+        })
+      },
+      handleRemoveFile(file) {
+        alert(23)
+      },
+      handleRemove(file) {
+        alert(323)
+      },
+      handlePictureCardPreview(file) {
+        this.dialogImageUrl = file.url;
+        this.dialogVisible = true;
+      },
+      handleDownload(url) {
+        var formData = {'path':"/"+url.replace(process.env.VUE_APP_BASE_TRUE_API,"")};
+  
+        let lens = formData.path.split(".")
+        let suffix = lens[lens.length-1]
+        download(formData).then(async (response) => {
+          const isLogin = await blobValidate(response);
+          let nt = new Date().getTime()
+          let filename = 'property_'+nt+'.'+suffix
+          const blob = new Blob([response])
+          saveAs(blob, filename)
+        })
+      },
+      handleEdit()
+      {
+        this.dsb = false
+        this.btn = true
+      },
+      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})
+  
+          }
+        })
+  
+      }
+  
+    }
+  }
+  
+  </script>
+  <style>
+  .mt
+  {
+    position: relative;
+  }
+  .dt{
+    display: block;
+  
+  }
+  .pt{
+    right: 10px;
+    top:-3px;
+    display: block;
+    position: absolute;
+  }
+  </style>
+  
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/bignote/index.vue b/ruoyi-ui/src/views/bignote/index.vue
new file mode 100644
index 0000000..b4eeb2f
--- /dev/null
+++ b/ruoyi-ui/src/views/bignote/index.vue
@@ -0,0 +1,516 @@
+<template>
+    <div class="app-container">
+      <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
+
+          <el-form-item label="澶т簨鏍囬" prop="title">
+            <el-input
+              v-model="queryParams.title"
+              placeholder="璇疯緭鍏ユ爣棰�"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        
+          <el-form-item label="浜虹墿" prop="people">
+            <el-input
+              v-model="queryParams.people"
+              placeholder="璇疯緭鍏ヤ汉鐗�"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="鍦扮偣" prop="address">
+            <el-input
+              v-model="queryParams.address"
+              placeholder="璇疯緭鍏ュ湴鐐�"
+              clearable
+              style="width: 240px"
+              @keyup.enter.native="handleQuery"
+            />
+     
+        </el-form-item>
+        <el-form-item label="鏃堕棿">
+          <el-date-picker
+            v-model="dateRange"
+            style="width: 240px"
+            value-format="yyyy-MM-dd HH-MM"
+            type="daterange"
+            range-separator="-"
+            start-placeholder="寮�濮嬫棩鏈�"
+            end-placeholder="缁撴潫鏃ユ湡"
+          ></el-date-picker>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+        </el-form-item>
+      </el-form>
+  
+      <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>
+        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      </el-row>
+      <!-- 搴忓彿銆佹椂闂淬�佷汉鐗┿�佸湴鐐广�佸ぇ浜嬫爣棰樸�佺數瀛愭枃浠躲�佸娉� -->
+      <!-- 杩欓噷鏈変釜familyList鏁扮粍 鏄湪data()涓畾涔夌殑 -->
+      <el-table v-loading="loading" :data="familyList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55"  align="center" />
+        <el-table-column label="搴忓彿" prop="id" sortable width="120" />
+
+        <el-table-column label="鏃堕棿" align="center" sortable prop="createTime" width="180">
+          <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.createTime) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="浜虹墿" prop="people" sortable width="100" />
+        <el-table-column label="鍦扮偣" prop="address" sortable width="100" />
+        <el-table-column label="澶т簨鏍囬" prop="title" sortable :show-overflow-tooltip="true" width="150" />
+       
+        <el-table-column label="澶囨敞" prop="remark" sortable width="100" />
+        <el-table-colum label="鐢靛瓙鏂囦欢" prop="fujian" sortable width="100"/>
+        <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-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']">
+              <el-button size="mini" type="text" icon="el-icon-d-arrow-right"  @click="handleCheck(scope.row)">鏌ョ湅璇︽儏</el-button>
+  
+            </el-dropdown>
+          </template>
+        </el-table-column>
+      </el-table>
+  
+      <pagination
+        v-show="total>0"
+        :total="total"
+        :page.sync="queryParams.pageNum"
+        :limit.sync="queryParams.pageSize"
+        @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="title">
+            <el-input v-model="formDat.title" placeholder="璇疯緭鍏ュぇ浜嬫爣棰�" clearable :style="{width: '100%'}" ></el-input>
+          </el-form-item>
+          
+          <el-form-item label="浜虹墿" prop="people">
+            <el-input v-model="formDat.holder" placeholder="璇疯緭鍏ヤ汉鐗�" clearable :style="{width: '100%'}" >
+            </el-input>
+          </el-form-item>
+          <el-form-item label="鍦扮偣" prop="address">
+            <el-input v-model="formDat.address" 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">Click to upload</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";
+  
+  
+  
+  //鍦╯ystem/note/index.js涓鍏ユ帴鍙e嚱鏁�  --鎺ュソ浜�
+  import {listFamilyevent , getFamilyeventInfo , delFamilyevent  , addFamilyevent , uploadPic} from "@/api/bignote/index";
+  export default {
+    name: "Role",
+    dicts: ['sys_normal_disable'],
+    data() {
+      return {
+        // 閬僵灞�
+        disabled: false,
+  
+        loading: true,
+        formData:[],
+        // 閫変腑鏁扮粍
+        ids: [],
+        // 闈炲崟涓鐢�
+        single: true,
+        // 闈炲涓鐢�
+        multiple: true,
+        // 鏄剧ず鎼滅储鏉′欢
+        showSearch: true,
+        // 鎬绘潯鏁�
+        total: 0,
+        // 瀹跺ぇ浜嬭琛ㄦ牸鏁版嵁
+        familyList: [],
+        // 寮瑰嚭灞傛爣棰�
+        title: "",
+        // 鏄惁鏄剧ず寮瑰嚭灞�
+        open: false,
+        // 鏄惁鏄剧ず寮瑰嚭灞傦紙鏁版嵁鏉冮檺锛�
+        openDataScope: false,
+        menuExpand: false,
+        menuNodeAll: false,
+        deptExpand: true,
+        deptNodeAll: false,
+        // 鏃ユ湡鑼冨洿
+        dateRange: [],
+        // 鏁版嵁鑼冨洿閫夐」
+        fot:[".jpg",".jif"],
+        fileList:[
+        ],
+        fileListOther:[
+  
+        ],
+        dsb:true,
+        btn:false,
+        formDat: {
+          type: undefined,
+          title: undefined,
+          location: undefined,
+          holder: undefined,
+          address: undefined,
+          remark: undefined,
+          url: undefined,
+        },
+        // 鑿滃崟鍒楄〃
+        menuOptions: [],
+        // 閮ㄩ棬鍒楄〃
+        deptOptions: [],
+        // 鏌ヨ鍙傛暟
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          title:undefined,
+          people:undefined,
+          address:undefined,
+          createTime:undefined
+        },
+        // 琛ㄥ崟鍙傛暟
+        form: {},
+        defaultProps: {
+          children: "children",
+          label: "label"
+        },
+        // 琛ㄥ崟鏍¢獙
+        rules: {
+          title: [{
+            required: true,
+            message: '璇疯緭鍏ュぇ浜嬫爣棰�',
+            trigger: 'blur'
+          }],
+          
+          people: [{
+            required: true,
+            message: '璇疯緭鍏ヤ汉鐗�',
+            trigger: 'blur'
+          }],
+          address: [{
+            required: true,
+            message: '璇疯緭鍏ュ湴鐐�',
+            trigger: 'blur'
+          }],
+          remark: [{
+            required: true,
+            message: '璇疯緭鍏ュ娉�',
+            trigger: 'blur'
+          }],
+          createTime: [{
+            required: true,
+            message: '璇烽�夋嫨鏃ユ湡閫夋嫨',
+            trigger: 'change'
+          }],
+        },
+        typeOptions: [],
+      };
+    },
+    created() {
+      this.getList();
+    //   this.getCateInfor()
+  
+    },
+    methods: {
+      // 鍙栨秷鎸夐挳
+      cancelData() {
+        this.open = false;
+        this.reset();
+      },
+
+      /** 鏌ヨ瑙掕壊鍒楄〃 */  
+      //鍒楄〃鏄剧ず瀹跺ぇ浜嬭
+
+      getList() {
+        this.loading = true;
+        // console.log(this.queryParams)
+        //  listProperty(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+        listFamilyevent(this.queryParams).then(response => {
+            //  alert(123)
+            //   console.log(response.data)
+            this.familyList = response.data.data;
+  
+            this.total = response.data.total;
+            this.loading = false;
+          }
+        );
+      },
+
+      // 鍙栨秷鎸夐挳
+      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
+      },
+  
+      /** 鏂板鎸夐挳鎿嶄綔 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "娣诲姞瀹跺涵澶т簨璁颁俊鎭�";
+      },
+
+
+      /** 鏌ョ湅璇︾粏淇℃伅 */
+      handleCheck(row){
+        const id = row.id;
+        this.$router.push("/family1/bignote1/familyeventInfo/" + id);
+      },
+      /** 淇敼鎸夐挳鎿嶄綔 */
+      handleUpdate(row) {
+        const id = row.id;
+        let jd = true
+  
+        this.$router.push({
+          path:"/family1/bignote1/familyeventInfo/" + 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) {
+  
+            addFamilyevent(this.formDat).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList1();
+            });
+          }
+        });
+      },
+      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 delFamilyevent(Ids);
+        }).then(() => {
+          this.getList1();
+          this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+        }).catch(() => {});
+      },
+      /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+      handleExport() {
+        this.download('/family/zfEvent/export', {
+          ...this.queryParams
+        }, `zfEvent_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+  </script>
+  
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/note/propertyInfo.vue b/ruoyi-ui/src/views/note/propertyInfo.vue
new file mode 100644
index 0000000..2058a66
--- /dev/null
+++ b/ruoyi-ui/src/views/note/propertyInfo.vue
@@ -0,0 +1,362 @@
+<template>
+  <div class="app-container">
+    <div class="form-header mt">
+      <h4 class="dt h4">璧勪骇璇︾粏淇℃伅 </h4>
+      <el-button type="primary" class="pt"  icon="el-icon-edit" @click="handleEdit()" :disabled="btn">缂栬緫</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="绫诲埆" prop="type">
+        <el-select v-model="formData.type" placeholder="璇烽�夋嫨绫诲埆" clearable :style="{width: '100%'}" :disabled="dsb" >
+          <el-option v-for="(item, index) in typeOptions" :key="index" :label="item.label" :value="item.value"
+            :disabled="item.disabled"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鏍囬" prop="title">
+        <el-input v-model="formData.title" placeholder="璇疯緭鍏ユ爣棰�" clearable :style="{width: '100%'}" :disabled="dsb"></el-input>
+      </el-form-item>
+      <el-form-item label="瀛樺偍鍦板潃" prop="location">
+        <el-input v-model="formData.location" placeholder="璇疯緭鍏ュ瓨鍌ㄥ湴鍧�" clearable :style="{width: '100%'}" :disabled="dsb">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="鎸佹湁浜�" prop="holder">
+        <el-input v-model="formData.holder" placeholder="璇疯緭鍏ユ寔鏈変汉" clearable :style="{width: '100%'}" :disabled="dsb">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="鍏蜂綋浣嶇疆" prop="address">
+        <el-input v-model="formData.address" placeholder="璇疯緭鍏ュ叿浣撲綅缃�" clearable :style="{width: '100%'}" :disabled="dsb">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="remark">
+        <el-input v-model="formData.remark" placeholder="璇疯緭鍏ュ娉�" clearable :style="{width: '100%'}" :disabled="dsb"></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: 147px; height: 147px"
+          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="handleDownload(file.url)"
+        >
+          <i class="el-icon-download"></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-preview="handlePreview"
+
+        :on-remove="handleRemove"
+        :http-request="requestUpload"
+        :show-file-list="true"
+      >
+        <el-button type="primary">Click to upload</el-button>
+        <template #tip>
+          <div class="el-upload__tip">
+          </div>
+        </template>
+
+
+      </el-upload>
+
+      <el-form-item size="large">
+        <el-button type="primary" @click="submitForm" :disabled="dsb">淇敼</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-dialog  :visible.sync="dialogVisible">
+      <img w-full :src="dialogImageUrl" alt="Preview Image" />
+    </el-dialog>
+  </div>
+</template>
+<script>
+import {getPropertyInfo, updateProperty, uploadPic, download, getCategory} from "@/api/note/index";
+import {addRole, updateRole} from "@/api/system/role";
+import {blobValidate} from "@/utils/ruoyi";
+import errorCode from "@/utils/errorCode";
+import {Message} from "element-ui";
+
+export default {
+  components: {},
+  props: [],
+  data() {
+    return {
+      cdi:"璧勪骇璇︾粏淇℃伅",
+      udi:"璧勪骇淇℃伅淇敼",
+      fot:[".jpg",".jif"],
+      fileList:[
+      ],
+      fileListOther:[
+
+      ],
+      dsb:true,
+      btn:false,
+      formData: {
+        id: undefined,
+        type: undefined,
+        title: undefined,
+        location: undefined,
+        holder: undefined,
+        address: undefined,
+        remark: undefined,
+        url: undefined,
+      },
+        dialogImageUrl: '',
+        dialogVisible: false,
+        disabled: false,
+      rules: {
+        id: [{
+          required: true,
+          message: '璇疯緭鍏d',
+          trigger: 'blur'
+        }],
+        type: [{
+          required: true,
+          message: '璇烽�夋嫨绫诲埆',
+          trigger: 'change'
+        }],
+        title: [{
+          required: true,
+          message: '璇疯緭鍏ユ爣棰�',
+          trigger: 'blur'
+        }],
+        location: [{
+          required: true,
+          message: '璇疯緭鍏ュ瓨鍌ㄥ湴鍧�',
+          trigger: 'blur'
+        }],
+        holder: [{
+          required: true,
+          message: '璇疯緭鍏ユ寔鏈変汉',
+          trigger: 'blur'
+        }],
+        address: [{
+          required: true,
+          message: '璇疯緭鍏ュ叿浣撲綅缃�',
+          trigger: 'blur'
+        }],
+        remark: [{
+          required: true,
+          message: '璇疯緭鍏ュ娉�',
+          trigger: 'blur'
+        }],
+
+      },
+      typeOptions: [],
+    }
+  },
+  computed: {},
+  watch: {},
+  created() {
+    const id = this.$route.params && this.$route.params.id;
+    let jd;
+    if(this.$route.query.detail!=undefined)
+    {
+      jd =  this.$route.query.detail
+      this.btn= jd
+      this.dsb = !jd
+      document.title = "淇敼璧勪骇璇︾粏淇℃伅";
+      this.$route.meta.title = "淇敼璧勪骇璇︾粏淇℃伅";//鍒楄〃鐨勫悕绉�
+    }
+    else{
+      document.title = "鏌ョ湅璧勪骇璇︾粏淇℃伅";
+      this.$route.meta.title = "鏌ョ湅璧勪骇璇︾粏淇℃伅";//鍒楄〃鐨勫悕绉�
+    }
+
+    let _this = this
+    if (id) {
+      this.loading = true;
+      getPropertyInfo(id).then((response) => {
+        this.formData = response.data;
+        let paths = response.data.url.split(",");
+        for(let i = 0; i < paths.length; i++)
+        {
+          if(paths[i]!="") {
+
+            let pth = paths[i].substr(paths[i].length - 4, paths[i].length)
+
+            if (_this.fot.includes(pth) === true)
+              _this.fileList.push({name:paths[i],url: process.env.VUE_APP_BASE_TRUE_API+paths[i]})
+            else {
+              // alert(paths[i])
+              let nms = paths[i].split("\/")
+              let nm = nms[nms.length - 1]
+              _this.fileListOther.push({name:nm, url: process.env.VUE_APP_BASE_TRUE_API+paths[i]})
+            }
+          }
+        }
+        this.loading = false;
+      });
+      this.getCateInfor()
+
+    }
+  },
+  mounted() {},
+  methods: {
+    /** 鏌ヨ绫诲埆淇℃伅 */
+    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]})
+        })
+      })
+    },
+    submitForm() {
+      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.formData.url = ul+","+uls
+
+      this.$refs['elForm'].validate(valid => {
+
+
+        if (valid) {
+          if (this.formData.id != undefined) {
+            updateProperty(this.formData).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              // this.open = false;
+              this.btn=false
+            });
+          } else {
+            this.$modal.msgSuccess("淇敼澶辫触");
+
+          }
+        }
+      })
+    },
+    resetForm() {
+      this.$refs['elForm'].resetFields()
+    },
+    handlePreview(file)
+    {
+      let formData = {'path':"/"+file.url.replace(process.env.VUE_APP_BASE_TRUE_API,"")};
+      let lens = formData.path.split(".")
+      let suffix = lens[lens.length-1]
+      download(formData).then(async (response) => {
+        const isLogin = await blobValidate(response);
+        let nt = new Date().getTime()
+        let filename = 'property_'+nt+'.'+suffix
+        const blob = new Blob([response])
+        saveAs(blob, filename)
+      })
+    },
+    handleRemoveFile(file) {
+      alert(23)
+    },
+    handleRemove(file) {
+      alert(323)
+      },
+      handlePictureCardPreview(file) {
+        this.dialogImageUrl = file.url;
+        this.dialogVisible = true;
+      },
+      handleDownload(url) {
+        var formData = {'path':"/"+url.replace(process.env.VUE_APP_BASE_TRUE_API,"")};
+
+        let lens = formData.path.split(".")
+        let suffix = lens[lens.length-1]
+        download(formData).then(async (response) => {
+          const isLogin = await blobValidate(response);
+          let nt = new Date().getTime()
+          let filename = 'property_'+nt+'.'+suffix
+          const blob = new Blob([response])
+          saveAs(blob, filename)
+        })
+      },
+    handleEdit()
+    {
+      this.dsb = false
+      this.btn = true
+    },
+    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})
+
+        }
+      })
+
+    }
+
+  }
+}
+
+</script>
+<style>
+.mt
+{
+  position: relative;
+}
+.dt{
+  display: block;
+
+}
+.pt{
+  right: 10px;
+  top:-3px;
+  display: block;
+  position: absolute;
+}
+</style>
diff --git a/ruoyi-ui/src/views/system/role/index.vue b/ruoyi-ui/src/views/system/role/index.vue
index fb3b5ef..3474fa6 100644
--- a/ruoyi-ui/src/views/system/role/index.vue
+++ b/ruoyi-ui/src/views/system/role/index.vue
@@ -602,4 +602,353 @@
     }
   }
 };
+</script>
+
+export default {
+  name: "Role",
+  dicts: ['sys_normal_disable'],
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 瑙掕壊琛ㄦ牸鏁版嵁
+      roleList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏄惁鏄剧ず寮瑰嚭灞傦紙鏁版嵁鏉冮檺锛�
+      openDataScope: false,
+      menuExpand: false,
+      menuNodeAll: false,
+      deptExpand: true,
+      deptNodeAll: false,
+      // 鏃ユ湡鑼冨洿
+      dateRange: [],
+      // 鏁版嵁鑼冨洿閫夐」
+      dataScopeOptions: [
+        {
+          value: "1",
+          label: "鍏ㄩ儴鏁版嵁鏉冮檺"
+        },
+        {
+          value: "2",
+          label: "鑷畾鏁版嵁鏉冮檺"
+        },
+        {
+          value: "3",
+          label: "鏈儴闂ㄦ暟鎹潈闄�"
+        },
+        {
+          value: "4",
+          label: "鏈儴闂ㄥ強浠ヤ笅鏁版嵁鏉冮檺"
+        },
+        {
+          value: "5",
+          label: "浠呮湰浜烘暟鎹潈闄�"
+        }
+      ],
+      // 鑿滃崟鍒楄〃
+      menuOptions: [],
+      // 閮ㄩ棬鍒楄〃
+      deptOptions: [],
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        roleName: undefined,
+        roleKey: undefined,
+        status: undefined
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        roleName: [
+          { required: true, message: "瑙掕壊鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        roleKey: [
+          { required: true, message: "鏉冮檺瀛楃涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        roleSort: [
+          { required: true, message: "瑙掕壊椤哄簭涓嶈兘涓虹┖", trigger: "blur" }
+        ]
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨ瑙掕壊鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listRole(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          this.roleList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    /** 鏌ヨ鑿滃崟鏍戠粨鏋� */
+    getMenuTreeselect() {
+      menuTreeselect().then(response => {
+        this.menuOptions = response.data;
+      });
+    },
+    // 鎵�鏈夎彍鍗曡妭鐐规暟鎹�
+    getMenuAllCheckedKeys() {
+      // 鐩墠琚�変腑鐨勮彍鍗曡妭鐐�
+      let checkedKeys = this.$refs.menu.getCheckedKeys();
+      // 鍗婇�変腑鐨勮彍鍗曡妭鐐�
+      let halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys();
+      checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
+      return checkedKeys;
+    },
+    // 鎵�鏈夐儴闂ㄨ妭鐐规暟鎹�
+    getDeptAllCheckedKeys() {
+      // 鐩墠琚�変腑鐨勯儴闂ㄨ妭鐐�
+      let checkedKeys = this.$refs.dept.getCheckedKeys();
+      // 鍗婇�変腑鐨勯儴闂ㄨ妭鐐�
+      let halfCheckedKeys = this.$refs.dept.getHalfCheckedKeys();
+      checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
+      return checkedKeys;
+    },
+    /** 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戠粨鏋� */
+    getRoleMenuTreeselect(roleId) {
+      return roleMenuTreeselect(roleId).then(response => {
+        this.menuOptions = response.menus;
+        return response;
+      });
+    },
+    /** 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戠粨鏋� */
+    getDeptTree(roleId) {
+      return deptTreeSelect(roleId).then(response => {
+        this.deptOptions = response.depts;
+        return response;
+      });
+    },
+    // 瑙掕壊鐘舵�佷慨鏀�
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
+      this.$modal.confirm('纭瑕�"' + text + '""' + row.roleName + '"瑙掕壊鍚楋紵').then(function() {
+        return changeRoleStatus(row.roleId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "鎴愬姛");
+      }).catch(function() {
+        row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    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.roleId)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+    },
+    // 鏇村鎿嶄綔瑙﹀彂
+    handleCommand(command, row) {
+      switch (command) {
+        case "handleDataScope":
+          this.handleDataScope(row);
+          break;
+        case "handleAuthUser":
+          this.handleAuthUser(row);
+          break;
+        default:
+          break;
+      }
+    },
+    // 鏍戞潈闄愶紙灞曞紑/鎶樺彔锛�
+    handleCheckedTreeExpand(value, type) {
+      if (type == 'menu') {
+        let treeList = this.menuOptions;
+        for (let i = 0; i < treeList.length; i++) {
+          this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;
+        }
+      } else if (type == 'dept') {
+        let treeList = this.deptOptions;
+        for (let i = 0; i < treeList.length; i++) {
+          this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value;
+        }
+      }
+    },
+    // 鏍戞潈闄愶紙鍏ㄩ��/鍏ㄤ笉閫夛級
+    handleCheckedTreeNodeAll(value, type) {
+      if (type == 'menu') {
+        this.$refs.menu.setCheckedNodes(value ? this.menuOptions: []);
+      } else if (type == 'dept') {
+        this.$refs.dept.setCheckedNodes(value ? this.deptOptions: []);
+      }
+    },
+    // 鏍戞潈闄愶紙鐖跺瓙鑱斿姩锛�
+    handleCheckedTreeConnect(value, type) {
+      if (type == 'menu') {
+        this.form.menuCheckStrictly = value ? true: false;
+      } else if (type == 'dept') {
+        this.form.deptCheckStrictly = value ? true: false;
+      }
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.getMenuTreeselect();
+      this.open = true;
+      this.title = "娣诲姞瑙掕壊";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const roleId = row.roleId || this.ids
+      const roleMenu = this.getRoleMenuTreeselect(roleId);
+      getRole(roleId).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.$nextTick(() => {
+          roleMenu.then(res => {
+            let checkedKeys = res.checkedKeys
+            checkedKeys.forEach((v) => {
+                this.$nextTick(()=>{
+                    this.$refs.menu.setChecked(v, true ,false);
+                })
+            })
+          });
+        });
+        this.title = "淇敼瑙掕壊";
+      });
+    },
+    /** 閫夋嫨瑙掕壊鏉冮檺鑼冨洿瑙﹀彂 */
+    dataScopeSelectChange(value) {
+      if(value !== '2') {
+        this.$refs.dept.setCheckedKeys([]);
+      }
+    },
+    /** 鍒嗛厤鏁版嵁鏉冮檺鎿嶄綔 */
+    handleDataScope(row) {
+      this.reset();
+      const deptTreeSelect = this.getDeptTree(row.roleId);
+      getRole(row.roleId).then(response => {
+        this.form = response.data;
+        this.openDataScope = true;
+        this.$nextTick(() => {
+          deptTreeSelect.then(res => {
+            this.$refs.dept.setCheckedKeys(res.checkedKeys);
+          });
+        });
+        this.title = "鍒嗛厤鏁版嵁鏉冮檺";
+      });
+    },
+    /** 鍒嗛厤鐢ㄦ埛鎿嶄綔 */
+    handleAuthUser: function(row) {
+      const roleId = row.roleId;
+      this.$router.push("/system/role-auth/user/" + roleId);
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.roleId != undefined) {
+            this.form.menuIds = this.getMenuAllCheckedKeys();
+            updateRole(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            this.form.menuIds = this.getMenuAllCheckedKeys();
+            addRole(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鎻愪氦鎸夐挳锛堟暟鎹潈闄愶級 */
+    submitDataScope: function() {
+      if (this.form.roleId != undefined) {
+        this.form.deptIds = this.getDeptAllCheckedKeys();
+        dataScope(this.form).then(response => {
+          this.$modal.msgSuccess("淇敼鎴愬姛");
+          this.openDataScope = false;
+          this.getList();
+        });
+      }
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const roleIds = row.roleId || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎瑙掕壊缂栧彿涓�"' + roleIds + '"鐨勬暟鎹」锛�').then(function() {
+        return delRole(roleIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('system/role/export', {
+        ...this.queryParams
+      }, `role_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
 </script>
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/system/user/index.vue b/ruoyi-ui/src/views/system/user/index.vue
index ae87fe4..1e11b24 100644
--- a/ruoyi-ui/src/views/system/user/index.vue
+++ b/ruoyi-ui/src/views/system/user/index.vue
@@ -606,6 +606,330 @@
     /** 鎻愪氦鎸夐挳 */
     submitForm: function() {
       this.$refs["form"].validate(valid => {
+        alert(valid)
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUser(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addUser(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const userIds = row.userId || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�').then(function() {
+        return delUser(userIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('system/user/export', {
+        ...this.queryParams
+      }, `user_${new Date().getTime()}.xlsx`)
+    },
+    /** 瀵煎叆鎸夐挳鎿嶄綔 */
+    handleImport() {
+      this.upload.title = "鐢ㄦ埛瀵煎叆";
+      this.upload.open = true;
+    },
+    /** 涓嬭浇妯℃澘鎿嶄綔 */
+    importTemplate() {
+      this.download('system/user/importTemplate', {
+      }, `user_template_${new Date().getTime()}.xlsx`)
+    },
+    // 鏂囦欢涓婁紶涓鐞�
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 鏂囦欢涓婁紶鎴愬姛澶勭悊
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "瀵煎叆缁撴灉", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    // 鎻愪氦涓婁紶鏂囦欢
+    submitFileForm() {
+      this.$refs.upload.submit();
+    }
+  }
+};
+</script>
+
+export default {
+  name: "User",
+  dicts: ['sys_normal_disable', 'sys_user_sex'],
+  components: { Treeselect },
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鐢ㄦ埛琛ㄦ牸鏁版嵁
+      userList: null,
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 閮ㄩ棬鏍戦�夐」
+      deptOptions: undefined,
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 閮ㄩ棬鍚嶇О
+      deptName: undefined,
+      // 榛樿瀵嗙爜
+      initPassword: undefined,
+      // 鏃ユ湡鑼冨洿
+      dateRange: [],
+      // 宀椾綅閫夐」
+      postOptions: [],
+      // 瑙掕壊閫夐」
+      roleOptions: [],
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      defaultProps: {
+        children: "children",
+        label: "label"
+      },
+      // 鐢ㄦ埛瀵煎叆鍙傛暟
+      upload: {
+        // 鏄惁鏄剧ず寮瑰嚭灞傦紙鐢ㄦ埛瀵煎叆锛�
+        open: false,
+        // 寮瑰嚭灞傛爣棰橈紙鐢ㄦ埛瀵煎叆锛�
+        title: "",
+        // 鏄惁绂佺敤涓婁紶
+        isUploading: false,
+        // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹�
+        updateSupport: 0,
+        // 璁剧疆涓婁紶鐨勮姹傚ご閮�
+        headers: { Authorization: "Bearer " + getToken() },
+        // 涓婁紶鐨勫湴鍧�
+        url: process.env.VUE_APP_BASE_API + "/system/user/importData"
+      },
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userName: undefined,
+        phonenumber: undefined,
+        status: undefined,
+        deptId: undefined
+      },
+      // 鍒椾俊鎭�
+      columns: [
+        { key: 0, label: `鐢ㄦ埛缂栧彿`, visible: true },
+        { key: 1, label: `鐢ㄦ埛鍚嶇О`, visible: true },
+        { key: 2, label: `鐢ㄦ埛鏄电О`, visible: true },
+        { key: 3, label: `閮ㄩ棬`, visible: true },
+        { key: 4, label: `鎵嬫満鍙风爜`, visible: true },
+        { key: 5, label: `鐘舵�乣, visible: true },
+        { key: 6, label: `鍒涘缓鏃堕棿`, visible: true }
+      ],
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        userName: [
+          { required: true, message: "鐢ㄦ埛鍚嶇О涓嶈兘涓虹┖", trigger: "blur" },
+          { min: 2, max: 20, message: '鐢ㄦ埛鍚嶇О闀垮害蹇呴』浠嬩簬 2 鍜� 20 涔嬮棿', trigger: 'blur' }
+        ],
+        nickName: [
+          { required: true, message: "鐢ㄦ埛鏄电О涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        password: [
+          { required: true, message: "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" },
+          { min: 5, max: 20, message: '鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿', trigger: 'blur' }
+        ],
+        email: [
+          {
+            type: "email",
+            message: "璇疯緭鍏ユ纭殑閭鍦板潃",
+            trigger: ["blur", "change"]
+          }
+        ],
+        phonenumber: [
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
+            trigger: "blur"
+          }
+        ]
+      }
+    };
+  },
+  watch: {
+    // 鏍规嵁鍚嶇О绛涢�夐儴闂ㄦ爲
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.getList();
+    this.getDeptTree();
+    this.getConfigKey("sys.user.initPassword").then(response => {
+      this.initPassword = response.msg;
+    });
+  },
+  methods: {
+    /** 鏌ヨ鐢ㄦ埛鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+          this.userList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    /** 鏌ヨ閮ㄩ棬涓嬫媺鏍戠粨鏋� */
+    getDeptTree() {
+      deptTreeSelect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 绛涢�夎妭鐐�
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.label.indexOf(value) !== -1;
+    },
+    // 鑺傜偣鍗曞嚮浜嬩欢
+    handleNodeClick(data) {
+      this.queryParams.deptId = data.id;
+      this.handleQuery();
+    },
+    // 鐢ㄦ埛鐘舵�佷慨鏀�
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
+      this.$modal.confirm('纭瑕�"' + text + '""' + row.userName + '"鐢ㄦ埛鍚楋紵').then(function() {
+        return changeUserStatus(row.userId, row.status);
+      }).then(() => {
+        this.$modal.msgSuccess(text + "鎴愬姛");
+      }).catch(function() {
+        row.status = row.status === "0" ? "1" : "0";
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        userId: undefined,
+        deptId: undefined,
+        userName: undefined,
+        nickName: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: []
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.queryParams.deptId = undefined;
+      this.$refs.tree.setCurrentKey(null);
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    // 鏇村鎿嶄綔瑙﹀彂
+    handleCommand(command, row) {
+      switch (command) {
+        case "handleResetPwd":
+          this.handleResetPwd(row);
+          break;
+        case "handleAuthRole":
+          this.handleAuthRole(row);
+          break;
+        default:
+          break;
+      }
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      getUser().then(response => {
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.open = true;
+        this.title = "娣诲姞鐢ㄦ埛";
+        this.form.password = this.initPassword;
+      });
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const userId = row.userId || this.ids;
+      getUser(userId).then(response => {
+        this.form = response.data;
+        this.postOptions = response.posts;
+        this.roleOptions = response.roles;
+        this.$set(this.form, "postIds", response.postIds);
+        this.$set(this.form, "roleIds", response.roleIds);
+        this.open = true;
+        this.title = "淇敼鐢ㄦ埛";
+        this.form.password = "";
+      });
+    },
+    /** 閲嶇疆瀵嗙爜鎸夐挳鎿嶄綔 */
+    handleResetPwd(row) {
+      this.$prompt('璇疯緭鍏�"' + row.userName + '"鐨勬柊瀵嗙爜', "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        closeOnClickModal: false,
+        inputPattern: /^.{5,20}$/,
+        inputErrorMessage: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿"
+      }).then(({ value }) => {
+          resetUserPwd(row.userId, value).then(response => {
+            this.$modal.msgSuccess("淇敼鎴愬姛锛屾柊瀵嗙爜鏄細" + value);
+          });
+        }).catch(() => {});
+    },
+    /** 鍒嗛厤瑙掕壊鎿嶄綔 */
+    handleAuthRole: function(row) {
+      const userId = row.userId;
+      this.$router.push("/system/user-auth/role/" + userId);
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.userId != undefined) {
             updateUser(this.form).then(response => {
diff --git a/ruoyi-ui/src/views/tmp.vue b/ruoyi-ui/src/views/tmp.vue
new file mode 100644
index 0000000..0da4fdb
--- /dev/null
+++ b/ruoyi-ui/src/views/tmp.vue
@@ -0,0 +1,12 @@
+<template>
+  <div>
+
+  dddddddddddddddddddddasfdasdfasdfasd
+  </div>
+</template>
+
+<script>
+</script>
+<style scoped>
+
+</style>
diff --git a/ruoyi-ui/target/npmlist.json b/ruoyi-ui/target/npmlist.json
new file mode 100644
index 0000000..a738a25
--- /dev/null
+++ b/ruoyi-ui/target/npmlist.json
@@ -0,0 +1 @@
+{"version":"3.8.5","name":"ruoyi","dependencies":{"@riophae/vue-treeselect":{"version":"0.4.0"},"axios":{"version":"0.24.0"},"clipboard":{"version":"2.0.8"},"core-js":{"version":"3.25.3"},"echarts":{"version":"5.4.0"},"element-ui":{"version":"2.15.12"},"file-saver":{"version":"2.0.5"},"fuse.js":{"version":"6.4.3"},"highlight.js":{"version":"9.18.5"},"js-beautify":{"version":"1.13.0"},"js-cookie":{"version":"3.0.1"},"jsencrypt":{"version":"3.0.0-rc.1"},"nprogress":{"version":"0.2.0"},"quill":{"version":"1.3.7"},"screenfull":{"version":"5.0.2"},"sortablejs":{"version":"1.10.2"},"vue-count-to":{"version":"1.0.13"},"vue-cropper":{"version":"0.5.5"},"vue-meta":{"version":"2.4.0"},"vue-router":{"version":"3.4.9"},"vue":{"version":"2.6.12"},"vuedraggable":{"version":"2.24.3"},"vuex":{"version":"3.6.0"}}}
\ No newline at end of file
diff --git a/ruoyi-ui/vue.config.js b/ruoyi-ui/vue.config.js
index 767a3eb..05ddcda 100644
--- a/ruoyi-ui/vue.config.js
+++ b/ruoyi-ui/vue.config.js
@@ -7,9 +7,9 @@
 
 const CompressionPlugin = require('compression-webpack-plugin')
 
-const name = process.env.VUE_APP_TITLE || '寮犳皬APP' // 缃戦〉鏍囬
+const name = process.env.VUE_APP_TITLE || '鑻ヤ緷绠$悊绯荤粺' // 缃戦〉鏍囬
 
-const port = process.env.port || process.env.npm_config_port || 8088 // 绔彛
+const port = process.env.port || process.env.npm_config_port || 80 // 绔彛
 
 // vue.config.js 閰嶇疆璇存槑
 //瀹樻柟vue.config.js 鍙傝�冩枃妗� https://cli.vuejs.org/zh/config/#css-loaderoptions
@@ -35,8 +35,7 @@
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
-        // target: `http://localhost:8080`,
-        target: `http://47.93.189.255:8080`,
+        target: `http://47.93.189.255:8080/`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''
@@ -47,15 +46,8 @@
   },
   css: {
     loaderOptions: {
-      // sass: {
-      //   sassOptions: { outputStyle: "expanded" }
-      // }
-      postcss:{
-        plugins:[
-          require('postcss-px2rem')({
-            remUnit:192
-          })
-        ]
+      sass: {
+        sassOptions: { outputStyle: "expanded" }
       }
     }
   },
@@ -97,17 +89,6 @@
         symbolId: 'icon-[name]'
       })
       .end()
-    //
-    // config.module
-    //   .rule("css")
-    //   .test(/\.css$/)
-    //   .oneOf("vue")
-    //   .resourceQuery(/\?vue/)
-    //   .use("px2rem")
-    //   .loader("px2rem-loader")
-    //   .options({
-    //     remUnit: 192 // 璁捐绋垮ぇ灏忔瘮渚� / 10
-    //   });
 
     config
       .when(process.env.NODE_ENV !== 'development',
@@ -152,5 +133,4 @@
         }
       )
   }
-
 }

--
Gitblit v1.9.1