From f1bd6c371da44538248ea8fd479f0f4a2180e337 Mon Sep 17 00:00:00 2001
From: wwl <xchao828@163.com>
Date: 星期四, 26 六月 2025 11:33:45 +0800
Subject: [PATCH] 今日通知,限制电话输入位数,富文本

---
 src/views/system/tijian/index.vue     |    2 
 src/views/system/tongbuDict/index.vue |   57 +++++++
 /dev/null                             |   98 ------------
 vue.config.js                         |    2 
 public/index.html                     |    3 
 src/main.js                           |   76 +-------
 package.json                          |   23 ++
 src/views/system/tijianall/index.vue  |    1 
 src/views/ceshi.vue                   |  198 ++++++++++++++++++++++++
 9 files changed, 296 insertions(+), 164 deletions(-)

diff --git a/package.json b/package.json
index d48b66a..3a3e495 100644
--- a/package.json
+++ b/package.json
@@ -36,31 +36,48 @@
     "url": "https://gitee.com/y_project/RuoYi-Vue.git"
   },
   "dependencies": {
+    "@fortawesome/fontawesome-svg-core": "^6.7.2",
+    "@fortawesome/free-solid-svg-icons": "^6.7.2",
     "@riophae/vue-treeselect": "0.4.0",
+    "@tinymce/tinymce-vue": "^3.2.8",
+    "@tiptap/extension-font-family": "^2.22.3",
+    "@tiptap/extension-image": "^2.22.3",
+    "@tiptap/extension-table": "^2.22.3",
+    "@tiptap/extension-table-cell": "^2.22.3",
+    "@tiptap/extension-table-header": "^2.22.3",
+    "@tiptap/extension-table-row": "^2.22.3",
+    "@tiptap/extension-text-style": "^2.22.3",
+    "@tiptap/starter-kit": "^2.22.3",
+    "@tiptap/vue-2": "^2.22.3",
     "axios": "0.24.0",
     "babel-polyfill": "^6.26.0",
     "big.js": "^6.2.2",
     "clipboard": "2.0.8",
     "cnchar": "^3.2.6",
     "core-js": "3.25.3",
+    "docx": "^9.5.1",
     "echarts": "4.9.0",
     "element-ui": "2.15.10",
     "file-saver": "^2.0.5",
     "fuse.js": "6.4.3",
     "highlight.js": "9.18.5",
+    "html2canvas": "^1.4.1",
     "js-beautify": "1.13.0",
     "js-cookie": "3.0.1",
     "jsbarcode": "^3.11.6",
     "jsencrypt": "3.0.0-rc.1",
+    "jspdf": "^3.0.1",
     "lodash": "^4.17.21",
     "moment": "^2.30.1",
     "nprogress": "0.2.0",
+    "pdfmake": "^0.2.20",
     "pinyin-match": "^1.2.2",
     "print-js": "^1.6.0",
     "quill": "1.3.7",
     "screenfull": "5.0.2",
     "sortablejs": "1.10.2",
     "tduck-form-generator": "^1.8.0",
+    "tinymce": "^7.9.1",
     "ua-parser-js": "^1.0.37",
     "vue": "2.6.12",
     "vue-barcode": "^1.3.0",
@@ -73,6 +90,7 @@
     "vue-qr": "^4.0.9",
     "vue-quill-editor": "^3.0.6",
     "vue-router": "3.4.9",
+    "vue2-editor": "^2.10.3",
     "vuedraggable": "2.24.3",
     "vuex": "3.6.0",
     "xlsx": "^0.18.5"
@@ -97,7 +115,10 @@
     "script-ext-html-webpack-plugin": "2.1.5",
     "script-loader": "^0.7.2",
     "svg-sprite-loader": "5.1.1",
-    "vue-template-compiler": "2.6.12"
+    "vue-loader": "^15.11.1",
+    "vue-template-compiler": "2.6.12",
+    "webpack": "^4.46.0",
+    "webpack-cli": "^3.3.12"
   },
   "engines": {
     "node": ">=8.9",
diff --git a/public/index.html b/public/index.html
index 0499934..3af1e99 100644
--- a/public/index.html
+++ b/public/index.html
@@ -2,6 +2,9 @@
 <html>
 
 <head>
+  <script src="https://cdn.jsdelivr.net/npm/pdfmake@0.2.7/build/pdfmake.min.js"></script>
+<script src="https://cdn.jsdelivr.net/npm/pdfmake@0.2.7/build/vfs_fonts.js"></script>
+
   <meta charset="utf-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
   <meta name="renderer" content="webkit">
diff --git a/src/main.js b/src/main.js
index 0ac844c..7ee26a4 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,10 +1,8 @@
 import Vue from "vue";
-
 import Cookies from "js-cookie";
 import "babel-polyfill";
 import Element from "element-ui";
 import "./assets/styles/element-variables.scss";
-
 import "@/assets/styles/index.scss"; // global css
 import "@/assets/styles/ruoyi.scss"; // ruoyi css
 import App from "./App";
@@ -14,25 +12,7 @@
 import plugins from "./plugins"; // plugins
 import { download } from "@/utils/request";
 import Print from "vue-print-nb";
- 
-// import Updater from "./utils/AutoUpdate.js";
- 
-//鍓嶇閲嶆柊閮ㄧ讲閫氱煡鐢ㄦ埛鍒锋柊缃戦〉
-// const AutoUpdate = new Updater()
-// AutoUpdate.on('update',()=>{
-//   setTimeout(async()=>{
-//       const result = confirm('褰撳墠鐗堟湰宸叉洿鏂帮紝璇风偣鍑荤‘瀹氬埛鏂伴〉闈綋楠�');
-//       if(result){
-//         location.reload();
-//       }
-//   },500)
-// })
- 
-
 import JsonExcel from "vue-json-excel";
-
-Vue.component("downloadExcel", JsonExcel);
-
 import "./assets/icons"; // icon
 import "./permission"; // permission control
 import { getDicts } from "@/api/system/dict/data";
@@ -45,36 +25,27 @@
   selectDictLabels,
   handleTree,
 } from "@/utils/ruoyi";
