From a52f8c508d08014d1a153cfc02e12b5fc185a3a4 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期四, 11 七月 2024 15:28:59 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 admin/src/components/common/RichEditor.vue                                          |   16 
 admin/src/views/business/newsDz.vue                                                 |   32 
 server/service/src/main/java/com/doumee/dao/business/model/News.java                |    7 
 server/service/src/main/java/com/doumee/core/utils/tyyun/TyyZosUtil.java            |    6 
 server/service/src/main/java/com/doumee/core/utils/QrCodeUtils.java                 |    5 
 server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomIAMServiceImpl.java       |   38 +
 server/service/src/main/java/com/doumee/dao/business/model/Users.java               |   20 
 server/service/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java  |    8 
 server/admin/src/main/java/com/doumee/api/business/PushController.java              |    2 
 admin/src/views/business/categorySeg.vue                                            |  127 +---
 admin/vue.config.js                                                                 |    2 
 admin/src/api/business/multifile.js                                                 |    5 
 admin/src/components/business/OperaNewsDzWindow.vue                                 |  126 +++++
 admin/src/components/system/dict/OperaDictDataWindow.vue                            |    5 
 admin/src/components/common/upload.vue                                              |  133 +++--
 admin/src/views/business/news.vue                                                   |   57 +
 server/service/src/main/java/com/doumee/core/utils/Constants.java                   |  112 +++-
 admin/src/components/system/dict/DictDataManagerWindow.vue                          |    5 
 server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java |  150 ++++--
 server/service/src/main/resources/mappers/SystemDictDataMapper.xml                  |    4 
 server/service/src/main/java/com/doumee/dao/business/model/Multifile.java           |    8 
 admin/.env.development                                                              |    1 
 server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java  |  222 ++++++++-
 admin/src/components/business/OperaNewsWindow.vue                                   |  172 +++++--
 24 files changed, 868 insertions(+), 395 deletions(-)

diff --git a/admin/.env.development b/admin/.env.development
index 313f893..aa3a833 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -1,2 +1,3 @@
 # 寮�鍙戠幆澧冮厤缃�
 NODE_ENV = 'development'
+VUE_APP_BASE_API = 'http://localhost:10028'
diff --git a/admin/src/api/business/multifile.js b/admin/src/api/business/multifile.js
index 1fd3d9d..059a8a0 100644
--- a/admin/src/api/business/multifile.js
+++ b/admin/src/api/business/multifile.js
@@ -15,6 +15,11 @@
   })
 }
 
+export function uploadFile (data) {
+  return request.post('/public/upload', data, {
+    trim: true
+  })
+}
 // 鍒涘缓
 export function create (data) {
   return request.post('/business/multifile/create', data)
diff --git a/admin/src/components/business/OperaNewsDzWindow.vue b/admin/src/components/business/OperaNewsDzWindow.vue
new file mode 100644
index 0000000..2382ff8
--- /dev/null
+++ b/admin/src/components/business/OperaNewsDzWindow.vue
@@ -0,0 +1,126 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    width="60%"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鏍囬" prop="title" required>
+        <el-input v-model="form.title" placeholder="璇疯緭鍏ユ爣棰�" v-trim/>
+      </el-form-item>
+      <el-form-item label="鍓爣棰�" prop="subTitle">
+        <el-input type="textarea" v-model="form.subTitle" placeholder="璇疯緭鍏ュ壇鏍囬" v-trim maxLength="200" />
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status" required>
+        <el-radio-group v-model="form.status"  >
+          <el-radio :label="0" >灞曠ず</el-radio>
+          <el-radio :label="1">涓嶅睍绀�</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="鍒楄〃鍥�/瑙嗛"   prop="files" >
+        <upload width="100px" height="100px" :max-length="1"   @dele="delFile" :list="form.fileList" accept=".png,.jpg,.jpeg,.mp4" folder="news" @loading="loading = true" @success="fileResult($event)" />
+      </el-form-item>
+      <el-form-item label="璺宠浆绫诲瀷" prop="linkType" required>
+        <el-radio-group v-model="form.linkType"  >
+          <el-radio :label="0" >瀵屾枃鏈�</el-radio>
+          <el-radio :label="1">澶栭摼</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item :label="form.linkType == 1?'澶栬仈鍦板潃':'鍐呭'" prop="content">
+        <RichEditor v-if="form.linkType != 1"   :richData="form.content" :styleEditor="'border: 1px solid #ccc;display: inline-block;'" @getWangedditor="getWangedditor" :readonly="false"/>
+        <el-input  v-else v-model="form.content" type="tex" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+
+      <el-form-item label="鎺掑簭鐮侊紙鍗囧簭锛�" prop="sortnum">
+        <el-input   v-model="form.sortnum"   type="number"  placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="remark">
+        <el-input v-model="form.remark" type="tex" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import RichEditor from '@/components/common/RichEditor'
+import upload from '@/components/common/upload'
+export default {
+  name: 'OperaNewsWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow, RichEditor, upload },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        remark: '',
+        title: '',
+        subTitle: '',
+        sortnum: '',
+        content: '',
+        linkType: 0,
+        status: 0,
+        fileList: [],
+        type: 1
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+        title: [{ required: true, message: '璇疯緭鍏ユ爣棰�' }],
+        status: [{ required: true, message: '璇烽�夋嫨鐘舵��' }],
+        linkType: [{ required: true, message: '璇烽�夋嫨璺宠浆绫诲瀷' }]
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/news',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    getWangedditor (val) {
+      this.form.content = val
+    },
+    open (title, target) {
+      this.title = title
+      this.visible = true
+      this.form.fileList = []
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+        this.form.fileType = target.fileType || 0
+        const files = target.fileList || []
+        if (files.length > 0) {
+          this.form.fileList.push(files[0])
+        }
+      })
+    },
+    delFile (index) {
+      this.form.fileList.splice(index, 1)
+    },
+    fileResult (e) {
+      this.form.fileList = this.form.fileList || []
+      this.form.fileList.push({
+        fileurlFull: e.url,
+        fileurl: e.imgaddr,
+        name: e.originname,
+        type: e.type
+      })
+    }
+  }
+}
+</script>
diff --git a/admin/src/components/business/OperaNewsWindow.vue b/admin/src/components/business/OperaNewsWindow.vue
index 9db6ae7..548f327 100644
--- a/admin/src/components/business/OperaNewsWindow.vue
+++ b/admin/src/components/business/OperaNewsWindow.vue
@@ -1,102 +1,82 @@
 <template>
   <GlobalWindow
     :title="title"
+    width="60%"
     :visible.sync="visible"
     :confirm-working="isWorking"
     @confirm="confirm"
   >
     <el-form :model="form" ref="form" :rules="rules">
-      <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator">
-        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" v-trim/>
+      <el-form-item label="鏂囨" prop="title" required>
+        <el-input type="textarea" v-model="form.title" placeholder="璇疯緭鍏ユ爣棰�" v-trim maxlength="200"/>
       </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
-        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      <el-form-item label="鍙戝竷鏃堕棿" prop="publishDate" required>
+        <el-date-picker
+            v-model="form.publishDate"
+            type="datetime"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            format="yyyy-MM-dd HH:mm:ss"
+            placeholder="閫夋嫨鏃堕棿">
+        </el-date-picker>
       </el-form-item>
-      <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
-        <el-input v-model="form.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" v-trim/>
+      <el-form-item label="鐘舵��" prop="status" required>
+        <el-radio-group v-model="form.status"  >
+          <el-radio :label="0" >灞曠ず</el-radio>
+          <el-radio :label="1">涓嶅睍绀�</el-radio>
+        </el-radio-group>
       </el-form-item>
-      <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
-        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�"></el-date-picker>
+      <el-form-item label="闄勪欢绫诲瀷" prop="fileType" required>
+        <el-radio-group v-model="form.fileType"  >
+          <el-radio :label="0" >鍥剧墖</el-radio>
+          <el-radio :label="1">瑙嗛</el-radio>
+        </el-radio-group>
       </el-form-item>
-      <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
-        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" v-trim/>
+      <el-form-item label="鍥鹃泦涓婁紶 锛堟渶澶�9寮狅級"    v-if="form.fileType !=1">
+        <upload width="100px" height="100px" :max-length="9" @dele="delFile" :list="fileImgList" accept=".png,.jpg,.jpeg" folder="news" @loading="loading = true" @success="fileResult($event)" />
       </el-form-item>
-      <el-form-item label="澶囨敞" prop="remark">
-        <el-input v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      <el-form-item label="瑙嗛涓婁紶锛堝崟涓級"    v-if="form.fileType === 1">
+        <upload width="100px" height="100px" :max-length="1"   @dele="delFile" :list="fileVideoList" accept=".mp4" folder="news" @loading="loading = true" @success="fileResult($event)" />
       </el-form-item>
-      <el-form-item label="鏍囬" prop="title">
-        <el-input v-model="form.title" placeholder="璇疯緭鍏ユ爣棰�" v-trim/>
+      <el-form-item label="鎺掑簭鐮侊紙鍗囧簭锛�" prop="sortnum">
+        <el-input   v-model="form.sortnum"   type="number"  placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
       </el-form-item>
-      <el-form-item label="鍓爣棰�" prop="subTitle">
-        <el-input v-model="form.subTitle" placeholder="璇疯緭鍏ュ壇鏍囬" v-trim/>
-      </el-form-item>
-      <el-form-item label="鎺掑簭鐮�" prop="sortnum">
-        <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
-      </el-form-item>
-      <el-form-item label="鍐呭" prop="content">
-        <el-input v-model="form.content" placeholder="璇疯緭鍏ュ唴瀹�" v-trim/>
-      </el-form-item>
-      <el-form-item label="璺宠浆绫诲瀷 0瀵屾枃鏈� 1澶栭摼" prop="linkType">
-        <el-input v-model="form.linkType" placeholder="璇疯緭鍏ヨ烦杞被鍨� 0瀵屾枃鏈� 1澶栭摼" v-trim/>
-      </el-form-item>
-      <el-form-item label="鐘舵�� 0灞曠ず 1涓嶅睍绀�" prop="status">
-        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0灞曠ず 1涓嶅睍绀�" v-trim/>
-      </el-form-item>
-      <el-form-item label="娴忚閲�" prop="lookNum">
-        <el-input v-model="form.lookNum" placeholder="璇疯緭鍏ユ祻瑙堥噺" v-trim/>
-      </el-form-item>
-      <el-form-item label="涓嬭浇閲�" prop="donwloadNum">
-        <el-input v-model="form.donwloadNum" placeholder="璇疯緭鍏ヤ笅杞介噺" v-trim/>
-      </el-form-item>
-      <el-form-item label="鏈�杩戝彂甯冩椂闂�" prop="publishDate">
-        <el-date-picker v-model="form.publishDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ渶杩戝彂甯冩椂闂�"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="鏈�杩戝彂甯冧汉浜虹紪鐮�(鍏宠仈system_user)" prop="publishUserid">
-        <el-input v-model="form.publishUserid" placeholder="璇疯緭鍏ユ渶杩戝彂甯冧汉浜虹紪鐮�(鍏宠仈system_user)" v-trim/>
-      </el-form-item>
-      <el-form-item label="鏈�杩戝彂甯冨娉�" prop="publishInfo">
-        <el-input v-model="form.publishInfo" placeholder="璇疯緭鍏ユ渶杩戝彂甯冨娉�" v-trim/>
-      </el-form-item>
-      <el-form-item label="绱犳潗绫诲瀷 0鎺ㄥ箍璧勮 1瀹氬埗鏈嶅姟" prop="type">
-        <el-input v-model="form.type" placeholder="璇疯緭鍏ョ礌鏉愮被鍨� 0鎺ㄥ箍璧勮 1瀹氬埗鏈嶅姟" v-trim/>
+      <el-form-item label="澶囨敞" prop="publishInfo">
+        <el-input  type="textarea" v-model="form.publishInfo" placeholder="璇疯緭鍏ュ彂甯冨娉�" v-trim/>
       </el-form-item>
     </el-form>
   </GlobalWindow>
 </template>
