From e9717d6ebed478c4ff7ddbf539d1a591bbf5185a Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期三, 12 六月 2024 10:49:24 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit

---
 admin/src/components/common/RichEditor.vue                                                           |  395 ++++++++++++++++++++++++-----------
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java |   47 ++--
 admin/src/views/task/index.vue                                                                       |   14 
 admin/src/components/common/ImageCropper.vue                                                         |   15 
 admin/src/api/business/approve.js                                                                    |    3 
 admin/src/filters/index.js                                                                           |    6 
 admin/src/components/system/dict/DictDataManagerWindow.vue                                           |   68 ++++-
 admin/src/components/system/dict/OperaDictDataWindow.vue                                             |   92 ++------
 admin/src/views/meeting/rooms.vue                                                                    |    2 
 9 files changed, 400 insertions(+), 242 deletions(-)

diff --git a/admin/src/api/business/approve.js b/admin/src/api/business/approve.js
index 4c96cf1..879f69b 100644
--- a/admin/src/api/business/approve.js
+++ b/admin/src/api/business/approve.js
@@ -12,6 +12,9 @@
     }
   })
 }
+export function taskCenterHeadPC (data) {
+  return request.get('/visitsAdmin/cloudService/business/staging/taskCenterHeadPC', data)
+}
 // 浠诲姟涓績 鍒楄〃
 export function taskCenterPage (data) {
   return request.post('/visitsAdmin/cloudService/business/staging/taskPage', data)
diff --git a/admin/src/components/common/ImageCropper.vue b/admin/src/components/common/ImageCropper.vue
index 7929744..d15179c 100644
--- a/admin/src/components/common/ImageCropper.vue
+++ b/admin/src/components/common/ImageCropper.vue
@@ -6,9 +6,12 @@
           <vue-cropper
               ref="cropper"
               :img="imgSrc"
+              :width="options.width"
+              :height="options.height"
               :canScale="options.canScale"
               :autoCrop="options.autoCrop"
               :canMove="options.canMove"
+              :output-size="options.outputSize"
               :centerBox="options.centerBox"
               :autoCropWidth="options.autoCropWidth"
               :autoCropHeight="options.autoCropHeight"
@@ -17,11 +20,6 @@
         </div>
         <div class="previews">
           <img style="width: 100px;height: 100px;border-radius: 50%;object-fit: cover" :src="cutImgSrc" alt="鍥剧墖">
-          <!--          <el-image-->
-          <!--            v-if="cutImgSrc"-->
-          <!--            style="width: 100px; height: 100px;vertical-align: middle;border-radius: 50%;"-->
-          <!--            :src="cutImgSrc"-->
-          <!--            fit="fill"></el-image>-->
         </div>
       </div>
     </div>
@@ -76,8 +74,11 @@
         autoCrop: true,
         canMove: false,
         centerBox: true,
-        autoCropWidth: 200,
-        autoCropHeight: 200,
+        height: 300,
+        width: 300,
+        outputSize:{width: 300, height: 300},
+        autoCropWidth: 300,
+        autoCropHeight: 300,
         fixed: true,
         fixedNumber: [1, 1]
       },
diff --git a/admin/src/components/common/RichEditor.vue b/admin/src/components/common/RichEditor.vue
index 7ed7fdc..bdcf1bf 100644
--- a/admin/src/components/common/RichEditor.vue
+++ b/admin/src/components/common/RichEditor.vue
@@ -1,162 +1,315 @@
 <template>
-  <div class="wang_editor">
-    <Toolbar
-      style="border-bottom: 1px solid #ccc"
-      :editor="editor"
-      :default-config="toolbarConfig"
-      :mode="mode"
-    />
-    <Editor
-      v-model="html"
-      style="min-height: 200px"
-      :default-config="editorConfig"
-      :mode="mode"
-      @onCreated="onCreated"
-    />
+  <div :style="styleEditor">
+    <Toolbar style="border-bottom: 1px solid #ccc" :editor="editor" :defaultConfig="toolbarConfig" :mode="mode" />
+    <Editor style="height: 300px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode"
+            @onCreated="onCreated" @onChange="onChange" />
   </div>
 </template>
-
+<style src="@wangeditor/editor/dist/css/style.css"></style>
 <script>
+import Vue from 'vue'
 import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