-// 鍒嗛〉缁勪欢
 import Pagination from "@/components/Pagination";
-// 鍒嗛〉缁勪欢
-
-// import { monitorZoom } from "@/utils/devicePixelRatio.js";
-// const m = monitorZoom();
-// if (window.screen.width * window.devicePixelRatio >= 3840) {
-//   document.body.style.zoom = 100 / (Number(m) / 2); // 灞忓箷涓� 4k 鏃�
-// } else {
-//   document.body.style.zoom = 100 / Number(m);
-// }
-
-// 鑷畾涔夎〃鏍煎伐鍏风粍浠�
 import RightToolbar from "@/components/RightToolbar";
-// 瀵屾枃鏈粍浠�
 import Editor from "@/components/Editor";
-// 鏂囦欢涓婁紶缁勪欢
 import FileUpload from "@/components/FileUpload";
-// 鍥剧墖涓婁紶缁勪欢
 import ImageUpload from "@/components/ImageUpload";
-// 鍥剧墖棰勮缁勪欢
 import ImagePreview from "@/components/ImagePreview";
-// 瀛楀吀鏍囩缁勪欢
 import DictTag from "@/components/DictTag";
-// 澶撮儴鏍囩缁勪欢
 import VueMeta from "vue-meta";
-// 瀛楀吀鏁版嵁缁勪欢
 import DictData from "@/components/DictData";
-
 import * as echarts from "echarts";
+import VueBarcode from "vue-barcode";
+
+Vue.component("downloadExcel", JsonExcel);
+Vue.component("barcode", VueBarcode);
+Vue.component("DictTag", DictTag);
+Vue.component("Pagination", Pagination);
+Vue.component("RightToolbar", RightToolbar);
+Vue.component("Editor", Editor);
+Vue.component("FileUpload", FileUpload);
+Vue.component("ImageUpload", ImageUpload);
+Vue.component("ImagePreview", ImagePreview);
 
 // 鍏ㄥ眬鏂规硶鎸傝浇
 Vue.prototype.getDicts = getDicts;