-
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
+import upload from '@/components/common/upload'
 export default {
   name: 'OperaNewsWindow',
   extends: BaseOpera,
-  components: { GlobalWindow },
+  components: { GlobalWindow, upload },
   data () {
     return {
       // 琛ㄥ崟鏁版嵁
+      loading: false,
       form: {
         id: null,
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        remark: '',
         title: '',
-        subTitle: '',
         sortnum: '',
-        content: '',
-        linkType: '',
-        status: '',
-        lookNum: '',
-        donwloadNum: '',
+        status: 0,
         publishDate: '',
-        publishUserid: '',
         publishInfo: '',
-        type: ''
+        fileList: [],
+        fileType: 0,
+        type: 0
       },
+      fileImgList: [],
+      fileVideoList: [],
       // 楠岃瘉瑙勫垯
       rules: {
+        title: [{ required: true, message: '璇疯緭鍏ユ枃妗�' }],
+        publishDate: [{ required: true, message: '璇烽�夋嫨鍙戝竷鏃堕棿' }],
+        status: [{ required: true, message: '璇烽�夋嫨鐘舵��' }],
+        fileType: [{ required: true, message: '璇烽�夋嫨闄勪欢绫诲瀷' }]
       }
     }
   },
@@ -105,6 +85,74 @@
       api: '/business/news',
       'field.id': 'id'
     })
+  },
+  methods: {
+    open (title, target) {
+      this.title = title
+      this.visible = true
+      this.form.fileList = []
+      this.fileImgList= []
+      this.fileVideoList = []
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+        this.form.fileType = target.fileType || 0
+        const files = target.fileList || []
+        if(target.fileType === 1){
+          if(files.length>0){
+            this.fileVideoList.push(files[0])
+          }
+        }else {
+          files.forEach(item => {
+            this.fileImgList.push(item)
+          })
+        }
+      })
+    },
+    getWangedditor (val) {
+      this.form.content = val
+    },
+    delFile (index) {
+      if(this.form.fileType === 1){
+        this.fileVideoList.splice(index, 1)
+        this.form.fileList =this.fileVideoList
+      }else{
+        this.fileImgList.splice(index, 1)
+        this.form.fileList =this.fileImgList
+      }
+    },
+    fileResult (e) {
+      if(this.form.fileType === 1){
+        this.fileVideoList = this.fileVideoList||[]
+        this.fileVideoList.push({
+          fileurlFull: e.url,
+          fileurl: e.imgaddr,
+          name: e.originname,
+          type: e.type
+        })
+        this.form.fileList =this.fileVideoList
+      }else{
+        this.fileImgList = this.fileImgList||[]
+        this.fileImgList.push({
+          fileurlFull: e.url,
+          fileurl: e.imgaddr,
+          name: e.originname,
+          type: e.type
+        })
+        this.form.fileList =this.fileImgList
+      }
+      console.log(this.form.fileList)
+    }
   }
 }
 </script>
diff --git a/admin/src/components/common/RichEditor.vue b/admin/src/components/common/RichEditor.vue
index bdcf1bf..5aeb4bf 100644
--- a/admin/src/components/common/RichEditor.vue
+++ b/admin/src/components/common/RichEditor.vue
@@ -85,7 +85,7 @@
             ] // 涓嬬骇鑿滃崟 key 锛屽繀濉�
           },*/
           // 涓婁紶鍥剧墖鍒嗙粍
-         /* {
+          {
             key: 'img-style', // 蹇呭~锛岃浠� group 寮�澶�
             title: '鍥剧墖', // 蹇呭~
             // iconSvg: '<svg>....</svg>', // 鍙��
@@ -98,9 +98,9 @@
               "imageWidth50", // 鍥剧墖瀹藉害鐩稿浜庣紪杈戝櫒瀹藉害鐨勭櫨鍒嗘瘮50
               "imageWidth100", // 鍥剧墖瀹藉害鐩稿浜庣紪杈戝櫒瀹藉害鐨勭櫨鍒嗘瘮100
             ] // 涓嬬骇鑿滃崟 key 锛屽繀濉�
-          },*/
+          },
           // 瑙嗛鍒嗙粍
-         /* {
+          {
             key: 'video-style', // 蹇呭~锛岃浠� group 寮�澶�
             title: '瑙嗛', // 蹇呭~
             // iconSvg: '<svg>....</svg>', // 鍙��
@@ -109,7 +109,7 @@
               "uploadVideo", // 涓婁紶瑙嗛
               "editVideoSize", // 淇敼瑙嗛灏哄
             ] // 涓嬬骇鑿滃崟 key 锛屽繀濉�
-          },*/
+          },
           "fullScreen", // 鍏ㄥ睆
         ],
         excludeKeys: [ // 闅愯棌鎸囧畾鐨勮彍鍗曢」
@@ -128,7 +128,7 @@
         MENU_CONF: {
           // 鍥剧墖涓婁紶
           uploadImage: {
-            server: process.env.VUE_APP_BASE_API + "/common/upload",
+            server: process.env.VUE_APP_API_PREFIX + '/public/upload?folder=richeditor',
             fieldName: 'file',
             // 鍗曚釜鏂囦欢鐨勬渶澶т綋绉檺鍒讹紝榛樿涓� 2M
             maxFileSize: 10 * 1024 * 1024, // 10M
@@ -177,7 +177,7 @@
                 //     message: `${res.data.originalName} 涓婁紶澶辫触锛岃閲嶆柊灏濊瘯`
                 // });
               }
-              insertFn(res.url, res.originalFilename, res.newFileName);
+              insertFn(res.data.url, res.data.originname, res.data.imgname);
             },
 
             // 鍗曚釜鏂囦欢涓婁紶鎴愬姛涔嬪悗
@@ -201,7 +201,7 @@
           // 瑙嗛涓婁紶
           uploadVideo: {
             fieldName: 'file',
-            server: process.env.VUE_APP_BASE_API + "/common/upload",
+            server: process.env.VUE_APP_API_PREFIX + '/public/upload?folder=richeditor',
             // 鍗曚釜鏂囦欢鐨勬渶澶т綋绉檺鍒讹紝榛樿涓� 10M
             maxFileSize: 50 * 1024 * 1024, // 50M
             // 鏈�澶氬彲涓婁紶鍑犱釜鏂囦欢锛岄粯璁や负 5
@@ -243,7 +243,7 @@
                 //     message: `${res.data.originalName} 涓婁紶澶辫触锛岃閲嶆柊灏濊瘯`
                 // });
               }
-              insertFn(res.data.link, res.data.link);
+              insertFn(res.data.url, res.data.url);
             },
             // 涓婁紶杩涘害鐨勫洖璋冨嚱鏁�
             onProgress(progress) {
diff --git a/admin/src/components/common/upload.vue b/admin/src/components/common/upload.vue
index 22d22f9..62a855f 100644
--- a/admin/src/components/common/upload.vue
+++ b/admin/src/components/common/upload.vue
@@ -5,79 +5,82 @@
                 <div class="dele" @click="deleItem(index)">
                     <i class="el-icon-close"></i>
                 </div>
-                <img :src="item.url" v-if="fileType(item.url) === 'img'" />
-                <video controls autoplay :src="item.url" v-else></video>
+                <img :src="item.fileurlFull" v-if="fileType(item.fileurlFull) === 'img'" />
+                <video controls autoplay :src="item.fileurlFull" v-else></video>
             </div>
-            <div class="file_list_item" :style="{width: width, height: height, cursor: 'pointer'}" @click="$refs.file.click()">
+            <div v-if="list ==null || list.length == 0 || list.length < maxLength" class="file_list_item" :style="{width: width, height: height, cursor: 'pointer'}" @click="$refs.file.click()">
                 <i class="el-icon-plus"></i>
             </div>
         </div>
-        <input type="file" ref="file" :accept="accept" @change="getFile" />
+        <input   type="file" ref="file" :accept="accept" @change="getFile" />
     </div>
 </template>
 
 <script>
-    import axios from 'axios';
-    export default {
-        props: {
-            width: {
-                type: String,
-                default: '90px'
-            },
-            height: {
-                type: String,
-                default: '90px'
-            },
-            list: {
-                type: Array,
-                default: []
-            },
-            accept: {
-                type: String,
-                default: ''
-            },
-            folder: {
-                type: String,
-                default: ''
-            }
-        },
-        data() {
-            return {
-                uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload'
-            }
-        },
-
-        methods: {
-            fileType(url) {
-                if (url.indexOf('.mp4') !== -1) {
-                    return 'video'
-                } else {
-                    return 'img'
-                }
-            },
-            getFile(e) {
-                if (e.target && e.target.files.length > 0) {
-                    this.$emit('loading')
-                    const formdate = new FormData()
-                    formdate.append('file', e.target.files[0])
-                    formdate.append('folder', this.folder)
-                    axios.post(this.uploadImgUrl, formdate)
-                        .then(res => {
-                            this.$emit('success', res.data.data)
-                        })
-                        .catch(e => {
-                            this.$message.error(e)
-                        })
-                        .finally(() => {
-                            this.$refs.file.value = null
-                        })
-                }
-            },
-            deleItem(index) {
-                this.$emit('dele', index)
-            }
-        }
+import axios from 'axios'
+export default {
+  props: {
+    width: {
+      type: String,
+      default: '90px'
+    },
+    height: {
+      type: String,
+      default: '90px'
+    },
+    list: {
+      type: Array,
+      default: []
+    },
+    accept: {
+      type: String,
+      default: ''
+    },
+    folder: {
+      type: String,
+      default: ''
+    },
+    maxLength: {
+      type: Number,
+      default: 9999
     }
+  },
+  data () {
+    return {
+      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload'
+    }
+  },
+  methods: {
+    fileType (url) {
+      if (url && url.indexOf('.mp4') !== -1) {
+        return 'video'
+      } else {
+        return 'img'
+      }
+    },
+    getFile (e) {
+      if (e.target && e.target.files.length > 0) {
+        this.$emit('loading')
+        const formdate = new FormData()
+        formdate.append('file', e.target.files[0])
+        formdate.append('folder', this.folder)
+        axios.post(this.uploadImgUrl, formdate)
+          .then(res => {
+            this.$emit('success', res.data.data)
+          })
+          .catch(e => {
+            this.$message.error(e)
+          })
+          .finally(() => {
+            this.$refs.file.value = null
+          })
+      }
+    },
+    deleItem (index) {
+      this.$emit('dele', index)
+    }
+  }
+}
 </script>
 
 <style lang="scss" scoped>
@@ -108,6 +111,7 @@
                     margin: 0 !important;
                 }
                 .dele {
+                  z-index: 10000;
                     position: absolute;
                     right: 0;
                     top: 0;
@@ -138,4 +142,3 @@
         }
     }
 </style>