-import '@wangeditor/editor/dist/css/style.css'
-import axios from 'axios'
-
-import { uploadFile } from '@/api'
-
-const uploadConfig = {
-  action: uploadFile, // 蹇呭~鍙傛暟 鍥剧墖涓婁紶鍦板潃
-  methods: 'POST', // 蹇呭~鍙傛暟 鍥剧墖涓婁紶鏂瑰紡
-  token: '', // 鍙�夊弬鏁� 濡傛灉闇�瑕乼oken楠岃瘉锛屽亣璁句綘鐨則oken鏈夊瓨鏀惧湪sessionStorage
-  name: 'file', // 蹇呭~鍙傛暟 鏂囦欢鐨勫弬鏁板悕
-  size: 500, // 鍙�夊弬鏁�   鍥剧墖澶у皬锛屽崟浣嶄负Kb, 1M = 1024Kb
-  accept: 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon' // 鍙�� 鍙笂浼犵殑鍥剧墖鏍煎紡
-}
-export default {
-  components: {
-    Editor,
-    Toolbar
-  },
+import { Loading } from 'element-ui';
+export default Vue.extend({
   props: {
-    info: {
+    richData: { // 鐖剁粍浠朵紶閫掔殑鏁版嵁
       type: String,
       default: ''
     },
-    default: {
-      type: String,
-      default: ''
-    },
-    placeholder: {
-      type: String,
-      default: '璇疯緭鍏ュ唴瀹�...'
-    }
+    styleEditor: '',
+    readonly: false, // 鏄惁鍙互杈撳叆
   },
-  data () {
+  name:'RichEditor',
+  components: { Editor, Toolbar },
+  data() {
     return {
       editor: null,
-      toolbarConfig: {},
-      editorConfig: {
-        placeholder: this.placeholder,
+      html: '',
+      toolbarConfig: { // 宸ュ叿鏍忛厤缃�
+        toolbarKeys: this.readonly ? ["fullScreen"]: [ // 鏄剧ず鎸囧畾鐨勮彍鍗曢」
+          "bold", // 绮椾綋
+          "underline", // 涓嬪垝绾�
+          "italic", // 鏂滀綋
+          "through", // 鍒犻櫎绾�
+          "code", // 琛屽唴浠g爜
+          "sub", // 涓嬫爣
+          "sup", // 涓婃爣
+          "clearStyle", // 娓呴櫎鏍煎紡
+          "color", // 瀛椾綋棰滆壊
+          "bgColor", // 鑳屾櫙鑹�
+          "fontSize", // 瀛楀彿
+          "fontFamily", // 瀛椾綋
+          "indent", // 澧炲姞缂╄繘
+          "delIndent", // 鍑忓皯缂╄繘
+          "justifyLeft", // 宸﹀榻�
+          "justifyRight", // 鍙冲榻�
+          "justifyCenter", // 灞呬腑瀵归綈
+          "justifyJustify", // 涓ょ瀵归綈
+          "lineHeight", // 琛岄珮
+          // "viewImageLink", // 鏌ョ湅閾炬帴
+          "divider", // 鍒嗗壊绾�
+          "emotion", // 琛ㄦ儏
+          "insertLink", // 鎻掑叆閾炬帴
+          // "editLink", // 淇敼閾炬帴
+          // "unLink", // 鍙栨秷閾炬帴
+          // "viewLink", // 鏌ョ湅閾炬帴
+          "codeBlock", // 浠g爜鍧�
+          "blockquote", // 寮曠敤
+          "headerSelect", // 鏍囬
+          // "header1", // 鏍囬1
+          // "header2", // 鏍囬2
+          // "header3", // 鏍囬3
+          // "header4", // 鏍囬4
+          // "header5", // 鏍囬5
+          // "todo", // 寰呭姙
+          "redo", // 閲嶅仛
+          "undo", // 鎾ら攢
+          // "enter", // 鍥炶溅
+          // "bulletedList", // 鏃犲簭鍒楄〃
+          // "numberedList", // 鏈夊簭鍒楄〃
+          // "codeSelectLang" // 閫夋嫨璇█
+          // 琛ㄦ牸鍔熻兘鍒嗙粍
+         /* {
+            key: 'table-style', // 蹇呭~锛岃浠� group 寮�澶�
+            title: '琛ㄦ牸', // 蹇呭~
+            // iconSvg: '<svg>....</svg>', // 鍙��
+            menuKeys: [
+              "insertTable", // 鎻掑叆琛ㄦ牸
+              "deleteTable", // 鍒犻櫎琛ㄦ牸
+              "insertTableRow", // 鎻掑叆琛�
+              "deleteTableRow", // 鍒犻櫎琛�
+              "insertTableCol", // 鎻掑叆鍒�
+              "deleteTableCol", // 鍒犻櫎鍒�
+              "tableHeader", // 琛ㄥご
+              "tableFullWidth", // 瀹藉害鑷�傚簲
+            ] // 涓嬬骇鑿滃崟 key 锛屽繀濉�
+          },*/
+          // 涓婁紶鍥剧墖鍒嗙粍
+         /* {
+            key: 'img-style', // 蹇呭~锛岃浠� group 寮�澶�
+            title: '鍥剧墖', // 蹇呭~
+            // iconSvg: '<svg>....</svg>', // 鍙��
+            menuKeys: [
+              "uploadImage", // 涓婁紶鍥剧墖
+              "insertImage", // 缃戠粶鍥剧墖
+              "deleteImage", // 鍒犻櫎鍥剧墖
+              "editImage", // 缂栬緫鍥剧墖
+              "imageWidth30", // 鍥剧墖瀹藉害鐩稿浜庣紪杈戝櫒瀹藉害鐨勭櫨鍒嗘瘮30
+              "imageWidth50", // 鍥剧墖瀹藉害鐩稿浜庣紪杈戝櫒瀹藉害鐨勭櫨鍒嗘瘮50
+              "imageWidth100", // 鍥剧墖瀹藉害鐩稿浜庣紪杈戝櫒瀹藉害鐨勭櫨鍒嗘瘮100
+            ] // 涓嬬骇鑿滃崟 key 锛屽繀濉�
+          },*/
+          // 瑙嗛鍒嗙粍
+         /* {
+            key: 'video-style', // 蹇呭~锛岃浠� group 寮�澶�
+            title: '瑙嗛', // 蹇呭~
+            // iconSvg: '<svg>....</svg>', // 鍙��
+            menuKeys: [
+              "insertVideo", // 鎻掑叆缃戠粶瑙嗛
+              "uploadVideo", // 涓婁紶瑙嗛
+              "editVideoSize", // 淇敼瑙嗛灏哄
+            ] // 涓嬬骇鑿滃崟 key 锛屽繀濉�
+          },*/
+          "fullScreen", // 鍏ㄥ睆
+        ],
+        excludeKeys: [ // 闅愯棌鎸囧畾鐨勮彍鍗曢」
+          // 'headerSelect',
+          // 'video-style'
+          // 鎺掗櫎鑿滃崟缁勶紝鍐欒彍鍗曠粍 key 鐨勫�煎嵆鍙�
+        ],
+
+      },
+      editorConfig: { // 缂栬緫鍣ㄩ厤缃�
+        placeholder: '璇疯緭鍏ュ唴瀹�...',
+        readOnly: this.readonly, // 鏄惁鍙锛岄粯璁alse
+        autoFocus: false, // 鏄惁鑷姩focus锛岄粯璁や负true
+        scroll: true, // 閰嶇疆缂栬緫鍣ㄦ槸鍚︽敮鎸佹粴鍔紝榛樿涓� true 銆傛敞鎰忥紝姝ゆ椂涓嶈鍥哄畾 editor-container 鐨勯珮搴︼紝璁剧疆涓�涓� min-height 鍗冲彲銆�
+        maxLength: 20000, // 鏈�澶ч檺鍒讹紝閬垮厤鍐呭杩囧鍗¢】
         MENU_CONF: {
+          // 鍥剧墖涓婁紶
           uploadImage: {
-            html: this.info,
-            server: uploadFile,
+            server: process.env.VUE_APP_BASE_API + "/common/upload",
+            fieldName: 'file',
             // 鍗曚釜鏂囦欢鐨勬渶澶т綋绉檺鍒讹紝榛樿涓� 2M
-            maxFileSize: 5 * 1024 * 1024, // 1M
+            maxFileSize: 10 * 1024 * 1024, // 10M
+            // 鏈�澶氬彲涓婁紶鍑犱釜鏂囦欢锛岄粯璁や负 100
+            maxNumberOfFiles: 10,
             // 閫夋嫨鏂囦欢鏃剁殑绫诲瀷闄愬埗锛岄粯璁や负 ['image/*'] 銆傚涓嶆兂闄愬埗锛屽垯璁剧疆涓� []
             allowedFileTypes: ['image/*'],
-            // 鑷畾涔変笂浼犲弬鏁帮紝渚嬪浼犻�掗獙璇佺殑 token 绛夈�傚弬鏁颁細琚坊鍔犲埌 formData 涓紝涓�璧蜂笂浼犲埌鏈嶅姟绔�
+            // 鑷畾涔変笂浼犲弬鏁帮紝渚嬪浼犻�掗獙璇佺殑 token 绛夈�傚弬鏁颁細琚坊鍔犲埌 formData 涓紝涓�璧蜂笂浼犲埌鏈嶅姟绔��
             meta: {
-              token: '',
-              otherKey: '',
-              folder: 'COURSE_IMG'
             },
+            // 灏� meta 鎷兼帴鍒� url 鍙傛暟涓紝榛樿 false
+            metaWithUrl: false,
+            // 鑷畾涔夊鍔� http  header
+            // headers: { Authorization: "Bearer " + getToken() },
+            // 璺ㄥ煙鏄惁浼犻�� cookie 锛岄粯璁や负 false
+            withCredentials: true,
+            // 瓒呮椂鏃堕棿锛岄粯璁や负 10 绉�
+            timeout: 10 * 1000, //10 绉�
+            // 涓婁紶鍓�
+            onBeforeUpload(files) {
+              Loading.service({
+                lock: true,
+                text: '涓婁紶涓�...',
+                spinner: 'el-icon-loading',
+                background: 'rgba(0, 0, 0, 0.7)'
+              });
+              return files;
+            },
+            // 鑷畾涔夋彃鍏ュ浘鐗�
+            customInsert(res, insertFn) {
+              console.log(res);
+              // 鍥犱负鑷畾涔夋彃鍏ュ鑷磑nSuccess涓巓nFailed鍥炶皟鍑芥暟涓嶈捣浣滅敤,鑷繁鎵嬪姩澶勭悊
+              // 鍏堝叧闂瓑寰呯殑Message
+              Loading.service({
+                lock: true,
+                text: '涓婁紶涓�...',
+                spinner: 'el-icon-loading',
+                background: 'rgba(0, 0, 0, 0.7)'
+              }).close();
+              if (res.code === 200) {
+                // Message.success({
+                //     message: `${res.data.originalName} 涓婁紶鎴愬姛`
+                // });
+              } else {
+                // Message.error({
+                //     message: `${res.data.originalName} 涓婁紶澶辫触锛岃閲嶆柊灏濊瘯`
+                // });
+              }
+              insertFn(res.url, res.originalFilename, res.newFileName);
+            },
+
+            // 鍗曚釜鏂囦欢涓婁紶鎴愬姛涔嬪悗
+            onSuccess(file, res) {
+              console.log(`${file.originalFilename} 涓婁紶鎴愬姛`, res);
+            },
+            // 鍗曚釜鏂囦欢涓婁紶澶辫触
+            onFailed(file, res) {
+              console.log(`${file.originalFilename} 涓婁紶澶辫触`, res);
+            },
+            // 涓婁紶杩涘害鐨勫洖璋冨嚱鏁�
+            onProgress(progress) {
+              console.log('progress', progress);
+              // progress 鏄� 0-100 鐨勬暟瀛�
+            },
+            // 涓婁紶閿欒锛屾垨鑰呰Е鍙� timeout 瓒呮椂
+            onError(file, err, res) {
+              console.log(`${file.originalFilename} 涓婁紶鍑洪敊`, err, res);
+            }
+          },
+          // 瑙嗛涓婁紶
+          uploadVideo: {
+            fieldName: 'file',
+            server: process.env.VUE_APP_BASE_API + "/common/upload",
+            // 鍗曚釜鏂囦欢鐨勬渶澶т綋绉檺鍒讹紝榛樿涓� 10M
+            maxFileSize: 50 * 1024 * 1024, // 50M
+            // 鏈�澶氬彲涓婁紶鍑犱釜鏂囦欢锛岄粯璁や负 5
+            maxNumberOfFiles: 3,
+            // 閫夋嫨鏂囦欢鏃剁殑绫诲瀷闄愬埗锛岄粯璁や负 ['video/*'] 銆傚涓嶆兂闄愬埗锛屽垯璁剧疆涓� []
+            allowedFileTypes: ['video/*'],
+            // 鑷畾涔変笂浼犲弬鏁帮紝渚嬪浼犻�掗獙璇佺殑 token 绛夈�傚弬鏁颁細琚坊鍔犲埌 formData 涓紝涓�璧蜂笂浼犲埌鏈嶅姟绔��
+            meta: {
+              // token: 'xxx',
+              // otherKey: 'yyy'
+            },
+            // 灏� meta 鎷兼帴鍒� url 鍙傛暟涓紝榛樿 false
+            metaWithUrl: false,
+
             // 鑷畾涔夊鍔� http  header
             headers: {
-              token: localStorage.getItem('token') || ''
-              // Accept: 'text/x-json',
+              // Authorization: "Bearer " + getToken()
               // otherKey: 'xxx'
             },
             // 璺ㄥ煙鏄惁浼犻�� cookie 锛岄粯璁や负 false
             withCredentials: true,
-            // 瓒呮椂鏃堕棿锛岄粯璁や负 10 绉�
-            timeout: 5 * 1000, // 5 绉�
-            onSuccess (file, res) { // TS 璇硶
-              // onSuccess(file, res) {          // JS 璇硶
-              console.log(`${file.name} 涓婁紶鎴愬姛`, res)
+            // 瓒呮椂鏃堕棿锛岄粯璁や负 30 绉�
+            timeout: 1000 * 1000, // 1000 绉�,
+            // 涓婁紶涔嬪墠瑙﹀彂
+            onBeforeUpload(file) {
+              return file;
             },
-            customUpload (file, insertFn) { // TS 璇硶
-              // file 鍗抽�変腑鐨勬枃浠�
-              // 鑷繁瀹炵幇涓婁紶锛屽苟寰楀埌鍥剧墖 url alt href
-              // var form = new FormData()
-              // form.append('image', file)
-              // form.append('folder', 'COURSE_IMG')
-              var formData = new FormData()
-              formData.append(file.name, file)
-              formData.append('image', file)
-              formData.append('folder', 'member')
-              // formData.append('type', '')
-
-              var xhr = new XMLHttpRequest()
-              xhr.open(uploadConfig.methods, uploadConfig.action, true)
-              // 涓婁紶鏁版嵁鎴愬姛锛屼細瑙﹀彂
-              xhr.send(formData)
-              xhr.onreadystatechange = () => {
-                // 鑻ュ搷搴斿畬鎴愪笖璇锋眰鎴愬姛
-                if (xhr.readyState === 4 && xhr.status === 200) {
-                  const result = JSON.parse(xhr.responseText)
-                  console.log('result', result);
-                  insertFn(result.data.url, '', result.data.url)
-                }
+            // 鑷畾涔夋彃鍏ヨ棰�
+            customInsert(res, insertFn) {
+              // 鍥犱负鑷畾涔夋彃鍏ュ鑷磑nSuccess涓巓nFailed鍥炶皟鍑芥暟涓嶈捣浣滅敤,鑷繁鎵嬪姩澶勭悊
+              // 鍏堝叧闂瓑寰呯殑Message
+              // Message.closeAll();
+              if (res.code === 200) {
+                // Message.success({
+                //     message: `${res.data.originalName} 涓婁紶鎴愬姛`
+                // });
+              } else {
+                // Message.error({
+                //     message: `${res.data.originalName} 涓婁紶澶辫触锛岃閲嶆柊灏濊瘯`
+                // });
               }
+              insertFn(res.data.link, res.data.link);
             },
-            customInsert (res, insertFn) { // TS 璇硶
-              // customInsert(res, insertFn) {                  // JS 璇硶
-              // res 鍗虫湇鍔$鐨勮繑鍥炵粨鏋�
-              console.log(res.data.url)
-              // 浠� res 涓壘鍒� url alt href 锛岀劧鍚庢彃鍏ュ浘鐗�
-              insertFn(res.url)
+            // 涓婁紶杩涘害鐨勫洖璋冨嚱鏁�
+            onProgress(progress) {
+              console.log(progress);
+              // onProgress(progress) {       // JS 璇硶
+              // progress 鏄� 0-100 鐨勬暟瀛�
+            },
+            // // 鍗曚釜鏂囦欢涓婁紶鎴愬姛涔嬪悗
+            // onSuccess(file, res) {
+            //   console.log(`${file.name} 涓婁紶鎴愬姛`, res);
+            //   this.successMsg(file);
+            // },
+            // // 鍗曚釜鏂囦欢涓婁紶澶辫触
+            // onFailed(file, res) {
+            //   console.log(`${file.name} 涓婁紶澶辫触`, res);
+            //   this.errorMsg(file);
+            // },
+            // 涓婁紶閿欒锛屾垨鑰呰Е鍙� timeout 瓒呮椂
+            onError(file, err, res) {
+              console.log(`${file.name} 涓婁紶鍑洪敊`, err, res);
+              // Notification.error({
+              //     title: '閿欒',
+              //     message: `${file.name} 涓婁紶澶辫触锛岃閲嶆柊灏濊瘯`
+              // });
             }
           }
         }
       },
-      mode: 'default' // or 'simple'
+      mode: 'default', // or 'simple'
     }
   },
-  emits: ['input'],
-  computed: {
-    html: {
-      get () {
-        return this.info || ''
-      },
-      set (newValue) {
-        this.$emit('input', newValue)
-      }
-    }
+  watch: {
+    richData: function (value) {
+      this.html = value
+    },
+    readonly: function (value) {
+      this.readonly = value
+    },
+    styleEditor: function (value) {
+      this.styleEditor = value
+    },
   },
-  mounted () {
-    setTimeout(() => {
-      this.info = this.default
-    }, 1200)
+  mounted() {
+    // 闇�瑕佸湪缂栬緫鍣ㄥ垱寤哄畬姣曞悗鍦ㄨ祴鍊�
+    this.$nextTick(()=>{
+      this.html = this.richData
+    })
   },
-  beforeDestroy () {
+  methods: {
+    // 缂栬緫鍣ㄥ垱寤哄畬姣曟椂鐨勫洖璋冨嚱鏁�
+    onCreated(editor) {
+      this.editor = Object.seal(editor) // 涓�瀹氳鐢� Object.seal() 锛屽惁鍒欎細鎶ラ敊
+    },
+    // 缂栬緫鍣ㄥ唴瀹广�侀�夊尯鍙樺寲鏃剁殑鍥炶皟鍑芥暟
+    onChange(editor) {
+      this.$emit('getWangedditor', editor.getHtml())
+      console.log("onChange", editor.getHtml()); // onChange 鏃惰幏鍙栫紪杈戝櫒鏈�鏂板唴瀹�
+    },
+  },
+  beforeDestroy() {
+    // 缂栬緫鍣ㄩ攢姣佹椂鐨勫洖璋冨嚱鏁般�傝皟鐢� editor.destroy() 鍗冲彲閿�姣佺紪杈戝櫒
     const editor = this.editor
     if (editor == null) return
     editor.destroy() // 缁勪欢閿�姣佹椂锛屽強鏃堕攢姣佺紪杈戝櫒
-  },
-  methods: {
-    onCreated (editor) {
-      this.editor = Object.seal(editor) // 涓�瀹氳鐢� Object.seal() 锛屽惁鍒欎細鎶ラ敊
-      this.$emit('input', '123123')
-    },
-    test () {
-      console.log(this.info)
-    }
   }
-}
+})
 </script>
-
-<style lang="scss" scoped>
-.wang_editor {
-  border: 1px solid;
-}
-</style>
+<style lang="scss">
+</style>>
diff --git a/admin/src/components/system/dict/DictDataManagerWindow.vue b/admin/src/components/system/dict/DictDataManagerWindow.vue
index 29ead03..47040b9 100644
--- a/admin/src/components/system/dict/DictDataManagerWindow.vue
+++ b/admin/src/components/system/dict/DictDataManagerWindow.vue
@@ -1,9 +1,9 @@
 <template>
   <GlobalWindow
-    :title="dictName + '鏁版嵁绠$悊'"
-    width="78%"
-    :visible.sync="visible"
-    :with-footer="false"
+      :title="dictName + '鏁版嵁绠$悊'"
+      width="78%"
+      :visible.sync="visible"
+      :with-footer="false"
   >
     <TableLayout :with-breadcrumb="false">
       <!-- 琛ㄦ牸鍜屽垎椤� -->
@@ -13,14 +13,21 @@
           <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete">鍒犻櫎</el-button></li>
         </ul>
         <el-table
-          v-loading="isWorking.search"
-          :data="tableData.list"
-          stripe
-          @selection-change="handleSelectionChange"
+            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="label" label="鏁版嵁鏍囩" min-width="100px"></el-table-column>
-          <el-table-column prop="code" label="鏁版嵁鍊�" min-width="100px" show-overflow-tooltip></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" >
+                <el-button type="text" @click="showCode(row)" >鐐瑰嚮鏌ョ湅</el-button>
+              </div>
+              <div v-else>{{row.code}}</div>
+            </template>
+          </el-table-column>
           <el-table-column prop="disabled" label="鐘舵��" min-width="100px">
             <template slot-scope="{row}">{{row.disabled | disabledText}}</template>
           </el-table-column>
@@ -33,24 +40,40 @@
           <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
-            label="鎿嶄綔"
-            min-width="120"
-            fixed="right"
+              label="鎿嶄綔"
+              min-width="120"
+              fixed="right"
           >
             <template slot-scope="{row}">
-              <el-button type="text" @click="$refs.operaDictDataWindow.open('缂栬緫瀛楀吀鏁版嵁', dictId, row)" icon="el-icon-edit">缂栬緫</el-button>
+              <el-button type="text" @click="$refs.operaDictDataWindow.open('缂栬緫瀛楀吀鏁版嵁', searchForm.dictId, row)" icon="el-icon-edit">缂栬緫</el-button>
               <el-button type="text" @click="deleteById(row)" icon="el-icon-delete">鍒犻櫎</el-button>
             </template>
           </el-table-column>
         </el-table>
         <pagination
-          @size-change="handleSizeChange"
-          @current-change="handlePageChange"
-          :pagination="tableData.pagination"
+            @size-change="handleSizeChange"
+            @current-change="handlePageChange"
+            :pagination="tableData.pagination"
         ></pagination>
       </template>
       <!-- 鏂板缓/淇敼 -->
       <OperaDictDataWindow ref="operaDictDataWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
+
+      <el-dialog
+          class="center-title"
+          title="瀛楀吀鍊�"
+          width="70%"
+          height="70%"
+          text="瀛楀吀鍊�"
+          :visible.sync="visible1"
+          append-to-body
+      >
+        <div class="agree-list"  v-html="agreement">
+        </div>
+        <template  v-slot:footer>
+          <el-button @click="visible1=false">杩斿洖</el-button>
+        </template>
+      </el-dialog>
     </TableLayout>
   </GlobalWindow>
 </template>
@@ -68,6 +91,8 @@
   data () {
     return {
       visible: false,
+      visible1: false,
+      agreement: '',
       searchForm: {
         // 瀛楀吀ID
         dictId: null
@@ -83,6 +108,10 @@
       this.dictName = dictName
       this.visible = true
       this.search()
+    },
+    showCode(row){
+      this.agreement=row.code
+      this.visible1=true
     }
   },
   created () {
@@ -95,6 +124,12 @@
 </script>
 
 <style scoped lang="scss">
+.agree-list{
+  height: 550px;
+  //max-height: 50%;
+  overflow: auto;
+}
+
 /deep/ .window__body {
   .table-content {
     padding: 0;
@@ -102,5 +137,6 @@
       padding-top: 0;
     }
   }
+
 }
 </style>
diff --git a/admin/src/components/system/dict/OperaDictDataWindow.vue b/admin/src/components/system/dict/OperaDictDataWindow.vue
index b9ebd40..c544b59 100644
--- a/admin/src/components/system/dict/OperaDictDataWindow.vue
+++ b/admin/src/components/system/dict/OperaDictDataWindow.vue
@@ -1,21 +1,21 @@
 <template>
   <GlobalWindow
-    :title="title"
-    :visible.sync="visible"
-    :confirm-working="isWorking.create"
-    @confirm="confirm"
+      :title="title"
+      :visible.sync="visible"
+      :confirm-working="isWorking.create"
+      @confirm="confirm"
   >
     <el-form :model="form" ref="form" :rules="rules">
       <el-form-item label="鏁版嵁鏍囩" prop="label" required>
         <el-input v-model="form.label" placeholder="璇疯緭鍏ユ暟鎹爣绛�" v-trim maxlength="50"/>
       </el-form-item>
+      <el-form-item label="鏄惁瀵屾枃鏈�" prop="istext" >
+        <el-switch v-model="form.istext" :active-value="true" :inactive-value="false"/>
+        <span class="status-text">{{form.istext | disabledText1}}</span>
+      </el-form-item>
       <el-form-item label="鏁版嵁鍊�" prop="code" required>
-        <el-tiptap
-                v-if="[175].includes(form.id)"
-                v-model="form.code"
-                :extensions="extensions"
-        />
-        <el-input v-else v-model="form.code" placeholder="璇疯緭鍏ユ暟鎹��" v-trim />
+        <el-input v-if="!form.istext" v-model="form.code" placeholder="璇疯緭鍏ユ暟鎹��" v-trim maxlength="50"/>
+        <RichEditor v-else  :richData="form.code" :styleEditor="styleEditor" @getWangedditor="getWangedditor" :readonly="false"/>
       </el-form-item>
       <el-form-item label="鐘舵��" prop="disabled" required class="form-item-status">
         <el-switch v-model="form.disabled" :active-value="false" :inactive-value="true"/>
@@ -28,44 +28,22 @@
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
-import { upload } from '@/api/system/common'
-import {
-  // necessary extensions
-  Doc,
-  Text,
-  Paragraph,
-  Heading,
-  Bold,
-  Underline,
-  Italic,
-  Strike,
-  ListItem,
-  BulletList,
-  OrderedList,
-  Image,
-  Blockquote,
-  TextAlign,
-  Indent,
-  Table,
-  TableHeader,
-  TableCell,
-  TableRow,
-  TextColor,
-  HorizontalRule
-} from 'element-tiptap'
+import RichEditor from '@/components/common/RichEditor'
 export default {
   name: 'OperaDictDataWindow',
   extends: BaseOpera,
-  components: { GlobalWindow },
+  components: { GlobalWindow,RichEditor },
   data () {
     return {
       // 琛ㄥ崟鏁版嵁
+      styleEditor:'border: 1px solid #ccc;display: inline-block;',
       form: {
         id: null,
         dictId: null,
         code: '',
         label: '',
-        disabled: false
+        disabled: false,
+        istext: false
       },
       // 楠岃瘉瑙勫垯
       rules: {
@@ -75,42 +53,13 @@
         code: [
           { required: true, message: '璇疯緭鍏ユ暟鎹��' }
         ]
-      },
-      extensions: [
-        new Doc(),
-        new Text(),
-        new Paragraph(),
-        new Heading({ level: 5 }),
-        new Bold({ bubble: true }),
-        new Underline({ bubble: true, menubar: false }),
-        new Italic(),
-        new Strike(),
-        new ListItem(),
-        new BulletList(),
-        new OrderedList(),
-        new Image({
-          uploadRequest (file) {
-            const fd = new FormData()
-            fd.append('folder', 'visit')
-            fd.append('file', file)
-            return upload(fd).then(res => {
-              return res.url
-            })
-          }
-        }),
-        new Blockquote(),
-        new TextAlign(),
-        new Indent(),
-        new Table(),
-        new TableHeader(),
-        new TableCell(),
-        new TableRow(),
-        new HorizontalRule(),
-        new TextColor()
-      ]
+      }
     }
   },
   methods: {
+    getWangedditor(val){
+      this.form.code =val
+    },
     /**
      * @title 绐楀彛鏍囬
      * @dict 鎵�灞炲瓧鍏窱D
@@ -125,6 +74,7 @@
           this.$refs.form.resetFields()
           this.form.id = null
           this.form.dictId = dictId
+          this.form.istext=false
         })
         return
       }
@@ -132,6 +82,8 @@
       this.$nextTick(() => {
         for (const key in this.form) {
           this.form[key] = target[key]
+          this.form.dictId = dictId
+          this.form.istext=false
         }
       })
     }
diff --git a/admin/src/filters/index.js b/admin/src/filters/index.js
index e854f1e..77559ba 100644
--- a/admin/src/filters/index.js
+++ b/admin/src/filters/index.js
@@ -17,5 +17,11 @@
       }
       return '鍚敤'
     })
+    Vue.filter('disabledText1', (value) => {
+      if (value) {
+        return '鏅�氭枃鏈�'
+      }
+      return '瀵屾枃鏈�'
+    })
   }
 }
diff --git a/admin/src/views/meeting/rooms.vue b/admin/src/views/meeting/rooms.vue
index b29a7c0..0b49a6c 100644
--- a/admin/src/views/meeting/rooms.vue
+++ b/admin/src/views/meeting/rooms.vue
@@ -68,7 +68,7 @@
         </el-table-column>
         <el-table-column prop="limitNum" label="鍙�夋湇鍔¢」" align="center" min-width="140px" show-overflow-tooltip>
           <template slot-scope="{row}">
-            <div class="long-title-style">{{ row.projectList.map(item => item.projectName).join('|') }}</div>
+            <div class="long-title-style">{{ row.projectList.map(item => item.projectName).join(' | ') }}</div>
 
           </template>
         </el-table-column>
diff --git a/admin/src/views/task/index.vue b/admin/src/views/task/index.vue
index 86f5e2f..d4a61d0 100644
--- a/admin/src/views/task/index.vue
+++ b/admin/src/views/task/index.vue
@@ -120,7 +120,7 @@
 import OperaVisitsDesWindow from '@/components/business/OperaVisitsDesWindow'
 import dayjs from 'dayjs'
 import {
-  taskCenterHead,
+  taskCenterHeadPC,
   taskCenterPage
 } from '@/api'
 export default {
@@ -260,9 +260,15 @@
       })
     },
     getHeadData () {
-      taskCenterHead({
-        isDetail: '1'
-      }).then(res => {
+      const {filters} = this
+      if (filters.selTime && filters.selTime.length > 0) {
+        filters.startDate = filters.selTime[0]
+        filters.endDate = filters.selTime[1]
+      } else {
+        filters.startDate = null
+        filters.endDate = null
+      }
+      taskCenterHeadPC({ ...filters, queryType: Number(filters.queryType), isDetail: '1' }).then(res => {
         this.headData = res
       })
     },
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
index 619f502..c3c2cfa 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -290,34 +290,35 @@
                 selectList(new QueryWrapper<Notices>().lambda()
                         .ge(noticesDTO.getStartDate() != null, Notices::getCreateDate, Utils.Date.getStart(noticesDTO.getStartDate() ))
                         .le(noticesDTO.getEndDate() != null,  Notices::getCreateDate, Utils.Date.getEnd(noticesDTO.getEndDate() ))
+                        .eq(noticesDTO.getType() != null,  Notices::getType, noticesDTO.getType())
                         .eq(Notices::getUserId,noticesDTO.getMemberId()).orderByDesc(Notices::getCreateDate)
                 );
         internalHomeVO.setTaskNum(noticesList.size());
-            if(CollectionUtils.isNotEmpty(noticesList)){
-                //寰呮垜澶勭悊鐨勬暟鎹�
-                internalHomeVO.setNoticeWaitNum(
-                        noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),noticesDTO.getMemberId())
-                                &&Constants.equalsInteger(i.getStatus(),Constants.ZERO)
-                                &&Constants.equalsInteger(i.getSendacopy(),Constants.ZERO)
-                        ).count()
-                );
-                internalHomeVO.setNoticeDealNum(
-                        noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),noticesDTO.getMemberId())
-                                &&Constants.equalsInteger(i.getStatus(),Constants.ONE)
-                                &&Constants.equalsInteger(i.getSendacopy(),Constants.ZERO)
-                        ).count()
-                );
+        if(CollectionUtils.isNotEmpty(noticesList)){
+            //寰呮垜澶勭悊鐨勬暟鎹�
+            internalHomeVO.setNoticeWaitNum(
+                    noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),noticesDTO.getMemberId())
+                            &&Constants.equalsInteger(i.getStatus(),Constants.ZERO)
+                            &&Constants.equalsInteger(i.getSendacopy(),Constants.ZERO)
+                    ).count()
+            );
+            internalHomeVO.setNoticeDealNum(
+                    noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),noticesDTO.getMemberId())
+                            &&Constants.equalsInteger(i.getStatus(),Constants.ONE)
+                            &&Constants.equalsInteger(i.getSendacopy(),Constants.ZERO)
+                    ).count()
+            );
 
-                internalHomeVO.setNoticeCreateNum(
-                        noticesJoinMapper.selectCount(new QueryWrapper<Notices>().lambda().eq(Notices::getParam3,noticesDTO.getMemberId()))
-                );
+            internalHomeVO.setNoticeCreateNum(
+                    noticesJoinMapper.selectCount(new QueryWrapper<Notices>().lambda().eq(Notices::getParam3,noticesDTO.getMemberId()))
+            );
 
-                internalHomeVO.setNoticeCopyNum(
-                        noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),noticesDTO.getMemberId())
-                                &&Constants.equalsInteger(i.getSendacopy(),Constants.ONE)
-                        ).count()
-                );
-            }
+            internalHomeVO.setNoticeCopyNum(
+                    noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),noticesDTO.getMemberId())
+                            &&Constants.equalsInteger(i.getSendacopy(),Constants.ONE)
+                    ).count()
+            );
+        }
 
         return internalHomeVO;
     }

--
Gitblit v1.9.3