@@ -87,36 +58,15 @@
 Vue.prototype.download = download;
 Vue.prototype.handleTree = handleTree;
 Vue.prototype.$echarts = echarts;
-import VueBarcode from "vue-barcode";
-Vue.component("barcode", VueBarcode);
-// 鍏ㄥ眬缁勪欢鎸傝浇
-Vue.component("DictTag", DictTag);
-Vue.component("Pagination", Pagination);
-
-Vue.component("RightToolbar", RightToolbar);
-Vue.component("Editor", Editor);
-Vue.component("FileUpload", FileUpload);
-Vue.component("ImageUpload", ImageUpload);
-Vue.component("ImagePreview", ImagePreview);
 
 Vue.use(directive);
 Vue.use(plugins);
 Vue.use(VueMeta);
 Vue.use(Print);
-DictData.install();
-
-/**
- * If you don't want to use mock-server
- * you want to use MockJs for mock api
- * you can execute: mockXHR()
- *
- * Currently MockJs will be used in the production environment,
- * please remove it before going online! ! !
- */
-
 Vue.use(Element, {
   size: Cookies.get("size") || "medium", // set element-ui default size
 });
+DictData.install();
 
 Vue.config.productionTip = false;
 
@@ -125,4 +75,4 @@
   router,
   store,
   render: (h) => h(App),