-
diff --git a/admin/src/components/system/dict/DictDataManagerWindow.vue b/admin/src/components/system/dict/DictDataManagerWindow.vue
index 86c092a..26b133a 100644
--- a/admin/src/components/system/dict/DictDataManagerWindow.vue
+++ b/admin/src/components/system/dict/DictDataManagerWindow.vue
@@ -1,7 +1,7 @@
 <template>
   <GlobalWindow
     :title="dictName + '鏁版嵁绠$悊'"
-    width="78%"
+    width="100%"
     :visible.sync="visible"
     :with-footer="false"
   >
@@ -19,7 +19,7 @@
           @selection-change="handleSelectionChange"
         >
           <el-table-column type="selection" width="55"></el-table-column>
-          <el-table-column prop="label" label="鏁版嵁鏍囩" min-width="100px"></el-table-column>
+          <el-table-column prop="label" label="鏁版嵁鏍囩" min-width="200px"></el-table-column>
           <el-table-column prop="code" label="鏁版嵁鍊�" min-width="100px">
             <template slot-scope="{row}">
               <div v-if="row.code || row.code.length>500" >
@@ -37,6 +37,7 @@
           <el-table-column prop="updateUser" label="鏇存柊浜�" min-width="100px">
             <template slot-scope="{row}">{{row.updateUserInfo == null ? '' : row.updateUserInfo.username}}</template>
           </el-table-column>
+          <el-table-column prop="remark" label="璇存槑" min-width="150px"></el-table-column>
           <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
           <el-table-column prop="updateTime" label="鏇存柊鏃堕棿" min-width="100px"></el-table-column>
           <el-table-column
diff --git a/admin/src/components/system/dict/OperaDictDataWindow.vue b/admin/src/components/system/dict/OperaDictDataWindow.vue
index ec5ba6a..65caa88 100644
--- a/admin/src/components/system/dict/OperaDictDataWindow.vue
+++ b/admin/src/components/system/dict/OperaDictDataWindow.vue
@@ -21,6 +21,9 @@
         <el-switch v-model="form.disabled" :active-value="false" :inactive-value="true"/>
         <span class="status-text">{{form.disabled | disabledText}}</span>
       </el-form-item>
+      <el-form-item label="璇存槑" prop="remark">
+        <el-input v-model="form.remark" placeholder="璇疯緭鍏ユ暟鎹鏄�" v-trim />
+      </el-form-item>
     </el-form>
   </GlobalWindow>
 </template>
@@ -43,6 +46,7 @@
         code: '',
         label: '',
         disabled: false,
+        remark: '',
         istext: false
       },
       // 楠岃瘉瑙勫垯
@@ -68,6 +72,7 @@
     open (title, dictId, target) {
       this.title = title
       this.visible = true
+      this.form.remark=''
       // 鏂板缓
       if (target == null) {
         this.$nextTick(() => {
diff --git a/admin/src/views/business/categorySeg.vue b/admin/src/views/business/categorySeg.vue
index 185d9f2..1057634 100644
--- a/admin/src/views/business/categorySeg.vue
+++ b/admin/src/views/business/categorySeg.vue
@@ -2,38 +2,16 @@
   <TableLayout :permissions="['business:categoryseg:query']">
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="涓婚敭" prop="id">
-        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ヤ富閿�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator">
-        <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
-        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
-      </el-form-item>
-      <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
-        <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
-        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�" @change="search"/>
-      </el-form-item>
-      <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
-        <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="澶囨敞" prop="remark">
-        <el-input v-model="searchForm.remark" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
       <el-form-item label="鍝佺被缂栫爜" prop="unitCode">
-        <el-input v-model="searchForm.unitCode" placeholder="璇疯緭鍏ュ搧绫荤紪鐮�" @keypress.enter.native="search"></el-input>
+        <el-select v-model="searchForm.unitCode" @change="search" clearable placeholder="鎵�灞炲搧鐗�">
+          <el-option v-for="(item) in unitList " :key="item.code" :label="item.name" :value="item.code"></el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="鎴樺尯缂栫爜" prop="segId">
-        <el-input v-model="searchForm.segId" placeholder="璇疯緭鍏ユ垬鍖虹紪鐮�" @keypress.enter.native="search"></el-input>
+      <el-form-item label="F鐮�" prop="orgId">
+        <el-input v-model="searchForm.orgId" placeholder="璇疯緭鍏鐮�" @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item label="鐪佸尯缂栫爜" prop="segId2">
-        <el-input v-model="searchForm.segId2" placeholder="璇疯緭鍏ョ渷鍖虹紪鐮�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="甯傚尯缂栫爜" prop="segId3">
-        <el-input v-model="searchForm.segId3" placeholder="璇疯緭鍏ュ競鍖虹紪鐮�" @keypress.enter.native="search"></el-input>
+      <el-form-item label="S鐮�" prop="scode">
+        <el-input v-model="searchForm.scode" placeholder="璇疯緭鍏鐮�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="鎴樺尯鍚嶇О" prop="segName">
         <el-input v-model="searchForm.segName" placeholder="璇疯緭鍏ユ垬鍖哄悕绉�" @keypress.enter.native="search"></el-input>
@@ -43,15 +21,6 @@
       </el-form-item>
       <el-form-item label="甯傚尯鍚嶇О" prop="segName3">
         <el-input v-model="searchForm.segName3" placeholder="璇疯緭鍏ュ競鍖哄悕绉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鏈�杩戝悓姝ユ椂闂�" prop="syncDate">
-        <el-date-picker v-model="searchForm.syncDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ渶杩戝悓姝ユ椂闂�" @change="search"/>
-      </el-form-item>
-      <el-form-item label="鏈�杩戝悓姝ュ娉�" prop="syncInfo">
-        <el-input v-model="searchForm.syncInfo" placeholder="璇疯緭鍏ユ渶杩戝悓姝ュ娉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鏀惰揣鍦板潃" prop="shipToAddress">
-        <el-input v-model="searchForm.shipToAddress" placeholder="璇疯緭鍏ユ敹璐у湴鍧�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="鏀惰揣浜�" prop="shipToPerson">
         <el-input v-model="searchForm.shipToPerson" placeholder="璇疯緭鍏ユ敹璐т汉" @keypress.enter.native="search"></el-input>
@@ -67,47 +36,33 @@
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
-      <ul class="toolbar" v-permissions="['business:categoryseg:create', 'business:categoryseg:delete']">
-        <li><el-button type="primary" @click="$refs.operaCategorySegWindow.open('鏂板缓蹇楅偊钀ラ攢鍖哄煙鍝佺被淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:categoryseg:create']">鏂板缓</el-button></li>
-        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:categoryseg:delete']">鍒犻櫎</el-button></li>
-      </ul>
       <el-table
         v-loading="isWorking.search"
         :data="tableData.list"
         stripe
         @selection-change="handleSelectionChange"
       >
-        <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="id" label="涓婚敭" min-width="100px"></el-table-column>
-        <el-table-column prop="creator" label="鍒涘缓浜虹紪鐮�" min-width="100px"></el-table-column>
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="editor" label="鏇存柊浜虹紪鐮�" min-width="100px"></el-table-column>
-        <el-table-column prop="editDate" label="鏇存柊鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="isdeleted" label="鏄惁鍒犻櫎0鍚� 1鏄�" min-width="100px"></el-table-column>
-        <el-table-column prop="remark" label="澶囨敞" min-width="100px"></el-table-column>
-        <el-table-column prop="unitCode" label="鍝佺被缂栫爜" min-width="100px"></el-table-column>
-        <el-table-column prop="segId" label="鎴樺尯缂栫爜" min-width="100px"></el-table-column>
-        <el-table-column prop="segId2" label="鐪佸尯缂栫爜" min-width="100px"></el-table-column>
-        <el-table-column prop="segId3" label="甯傚尯缂栫爜" min-width="100px"></el-table-column>
-        <el-table-column prop="segName" label="鎴樺尯鍚嶇О" min-width="100px"></el-table-column>
-        <el-table-column prop="segName2" label="鐪佸尯鍚嶇О" min-width="100px"></el-table-column>
-        <el-table-column prop="segName3" label="甯傚尯鍚嶇О" min-width="100px"></el-table-column>
-        <el-table-column prop="syncDate" label="鏈�杩戝悓姝ユ椂闂�" min-width="100px"></el-table-column>
-        <el-table-column prop="syncInfo" label="鏈�杩戝悓姝ュ娉�" min-width="100px"></el-table-column>
-        <el-table-column prop="shipToAddress" label="鏀惰揣鍦板潃" min-width="100px"></el-table-column>
-        <el-table-column prop="shipToPerson" label="鏀惰揣浜�" min-width="100px"></el-table-column>
-        <el-table-column prop="shipToPhone" label="鏀惰揣浜虹數璇�" min-width="100px"></el-table-column>
-        <el-table-column
-          v-if="containPermissions(['business:categoryseg:update', 'business:categoryseg:delete'])"
-          label="鎿嶄綔"
-          min-width="120"
-          fixed="right"
-        >
-          <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaCategorySegWindow.open('缂栬緫蹇楅偊钀ラ攢鍖哄煙鍝佺被淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:categoryseg:update']">缂栬緫</el-button>
-            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:categoryseg:delete']">鍒犻櫎</el-button>
-          </template>
+        <el-table-column type="selection" width="55" fixed></el-table-column>
+        <el-table-column label="S鐮�" prop="scode" fixed min-width="80px"></el-table-column>
+        <el-table-column label="涓�浣撳晢" prop="sname" fixed min-width="180px"></el-table-column>
+        <el-table-column label="F鐮�" prop="orgId" fixed min-width="80px"></el-table-column>
+        <el-table-column label="鍔犵洘鍟�" prop="orgName" fixed  min-width="180px"></el-table-column>
+        <el-table-column prop="unitCode" label="鍝佺被" min-width="150px">
+          <template slot-scope="{row}"> {{row.unitCode}} / {{row.unitName}}</template>
         </el-table-column>
+        <el-table-column prop="segId" label="鎴樺尯" min-width="150px">
+            <template slot-scope="{row}"> {{row.segId}} / {{row.segName}}</template>
+        </el-table-column>
+        <el-table-column prop="segId2" label="鐪佸尯" min-width="150px">
+          <template slot-scope="{row}"> {{row.segId2}} / {{row.segName2}}</template>
+        </el-table-column>
+        <el-table-column prop="segId3" label="鐗囧尯" min-width="150px">
+          <template slot-scope="{row}"> {{row.segId3}} / {{row.segName3}}</template>
+        </el-table-column>
+        <el-table-column prop="shipToPerson" label="鏀惰揣浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="shipToPhone" label="鏀惰揣浜虹數璇�" min-width="120px"></el-table-column>
+        <el-table-column prop="shipToAddress" label="鏀惰揣鍦板潃" min-width="250px"></el-table-column>
+        <el-table-column prop="editDate" label="鏇存柊鏃堕棿" min-width="150px"></el-table-column>
       </el-table>
       <pagination
         @size-change="handleSizeChange"
@@ -126,33 +81,22 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import OperaCategorySegWindow from '@/components/business/OperaCategorySegWindow'
+import { getUnitList } from '@/api/business/segments'
 export default {
   name: 'CategorySeg',
   extends: BaseTable,
   components: { TableLayout, Pagination, OperaCategorySegWindow },
   data () {
     return {
+      unitList:[],
       // 鎼滅储
       searchForm: {
-        id: '',
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        remark: '',
         unitCode: '',
-        segId: '',
-        segId2: '',
-        segId3: '',
         segName: '',
         segName2: '',
         segName3: '',
-        syncDate: '',
-        syncInfo: '',
-        shipToAddress: '',
-        shipToPerson: '',
-        shipToPhone: ''
+        scode: '',
+        orgId: ''
       }
     }
   },
@@ -163,7 +107,16 @@
       'field.id': 'id',
       'field.main': 'id'
     })
+    this.loadUnitList()
     this.search()
+  },
+  methods: {
+    loadUnitList () {
+      getUnitList()
+        .then(data => {
+          this.unitList = data
+        })
+    }
   }
 }
 </script>
diff --git a/admin/src/views/business/news.vue b/admin/src/views/business/news.vue
index e42bac7..099963d 100644
--- a/admin/src/views/business/news.vue
+++ b/admin/src/views/business/news.vue
@@ -20,7 +20,7 @@
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:news:create', 'business:news:delete']">
-        <li><el-button type="primary" @click="$refs.operaNewsWindow.open('鏂板缓璧勮鍜屽畾鍒舵湇鍔′俊鎭〃')" icon="el-icon-plus" v-permissions="['business:news:create']">鏂板缓</el-button></li>
+        <li><el-button type="primary" @click="$refs.operaNewsWindow.open('鏂板缓鎺ㄥ箍璧勮')" icon="el-icon-plus" v-permissions="['business:news:create']">鏂板缓</el-button></li>
         <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:news:delete']">鍒犻櫎</el-button></li>
       </ul>
       <el-table
@@ -30,29 +30,38 @@
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="title" label="鏍囬" min-width="100px"></el-table-column>
-        <el-table-column prop="subTitle" label="鍓爣棰�" min-width="100px"></el-table-column>
-        <el-table-column prop="linkType" label="璺宠浆绫诲瀷" min-width="100px">
+        <el-table-column prop="title" label="鏂囨" fixed min-width="300px"></el-table-column>
+        <el-table-column prop="fileList" label="闄勪欢"  align="center" fixed min-width="250px">>
           <template slot-scope="{row}">
-            <span v-if="row.linkType ==0">瀵屾枃鏈�</span>
-            <span v-if="row.linkType ==1">澶栭摼</span>
+            <div v-if="row.fileType!=1 && row.fileList!=null && row.fileList.length" class="image-container">
+              <div v-for="(item) in row.fileList" :key="item.id" >
+                <el-image
+                    v-if="item.fileurlFull && item.type !=1"
+                    class="image-item"
+                    :src="item.fileurlFull"
+                    fit="fill"
+                    :preview-src-list="[item.fileurlFull]">
+                </el-image>
+              </div>
+            </div>
+            <div v-if="row.fileType == 1 && row.fileList!=null && row.fileList.length" class="image-container">
+              <video v-if="row.fileList[0].fileurlFull"  style="width: 60px;height: 60px"  controls autoplay :src="row.fileList[0].fileurlFull"></video>
+            </div>
           </template>
         </el-table-column>
-        <el-table-column prop="status" label="鐘舵��" min-width="100px">
+        <el-table-column prop="publishDate" label="鍙戝竷鏃堕棿"   min-width="150px"></el-table-column>
+        <el-table-column prop="status" label="鐘舵��"   min-width="80px">
           <template slot-scope="{row}">
-            <span v-if="row.status ==1">涓嶅睍绀�</span>
-            <span v-if="row.status ==0">灞曠ず</span>
+            <span v-if="row.status ==1" style="color:red;">涓嶅睍绀�</span>
+            <span v-if="row.status ==0" style="color:green;">灞曠ず</span>
           </template>
         </el-table-column>
+        <el-table-column prop="publishInfo" label="鍙戝竷澶囨敞" min-width="150px"></el-table-column>
         <el-table-column prop="lookNum" label="娴忚閲�" min-width="80px"></el-table-column>
         <el-table-column prop="donwloadNum" label="涓嬭浇閲�" min-width="80px"></el-table-column>
-        <el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="100px"></el-table-column>
-        <el-table-column prop="remark" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="80px"></el-table-column>
         <el-table-column prop="editorName" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
-        <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="publishDate" label="鏈�杩戝彂甯冩椂闂�" min-width="100px"></el-table-column>
-        <el-table-column prop="publishUserName" label="鏈�杩戝彂甯冧汉" min-width="100px"></el-table-column>
-        <el-table-column prop="publishInfo" label="鏈�杩戝彂甯冨娉�" min-width="100px"></el-table-column>
+        <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column
           v-if="containPermissions(['business:news:update', 'business:news:delete'])"
           label="鎿嶄綔"
@@ -60,7 +69,7 @@
           fixed="right"
         >
           <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaNewsWindow.open('缂栬緫璧勮鍜屽畾鍒舵湇鍔′俊鎭〃', row)" icon="el-icon-edit" v-permissions="['business:news:update']">缂栬緫</el-button>
+            <el-button type="text" @click="$refs.operaNewsWindow.open('缂栬緫鎺ㄥ箍璧勮', row)" icon="el-icon-edit" v-permissions="['business:news:update']">缂栬緫</el-button>
             <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:news:delete']">鍒犻櫎</el-button>
           </template>
         </el-table-column>
@@ -107,3 +116,19 @@
   }
 }
 </script>