-});
+});
\ No newline at end of file
diff --git a/src/views/12.vue b/src/views/12.vue
deleted file mode 100644
index b33a203..0000000
--- a/src/views/12.vue
+++ /dev/null
@@ -1,212 +0,0 @@
-<template>
-  <div class="chat-container">
-    <h2 class="chat-title">DeepSeek 鑱婂ぉ瀹�</h2>
-    <div class="message-box">
-      <textarea 
-        v-model="inputMessage" 
-        placeholder="璇疯緭鍏ユ偍鐨勬秷鎭�..."
-        class="chat-input"
-        :disabled="isLoading"
-      ></textarea>
-      <button 
-        @click="sendMessage" 
-        class="send-button" 
-        :disabled="isLoading"
-      >
-        {{ isLoading ? '鍙戦�佷腑...' : '鍙戦�佹秷鎭�' }}
-      </button>
-    </div>
-    <div class="response-area">
-      <p class="response-label">鍥炲:</p>
-      <div class="response-content">{{ reply || '鏆傛棤鍥炲' }}</div>
-    </div>
-    <p v-if="error" class="error-message">{{ error }}</p>
-
-    <!-- 閬僵灞傚拰鍔犺浇鍔ㄧ敾 -->
-    <div v-if="isLoading" class="loading-overlay">
-      <div class="spinner"></div>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'Chat',
-  data() {
-    return {
-      inputMessage: '',
-      reply: '',
-      error: '',
-      isLoading: false // 鏂板鍔犺浇鐘舵��
-    };
-  },
-  methods: {
-    async sendMessage() {
-      if (!this.inputMessage.trim()) {
-        this.error = '娑堟伅涓嶈兘涓虹┖';
-        return;
-      }
-      this.error = '';
-      this.reply = '';
-      this.isLoading = true; // 寮�濮嬪姞杞�
-
-      try {
-        const response = await fetch('http://localhost:11434/api/chat', {
-          method: 'POST',
-          headers: {
-            'Content-Type': 'application/json'
-          },
-          body: JSON.stringify({
-            model: 'ltkj-jy-ai',
-            messages: [
-              {
-                role: 'system',
-                content: this.inputMessage
-              }
-            ],
-            stream: false
-          })
-        });
-
-        if (!response.ok) {
-          throw new Error('缃戠粶鍝嶅簲閿欒');
-        }
-
-        const data = await response.json();
-        this.reply = data.message?.content || '鏀跺埌鍥炲锛屼絾鏍煎紡鍙兘涓嶆纭�';
-      } catch (err) {
-        this.error = '璇锋眰鍑洪敊: ' + err.message;
-        console.error('Fetch 閿欒:', err);
-      } finally {
-        this.isLoading = false; // 缁撴潫鍔犺浇
-      }
-    }
-  }
-};
-</script>
-
-<style scoped>
-.chat-container {
-  max-width: 600px;
-  margin: 0 auto;
-  padding: 20px;
-  background: #f5f7fa;
-  border-radius: 10px;
-  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
-  position: relative; /* 涓洪伄缃╁眰瀹氫綅 */
-}
-
-.chat-title {
-  color: #2c3e50;
-  text-align: center;
-  margin-bottom: 20px;
-  font-family: 'Arial', sans-serif;
-}
-
-.message-box {
-  display: flex;
-  flex-direction: column;
-  gap: 10px;
-}
-
-.chat-input {
-  width: 100%;
-  height: 120px;
-  padding: 15px;
-  border: 1px solid #ddd;
-  border-radius: 8px;
-  resize: none;
-  font-size: 14px;
-  background: #fff;
-  transition: border-color 0.3s;
-}
-
-.chat-input:focus {
-  outline: none;
-  border-color: #3498db;
-  box-shadow: 0 0 5px rgba(52, 152, 219, 0.3);
-}
-
-.chat-input:disabled {
-  background: #f0f0f0;
-  cursor: not-allowed;
-}
-
-.send-button {
-  padding: 10px 20px;
-  background: #3498db;
-  color: white;
-  border: none;
-  border-radius: 8px;
-  cursor: pointer;
-  font-size: 14px;
-  transition: background 0.3s;
-  align-self: flex-end;
-}
-
-.send-button:hover:not(:disabled) {
-  background: #2980b9;
-}
-
-.send-button:disabled {
-  background: #95a5a6;
-  cursor: not-allowed;
-}
-
-.response-area {
-  margin-top: 20px;
-  background: #fff;
-  padding: 15px;
-  border-radius: 8px;
-  border: 1px solid #eee;
-}
-
-.response-label {
-  margin: 0 0 10px 0;
-  color: #7f8c8d;
-  font-size: 14px;
-}
-
-.response-content {
-  color: #2c3e50;
-  line-height: 1.5;
-  word-wrap: break-word;
-}
-
-.error-message {
-  color: #e74c3c;
-  margin-top: 10px;
-  font-size: 14px;
-  text-align: center;
-}
-
-/* 閬僵灞傛牱寮� */
-.loading-overlay {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  background: rgba(0, 0, 0, 0.3);
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  border-radius: 10px;
-  z-index: 10;
-}
-
-/* 鍔犺浇鍔ㄧ敾 */
-.spinner {
-  width: 40px;
-  height: 40px;
-  border: 4px solid #f3f3f3;
-  border-top: 4px solid #3498db;
-  border-radius: 50%;
-  animation: spin 1s linear infinite;
-}
-
-@keyframes spin {
-  0% { transform: rotate(0deg); }
-  100% { transform: rotate(360deg); }
-}
-</style>
\ No newline at end of file
diff --git a/src/views/ceshi.vue b/src/views/ceshi.vue
new file mode 100644
index 0000000..4a8f64d
--- /dev/null
+++ b/src/views/ceshi.vue
@@ -0,0 +1,198 @@
+<template>
+  <div>
+    <h3>鍓嶇 Word 缂栬緫鍣紙TinyMCE锛�</h3>
+    <editor v-model="content" :init="editorInit" :api-key="apiKey"></editor>
+    <div class="actions">
+      <button @click="exportToWord">瀵煎嚭 Word</button>
+      <button @click="exportToPDF">瀵煎嚭 PDF</button>
+    </div>
+  </div>
+</template>
+
+<script>
+import Editor from '@tinymce/tinymce-vue';
+import { Document, Packer, Paragraph, TextRun, ImageRun, Table as DocxTable, TableRow as DocxTableRow, TableCell as DocxTableCell } from 'docx';
+import { saveAs } from 'file-saver';
+import jsPDF from 'jspdf';
+import html2canvas from 'html2canvas';
+
+export default {
+  components: { Editor },
+  data() {
+    return {
+      apiKey: '3ceaxd5ckw4te35xj38vj3p5rmmeyv0x8pq2yrr92rwdiqzp', // 鎮ㄧ殑 TinyMCE API 瀵嗛挜
+      content: `
+
+      `,
+      editorInit: {
+        height: 500,
+        menubar: true,
+        plugins: [
+          'advlist autolink lists link image charmap print preview anchor',
+          'searchreplace visualblocks code fullscreen',
+          'insertdatetime media table paste code help wordcount'
+        ],
+        toolbar:
+          'undo redo | formatselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | image table | removeformat | help',
+        images_upload_handler: (blobInfo, success, failure) => {
+          const reader = new FileReader();
+          reader.onload = () => success(reader.result);
+          reader.onerror = () => failure('鍥剧墖涓婁紶澶辫触');
+          reader.readAsDataURL(blobInfo.blob());
+        },
+        content_style: 'body { font-family: SimSun, Arial; font-size: 14px; }',
+        table_default_attributes: { border: 1 },
+        readonly: false,
+        language: 'zh_CN', // 灏濊瘯 zh-CN
+      },
+    };
+  },
+  methods: {
+    exportToWord() {
+      this.parseHtmlToDocx(this.content).then((elements) => {
+        const doc = new Document({
+          sections: [{ properties: {}, children: elements }],
+        });
+
+        Packer.toBlob(doc).then((blob) => {
+          saveAs(blob, '鏂囨。.docx');
+        }).catch((err) => {
+          console.error('鐢熸垚 Word 澶辫触锛�', err);
+        });
+      }).catch((err) => {
+        console.error('瑙f瀽 HTML 澶辫触锛�', err);
+      });
+    },
+    parseHtmlToDocx(html) {
+      return new Promise((resolve, reject) => {
+        const parser = new DOMParser();
+        const doc = parser.parseFromString(html, 'text/html');
+        const elements = [];
+
+        const processNode = (node, callback) => {
+          if (node.nodeType === Node.ELEMENT_NODE) {
+            if (node.tagName === 'P') {
+              const textRuns = Array.from(node.childNodes).map((child) => {
+                if (child.nodeType === Node.TEXT_NODE) {
+                  return new TextRun({ text: child.textContent || '' });
+                } else if (child.tagName === 'B') {
+                  return new TextRun({ text: child.textContent || '', bold: true });
+                } else if (child.tagName === 'I') {
+                  return new TextRun({ text: child.textContent || '', italics: true });
+                } else if (child.tagName === 'IMG') {
+                  this.getImageBase64FromUrl(child.src).then((base64) => {
+                    callback(null, new ImageRun({
+                      data: base64,
+                      transformation: { width: 200, height: 200 },
+                    }));
+                  }).catch((err) => {
+                    console.error('鍥剧墖鍔犺浇澶辫触锛�', err);
+                    callback(null, new TextRun(`[鍥剧墖: ${child.alt || '鍥惧儚'}]`));
+                  });
+                  return null;
+                }
+                return new TextRun({ text: child.textContent || '' });
+              }).filter(Boolean);
+              if (textRuns.length) {
+                elements.push(new Paragraph({ children: textRuns }));
+              }
+            } else if (node.tagName === 'H1') {
+              elements.push(new Paragraph({ text: node.textContent || '', heading: 'Heading1' }));
+            } else if (node.tagName === 'UL' || node.tagName === 'OL') {
+              Array.from(node.children).forEach((li) => {
+                elements.push(
+                  new Paragraph({
+                    text: li.textContent || '',
+                    bullet: node.tagName === 'UL' ? { level: 0 } : { level: 0, number: true },
+                  })
+                );
+              });
+            } else if (node.tagName === 'TABLE') {
+              const rows = Array.from(node.querySelectorAll('tr')).map((tr) => {
+                const cells = Array.from(tr.querySelectorAll('td, th')).map((cell) => {
+                  return new DocxTableCell({
+                    children: [new Paragraph(cell.textContent || '')],
+                  });
+                });
+                return new DocxTableRow({ children: cells });
+              });
+              elements.push(new DocxTable({ rows }));
+            }
+            Array.from(node.children).forEach((child) => processNode(child, callback));
+          }
+          callback(null);
+        };
+
+        const nodes = Array.from(doc.body.childNodes);
+        let completed = 0;
+        const checkCompletion = () => {
+          completed++;
+          if (completed === nodes.length) {
+            resolve(elements);
+          }
+        };
+
+        if (nodes.length === 0) {
+          resolve(elements);
+        } else {
+          nodes.forEach((node) => {
+            processNode(node, checkCompletion);
+          });
+        }
+      });
+    },
+    getImageBase64FromUrl(url) {
+      return new Promise((resolve, reject) => {
+        fetch(url, { mode: 'cors' })
+          .then((response) => {
+            if (!response.ok) throw new Error('缃戠粶鍥剧墖鍔犺浇澶辫触');
+            return response.blob();
+          })
+          .then((blob) => {
+            const reader = new FileReader();
+            reader.onloadend = () => resolve(reader.result.split(',')[1]);
+            reader.onerror = () => reject(new Error('鍥剧墖璇诲彇澶辫触'));
+            reader.readAsDataURL(blob);
+          })
+          .catch((err) => reject(err));
+      });
+    },
+    exportToPDF() {
+      const contentElement = document.createElement('div');
+      contentElement.innerHTML = this.content;
+      contentElement.style.padding = '10px';
+      document.body.appendChild(contentElement);
+
+      html2canvas(contentElement, { scale: 2 })
+        .then((canvas) => {
+          const doc = new jsPDF();
+          const imgData = canvas.toDataURL('image/png');
+          doc.addImage(imgData, 'PNG', 10, 10, 190, 0);
+          doc.save('鏂囨。.pdf');
+        })
+        .catch((err) => {
+          console.error('鐢熸垚 PDF 澶辫触锛�', err);
+          document.body.removeChild(contentElement);
+        });
+    },
+  },
+};
+</script>
+
+<style>
+.actions {
+  margin-top: 10px;
+}
+.actions button {
+  padding: 8px 16px;
+  margin-right: 10px;
+  background-color: #409eff;
+  color: white;
+  border: none;
+  border-radius: 4px;
+  cursor: pointer;
+}
+.actions button:hover {
+  background-color: #66b1ff;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/index_v1.vue b/src/views/index_v1.vue
deleted file mode 100644
index d2d2ec6..0000000
--- a/src/views/index_v1.vue
+++ /dev/null
@@ -1,98 +0,0 @@
-<template>
-  <div class="dashboard-editor-container">
-
-    <panel-group @handleSetLineChartData="handleSetLineChartData" />
-
-    <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
-      <line-chart :chart-data="lineChartData" />
-    </el-row>
-
-    <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="8">
-        <div class="chart-wrapper">
-          <raddar-chart />
-        </div>
-      </el-col>
-      <el-col :xs="24" :sm="24" :lg="8">
-        <div class="chart-wrapper">
-          <pie-chart />
-        </div>
-      </el-col>
-      <el-col :xs="24" :sm="24" :lg="8">
-        <div class="chart-wrapper">
-          <bar-chart />
-        </div>
-      </el-col>
-    </el-row>
-
-    
-  </div>
-</template>
-
-<script>
-import PanelGroup from './dashboard/PanelGroup'
-import LineChart from './dashboard/LineChart'
-import RaddarChart from './dashboard/RaddarChart'
-import PieChart from './dashboard/PieChart'
-import BarChart from './dashboard/BarChart'
-
-const lineChartData = {
-  newVisitis: {
-    expectedData: [100, 120, 161, 134, 105, 160, 165],
-    actualData: [120, 82, 91, 154, 162, 140, 145]
-  },
-  messages: {
-    expectedData: [200, 192, 120, 144, 160, 130, 140],
-    actualData: [180, 160, 151, 106, 145, 150, 130]
-  },
-  purchases: {
-    expectedData: [80, 100, 121, 104, 105, 90, 100],
-    actualData: [120, 90, 100, 138, 142, 130, 130]
-  },
-  shoppings: {
-    expectedData: [130, 140, 141, 142, 145, 150, 160],
-    actualData: [120, 82, 91, 154, 162, 140, 130]
-  }
-}
-
-export default {
-  name: 'Index',
-  components: {
-    PanelGroup,
-    LineChart,
-    RaddarChart,
-    PieChart,
-    BarChart
-  },
-  data() {
-    return {
-      lineChartData: lineChartData.newVisitis
-    }
-  },
-  methods: {
-    handleSetLineChartData(type) {
-      this.lineChartData = lineChartData[type]
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.dashboard-editor-container {
-  padding: 32px;
-  background-color: rgb(240, 242, 245);
-  position: relative;
-
-  .chart-wrapper {
-    background: #fff;
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width:1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-</style>
diff --git a/src/views/system/tijian/index.vue b/src/views/system/tijian/index.vue
index 3b421a8..37b2ed6 100644
--- a/src/views/system/tijian/index.vue
+++ b/src/views/system/tijian/index.vue
@@ -183,7 +183,7 @@
                 trigger: 'blur',
               },
             ]">
-              <el-input v-model="form.cusPhone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" :disabled="isDisabled"
+              <el-input v-model="form.cusPhone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�"  maxlength="11" :disabled="isDisabled"
                 @input="form.cusPhone = $event.replace(/\s/g, '')" />
             </el-form-item>
 
diff --git a/src/views/system/tijianall/index.vue b/src/views/system/tijianall/index.vue
index afbce3f..6dc5ab7 100644
--- a/src/views/system/tijianall/index.vue
+++ b/src/views/system/tijianall/index.vue
@@ -182,6 +182,7 @@
               ]"
             >
               <el-input
+             maxlength="11"
                 v-model="form.cusPhone"
                 placeholder="璇疯緭鍏ョ數璇�"
                 @input="form.cusPhone = $event.replace(/\s/g, '')"
diff --git a/src/views/system/tongbuDict/index.vue b/src/views/system/tongbuDict/index.vue
new file mode 100644
index 0000000..9bc9412
--- /dev/null
+++ b/src/views/system/tongbuDict/index.vue
@@ -0,0 +1,57 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="閫夋嫨闄㈠尯" prop="status">
+        <el-select v-model="queryParams.status" clearable style="width: 240px">
+          <el-option v-for="area in hospitalAreas" :key="area.hospAreaId" :label="area.hospAreaName"
+            :value="area.hospAreaId" />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" size="mini" @click="tongbu(true)">鍚屾瀛楀吀</el-button>
+        <el-button type="primary" size="mini" @click="tongbu(false)">鍙皟鐢ㄥ瓨鍌ㄨ繃绋�</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+<script>
+import { yuanqu, tongbuzidian } from "@/api/system/dict/type";
+export default {
+  name: "Dict",
+  data() {
+    return {
+
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 瀛楀吀琛ㄦ牸鏁版嵁
+      typeList: [],
+      // 闄㈠尯鏁版嵁
+      hospitalAreas: [],
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        status: undefined
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+    };
+  },
+  created() {
+    yuanqu().then((res) => {
+      this.hospitalAreas = res.data || [];
+      console.log(res);
+    });
+    this.getList();
+  },
+  methods: {
+    tongbu(t) {
+      tongbuzidian(t).then((res) => {
+        console.log(res);
+      })
+    },
+    getAreaName(status) {
+      const area = this.hospitalAreas.find(area => area.hospAreaId === status);
+      return area ? area.hospAreaName : status;
+    }
+  }
+};
+</script>
diff --git a/vue.config.js b/vue.config.js
index ae442c7..6983b38 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -57,7 +57,7 @@
 
         // target: `http://192.168.1.2:5011`,
 
-        target: `http://192.168.1.113:5011`,
+        target: `http://192.168.1.2:5011`,
         // // target: `http://192.168.0.99:8080/ltkj-admin`,
         // target: `https://ltpeis.xaltjdkj.cn:5011/ltkj-admin`,
         // target: `http://10.168.0.9:5011`,  `

--
Gitblit v1.8.0