+
+<style scoped>
+.image-container {
+  display: flex; /* 璁惧畾涓� Flexbox 甯冨眬 */
+  flex-wrap: wrap; /* 鍏佽鎹㈣ */
+  justify-content: center; /* 姘村钩鏂瑰悜涓婄殑闂撮殧鍒嗗竷 */
+  align-items: flex-start; /* 鍨傜洿鏂瑰悜涓婄殑椤圭洰瀵归綈 */
+}
+
+.image-item {
+  height: 60px;
+  width: 60px;
+  margin-right: 10px; /* 鍙宠竟璺濓紝浣垮緱鍥剧墖涔嬮棿鏈夐棿闅� */
+  margin-bottom: 10px; /* 搴曢儴杈硅窛锛屼娇寰楀浘鐗囪兘澶熸崲琛� */
+}
+</style>
diff --git a/admin/src/views/business/newsDz.vue b/admin/src/views/business/newsDz.vue
index 6ced12e..6ff929b 100644
--- a/admin/src/views/business/newsDz.vue
+++ b/admin/src/views/business/newsDz.vue
@@ -20,7 +20,7 @@
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:news:create', 'business:news:delete']">
-        <li><el-button type="primary" @click="$refs.operaNewsWindow.open('鏂板缓璧勮鍜屽畾鍒舵湇鍔′俊鎭〃')" icon="el-icon-plus" v-permissions="['business:news:create']">鏂板缓</el-button></li>
+        <li><el-button type="primary" @click="$refs.operaNewsWindow.open('鏂板缓瀹氬埗鏈嶅姟淇℃伅')" icon="el-icon-plus" v-permissions="['business:news:create']">鏂板缓</el-button></li>
         <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:news:delete']">鍒犻櫎</el-button></li>
       </ul>
       <el-table
@@ -30,8 +30,22 @@
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="title" label="鏍囬" min-width="100px"></el-table-column>
-        <el-table-column prop="subTitle" label="鍓爣棰�" min-width="100px"></el-table-column>
+        <el-table-column prop="title" label="鏍囬" fixed min-width="100px"></el-table-column>
+        <el-table-column prop="subTitle" label="鍓爣棰�" fixed min-width="100px"></el-table-column>
+        <el-table-column prop="fileList" label="闄勪欢"  align="center" fixed min-width="100px">>
+          <template slot-scope="{row}">
+            <div v-if="row.fileList!=null && row.fileList.length" class="image-container">
+              <el-image
+                  v-if="row.fileList[0].type !=1 && row.fileList[0].fileurlFull"
+                  class="image-item"
+                  :src="row.fileList[0].fileurlFull"
+                  fit="fill"
+                  :preview-src-list="[row.fileList[0].fileurlFull]">
+              </el-image>
+              <video v-if="row.fileList[0].type ==1 && row.fileList[0].fileurlFull"  style="width: 60px;height: 60px"  controls autoplay :src="row.fileList[0].fileurlFull"></video>
+            </div>
+          </template>
+        </el-table-column>
         <el-table-column prop="linkType" label="璺宠浆绫诲瀷" min-width="100px">
           <template slot-scope="{row}">
             <span v-if="row.linkType ==0">瀵屾枃鏈�</span>
@@ -45,14 +59,10 @@
           </template>
         </el-table-column>
         <el-table-column prop="lookNum" label="娴忚閲�" min-width="80px"></el-table-column>
-        <el-table-column prop="donwloadNum" label="涓嬭浇閲�" min-width="80px"></el-table-column>
         <el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="100px"></el-table-column>
         <el-table-column prop="remark" label="澶囨敞" min-width="100px"></el-table-column>
         <el-table-column prop="editorName" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
         <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="publishDate" label="鏈�杩戝彂甯冩椂闂�" min-width="100px"></el-table-column>
-        <el-table-column prop="publishUserName" label="鏈�杩戝彂甯冧汉" min-width="100px"></el-table-column>
-        <el-table-column prop="publishInfo" label="鏈�杩戝彂甯冨娉�" min-width="100px"></el-table-column>
         <el-table-column
           v-if="containPermissions(['business:news:update', 'business:news:delete'])"
           label="鎿嶄綔"
@@ -60,7 +70,7 @@
           fixed="right"
         >
           <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaNewsWindow.open('缂栬緫璧勮鍜屽畾鍒舵湇鍔′俊鎭〃', row)" icon="el-icon-edit" v-permissions="['business:news:update']">缂栬緫</el-button>
+            <el-button type="text" @click="$refs.operaNewsWindow.open('缂栬緫瀹氬埗鏈嶅姟淇℃伅', row)" icon="el-icon-edit" v-permissions="['business:news:update']">缂栬緫</el-button>
             <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:news:delete']">鍒犻櫎</el-button>
           </template>
         </el-table-column>
@@ -73,7 +83,7 @@
       </pagination>
     </template>
     <!-- 鏂板缓/淇敼 -->
-    <OperaNewsWindow ref="operaNewsWindow" @success="handlePageChange"/>
+    <OperaNewsDzWindow ref="operaNewsWindow" @success="handlePageChange"/>
   </TableLayout>
 </template>
 
@@ -81,11 +91,11 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
-import OperaNewsWindow from '@/components/business/OperaNewsWindow'
+import OperaNewsDzWindow from '@/components/business/OperaNewsDzWindow'
 export default {
   name: 'News',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaNewsWindow },
+  components: { TableLayout, Pagination, OperaNewsDzWindow },
   data () {
     return {
       // 鎼滅储
diff --git a/admin/vue.config.js b/admin/vue.config.js
index a39f3b8..f3f181a 100644
--- a/admin/vue.config.js
+++ b/admin/vue.config.js
@@ -11,7 +11,7 @@
     port: 10012,
     proxy: {
       [process.env.VUE_APP_API_PREFIX]: {
-        target: 'http://localhost:10028',
+        target: process.env.VUE_APP_BASE_API,
         changeOrigin: true,
         pathRewrite: {
           [`^${[process.env.VUE_APP_API_PREFIX]}`]: ''
diff --git a/server/admin/src/main/java/com/doumee/api/business/PushController.java b/server/admin/src/main/java/com/doumee/api/business/PushController.java
index f599904..f7a8013 100644
--- a/server/admin/src/main/java/com/doumee/api/business/PushController.java
+++ b/server/admin/src/main/java/com/doumee/api/business/PushController.java
@@ -43,6 +43,7 @@
             success = Constants.ONE;
             r = ApiResponse.failed(StringUtils.defaultString(e.getMessage(),"鎿嶄綔澶辫触"));
         }catch (Exception e){
+            e.printStackTrace();
             success = Constants.ONE;
             r = ApiResponse.failed("鎿嶄綔澶辫触");
         }finally {
@@ -67,6 +68,7 @@
             r = ApiResponse.failed(StringUtils.defaultString(e.getMessage(),"鎿嶄綔澶辫触"));
         }catch (Exception e){
             success = Constants.ONE;
+            e.getMessage();
             r = ApiResponse.failed("鎿嶄綔澶辫触");
         }finally {
             zbomIAMService.saveInterfaceLog("/push/iam/updateUserInfo","IAM鎺ㄩ�佷汉鍛樿处鍙蜂俊鎭�", token, uuid, timestamp, upateUserModel,success, JSONObject.toJSONString(r));
diff --git a/server/service/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java b/server/service/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java
index 3ae82f8..0e7c910 100644
--- a/server/service/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java
+++ b/server/service/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java
@@ -33,11 +33,11 @@
     public Integer create(SystemDictData systemDictData) {
         SystemDictData queryDto = new SystemDictData();
         queryDto.setDictId(systemDictData.getDictId());
-        queryDto.setCode(systemDictData.getCode());
+        queryDto.setLabel(systemDictData.getLabel());
         queryDto.setDeleted(Boolean.FALSE);
         SystemDictData dictData = systemDictDataService.findOne(queryDto);
         if (dictData != null) {
-            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鏁版嵁鍊煎凡瀛樺湪");
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鏁版嵁鏍囩宸插瓨鍦�");
         }
         return systemDictDataService.create(systemDictData);
     }
@@ -46,11 +46,11 @@
     public void updateById(SystemDictData systemDictData) {
         SystemDictData queryDto = new SystemDictData();
         queryDto.setDictId(systemDictData.getDictId());
-        queryDto.setCode(systemDictData.getLabel());
+        queryDto.setLabel(systemDictData.getLabel());
         queryDto.setDeleted(Boolean.FALSE);
         SystemDictData dictData = systemDictDataService.findOne(queryDto);
         if (dictData != null && !dictData.getId().equals(systemDictData.getId())) {
-            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鏁版嵁鍊煎凡瀛樺湪");
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鏁版嵁鏍囩宸插瓨鍦�");
         }
         systemDictDataService.updateById(systemDictData);
     }
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomIAMServiceImpl.java b/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomIAMServiceImpl.java
index b89d3dc..4542b02 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomIAMServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomIAMServiceImpl.java
@@ -15,6 +15,7 @@
 import com.doumee.dao.business.model.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
@@ -43,6 +44,12 @@
     private IamInterfaceLogMapper iamInterfaceLogMapper;
     @Autowired
     private SegmentsMapper segmentsMapper;
+    /**
+     * 鏄惁寮�鍙戣��
+     */
+    @Value("${debug_model}")
+    private Boolean isDebug;
+
 
     /**
      * 鍒濆鍖栧悓姝ョ敤鎴�
@@ -76,10 +83,12 @@
                     .eq(Shop::getOrgId,model.getIdtOrgId())
                     .last("limit 1"));
             if(shop == null){
+                shop = new Shop();
+                shop.setCreateDate(date);
                 addShops.add(initShopInfo(shop,model,date));
             }else {
                 segDelOrgIds.add(shop.getOrgId());
-                updateShops.add(shop);
+                updateShops.add(initShopInfo(shop,model,date));
             }
             //澶勭悊鍝佺被鏁版嵁閫昏緫
             dealCategorySegData(date,shop,model.getCategory(),categorySegList,segmentsList);
@@ -207,15 +216,13 @@
     }
 
     private Shop initShopInfo(Shop shop, IamUpateShopModel model, Date date) {
-        if(shop == null) {
-            shop = new Shop();
-            shop.setCreateDate(date);
-        }
         shop.setEditDate(date);
         shop.setOrgId(model.getIdtOrgId());
         shop.setName(model.getIdtOrgName());
         shop.setCode(model.getIdtOrgCode());
         shop.setType(model.getIdtOrgFirstLevelType());
+
+        shop.setStatus(Constants.parseIntByStr(model.getIdtOrgStatus()));
         shop.setSecondType(model.getIdtOrgSecondLevelType());
         shop.setAttribute(model.getIdtOrgAttribute());
         if(model.getScode()!=null){
@@ -261,6 +268,9 @@
     }
 
     private void isValidToken(String uuid, String timestamp, String token) {
+        if(isDebug){
+            return;
+        }
         if (!StringUtils.equalsIgnoreCase( getToken( uuid, timestamp), token)) {
             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝token閿欒~");
         }
@@ -294,6 +304,7 @@
         users.setEditDate(new Date());
         users.setSex(upateUserModel.getIdtUserGender());
         users.setIamUsername(upateUserModel.getAppAccountNo());
+        users.setCode(upateUserModel.getIdtUserWorkNo());
         users.setName(upateUserModel.getIdtUserName());
         users.setPassword(upateUserModel.getAppAccountPwd());
         users.setPhone(upateUserModel.getIdtUserMobile());
@@ -301,24 +312,27 @@
         users.setStatus(upateUserModel.getAppAccountStatus());
         users.setIsdeleted(Constants.ZERO);
         users.setRemark(JSONObject.toJSONString(upateUserModel));
+        users.setRoleNames(null);
+        users.setRoleIds(null);
+        users.setUserTypes(null);
         if( upateUserModel.getUserTypes() !=null){
             for(IamUserTypeModel type : upateUserModel.getUserTypes()){
-                if(StringUtils.isNotBlank(users.getUserTypes())){
+                if(StringUtils.isBlank(users.getUserTypes())){
                     users.setUserTypes("");
                 }
-                users.setUserTypes("["+users.getUserTypes()+type.getIdtUserTypeCode()+"];");
+                users.setUserTypes(users.getUserTypes()+"["+type.getIdtUserTypeCode()+"];");
             }
         }
         if( upateUserModel.getRoles() !=null){
             for(IamUserRoleModel t : upateUserModel.getRoles()){
-                if(StringUtils.isNotBlank(users.getRoleIds())){
+                if(StringUtils.isBlank(users.getRoleIds())){
                     users.setRoleIds("");
                 }
-                if(StringUtils.isNotBlank(users.getRoleNames())){
+                if(StringUtils.isBlank(users.getRoleNames())){
                     users.setRoleNames("");
                 }
-                users.setRoleIds("["+users.getRoleIds()+t.getId()+"];");
-                users.setRoleNames("["+users.getRoleNames()+t.getName()+"];");
+                users.setRoleIds(users.getRoleIds()+t.getId()+"["+t.getId()+"];");
+                users.setRoleNames(users.getRoleNames()+"["+t.getName()+"];");
             }
         }
         if(upateUserModel.getJobs()!=null){
@@ -334,7 +348,7 @@
                 Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda()
                         .eq(Shop::getOrgId,orgId)
                         .last("limit 1"));
-                users.setDepartmentId(shop.getId());
+                users.setDepartmentId(shop ==null?null:shop.getId());
             }
 
         }
diff --git a/server/service/src/main/java/com/doumee/core/utils/Constants.java b/server/service/src/main/java/com/doumee/core/utils/Constants.java
index 0e97e24..5fd3e3a 100644
--- a/server/service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -7,6 +7,7 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.PropertyNamingStrategy;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import java.io.IOException;
@@ -78,11 +79,6 @@
     public static final String FTP_USERNAME ="FTP_USERNAME" ;
     public static final String FTP_PWD ="FTP_PWD" ;
     public static final String FTP_RESOURCE_PATH ="FTP_RESOURCE_PATH" ;
-    public static final String ERP_ORGLIST_URL ="ERP_ORGLIST_URL" ;
-    public static final String ERP_USERLIST_URL ="ERP_USERLIST_URL" ;
-    public static final String ERP_APPROVE_URL ="ERP_APPROVE_URL" ;
-    public static final String ERP_USERSTATUS_RL ="ERP_USERSTATUS_RL" ;
-    public static final String ERP ="ERP" ;
     public static final Integer THREE =3 ;
     public static final Integer FOUR =4 ;
     public static final String ORG_USER_ORIGIN = "ORG_USER_ORIGIN";
@@ -92,34 +88,80 @@
     public static final String ZBOM = "ZBOM" ;
     public static final String ZBOM_IAM_APPKEY = "ZBOM_IAM_APPKEY";
     public static final String ZBOM_IAM_APPID = "ZBOM_IAM_APPID";
-    public static  boolean DEALING_HK_SYNCPRIVILEGE= false;
-    public static  boolean DEALING_HK_SYNCDEVICE = false;
-    public static  boolean DEALING_HK_SYNCDEVICE_STATUS = false;
-    public static  boolean DEALING_HK_SYNCPARK = false;
-    public static  boolean DEALING_HK_IMG = false;
-    public static  boolean DEALING_HK_ORG = false;
-    public static  boolean DEALING_HK_USER = false;
-    public static  boolean DEALING_HK_DEL_USER = false;
-    public static  boolean DEALING_HK_VISIT = false;
-    public static  boolean DEALING_HK_VISIT_EXPIRE = false;
-    public static  boolean DEALING_FROM_HK_VISIT = false;
-    public static  boolean DEALING_HK_EMPOWER = false;
-    public static  boolean DEALING_HK_EMPOWER_DETAIL = false;
-    public static  boolean DEALING_HK_EMPOWER_RESULT = false;
-    public static  boolean DEALING_HK_PARKBOOK = false;
-    // ERP鎺ュ彛閰嶇疆
-    public static final String ERP_CONFIG = "ERP_CONFIG";
-    // ERP ACCESS_KEY
-    public static final String ERP_ACCESS_KEY = "ERP_ACCESS_KEY";
-    // ERP ACCESS_SECRET
-    public static final String ERP_ACCESS_SECRET = "ERP_ACCESS_SECRET";
 
-    // 鍐呴儴浜哄憳鍐荤粨閰嶇疆鏃堕棿
-    public static final String TIMEOUT_FREEZE = "TIMEOUT_FREEZE";
+    public static Integer parseIntByStr(String idtOrgStatus) {
+        try {
+            return  Integer.parseInt(idtOrgStatus);
+        }catch (Exception e){
+            return null;
+        }
+    }
 
-    // 瓒呮椂棰勮閰嶇疆
-    public static final String TIMEOUT_WARNING = "TIMEOUT_WARNING";
-    // FTP鏂囦欢鏈嶅姟鍣ㄨ祫婧愯闂湴鍧�
+    /**
+     * 闄勪欢瀵硅薄绫诲瀷 0news澶氬浘 1news瑙嗛
+     */
+    public  enum MultiFile{
+        NEWS_FILE(0, "鎺ㄥ箍璧勮闄勪欢", "NEWS")
+
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+        private String info;// 鎻忚堪
+
+        // 鏋勯�犳柟娉�
+        MultiFile(int key, String name, String info) {
+            this.name = name;
+            this.key = key;
+            this.info = info;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (MultiFile c : MultiFile.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getInfo(int index) {
+            for (MultiFile c : MultiFile.values()) {
+                if (c.getKey() == index) {
+                    return c.info;
+                }
+            }
+            return null;
+        }
+
+        public String getInfo() {
+            return info;
+        }
+
+        public void setInfo(String info) {
+            this.info = info;
+        }
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+    }
 
     public static  Date  getBirthdyByCardNo(String idCard){
     if(idCard ==null || idCard.length()<14){
@@ -262,6 +304,8 @@
     public static final String ACCESS_KEY = "ACCESS_KEY";
     public static final String ENDPOINT = "ENDPOINT";
     public static final String RESOURCE_PATH = "RESOURCE_PATH";
+    public static final String USERS_FILE = "USERS_FILE";
+    public static final String NEWS_FILE = "NEWS_FILE";
     //鍙戦�佷細璁紑濮�  瀹氭椂鎻愬墠澶氬皯鍒嗛挓鍙戦��
 
     public static final String SYSTEM ="SYSTEM";
@@ -338,6 +382,12 @@
     }
 
 
+    public static boolean equalsLong(Long a, Long b) {
+        if (a == null || b==null) {
+            return false;
+        }
+        return a.equals(b);
+    }
     public static boolean equalsInteger(Integer a, Integer b) {
         if (formatIntegerNum(a) == formatIntegerNum(b)) {
             return true;
diff --git a/server/service/src/main/java/com/doumee/core/utils/QrCodeUtils.java b/server/service/src/main/java/com/doumee/core/utils/QrCodeUtils.java
index 671a4ac..c30fc73 100644
--- a/server/service/src/main/java/com/doumee/core/utils/QrCodeUtils.java
+++ b/server/service/src/main/java/com/doumee/core/utils/QrCodeUtils.java
@@ -1,8 +1,9 @@
 package com.doumee.core.utils;
 
-import com.google.zxing.*;
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.MultiFormatWriter;
 import com.google.zxing.common.BitMatrix;
-import com.google.zxing.common.HybridBinarizer;
 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
 
 import javax.imageio.ImageIO;
diff --git a/server/service/src/main/java/com/doumee/core/utils/tyyun/TyyZosUtil.java b/server/service/src/main/java/com/doumee/core/utils/tyyun/TyyZosUtil.java
index 2a270f4..cb8a032 100644
--- a/server/service/src/main/java/com/doumee/core/utils/tyyun/TyyZosUtil.java
+++ b/server/service/src/main/java/com/doumee/core/utils/tyyun/TyyZosUtil.java
@@ -172,11 +172,15 @@
 
             if (inputStream != null) {
                 ObjectMetadata metadata = new ObjectMetadata();
+                metadata.setContentLength(inputStream.available());
+
                 PutObjectRequest request = new PutObjectRequest(bucketName, key, inputStream,metadata);
+                request.setCannedAcl(CannedAccessControlList.PublicRead);
                 PutObjectResult result = client.putObject(request);
+                return true;
             }
         }catch (Exception e){
-            log.error("瀵硅薄瀛樺偍==================== 缃戠粶鏂囦欢涓婁紶澶辫触"+e.getMessage());
+            log.error("瀵硅薄瀛樺偍==================== 鏂囦欢涓婁紶澶辫触"+e.getMessage());
         }finally {
             shutDown();
         }
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/Multifile.java b/server/service/src/main/java/com/doumee/dao/business/model/Multifile.java
index 3481422..ac4b8ee 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/Multifile.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/Multifile.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.dao.business.dto.BaseQueryDto;
 import io.swagger.annotations.ApiModel;
@@ -62,13 +63,16 @@
     @ExcelColumn(name="绫诲瀷0鍥剧墖 1瑙嗛 2鍏朵粬")
     private Integer type;
 
-    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0鎺ㄥ箍璧勮澶氬浘 1鎺ㄥ箍璧勮瑙嗛 2瀹氬埗鏈嶅姟澶氬浘 3瀹氬埗鏈嶅姟瑙嗛", example = "1")
-    @ExcelColumn(name="鍏宠仈瀵硅薄绫诲瀷 0鎺ㄥ箍璧勮澶氬浘 1鎺ㄥ箍璧勮瑙嗛 2瀹氬埗鏈嶅姟澶氬浘 3瀹氬埗鏈嶅姟瑙嗛")
+    @ApiModelProperty(value = "闄勪欢瀵硅薄绫诲瀷 0news澶氬浘 1news瑙嗛", example = "1")
+    @ExcelColumn(name="闄勪欢瀵硅薄绫诲瀷 0news澶氬浘 1news瑙嗛")
     private Integer objType;
 
     @ApiModelProperty(value = "鏂囦欢鍦板潃")
     @ExcelColumn(name="鏂囦欢鍦板潃")
     private String fileurl;
+    @ApiModelProperty(value = "鏂囦欢鍦板潃瀹屾暣")
+    @TableField(exist = false)
+    private String fileurlFull;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
     @ExcelColumn(name="鎺掑簭鐮�")
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/News.java b/server/service/src/main/java/com/doumee/dao/business/model/News.java
index 0d61f8d..0d633f5 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/News.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/News.java
@@ -11,6 +11,7 @@
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 璧勮鍜屽畾鍒舵湇鍔′俊鎭〃
@@ -70,6 +71,9 @@
     @ApiModelProperty(value = "璺宠浆绫诲瀷 0瀵屾枃鏈� 1澶栭摼", example = "1")
     @ExcelColumn(name="璺宠浆绫诲瀷 0瀵屾枃鏈� 1澶栭摼")
     private Integer linkType;
+    @ApiModelProperty(value = "闄勪欢绫诲瀷 0鍥剧墖 1瑙嗛", example = "1")
+    @ExcelColumn(name="闄勪欢绫诲瀷 0鍥剧墖 1瑙嗛")
+    private Integer fileType;
 
     @ApiModelProperty(value = "鐘舵�� 0灞曠ず 1涓嶅睍绀�", example = "1")
     @ExcelColumn(name="鐘舵�� 0灞曠ず 1涓嶅睍绀�")
@@ -102,6 +106,9 @@
     @ExcelColumn(name="鏈�杩戝彂甯冧汉")
     @TableField(exist = false)
     private String publishUserName;
+    @ApiModelProperty(value = "闄勪欢闆嗗悎")
+    @TableField(exist = false)
+    private List<Multifile> fileList;
 
     @ApiModelProperty(value = "绱犳潗绫诲瀷 0鎺ㄥ箍璧勮 1瀹氬埗鏈嶅姟", example = "1")
     @ExcelColumn(name="绱犳潗绫诲瀷 0鎺ㄥ箍璧勮 1瀹氬埗鏈嶅姟")
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/Users.java b/server/service/src/main/java/com/doumee/dao/business/model/Users.java
index 1161564..0fd7ea5 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/Users.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/Users.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.dao.business.dto.BaseQueryDto;
 import io.swagger.annotations.ApiModel;
@@ -160,5 +161,22 @@
     @ApiModelProperty(value = "鐢ㄦ埛瑙掕壊鍚嶇О闆嗗悎锛屽涓敤鑻辫閫楀彿闅斿紑")
     @ExcelColumn(name="鐢ㄦ埛瑙掕壊鍚嶇О闆嗗悎锛屽涓敤鑻辫閫楀彿闅斿紑")
     private String roleNames;
-
+    @ApiModelProperty(value = "鏄惁鍖呭惈涓嬬骇")
+    @TableField(exist = false)
+    private Boolean includeChild;
+    @ApiModelProperty(value = "鎵�灞炵粍缁囧悕绉�")
+    @TableField(exist = false)
+    private String shopName;
+    @ApiModelProperty(value = "缁勭粐绫诲瀷")
+    @TableField(exist = false)
+    private Integer shopType;
+    @ApiModelProperty(value = "缁勭粐绫诲瀷浜岀骇")
+    @TableField(exist = false)
+    private Integer shopSecType;
+    @ApiModelProperty(value = "瀹屾暣澶村儚褰�")
+    @TableField(exist = false)
+    private String imgurlFull;
+    @ApiModelProperty(value = "涓汉浜岀淮鐮佸浘鐗囧湴鍧�")
+    @TableField(exist = false)
+    private String qrcodeImgFull;
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java
index 5bc8b55..f51413f 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java
@@ -1,19 +1,32 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.MultifileMapper;
 import com.doumee.dao.business.NewsMapper;
+import com.doumee.dao.business.model.BjParam;
+import com.doumee.dao.business.model.Multifile;
 import com.doumee.dao.business.model.News;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.NewsService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -26,16 +39,60 @@
 
     @Autowired
     private NewsMapper newsMapper;
+    @Autowired
+    private MultifileMapper multifileMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
     @Override
-    public Long create(News news) {
-        newsMapper.insert(news);
-        return news.getId();
+    @Transactional
+    public Long create(News param) {
+        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        param.setIsdeleted(Constants.ZERO);
+        param.setEditor(userInfo.getId());
+        param.setCreator(userInfo.getId());
+        param.setStatus(Constants.formatIntegerNum(param.getStatus()));
+        param.setCreateDate(new Date());
+        param.setEditDate(param.getCreateDate());
+        param.setPublishUserid(param.getCreator());
+        param.setFileType(Constants.formatIntegerNum(param.getFileType()));
+        newsMapper.insert(param);
+        if(param.getFileList()!=null && param.getFileList().size()>0){
+            List<Multifile> multifiles = new ArrayList<>();
+            int index =1;
+            for(Multifile f : param.getFileList()){
+                if(StringUtils.isNotBlank(f.getFileurl())){
+                    f.setId(null);
+                    f.setIsdeleted(Constants.ZERO);
+                    f.setObjId(param.getId());
+                    f.setType(StringUtils.endsWith(f.getFileurl(),".mp4")?Constants.ONE:Constants.ZERO);
+                    f.setObjType(Constants.MultiFile.NEWS_FILE.getKey());
+                    f.setCreator(param.getCreator());
+                    f.setCreateDate(param.getCreateDate());
+                    f.setSortnum(index++);
+                    multifiles.add(f);
+                }
+            }
+            if(multifiles.size()>0){
+                multifileMapper.insert(multifiles);
+            }
+        }
+        return param.getId();
     }
 
     @Override
     public void deleteById(Long id) {
-        newsMapper.deleteById(id);
+        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        newsMapper.update(null,new UpdateWrapper<News>().lambda()
+                .set(News::getIsdeleted,Constants.ONE )
+                .set(News::getEditor,userInfo.getId() )
+                .set(News::getEditDate,new Date() )
+                .eq(News::getId,id));
+        multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
+                .set(Multifile::getIsdeleted,Constants.ONE )
+                .eq(Multifile::getIsdeleted,Constants.ZERO )
+                .eq(Multifile::getObjType,Constants.MultiFile.NEWS_FILE.getKey())
+                .eq(Multifile::getObjId,id));
     }
 
     @Override
@@ -49,12 +106,44 @@
         if (CollectionUtils.isEmpty(ids)) {
             return;
         }
-        newsMapper.deleteBatchIds(ids);
+        for(Long id : ids){
+            deleteById(id);
+        }
     }
 
     @Override
+    @Transactional
     public void updateById(News news) {
+        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        news.setEditor(userInfo.getId());
+        news.setEditDate(new Date());
+        news.setPublishUserid(news.getEditor());
         newsMapper.updateById(news);
+        if(news.getFileList()!=null && news.getFileList().size()>0){
+            List<Multifile> multifiles = new ArrayList<>();
+            int index =1;
+            for(Multifile f : news.getFileList()){
+                if(StringUtils.isNotBlank(f.getFileurl())){
+                    f.setId(null);
+                    f.setIsdeleted(Constants.ZERO);
+                    f.setType(StringUtils.endsWith(f.getFileurl(),".mp4")?Constants.ONE:Constants.ZERO);
+                    f.setObjId(news.getId());
+                    f.setObjType(Constants.MultiFile.NEWS_FILE.getKey());
+                    f.setCreator(news.getCreator());
+                    f.setCreateDate(news.getCreateDate());
+                    f.setSortnum(index++);
+                    multifiles.add(f);
+                }
+            }
+            if(multifiles.size()>0){
+                multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
+                        .set(Multifile::getIsdeleted,Constants.ONE )
+                        .eq(Multifile::getIsdeleted,Constants.ZERO )
+                        .eq(Multifile::getObjType,Constants.MultiFile.NEWS_FILE.getKey())
+                        .eq(Multifile::getObjId,news.getId() ));
+                multifileMapper.insert(multifiles);
+            }
+        }
     }
 
     @Override
@@ -87,76 +176,141 @@
     @Override
     public PageData<News> findPage(PageWrap<News> pageWrap) {
         IPage<News> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<News> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<News> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
+        pageWrap.getModel().setIsdeleted(Constants.ZERO);
+        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,News::getEditor)
+                .selectAll(News.class)
+                .selectAs(SystemUser::getRealname,News::getEditorName);
         if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(News::getId, pageWrap.getModel().getId());
+            queryWrapper.eq(News::getId, pageWrap.getModel().getId());
         }
         if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(News::getCreator, pageWrap.getModel().getCreator());
+            queryWrapper.eq(News::getCreator, pageWrap.getModel().getCreator());
         }
         if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(News::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(News::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+            queryWrapper.ge(News::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.le(News::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
         }
         if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(News::getEditor, pageWrap.getModel().getEditor());
+            queryWrapper.eq(News::getEditor, pageWrap.getModel().getEditor());
         }
         if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(News::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(News::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+            queryWrapper.ge(News::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.le(News::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
         }
         if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(News::getIsdeleted, pageWrap.getModel().getIsdeleted());
+            queryWrapper.eq(News::getIsdeleted, pageWrap.getModel().getIsdeleted());
         }
         if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(News::getRemark, pageWrap.getModel().getRemark());
+            queryWrapper.eq(News::getRemark, pageWrap.getModel().getRemark());
         }
         if (pageWrap.getModel().getTitle() != null) {
-            queryWrapper.lambda().like(News::getTitle, pageWrap.getModel().getTitle());
+            queryWrapper.like(News::getTitle, pageWrap.getModel().getTitle());
         }
         if (pageWrap.getModel().getSubTitle() != null) {
-            queryWrapper.lambda().eq(News::getSubTitle, pageWrap.getModel().getSubTitle());
+            queryWrapper.eq(News::getSubTitle, pageWrap.getModel().getSubTitle());
         }
         if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(News::getSortnum, pageWrap.getModel().getSortnum());
+            queryWrapper.eq(News::getSortnum, pageWrap.getModel().getSortnum());
         }
         if (pageWrap.getModel().getContent() != null) {
-            queryWrapper.lambda().eq(News::getContent, pageWrap.getModel().getContent());
+            queryWrapper.eq(News::getContent, pageWrap.getModel().getContent());
         }
         if (pageWrap.getModel().getLinkType() != null) {
-            queryWrapper.lambda().eq(News::getLinkType, pageWrap.getModel().getLinkType());
+            queryWrapper.eq(News::getLinkType, pageWrap.getModel().getLinkType());
         }
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(News::getStatus, pageWrap.getModel().getStatus());
+            queryWrapper.eq(News::getStatus, pageWrap.getModel().getStatus());
         }
         if (pageWrap.getModel().getLookNum() != null) {
-            queryWrapper.lambda().eq(News::getLookNum, pageWrap.getModel().getLookNum());
+            queryWrapper.eq(News::getLookNum, pageWrap.getModel().getLookNum());
         }
         if (pageWrap.getModel().getDonwloadNum() != null) {
-            queryWrapper.lambda().eq(News::getDonwloadNum, pageWrap.getModel().getDonwloadNum());
+            queryWrapper.eq(News::getDonwloadNum, pageWrap.getModel().getDonwloadNum());
         }
         if (pageWrap.getModel().getPublishDate() != null) {
-            queryWrapper.lambda().ge(News::getPublishDate, Utils.Date.getStart(pageWrap.getModel().getPublishDate()));
-            queryWrapper.lambda().le(News::getPublishDate, Utils.Date.getEnd(pageWrap.getModel().getPublishDate()));
+            queryWrapper.ge(News::getPublishDate, Utils.Date.getStart(pageWrap.getModel().getPublishDate()));
+            queryWrapper.le(News::getPublishDate, Utils.Date.getEnd(pageWrap.getModel().getPublishDate()));
         }
         if (pageWrap.getModel().getPublishUserid() != null) {
-            queryWrapper.lambda().eq(News::getPublishUserid, pageWrap.getModel().getPublishUserid());
+            queryWrapper.eq(News::getPublishUserid, pageWrap.getModel().getPublishUserid());
         }
         if (pageWrap.getModel().getPublishInfo() != null) {
-            queryWrapper.lambda().eq(News::getPublishInfo, pageWrap.getModel().getPublishInfo());
+            queryWrapper.eq(News::getPublishInfo, pageWrap.getModel().getPublishInfo());
         }
         if (pageWrap.getModel().getType() != null) {
-            queryWrapper.lambda().eq(News::getType, pageWrap.getModel().getType());
+            queryWrapper.eq(News::getType, pageWrap.getModel().getType());
         }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
+
+        PageData<News> pageData =  PageData.from(newsMapper.selectJoinPage(page, News.class,queryWrapper));
+        if(pageData!=null && pageData.getRecords()!=null && pageData.getRecords().size()>0){
+
+            List<Long> idList = new ArrayList<>();
+            for(News model : pageData.getRecords()){
+                idList.add(model.getId());
             }
-            queryWrapper.orderByAsc(sortData.getProperty());
+            List<Multifile> files = dealMultifileList(idList);
+            for(News model : pageData.getRecords()){
+                setFilelistById(model,files);
+            }
+
         }
-        return PageData.from(newsMapper.selectPage(page, queryWrapper));
+        return pageData;
+    }
+
+    private void setFilelistById(News model, List<Multifile> multifiles) {
+        if(multifiles!=null && multifiles.size()>0){
+            for(Multifile f : multifiles){
+                if(Constants.equalsLong(f.getObjId(),model.getId())){
+                    if(Constants.equalsInteger(model.getType(),Constants.ZERO) &&Constants.equalsInteger(model.getFileType(),Constants.ONE) && Constants.equalsInteger(f.getType(),Constants.ONE)){
+                        //濡傛灉鏄棰�
+                        if(model.getFileList() == null){
+                            model.setFileList(new ArrayList<>());
+                        }
+                        model.getFileList().add(f);
+                        break;
+                    }
+                    if(Constants.equalsInteger(model.getType(),Constants.ZERO) && Constants.equalsInteger(model.getFileType(),Constants.ZERO) && Constants.equalsInteger(f.getType(),Constants.ZERO)){
+                        //濡傛灉鏄棰�
+                        if(model.getFileList() == null){
+                            model.setFileList(new ArrayList<>());
+                        }
+                        model.getFileList().add(f);
+                    }
+
+                    if(Constants.equalsInteger(model.getType(),Constants.ONE)){
+                        //濡傛灉鏄棰�
+                        if(model.getFileList() == null){
+                            model.setFileList(new ArrayList<>());
+                        }
+                        model.getFileList().add(f);
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    private List<Multifile> dealMultifileList(List<Long> idList) {
+        List<Integer> types = new ArrayList<>();
+        types.add(Constants.MultiFile.NEWS_FILE.getKey());
+        List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getIsdeleted,Constants.ZERO )
+                .in(Multifile::getObjType,types)
+                .in(Multifile::getObjId,idList )
+                .orderByAsc(Multifile::getSortnum)
+        );
+        if(multifiles!=null && multifiles.size()>0){
+            String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH ).getCode() +
+                    systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.NEWS_FILE ).getCode();
+            for(Multifile f : multifiles){
+                if(StringUtils.isNotBlank(f.getFileurl())){
+                    f.setFileurlFull(path + f.getFileurl());
+                }
+            }
+        }
+        return multifiles;
     }
 
     @Override
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
index d792fef..df3f2cb 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
@@ -1,31 +1,33 @@
 package com.doumee.service.business.impl;
 
-import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
-import com.doumee.config.Jwt.JwtPayLoad;
-import com.doumee.config.Jwt.JwtTokenUtil;
-import com.doumee.core.constants.ResponseStatus;
-import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
-import com.doumee.core.utils.CodeVerifyUtils;
-import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.ShopMapper;
 import com.doumee.core.wx.WxMiniConfig;
 import com.doumee.dao.business.UsersMapper;
+import com.doumee.dao.business.model.Multifile;
+import com.doumee.dao.business.model.News;
+import com.doumee.dao.business.model.Shop;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.Users;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.dao.web.response.AccountResponse;
 import com.doumee.service.business.UsersService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.catalina.User;
+import org.apache.commons.lang3.StringUtils;
 import me.chanjar.weixin.common.error.WxErrorException;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -40,6 +42,10 @@
 
     @Autowired
     private UsersMapper usersMapper;
+    @Autowired
+    private ShopMapper shopMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
     @Override
     public Long create(Users users) {
@@ -101,123 +107,159 @@
     @Override
     public PageData<Users> findPage(PageWrap<Users> pageWrap) {
         IPage<Users> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<Users> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<Users> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.leftJoin(Shop.class,Shop::getId,Users::getDepartmentId)
+                .selectAs(Shop::getNamePath,Users::getShopName)
+                .selectAs(Shop::getType,Users::getShopType)
+                .selectAs(Shop::getSecondType,Users::getShopSecType)
+                .selectAll(Users.class);
         Utils.MP.blankToNull(pageWrap.getModel());
         if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(Users::getId, pageWrap.getModel().getId());
+            queryWrapper.eq(Users::getId, pageWrap.getModel().getId());
         }
         if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(Users::getCreator, pageWrap.getModel().getCreator());
+            queryWrapper.eq(Users::getCreator, pageWrap.getModel().getCreator());
         }
         if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(Users::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(Users::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+            queryWrapper.ge(Users::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.le(Users::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
         }
         if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(Users::getEditor, pageWrap.getModel().getEditor());
+            queryWrapper.eq(Users::getEditor, pageWrap.getModel().getEditor());
         }
         if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(Users::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(Users::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+            queryWrapper.ge(Users::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.le(Users::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
         }
         if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(Users::getIsdeleted, pageWrap.getModel().getIsdeleted());
+            queryWrapper.eq(Users::getIsdeleted, pageWrap.getModel().getIsdeleted());
         }
         if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(Users::getRemark, pageWrap.getModel().getRemark());
+            queryWrapper.eq(Users::getRemark, pageWrap.getModel().getRemark());
         }
         if (pageWrap.getModel().getDepartmentId() != null) {
-            queryWrapper.lambda().eq(Users::getDepartmentId, pageWrap.getModel().getDepartmentId());
+            queryWrapper.eq(Users::getDepartmentId, pageWrap.getModel().getDepartmentId());
         }
         if (pageWrap.getModel().getImgurl() != null) {
-            queryWrapper.lambda().eq(Users::getImgurl, pageWrap.getModel().getImgurl());
+            queryWrapper.eq(Users::getImgurl, pageWrap.getModel().getImgurl());
         }
         if (pageWrap.getModel().getType() != null) {
-            queryWrapper.lambda().eq(Users::getType, pageWrap.getModel().getType());
+            queryWrapper.eq(Users::getType, pageWrap.getModel().getType());
         }
         if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(Users::getName, pageWrap.getModel().getName());
+            queryWrapper.eq(Users::getName, pageWrap.getModel().getName());
         }
         if (pageWrap.getModel().getBirthday() != null) {
-            queryWrapper.lambda().ge(Users::getBirthday, Utils.Date.getStart(pageWrap.getModel().getBirthday()));
-            queryWrapper.lambda().le(Users::getBirthday, Utils.Date.getEnd(pageWrap.getModel().getBirthday()));
+            queryWrapper.ge(Users::getBirthday, Utils.Date.getStart(pageWrap.getModel().getBirthday()));
+            queryWrapper.le(Users::getBirthday, Utils.Date.getEnd(pageWrap.getModel().getBirthday()));
         }
         if (pageWrap.getModel().getPhone() != null) {
-            queryWrapper.lambda().eq(Users::getPhone, pageWrap.getModel().getPhone());
+            queryWrapper.eq(Users::getPhone, pageWrap.getModel().getPhone());
         }
         if (pageWrap.getModel().getIdcardNo() != null) {
-            queryWrapper.lambda().eq(Users::getIdcardNo, pageWrap.getModel().getIdcardNo());
+            queryWrapper.eq(Users::getIdcardNo, pageWrap.getModel().getIdcardNo());
         }
         if (pageWrap.getModel().getCode() != null) {
-            queryWrapper.lambda().eq(Users::getCode, pageWrap.getModel().getCode());
+            queryWrapper.eq(Users::getCode, pageWrap.getModel().getCode());
         }
         if (pageWrap.getModel().getOpenid() != null) {
-            queryWrapper.lambda().eq(Users::getOpenid, pageWrap.getModel().getOpenid());
+            queryWrapper.eq(Users::getOpenid, pageWrap.getModel().getOpenid());
         }
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(Users::getStatus, pageWrap.getModel().getStatus());
+            queryWrapper.eq(Users::getStatus, pageWrap.getModel().getStatus());
         }
         if (pageWrap.getModel().getIamStatus() != null) {
-            queryWrapper.lambda().eq(Users::getIamStatus, pageWrap.getModel().getIamStatus());
+            queryWrapper.eq(Users::getIamStatus, pageWrap.getModel().getIamStatus());
         }
         if (pageWrap.getModel().getIamDate() != null) {
-            queryWrapper.lambda().ge(Users::getIamDate, Utils.Date.getStart(pageWrap.getModel().getIamDate()));
-            queryWrapper.lambda().le(Users::getIamDate, Utils.Date.getEnd(pageWrap.getModel().getIamDate()));
+            queryWrapper.ge(Users::getIamDate, Utils.Date.getStart(pageWrap.getModel().getIamDate()));
+            queryWrapper.le(Users::getIamDate, Utils.Date.getEnd(pageWrap.getModel().getIamDate()));
         }
         if (pageWrap.getModel().getIamId() != null) {
-            queryWrapper.lambda().eq(Users::getIamId, pageWrap.getModel().getIamId());
+            queryWrapper.eq(Users::getIamId, pageWrap.getModel().getIamId());
         }
         if (pageWrap.getModel().getIamUsername() != null) {
-            queryWrapper.lambda().eq(Users::getIamUsername, pageWrap.getModel().getIamUsername());
+            queryWrapper.like(Users::getIamUsername, pageWrap.getModel().getIamUsername());
         }
         if (pageWrap.getModel().getPassword() != null) {
-            queryWrapper.lambda().eq(Users::getPassword, pageWrap.getModel().getPassword());
+            queryWrapper.eq(Users::getPassword, pageWrap.getModel().getPassword());
         }
         if (pageWrap.getModel().getSex() != null) {
-            queryWrapper.lambda().eq(Users::getSex, pageWrap.getModel().getSex());
+            queryWrapper.eq(Users::getSex, pageWrap.getModel().getSex());
         }
         if (pageWrap.getModel().getLastLoginDate() != null) {
-            queryWrapper.lambda().ge(Users::getLastLoginDate, Utils.Date.getStart(pageWrap.getModel().getLastLoginDate()));
-            queryWrapper.lambda().le(Users::getLastLoginDate, Utils.Date.getEnd(pageWrap.getModel().getLastLoginDate()));
+            queryWrapper.ge(Users::getLastLoginDate, Utils.Date.getStart(pageWrap.getModel().getLastLoginDate()));
+            queryWrapper.le(Users::getLastLoginDate, Utils.Date.getEnd(pageWrap.getModel().getLastLoginDate()));
         }
         if (pageWrap.getModel().getLoginNum() != null) {
-            queryWrapper.lambda().eq(Users::getLoginNum, pageWrap.getModel().getLoginNum());
+            queryWrapper.eq(Users::getLoginNum, pageWrap.getModel().getLoginNum());
         }
         if (pageWrap.getModel().getLastLoginPlat() != null) {
-            queryWrapper.lambda().eq(Users::getLastLoginPlat, pageWrap.getModel().getLastLoginPlat());
+            queryWrapper.eq(Users::getLastLoginPlat, pageWrap.getModel().getLastLoginPlat());
         }
         if (pageWrap.getModel().getCostomerNum() != null) {
-            queryWrapper.lambda().eq(Users::getCostomerNum, pageWrap.getModel().getCostomerNum());
+            queryWrapper.eq(Users::getCostomerNum, pageWrap.getModel().getCostomerNum());
         }
         if (pageWrap.getModel().getJobDate() != null) {
-            queryWrapper.lambda().eq(Users::getJobDate, pageWrap.getModel().getJobDate());
+            queryWrapper.eq(Users::getJobDate, pageWrap.getModel().getJobDate());
         }
         if (pageWrap.getModel().getSlogans() != null) {
-            queryWrapper.lambda().eq(Users::getSlogans, pageWrap.getModel().getSlogans());
+            queryWrapper.eq(Users::getSlogans, pageWrap.getModel().getSlogans());
         }
         if (pageWrap.getModel().getQrcodeImg() != null) {
-            queryWrapper.lambda().eq(Users::getQrcodeImg, pageWrap.getModel().getQrcodeImg());
+            queryWrapper.eq(Users::getQrcodeImg, pageWrap.getModel().getQrcodeImg());
         }
         if (pageWrap.getModel().getEmail() != null) {
-            queryWrapper.lambda().eq(Users::getEmail, pageWrap.getModel().getEmail());
+            queryWrapper.eq(Users::getEmail, pageWrap.getModel().getEmail());
         }
         if (pageWrap.getModel().getUserTypes() != null) {
-            queryWrapper.lambda().eq(Users::getUserTypes, pageWrap.getModel().getUserTypes());
+            queryWrapper.eq(Users::getUserTypes, pageWrap.getModel().getUserTypes());
         }
         if (pageWrap.getModel().getRoleIds() != null) {
-            queryWrapper.lambda().eq(Users::getRoleIds, pageWrap.getModel().getRoleIds());
+            queryWrapper.eq(Users::getRoleIds, pageWrap.getModel().getRoleIds());
         }
-        if (pageWrap.getModel().getRoleNames() != null) {
-            queryWrapper.lambda().eq(Users::getRoleNames, pageWrap.getModel().getRoleNames());
+        if (StringUtils.isNotBlank(pageWrap.getModel().getRoleNames() )) {
+            queryWrapper.eq(Users::getRoleNames, pageWrap.getModel().getRoleNames());
         }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
+        if (StringUtils.isNotBlank(pageWrap.getModel().getShopName() )) {
+            queryWrapper.eq(Shop::getName, pageWrap.getModel().getShopName());
+        }
+        queryWrapper.eq(pageWrap.getModel().getShopType()!=null,Shop::getType,pageWrap.getModel().getShopType());
+        queryWrapper.eq(pageWrap.getModel().getShopSecType()!=null,Shop::getSecondType,pageWrap.getModel().getShopSecType());
+        if(StringUtils.isNotBlank(pageWrap.getModel().getQueryKeyword())){
+            queryWrapper.and(w ->{
+                w.eq(Users::getName,pageWrap.getModel().getQueryKeyword())
+                        .or().eq(Users::getPhone,pageWrap.getModel().getQueryKeyword())
+                        .or().eq(Users::getCode,pageWrap.getModel().getQueryKeyword())
+                ;
+            } );
+        }
+        if(pageWrap.getModel().getIamOrgId()!=null){
+            if(pageWrap.getModel().getIncludeChild()!=null &&pageWrap.getModel().getIncludeChild() ){
+                //濡傛灉鍖呭惈涓嬬骇缁勭粐
+                Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getOrgId,pageWrap.getModel().getIamOrgId()).last("limit 1"));//鏌ヨ缁勭粐淇℃伅
+                queryWrapper.likeRight(Shop::getIdPath,shop.getIdPath());
+            }else{
+                //涓嶅寘鍚笅绾х粍缁�
+                queryWrapper.eq(Shop::getOrgId,pageWrap.getModel().getIamOrgId());
             }
         }
-        return PageData.from(usersMapper.selectPage(page, queryWrapper));
+
+        PageData<Users> pageData =   PageData.from(usersMapper.selectJoinPage(page,Users.class, queryWrapper));
+        if(pageData!=null && pageData.getRecords()!=null && pageData.getRecords().size()>0){
+                String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH ).getCode() +
+                        systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.USERS_FILE ).getCode();
+                for(Users f : pageData.getRecords()){
+                    if(StringUtils.isNotBlank(f.getImgurl())){
+                        f.setImgurlFull(path + f.getImgurl());
+                    }
+                    if(StringUtils.isNotBlank(f.getQrcodeImg())){
+                        f.setQrcodeImgFull(path + f.getQrcodeImg());
+                    }
+                }
+
+        }
+        return pageData;
     }
 
     @Override
diff --git a/server/service/src/main/resources/mappers/SystemDictDataMapper.xml b/server/service/src/main/resources/mappers/SystemDictDataMapper.xml
index ae3a515..f89c4d7 100644
--- a/server/service/src/main/resources/mappers/SystemDictDataMapper.xml
+++ b/server/service/src/main/resources/mappers/SystemDictDataMapper.xml
@@ -16,7 +16,7 @@
   </resultMap>
   <select id="selectManageList" parameterType="com.doumee.dao.system.dto.QuerySystemDictDataDTO" resultMap="SystemDictDataListVO">
     SELECT
-      dict_data.`ID`, dict_data.`DICT_ID`, dict_data.`CODE`, dict_data.`LABEL`, dict_data.`SORT`, dict_data.`DISABLED`, dict_data.`CREATE_TIME`, dict_data.`UPDATE_TIME`, dict_data.`CREATE_USER`, dict_data.`UPDATE_USER`,
+      dict_data.*,
       create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
       update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
     FROM SYSTEM_DICT_DATA dict_data
@@ -31,7 +31,7 @@
   </select>
   <select id="list" resultType="com.doumee.dao.system.vo.SystemDictDataListVO">
     SELECT
-      dict_data.`ID`, dict_data.`DICT_ID`, dict_data.`CODE`, dict_data.`LABEL`
+      dict_data.*
     FROM SYSTEM_DICT_DATA dict_data
     <where>
       dict_data.DELETED = 0

--
Gitblit v1.9.3